Merge Android R
Bug: 168057903
Merged-In: I6a389399d923fbb7853d99358d60a20dd85837d4
Change-Id: I1cb96400c470ba75d5667b7b9aee1f4c60354b4e
diff --git a/Android.bp b/Android.bp
index 50a41d0..0d89b00 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,8 +1,24 @@
+genrule {
+ name: "statslog-telecom-java-gen",
+ tools: ["stats-log-api-gen"],
+ cmd: "$(location stats-log-api-gen) --java $(out) --module telecom"
+ + " --javaPackage com.android.server.telecom --javaClass TelecomStatsLog",
+ out: ["com/android/server/telecom/TelecomStatsLog.java"],
+}
+
+filegroup {
+ name: "Telecom-srcs",
+ srcs: [
+ "src/**/*.java",
+ ":statslog-telecom-java-gen",
+ ],
+}
+
// Build the Telecom service.
android_app {
name: "Telecom",
srcs: [
- "src/**/*.java",
+ ":Telecom-srcs",
"proto/**/*.proto",
],
resource_dirs: ["res"],
@@ -25,7 +41,7 @@
static_libs: [
"android-ex-camera2",
"guava",
- "mockito-target-inline",
+ "mockito-target-extended",
"androidx.test.rules",
"platform-test-annotations",
"androidx.legacy_legacy-support-core-ui",
@@ -36,7 +52,7 @@
],
srcs: [
"tests/src/**/*.java",
- "src/**/*.java",
+ ":Telecom-srcs",
"proto/**/*.proto",
],
proto: {
@@ -54,7 +70,10 @@
"android.test.runner",
],
- jni_libs: ["libdexmakerjvmtiagent"],
+ jni_libs: [
+ "libdexmakerjvmtiagent",
+ "libstaticjvmtiagent",
+ ],
aaptflags: [
"--auto-add-overlay",
diff --git a/res/raw/record.ogg b/res/raw/record.ogg
index a023e6d..732b42f 100644
--- a/res/raw/record.ogg
+++ b/res/raw/record.ogg
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index fe7e3d7..2857be3 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Jou oproep is ontkoppel as gevolg van \'n noodoproep wat gemaak word."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Agtergrondoproep"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> het \'n oproep in die agtergrond geplaas. Hierdie program kan dalk toegang tot oudio kry en dit oor die oproep speel."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Omgevalde foonprogram"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Jou foonprogram <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> het omgeval. Jou oproep is voortgesit deur die foonprogram te gebruik wat jy saam met jou toestel gekry het."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> het opgehou reageer"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Jou oproep het die foonprogram gebruik wat saam met jou toestel gekom het"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Oproep stilgemaak."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Luidsprekerfoon geaktiveer."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kan nie nou praat nie. Hoe\'s dit?"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 29873e8..df8215c 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"የአደጋ ጊዜ ጥሪ እየተደረገ ስለሆነ የእርስዎ ጥሪ ተቋርጧል።"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"የጀርባ ጥሪ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ጥሪን ወደ ጀርባ አስቀምጧል። ይህ መተግበሪያ ጥሪው ላይ ኦዲዮ ላይ እየደረሰ ወይም እያጫወተ ሊሆን ይችላል።"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"የተበላሸ የስልክ መተግበሪያ"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"የስልክ መተግበሪያዎ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ተበላሽቷል። ከእርስዎ መሣሪያ ጋር የመጣውን የስልክ መተግበሪያ በመጠቀም ጥሪዎ ቀጥሏል።"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ምላሽ መስጠት አቁሟል"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ጥሪዎ ከእርስዎ መሣሪያ ጋር የመጣውን የስልክ መተግበሪያ ተጠቅሟል"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ጥሪ ፀጥ ብሏል"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"የስልክ ድምፅ ማጉያ ነቅቷል።"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"አሁን ማውራት አልችልም። ሰላም ነው?"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index e9e31ca..7e204d0 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"تم قطع مكالمتك بسبب إجراء مكالمة طوارئ."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"مكالمة في الخلفية"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"وضَع <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> مكالمة في الخلفية. يمكن لهذا التطبيق الوصول إلى الصوت وتشغيله عبر المكالمة."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"لقد تعطّل تطبيق الهاتف"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"لقد تعطّل تطبيق هاتفك <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. تمت مواصلة مكالمتك باستخدام تطبيق \"الهاتف\" الذي أتى مع جهازك."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"توقّف <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> عن الاستجابة"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"تمت مكالمتك باستخدام تطبيق \"الهاتف\" الذي أتى مع جهازك."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"تم كتم صوت المكالمة."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"تم تفعيل مكبر صوت الهاتف."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"لا يمكنني التحدث الآن. ما الأمر؟"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 690b289..2f5de68 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"এট জৰুৰীকালীন কল কৰাৰ কাৰণে আপোনাৰ কলটোৰ সংযোগ বিচ্ছিন্ন কৰা হৈছে।"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"নেপথ্যৰ কল"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>এ নেপথ্যত এটা কল কৰিছে। এই এপ্টোৱে কলটোত অডিঅ’ এক্সেছ আৰু প্লে’ কৰি থাকিব পাৰে।"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ক্ৰেশ্ব হোৱা ফ\'ন এপ্"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"আপোনাৰ ফ\'ন এপ্ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ক্ৰেশ্ব হৈছে। আপোনাৰ ডিভাইচটোৰ লগত অহা ফ\'ন এপ্টো ব্যৱহাৰ কৰি আপোনাৰ কলটো অব্যাহত ৰখা হৈছিল।"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>এ সঁহাৰি দিয়া বন্ধ কৰিছে"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"আপোনাৰ কলটোৱে আপোনাৰ ডিভাইচটোৰ লগত অহা ফ’ন এপ্টো ব্যৱহাৰ কৰিছে"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"কল মিউট কৰা হৈছে।"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"স্পীকাৰফ\'ন সক্ষম কৰা হৈছে।"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"এতিয়া কথা পাতিব নোৱাৰোঁ। কি খবৰ?"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 4867691..d79343f 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Təcili zəng edildiyinə görə zənginizin əlaqəsi kəsildi."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Arxa fon zəngi"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> arxa fonda zəng edib. Bu tətbiq zəng ilə daxil ola və oxuda bilər."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Xəta baş verən telefon tətbiqi"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> tətbiqində xəta baş verdi. Zənginiz cihazda əvvəlcədən quraşdırılmış telefon tətbiqindən davam etdirildi."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> tətbiqində xəta baş verdi"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Zəng üçün cihazda əvvəlcədən quraşdırılan telefon tətbiqindən istifadə edildi"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Səssiz zəng edin."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Spikerfon aktivdir."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"İndi danışmaq olmur. Nə olub?"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 6f1d572..eba8c5c 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Poziv je prekinut jer se upućuje hitni poziv."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Poziv u pozadini"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikacija <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> je uputila poziv u pozadini. Ona može da pristupa zvuku i pušta ga tokom poziva."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikacija za telefoniranje koja je otkazala"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplikacija za telefoniranje <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> je otkazala. Poziv je nastavljen pomoću aplikacije za telefoniranje koju ste dobili uz uređaj."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> više ne reaguje"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Poziv je koristio aplikaciju za telefoniranje koju ste dobili uz uređaj"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Zvuk poziva je isključen."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Spikerfon je omogućen."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"U gužvi sam. O čemu se radi?"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 6033b25..b6dd707 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Бягучы выклік перарваны, бо выконваецца экстранны выклік."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Фонавы выклік"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Праграма \"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>\" перавяла выклік у фонавы рэжым і можа прайграваць аўдыя падчас выкліку."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Збой у праграме \"Тэлефон\""</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"У праграме \"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>\" адбыўся збой. Выклік працягнуты ў стандартнай праграме \"Тэлефон\" на прыладзе."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Праграма \"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>\" не адказвае"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Выклік зроблены ў стандартнай праграме \"Тэлефон\" на прыладзе"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Гук выключаны."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Уключаная гучная сувязь."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Не магу гаварыць. У чым справа?"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 14adb5f..7afddc2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Обаждането ви бе прекъснато, тъй като се извършва спешно обаждане."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Обаждане: заден план"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> постави обаждане на заден план. Приложението може да има достъп до обаждането и да възпроизвежда звук върху него."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Приложение за телефон с прекъсната работа"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Приложението за телефон <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> претърпя срив. Обаждането ви продължи чрез използването на приложението за телефон, което сте получили с устройството си."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> престана да реагира"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Обаждането ви бе извършено с приложението за телефон, което сте получили с устройството си"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Обаждането бе спряно."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Високоговорителят бе активиран."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Сега не мога да говоря. Какво има?"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index f00b48c..cf04d40 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"জরুরী কল করার জন্য আপনার কল ডিসকানেক্ট করা হয়েছে।"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"ব্যাকগ্রাউন্ডের কল"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ব্যাকগ্রাউন্ডে কল রেখেছে। এই অ্যাপটি হয়ত কলের মাধ্যমে অডিও অ্যাক্সেস করে চালাচ্ছে।"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ক্র্যাশ হওয়া ফোন অ্যাপ"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"আপনার ফোন অ্যাপ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ক্র্যাশ হয়েছে। আপনার ডিভাইসের ফোন অ্যাপ ব্যবহার করে করা কল সম্পূর্ণ করা হচ্ছে।"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> কাজ করছে না"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"আপনার ডিভাইসের ফোন অ্যাপ ব্যবহার করে কল করা হত"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"কল মিউট করা আছে৷"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"স্পীকারফোন সক্ষম করা আছে৷"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"এখন কথা বলতে পারছি না৷ কি খবর?"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index dd0e1ad..1968357 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Poziv je prekinut zbog upućivanja hitnog poziva."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Poziv u pozadini"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikacija <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> je uputila poziv u pozadini. Ova aplikacija može pristupati zvuku i reproducirati ga tokom poziva."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Pad aplikacije za telefon"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Došlo je do pada aplikacije za telefon <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. Vaš poziv se nastavio putem aplikacije za telefon koju ste dobili uz uređaj."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Aplikacija <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> je prestala reagirati"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Za poziv se koristila aplikacija za telefon koju ste dobili uz uređaj"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Zvuk poziva je isključen."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Zvučnik je omogućen."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Ne mogu sada pričati. O čemu se radi?"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e860191..69a7b6e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"La teva trucada s\'ha desconnectat perquè s\'ha fet una trucada d\'emergència."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Trucada en segon pla"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ha fet una trucada en segon pla. És possible que aquesta aplicació estigui accedint a l\'àudio i reproduint-lo a través de la trucada."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplicació del telèfon que s\'ha bloquejat"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"L\'aplicació per a telèfons <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> s\'ha bloquejat. La trucada ha continuat amb l\'aplicació que hi ha al dispositiu."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ha deixat de respondre"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"A la trucada s\'ha fet servir l\'aplicació de telèfon que hi ha al dispositiu"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Trucada silenciada."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Altaveu activat."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Ara no puc parlar. Què passa?"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c0b9706..1730a30 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Váš hovor byl odpojen, protože bylo zahájeno tísňové volání."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Hovor na pozadí"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikace <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> přesunula hovor na pozadí. Tato aplikace může v hovoru používat a přehrávat zvuk."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikace na telefonování spadla"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Vaše aplikace na telefonování <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> spadla. Hovor pokračoval přes aplikaci, která byla na vašem zařízení předinstalovaná."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Aplikace <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> přestala reagovat"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Při hovoru byla použita předinstalovaná telefonní aplikace"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Hovor ztlumen."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Reproduktor je zapnutý."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Teď nemůžu mluvit, o co jde?"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a74572b..6a208c4 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Dit opkald er blevet afbrudt, fordi der foretages et nødopkald."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Opkald i baggrunden"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> har foretaget et opkald i baggrunden. Denne app har muligvis adgang til og afspiller lyd i opkaldet."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Opkaldsapp, der er gået ned"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Opkaldsappen <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> er gået ned. Dit opkald fortsatte ved hjælp af den opkaldsapp, din enhed er født med."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> svarer ikke"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Dit opkald brugte den opkaldsapp, din enhed er født med"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Lyd slået fra opkald."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Højttalertelefon aktiveret."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kan ikke tale nu. Hvad sker der?"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 2fe22ad..c434ecc 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Der Anruf wurde beendet, weil ein Notruf getätigt wurde."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Anruf im Hintergrund"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> hat einen Anruf in den Hintergrund verschoben. Diese App greift möglicherweise auf den Anruf zu und spielt Audio darüber ab."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Abgestürzte Telefon-App"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Deine Telefon-App \"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>\" ist abgestürzt. Der Anruf wurde mit der auf deinem Gerät vorinstallierten App fortgesetzt."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> reagiert nicht mehr"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Für den Anruf wurde die auf deinem Gerät vorinstallierte App verwendet"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Anruf stummgeschaltet"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Freisprechfunktion aktiviert"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kann jetzt nicht sprechen. Was gibt\'s?"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index af8768f..ab523c1 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Η κλήση σας αποσυνδέθηκε λόγω πραγματοποίησης κλήσης έκτακτης ανάγκης."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Κλήση στο παρασκήνιο"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Η εφαρμογή <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> πραγματοποίησε μια κλήση στο παρασκήνιο. Η εφαρμογή αυτή ενδέχεται να έχει δικαίωμα προσπέλασης και αναπαραγωγής ήχου κατά τη διάρκεια της κλήσης."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Εφαρμογή τηλεφώνου που αντιμετώπισε σφάλμα λειτουργίας"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Η εφαρμογή τηλεφώνου <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> αντιμετώπισε σφάλμα λειτουργίας. Η κλήση σας συνεχίστηκε μέσω της αρχικής εφαρμογής τηλεφώνου της συσκευής σας."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Η εφαρμογή <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> έπαψε να αποκρίνεται"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Η κλήση σας πραγματοποιήθηκε μέσω της αρχικής εφαρμογής τηλεφώνου της συσκευής σας."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Η κλήση τέθηκε σε σίγαση."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Η ανοικτή συνομιλία ενεργοποιήθηκε."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Δεν μπορώ τώρα. Συμβαίνει κάτι;"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index c95c86e..4de7584 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Your call has been disconnected due to an emergency call being placed."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Background call"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> has placed a call into the background. This app may be accessing and playing audio over the call."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Crashed Phone app"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Your phone app <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> has crashed. You call was continued using the phone app that came with your device."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> stopped responding"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Your call used the phone app that came with your device"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Speakerphone enabled."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Can\'t talk now. What\'s going on?"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index c95c86e..4de7584 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Your call has been disconnected due to an emergency call being placed."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Background call"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> has placed a call into the background. This app may be accessing and playing audio over the call."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Crashed Phone app"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Your phone app <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> has crashed. You call was continued using the phone app that came with your device."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> stopped responding"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Your call used the phone app that came with your device"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Speakerphone enabled."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Can\'t talk now. What\'s going on?"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c95c86e..4de7584 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Your call has been disconnected due to an emergency call being placed."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Background call"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> has placed a call into the background. This app may be accessing and playing audio over the call."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Crashed Phone app"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Your phone app <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> has crashed. You call was continued using the phone app that came with your device."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> stopped responding"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Your call used the phone app that came with your device"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Speakerphone enabled."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Can\'t talk now. What\'s going on?"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index c95c86e..4de7584 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Your call has been disconnected due to an emergency call being placed."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Background call"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> has placed a call into the background. This app may be accessing and playing audio over the call."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Crashed Phone app"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Your phone app <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> has crashed. You call was continued using the phone app that came with your device."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> stopped responding"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Your call used the phone app that came with your device"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Speakerphone enabled."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Can\'t talk now. What\'s going on?"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 55d8347..3b3a983 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -31,10 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Your call has been disconnected due to an emergency call being placed."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Background call"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> has placed a call into the background. This app may be accessing and playing audio over the call."</string>
- <!-- no translation found for notification_crashedInCallService_title (7440244344965656743) -->
- <skip />
- <!-- no translation found for notification_crashedInCallService_body (7821729360036047995) -->
- <skip />
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> stopped responding"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Your call used the phone app that came with your device"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Speakerphone enabled."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Can\'t talk now. What\'s up?"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index bef0f39..826b877 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Se desconectó tu llamada porque se está haciendo una llamada de emergencia."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Llamada en 2.° plano"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> movió una a segundo plano. Es posible que esta app acceda a la llamada y reproduzca audio."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"App de teléfono con fallas"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Tu app de teléfono <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> falló. La llamada continuó a través de la app de teléfono de tu dispositivo."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> dejó de responder"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Tu llamada se hizo con la app de teléfono que venía en tu dispositivo"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Llamada silenciada"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Altavoz habilitado"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"No puedo hablar ahora. ¿Todo bien?"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3ec6c54..e124de4 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Se ha interrumpido tu llamada debido a una llamada de emergencia."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Llamada en segundo plano"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ha llamado en segundo plano. Puede que esta aplicación acceda al audio y lo reproduzca durante la llamada."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplicación para teléfonos bloqueada"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Tu aplicación para teléfonos <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> se ha bloqueado. La llamada continuó con la aplicación para teléfonos de tu dispositivo."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ha dejado de responder"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"La llamada se utilizó la aplicación para teléfonos que venía con tu dispositivo"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Llamada silenciada"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Altavoz habilitado"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"No puedo hablar. ¿Es importante?"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 0fdb5ae..bb291ad 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Teie kõne katkestati, kuna alustati hädaabikõnet."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Taustal olev kõne"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> lülitas kõne taustale. See rakendus võib helile juurde pääseda ja seda kõne ajal esitada."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Kokkujooksnud telefonirakendus"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Teie telefonirakendus <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> jooksis kokku. Kõnet jätkati teie seadmega kaasas olnud telefonirakendusega."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> lõpetas reageerimise"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Teie kõne kasutas teie seadmega kaasas olnud telefonirakendust"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Kõne on summutatud."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Valjuhääldi on sisse lülitatud."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Ei saa praegu rääkida. Milles asi?"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 8f557f0..c8956cd 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Deia deskonektatu egin da, larrialdi-dei bat egiten ari zarelako."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Atzeko planoko deia"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> aplikazioak atzeko planoan jarri du deia. Baliteke aplikazioak audioa atzitzea eta erreproduzitzea deian zehar."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Telefonoko aplikazioak huts egin du"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> telefono-aplikazioak huts egin du. Gailuaren telefono-aplikazioa erabilita jarraitu da deia egiten."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Erantzuteari utzi dio <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> aplikazioak"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Gailuaren telefono-aplikazioarekin egin da deia"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Deiaren audioa desaktibatu da."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Bozgorailua gaitu da."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Ezin dut hitz egin. Arazoren bat al dago?"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index aef61f3..c873159 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"بهدلیل برقراری تماس اضطراری، تماس شما قطع شده است."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"تماس پسزمینه"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> تماسی را در پسزمینه قرار داد. ممکن است این برنامه درحین تماس به صدا دسترسی پیدا کند و آن را پخش کند."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"برنامه خراب تلفن"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"«برنامه تلفن» <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> خراب شده است. تماستان بااستفاده از «برنامه تلفن» ارائهشده در دستگاه ادامه پیدا کرد."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> متوقف شد"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"تماستان بااستفاده از برنامه تلفن ارائهشده در دستگاهتان برقرار شد"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"تماس نادیده گرفته شد."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"تلفن آیفوندار فعال شد."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"الآن نمیتوانم صحبت کنم. موضوع چیست؟"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 89e2622..cf57d62 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Puhelusi on katkaistu hätäpuhelun soittamisen vuoksi."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Taustapuhelu"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> on asettanut puhelun taustalle. Tämä sovellus voi käyttää ja toistaa ääntä puhelun päällä."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Kaatunut puhelinsovellus"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Puhelinsovellus <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> kaatui. Puhelua jatkettiin laitteen mukana tulleella puhelinsovelluksella."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> lakkasi vastaamasta"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Puhelu soitettiin laitteen mukana tulleella puhelinsovelluksella"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Puhelu mykistetty."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Kaiutin käytössä."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"En voi vastata. Mitä asiaa?"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 70c8366..74faab9 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Votre appel a été déconnecté en raison d\'un appel d\'urgence en cours de lancement."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Appel en arrière-plan"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> a passé un appel en arrière-plan. Cette application peut accéder à l\'audio de l\'appel et faire jouer un contenu audio par l\'intermédiaire de l\'appel."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"L\'application téléphonique a planté"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Votre application téléphonique <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> a planté. Votre appel s\'est poursuivi au moyen de l\'application téléphonique intégrée à votre appareil."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> a arrêté de répondre"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Votre appel a utilisé l\'application Téléphone intégrée à votre appareil"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Son coupé"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Haut-parleur activé"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Peux pas parler. Quoi de neuf?"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index dc6cac8..c2a95a2 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Votre appel a été interrompu en raison d\'un appel d\'urgence."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Appel en arrière-plan"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> a placé un appel en arrière-plan. Il est possible que cette application lise des fichiers audio pendant l\'appel."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Une application d\'appel a planté"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"L\'application <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> a planté. L\'appel s\'est poursuivi dans l\'application d\'appel préinstallée sur votre appareil."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> a cessé de répondre"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"L\'appel s\'est poursuivi dans l\'application d\'appel préinstallée sur votre appareil"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Son coupé"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Haut-parleur activé"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Je ne peux pas répondre. Ça va ?"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6f7f886..42c55d6 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Desconectouse a chamada porque se realizou unha chamada de emerxencia."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Chamada seg. plano"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> chamou en segundo plano. Pode que esta aplicación acceda ao audio e o reproduza durante a chamada."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Fallou a aplicación de teléfono"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Fallou a aplicación de teléfono <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. A chamada continuou coa aplicación Teléfono do teu dispositivo."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> deixou de responder"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Usouse a aplicación para teléfonos que ven co teu dispositivo na chamada"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Chamada silenciada"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Altofalante activado"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Non podo falar agora. Que pasa?"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 69fcf28..7455080 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ઇમર્જન્સી કૉલને કારણે તમારો કૉલ ડિસ્કનેક્ટ કરવામાં આવ્યો છે."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"બૅકગ્રાઉન્ડ કૉલ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>એ કૉલ બેકગ્રાઉન્ડમાં રાખ્યો છે. આ ઍપ કૉલ પરથી ઑડિયો ઍક્સેસ કરીને તેને ચલાવી શકે છે."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ફોન ઍપ ક્રૅશ થઈ"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"તમારી ફોન ઍપ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ક્રૅશ થઈ ગઈ છે. તમારો કૉલ તમારા ડિવાઇસમાં પહેલેથી ઇન્સ્ટૉલ કરેલી ફોન ઍપનો ઉપયોગ કરીને ચાલુ રાખવામાં આવ્યો છે."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ઍપ પ્રતિસાદ આપી રહી નથી"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"તમારા કૉલ માટે તમારા ડિવાઇસમાં પહેલેથી ઇન્સ્ટૉલ કરેલી ફોન ઍપનો ઉપયોગ કરવામાં આવ્યો"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"કૉલ મ્યૂટ કરેલ છે."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"સ્પીકરફોન પસંદ કરેલ છે."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"હમણાં વાત નહીં કરી શકું. શું હતું?"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index b31e4c8..ed623b8 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"एक आपातकालीन कॉल किया जा रहा है, इसलिए आपका कॉल डिसकनेक्ट कर दिया गया है."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"बैकग्राउंड कॉल"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ने कॉल को बैकग्राउंड में रखा है हो सकता है कि यह ऐप्लिकेशन आपके कॉल से ऑडियो ऐक्सेस करके उसे चला रहा हो."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"फ़ोन ऐप्लिकेशन जो बंद हो गया"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"आपका फ़ोन ऐप <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> बंद हो गया है. आपके कॉल को डिवाइस में पहले से इंस्टॉल फ़ोन ऐप का इस्तेमाल करके जारी रखा गया है."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ऐप्लिकेशन बंद हो गया है"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"कॉल करने के लिए, आपके डिवाइस में पहले से मौजूद फ़ोन ऐप्लिकेशन का इस्तेमाल किया गया"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"कॉल म्यूट की गई."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"स्पीकरफ़ोन सक्षम."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"अभी बात नहीं हो सकती. क्या हो रहा है?"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 5249d25..ff38e54 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Poziv je prekinut zbog hitnog poziva."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Poziv u pozadini"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikacija <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> prebacila je poziv u pozadinu. Ta aplikacija možda pristupa zvuku i reproducira ga putem poziva."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikacija telefona srušila se"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplikacija telefona <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> srušila se. Vaš je poziv nastavljen pomoću aplikacije telefona koju ste dobili na uređaju."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> više ne odgovara"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Vaš je poziv upotrijebio aplikaciju telefona koju ste dobili na uređaju"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Zvuk poziva isključen."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Zvučnik je omogućen."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Sada ne mogu razgovarati. Što ima?"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index c1479da..55e5535 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Segélyhívást kezdeményeztek, ezért az Ön hívását megszakítottuk."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Háttérbeli hívás"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"A(z) <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> a háttérbe helyezett egy hívást. Ez az alkalmazás hozzáférhet a híváshoz, és hangot játszhat le benne."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Telefonalkalmazás összeomlása"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> nevű telefonalkalmazása összeomlott. A hívása a készülékéhez mellékelt telefonalkalmazásban folyatódott."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"A(z) <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> lefagyott"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"A hívása a készülékhez mellékelt telefonalkalmazást használta"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Hívás némítva."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Kihangosítás engedélyezve."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Most nem alkalmas. Mi újság?"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index a182c06..6987dab 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Ձեր զանգն ընդհատվեց շտապ կանչի պատճառով։"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Ֆոնային զանգ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> հավելվածը տեղափոխեց զանգը ֆոնային ռեժիմ և կարող է զանգի ընթացքում աուդիո ֆայլ նվագարկել:"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Հեռախոսի հավելվածի աշխատանքը խափանվեց"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Սխալի պատճառով հեռախոսի ձեր հավելվածի (<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>) աշխատանքը խափանվեց։ Զանգը շարունակվեց արտադրողի կողմից ձեր սարքում տեղադրված հեռախոսի հավելվածով։"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> հավելվածը չի արձագանքում"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Զանգն իրականացվեց արտադրողի կողմից ձեր սարքում տեղադրված հեռախոսի հավելվածով։"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Զանգը խլացված է:"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Բարձրախոսը միացված է:"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Հիմա չեմ կարող խոսել: Ի՞նչ կա:"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index bb1c189..23ebb73 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Panggilan Anda terputus karena ada panggilan darurat."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Panggilan latar belakang"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> telah menempatkan panggilan telepon ke latar belakang. Aplikasi ini mungkin mengakses dan memutar audio melalui panggilan telepon."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikasi telepon error"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplikasi telepon <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> mengalami error. Panggilan Anda dilanjutkan menggunakan aplikasi telepon bawaan perangkat Anda."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> berhenti merespons"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Panggilan Anda menggunakan aplikasi telepon bawaan perangkat Anda"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Panggilan disenyapkan."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Pengeras suara ponsel diaktifkan."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Tak bisa bicara sekarang. Ada apa?"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index e25931a..442b9d5 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Símtalið var aftengt vegna þess að neyðarsímtal var hringt."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Bakgrunnssímtal"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> hefur sett símtal í bakgrunn. Hugsanlega fær þetta forrit aðgang að hljóði yfir símtalið og spilar það."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Hrun í símaforriti"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Símaforritið <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> hrundi. Haldið var áfram með símtalið í símaforritinu sem fylgdi tækinu."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> hætti að svara"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Símtalið þitt notaði símaforritið sem fylgdi tækinu"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Símtal þaggað."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Kveikt á hátalara."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kemst ekki í símann. Eitthvað títt?"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ec2cad9..60f32d7 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"La tua chiamata è stata disconnessa per dare priorità a una chiamata di emergenza."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"In sottofondo"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ha spostato una chiamata in sottofondo. L\'app potrà accedere all\'audio e riprodurlo in sovrapposizione alla chiamata."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"App per telefono arrestata in modo anomalo"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"La tua app per telefono <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ha avuto un arresto anomalo. La tua chiamata ha potuto continuare mediante l\'app per telefono integrata nel tuo dispositivo."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> non risponde più"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Per la tua chiamata è stata utilizzata l\'app per telefono integrata nel tuo dispositivo"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Chiamata disattivata."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Vivavoce attivo."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Non posso parlare ora. Che succede?"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5bd8c16..30a909b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"השיחה נותקה בגלל שיחת חירום."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"שיחה ברקע"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"האפליקציה <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> התחילה שיחה ברקע. ייתכן שלאפליקציה יש גישה לאודיו או שהיא משמיעה אודיו בשיחה."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"אפליקציית טלפון קרסה"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"אפליקציית השיחות <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> קרסה. השיחה נמשכה באפליקציית השיחות של המכשיר."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"אפליקציית <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> הפסיקה להגיב"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"השיחה הייתה דרך אפליקציית הטלפון המקורית של המכשיר"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"שיחה מושתקת."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"רמקול מופעל."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"לא נוח לי עכשיו. מה קורה?"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ed2bd4a..e157655 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"緊急通報番号宛に発信中のため、通話が切断されました。"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"バックグラウンド通話"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> が通話をバックグラウンドに切り替えました。これで、このアプリは通話を通じて音声にアクセスして再生できます。"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"スマートフォン アプリがクラッシュしました"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"ご利用の通話アプリ(<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>)がクラッシュしました。通話は、デバイスにプリインストールされていた通話アプリを使用して継続されました。"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> が応答しなくなりました"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"通話には、ご利用のデバイスにプリインストールされていた通話アプリが使用されていました"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"通話がミュートされています。"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"スピーカーが有効です。"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ただいま電話に出られません。ご用件をお知らせください。"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 5daa303..be27e8b 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"თქვენი ზარი გაითიშა, რადგან ხორციელდება გადაუდებელი ზარი."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"ზარი ფონში"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>-მა განათავსა ზარი ფონში. ამ აპმა შეიძლება წვდომა იქონიოს აუდიოზე ზარიდან და დაუკრას ის."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ავარიულად გათიშული ტელეფონის აპი"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"თქვენი ტელეფონის აპი <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> გათიშულია ავარიულად. თქვენი ზარი გაგრძელდა იმ ტელეფონის აპის გამოყენებით, რომელიც თქვენს მოწყობილობას მოჰყვა."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>-მა რეაგირება შეწყვიტა"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"თქვენმა ზარმა გამოიყენა ტელეფონის აპი, რომელიც თქვენს მოწყობილობას მოჰყვა"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ზარი დადუმებულია."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"სპიკერები ჩართულია."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ვერ ვპასუხობ. რა ხდება?"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 50c63d1..0bab244 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Құтқару қызметіне қоңырау шалғандықтан, қоңырауыңыз ажыратылды."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Фондық қоңырау"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> қоңырауды фондық режимге ауыстырды. Бұл қолданба қоңырау барысында аудионы пайдалана және ойната алады."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Бұзылған телефон қолданбасы"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> телефон қолданбасы бұзылды. Қоңырау құрылғының әдепкі телефон қолданбасы арқылы жалғастырылды."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> жауап бермейді"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Қоңырау құрылғының әдепкі телефон қолданбасы арқылы шалынды."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Қоңырау үнсіздендірілген."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Үндеткішті телефон қосылды."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Қазір сөйлесе алмаймын. Не болды?"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 018f098..58b2abf 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ការហៅទូរសព្ទរបស់អ្នកត្រូវបានផ្ដាច់ ដោយសារតែកំពុងធ្វើការហៅទៅលេខសង្គ្រោះបន្ទាន់។"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"ការហៅនៅផ្ទៃខាងក្រោយ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> បានធ្វើការហៅទូរសព្ទនៅផ្ទៃខាងក្រោយ។ កម្មវិធីនេះអាចកំពុងចូលប្រើប្រាស់ និងចាក់សំឡេងតាមការហៅទូរសព្ទ។"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"កម្មវិធីទូរសព្ទគាំង"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"កម្មវិធីទូរសព្ទ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> របស់អ្នកបានគាំង។ ការហៅទូរសព្ទរបស់អ្នកត្រូវបានបន្តដោយប្រើប្រាស់កម្មវិធីទូរសព្ទដែលមានភ្ជាប់មកជាមួយឧបករណ៍របស់អ្នក។"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> បានគាំង"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ការហៅទូរសព្ទរបស់អ្នកបានប្រើប្រាស់កម្មវិធីទូរសព្ទដែលភ្ជាប់មកជាមួយឧបករណ៍របស់អ្នក"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ការហៅបិទសំឡេង។"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"បានបើកអូប៉ាល័រទូរស័ព្ទ។"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"មិនអាចនិយាយបានទេ ឥឡូវនេះ។ មានការអីដែរ?"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 0de7e86..6e0bb59 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ತುರ್ತು ಕರೆಯನ್ನು ಮಾಡುತ್ತಿರುವ ಕಾರಣ ನಿಮ್ಮ ಕರೆಯನ್ನು ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"ಹಿನ್ನೆಲೆ ಕರೆ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ಆ್ಯಪ್, ಕರೆಯನ್ನು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಇರಿಸಿದೆ. ಈ ಆ್ಯಪ್ ಕರೆಯ ಮೂಲಕ ಆಡಿಯೊವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಮತ್ತು ಪ್ಲೇ ಮಾಡಬಹುದು."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ಕ್ರ್ಯಾಶ್ ಆಗಿರುವ ಫೋನ್ ಆ್ಯಪ್"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"ನಿಮ್ಮ ಫೋನ್ ಆ್ಯಪ್ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ. ಸಾಧನದ ಜೊತೆಗೆ ನೀಡಲಾದ ಫೋನ್ ಆ್ಯಪ್ ಬಳಸಿ ನಿಮ್ಮ ಕರೆಯನ್ನು ಮುಂದುವರಿಸಲಾಗಿದೆ."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ಪ್ರತಿಕ್ರಿಯಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿದೆ"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ನಿಮ್ಮ ಕರೆಯು ಸಾಧನದ ಜೊತೆಗೆ ನೀಡಲಾದ ಫೋನ್ ಆ್ಯಪ್ ಅನ್ನು ಬಳಸಿದೆ."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ಕರೆಯನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"ಸ್ಪೀಕರ್ಫೋನ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ಕ್ಷಮಿಸಿ, ಈಗ ಮಾತನಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸಮಾಚಾರವೇನು?"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index a6de7c6..1a29b2e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"긴급 전화 연결로 인해 통화가 연결 해제되었습니다."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"백그라운드 통화"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>에서 통화를 백그라운드로 전환했습니다. 앱이 통화에 사용되는 오디오에 액세스하거나 재생 중일 수 있습니다."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"다운된 전화 앱"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"전화 앱 <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>이(가) 다운되었습니다. 통화는 기기의 기본 전화 앱을 사용하여 계속 진행되었습니다."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>의 응답이 중지됨"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"기기의 기본 전화 앱을 사용하여 통화했습니다."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"통화가 음소거되었습니다."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"스피커폰이 사용 설정되었습니다."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"통화 불가. 용무를 남겨주세요."</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index c11313d..83e498e 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Учурда шашылыш чалуудан улам, чалууңуз ажыратылган."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Фондогу чалуу"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> чалууну фонго койгон. Бул колдонмо чалуу аркылуу аудиого кирип, ойното алат."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Телефондун колдонмосунда ката кетти"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> телефон колдонмоңузда ката кеткен. Чалууңуз түзмөгүңүз менен келген телефон колдонмосу пайдаланып улантылган."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> жооп берүүнү токтотту"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Чалууңуз түзмөгүңүз менен келген телефон колдонмосун пайдаланды"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Чалуу үнсүз тартипте."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Динамик иштеп жатат."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Азыр сүйлөшө албайм. Эмне болду?"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 14c7ff5..64142ca 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ສາຍໂທຂອງທ່ານໄດ້ຖືກຕັດແລ້ວ ເນື່ອງຈາກກຳລັງມີການໂທສຸກເສີນຢູ່."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"ການໂທໃນພື້ນຫຼັງ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ວາງການໂທໄວ້ພື້ນຫຼັງແລ້ວ. ແອັບນີ້ອາດເຂົ້າເຖິງ ແລະ ຫຼິ້ນສຽງຜ່ານການໂທໄດ້."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ແອັບໂທລະສັບຂັດຂ້ອງ"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"ແອັບໂທລະສັບຂອງທ່ານ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ຂັດຂ້ອງ. ການໂທຂອງທ່ານສືບຕໍ່ໂດຍໃຊ້ແອັບໂທລະສັບທີ່ມາພ້ອມກັບອຸປະກອນຂອງທ່ານ."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ໄດ້ຢຸດການຕອບສະໜອງແລ້ວ"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ການໂທຂອງທ່ານໃຊ້ແອັບໂທລະສັບທີ່ມາພ້ອມກັບອຸປະກອນຂອງທ່ານ"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ປິດສຽງການໂທແລ້ວ."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"ເປີດລຳໂພງແລ້ວ."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ບໍ່ສາມາດລົມໄດ້ໃນຕອນນີ້. ມີຫຍັງບໍ່?"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index d09db32..29090d1 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Skambutis buvo atjungtas dėl atliekamo skambučio pagalbos numeriu."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Skambutis fone"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Programa „<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>“ perkėlė skambutį į foną. Ši programa gali pasiekti ir leisti garsą vykstant skambučiui."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Užstrigusi telefono programa"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Telefono programa „<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>“ užstrigo. Skambutis buvo tęsiamas naudojant telefono programą, kuri buvo įrenginyje jį įsigijus."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Programa „<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>“ nebereaguoja"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Atliekant skambutį buvo naudojama telefono programa, kuri buvo įrenginyje jį įsigijus"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Skambutis nutildytas."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Garsiakalbis įgalintas."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Dabar negaliu kalbėti. Kas nutiko?"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index b28b798..782777d 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Jūsu zvans ir pārtraukts, jo tiek veikts ārkārtas izsaukums."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Saruna fonā"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> pārcēla sarunu uz darbību fonā. Sarunas laikā šī lietotne var piekļūt audio saturam un to atskaņot."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Avarējusī tālruņa lietotne"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Jūsu tālruņa lietotne <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> avarēja. Zvans tika turpināts, izmantojot ierīcē iebūvēto tālruņa lietotni."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> pārtrauca reaģēt"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Zvanam tika izmantota jūsu ierīcē iebūvētā tālruņa lietotne"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Zvana skaņa ir izslēgta."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Skaļrunis ir iespējots."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Nevaru runāt. Kas gadījās?"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index e2cc553..23c8033 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Повикот ќе се исклучи поради воспоставувањето итен повик."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Повик во заднина"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> воспостави повик во заднината. Апликацијава можеби пристапува до и пушта аудио во повикот."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Падната апликација за телефон"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Апликацијата за телефон <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> падна. Повикот продолжи на апликацијата за телефон што дојде со уредот."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> падна"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Повикот се обави на апликацијата за телефон што дојде со уредот"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Повикот е со исклучен звук"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Интерфонот е овозможен."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Не можам да зборувам сега. Што има?"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 17e9fe6..5c64034 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ഒരു അടിയന്തര കോൾ നടക്കുന്നതിനാൽ നിങ്ങളുടെ കോൾ വിച്ഛേദിക്കപ്പെട്ടിരിക്കുന്നു."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"പശ്ചാത്തല കോൾ"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> കോൾ പശ്ചാത്തലത്തിലേക്ക് മാറ്റി. കോൾ ചെയ്യുമ്പോൾ ഈ ആപ്പിന് ഓഡിയോ ആക്സസ് ചെയ്യാനും പ്ലേ ചെയ്യാനും കഴിഞ്ഞേക്കാം."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ക്രാഷായ ഫോൺ ആപ്പ്"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"നിങ്ങളുടെ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ഫോൺ ആപ്പ് ക്രാഷായി. നിങ്ങളുടെ ഉപകരണത്തിനൊപ്പം ലഭ്യമായ ഫോൺ ആപ്പ് മുഖേന കോൾ തുടർന്നു."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ആപ്പ് പ്രതികരിക്കുന്നത് നിർത്തി"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"നിങ്ങളുടെ കോൾ, നിങ്ങളുടെ ഉപകരണത്തിനൊപ്പം ലഭ്യമായ ഫോൺ ആപ്പ് ഉപയോഗിച്ചു"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"കോൾ നിശബ്ദമാക്കി."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"സ്പീക്കർഫോൺ പ്രവർത്തനക്ഷമമാക്കി."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ഇപ്പോൾ സംസാരിക്കാനാകില്ല. എന്താ വിളിച്ചത്?"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 8d8badc..c941fdd 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Яаралтай дуудлага ирсэн тул таны дуудлагыг салгалаа."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Арын дуудлага"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> дуудлагыг ард оруулсан байна. Энэхүү апп нь дуудлагаар аудиод хандаж, тоглуулж байна."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Гэмтсэн гар утасны апп"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Таны гар утасны апп болох <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> гэмтсэн байна. Таны дуудлагыг таны төхөөрөмжтэй хамт ирсэн гар утасны аппаар үргэлжлүүлсэн."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> хариу өгөхөө больсон"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Таны дуудлагыг таны төхөөрөмжтэй хамт ирсэн гар утасны аппаар хийсэн"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Дууг хаасан."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Чанга яригчийг идэвхжүүлсэн."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Ярих боломжгүй байна. Сонин юу байна?"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 15931be..3b87593 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"आणीबाणी कॉल केल्यामुळे तुमचा कॉल डिस्कनेक्ट केला गेला आहे."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"बॅकग्राउंड कॉल"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> यांनी कॉल बॅकग्राउंडवर ठेवला आहे हे ॲप कदाचित कॉलद्वारे ऑडिओ ॲक्सेस आणि प्ले करत आहे."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"क्रॅश झालेले फोन ॲप"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"तुमचे फोन ॲप <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> क्रॅश झाले. तुमच्या डिव्हाइससोबत दिलेले फोन अॅप वापरून तुमचा कॉल पुढे सुरू ठेवला गेला."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ने प्रतिसाद देणे थांबवले आहे"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"तुमच्या कॉलने डिव्हाइससोबत दिलेले फोन अॅप वापरले आहे"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"कॉल नि.शब्द केला."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"स्पीकरफोन सक्षम केला."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"आत्ता बोलू शकत नाही. कशासाठी कॉल केला होता?"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 764f3ec..b43b554 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Panggilan anda telah diputuskan sambungan kerana panggilan kecemasan sedang dibuat."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Panggilan latar blkg"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> telah meletakkan panggilan dalam latar belakang Apl ini mungkin mengakses dan memainkan audio mengatasi panggilan."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikasi telefon yang ranap"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Apl telefon anda, <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> telah ranap. Panggilan anda telah diteruskan menggunakan apl telefon yang disertakan dengan peranti anda."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> telah berhenti memberikan respons"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Panggilan anda telah menggunakan aplikasi telefon yang disertakan bersama peranti anda"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Panggilan diredam."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Telefon pembesar suara didayakan."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Sedang sibuk. Ada apa?"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 9203df3..c1b3124 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"အရေးပေါ်ဖုန်းခေါ်ဆိုမှု ပြုလုပ်နေသောကြောင့် သင်၏ ခေါ်ဆိုမှုကို ဖြတ်တောက်လိုက်သည်။"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"နောက်ခံမှ ခေါ်ဆိုမှု"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> သည် ခေါ်ဆိုမှုကို နောက်ခံသို့ ထည့်လိုက်ပါသည်။ ဤအက်ပ်သည် ခေါ်ဆိုမှုမှတစ်ဆင့် အသံများကို သုံးခြင်းနှင့် ဖွင့်ခြင်းတို့ ပြုလုပ်နိုင်ပါသည်။"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ရပ်တန့်သွားသော ဖုန်းအက်ပ်"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"သင်၏ ဖုန်းအက်ပ် <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ရပ်တန့်သွားသည်။ သင့်စက်ပစ္စည်းနှင့် အတူပါလာသော ဖုန်းအက်ပ်သုံးပြီး ခေါ်ဆိုမှုကို ဆက်လက်ပြုလုပ်ထားသည်။"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> က တုံ့ပြန်ခြင်းကို ရပ်လိုက်သည်"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"သင့်စက်ပစ္စည်းနှင့် အတူပါလာသော ဖုန်းအက်ပ်သုံးပြီး ခေါ်ဆိုမှုကို ပြုလုပ်ထားသည်"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"နားထောင်ရုံသာ (စကားပြောပိတ်ထားသည်)"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"စပီကာဖုန်း သုံးလို့ရသည်"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"အခုပြောလို့မရဘူး။ အကြောင်းထူးရှိလား။"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index bebd828..3f65c62 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Samtalen din ble brutt fordi et nødanrop ble utført."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Bakgrunnsanrop"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> har flyttet et anrop til bakgrunnen. Det kan hende denne appen bruker og spiller av lyd over anropet."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Krasjet telefonapp"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Telefonappen din, <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>, har krasjet. Anropet ditt ble fortsatt med telefonappen som fulgte med enheten din."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> sluttet å svare"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Anropet ble gjort med telefonappen som fulgte med enheten din"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Samtalelyd er kuttet."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Høyttaler er aktivert."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kan ikke snakke nå. Hva skjer?"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 1b255c7..e65fa1d 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"आपत्कालीन कल जारी रहेको हुनाले तपाईंको कल विच्छेद गरिएको छ।"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"पृष्ठभूमिको कल"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ले एउटा कल पृष्ठभूमिमा राखेको छ। कल गरेको बेला यो अनुप्रयोगले अडियोमाथि पहुँच राखेर प्ले गरिरहेको हुन सक्छ।"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"क्र्यास भएको फोन एप"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"तपाईंको फोन एप <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> क्र्यास भएको छ। तपाईंको यन्त्रमा पहिलेदेखि नै रहेको फोन एप प्रयोग गरी तपाईंको कल जारी राखिएको थियो।"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ले काम गर्न छाड्यो"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"कल गर्नका लागि तपाईंको यन्त्रमा पहिल्यैदेखि रहेको फोन एप प्रयोग गरियो"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"कल म्युट भयो।"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"स्पिकरफोन सक्षम भयो।"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"अहिले कुरा गर्न मिल्दैन। के भइरहेको छ?"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index fb234c0..166e95d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Je gesprek is beëindigd omdat er een noodoproep is geplaatst."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Achtergrondgesprek"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> heeft een gesprek op de achtergrond geplaatst. Deze app kan audio openen en afspelen over het gesprek."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Gecrashte telefoon-app"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Je telefoon-app <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> is gecrasht. Je gesprek is voortgezet met de telefoon-app van je apparaat."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> reageert niet meer"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Voor je gesprek is de telefoon-app van je apparaat gebruikt"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Gesprek gedempt."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Luidspreker is aan."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kan nu niet opnemen. Alles goed?"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 3acd5a0..e0061a7 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ଏକ ଜରୁରୀକାଳୀନ କଲ୍ କରାଯାଉଥିବା ଯୋଗୁଁ ଆପଣଙ୍କ କଲ୍ ବିଚ୍ଛିନ୍ନ ହୋଇଯାଇଛି।"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ କଲ୍"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଏକ କଲ୍ କରିଛି। ଏହା ଆପ୍ କଲ୍ ସମୟରେ ଅଡିଓ ଆକ୍ସେସ୍ କରିପାରେ ଏବଂ ଚଲେଇପାରେ।"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"କ୍ରାଶ୍ ହୋଇଥିବା ଫୋନ୍ ଆପ୍"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"ଆପଣଙ୍କର ଫୋନ୍ ଆପ୍ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> କ୍ରାଶ୍ ହୋଇଯାଇଛି। ଆପଣଙ୍କ ଡିଭାଇସରେ ଥିବା ଫୋନ୍ ଆପ୍ ବ୍ୟବହାର କରି ଆପଣଙ୍କର କଲକୁ ଜାରି ରଖାଯାଇଥିଲା।"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ଉତ୍ତର ଦେଉନାହିଁ"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ଆପଣଙ୍କ କଲ୍ ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଥିବା ଫୋନ୍ ଆପ୍ ବ୍ୟବହାର କରାଯାଇଥିଲା"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"କଲ୍ ମ୍ୟୁଟ୍ କରାଯାଇଛି।"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"ସ୍ପିକରଫୋନ୍କୁ ସକ୍ଷମ କରାଯାଇଛି ।"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ବର୍ତ୍ତମାନ କଥା ହୋଇପାରିବ ନାହିଁ। କଥା କ’ଣ?"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index a754e0c..2b94316 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ਕਿਸੇ ਸੰਕਟਕਾਲੀਨ ਕਾਲ ਕਰਕੇ ਤੁਹਾਡੀ ਕਾਲ ਕੱਟ ਦਿੱਤੀ ਗਈ ਹੈ।"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Background call"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> has placed a call into the background. This app may be accessing and playing audio over the call."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"ਕ੍ਰੈਸ਼ ਹੋਈ ਫ਼ੋਨ ਐਪ"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"ਤੁਹਾਡੀ ਫ਼ੋਨ ਐਪ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ਕ੍ਰੈਸ਼ ਹੋ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਪਹਿਲਾਂ ਤੋਂ ਸਥਾਪਤ ਫ਼ੋਨ ਐਪ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਤੁਹਾਡੀ ਕਾਲ ਜਾਰੀ ਰੱਖੀ ਗਈ।"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ਨੇ ਕੰਮ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੱਤਾ"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ਤੁਹਾਡੀ ਕਾਲ ਨੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਪਹਿਲਾਂ ਤੋਂ ਸਥਾਪਤ ਫ਼ੋਨ ਐਪ ਦੀ ਵਰਤੋਂ ਕੀਤੀ"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ਕਾਲ ਮਿਊਟ ਕੀਤੀ।"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"ਸਪੀਕਰਫੋਨ ਸਮਰਥਿਤ।"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ਹੁਣੇ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਹੋਇਆ?"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 41711f3..9cb1980 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Połączenie zostało przerwane z powodu nawiązania połączenia alarmowego."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Połączenie w tle"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikacja <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> umieściła połączenie w tle. Może ona uzyskiwać dostęp do dźwięku i odtwarzać go podczas połączenia."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikacja telefoniczna uległa awarii"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplikacja do obsługi telefonu (<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>) uległa awarii. Połączenie zostało utrzymane za pomocą aplikacji do obsługi telefonu zainstalowanej na urządzeniu."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Aplikacja <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> nie odpowiada"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Połączenie zostało zrealizowane za pomocą aplikacji do obsługi telefonu zainstalowanej na urządzeniu"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Połączenie wyciszone."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Głośnik włączony."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Nie mogę rozmawiać. Co słychać?"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e8e0141..bb5213e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"A chamada foi desligada porque foi efetuada uma chamada de emergência."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Cham. segundo plano"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> colocou uma chamada em segundo plano. Esta app pode estar a aceder e a reproduzir áudio sobre a chamada."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"app Telefone com falha"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Ocorreu uma falha na sua app telefone <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. A sua chamada foi continuada através da app telefone incluída com o dispositivo."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> deixou de responder."</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"A chamada utilizou a app de telefone incluída com o dispositivo."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Chamada sem som."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Alta voz ativada."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Não posso falar agora. Que se passa?"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 7bb059e..5d88619 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Sua chamada foi desconectada porque uma chamada de emergência está sendo feita."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Chamada em 2º plano"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"O app <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> colocou uma chamada em segundo plano. Talvez ele esteja acessando e tocando o áudio durante a chamada."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Falha com o app de telefone"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Seu app de telefone <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> falhou. A chamada continuou usando o app de telefone que veio com seu dispositivo."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"O app <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> parou de responder"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"A chamada usou o aplicativo de telefone que veio com seu dispositivo"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Chamada sem áudio."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Viva-voz ativado."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Não posso falar agora. Manda um SMS, por favor?"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 91a5680..a95d4a4 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Apelul a fost deconectat deoarece a fost inițiat un apel de urgență."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Apel în fundal"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> a inițiat un apel în fundal. Este posibil ca această aplicație să acceseze și să redea mesaje audio peste apel."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplicație pentru telefon blocată"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplicația dvs. pentru telefon <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> s-a blocat. Apelul dvs. a fost continuat cu aplicația Telefon instalată pe dispozitiv."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> nu mai răspunde"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Apelul dvs. a folosit aplicația Telefon instalată pe dispozitiv"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Apel cu sunet dezactivat."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Difuzor activat."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Nu pot acum. Despre ce e vorba?"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 692cdfd..a50907a 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Ваш вызов прекращен, так как осуществляется экстренный вызов."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Фоновый вызов"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Приложение <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> перевело вызов в фоновый режим. Это приложение может получать доступ к аудио вызова или воспроизводить в нем свое аудио."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Прекращена работа приложения телефона"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Работа приложения <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> на вашем смартфоне прервана из-за возникшей ошибки. Вызов был продолжен с использованием приложения \"Телефон\", которое установлено на ваше устройство производителем."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> не отвечает"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Вызов был сделан с использованием приложения, которое установлено на ваше устройство производителем."</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Звук выключен."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Громкая связь включена."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Не могу говорить. Что случилось?"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 0c0a4b8..b73272b 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"හදිසි ඇමතුමක් ගනිමින් පැවතීම හේතුවෙන් ඔබේ ඇමතුම විසන්ධි කර ඇත."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"පසුබිම් ඇමතුම"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> පසුබිම තුළට ඇමතුමක් ගෙන ඇත. මෙම යෙදුම ඇමතුම හරහා ඕඩියෝ වෙත ප්රවේශ වෙමින් සහ වාදනය කරමින් සිටිය හැකිය."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"බිඳ වැටුණු දුරකථන යෙදුම"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"ඔබේ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> දුරකථන යෙදුම බිඳ වැටී ඇත. ඔබේ උපාංගය සමඟ පැමිණි දුරකථන යෙදුම භාවිතයෙන් ඔබේ ඇමතුම කෙරීගෙන යන ලදී."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ප්රතිචාර දැක්වීම නතර කළේය"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"ඔබේ ඇමතුම ඔබේ උපාංගය සමග පැමිණි දුරකථන යෙදුම භාවිත කළේය"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ඇමතුම නිශ්ශබ්දයි."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"ස්පිකර්ෆෝන් සබලයි."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"දැන් කතාකරන්න බැහැ. මොකද වෙලා තියෙන්නෙ?"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 9847bef..0d79f1a 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Váš hovor bol zrušený, aby mohlo prebehnúť tiesňové volanie."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Hovor na pozadí"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikácia <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> umiestnila hovor do pozadia. Táto aplikácia môže mať počas hovoru prístup k zvuku a prehrávať ho."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Telefónna aplikácia sa zrútila"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Vaša telefónna aplikácia <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> sa zrútila. Hovor pokračoval v telefónnej aplikácii, ktorá bola vopred nainštalovaná vo vašom zariadení."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Aplikácia <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> prestala reagovať"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Na hovor bola použitá telefónna aplikácia, ktorá bola vopred nainštalovaná vo vašom zariadení"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Zvuk hovoru bol vypnutý."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Reproduktor je povolený."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Teraz nemôžem hovoriť, o čo ide?"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 952adc6..5595c40 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Klic je prekinjen zaradi vzpostavljanja klica v sili."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Klic v ozadju"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Aplikacija <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> je klic premaknila v ozadje. Ta aplikacija morda dostopa do zvoka in ga predvaja prek klica."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikacija za klicanje se je zrušila"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplikacija za klicanje <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> se je zrušila. Klic se je nadaljeval prek aplikacije za klicanje, ki jo je v napravo namestil proizvajalec."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Aplikacija <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> se ne odziva več"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Klic je bil opravljen prek aplikacije za klicanje, ki jo je v napravo namestil proizvajalec"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Klic izključen."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Zvočnik omogočen."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Zdaj ne morem govoriti. Za kaj gre?"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index b71ab55..53f4efc 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Telefonata jote është shkëputur sepse është kryer një telefonatë urgjence."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Telefonatë në sfond"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> e ka vendosur një telefonatë në sfond. Ky aplikacion mund të ketë qasje dhe të luajë audio mbi telefonatë."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplikacioni i telefonit që ka pësuar një ndërprerje aksidentale"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Aplikacioni i telefonit <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ka pësuar një ndërprerje aksidentale. Telefonata jote ka vazhduar me aplikacionin e telefonit që ke marrë me pajisjen tënde."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> nuk përgjigjet më"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Telefonata jote ka përdorur aplikacionin e telefonit që ke marrë me pajisjen tënde"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Telefonata kaloi në heshtje."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Altoparlanti u aktivizua."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Nuk flas dot tani. Si është puna?"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 613cd2b..adfece0 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Позив је прекинут јер се упућује хитни позив."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Позив у позадини"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Апликација <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> је упутила позив у позадини. Она може да приступа звуку и пушта га током позива."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Апликација за телефонирање која је отказала"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Апликација за телефонирање <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> је отказала. Позив је настављен помоћу апликације за телефонирање коју сте добили уз уређај."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> више не реагује"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Позив је користио апликацију за телефонирање коју сте добили уз уређај"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Звук позива је искључен."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Спикерфон је омогућен."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"У гужви сам. О чему се ради?"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 3694cd0..d59fc79 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Samtalets kopplades bort på grund av ett nödsamtal."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Bakgrundssamtal"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> har ringt ett samtal i bakgrunden. Denna app kan få åtkomst till och spela upp ljud från samtalet."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Kraschad telefonapp"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Telefonappen <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> har kraschat. Samtalet fortsatte med appen Telefon som medföljer enheten."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> slutade svara"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Samtalet använde telefonappen som medföljer enheten"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Samtalets ljud avstängt."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Högtalartelefon aktiverad."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Kan inte prata nu. Läget?"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 97beaff..8b8a40c 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Simu yako imekatwa kwa sababu kuna simu ya dharura inayopigwa."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Simu ya chinichini"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> inapiga simu chinichini. Huenda programu hii inafikia na kucheza sauti huku simu ikiendelea."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Programu ya simu iliyoacha kufanya kazi"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Programu yako ya simu inayoitwa <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> imeacha kufanya kazi. Uliendelea kupiga simu kwa kutumia programu ya simu iliyokuja na kifaa chako."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> imeacha kufanya kazi"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Ulipiga simu kwa kutumia Programu ya simu iliyokuja na kifaa chako"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Simu imezimwa."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Spika za simu zimewezeshwa"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Siwezi kuongea sasa. Kuna nini?"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 4988bb8..ee48214 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"அவசர அழைப்பு மேற்கொள்ளப்படுவதால் உங்கள் அழைப்பு துண்டிக்கப்பட்டுள்ளது."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"பின்னணி அழைப்பு"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"அழைப்பை பின்னணியில் செயல்படும் வகையில் <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> மாற்றியுள்ளது. அழைப்பின் மூலமாக இந்த ஆப்ஸ் ஆடியோவை அணுகி இயக்கக்கூடும்."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"சிதைவடைந்த மொபைல் ஆப்ஸ்"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"உங்கள் மொபைல் ஆப்ஸான <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> சிதைவடைந்துள்ளது. உங்கள் சாதனத்துடன் கிடைக்கும் மொபைல் ஆப்ஸ் மூலமே உங்கள் அழைப்பு தொடரப்பட்டது."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> செயலிழந்துவிட்டது"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"உங்கள் சாதனத்துடன் கிடைக்கும் மொபைல் ஆப்ஸ் மூலம் அழைப்பு மேற்கொள்ளப்பட்டது"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"அழைப்பு முடக்கப்பட்டது."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"ஸ்பீக்கர்ஃபோன் இயக்கப்பட்டது."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"இப்போது பேசமுடியாது. என்ன விஷயம்?"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index b12b8d8..94a72e4 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"అత్యవసర కాల్ చేయబడినందున మీ కాల్ డిస్కనెక్ట్ చేయబడింది."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"నేపథ్యం కాల్"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> కాల్ను నేపథ్యంలోకి పంపింది. కాల్ ద్వారా ఈ యాప్, ఆడియోను యాక్సెస్ ఇంకా ప్లే చేస్తుండవచ్చు."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"క్రాష్ అయిన ఫోన్ యాప్"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"మీ ఫోన్ యాప్ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> క్రాష్ అయ్యింది. మీ పరికరంతో వచ్చిన ఫోన్ యాప్ను ఉపయోగించి మీ కాల్ కొనసాగించబడింది."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> స్పందించడం ఆగిపోయింది"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"మీ కాల్, మీ పరికరంతో వచ్చిన ఫోన్ యాప్ను ఉపయోగించింది"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"కాల్ మ్యూట్ చేయబడింది."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"స్పీకర్ ఫోన్ ప్రారంభించబడింది."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ఇప్పుడు మాట్లాడలేను. విషయం ఏమిటి?"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 8168437..615abb9 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"สายของคุณถูกตัดเพราะมีการโทรหาหมายเลขฉุกเฉิน"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"การโทรในเบื้องหลัง"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ได้ทำการโทรในเบื้องหลัง แอปนี้อาจกำลังเข้าถึงและเล่นเสียงผ่านการโทร"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"แอปโทรศัพท์ขัดข้อง"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"แอปโทรศัพท์ <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ขัดข้อง การโทรจะดำเนินต่อไปผ่านแอปโทรศัพท์ที่มาพร้อมกับอุปกรณ์"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> หยุดตอบสนอง"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"สายของคุณใช้แอปโทรศัพท์ที่มาพร้อมกับอุปกรณ์"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"ปิดเสียงการโทร"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"เปิดใช้งานลำโพงแล้ว"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ตอนนี้คุยไม่ได้ มีอะไรหรือเปล่า"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index cc6dcc9..998abef 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Nadiskonekta ang iyong tawag dahil sa ginagawang pang-emergency na tawag."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Tawag sa background"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Naglagay ng tawag ang <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> sa background. Posibleng ina-access at pine-play ng app na ito ang audio sa tawag."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Nag-crash ang phone app"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Nag-crash ang iyong app na telepono na <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. Ipinagpatuloy ang iyong tawag gamit ang app na telepono na kasama sa iyong device."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Huminto ang <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> sa pagtugon"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Ginamit ng tawag mo ang app na telepono na kasama sa iyong device"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Naka-mute ang tawag."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Pinapagana ang speakerphone."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Di masagot ngayon. Ano\'ng meron?"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 0c7d0b4..2e02f8c 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Bir acil durum araması yapıldığı için görüşmenizin bağlantısı kesildi."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Arka plandaki arama"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> arka plana bir arama yerleştirdi. Bu uygulama arama üzerinden sese erişiyor ve ses çalıyor olabilir."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Kilitlenen telefon uygulaması"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Telefon uygulamanız <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> kilitlendi. Görüşmeniz, cihazınızla birlikte gelen telefon uygulaması kullanılarak sürdürüldü."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> yanıt vermeyi durdurdu"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Görüşmeniz için, cihazınızla gelen telefon uygulaması kullanıldı"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Çağrı sesi kapatıldı."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Hoparlör etkin."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Şimdi konuşamam. Konu nedir?"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 17da40c..d86b3eb 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Виклик перервано, оскільки здійснюється екстрений виклик."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"У фоновий режим"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"Додаток <xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> перевів виклик у фоновий режим і може відтворювати аудіо під час виклику."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Збій у додатку для дзвінків"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Додаток для дзвінків <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> аварійно завершив роботу. Поточний дзвінок було перенаправлено в додаток, що постачається разом із пристроєм."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"Додаток <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> не відповідає"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Поточний дзвінок було перенаправлено в додаток, що постачається разом із пристроєм"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Звук виклику вимкнено."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Гучний зв’язок увімкнено."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Не можу говорити. У чому справа?"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index f35cee8..ae77978 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"ہنگامی کال لگائے جانے کی وجہ سے آپ کی کال غیر منسلک ہوگئی ہے۔"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"پس منظر کی کال"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> نے پس منظر میں کال لگا دیا ہے۔ یہ ایپ کال کے دوران آواز تک رسائی حاصل اور چلا سکتی ہے۔"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"کریشڈ فون ایپ"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"آپ کی <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> فون ایپ ناکام ہو گئی ہے۔ آپ کے آلہ کے ساتھ آئی ہوئی فون ایپ کا استعمال کرتے ہوئے آپ کی کال کو جاری رکھا گیا تھا۔"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> نے جواب دینا بند کر دیا"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"آپ کی کال نے آپ کے آلہ کے ساتھ آئی ہوئی فون ایپ کا استعمال کیا"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"کال خاموش کر دی گئی۔"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"اسپیکر فون فعال ہوگیا۔"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"ابھی بات نہیں کرسکتے۔ کیا ہو رہا ہے؟"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 76bf6e4..3271245 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Favqulodda chaqiruv amalga oshirilayotgani uchun joriy chaqiruvingiz to‘xtatildi."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Orqa fondagi chaqiruv"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> ilovasi chaqiruvni orqa fonga joyladi. Bu ilova ovozli chaqiruvga kirishi yoki unda audio ijro etishi mumkin."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Telefon ilovasi ishi xatolik tufayli to‘xtatildi"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Telefoningizdagi <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> ilovasi ishi xatolik tufayli to‘xtatildi. Chaqiruvingiz qurilmangizga avvaldan o‘rnatilgan Telefon ilovasi orqali davom ettirildi."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> javob bermayapti"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Chaqiruv qurilmangizga avvaldan o‘rnatilgan ilova orqali amalga oshirildi"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Qo‘ng‘iroq ovozi o‘chirildi."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Karnaychalar yoqildi."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Hozir gaplasholmayman. Tinchlikmi?"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 91d51e9..c6fe44a 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Cuộc gọi của bạn đã bị ngắt kết nối do một cuộc gọi khẩn cấp đang được thực hiện."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Cuộc gọi trong nền"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> đã gọi điện ở chế độ nền. Ứng dụng này có thể đang truy cập và phát âm thanh qua cuộc gọi."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Ứng dụng điện thoại bị lỗi"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Ứng dụng điện thoại <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> của bạn bị lỗi. Cuộc gọi của bạn đã được tiếp tục trên ứng dụng điện thoại đi kèm với thiết bị."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> đã dừng phản hồi"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Cuộc gọi của bạn đã dùng ứng dụng dành cho điện thoại đi kèm với thiết bị"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Đã tắt tiếng cuộc gọi."</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Đã bật loa ngoài."</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Giờ tôi không nói chuyện được. Có việc gì không?"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 93313f5..bbda818 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"由于要进行紧急呼叫,您的通话已中断。"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"后台通话"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> 已将通话切换到后台进行。此应用可以接入通话,并播放通话音频。"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"崩溃的手机应用"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"您的手机应用“<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>”已崩溃。系统使用设备自带的“电话”应用继续通话。"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>已停止响应"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"系统使用您设备自带的电话应用拨打了电话"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"通话已静音。"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"扬声器已启用。"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"现在无法接听。有什么事吗?"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index a44133c..5f1c946 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"因撥打緊急電話緣故,您的通話已中斷。"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"背景通話"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"「<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>」已將通話放到背景。這個應用程式可以存取該通話,並透過該通話播放音訊。"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"當機的手機應用程式"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"您的手機應用程式「<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>」已當機。您使用了裝置隨付的手機應用程式來繼續通話。"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>已停止回應"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"您使用了裝置隨付的手機應用程式來通話"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"通話已靜音。"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"擴音器已啟用"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"我現在不方便通話,有什麼事呢?"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 5371c30..7c98928 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"你撥出了緊急電話,因此目前的通話已中斷。"</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"背景通話"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"「<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g>」已將通話切換到在背景進行。這個應用程式可能會在通話期間存取及播放音訊。"</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"通話應用程式異常終止"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"你的通話應用程式「<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>」已異常終止。系統目前已使用裝置內建的通話應用程式繼續進行通話。"</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"「<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>」已停止回應"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"目前是透過裝置內建的電話應用程式進行通話"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"通話已靜音。"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"喇叭已啟用"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"我現在不方便講話,有什麼事?"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 15a8b8f..30c147d 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -31,8 +31,8 @@
<string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"Ikholi yakho inqanyuliwe ngenxa yekholi yesimo esiphuthumayo eyenziwe."</string>
<string name="notification_audioProcessing_title" msgid="1619035039880584575">"Ikholi engemuva"</string>
<string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> yenze ikholi ngemuva. Kungenzeka ukuthi lolu hlelo lokusebenza lufinyelela futhi ludlala okulalelwayo ngaphezu kwekholi."</string>
- <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Uhlelo lokusebenza lwefoni olukhubazekile"</string>
- <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Uhlelo lwakho lokusebenza lwefoni lwe-<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> lukhubazekile. Ikholi yakho iye yaqhutshekiswa kusetshenziswa uhlelo lokusebenza lwefoni oluze nedivayisi yakho."</string>
+ <string name="notification_incallservice_not_responding_title" msgid="5347557574288598548">"<xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g> iyeke ukuphendula"</string>
+ <string name="notification_incallservice_not_responding_body" msgid="9209308270131968623">"Ikholi yakho isebenzise uhlelo lokusebenza lefoni elize nedivayisi yakho"</string>
<string name="accessibility_call_muted" msgid="2968461092554300779">"Ikholu ithulisiwe"</string>
<string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Isipikha sefoni sinikwe amandla"</string>
<string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Angikwazi ukukhuluma okwamanje. Kwenzenjani?"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 52b688c..b617ae1 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -24,6 +24,7 @@
<dimen name="blocked_numbers_large_padding">16dp</dimen>
<dimen name="blocked_numbers_extra_large_padding">32dp</dimen>
<dimen name="blocked_numbers_button_bottom_margin">20dp</dimen>
+ <dimen name="blocked_numbers_button_large_padding">15dp</dimen>
<dimen name="blocked_numbers_dialog_padding">24dp</dimen>
<dimen name="blocked_numbers_delete_icon_padding">12dp</dimen>
<dimen name="blocked_numbers_progress_bar_padding">100dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 07d6cc9..df08d7c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -75,13 +75,14 @@
background. This app may be accessing and playing audio over the call.
</string>
- <!-- Crashed in call service notification label, used when the in call service has cranshed and
+ <!-- Crashed in call service notification label, used when the in call service has crashed and
the system fall back to use system dialer. [CHAR LIMIT=NONE] -->
- <string name="notification_crashedInCallService_title">Crashed phone app</string>
+ <string name="notification_incallservice_not_responding_title">
+ <xliff:g id="in_call_service_app_name">%s</xliff:g> stopped responding
+ </string>
<!-- Body of the notification presented when an in call service crashed. [CHAR LIMIT=NONE] -->
- <string name="notification_crashedInCallService_body">
- Your phone app <xliff:g id="in_call_service_app_name">%s</xliff:g> has crashed.
- You call was continued using the phone app that came with your device.
+ <string name="notification_incallservice_not_responding_body">
+ Your call used the phone app that came with your device
</string>
<!-- Content description of the call muted notification icon for
diff --git a/res/xml/activity_blocked_numbers.xml b/res/xml/activity_blocked_numbers.xml
index 83423df..df1a759 100644
--- a/res/xml/activity_blocked_numbers.xml
+++ b/res/xml/activity_blocked_numbers.xml
@@ -78,6 +78,8 @@
android:layout_height="48dp"
android:text="@string/block_number"
android:layout_marginBottom="@dimen/blocked_numbers_button_bottom_margin"
+ android:paddingTop="@dimen/blocked_numbers_button_large_padding"
+ android:paddingBottom="@dimen/blocked_numbers_button_large_padding"
style="@style/BlockedNumbersButton"
android:background="?android:attr/selectableItemBackgroundBorderless" />
diff --git a/res/xml/layout_blocked_number.xml b/res/xml/layout_blocked_number.xml
index 720d71a..3cdd771 100644
--- a/res/xml/layout_blocked_number.xml
+++ b/res/xml/layout_blocked_number.xml
@@ -29,6 +29,8 @@
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:paddingTop="@dimen/blocked_numbers_delete_icon_padding"
+ android:layout_alignParentLeft="true"
+ android:layout_toLeftOf="@+id/delete_blocked_number"
android:textDirection="ltr" />
<ImageView
diff --git a/src/com/android/server/telecom/AsyncRingtonePlayer.java b/src/com/android/server/telecom/AsyncRingtonePlayer.java
index 53c5f07..bf2472f 100644
--- a/src/com/android/server/telecom/AsyncRingtonePlayer.java
+++ b/src/com/android/server/telecom/AsyncRingtonePlayer.java
@@ -255,4 +255,8 @@
}
}
}
+
+ public boolean isPlaying() {
+ return mRingtone != null;
+ }
}
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 636a1b2..0785502 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -55,7 +55,6 @@
import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
import android.text.TextUtils;
-import android.util.StatsLog;
import android.widget.Toast;
import com.android.internal.annotations.VisibleForTesting;
@@ -822,7 +821,7 @@
return String.format(Locale.US, "[Call id=%s, state=%s, tpac=%s, cmgr=%s, handle=%s, "
+ "vidst=%s, childs(%d), has_parent(%b), cap=%s, prop=%s]",
mId,
- CallState.toString(mState),
+ CallState.toString(getParcelableCallState()),
getTargetPhoneAccount(),
getConnectionManagerPhoneAccount(),
Log.piiHandle(mHandle),
@@ -965,6 +964,20 @@
}
/**
+ * Similar to {@link #getState()}, except will return {@link CallState#DISCONNECTING} if the
+ * call is locally disconnecting. This is the call state which is reported to the
+ * {@link android.telecom.InCallService}s when a call is parcelled.
+ * @return The parcelable call state.
+ */
+ public int getParcelableCallState() {
+ if (isLocallyDisconnecting() &&
+ (mState != android.telecom.Call.STATE_DISCONNECTED)) {
+ return CallState.DISCONNECTING;
+ }
+ return mState;
+ }
+
+ /**
* Determines if this {@link Call} can receive call focus via the
* {@link ConnectionServiceFocusManager}.
* Only top-level calls and non-external calls are eligible.
@@ -1129,8 +1142,8 @@
}
int statsdDisconnectCause = (newState == CallState.DISCONNECTED) ?
getDisconnectCause().getCode() : DisconnectCause.UNKNOWN;
- StatsLog.write(StatsLog.CALL_STATE_CHANGED, newState, statsdDisconnectCause,
- isSelfManaged(), isExternalCall());
+ TelecomStatsLog.write(TelecomStatsLog.CALL_STATE_CHANGED, newState,
+ statsdDisconnectCause, isSelfManaged(), isExternalCall());
}
return true;
}
@@ -2562,7 +2575,8 @@
}
}
- boolean isActive() {
+ @VisibleForTesting
+ public boolean isActive() {
return mState == CallState.ACTIVE;
}
@@ -2594,7 +2608,7 @@
for (Listener l : mListeners) {
l.onExtrasChanged(this, source, extras);
}
-
+
// If mExtra shows that the call using Volte, record it with mWasVolte
if (mExtras.containsKey(TelecomManager.EXTRA_CALL_NETWORK_TYPE) &&
mExtras.get(TelecomManager.EXTRA_CALL_NETWORK_TYPE)
@@ -3093,8 +3107,8 @@
}
// Is there a valid SMS application on the phone?
- if (TelephonyManager.getDefaultRespondViaMessageApplication(mContext,
- true /*updateIfNeeded*/) == null) {
+ if (mContext.getSystemService(TelephonyManager.class)
+ .getAndUpdateDefaultRespondViaMessageApplication() == null) {
return false;
}
@@ -3782,8 +3796,8 @@
public void setIsUsingCallFiltering(boolean isUsingCallFiltering) {
mIsUsingCallFiltering = isUsingCallFiltering;
- }
-
+ }
+
/**
* Returns whether or not Volte call was used.
*
diff --git a/src/com/android/server/telecom/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
index b370815..a6509b4 100644
--- a/src/com/android/server/telecom/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -423,7 +423,7 @@
CallAudioRouteStateMachine.NO_INCLUDE_BLUETOOTH_IN_BASELINE);
return;
default:
- Log.wtf(this, "Invalid route specified: %d", route);
+ Log.w(this, "InCallService requested an invalid audio route: %d", route);
}
}
@@ -449,6 +449,10 @@
}
}
+ public boolean isRingtonePlaying() {
+ return mRinger.isRinging();
+ }
+
@VisibleForTesting
public boolean startRinging() {
synchronized (mCallsManager.getLock()) {
diff --git a/src/com/android/server/telecom/CallAudioModeStateMachine.java b/src/com/android/server/telecom/CallAudioModeStateMachine.java
index 86d2aaa..2aa9d5d 100644
--- a/src/com/android/server/telecom/CallAudioModeStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioModeStateMachine.java
@@ -353,17 +353,28 @@
}
private class RingingFocusState extends BaseState {
+ // Keeps track of whether we're ringing with audio focus or if we've just entered the state
+ // without acquiring focus because of a silent ringtone or something.
+ private boolean mHasFocus = false;
+
private void tryStartRinging() {
+ if (mHasFocus && mCallAudioManager.isRingtonePlaying()) {
+ Log.i(LOG_TAG, "RingingFocusState#tryStartRinging -- audio focus previously"
+ + " acquired and ringtone already playing -- skipping.");
+ return;
+ }
+
if (mCallAudioManager.startRinging()) {
mAudioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
// Do not set MODE_RINGTONE if we were previously in the CALL_SCREENING mode -- this
// trips up the audio system.
- if (mAudioManager.getMode() != NEW_AUDIO_MODE_FOR_AUDIO_PROCESSING) {
+ if (mAudioManager.getMode() != AudioManager.MODE_CALL_SCREENING) {
mAudioManager.setMode(AudioManager.MODE_RINGTONE);
}
mCallAudioManager.setCallAudioRouteFocusState(
CallAudioRouteStateMachine.RINGING_FOCUS);
+ mHasFocus = true;
} else {
Log.i(LOG_TAG, "RINGING state, try start ringing but not acquiring audio focus");
}
@@ -380,6 +391,7 @@
public void exit() {
// Audio mode and audio stream will be set by the next state.
mCallAudioManager.stopRinging();
+ mHasFocus = false;
}
@Override
diff --git a/src/com/android/server/telecom/CallRecordingTonePlayer.java b/src/com/android/server/telecom/CallRecordingTonePlayer.java
index 999148c..1b522bc 100644
--- a/src/com/android/server/telecom/CallRecordingTonePlayer.java
+++ b/src/com/android/server/telecom/CallRecordingTonePlayer.java
@@ -24,6 +24,7 @@
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Looper;
+import android.os.Message;
import android.provider.MediaStore;
import android.telecom.Log;
@@ -61,19 +62,71 @@
}
};
+ private class LoopingTonePlayer extends Handler {
+ private Runnable mPlayToneRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (mRecordingTonePlayer != null) {
+ mRecordingTonePlayer.start();
+ postDelayed(this, mRepeatInterval);
+ }
+ }
+ };
+ private MediaPlayer mRecordingTonePlayer = null;
+
+ LoopingTonePlayer() {
+ // We're using the main looper here to avoid creating more threads and risking a thread
+ // leak. The actual playing of the tone doesn't take up much time on the calling
+ // thread, so it's okay to use the main thread for this.
+ super(Looper.getMainLooper());
+ }
+
+ private boolean start() {
+ if (mRecordingTonePlayer != null) {
+ Log.w(CallRecordingTonePlayer.this, "Can't start looping tone player more than"
+ + " once");
+ return false;
+ }
+ AudioDeviceInfo telephonyDevice = getTelephonyDevice(mAudioManager);
+ if (telephonyDevice != null) {
+ mRecordingTonePlayer = MediaPlayer.create(mContext, R.raw.record);
+ mRecordingTonePlayer.setPreferredDevice(telephonyDevice);
+ mRecordingTonePlayer.setVolume(0.1f);
+ AudioAttributes audioAttributes = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION).build();
+ mRecordingTonePlayer.setAudioAttributes(audioAttributes);
+
+ post(mPlayToneRunnable);
+ return true;
+ } else {
+ Log.w(this ,"startCallRecordingTone: can't find telephony audio device.");
+ return false;
+ }
+ }
+
+ private void stop() {
+ mRecordingTonePlayer.release();
+ mRecordingTonePlayer = null;
+ }
+ }
+
private final AudioManager mAudioManager;
private final Context mContext;
private final TelecomSystem.SyncRoot mLock;
private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
+ private final long mRepeatInterval;
private boolean mIsRecording = false;
- private MediaPlayer mRecordingTonePlayer = null;
+ private LoopingTonePlayer mLoopingTonePlayer;
private List<Call> mCalls = new ArrayList<>();
public CallRecordingTonePlayer(Context context, AudioManager audioManager,
+ Timeouts.Adapter timeouts,
TelecomSystem.SyncRoot lock) {
mContext = context;
mAudioManager = audioManager;
mLock = lock;
+ mRepeatInterval = timeouts.getCallRecordingToneRepeatIntervalMillis(
+ context.getContentResolver());
}
@Override
@@ -163,7 +216,7 @@
*/
private void maybeStartCallAudioTone() {
if (mIsRecording && hasActiveCall()) {
- startCallRecordingTone(mContext);
+ startCallRecordingTone();
}
}
@@ -231,26 +284,15 @@
* Begins playing the call recording tone to the remote end of the call.
* The call recording tone is played via the telephony audio output device; this means that it
* will only be audible to the remote end of the call, not the local side.
- *
- * @param context required for obtaining media player.
*/
- private void startCallRecordingTone(Context context) {
- if (mRecordingTonePlayer != null) {
+ private void startCallRecordingTone() {
+ if (mLoopingTonePlayer != null) {
+ Log.w(this, "Tone is already playing");
return;
}
- AudioDeviceInfo telephonyDevice = getTelephonyDevice(mAudioManager);
- if (telephonyDevice != null) {
- Log.i(this ,"startCallRecordingTone: playing call recording tone to remote end.");
- mRecordingTonePlayer = MediaPlayer.create(context, R.raw.record);
- mRecordingTonePlayer.setLooping(true);
- mRecordingTonePlayer.setPreferredDevice(telephonyDevice);
- mRecordingTonePlayer.setVolume(0.1f);
- AudioAttributes audioAttributes = new AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION).build();
- mRecordingTonePlayer.setAudioAttributes(audioAttributes);
- mRecordingTonePlayer.start();
- } else {
- Log.w(this ,"startCallRecordingTone: can't find telephony audio device.");
+ mLoopingTonePlayer = new LoopingTonePlayer();
+ if (!mLoopingTonePlayer.start()) {
+ mLoopingTonePlayer = null;
}
}
@@ -258,10 +300,10 @@
* Attempts to stop the call recording tone if it is playing.
*/
private void stopCallRecordingTone() {
- if (mRecordingTonePlayer != null) {
- Log.i(this ,"stopCallRecordingTone: stopping call recording tone.");
- mRecordingTonePlayer.stop();
- mRecordingTonePlayer = null;
+ if (mLoopingTonePlayer != null) {
+ Log.i(this, "stopCallRecordingTone: stopping call recording tone.");
+ mLoopingTonePlayer.stop();
+ mLoopingTonePlayer = null;
}
}
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 41506a9..ff3122f 100755
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -390,6 +390,8 @@
private LinkedList<HandlerThread> mGraphHandlerThreads;
+ private boolean mHasActiveRttCall = false;
+
/**
* Listener to PhoneAccountRegistrar events.
*/
@@ -541,7 +543,8 @@
mRinger = new Ringer(playerFactory, context, systemSettingsUtil, asyncRingtonePlayer,
ringtoneFactory, systemVibrator,
new Ringer.VibrationEffectProxy(), mInCallController);
- mCallRecordingTonePlayer = new CallRecordingTonePlayer(mContext, audioManager, mLock);
+ mCallRecordingTonePlayer = new CallRecordingTonePlayer(mContext, audioManager,
+ mTimeoutsAdapter, mLock);
mCallAudioManager = new CallAudioManager(callAudioRouteStateMachine,
this, callAudioModeStateMachineFactory.create(systemStateHelper,
(AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE)),
@@ -897,6 +900,13 @@
}
@Override
+ public void onConnectionPropertiesChanged(Call call, boolean didRttChange) {
+ if (didRttChange) {
+ updateHasActiveRttCall();
+ }
+ }
+
+ @Override
public void onParentChanged(Call call) {
// parent-child relationship affects which call should be foreground, so do an update.
updateCanAddCall();
@@ -1258,6 +1268,11 @@
// TODO: Move this to be a part of addCall()
call.addListener(this);
+ if (extras.containsKey(TelecomManager.EXTRA_CALL_DISCONNECT_MESSAGE)) {
+ String disconnectMessage = extras.getString(TelecomManager.EXTRA_CALL_DISCONNECT_MESSAGE);
+ Log.i(this, "processIncomingCallIntent Disconnect message " + disconnectMessage);
+ }
+
boolean isHandoverAllowed = true;
if (isHandover) {
if (!isHandoverInProgress() &&
@@ -2543,7 +2558,11 @@
Log.w(this, "Unknown call (%s) asked to disconnect", call);
} else {
mLocallyDisconnectingCalls.add(call);
+ int previousState = call.getState();
call.disconnect();
+ for (CallsManagerListener listener : mListeners) {
+ listener.onCallStateChanged(call, previousState, call.getState());
+ }
// Cancel any of the outgoing call futures if they're still around.
if (mPendingCallConfirm != null && !mPendingCallConfirm.isDone()) {
mPendingCallConfirm.complete(null);
@@ -2940,6 +2959,9 @@
call.setState(CallState.AUDIO_PROCESSING, "active set explicitly and adding");
addCall(call);
}
+ // Clear mPendingAudioProcessingCall so that future attempts to mark the call as
+ // active (e.g. coming off of hold) don't put the call into audio processing instead
+ mPendingAudioProcessingCall = null;
return;
}
setCallState(call, CallState.ACTIVE, "active set explicitly");
@@ -2960,7 +2982,8 @@
* @param disconnectCause The disconnect cause, see {@link android.telecom.DisconnectCause}.
*/
void markCallAsDisconnected(Call call, DisconnectCause disconnectCause) {
- if (call.getState() == CallState.SIMULATED_RINGING
+ int oldState = call.getState();
+ if (call.getState() == CallState.SIMULATED_RINGING
&& disconnectCause.getCode() == DisconnectCause.REMOTE) {
// If the remote end hangs up while in SIMULATED_RINGING, the call should
// be marked as missed.
@@ -2968,6 +2991,12 @@
}
call.setDisconnectCause(disconnectCause);
setCallState(call, CallState.DISCONNECTED, "disconnected set explicitly");
+
+ if(oldState == CallState.NEW && disconnectCause.getCode() == DisconnectCause.MISSED) {
+ Log.i(this, "markCallAsDisconnected: logging missed call ");
+ mCallLogManager.logCall(call, Calls.MISSED_TYPE, true, null);
+ }
+
}
/**
@@ -3432,7 +3461,7 @@
SystemClock.elapsedRealtime());
updateCanAddCall();
-
+ updateHasActiveRttCall();
updateExternalCallCanPullSupport();
// onCallAdded for calls which immediately take the foreground (like the first call).
for (CallsManagerListener listener : mListeners) {
@@ -3468,6 +3497,7 @@
// Only broadcast changes for calls that are being tracked.
if (shouldNotify) {
updateCanAddCall();
+ updateHasActiveRttCall();
for (CallsManagerListener listener : mListeners) {
if (LogUtils.SYSTRACE_DEBUG) {
Trace.beginSection(listener.getClass().toString() + " onCallRemoved");
@@ -3481,6 +3511,24 @@
Trace.endSection();
}
+ private void updateHasActiveRttCall() {
+ boolean hasActiveRttCall = hasActiveRttCall();
+ if (hasActiveRttCall != mHasActiveRttCall) {
+ Log.i(this, "updateHasActiveRttCall %s -> %s", mHasActiveRttCall, hasActiveRttCall);
+ AudioManager.setRttEnabled(hasActiveRttCall);
+ mHasActiveRttCall = hasActiveRttCall;
+ }
+ }
+
+ private boolean hasActiveRttCall() {
+ for (Call call : mCalls) {
+ if (call.isActive() && call.isRttCall()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* Sets the specified state on the specified call.
*
@@ -3492,7 +3540,8 @@
return;
}
int oldState = call.getState();
- Log.i(this, "setCallState %s -> %s, call: %s", CallState.toString(oldState),
+ Log.i(this, "setCallState %s -> %s, call: %s",
+ CallState.toString(call.getParcelableCallState()),
CallState.toString(newState), call);
if (newState != oldState) {
// If the call switches to held state while a DTMF tone is playing, stop the tone to
@@ -3522,6 +3571,7 @@
// Only broadcast state change for calls that are being tracked.
if (mCalls.contains(call)) {
updateCanAddCall();
+ updateHasActiveRttCall();
for (CallsManagerListener listener : mListeners) {
if (LogUtils.SYSTRACE_DEBUG) {
Trace.beginSection(listener.getClass().toString() +
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index 7bd5376..72c3f24 100755
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -69,6 +69,8 @@
public class ConnectionServiceWrapper extends ServiceBinder implements
ConnectionServiceFocusManager.ConnectionServiceFocus {
+ private static final String TELECOM_ABBREVIATION = "cast";
+
private final class Adapter extends IConnectionServiceAdapter.Stub {
@Override
@@ -1237,7 +1239,7 @@
connectionRequest,
call.shouldAttachToExistingConnection(),
call.isUnknown(),
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
Log.e(this, e, "Failure to createConference -- %s", getComponentName());
@@ -1326,7 +1328,7 @@
connectionRequest,
call.shouldAttachToExistingConnection(),
call.isUnknown(),
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
Log.e(this, e, "Failure to createConnection -- %s", getComponentName());
@@ -1373,7 +1375,7 @@
callId,
false),
call.isIncoming(),
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
call.setDisconnectCause(new DisconnectCause(DisconnectCause.CANCELED));
call.disconnect();
} catch (RemoteException e) {
@@ -1419,7 +1421,7 @@
callId,
false),
call.isIncoming(),
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
call.setDisconnectCause(new DisconnectCause(DisconnectCause.CANCELED));
call.disconnect();
} catch (RemoteException e) {
@@ -1457,7 +1459,9 @@
call.getIntentExtras(),
call.getVideoState(),
callId,
- false), reason, Log.getExternalSession());
+ false),
+ reason,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1485,7 +1489,7 @@
try {
mServiceInterface.handoverComplete(
callId,
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1511,7 +1515,7 @@
if (callId != null && isServiceValid("abort")) {
try {
logOutgoing("abort %s", callId);
- mServiceInterface.abort(callId, Log.getExternalSession());
+ mServiceInterface.abort(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1525,7 +1529,7 @@
if (callId != null && isServiceValid("silence")) {
try {
logOutgoing("silence %s", callId);
- mServiceInterface.silence(callId, Log.getExternalSession());
+ mServiceInterface.silence(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1537,7 +1541,7 @@
if (callId != null && isServiceValid("hold")) {
try {
logOutgoing("hold %s", callId);
- mServiceInterface.hold(callId, Log.getExternalSession());
+ mServiceInterface.hold(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1549,7 +1553,7 @@
if (callId != null && isServiceValid("unhold")) {
try {
logOutgoing("unhold %s", callId);
- mServiceInterface.unhold(callId, Log.getExternalSession());
+ mServiceInterface.unhold(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1563,7 +1567,7 @@
try {
logOutgoing("onCallAudioStateChanged %s %s", callId, audioState);
mServiceInterface.onCallAudioStateChanged(callId, audioState,
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1575,7 +1579,7 @@
if (callId != null && isServiceValid("disconnect")) {
try {
logOutgoing("disconnect %s", callId);
- mServiceInterface.disconnect(callId, Log.getExternalSession());
+ mServiceInterface.disconnect(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1588,9 +1592,10 @@
try {
logOutgoing("answer %s %d", callId, videoState);
if (VideoProfile.isAudioOnly(videoState)) {
- mServiceInterface.answer(callId, Log.getExternalSession());
+ mServiceInterface.answer(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} else {
- mServiceInterface.answerVideo(callId, videoState, Log.getExternalSession());
+ mServiceInterface.answerVideo(callId, videoState,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
}
} catch (RemoteException e) {
}
@@ -1603,7 +1608,8 @@
if (callId != null && isServiceValid("deflect")) {
try {
logOutgoing("deflect %s", callId);
- mServiceInterface.deflect(callId, address, Log.getExternalSession());
+ mServiceInterface.deflect(callId, address,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1618,9 +1624,10 @@
if (rejectWithMessage && call.can(
Connection.CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION)) {
- mServiceInterface.rejectWithMessage(callId, message, Log.getExternalSession());
+ mServiceInterface.rejectWithMessage(callId, message,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} else {
- mServiceInterface.reject(callId, Log.getExternalSession());
+ mServiceInterface.reject(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
}
} catch (RemoteException e) {
}
@@ -1634,7 +1641,8 @@
try {
logOutgoing("rejectReason %s, %d", callId, rejectReason);
- mServiceInterface.rejectWithReason(callId, rejectReason, Log.getExternalSession());
+ mServiceInterface.rejectWithReason(callId, rejectReason,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1647,7 +1655,7 @@
try {
logOutgoing("transfer %s", callId);
mServiceInterface.transfer(callId, number, isConfirmationRequired,
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1661,7 +1669,7 @@
try {
logOutgoing("consultativeTransfer %s", callId);
mServiceInterface.consultativeTransfer(callId, otherCallId,
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1673,7 +1681,8 @@
if (callId != null && isServiceValid("playDtmfTone")) {
try {
logOutgoing("playDtmfTone %s %c", callId, digit);
- mServiceInterface.playDtmfTone(callId, digit, Log.getExternalSession());
+ mServiceInterface.playDtmfTone(callId, digit,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1685,7 +1694,8 @@
if (callId != null && isServiceValid("stopDtmfTone")) {
try {
logOutgoing("stopDtmfTone %s", callId);
- mServiceInterface.stopDtmfTone(callId, Log.getExternalSession());
+ mServiceInterface.stopDtmfTone(callId,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException e) {
}
}
@@ -1732,7 +1742,8 @@
if (callId != null && isServiceValid("onPostDialContinue")) {
try {
logOutgoing("onPostDialContinue %s %b", callId, proceed);
- mServiceInterface.onPostDialContinue(callId, proceed, Log.getExternalSession());
+ mServiceInterface.onPostDialContinue(callId, proceed,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1744,7 +1755,8 @@
if (callId != null && otherCallId != null && isServiceValid("conference")) {
try {
logOutgoing("conference %s %s", callId, otherCallId);
- mServiceInterface.conference(callId, otherCallId, Log.getExternalSession());
+ mServiceInterface.conference(callId, otherCallId,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1755,7 +1767,8 @@
if (callId != null && isServiceValid("splitFromConference")) {
try {
logOutgoing("splitFromConference %s", callId);
- mServiceInterface.splitFromConference(callId, Log.getExternalSession());
+ mServiceInterface.splitFromConference(callId,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1766,7 +1779,8 @@
if (callId != null && isServiceValid("mergeConference")) {
try {
logOutgoing("mergeConference %s", callId);
- mServiceInterface.mergeConference(callId, Log.getExternalSession());
+ mServiceInterface.mergeConference(callId,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1777,7 +1791,8 @@
if (callId != null && isServiceValid("swapConference")) {
try {
logOutgoing("swapConference %s", callId);
- mServiceInterface.swapConference(callId, Log.getExternalSession());
+ mServiceInterface.swapConference(callId,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1789,7 +1804,7 @@
try {
logOutgoing("addConferenceParticipants %s", callId);
mServiceInterface.addConferenceParticipants(callId, participants,
- Log.getExternalSession());
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1801,7 +1816,8 @@
if (callId != null && isServiceValid("pullExternalCall")) {
try {
logOutgoing("pullExternalCall %s", callId);
- mServiceInterface.pullExternalCall(callId, Log.getExternalSession());
+ mServiceInterface.pullExternalCall(callId,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1812,7 +1828,8 @@
if (callId != null && isServiceValid("sendCallEvent")) {
try {
logOutgoing("sendCallEvent %s %s", callId, event);
- mServiceInterface.sendCallEvent(callId, event, extras, Log.getExternalSession());
+ mServiceInterface.sendCallEvent(callId, event, extras,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1823,7 +1840,8 @@
if (callId != null && isServiceValid("onExtrasChanged")) {
try {
logOutgoing("onExtrasChanged %s %s", callId, extras);
- mServiceInterface.onExtrasChanged(callId, extras, Log.getExternalSession());
+ mServiceInterface.onExtrasChanged(callId, extras,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1834,7 +1852,8 @@
if (callId != null && isServiceValid("startRtt")) {
try {
logOutgoing("startRtt: %s %s %s", callId, fromInCall, toInCall);
- mServiceInterface.startRtt(callId, fromInCall, toInCall, Log.getExternalSession());
+ mServiceInterface.startRtt(callId, fromInCall, toInCall,
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1845,7 +1864,7 @@
if (callId != null && isServiceValid("stopRtt")) {
try {
logOutgoing("stopRtt: %s", callId);
- mServiceInterface.stopRtt(callId, Log.getExternalSession());
+ mServiceInterface.stopRtt(callId, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1858,7 +1877,7 @@
try {
logOutgoing("respondToRttRequest: %s %s %s", callId, fromInCall, toInCall);
mServiceInterface.respondToRttUpgradeRequest(
- callId, fromInCall, toInCall, Log.getExternalSession());
+ callId, fromInCall, toInCall, Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
}
}
@@ -1897,7 +1916,8 @@
@Override
public void onSuccess() {
try {
- mServiceInterface.connectionServiceFocusLost(Log.getExternalSession());
+ mServiceInterface.connectionServiceFocusLost(
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
Log.d(this, "failed to inform the focus lost event");
}
@@ -1915,7 +1935,8 @@
@Override
public void onSuccess() {
try {
- mServiceInterface.connectionServiceFocusGained(Log.getExternalSession());
+ mServiceInterface.connectionServiceFocusGained(
+ Log.getExternalSession(TELECOM_ABBREVIATION));
} catch (RemoteException ignored) {
Log.d(this, "failed to inform the focus gained event");
}
@@ -2007,12 +2028,14 @@
}
private void logIncoming(String msg, Object... params) {
- Log.d(this, "ConnectionService -> Telecom[" + mComponentName.flattenToShortString() + "]: "
+ // Keep these as debug; the incoming logging is traced on a package level through the
+ // session logging.
+ Log.d(this, "CS -> TC[" + Log.getPackageAbbreviation(mComponentName) + "]: "
+ msg, params);
}
private void logOutgoing(String msg, Object... params) {
- Log.d(this, "Telecom -> ConnectionService[" + mComponentName.flattenToShortString() + "]: "
+ Log.d(this, "TC -> CS[" + Log.getPackageAbbreviation(mComponentName) + "]: "
+ msg, params);
}
diff --git a/src/com/android/server/telecom/CreateConnectionProcessor.java b/src/com/android/server/telecom/CreateConnectionProcessor.java
index a4b64a4..2221cb9 100644
--- a/src/com/android/server/telecom/CreateConnectionProcessor.java
+++ b/src/com/android/server/telecom/CreateConnectionProcessor.java
@@ -17,6 +17,7 @@
package com.android.server.telecom;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.telecom.DisconnectCause;
import android.telecom.Log;
import android.telecom.ParcelableConference;
@@ -388,7 +389,8 @@
List<PhoneAccount> allAccounts = mPhoneAccountRegistrar
.getAllPhoneAccountsOfCurrentUser();
- if (allAccounts.isEmpty()) {
+ if (allAccounts.isEmpty() && mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY)) {
// If the list of phone accounts is empty at this point, it means Telephony hasn't
// registered any phone accounts yet. Add a fallback emergency phone account so
// that emergency calls can still go through. We create a new ArrayLists here just
diff --git a/src/com/android/server/telecom/InCallAdapter.java b/src/com/android/server/telecom/InCallAdapter.java
index 3b66a51..0fda5f8 100755
--- a/src/com/android/server/telecom/InCallAdapter.java
+++ b/src/com/android/server/telecom/InCallAdapter.java
@@ -45,7 +45,7 @@
mCallIdMapper = callIdMapper;
mLock = lock;
mOwnerPackageName = ownerPackageName;
- mOwnerPackageAbbreviation = ServiceBinder.getPackageAbbreviation(ownerPackageName);
+ mOwnerPackageAbbreviation = Log.getPackageAbbreviation(ownerPackageName);
}
@Override
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index 5969659..d685a53 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -26,7 +26,6 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
@@ -199,7 +198,7 @@
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
- Log.startSession("ICSBC.oSC", ServiceBinder.getPackageAbbreviation(name));
+ Log.startSession("ICSBC.oSC", Log.getPackageAbbreviation(name));
synchronized (mLock) {
try {
Log.d(this, "onServiceConnected: %s %b %b", name, mIsBound, mIsConnected);
@@ -216,7 +215,7 @@
@Override
public void onServiceDisconnected(ComponentName name) {
- Log.startSession("ICSBC.oSD", ServiceBinder.getPackageAbbreviation(name));
+ Log.startSession("ICSBC.oSD", Log.getPackageAbbreviation(name));
synchronized (mLock) {
try {
Log.d(this, "onDisconnected: %s", name);
@@ -230,7 +229,7 @@
@Override
public void onNullBinding(ComponentName name) {
- Log.startSession("ICSBC.oNB", ServiceBinder.getPackageAbbreviation(name));
+ Log.startSession("ICSBC.oNB", Log.getPackageAbbreviation(name));
synchronized (mLock) {
try {
Log.d(this, "onNullBinding: %s", name);
@@ -245,7 +244,7 @@
@Override
public void onBindingDied(ComponentName name) {
- Log.startSession("ICSBC.oBD", ServiceBinder.getPackageAbbreviation(name));
+ Log.startSession("ICSBC.oBD", Log.getPackageAbbreviation(name));
synchronized (mLock) {
try {
Log.d(this, "onBindingDied: %s", name);
@@ -1405,10 +1404,12 @@
(systemPackageName != null && systemPackageName.equals(packageName))
? getInCallServiceComponent(packageName, IN_CALL_SERVICE_TYPE_SYSTEM_UI)
: getInCallServiceComponent(packageName, IN_CALL_SERVICE_TYPE_DIALER_UI);
- if (packageName != null && defaultDialerComponent == null) {
- // The in call service of default phone app is disabled, send notification.
- sendCrashedInCallServiceNotification(packageName);
- }
+ /* TODO: in Android 12 re-enable this an InCallService is required by the dialer role.
+ if (packageName != null && defaultDialerComponent == null) {
+ // The in call service of default phone app is disabled, send notification.
+ sendCrashedInCallServiceNotification(packageName);
+ }
+ */
return defaultDialerComponent;
}
@@ -1916,12 +1917,11 @@
builder.setSmallIcon(R.drawable.ic_phone)
.setColor(mContext.getResources().getColor(R.color.theme_color))
.setContentTitle(
- mContext.getText(
- R.string.notification_crashedInCallService_title))
+ mContext.getString(
+ R.string.notification_incallservice_not_responding_title, appName))
.setStyle(new Notification.BigTextStyle()
- .bigText(mContext.getString(
- R.string.notification_crashedInCallService_body,
- appName)));
+ .bigText(mContext.getText(
+ R.string.notification_incallservice_not_responding_body)));
notificationManager.notify(NOTIFICATION_TAG, IN_CALL_SERVICE_NOTIFICATION_ID,
builder.build());
}
diff --git a/src/com/android/server/telecom/ParcelableCallUtils.java b/src/com/android/server/telecom/ParcelableCallUtils.java
index f9c0045..a5291e7 100644
--- a/src/com/android/server/telecom/ParcelableCallUtils.java
+++ b/src/com/android/server/telecom/ParcelableCallUtils.java
@@ -381,7 +381,7 @@
private static int getParcelableState(Call call, boolean supportsExternalCalls) {
int state = CallState.NEW;
- switch (call.getState()) {
+ switch (call.getParcelableCallState()) {
case CallState.ABORTED:
case CallState.DISCONNECTED:
state = android.telecom.Call.STATE_DISCONNECTED;
@@ -433,12 +433,6 @@
break;
}
- // If we are marked as 'locally disconnecting' then mark ourselves as disconnecting instead.
- // Unless we're disconnect*ED*, in which case leave it at that.
- if (call.isLocallyDisconnecting() &&
- (state != android.telecom.Call.STATE_DISCONNECTED)) {
- state = android.telecom.Call.STATE_DISCONNECTING;
- }
return state;
}
diff --git a/src/com/android/server/telecom/RespondViaSmsManager.java b/src/com/android/server/telecom/RespondViaSmsManager.java
index a709ae5..00d94f0 100644
--- a/src/com/android/server/telecom/RespondViaSmsManager.java
+++ b/src/com/android/server/telecom/RespondViaSmsManager.java
@@ -212,7 +212,8 @@
messageParts.size());
context.registerReceiver(receiver, new IntentFilter(ACTION_MESSAGE_SENT));
smsManager.sendMultipartTextMessage(phoneNumber, null, messageParts,
- sentIntents/*sentIntent*/, null /*deliveryIntent*/, context.getOpPackageName());
+ sentIntents/*sentIntent*/, null /*deliveryIntent*/, context.getOpPackageName(),
+ context.getAttributionTag());
} catch (IllegalArgumentException e) {
Log.w(RespondViaSmsManager.this, "Couldn't send SMS message: " +
e.getMessage());
diff --git a/src/com/android/server/telecom/RespondViaSmsSettings.java b/src/com/android/server/telecom/RespondViaSmsSettings.java
index 3bee5f7..6d7c5c6 100644
--- a/src/com/android/server/telecom/RespondViaSmsSettings.java
+++ b/src/com/android/server/telecom/RespondViaSmsSettings.java
@@ -18,16 +18,18 @@
import android.app.ActionBar;
import android.app.Activity;
-import android.content.Context;
+import android.app.AlertDialog;
import android.content.SharedPreferences;
-import android.telecom.Log;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
-import android.view.Menu;
+import android.telecom.Log;
+import android.text.Editable;
+import android.text.TextWatcher;
import android.view.MenuItem;
+import android.widget.Button;
// TODO: This class is newly copied into Telecom (com.android.server.telecom) from it previous
// location in Telephony (com.android.phone). User's preferences stored in the old location
@@ -103,11 +105,15 @@
// (Watch out: onPreferenceChange() is called *before* the
// Preference itself gets updated, so we need to use newValue here
// rather than pref.getText().)
- pref.setTitle((String) newValue);
+ // If the newValue is an empty string, skip this to avoid setting an empty response.
+ // TODO: Show a popup to inform user that response didn't set because it's empty.
+ if (((String) newValue).length() != 0) {
+ pref.setTitle((String) newValue);
- // Save the new preference value.
- SharedPreferences.Editor editor = mPrefs.edit();
- editor.putString(pref.getKey(), (String) newValue).commit();
+ // Save the new preference value.
+ SharedPreferences.Editor editor = mPrefs.edit();
+ editor.putString(pref.getKey(), (String) newValue).commit();
+ }
// If the user just reset the quick response to its original text, clear the pref.
QuickResponseUtils.maybeResetQuickResponses(this, mPrefs);
@@ -141,6 +147,33 @@
EditTextPreference pref = (EditTextPreference) preference;
pref.setText(mPrefs.getString(pref.getKey(), pref.getText()));
pref.setTitle(pref.getText());
+ pref.getEditText().addTextChangedListener(new TextWatcher() {
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ try {
+ Button button = ((AlertDialog) pref.getDialog())
+ .getButton(AlertDialog.BUTTON_POSITIVE);
+ if (s.toString().length() == 0) {
+ button.setEnabled(false);
+ } else {
+ button.setEnabled(true);
+ }
+ } catch (NullPointerException e) {
+ Log.d(this, e.toString());
+ }
+ }
+ });
pref.setOnPreferenceChangeListener(this);
}
}
diff --git a/src/com/android/server/telecom/Ringer.java b/src/com/android/server/telecom/Ringer.java
index 7841199..a769a94 100644
--- a/src/com/android/server/telecom/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -20,27 +20,26 @@
import android.app.NotificationManager;
import android.app.Person;
import android.content.Context;
+import android.os.VibrationEffect;
+import android.telecom.Log;
+import android.telecom.TelecomManager;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.Ringtone;
import android.media.VolumeShaper;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.VibrationEffect;
import android.os.Vibrator;
-import android.telecom.Log;
-import android.telecom.TelecomManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.telecom.LogUtils.EventTimer;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
/**
* Controls the ringtone player.
@@ -75,6 +74,9 @@
private static final int[] PULSE_AMPLITUDE;
+ private static final int RAMPING_RINGER_VIBRATION_DURATION = 5000;
+ private static final int RAMPING_RINGER_DURATION = 10000;
+
static {
// construct complete pulse pattern
PULSE_PATTERN = new long[PULSE_PRIMING_PATTERN.length + PULSE_RAMPING_PATTERN.length];
@@ -112,15 +114,6 @@
private static final int REPEAT_SIMPLE_VIBRATION_AT = 1;
- private static final int DEFAULT_RAMPING_RINGER_DURATION = 10000; // 10 seconds
-
- private static final long RINGER_ATTRIBUTES_TIMEOUT = 5000; // 5 seconds
-
- private int mRampingRingerDuration = -1; // ramping ringer duration in millisecond
-
- // vibration duration before ramping ringer in second
- private int mRampingRingerVibrationDuration = 0;
-
private static final float EPSILON = 1e-6f;
private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder()
@@ -154,7 +147,6 @@
private InCallTonePlayer mCallWaitingPlayer;
private RingtoneFactory mRingtoneFactory;
- private AudioManager mAudioManager;
/**
* Call objects that are ringing, vibrating or call-waiting. These are used only for logging
@@ -169,8 +161,6 @@
*/
private boolean mIsVibrating = false;
- private Handler mHandler = null;
-
/** Initializes the Ringer. */
@VisibleForTesting
public Ringer(
@@ -193,7 +183,6 @@
mRingtoneFactory = ringtoneFactory;
mInCallController = inCallController;
mVibrationEffectProxy = vibrationEffectProxy;
- mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
if (mContext.getResources().getBoolean(R.bool.use_simple_vibration_pattern)) {
mDefaultVibrationEffect = mVibrationEffectProxy.createWaveform(SIMPLE_VIBRATION_PATTERN,
@@ -227,39 +216,58 @@
return false;
}
- // Use completable future to establish a timeout, not intent to make these work outside the
- // main thread asynchronously
- // TODO: moving these RingerAttributes calculation out of Telecom lock to avoid blocking.
- CompletableFuture<RingerAttributes> ringerAttributesFuture = CompletableFuture
- .supplyAsync(() -> getRingerAttributes(foregroundCall, isHfpDeviceAttached),
- new LoggedHandlerExecutor(getHandler(), "R.sR", null));
+ AudioManager audioManager =
+ (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ LogUtils.EventTimer timer = new EventTimer();
+ boolean isVolumeOverZero = audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0;
+ timer.record("isVolumeOverZero");
+ boolean shouldRingForContact = shouldRingForContact(foregroundCall.getContactUri());
+ timer.record("shouldRingForContact");
+ boolean isRingtonePresent = !(mRingtoneFactory.getRingtone(foregroundCall) == null);
+ timer.record("getRingtone");
+ boolean isSelfManaged = foregroundCall.isSelfManaged();
+ timer.record("isSelfManaged");
+ boolean isSilentRingingRequested = foregroundCall.isSilentRingingRequested();
+ timer.record("isSilentRingRequested");
- RingerAttributes attributes = null;
- try {
- attributes = ringerAttributesFuture.get(
- RINGER_ATTRIBUTES_TIMEOUT, TimeUnit.MILLISECONDS);
- } catch (ExecutionException | InterruptedException | TimeoutException e) {
- // Keep attributs as null
- Log.i(this, "getAttributes error: " + e);
- }
+ boolean isRingerAudible = isVolumeOverZero && shouldRingForContact && isRingtonePresent;
+ timer.record("isRingerAudible");
+ boolean hasExternalRinger = hasExternalRinger(foregroundCall);
+ timer.record("hasExternalRinger");
+ // Don't do call waiting operations or vibration unless these are false.
+ boolean isTheaterModeOn = mSystemSettingsUtil.isTheaterModeOn(mContext);
+ timer.record("isTheaterModeOn");
+ boolean letDialerHandleRinging = mInCallController.doesConnectedDialerSupportRinging();
+ timer.record("letDialerHandleRinging");
- if (attributes == null) {
- Log.addEvent(foregroundCall, LogUtils.Events.SKIP_RINGING, "RingerAttributes error");
- return false;
- }
+ Log.i(this, "startRinging timings: " + timer);
+ boolean endEarly = isTheaterModeOn || letDialerHandleRinging || isSelfManaged ||
+ hasExternalRinger || isSilentRingingRequested;
- if (attributes.isEndEarly()) {
- if (attributes.letDialerHandleRinging()) {
+ // Acquire audio focus under any of the following conditions:
+ // 1. Should ring for contact and there's an HFP device attached
+ // 2. Volume is over zero, we should ring for the contact, and there's a audible ringtone
+ // present.
+ // 3. The call is self-managed.
+ boolean shouldAcquireAudioFocus =
+ isRingerAudible || (isHfpDeviceAttached && shouldRingForContact) || isSelfManaged;
+
+ if (endEarly) {
+ if (letDialerHandleRinging) {
Log.addEvent(foregroundCall, LogUtils.Events.SKIP_RINGING, "Dialer handles");
}
- if (attributes.isSilentRingingRequested()) {
+ if (isSilentRingingRequested) {
Log.addEvent(foregroundCall, LogUtils.Events.SKIP_RINGING, "Silent ringing "
+ "requested");
}
+ Log.i(this, "Ending early -- isTheaterModeOn=%s, letDialerHandleRinging=%s, " +
+ "isSelfManaged=%s, hasExternalRinger=%s, silentRingingRequested=%s",
+ isTheaterModeOn, letDialerHandleRinging, isSelfManaged, hasExternalRinger,
+ isSilentRingingRequested);
if (mBlockOnRingingFuture != null) {
mBlockOnRingingFuture.complete(null);
}
- return attributes.shouldAcquireAudioFocus();
+ return shouldAcquireAudioFocus;
}
stopCallWaiting();
@@ -268,43 +276,25 @@
CompletableFuture<Boolean> hapticsFuture = null;
// Determine if the settings and DND mode indicate that the vibrator can be used right now.
boolean isVibratorEnabled = isVibratorEnabled(mContext, foregroundCall);
- if (attributes.isRingerAudible()) {
+ if (isRingerAudible) {
mRingingCall = foregroundCall;
Log.addEvent(foregroundCall, LogUtils.Events.START_RINGER);
// Because we wait until a contact info query to complete before processing a
// call (for the purposes of direct-to-voicemail), the information about custom
// ringtones should be available by the time this code executes. We can safely
// request the custom ringtone from the call and expect it to be current.
- if (mSystemSettingsUtil.applyRampingRinger(mContext)
- && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()) {
+ if (mSystemSettingsUtil.applyRampingRinger(mContext)) {
Log.i(this, "start ramping ringer.");
- // configure vibration effect for ramping ringer.
- int previousRampingRingerVibrationDuration = mRampingRingerVibrationDuration;
- // get vibration duration in millisecond and round down to second.
- mRampingRingerVibrationDuration =
- mSystemSettingsUtil.getRampingRingerVibrationDuration() >= 0
- ? mSystemSettingsUtil.getRampingRingerVibrationDuration() / 1000
- : 0;
if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) {
effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall);
} else {
effect = mDefaultVibrationEffect;
}
-
- // configure volume shaper for ramping ringer
- int previousRampingRingerDuration = mRampingRingerDuration;
- mRampingRingerDuration =
- mSystemSettingsUtil.getRampingRingerDuration() > 0
- ? mSystemSettingsUtil.getRampingRingerDuration()
- : DEFAULT_RAMPING_RINGER_DURATION;
- if (mRampingRingerDuration != previousRampingRingerDuration
- || mRampingRingerVibrationDuration != previousRampingRingerVibrationDuration
- || mVolumeShaperConfig == null) {
- float silencePoint = (float) (mRampingRingerVibrationDuration * 1000)
- / (float) (mRampingRingerVibrationDuration * 1000 + mRampingRingerDuration);
+ if (mVolumeShaperConfig == null) {
+ float silencePoint = (float) (RAMPING_RINGER_VIBRATION_DURATION)
+ / (float) (RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION);
mVolumeShaperConfig = new VolumeShaper.Configuration.Builder()
- .setDuration(mRampingRingerVibrationDuration * 1000
- + mRampingRingerDuration)
+ .setDuration(RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION)
.setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/,
1.f}, new float[] {0.f, 0.f, 1.f})
.setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR)
@@ -319,14 +309,15 @@
effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall);
}
} else {
- Log.addEvent(foregroundCall, LogUtils.Events.SKIP_RINGING, "Inaudible: "
- + attributes.getInaudibleReason());
+ String reason = String.format(
+ "isVolumeOverZero=%s, shouldRingForContact=%s, isRingtonePresent=%s",
+ isVolumeOverZero, shouldRingForContact, isRingtonePresent);
+ Log.i(this, "startRinging: skipping because ringer would not be audible. " + reason);
+ Log.addEvent(foregroundCall, LogUtils.Events.SKIP_RINGING, "Inaudible: " + reason);
effect = mDefaultVibrationEffect;
}
if (hapticsFuture != null) {
- final boolean shouldRingForContact = attributes.shouldRingForContact();
- final boolean isRingerAudible = attributes.isRingerAudible();
mVibrateFuture = hapticsFuture.thenAccept(isUsingAudioCoupledHaptics -> {
if (!isUsingAudioCoupledHaptics || !mIsHapticPlaybackSupportedByDevice) {
Log.i(this, "startRinging: fileHasHaptics=%b, hapticsSupported=%b",
@@ -334,7 +325,6 @@
maybeStartVibration(foregroundCall, shouldRingForContact, effect,
isVibratorEnabled, isRingerAudible);
} else if (mSystemSettingsUtil.applyRampingRinger(mContext)
- && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()
&& !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) {
Log.i(this, "startRinging: apply ramping ringer vibration");
maybeStartVibration(foregroundCall, shouldRingForContact, effect,
@@ -352,11 +342,11 @@
mBlockOnRingingFuture.complete(null);
}
Log.w(this, "startRinging: No haptics future; fallback to default behavior");
- maybeStartVibration(foregroundCall, attributes.shouldRingForContact(), effect,
- isVibratorEnabled, attributes.isRingerAudible());
+ maybeStartVibration(foregroundCall, shouldRingForContact, effect, isVibratorEnabled,
+ isRingerAudible);
}
- return attributes.shouldAcquireAudioFocus();
+ return shouldAcquireAudioFocus;
}
private void maybeStartVibration(Call foregroundCall, boolean shouldRingForContact,
@@ -364,7 +354,6 @@
if (isVibrationEnabled
&& !mIsVibrating && shouldRingForContact) {
if (mSystemSettingsUtil.applyRampingRinger(mContext)
- && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()
&& isRingerAudible) {
Log.i(this, "start vibration for ramping ringer.");
mIsVibrating = true;
@@ -469,6 +458,10 @@
}
}
+ public boolean isRinging() {
+ return mRingtonePlayer.isPlaying();
+ }
+
private boolean shouldRingForContact(Uri contactUri) {
final NotificationManager manager =
(NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
@@ -522,78 +515,6 @@
return false;
}
return mSystemSettingsUtil.canVibrateWhenRinging(context)
- || (mSystemSettingsUtil.applyRampingRinger(context)
- && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig());
- }
-
- private RingerAttributes getRingerAttributes(Call call, boolean isHfpDeviceAttached) {
- RingerAttributes.Builder builder = new RingerAttributes.Builder();
-
- LogUtils.EventTimer timer = new EventTimer();
-
- boolean isVolumeOverZero = mAudioManager.getStreamVolume(AudioManager.STREAM_RING) > 0;
- timer.record("isVolumeOverZero");
- boolean shouldRingForContact = shouldRingForContact(call.getContactUri());
- timer.record("shouldRingForContact");
- boolean isRingtonePresent = !(mRingtoneFactory.getRingtone(call) == null);
- timer.record("getRingtone");
- boolean isSelfManaged = call.isSelfManaged();
- timer.record("isSelfManaged");
- boolean isSilentRingingRequested = call.isSilentRingingRequested();
- timer.record("isSilentRingRequested");
-
- boolean isRingerAudible = isVolumeOverZero && shouldRingForContact && isRingtonePresent;
- timer.record("isRingerAudible");
- String inaudibleReason = "";
- if (!isRingerAudible) {
- inaudibleReason = String.format(
- "isVolumeOverZero=%s, shouldRingForContact=%s, isRingtonePresent=%s",
- isVolumeOverZero, shouldRingForContact, isRingtonePresent);
- }
-
- boolean hasExternalRinger = hasExternalRinger(call);
- timer.record("hasExternalRinger");
- // Don't do call waiting operations or vibration unless these are false.
- boolean isTheaterModeOn = mSystemSettingsUtil.isTheaterModeOn(mContext);
- timer.record("isTheaterModeOn");
- boolean letDialerHandleRinging = mInCallController.doesConnectedDialerSupportRinging();
- timer.record("letDialerHandleRinging");
-
- Log.i(this, "startRinging timings: " + timer);
- boolean endEarly = isTheaterModeOn || letDialerHandleRinging || isSelfManaged ||
- hasExternalRinger || isSilentRingingRequested;
-
- if (endEarly) {
- Log.i(this, "Ending early -- isTheaterModeOn=%s, letDialerHandleRinging=%s, " +
- "isSelfManaged=%s, hasExternalRinger=%s, silentRingingRequested=%s",
- isTheaterModeOn, letDialerHandleRinging, isSelfManaged, hasExternalRinger,
- isSilentRingingRequested);
- }
-
- // Acquire audio focus under any of the following conditions:
- // 1. Should ring for contact and there's an HFP device attached
- // 2. Volume is over zero, we should ring for the contact, and there's a audible ringtone
- // present.
- // 3. The call is self-managed.
- boolean shouldAcquireAudioFocus =
- isRingerAudible || (isHfpDeviceAttached && shouldRingForContact) || isSelfManaged;
-
- return builder.setEndEarly(endEarly)
- .setLetDialerHandleRinging(letDialerHandleRinging)
- .setAcquireAudioFocus(shouldAcquireAudioFocus)
- .setRingerAudible(isRingerAudible)
- .setInaudibleReason(inaudibleReason)
- .setShouldRingForContact(shouldRingForContact)
- .setSilentRingingRequested(isSilentRingingRequested)
- .build();
- }
-
- private Handler getHandler() {
- if (mHandler == null) {
- HandlerThread handlerThread = new HandlerThread("Ringer");
- handlerThread.start();
- mHandler = handlerThread.getThreadHandler();
- }
- return mHandler;
+ || mSystemSettingsUtil.applyRampingRinger(context);
}
}
diff --git a/src/com/android/server/telecom/RingerAttributes.java b/src/com/android/server/telecom/RingerAttributes.java
deleted file mode 100644
index 840d815..0000000
--- a/src/com/android/server/telecom/RingerAttributes.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2020 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;
-
-public class RingerAttributes {
- public static class Builder {
- private boolean mEndEarly;
- private boolean mLetDialerHandleRinging;
- private boolean mAcquireAudioFocus;
- private boolean mRingerAudible;
- private String mInaudibleReason;
- private boolean mShouldRingForContact;
- private boolean mSilentRingingRequested;
-
- public RingerAttributes.Builder setEndEarly(boolean endEarly) {
- mEndEarly = endEarly;
- return this;
- }
-
- public RingerAttributes.Builder setLetDialerHandleRinging(boolean letDialerHandleRinging) {
- mLetDialerHandleRinging = letDialerHandleRinging;
- return this;
- }
-
- public RingerAttributes.Builder setAcquireAudioFocus(boolean acquireAudioFocus) {
- mAcquireAudioFocus = acquireAudioFocus;
- return this;
- }
-
- public RingerAttributes.Builder setRingerAudible(boolean ringerAudible) {
- mRingerAudible = ringerAudible;
- return this;
- }
-
- public RingerAttributes.Builder setInaudibleReason(String inaudibleReason) {
- mInaudibleReason = inaudibleReason;
- return this;
- }
-
- public RingerAttributes.Builder setShouldRingForContact(boolean shouldRingForContact) {
- mShouldRingForContact = shouldRingForContact;
- return this;
- }
-
- public RingerAttributes.Builder setSilentRingingRequested(boolean silentRingingRequested) {
- mSilentRingingRequested = silentRingingRequested;
- return this;
- }
-
- public RingerAttributes build() {
- return new RingerAttributes(mEndEarly, mLetDialerHandleRinging, mAcquireAudioFocus,
- mRingerAudible, mInaudibleReason, mShouldRingForContact,
- mSilentRingingRequested);
- }
- }
-
- private boolean mEndEarly;
- private boolean mLetDialerHandleRinging;
- private boolean mAcquireAudioFocus;
- private boolean mRingerAudible;
- private String mInaudibleReason;
- private boolean mShouldRingForContact;
- private boolean mSilentRingingRequested;
-
- private RingerAttributes(boolean endEarly, boolean letDialerHandleRinging,
- boolean acquireAudioFocus, boolean ringerAudible, String inaudibleReason,
- boolean shouldRingForContact, boolean silentRingingRequested) {
- mEndEarly = endEarly;
- mLetDialerHandleRinging = letDialerHandleRinging;
- mAcquireAudioFocus = acquireAudioFocus;
- mRingerAudible = ringerAudible;
- mInaudibleReason = inaudibleReason;
- mShouldRingForContact = shouldRingForContact;
- mSilentRingingRequested = silentRingingRequested;
- }
-
- public boolean isEndEarly() {
- return mEndEarly;
- }
-
- public boolean letDialerHandleRinging() {
- return mLetDialerHandleRinging;
- }
-
- public boolean shouldAcquireAudioFocus() {
- return mAcquireAudioFocus;
- }
-
- public boolean isRingerAudible() {
- return mRingerAudible;
- }
-
- public String getInaudibleReason() {
- return mInaudibleReason;
- }
-
- public boolean shouldRingForContact() {
- return mShouldRingForContact;
- }
-
- public boolean isSilentRingingRequested() {
- return mSilentRingingRequested;
- }
-}
diff --git a/src/com/android/server/telecom/ServiceBinder.java b/src/com/android/server/telecom/ServiceBinder.java
index 3ad9070..aa2e2a2 100644
--- a/src/com/android/server/telecom/ServiceBinder.java
+++ b/src/com/android/server/telecom/ServiceBinder.java
@@ -30,11 +30,9 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
/**
* Abstract class to perform the work of binding and unbinding to the specified service interface.
@@ -123,7 +121,7 @@
try {
synchronized (mLock) {
Log.startSession("SDR.bD",
- ServiceBinder.getPackageAbbreviation(mComponentName));
+ Log.getPackageAbbreviation(mComponentName));
Log.i(this, "binderDied: ConnectionService %s died.", mComponentName);
logServiceDisconnected("binderDied");
handleDisconnect();
@@ -147,7 +145,7 @@
@Override
public void onServiceConnected(ComponentName componentName, IBinder binder) {
try {
- Log.startSession("SBC.oSC", getPackageAbbreviation(componentName));
+ Log.startSession("SBC.oSC", Log.getPackageAbbreviation(componentName));
synchronized (mLock) {
Log.i(this, "Service bound %s", componentName);
@@ -185,7 +183,7 @@
@Override
public void onServiceDisconnected(ComponentName componentName) {
try {
- Log.startSession("SBC.oSD", getPackageAbbreviation(componentName));
+ Log.startSession("SBC.oSD", Log.getPackageAbbreviation(componentName));
synchronized (mLock) {
logServiceDisconnected("onServiceDisconnected");
handleDisconnect();
@@ -269,7 +267,7 @@
mLock = lock;
mServiceAction = serviceAction;
mComponentName = componentName;
- mPackageAbbreviation = getPackageAbbreviation(componentName);
+ mPackageAbbreviation = Log.getPackageAbbreviation(componentName);
mUserHandle = userHandle;
}
@@ -450,32 +448,4 @@
* Removes the service interface before the service is unbound.
*/
protected abstract void removeServiceInterface();
-
- /**
- * Generates an abbreviated version of the package name from a component.
- * E.g. com.android.phone becomes cap
- * @param componentName The component name to abbreviate.
- * @return Abbreviation of empty string if component is null.
- */
- public static String getPackageAbbreviation(ComponentName componentName) {
- if (componentName == null) {
- return "";
- }
- return getPackageAbbreviation(componentName.getPackageName());
- }
-
- /**
- * Generates an abbreviated version of the package name.
- * E.g. com.android.phone becomes cap
- * @param packageName The packageName name to abbreviate.
- * @return Abbreviation of empty string if package is null.
- */
- public static String getPackageAbbreviation(String packageName) {
- if (packageName == null) {
- return "";
- }
- return Arrays.stream(packageName.split("\\."))
- .map(s -> s.substring(0,1))
- .collect(Collectors.joining(""));
- }
}
diff --git a/src/com/android/server/telecom/SystemSettingsUtil.java b/src/com/android/server/telecom/SystemSettingsUtil.java
index 62e1a68..f104f27 100644
--- a/src/com/android/server/telecom/SystemSettingsUtil.java
+++ b/src/com/android/server/telecom/SystemSettingsUtil.java
@@ -30,16 +30,6 @@
@VisibleForTesting
public class SystemSettingsUtil {
- /** Flag for ringer ramping time in milliseconds. */
- private static final String RAMPING_RINGER_DURATION_MILLIS = "ramping_ringer_duration";
-
- /** Flag for vibration time in milliseconds before ramping ringer starts. */
- private static final String RAMPING_RINGER_VIBRATION_DURATION =
- "ramping_ringer_vibration_duration";
-
- /** Flag for whether or not to apply ramping ringer on incoming phone calls. */
- private static final String RAMPING_RINGER_ENABLED = "ramping_ringer_enabled";
-
/** Flag for whether or not to support audio coupled haptics in ramping ringer. */
private static final String RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED =
"ramping_ringer_audio_coupled_vibration_enabled";
@@ -69,26 +59,11 @@
Settings.Global.APPLY_RAMPING_RINGER, 0) == 1;
}
- public boolean enableRampingRingerFromDeviceConfig() {
- return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED,
- false);
- }
-
public boolean enableAudioCoupledVibrationForRampingRinger() {
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY,
RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED, false);
}
- public int getRampingRingerDuration() {
- return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TELEPHONY,
- RAMPING_RINGER_DURATION_MILLIS, -1);
- }
-
- public int getRampingRingerVibrationDuration() {
- return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TELEPHONY,
- RAMPING_RINGER_VIBRATION_DURATION, 0);
- }
-
public boolean isHapticPlaybackSupported(Context context) {
return context.getSystemService(AudioManager.class).isHapticPlaybackSupported();
}
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 9421639..1cf25a3 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -20,8 +20,10 @@
import static android.Manifest.permission.CALL_PRIVILEGED;
import static android.Manifest.permission.DUMP;
import static android.Manifest.permission.MODIFY_PHONE_STATE;
+import static android.Manifest.permission.READ_PHONE_NUMBERS;
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE;
+import static android.Manifest.permission.READ_SMS;
import static android.Manifest.permission.REGISTER_SIM_SUBSCRIPTION;
import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
@@ -55,6 +57,7 @@
import android.util.EventLog;
import com.android.internal.telecom.ITelecomService;
+import com.android.internal.telephony.TelephonyPermissions;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.telecom.components.UserCallIntentProcessorFactory;
import com.android.server.telecom.settings.BlockedNumbersActivity;
@@ -109,18 +112,15 @@
private final ITelecomService.Stub mBinderImpl = new ITelecomService.Stub() {
@Override
public PhoneAccountHandle getDefaultOutgoingPhoneAccount(String uriScheme,
- String callingPackage) {
+ String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.gDOPA");
synchronized (mLock) {
- if (!canReadPhoneState(callingPackage, "getDefaultOutgoingPhoneAccount")) {
- return null;
- }
-
+ PhoneAccountHandle phoneAccountHandle = null;
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar
+ phoneAccountHandle = mPhoneAccountRegistrar
.getOutgoingPhoneAccountForScheme(uriScheme, callingUserHandle);
} catch (Exception e) {
Log.e(this, e, "getDefaultOutgoingPhoneAccount");
@@ -128,6 +128,14 @@
} finally {
Binder.restoreCallingIdentity(token);
}
+ if (isCallerSimCallManager(phoneAccountHandle)
+ || canReadPhoneState(
+ callingPackage,
+ callingFeatureId,
+ "getDefaultOutgoingPhoneAccount")) {
+ return phoneAccountHandle;
+ }
+ return null;
}
} finally {
Log.endSession();
@@ -180,7 +188,7 @@
@Override
public List<PhoneAccountHandle> getCallCapablePhoneAccounts(
- boolean includeDisabledAccounts, String callingPackage) {
+ boolean includeDisabledAccounts, String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.gCCPA");
if (includeDisabledAccounts &&
@@ -188,7 +196,8 @@
callingPackage, "getCallCapablePhoneAccounts")) {
return Collections.emptyList();
}
- if (!canReadPhoneState(callingPackage, "getCallCapablePhoneAccounts")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId,
+ "getCallCapablePhoneAccounts")) {
return Collections.emptyList();
}
synchronized (mLock) {
@@ -210,10 +219,12 @@
}
@Override
- public List<PhoneAccountHandle> getSelfManagedPhoneAccounts(String callingPackage) {
+ public List<PhoneAccountHandle> getSelfManagedPhoneAccounts(String callingPackage,
+ String callingFeatureId) {
try {
Log.startSession("TSI.gSMPA");
- if (!canReadPhoneState(callingPackage, "Requires READ_PHONE_STATE permission.")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId,
+ "Requires READ_PHONE_STATE permission.")) {
throw new SecurityException("Requires READ_PHONE_STATE permission.");
}
synchronized (mLock) {
@@ -564,11 +575,11 @@
*/
@Override
public boolean isVoiceMailNumber(PhoneAccountHandle accountHandle, String number,
- String callingPackage) {
+ String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.iVMN");
synchronized (mLock) {
- if (!canReadPhoneState(callingPackage, "isVoiceMailNumber")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "isVoiceMailNumber")) {
return false;
}
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
@@ -596,10 +607,11 @@
* @see android.telecom.TelecomManager#getVoiceMailNumber
*/
@Override
- public String getVoiceMailNumber(PhoneAccountHandle accountHandle, String callingPackage) {
+ public String getVoiceMailNumber(PhoneAccountHandle accountHandle, String callingPackage,
+ String callingFeatureId) {
try {
Log.startSession("TSI.gVMN");
- if (!canReadPhoneState(callingPackage, "getVoiceMailNumber")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "getVoiceMailNumber")) {
return null;
}
try {
@@ -631,10 +643,11 @@
* @see android.telecom.TelecomManager#getLine1Number
*/
@Override
- public String getLine1Number(PhoneAccountHandle accountHandle, String callingPackage) {
+ public String getLine1Number(PhoneAccountHandle accountHandle, String callingPackage,
+ String callingFeatureId) {
try {
Log.startSession("getL1N");
- if (!canReadPhoneState(callingPackage, "getLine1Number")) {
+ if (!canReadPhoneNumbers(callingPackage, callingFeatureId, "getLine1Number")) {
return null;
}
@@ -785,10 +798,10 @@
* @see android.telecom.TelecomManager#isInCall
*/
@Override
- public boolean isInCall(String callingPackage) {
+ public boolean isInCall(String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.iIC");
- if (!canReadPhoneState(callingPackage, "isInCall")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "isInCall")) {
return false;
}
@@ -804,10 +817,10 @@
* @see android.telecom.TelecomManager#isInManagedCall
*/
@Override
- public boolean isInManagedCall(String callingPackage) {
+ public boolean isInManagedCall(String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.iIMC");
- if (!canReadPhoneState(callingPackage, "isInManagedCall")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "isInManagedCall")) {
throw new SecurityException("Only the default dialer or caller with " +
"READ_PHONE_STATE permission can use this method.");
}
@@ -938,10 +951,11 @@
* @see android.telecom.TelecomManager#showInCallScreen
*/
@Override
- public void showInCallScreen(boolean showDialpad, String callingPackage) {
+ public void showInCallScreen(boolean showDialpad, String callingPackage,
+ String callingFeatureId) {
try {
Log.startSession("TSI.sICS");
- if (!canReadPhoneState(callingPackage, "showInCallScreen")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "showInCallScreen")) {
return;
}
@@ -1087,10 +1101,10 @@
* @see android.telecom.TelecomManager#isTtySupported
*/
@Override
- public boolean isTtySupported(String callingPackage) {
+ public boolean isTtySupported(String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.iTS");
- if (!canReadPhoneState(callingPackage, "isTtySupported")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "isTtySupported")) {
throw new SecurityException("Only default dialer or an app with" +
"READ_PRIVILEGED_PHONE_STATE or READ_PHONE_STATE can call this api");
}
@@ -1107,10 +1121,10 @@
* @see android.telecom.TelecomManager#getCurrentTtyMode
*/
@Override
- public int getCurrentTtyMode(String callingPackage) {
+ public int getCurrentTtyMode(String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.gCTM");
- if (!canReadPhoneState(callingPackage, "getCurrentTtyMode")) {
+ if (!canReadPhoneState(callingPackage, callingFeatureId, "getCurrentTtyMode")) {
return TelecomManager.TTY_MODE_OFF;
}
@@ -1357,7 +1371,8 @@
* @see android.telecom.TelecomManager#placeCall
*/
@Override
- public void placeCall(Uri handle, Bundle extras, String callingPackage) {
+ public void placeCall(Uri handle, Bundle extras, String callingPackage,
+ String callingFeatureId) {
try {
Log.startSession("TSI.pC");
enforceCallingPackage(callingPackage);
@@ -1379,14 +1394,14 @@
if (!callingPackage.equals(
phoneAccountHandle.getComponentName().getPackageName())
- && !canCallPhone(callingPackage,
+ && !canCallPhone(callingPackage, callingFeatureId,
"CALL_PHONE permission required to place calls.")) {
// The caller is not allowed to place calls, so we want to ensure that it
// can only place calls through itself.
throw new SecurityException("Self-managed ConnectionServices can only "
+ "place calls through their own ConnectionService.");
}
- } else if (!canCallPhone(callingPackage, "placeCall")) {
+ } else if (!canCallPhone(callingPackage, callingFeatureId, "placeCall")) {
throw new SecurityException("Package " + callingPackage
+ " is not allowed to place phone calls");
}
@@ -1399,7 +1414,8 @@
// by {@link UserCallIntentProcessor}.
final boolean hasCallAppOp = mAppOpsManager.noteOp(AppOpsManager.OP_CALL_PHONE,
- Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+ Binder.getCallingUid(), callingPackage, callingFeatureId, null)
+ == AppOpsManager.MODE_ALLOWED;
final boolean hasCallPermission = mContext.checkCallingPermission(CALL_PHONE) ==
PackageManager.PERMISSION_GRANTED;
@@ -2138,7 +2154,8 @@
throw new SecurityException(message + ": Only shell user can call it");
}
- private boolean canReadPhoneState(String callingPackage, String message) {
+ private boolean canReadPhoneState(String callingPackage, String callingFeatureId,
+ String message) {
// The system/default dialer can always read phone state - so that emergency calls will
// still work.
if (isPrivilegedDialerCalling(callingPackage)) {
@@ -2155,11 +2172,64 @@
mContext.enforceCallingOrSelfPermission(READ_PHONE_STATE, message);
// Some apps that have the permission can be restricted via app ops.
- return mAppOpsManager.noteOp(AppOpsManager.OP_READ_PHONE_STATE,
- Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+ return mAppOpsManager.noteOp(AppOpsManager.OP_READ_PHONE_STATE, Binder.getCallingUid(),
+ callingPackage, callingFeatureId, message) == AppOpsManager.MODE_ALLOWED;
}
}
+ private boolean canReadPhoneNumbers(String callingPackage, String callingFeatureId,
+ String message) {
+ boolean targetSdkPreR = false;
+ int uid = Binder.getCallingUid();
+ try {
+ ApplicationInfo applicationInfo = mPackageManager.getApplicationInfoAsUser(
+ callingPackage, 0, UserHandle.getUserHandleForUid(Binder.getCallingUid()));
+ targetSdkPreR = applicationInfo != null
+ && applicationInfo.targetSdkVersion < Build.VERSION_CODES.R;
+ } catch (PackageManager.NameNotFoundException e) {
+ // In the case that the PackageManager cannot find the specified calling package apply
+ // the more restrictive target R+ requirements.
+ }
+ // Apps targeting pre-R can access phone numbers via READ_PHONE_STATE
+ if (targetSdkPreR) {
+ try {
+ return canReadPhoneState(callingPackage, callingFeatureId, message);
+ } catch (SecurityException e) {
+ // Apps targeting pre-R can still access phone numbers via the additional checks
+ // below.
+ }
+ } else {
+ // The system/default dialer can always read phone state - so that emergency calls will
+ // still work.
+ if (isPrivilegedDialerCalling(callingPackage)) {
+ return true;
+ }
+ if (mContext.checkCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE)
+ == PackageManager.PERMISSION_GRANTED) {
+ return true;
+ }
+ }
+ if (mContext.checkCallingOrSelfPermission(READ_PHONE_NUMBERS)
+ == PackageManager.PERMISSION_GRANTED && mAppOpsManager.noteOpNoThrow(
+ AppOpsManager.OPSTR_READ_PHONE_NUMBERS, uid, callingPackage, callingFeatureId,
+ message) == AppOpsManager.MODE_ALLOWED) {
+ return true;
+ }
+ if (mContext.checkCallingOrSelfPermission(READ_SMS) == PackageManager.PERMISSION_GRANTED
+ && mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_READ_SMS, uid, callingPackage,
+ callingFeatureId, message) == AppOpsManager.MODE_ALLOWED) {
+ return true;
+ }
+ // The default SMS app with the WRITE_SMS appop granted can access phone numbers.
+ if (mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_WRITE_SMS, uid, callingPackage,
+ callingFeatureId, message) == AppOpsManager.MODE_ALLOWED) {
+ return true;
+ }
+ throw new SecurityException("Package " + callingPackage
+ + " does not meet the requirements to access the phone number");
+ }
+
+
private boolean canReadPrivilegedPhoneState(String callingPackage, String message) {
// The system/default dialer can always read phone state - so that emergency calls will
// still work.
@@ -2194,6 +2264,10 @@
}
private boolean canCallPhone(String callingPackage, String message) {
+ return canCallPhone(callingPackage, null /* featureId */, message);
+ }
+
+ private boolean canCallPhone(String callingPackage, String callingFeatureId, String message) {
// The system/default dialer can always read phone state - so that emergency calls will
// still work.
if (isPrivilegedDialerCalling(callingPackage)) {
@@ -2205,7 +2279,8 @@
// Some apps that have the permission can be restricted via app ops.
return mAppOpsManager.noteOp(AppOpsManager.OP_CALL_PHONE,
- Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+ Binder.getCallingUid(), callingPackage, callingFeatureId, message)
+ == AppOpsManager.MODE_ALLOWED;
}
private boolean isCallerSimCallManager(PhoneAccountHandle targetPhoneAccount) {
diff --git a/src/com/android/server/telecom/TelecomSystem.java b/src/com/android/server/telecom/TelecomSystem.java
index f3b3895..807cc2d 100644
--- a/src/com/android/server/telecom/TelecomSystem.java
+++ b/src/com/android/server/telecom/TelecomSystem.java
@@ -32,6 +32,7 @@
import com.android.server.telecom.DefaultDialerCache.DefaultDialerManagerAdapter;
import com.android.server.telecom.ui.ToastFactory;
+import android.app.ActivityManager;
import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -336,9 +337,19 @@
mRespondViaSmsManager = new RespondViaSmsManager(mCallsManager, mLock);
mCallsManager.setRespondViaSmsManager(mRespondViaSmsManager);
- mContext.registerReceiver(mUserSwitchedReceiver, USER_SWITCHED_FILTER);
- mContext.registerReceiver(mUserStartingReceiver, USER_STARTING_FILTER);
- mContext.registerReceiver(mBootCompletedReceiver, BOOT_COMPLETE_FILTER);
+ mContext.registerReceiverAsUser(mUserSwitchedReceiver, UserHandle.ALL,
+ USER_SWITCHED_FILTER, null, null);
+ mContext.registerReceiverAsUser(mUserStartingReceiver, UserHandle.ALL,
+ USER_STARTING_FILTER, null, null);
+ mContext.registerReceiverAsUser(mBootCompletedReceiver, UserHandle.ALL,
+ BOOT_COMPLETE_FILTER, null, null);
+
+ // Set current user explicitly since USER_SWITCHED_FILTER intent can be missed at startup
+ synchronized(mLock) {
+ UserHandle currentUserHandle = UserHandle.of(ActivityManager.getCurrentUser());
+ mPhoneAccountRegistrar.setCurrentUserHandle(currentUserHandle);
+ mCallsManager.onUserSwitch(currentUserHandle);
+ }
mBluetoothPhoneServiceImpl = bluetoothPhoneServiceImplFactory.makeBluetoothPhoneServiceImpl(
mContext, mLock, mCallsManager, mPhoneAccountRegistrar);
diff --git a/src/com/android/server/telecom/Timeouts.java b/src/com/android/server/telecom/Timeouts.java
index 37f9363..a701b88 100644
--- a/src/com/android/server/telecom/Timeouts.java
+++ b/src/com/android/server/telecom/Timeouts.java
@@ -29,7 +29,8 @@
*/
public final class Timeouts {
public static class Adapter {
- public Adapter() { }
+ public Adapter() {
+ }
public long getCallScreeningTimeoutMillis(ContentResolver cr) {
return Timeouts.getCallScreeningTimeoutMillis(cr);
@@ -62,20 +63,25 @@
public long getPhoneAccountSuggestionServiceTimeout(ContentResolver cr) {
return Timeouts.getPhoneAccountSuggestionServiceTimeout(cr);
}
+
+ public long getCallRecordingToneRepeatIntervalMillis(ContentResolver cr) {
+ return Timeouts.getCallRecordingToneRepeatIntervalMillis(cr);
+ }
}
/** A prefix to use for all keys so to not clobber the global namespace. */
private static final String PREFIX = "telecom.";
- private Timeouts() {}
+ private Timeouts() {
+ }
/**
* Returns the timeout value from Settings or the default value if it hasn't been changed. This
* method is safe to call from any thread, including the UI thread.
*
* @param contentResolver The content resolved.
- * @param key Settings key to retrieve.
- * @param defaultValue Default value, in milliseconds.
+ * @param key Settings key to retrieve.
+ * @param defaultValue Default value, in milliseconds.
* @return The timeout value from Settings or the default value if it hasn't been changed.
*/
private static long get(ContentResolver contentResolver, String key, long defaultValue) {
@@ -176,8 +182,8 @@
* as potential emergency callbacks.
*/
public static long getEmergencyCallbackWindowMillis(ContentResolver contentResolver) {
- return get(contentResolver, "emergency_callback_window_millis",
- TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES));
+ return get(contentResolver, "emergency_callback_window_millis",
+ TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES));
}
/**
@@ -187,7 +193,7 @@
*/
public static long getUserDefinedCallRedirectionTimeoutMillis(ContentResolver contentResolver) {
return get(contentResolver, "user_defined_call_redirection_timeout",
- 5000L /* 5 seconds */);
+ 5000L /* 5 seconds */);
}
/**
@@ -198,4 +204,11 @@
public static long getCarrierCallRedirectionTimeoutMillis(ContentResolver contentResolver) {
return get(contentResolver, "carrier_call_redirection_timeout", 5000L /* 5 seconds */);
}
+
+ /**
+ * Returns the number of milliseconds between two plays of the call recording tone.
+ */
+ public static long getCallRecordingToneRepeatIntervalMillis(ContentResolver contentResolver) {
+ return get(contentResolver, "call_recording_tone_repeat_interval", 15000L /* 15 seconds */);
+ }
}
diff --git a/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java b/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java
index 51608a0..1e52c5a 100644
--- a/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java
+++ b/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java
@@ -34,6 +34,7 @@
import com.android.server.telecom.Call;
import com.android.server.telecom.CallScreeningServiceHelper;
import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.LogUtils;
import com.android.server.telecom.ParcelableCallUtils;
import java.util.concurrent.CompletableFuture;
@@ -70,6 +71,7 @@
if (mCall == null || (!mCall.getId().equals(callId))) {
Log.w(this, "allowCall, unknown call id: %s", callId);
}
+ Log.addEvent(mCall, LogUtils.Events.SCREENING_COMPLETED, mPriorStageResult);
mResultFuture.complete(mPriorStageResult);
} finally {
unbindCallScreeningService();
@@ -86,7 +88,7 @@
Log.startSession("NCSSF.dC");
try {
if (mCall != null && mCall.getId().equals(callId)) {
- mResultFuture.complete(new CallFilteringResult.Builder()
+ CallFilteringResult result = new CallFilteringResult.Builder()
.setShouldAllowCall(false)
.setShouldReject(shouldReject)
.setShouldSilence(false)
@@ -97,7 +99,9 @@
.setCallScreeningAppName(mAppName)
.setCallScreeningComponentName(componentName.flattenToString())
.setContactExists(mPriorStageResult.contactExists)
- .build());
+ .build();
+ Log.addEvent(mCall, LogUtils.Events.SCREENING_COMPLETED, result);
+ mResultFuture.complete(result);
} else {
Log.w(this, "disallowCall, unknown call id: %s", callId);
mResultFuture.complete(mPriorStageResult);
@@ -115,14 +119,16 @@
Log.startSession("NCSSF.sC");
try {
if (mCall != null && mCall.getId().equals(callId)) {
- mResultFuture.complete(new CallFilteringResult.Builder()
+ CallFilteringResult result = new CallFilteringResult.Builder()
.setShouldAllowCall(true)
.setShouldReject(false)
.setShouldSilence(true)
.setShouldAddToCallLog(true)
.setShouldShowNotification(true)
.setContactExists(mPriorStageResult.contactExists)
- .build());
+ .build();
+ Log.addEvent(mCall, LogUtils.Events.SCREENING_COMPLETED, result);
+ mResultFuture.complete(result);
} else {
Log.w(this, "silenceCall, unknown call id: %s", callId);
mResultFuture.complete(mPriorStageResult);
@@ -146,14 +152,16 @@
try {
if (mCall != null && mCall.getId().equals(callId)) {
- mResultFuture.complete(new CallFilteringResult.Builder()
+ CallFilteringResult result = new CallFilteringResult.Builder()
.setShouldAllowCall(true)
.setShouldReject(false)
.setShouldSilence(false)
.setShouldScreenViaAudio(true)
.setCallScreeningAppName(mAppName)
.setContactExists(mPriorStageResult.contactExists)
- .build());
+ .build();
+ Log.addEvent(mCall, LogUtils.Events.SCREENING_COMPLETED, result);
+ mResultFuture.complete(result);
} else {
Log.w(this, "screenCallFurther, unknown call id: %s", callId);
mResultFuture.complete(mPriorStageResult);
@@ -185,6 +193,7 @@
Log.e(this, e, "Failed to set the call screening adapter");
mResultFuture.complete(mPriorStageResult);
}
+ Log.addEvent(mCall, LogUtils.Events.SCREENING_BOUND, componentName);
Log.i(this, "Binding completed.");
}
diff --git a/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java b/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java
index 1463ad2..df68f6e 100644
--- a/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java
+++ b/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java
@@ -43,10 +43,18 @@
final String rawNumber = cursor.getString(cursor.getColumnIndex(
BlockedNumberContract.BlockedNumbers.COLUMN_ORIGINAL_NUMBER));
final String formattedNumber = BlockedNumbersUtil.formatNumber(rawNumber);
- TextView numberView = (TextView) view.findViewById(R.id.blocked_number);
- Spannable numberSpannable = new SpannableString(formattedNumber);
- PhoneNumberUtils.addTtsSpan(numberSpannable, 0, numberSpannable.length());
- numberView.setText(numberSpannable);
+ TextView textView = (TextView) view.findViewById(R.id.blocked_number);
+
+ if (formattedNumber != null
+ && formattedNumber.contains("@") || formattedNumber.contains("%40")) {
+ // An email address
+ textView.setText(formattedNumber);
+ } else {
+ // A phone number
+ Spannable numberSpannable = new SpannableString(formattedNumber);
+ PhoneNumberUtils.addTtsSpan(numberSpannable, 0, numberSpannable.length());
+ textView.setText(numberSpannable);
+ }
View deleteButton = view.findViewById(R.id.delete_blocked_number);
deleteButton.setOnClickListener(new View.OnClickListener() {
diff --git a/src/com/android/server/telecom/settings/BlockedNumbersUtil.java b/src/com/android/server/telecom/settings/BlockedNumbersUtil.java
index 5acfe64..67634e4 100644
--- a/src/com/android/server/telecom/settings/BlockedNumbersUtil.java
+++ b/src/com/android/server/telecom/settings/BlockedNumbersUtil.java
@@ -108,7 +108,7 @@
.setContentText(message)
.setContentIntent(pendingIntent)
.setShowWhen(true)
- .setChannel(NotificationChannelManager.CHANNEL_ID_CALL_BLOCKING)
+ .setChannelId(NotificationChannelManager.CHANNEL_ID_CALL_BLOCKING)
.build();
notification.flags |= Notification.FLAG_NO_CLEAR;
diff --git a/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java b/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
index e64e67c..a0eca8f 100644
--- a/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
+++ b/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
@@ -472,7 +472,7 @@
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(mContext);
taskStackBuilder.addNextIntent(intent);
- return taskStackBuilder.getPendingIntent(0, 0, null, userHandle);
+ return taskStackBuilder.getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE, null, userHandle);
}
/**
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index 756d31b..a8e1c00 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -103,8 +103,10 @@
mPhoneAccountA0.getAccountHandle(), mConnectionServiceFixtureA);
mInCallServiceFixtureX.mInCallAdapter.disconnectCall(ids.mCallId);
- assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureX.getCall(ids.mCallId).getState());
- assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureY.getCall(ids.mCallId).getState());
+ assertEquals(Call.STATE_DISCONNECTING,
+ mInCallServiceFixtureX.getCall(ids.mCallId).getState());
+ assertEquals(Call.STATE_DISCONNECTING,
+ mInCallServiceFixtureY.getCall(ids.mCallId).getState());
when(mClockProxy.currentTimeMillis()).thenReturn(TEST_DISCONNECT_TIME);
when(mClockProxy.elapsedRealtime()).thenReturn(TEST_DISCONNECT_ELAPSED_TIME);
@@ -268,12 +270,15 @@
IdPair ids = startAndMakeActiveIncomingCall("650-555-1212",
mPhoneAccountA0.getAccountHandle(), mConnectionServiceFixtureA);
mInCallServiceFixtureX.mInCallAdapter.disconnectCall(ids.mCallId);
- assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureX.getCall(ids.mCallId).getState());
- assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureY.getCall(ids.mCallId).getState());
+ assertEquals(Call.STATE_DISCONNECTING,
+ mInCallServiceFixtureX.getCall(ids.mCallId).getState());
+ assertEquals(Call.STATE_DISCONNECTING,
+ mInCallServiceFixtureY.getCall(ids.mCallId).getState());
when(mClockProxy.currentTimeMillis()).thenReturn(TEST_DISCONNECT_TIME);
when(mClockProxy.elapsedRealtime()).thenReturn(TEST_DISCONNECT_ELAPSED_TIME);
mConnectionServiceFixtureA.sendSetDisconnected(ids.mConnectionId, DisconnectCause.LOCAL);
+
assertEquals(Call.STATE_DISCONNECTED,
mInCallServiceFixtureX.getCall(ids.mCallId).getState());
assertEquals(Call.STATE_DISCONNECTED,
@@ -823,6 +828,7 @@
private void blockNumberWithAnswer(String phoneNumber, Answer answer) throws Exception {
when(getBlockedNumberProvider().call(
anyString(),
+ nullable(String.class),
anyString(),
eq(BlockedNumberContract.SystemContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER),
eq(phoneNumber),
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
index ca84c4c..38f58fd 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
@@ -180,6 +180,81 @@
CallAudioRouteStateMachine.RINGING_FOCUS);
}
+ @SmallTest
+ @Test
+ public void testDoNotRingTwiceWhenHfpConnected() {
+ CallAudioModeStateMachine sm = new CallAudioModeStateMachine(mSystemStateHelper,
+ mAudioManager, mTestThread.getLooper());
+ sm.setCallAudioManager(mCallAudioManager);
+ sm.sendMessage(CallAudioModeStateMachine.ABANDON_FOCUS_FOR_TESTING);
+ waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
+
+ resetMocks();
+ when(mCallAudioManager.startRinging()).thenReturn(true);
+
+ sm.sendMessage(CallAudioModeStateMachine.NEW_RINGING_CALL, new Builder()
+ .setHasActiveOrDialingCalls(false)
+ .setHasRingingCalls(true)
+ .setHasHoldingCalls(false)
+ .setIsTonePlaying(false)
+ .setForegroundCallIsVoip(false)
+ .setSession(null)
+ .build());
+ waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
+
+ assertEquals(CallAudioModeStateMachine.RING_STATE_NAME, sm.getCurrentStateName());
+
+ verify(mAudioManager).requestAudioFocusForCall(AudioManager.STREAM_RING,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+ verify(mAudioManager).setMode(AudioManager.MODE_RINGTONE);
+ verify(mCallAudioManager).setCallAudioRouteFocusState(
+ CallAudioRouteStateMachine.RINGING_FOCUS);
+
+ when(mCallAudioManager.isRingtonePlaying()).thenReturn(true);
+ sm.sendMessage(CallAudioModeStateMachine.RINGER_MODE_CHANGE);
+ waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
+
+ // Make sure we don't try and start ringing again.
+ verify(mCallAudioManager, times(1)).startRinging();
+ }
+
+ @SmallTest
+ @Test
+ public void testStartRingingAfterHfpConnectedIfNotAlreadyPlaying() {
+ CallAudioModeStateMachine sm = new CallAudioModeStateMachine(mSystemStateHelper,
+ mAudioManager, mTestThread.getLooper());
+ sm.setCallAudioManager(mCallAudioManager);
+ sm.sendMessage(CallAudioModeStateMachine.ABANDON_FOCUS_FOR_TESTING);
+ waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
+
+ resetMocks();
+ when(mCallAudioManager.startRinging()).thenReturn(true);
+
+ sm.sendMessage(CallAudioModeStateMachine.NEW_RINGING_CALL, new Builder()
+ .setHasActiveOrDialingCalls(false)
+ .setHasRingingCalls(true)
+ .setHasHoldingCalls(false)
+ .setIsTonePlaying(false)
+ .setForegroundCallIsVoip(false)
+ .setSession(null)
+ .build());
+ waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
+
+ assertEquals(CallAudioModeStateMachine.RING_STATE_NAME, sm.getCurrentStateName());
+
+ verify(mAudioManager).requestAudioFocusForCall(AudioManager.STREAM_RING,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+ verify(mAudioManager).setMode(AudioManager.MODE_RINGTONE);
+ verify(mCallAudioManager).setCallAudioRouteFocusState(
+ CallAudioRouteStateMachine.RINGING_FOCUS);
+
+ when(mCallAudioManager.isRingtonePlaying()).thenReturn(false);
+ sm.sendMessage(CallAudioModeStateMachine.RINGER_MODE_CHANGE);
+ waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
+
+ // Make sure we do try and start ringing again, since the ringtone wasn't already playing.
+ verify(mCallAudioManager, times(2)).startRinging();
+ }
private void resetMocks() {
clearInvocations(mCallAudioManager, mAudioManager);
diff --git a/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java b/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
index d53c73c..953c711 100644
--- a/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
@@ -16,15 +16,13 @@
package com.android.server.telecom.tests;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -34,9 +32,9 @@
import android.content.ComponentName;
import android.content.ContentProvider;
+import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
-import android.content.IContentProvider;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.location.Country;
@@ -45,6 +43,7 @@
import android.net.Uri;
import android.os.Looper;
import android.os.PersistableBundle;
+import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.CallLog;
@@ -74,6 +73,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
@@ -85,7 +85,6 @@
public class CallLogManagerTest extends TelecomTestCase {
private CallLogManager mCallLogManager;
- private IContentProvider mContentProvider;
private PhoneAccountHandle mDefaultAccountHandle;
private PhoneAccountHandle mOtherUserAccountHandle;
private PhoneAccountHandle mManagedProfileAccountHandle;
@@ -112,8 +111,10 @@
private static final String TEST_ISO = "KR";
private static final String TEST_ISO_2 = "JP";
- @Mock PhoneAccountRegistrar mMockPhoneAccountRegistrar;
-
+ @Mock(answer = Answers.CALLS_REAL_METHODS)
+ ContentProvider mContentProvider;
+ @Mock
+ PhoneAccountRegistrar mMockPhoneAccountRegistrar;
@Mock
MissedCallNotifier mMissedCallNotifier;
@@ -124,8 +125,6 @@
mContext = mComponentContextFixture.getTestDouble().getApplicationContext();
mCallLogManager = new CallLogManager(mContext, mMockPhoneAccountRegistrar,
mMissedCallNotifier);
- mContentProvider =
- mContext.getContentResolver().acquireProvider("0@call_log");
mDefaultAccountHandle = new PhoneAccountHandle(
new ComponentName("com.android.server.telecom.tests", "CallLogManagerTest"),
TEST_PHONE_ACCOUNT_ID,
@@ -150,6 +149,9 @@
UserHandle.of(CURRENT_USER_ID)
);
+ // Since we can't mock ContentResolver directly, use a ContentProvider
+ when(mContext.getContentResolver()).thenReturn(ContentResolver.wrap(mContentProvider));
+
UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
UserInfo userInfo = new UserInfo(CURRENT_USER_ID, "test", 0);
UserInfo otherUserInfo = new UserInfo(OTHER_USER_ID, "test2", 0);
@@ -159,9 +161,9 @@
doAnswer(new Answer<Uri>() {
@Override
public Uri answer(InvocationOnMock invocation) throws Throwable {
- return (Uri) invocation.getArguments()[1];
+ return (Uri) invocation.getArguments()[0];
}
- }).when(mContentProvider).insert(anyString(), any(Uri.class), any(ContentValues.class));
+ }).when(mContentProvider).insert(any(Uri.class), any(ContentValues.class));
when(userManager.isUserRunning(any(UserHandle.class))).thenReturn(true);
when(userManager.isUserUnlocked(any(UserHandle.class))).thenReturn(true);
@@ -538,13 +540,24 @@
// Outgoing call placed through a phone account with multi user capability is inserted to
// all users except managed profile.
- ContentValues insertedValues = verifyInsertionWithCapture(CURRENT_USER_ID);
- assertEquals(insertedValues.getAsInteger(CallLog.Calls.TYPE),
- Integer.valueOf(CallLog.Calls.OUTGOING_TYPE));
- insertedValues = verifyInsertionWithCapture(OTHER_USER_ID);
- assertEquals(insertedValues.getAsInteger(CallLog.Calls.TYPE),
- Integer.valueOf(CallLog.Calls.OUTGOING_TYPE));
- verifyNoInsertionInUser(MANAGED_USER_ID);
+ SystemClock.sleep(TEST_TIMEOUT_MILLIS);
+
+ ArgumentCaptor<Uri> uris = ArgumentCaptor.forClass(Uri.class);
+ ArgumentCaptor<ContentValues> values = ArgumentCaptor.forClass(ContentValues.class);
+
+ verify(mContentProvider, atLeast(2)).insert(uris.capture(), values.capture());
+
+ assertTrue(uris.getAllValues().contains(
+ ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, CURRENT_USER_ID)));
+ assertTrue(uris.getAllValues().contains(
+ ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, OTHER_USER_ID)));
+ assertFalse(uris.getAllValues().contains(
+ ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, MANAGED_USER_ID)));
+
+ for (ContentValues v : values.getAllValues()) {
+ assertEquals(v.getAsInteger(CallLog.Calls.TYPE),
+ Integer.valueOf(CallLog.Calls.OUTGOING_TYPE));
+ }
}
@MediumTest
@@ -572,13 +585,24 @@
// Incoming call using a phone account with multi user capability is inserted to all users
// except managed profile.
- ContentValues insertedValues = verifyInsertionWithCapture(CURRENT_USER_ID);
- assertEquals(insertedValues.getAsInteger(CallLog.Calls.TYPE),
- Integer.valueOf(CallLog.Calls.INCOMING_TYPE));
- insertedValues = verifyInsertionWithCapture(OTHER_USER_ID);
- assertEquals(insertedValues.getAsInteger(CallLog.Calls.TYPE),
- Integer.valueOf(CallLog.Calls.INCOMING_TYPE));
- verifyNoInsertionInUser(MANAGED_USER_ID);
+ SystemClock.sleep(TEST_TIMEOUT_MILLIS);
+
+ ArgumentCaptor<Uri> uris = ArgumentCaptor.forClass(Uri.class);
+ ArgumentCaptor<ContentValues> values = ArgumentCaptor.forClass(ContentValues.class);
+
+ verify(mContentProvider, atLeast(2)).insert(uris.capture(), values.capture());
+
+ assertTrue(uris.getAllValues().contains(
+ ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, CURRENT_USER_ID)));
+ assertTrue(uris.getAllValues().contains(
+ ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, OTHER_USER_ID)));
+ assertFalse(uris.getAllValues().contains(
+ ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, MANAGED_USER_ID)));
+
+ for (ContentValues v : values.getAllValues()) {
+ assertEquals(v.getAsInteger(CallLog.Calls.TYPE),
+ Integer.valueOf(CallLog.Calls.INCOMING_TYPE));
+ }
}
@MediumTest
@@ -929,48 +953,26 @@
}
private void verifyNoInsertion() {
- try {
- Thread.sleep(TEST_TIMEOUT_MILLIS);
- verify(mContentProvider, never()).insert(any(String.class),
- any(Uri.class), any(ContentValues.class));
- } catch (android.os.RemoteException e) {
- fail("Remote exception occurred during test execution");
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ SystemClock.sleep(TEST_TIMEOUT_MILLIS);
+
+ verify(mContentProvider, never()).insert(any(Uri.class), any(ContentValues.class));
}
-
private void verifyNoInsertionInUser(int userId) {
- try {
- Uri uri = ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, userId);
- Thread.sleep(TEST_TIMEOUT_MILLIS);
- verify(getContentProviderForUser(userId), never())
- .insert(any(String.class), eq(uri), any(ContentValues.class));
- } catch (android.os.RemoteException e) {
- fail("Remote exception occurred during test execution");
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ SystemClock.sleep(TEST_TIMEOUT_MILLIS);
+
+ Uri uri = ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, userId);
+ verify(mContentProvider, never()).insert(eq(uri), any(ContentValues.class));
}
private ContentValues verifyInsertionWithCapture(int userId) {
+ Uri uri = ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, userId);
ArgumentCaptor<ContentValues> captor = ArgumentCaptor.forClass(ContentValues.class);
- try {
- Uri uri = ContentProvider.maybeAddUserId(CallLog.Calls.CONTENT_URI, userId);
- verify(getContentProviderForUser(userId), timeout(TEST_TIMEOUT_MILLIS).atLeastOnce())
- .insert(any(String.class), eq(uri), captor.capture());
- } catch (android.os.RemoteException e) {
- fail("Remote exception occurred during test execution");
- }
-
+ verify(mContentProvider, timeout(TEST_TIMEOUT_MILLIS).times(1)).insert(
+ eq(uri), captor.capture());
return captor.getValue();
}
- private IContentProvider getContentProviderForUser(int userId) {
- return mContext.getContentResolver().acquireProvider(userId + "@call_log");
- }
-
private Call makeFakeCall(int disconnectCauseCode, boolean isConference, boolean isIncoming,
long creationTimeMillis, long ageMillis, Uri callHandle,
PhoneAccountHandle phoneAccountHandle, int callVideoState,
diff --git a/tests/src/com/android/server/telecom/tests/CallRecordingTonePlayerTest.java b/tests/src/com/android/server/telecom/tests/CallRecordingTonePlayerTest.java
index 5151d4c..b5c6468 100644
--- a/tests/src/com/android/server/telecom/tests/CallRecordingTonePlayerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallRecordingTonePlayerTest.java
@@ -22,22 +22,37 @@
import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.media.AudioDeviceInfo;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecordingConfiguration;
+import android.media.MediaPlayer;
import android.media.MediaRecorder;
+import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.telecom.PhoneAccountHandle;
import android.test.suitebuilder.annotation.MediumTest;
+import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.server.telecom.Call;
import com.android.server.telecom.CallRecordingTonePlayer;
+import com.android.server.telecom.CallState;
import com.android.server.telecom.TelecomSystem;
+import com.android.server.telecom.Timeouts;
import org.junit.After;
import org.junit.Before;
@@ -48,6 +63,7 @@
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
+import org.mockito.MockitoSession;
import java.util.ArrayList;
import java.util.List;
@@ -62,22 +78,29 @@
private static final String PHONE_ACCOUNT_CLASS = "MyFancyConnectionService";
private static final String PHONE_ACCOUNT_ID = "1";
private static final String RECORDING_APP_PACKAGE = "com.recording.app";
+ private static final long TEST_RECORDING_TONE_INTERVAL = 300L;
private static final PhoneAccountHandle TEST_PHONE_ACCOUNT = new PhoneAccountHandle(
new ComponentName(PHONE_ACCOUNT_PACKAGE, PHONE_ACCOUNT_CLASS), PHONE_ACCOUNT_ID);
private CallRecordingTonePlayer mCallRecordingTonePlayer;
- private TelecomSystem.SyncRoot mSyncRoot = new TelecomSystem.SyncRoot() { };
- @Mock private AudioManager mAudioManager;
+ private TelecomSystem.SyncRoot mSyncRoot = new TelecomSystem.SyncRoot() {
+ };
+ @Mock
+ private AudioManager mAudioManager;
+ @Mock
+ private Timeouts.Adapter mTimeouts;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this);
+ when(mTimeouts.getCallRecordingToneRepeatIntervalMillis(nullable(ContentResolver.class)))
+ .thenReturn(500L);
mCallRecordingTonePlayer = new CallRecordingTonePlayer(
mComponentContextFixture.getTestDouble().getApplicationContext(),
- mAudioManager, mSyncRoot);
+ mAudioManager, mTimeouts, mSyncRoot);
when(mAudioManager.getActiveRecordingConfigurations()).thenReturn(null);
}
@@ -87,6 +110,45 @@
super.tearDown();
}
+ @MediumTest
+ @Test
+ public void testToneLooping() throws Exception {
+ MediaPlayer mockMediaPlayer = mock(MediaPlayer.class);
+ MockitoSession session = ExtendedMockito.mockitoSession().mockStatic(MediaPlayer.class)
+ .startMocking();
+ ExtendedMockito.doReturn(mockMediaPlayer).when(() ->
+ MediaPlayer.create(nullable(Context.class), anyInt()));
+
+ when(mAudioManager.getActiveRecordingConfigurations()).thenReturn(
+ getAudioRecordingConfig(RECORDING_APP_PACKAGE));
+
+ AudioDeviceInfo mockAudioDeviceInfo = mock(AudioDeviceInfo.class);
+ when(mockAudioDeviceInfo.getType()).thenReturn(AudioDeviceInfo.TYPE_TELEPHONY);
+ when(mAudioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS))
+ .thenReturn(new AudioDeviceInfo[] { mockAudioDeviceInfo });
+
+ Call call = addValidCall();
+ when(call.isActive()).thenReturn(true);
+ mCallRecordingTonePlayer.onCallStateChanged(call, CallState.NEW, CallState.ACTIVE);
+
+ waitForHandlerAction(Handler.getMain(), TEST_TIMEOUT);
+ verify(mockMediaPlayer).start();
+
+ // Sleep for 4x the interval, then make sure it played more. No exact count,
+ // since timing can be tricky in tests.
+ Thread.sleep(TEST_RECORDING_TONE_INTERVAL * 4);
+ verify(mockMediaPlayer, atLeast(2)).start();
+ reset(mockMediaPlayer);
+
+ // Remove the call and verify that we're not starting the tone anymore.
+ mCallRecordingTonePlayer.onCallRemoved(call);
+ Thread.sleep(TEST_RECORDING_TONE_INTERVAL * 3 + 50);
+ verify(mockMediaPlayer, never()).start();
+ verify(mockMediaPlayer).release();
+
+ session.finishMocking();
+ }
+
/**
* Ensures that child calls are not tracked.
*/
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index 4796ed2..0cc04d6 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -66,6 +66,7 @@
import com.android.server.telecom.CallState;
import com.android.server.telecom.CallerInfoLookupHelper;
import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.CallsManagerListenerBase;
import com.android.server.telecom.ClockProxy;
import com.android.server.telecom.ConnectionServiceFocusManager;
import com.android.server.telecom.ConnectionServiceFocusManager.ConnectionServiceFocusManagerFactory;
@@ -1301,8 +1302,8 @@
@SmallTest
@Test
public void testParentInheritsChildConnectTime() throws Exception {
- Call callSim1 = createCall(SIM_1_HANDLE, CallState.ACTIVE);
- Call callSim2 = createCall(SIM_1_HANDLE, CallState.ACTIVE);
+ Call callSim1 = createCall(SIM_1_HANDLE, null, CallState.ACTIVE);
+ Call callSim2 = createCall(SIM_1_HANDLE, null, CallState.ACTIVE);
callSim1.setConnectTimeMillis(100);
// Pretend it is a conference made later.
@@ -1314,7 +1315,7 @@
assertEquals(100, callSim2.getConnectTimeMillis());
// Add another later call.
- Call callSim3 = createCall(SIM_1_HANDLE, CallState.ACTIVE);
+ Call callSim3 = createCall(SIM_1_HANDLE, null, CallState.ACTIVE);
callSim3.setConnectTimeMillis(200);
callSim3.setChildOf(callSim2);
@@ -1410,6 +1411,26 @@
verify(heldCall).unhold(any());
}
+ /**
+ * Verifies we inform the InCallService on local disconnect.
+ * @throws Exception
+ */
+ @SmallTest
+ @Test
+ public void testRequestDisconnect() throws Exception {
+ CallsManager.CallsManagerListener listener = mock(CallsManager.CallsManagerListener.class);
+ mCallsManager.addListener(listener);
+
+ Call ongoingCall = addSpyCall(CallState.ACTIVE);
+ mCallsManager.addCall(ongoingCall);
+
+ mCallsManager.disconnectCall(ongoingCall);
+ // Seems odd, but ultimately the call state is still active even though it is locally
+ // disconnecting.
+ verify(listener).onCallStateChanged(eq(ongoingCall), eq(CallState.ACTIVE),
+ eq(CallState.ACTIVE));
+ }
+
private Call addSpyCall() {
return addSpyCall(SIM_2_HANDLE, CallState.ACTIVE);
}
diff --git a/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java b/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
index fa59059..10a0194 100644
--- a/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
@@ -445,7 +445,7 @@
CallLog.Calls.PRESENTATION_ALLOWED, CALL_TIMESTAMP)
.build();
- when(cp.query(anyString(), eq(queryUri), nullable(String[].class),
+ when(cp.query(anyString(), nullable(String.class), eq(queryUri), nullable(String[].class),
nullable(Bundle.class), nullable(ICancellationSignal.class)))
.thenReturn(mockMissedCallsCursor);
@@ -514,7 +514,7 @@
PRIMARY_USER.getIdentifier());
IContentProvider cp = getContentProviderForUser(PRIMARY_USER.getIdentifier());
- when(cp.query(anyString(), eq(queryUri), nullable(String[].class),
+ when(cp.query(anyString(), nullable(String.class), eq(queryUri), nullable(String[].class),
nullable(Bundle.class), nullable(ICancellationSignal.class)))
.thenReturn(mockMissedCallsCursor);
diff --git a/tests/src/com/android/server/telecom/tests/RingerTest.java b/tests/src/com/android/server/telecom/tests/RingerTest.java
index 53ddd93..38f63d2 100644
--- a/tests/src/com/android/server/telecom/tests/RingerTest.java
+++ b/tests/src/com/android/server/telecom/tests/RingerTest.java
@@ -374,7 +374,6 @@
mRingerUnderTest.startCallWaiting(mockCall1);
ensureRingerIsAudible();
enableRampingRinger();
- enableRampingRingerFromDeviceConfig();
mFuture.complete(false); // not using audio coupled haptics
enableVibrationWhenRinging();
assertTrue(mRingerUnderTest.startRinging(mockCall2, false));
@@ -442,8 +441,4 @@
private void enableRampingRinger() {
when(mockSystemSettingsUtil.applyRampingRinger(any(Context.class))).thenReturn(true);
}
-
- private void enableRampingRingerFromDeviceConfig() {
- when(mockSystemSettingsUtil.enableRampingRingerFromDeviceConfig()).thenReturn(true);
- }
}
diff --git a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
index 815b523..0dfe29a 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
@@ -19,6 +19,7 @@
import static android.Manifest.permission.CALL_PHONE;
import static android.Manifest.permission.CALL_PRIVILEGED;
import static android.Manifest.permission.MODIFY_PHONE_STATE;
+import static android.Manifest.permission.READ_PHONE_NUMBERS;
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE;
@@ -32,6 +33,7 @@
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -70,6 +72,7 @@
import java.util.concurrent.Executor;
import java.util.function.IntConsumer;
+import static android.Manifest.permission.READ_SMS;
import static android.Manifest.permission.REGISTER_SIM_SUBSCRIPTION;
import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
import static org.junit.Assert.assertEquals;
@@ -168,6 +171,8 @@
private TelecomServiceImpl.SettingsSecureAdapter mSettingsSecureAdapter =
spy(new SettingsSecureAdapterFake());
@Mock private UserCallIntentProcessor mUserCallIntentProcessor;
+ private PackageManager mPackageManager;
+ @Mock private ApplicationInfo mApplicationInfo;
private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { };
@@ -230,6 +235,8 @@
.thenReturn(DEFAULT_DIALER_PACKAGE);
when(mDefaultDialerCache.isDefaultOrSystemDialer(eq(DEFAULT_DIALER_PACKAGE), anyInt()))
.thenReturn(true);
+
+ mPackageManager = mContext.getPackageManager();
}
@Override
@@ -248,13 +255,50 @@
.getOutgoingPhoneAccountForScheme(eq("sip"), any(UserHandle.class)))
.thenReturn(SIP_PA_HANDLE_17);
makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
+ PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build();
+ phoneAccount.setIsEnabled(true);
+ doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount(
+ eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class));
+ doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString());
PhoneAccountHandle returnedHandleTel
- = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", DEFAULT_DIALER_PACKAGE);
+ = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", DEFAULT_DIALER_PACKAGE, null);
assertEquals(TEL_PA_HANDLE_16, returnedHandleTel);
PhoneAccountHandle returnedHandleSip
- = mTSIBinder.getDefaultOutgoingPhoneAccount("sip", DEFAULT_DIALER_PACKAGE);
+ = mTSIBinder.getDefaultOutgoingPhoneAccount("sip", DEFAULT_DIALER_PACKAGE, null);
+ assertEquals(SIP_PA_HANDLE_17, returnedHandleSip);
+ }
+
+ @SmallTest
+ @Test
+ public void testGetDefaultOutgoingPhoneAccountSucceedsIfCallerIsSimCallManager()
+ throws RemoteException {
+ when(mFakePhoneAccountRegistrar
+ .getOutgoingPhoneAccountForScheme(eq("tel"), any(UserHandle.class)))
+ .thenReturn(TEL_PA_HANDLE_16);
+ when(mFakePhoneAccountRegistrar
+ .getOutgoingPhoneAccountForScheme(eq("sip"), any(UserHandle.class)))
+ .thenReturn(SIP_PA_HANDLE_17);
+ makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
+ PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build();
+ phoneAccount.setIsEnabled(true);
+ doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount(
+ eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class));
+ doReturn(TEL_PA_HANDLE_CURRENT).when(mFakePhoneAccountRegistrar)
+ .getSimCallManagerFromHandle(
+ eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class));
+ // doNothing will make #isCallerSimCallManager return true
+ doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString());
+ doThrow(new SecurityException()).when(mContext)
+ .enforceCallingOrSelfPermission(eq(READ_PRIVILEGED_PHONE_STATE), anyString());
+
+ PhoneAccountHandle returnedHandleTel
+ = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", DEFAULT_DIALER_PACKAGE, null);
+ assertEquals(TEL_PA_HANDLE_16, returnedHandleTel);
+
+ PhoneAccountHandle returnedHandleSip
+ = mTSIBinder.getDefaultOutgoingPhoneAccount("sip", DEFAULT_DIALER_PACKAGE, null);
assertEquals(SIP_PA_HANDLE_17, returnedHandleSip);
}
@@ -269,13 +313,21 @@
.thenReturn(TEL_PA_HANDLE_16);
when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(TEL_PA_HANDLE_16)).thenReturn(
makePhoneAccount(TEL_PA_HANDLE_16).build());
- when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), anyString()))
+ when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), anyString(),
+ nullable(String.class), nullable(String.class)))
.thenReturn(AppOpsManager.MODE_IGNORED);
+ PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build();
+ phoneAccount.setIsEnabled(true);
+ doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount(
+ eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class));
+ doReturn(TEL_PA_HANDLE_16).when(mFakePhoneAccountRegistrar).getSimCallManagerFromHandle(
+ eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class));
+ doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString());
doThrow(new SecurityException()).when(mContext)
.enforceCallingOrSelfPermission(eq(READ_PRIVILEGED_PHONE_STATE), anyString());
PhoneAccountHandle returnedHandleTel
- = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", "");
+ = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", "", null);
assertNull(returnedHandleTel);
}
@@ -338,9 +390,9 @@
makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
assertEquals(fullPHList,
- mTSIBinder.getCallCapablePhoneAccounts(true, DEFAULT_DIALER_PACKAGE));
+ mTSIBinder.getCallCapablePhoneAccounts(true, DEFAULT_DIALER_PACKAGE, null));
assertEquals(smallPHList,
- mTSIBinder.getCallCapablePhoneAccounts(false, DEFAULT_DIALER_PACKAGE));
+ mTSIBinder.getCallCapablePhoneAccounts(false, DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@@ -355,7 +407,7 @@
List<PhoneAccountHandle> result = null;
try {
- result = mTSIBinder.getCallCapablePhoneAccounts(true, "");
+ result = mTSIBinder.getCallCapablePhoneAccounts(true, "", null);
} catch (SecurityException e) {
// intended behavior
}
@@ -684,14 +736,15 @@
Uri handle = Uri.parse("tel:6505551234");
Bundle extras = createSampleExtras();
- when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString()))
+ when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString(),
+ nullable(String.class), nullable(String.class)))
.thenReturn(AppOpsManager.MODE_ALLOWED);
doReturn(PackageManager.PERMISSION_GRANTED)
.when(mContext).checkCallingPermission(CALL_PHONE);
doReturn(PackageManager.PERMISSION_DENIED)
.when(mContext).checkCallingPermission(CALL_PRIVILEGED);
- mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE);
+ mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE, null);
placeCallTestHelper(handle, extras, true);
}
@@ -701,14 +754,15 @@
Uri handle = Uri.parse("tel:6505551234");
Bundle extras = createSampleExtras();
- when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString()))
+ when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString(),
+ nullable(String.class), nullable(String.class)))
.thenReturn(AppOpsManager.MODE_IGNORED);
doReturn(PackageManager.PERMISSION_GRANTED)
.when(mContext).checkCallingPermission(CALL_PHONE);
doReturn(PackageManager.PERMISSION_DENIED)
.when(mContext).checkCallingPermission(CALL_PRIVILEGED);
- mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE);
+ mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE, null);
placeCallTestHelper(handle, extras, false);
}
@@ -718,14 +772,15 @@
Uri handle = Uri.parse("tel:6505551234");
Bundle extras = createSampleExtras();
- when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString()))
+ when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString(),
+ nullable(String.class), nullable(String.class)))
.thenReturn(AppOpsManager.MODE_ALLOWED);
doReturn(PackageManager.PERMISSION_DENIED)
.when(mContext).checkCallingPermission(CALL_PHONE);
doReturn(PackageManager.PERMISSION_DENIED)
.when(mContext).checkCallingPermission(CALL_PRIVILEGED);
- mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE);
+ mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE, null);
placeCallTestHelper(handle, extras, false);
}
@@ -750,7 +805,7 @@
.when(mContext).enforceCallingOrSelfPermission(eq(CALL_PHONE), anyString());
try {
- mTSIBinder.placeCall(handle, extras, "arbitrary_package_name");
+ mTSIBinder.placeCall(handle, extras, "arbitrary_package_name", null);
} catch (SecurityException e) {
// expected
}
@@ -823,7 +878,7 @@
doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT,
vmNumber);
assertTrue(mTSIBinder.isVoiceMailNumber(TEL_PA_HANDLE_CURRENT,
- vmNumber, DEFAULT_DIALER_PACKAGE));
+ vmNumber, DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@@ -837,7 +892,7 @@
when(mFakePhoneAccountRegistrar.getPhoneAccount(TEL_PA_HANDLE_CURRENT,
Binder.getCallingUserHandle())).thenReturn(null);
assertFalse(mTSIBinder
- .isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, vmNumber, DEFAULT_DIALER_PACKAGE));
+ .isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, vmNumber, DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@@ -854,7 +909,7 @@
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
when(mockTelephonyManager.getVoiceMailNumber()).thenReturn(vmNumber);
- assertEquals(vmNumber, mTSIBinder.getVoiceMailNumber(null, DEFAULT_DIALER_PACKAGE));
+ assertEquals(vmNumber, mTSIBinder.getVoiceMailNumber(null, DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@@ -873,23 +928,147 @@
.thenReturn(subId);
assertEquals(vmNumber,
- mTSIBinder.getVoiceMailNumber(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE));
+ mTSIBinder.getVoiceMailNumber(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@Test
- public void testGetLine1Number() throws Exception {
+ public void testGetLine1NumberWithNoPermissionTargetPreR() throws Exception {
+ setupGetLine1NumberTest();
+ setTargetSdkVersion(Build.VERSION_CODES.Q);
+
+ try {
+ String line1Number = mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT,
+ DEFAULT_DIALER_PACKAGE, null);
+ fail("Should have thrown a SecurityException when invoking getLine1Number without "
+ + "permission, received "
+ + line1Number);
+ } catch (SecurityException expected) {
+ }
+ }
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberWithNoPermissionTargetR() throws Exception {
+ setupGetLine1NumberTest();
+
+ try {
+ String line1Number = mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT,
+ DEFAULT_DIALER_PACKAGE, null);
+ fail("Should have thrown a SecurityException when invoking getLine1Number without "
+ + "permission, received "
+ + line1Number);
+ } catch (SecurityException expected) {
+ }
+ }
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberWithReadPhoneStateTargetPreR() throws Exception {
+ String line1Number = setupGetLine1NumberTest();
+ setTargetSdkVersion(Build.VERSION_CODES.Q);
+ grantPermissionAndAppOp(READ_PHONE_STATE, AppOpsManager.OPSTR_READ_PHONE_STATE);
+
+ assertEquals(line1Number,
+ mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE, null));
+ }
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberWithReadPhoneStateTargetR() throws Exception {
+ setupGetLine1NumberTest();
+ grantPermissionAndAppOp(READ_PHONE_STATE, AppOpsManager.OPSTR_READ_PHONE_STATE);
+
+ try {
+ String line1Number = mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT,
+ DEFAULT_DIALER_PACKAGE, null);
+ fail("Should have thrown a SecurityException when invoking getLine1Number on target R"
+ + " with READ_PHONE_STATE permission, received "
+ + line1Number);
+ } catch (SecurityException expected) {
+ }
+ }
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberWithReadPhoneNumbersTargetR() throws Exception {
+ String line1Number = setupGetLine1NumberTest();
+ grantPermissionAndAppOp(READ_PHONE_NUMBERS, AppOpsManager.OPSTR_READ_PHONE_NUMBERS);
+
+ assertEquals(line1Number,
+ mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE, null));
+ }
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberWithReadSmsTargetR() throws Exception {
+ String line1Number = setupGetLine1NumberTest();
+ grantPermissionAndAppOp(READ_SMS, AppOpsManager.OPSTR_READ_SMS);
+
+ assertEquals(line1Number,
+ mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE, null));
+ }
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberWithWriteSmsTargetR() throws Exception {
+ String line1Number = setupGetLine1NumberTest();
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).noteOpNoThrow(
+ eq(AppOpsManager.OPSTR_WRITE_SMS), anyInt(), eq(DEFAULT_DIALER_PACKAGE), any(),
+ any());
+
+ assertEquals(line1Number,
+ mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE, null));
+ }
+
+
+ @SmallTest
+ @Test
+ public void testGetLine1NumberAsDefaultDialer() throws Exception {
+ String line1Number = setupGetLine1NumberTest();
+ doReturn(true).when(mDefaultDialerCache).isDefaultOrSystemDialer(
+ eq(DEFAULT_DIALER_PACKAGE), anyInt());
+
+ assertEquals(line1Number,
+ mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE, null));
+ }
+
+ private String setupGetLine1NumberTest() throws Exception {
int subId = 58374;
String line1Number = "9482752023479";
+
+ setTargetSdkVersion(Build.VERSION_CODES.R);
+ doReturn(AppOpsManager.MODE_DEFAULT).when(mAppOpsManager).noteOpNoThrow(anyString(),
+ anyInt(), eq(DEFAULT_DIALER_PACKAGE), any(), any());
makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT);
when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT))
.thenReturn(subId);
TelephonyManager mockTelephonyManager =
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
when(mockTelephonyManager.getLine1Number()).thenReturn(line1Number);
+ doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(anyString(),
+ anyString());
+ doReturn(PackageManager.PERMISSION_DENIED).when(mContext).checkCallingOrSelfPermission(
+ anyString());
+ doReturn(false).when(mDefaultDialerCache).isDefaultOrSystemDialer(
+ eq(DEFAULT_DIALER_PACKAGE), anyInt());
+ return line1Number;
+ }
- assertEquals(line1Number,
- mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE));
+ private void grantPermissionAndAppOp(String permission, String appop) {
+ doReturn(PackageManager.PERMISSION_GRANTED).when(mContext).checkCallingOrSelfPermission(
+ eq(permission));
+ doNothing().when(mContext).enforceCallingOrSelfPermission(eq(permission), anyString());
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).noteOp(eq(appop), anyInt(),
+ eq(DEFAULT_DIALER_PACKAGE), any(), any());
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).noteOpNoThrow(eq(appop), anyInt(),
+ eq(DEFAULT_DIALER_PACKAGE), any(), any());
+ }
+
+ private void setTargetSdkVersion(int targetSdkVersion) throws Exception {
+ mApplicationInfo.targetSdkVersion = targetSdkVersion;
+ doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfoAsUser(
+ eq(DEFAULT_DIALER_PACKAGE), anyInt(), any());
}
@SmallTest
@@ -970,14 +1149,14 @@
@Test
public void testIsInCall() throws Exception {
when(mFakeCallsManager.hasOngoingCalls()).thenReturn(true);
- assertTrue(mTSIBinder.isInCall(DEFAULT_DIALER_PACKAGE));
+ assertTrue(mTSIBinder.isInCall(DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@Test
public void testNotIsInCall() throws Exception {
when(mFakeCallsManager.hasOngoingCalls()).thenReturn(false);
- assertFalse(mTSIBinder.isInCall(DEFAULT_DIALER_PACKAGE));
+ assertFalse(mTSIBinder.isInCall(DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@@ -986,7 +1165,7 @@
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
anyString(), any());
try {
- mTSIBinder.isInCall("blah");
+ mTSIBinder.isInCall("blah", null);
fail();
} catch (SecurityException e) {
// desired result
@@ -998,14 +1177,14 @@
@Test
public void testIsInManagedCall() throws Exception {
when(mFakeCallsManager.hasOngoingManagedCalls()).thenReturn(true);
- assertTrue(mTSIBinder.isInManagedCall(DEFAULT_DIALER_PACKAGE));
+ assertTrue(mTSIBinder.isInManagedCall(DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@Test
public void testNotIsInManagedCall() throws Exception {
when(mFakeCallsManager.hasOngoingManagedCalls()).thenReturn(false);
- assertFalse(mTSIBinder.isInManagedCall(DEFAULT_DIALER_PACKAGE));
+ assertFalse(mTSIBinder.isInManagedCall(DEFAULT_DIALER_PACKAGE, null));
}
@SmallTest
@@ -1014,7 +1193,7 @@
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
anyString(), any());
try {
- mTSIBinder.isInManagedCall("blah");
+ mTSIBinder.isInManagedCall("blah", null);
fail();
} catch (SecurityException e) {
// desired result