Merge "Check cross user permission before clear calling identity in getSimCallManagerForUser." into sc-dev am: 90c0d19531 am: 91041aa1f8 am: 1bb435ce28

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/15332151

Change-Id: I58ba323cbd9c625fe799d0092eafee2bb5d0b95a
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 2e14650..9be1710 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -15,6 +15,46 @@
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         }
       ]
+    },
+    {
+      "name": "CtsTelephonySdk28TestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsTelephony2TestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsTelephony3TestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsSimRestrictedApisTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsTelephonyProviderTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
     }
   ],
   "presubmit-large": [
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e124de4..b7b9cff 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -99,7 +99,7 @@
     <string name="notification_channel_call_blocking" msgid="2028807677868598710">"Bloqueo de llamadas"</string>
     <string name="notification_channel_background_calls" msgid="7785659903711350506">"Llamadas en segundo plano"</string>
     <string name="notification_channel_disconnected_calls" msgid="8228636543997645757">"Llamadas interrumpidas"</string>
-    <string name="notification_channel_in_call_service_crash" msgid="7313237519166984267">"Aplicaciones para teléfonos con bloqueos"</string>
+    <string name="notification_channel_in_call_service_crash" msgid="7313237519166984267">"Aplicaciones para teléfonos con fallos"</string>
     <string name="alert_outgoing_call" msgid="5319895109298927431">"Si haces esta llamada, se finalizará la de <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
     <string name="alert_redirect_outgoing_call_or_not" msgid="665409645789521636">"Elige cómo quieres hacer esta llamada"</string>
     <string name="alert_place_outgoing_call_with_redirection" msgid="5221065030959024121">"Redirigir llamada con <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 74faab9..5061eda 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -104,7 +104,7 @@
     <string name="alert_redirect_outgoing_call_or_not" msgid="665409645789521636">"Choisissez comment passer cet appel"</string>
     <string name="alert_place_outgoing_call_with_redirection" msgid="5221065030959024121">"Rediriger l\'appel en utilisant <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
     <string name="alert_place_unredirect_outgoing_call" msgid="2467608535225764006">"Appeler en utilisant mon numéro de téléphone"</string>
-    <string name="alert_redirect_outgoing_call_timeout" msgid="5568101425637373060">"Impossible de passer l\'appel au moyen de l\'application <xliff:g id="OTHER_APP">%1$s</xliff:g>. Essayez d\'utiliser une autre application de redirection d\'appels ou de communiquer avec le concepteur de l\'application pour obtenir de l\'aide."</string>
+    <string name="alert_redirect_outgoing_call_timeout" msgid="5568101425637373060">"Impossible de passer l\'appel au moyen de l\'application <xliff:g id="OTHER_APP">%1$s</xliff:g>. Essayez d\'utiliser une autre application de redirection d\'appels ou de communiquer avec le développeur de l\'application pour obtenir de l\'aide."</string>
     <string name="phone_settings_call_blocking_txt" msgid="7311523114822507178">"Blocage des appels"</string>
     <string name="phone_settings_number_not_in_contact_txt" msgid="2602249106007265757">"Numéros non répertoriés dans les contacts"</string>
     <string name="phone_settings_number_not_in_contact_summary_txt" msgid="963327038085718969">"Bloquer les numéros non répertoriés dans vos contacts"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 42c55d6..c62fffc 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -88,7 +88,7 @@
     <string name="answering_ends_other_managed_call" msgid="4031778317409881805">"Ao responder, finalizará a túa chamada en curso"</string>
     <string name="answering_ends_other_managed_calls" msgid="3974069768615307659">"Ao responder, finalizarán as túas chamadas en curso"</string>
     <string name="answering_ends_other_managed_video_call" msgid="1988508241432031327">"Ao responder, finalizarán as túas videochamadas en curso"</string>
-    <string name="answer_incoming_call" msgid="2045888814782215326">"Responder"</string>
+    <string name="answer_incoming_call" msgid="2045888814782215326">"Contestar"</string>
     <string name="decline_incoming_call" msgid="922147089348451310">"Rexeitar"</string>
     <string name="cant_call_due_to_no_supported_service" msgid="1635626384149947077">"Non se pode realizar a chamada porque non hai ningunha conta de chamadas que admita chamadas deste tipo."</string>
     <string name="cant_call_due_to_ongoing_call" msgid="8004235328451385493">"Non se pode realizar a chamada porque hai unha chamada en curso en <xliff:g id="OTHER_CALL">%1$s</xliff:g>."</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 23ebb73..f479340 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -65,13 +65,13 @@
     <string name="blocked_numbers" msgid="8322134197039865180">"Nomor yang diblokir"</string>
     <string name="blocked_numbers_msg" msgid="2797422132329662697">"Anda tidak akan menerima telepon atau SMS dari nomor yang diblokir."</string>
     <string name="block_number" msgid="3784343046852802722">"Tambahkan nomor"</string>
-    <string name="unblock_dialog_body" msgid="2723393535797217261">"Batalkan pemblokiran <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
-    <string name="unblock_button" msgid="8732021675729981781">"Batalkan pemblokiran"</string>
+    <string name="unblock_dialog_body" msgid="2723393535797217261">"Berhenti memblokir <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
+    <string name="unblock_button" msgid="8732021675729981781">"Berhenti memblokir"</string>
     <string name="add_blocked_dialog_body" msgid="8599974422407139255">"Blokir panggilan telepon dan SMS dari"</string>
     <string name="add_blocked_number_hint" msgid="8769422085658041097">"Nomor telepon"</string>
     <string name="block_button" msgid="485080149164258770">"Blokir"</string>
     <string name="non_primary_user" msgid="315564589279622098">"Hanya pemilik perangkat yang dapat melihat dan mengelola nomor yang diblokir."</string>
-    <string name="delete_icon_description" msgid="5335959254954774373">"Bebaskan"</string>
+    <string name="delete_icon_description" msgid="5335959254954774373">"Berhenti memblokir"</string>
     <string name="blocked_numbers_butter_bar_title" msgid="582982373755950791">"Blokir dinonaktifkan sementara"</string>
     <string name="blocked_numbers_butter_bar_body" msgid="1261213114919301485">"Setelah Anda menelepon atau mengirim SMS ke nomor gawat darurat, blokir akan dinonaktifkan agar layanan gawat darurat tersebut dapat menghubungi Anda."</string>
     <string name="blocked_numbers_butter_bar_button" msgid="2704456308072489793">"Aktifkan lagi sekarang"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 30a909b..17e4a1b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -24,7 +24,7 @@
     <string name="notification_missedCallsTitle" msgid="3910479625507893809">"שיחות שלא נענו"</string>
     <string name="notification_missedCallsMsg" msgid="5055782736170916682">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> שיחות שלא נענו"</string>
     <string name="notification_missedCallTicker" msgid="6731461957487087769">"שיחה שלא נענתה מאת <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
-    <string name="notification_missedCall_call_back" msgid="7900333283939789732">"התקשר חזרה"</string>
+    <string name="notification_missedCall_call_back" msgid="7900333283939789732">"התקשרות בחזרה"</string>
     <string name="notification_missedCall_message" msgid="4054698824390076431">"שליחת הודעה"</string>
     <string name="notification_disconnectedCall_title" msgid="1790131923692416928">"השיחה נותקה"</string>
     <string name="notification_disconnectedCall_body" msgid="600491714584417536">"השיחה עם <xliff:g id="CALLER">%s</xliff:g> נותקה בגלל שיחת חירום."</string>
@@ -37,7 +37,7 @@
     <string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"רמקול מופעל."</string>
     <string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"לא נוח לי עכשיו. מה קורה?"</string>
     <string name="respond_via_sms_canned_response_2" msgid="2052951316129952406">"תיכף אחזור אליך."</string>
-    <string name="respond_via_sms_canned_response_3" msgid="6656147963478092035">"אני אתקשר אליך יותר מאוחר."</string>
+    <string name="respond_via_sms_canned_response_3" msgid="6656147963478092035">"אתקשר אליך יותר מאוחר."</string>
     <string name="respond_via_sms_canned_response_4" msgid="9141132488345561047">"לא נוח לי עכשיו. נדבר אחר כך?"</string>
     <string name="respond_via_sms_setting_title" msgid="4762275482898830160">"תגובות מהירות"</string>
     <string name="respond_via_sms_setting_title_2" msgid="4914853536609553457">"עריכת תגובות מהירות"</string>
@@ -48,15 +48,15 @@
     <string name="enable_account_preference_title" msgid="6949224486748457976">"חשבונות לביצוע שיחות"</string>
     <string name="outgoing_call_not_allowed_user_restriction" msgid="3424338207838851646">"ניתן לבצע רק שיחות חירום."</string>
     <string name="outgoing_call_not_allowed_no_permission" msgid="8590468836581488679">"לא ניתן להוציא שיחות באמצעות האפליקציה הזו ללא ההרשאה \'טלפון\'."</string>
-    <string name="outgoing_call_error_no_phone_number_supplied" msgid="7665135102566099778">"כדי להתקשר, הזן מספר טלפון חוקי."</string>
+    <string name="outgoing_call_error_no_phone_number_supplied" msgid="7665135102566099778">"כדי להתקשר, יש להזין מספר טלפון חוקי."</string>
     <string name="duplicate_video_call_not_allowed" msgid="5754746140185781159">"לא ניתן כעת להוסיף את השיחה."</string>
     <string name="no_vm_number" msgid="2179959110602180844">"חסר מספר של דואר קולי"</string>
     <string name="no_vm_number_msg" msgid="1339245731058529388">"‏בכרטיס ה-SIM לא מאוחסן מספר של דואר קולי."</string>
-    <string name="add_vm_number_str" msgid="5179510133063168998">"הוסף מספר"</string>
+    <string name="add_vm_number_str" msgid="5179510133063168998">"הוספת מספר"</string>
     <string name="change_default_dialer_dialog_title" msgid="5861469279421508060">"האם להפוך את <xliff:g id="NEW_APP">%s</xliff:g> לברירת המחדל לאפליקציית \'טלפון\'?"</string>
-    <string name="change_default_dialer_dialog_affirmative" msgid="8604665314757739550">"הגדר כברירת מחדל"</string>
+    <string name="change_default_dialer_dialog_affirmative" msgid="8604665314757739550">"הגדרה כברירת מחדל"</string>
     <string name="change_default_dialer_dialog_negative" msgid="8648669840052697821">"ביטול"</string>
-    <string name="change_default_dialer_warning_message" msgid="8461963987376916114">"<xliff:g id="NEW_APP">%s</xliff:g> תוכל להתקשר ולשלוט בכל ההיבטים של השיחות. מומלץ לבחור רק אפליקציות שאתה סומך עליהן כברירת המחדל לאפליקציית \'טלפון\'."</string>
+    <string name="change_default_dialer_warning_message" msgid="8461963987376916114">"<xliff:g id="NEW_APP">%s</xliff:g> תוכל להתקשר ולשלוט בכל ההיבטים של השיחות. מומלץ לבחור רק אפליקציות שסומכים עליהן כברירת המחדל לאפליקציית \'טלפון\'."</string>
     <string name="change_default_call_screening_dialog_title" msgid="5365787219927262408">"רוצה להפוך את <xliff:g id="NEW_APP">%s</xliff:g> לאפליקציית ברירת המחדל שלך לסינון שיחות?"</string>
     <string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="2039830033533243164">"אפליקציית <xliff:g id="OLD_APP">%s</xliff:g> לא תוכל לסנן שיחות עוד."</string>
     <string name="change_default_call_screening_warning_message" msgid="9020537562292754269">"אפליקציית <xliff:g id="NEW_APP">%s</xliff:g> תוכל לראות מידע על מתקשרים שאינם באנשי הקשר שלך ולחסום שיחות מהם. מומלץ לבחור רק אפליקציות שסומכים עליהן כברירת המחדל לסינון שיחות."</string>
@@ -74,12 +74,12 @@
     <string name="delete_icon_description" msgid="5335959254954774373">"ביטול חסימה"</string>
     <string name="blocked_numbers_butter_bar_title" msgid="582982373755950791">"החסימה הושבתה זמנית"</string>
     <string name="blocked_numbers_butter_bar_body" msgid="1261213114919301485">"לאחר חיוג או שליחת הודעה למספר חירום, החסימה תושבת כדי ששירותי החירום יוכלו ליצור איתך קשר."</string>
-    <string name="blocked_numbers_butter_bar_button" msgid="2704456308072489793">"הפעל מחדש עכשיו"</string>
+    <string name="blocked_numbers_butter_bar_button" msgid="2704456308072489793">"הפעלה מחדש עכשיו"</string>
     <string name="blocked_numbers_number_blocked_message" msgid="4314736791180919167">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> נחסם"</string>
     <string name="blocked_numbers_number_unblocked_message" msgid="2933071624674945601">"החסימה של <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> בוטלה"</string>
     <string name="blocked_numbers_block_emergency_number_message" msgid="4198550501500893890">"אי אפשר לחסום מספרי חירום."</string>
     <string name="blocked_numbers_number_already_blocked_message" msgid="2301270825735665458">"המספר <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> כבר חסום."</string>
-    <string name="toast_personal_call_msg" msgid="5817631570381795610">"משתמש בחייגן האישי כדי להתקשר"</string>
+    <string name="toast_personal_call_msg" msgid="5817631570381795610">"נעשה שימוש בחייגן האישי כדי להתקשר"</string>
     <string name="notification_incoming_call" msgid="1233481138362230894">"<xliff:g id="CALL_FROM">%2$s</xliff:g> מתקשר/ת אליך ב-<xliff:g id="CALL_VIA">%1$s</xliff:g>"</string>
     <string name="notification_incoming_video_call" msgid="5795968314037063900">"<xliff:g id="CALL_FROM">%2$s</xliff:g> מתקשר/ת אליך בשיחת וידאו ב-<xliff:g id="CALL_VIA">%1$s</xliff:g>"</string>
     <string name="answering_ends_other_call" msgid="8653544281903986641">"מענה יסיים את השיחה ב-<xliff:g id="CALL_VIA">%1$s</xliff:g>"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 331cf5c..c235aab 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -94,7 +94,7 @@
     <string name="cant_call_due_to_ongoing_call" msgid="8004235328451385493">"आपल्या <xliff:g id="OTHER_CALL">%1$s</xliff:g> कॉलमुळे कॉल केला जाऊ शकत नाही."</string>
     <string name="cant_call_due_to_ongoing_calls" msgid="6379163795277824868">"आपल्या <xliff:g id="OTHER_CALL">%1$s</xliff:g> कॉलमुळे कॉल केला जाऊ शकत नाही."</string>
     <string name="cant_call_due_to_ongoing_unknown_call" msgid="8243532328969433172">"दुसर्‍या ॲपमधील कॉलमुळे कॉल केला जाऊ शकत नाही."</string>
-    <string name="notification_channel_incoming_call" msgid="5245550964701715662">"येणारे कॉल"</string>
+    <string name="notification_channel_incoming_call" msgid="5245550964701715662">"इनकमिंग कॉल"</string>
     <string name="notification_channel_missed_call" msgid="7168893015283909012">"मिस्ड कॉल"</string>
     <string name="notification_channel_call_blocking" msgid="2028807677868598710">"कॉल ब्‍लॉक करणे"</string>
     <string name="notification_channel_background_calls" msgid="7785659903711350506">"बॅकग्राउंड कॉल"</string>
@@ -111,9 +111,9 @@
     <string name="phone_settings_private_num_txt" msgid="6339272760338475619">"खाजगी"</string>
     <string name="phone_settings_private_num_summary_txt" msgid="6755758240544021037">"अशा कॉलरना ब्‍लॉक करा, जे त्‍यांचे क्रमांक उघड करत नाहीत"</string>
     <string name="phone_settings_payphone_txt" msgid="5003987966052543965">"पे फोन"</string>
-    <string name="phone_settings_payphone_summary_txt" msgid="3936631076065563665">"पे फोनवरून येणारे कॉल ब्‍लॉक करा"</string>
+    <string name="phone_settings_payphone_summary_txt" msgid="3936631076065563665">"पे फोनवरून इनकमिंग कॉल ब्‍लॉक करा"</string>
     <string name="phone_settings_unknown_txt" msgid="3577926178354772728">"अज्ञात"</string>
-    <string name="phone_settings_unknown_summary_txt" msgid="5446657192535779645">"अनोळखी कॉलरकडून येणारे कॉल ब्‍लॉक करा"</string>
+    <string name="phone_settings_unknown_summary_txt" msgid="5446657192535779645">"अनोळखी कॉलरकडून इनकमिंग कॉल ब्‍लॉक करा"</string>
     <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="2895809176537908791">"कॉल ब्‍लॉक करणे"</string>
     <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="1713632946174016619">"कॉल ब्‍लॉक करणे बंद केले"</string>
     <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="6629412508584507377">"आणीबाणी कॉल केला"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 5d7eef0..5ef8bc0 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -93,7 +93,7 @@
     <string name="cant_call_due_to_no_supported_service" msgid="1635626384149947077">"यस प्रकारका कलहरूलाई समर्थन गर्ने कुनै पनि कल गर्ने खाता नभएकाले कल गर्न सकिँदैन।"</string>
     <string name="cant_call_due_to_ongoing_call" msgid="8004235328451385493">"तपाईंको <xliff:g id="OTHER_CALL">%1$s</xliff:g> कलका कारण कल गर्न सकिँदैन।"</string>
     <string name="cant_call_due_to_ongoing_calls" msgid="6379163795277824868">"तपाईंका <xliff:g id="OTHER_CALL">%1$s</xliff:g> कलहरूका कारण कल गर्न सकिँदैन।"</string>
-    <string name="cant_call_due_to_ongoing_unknown_call" msgid="8243532328969433172">"अर्को अनुप्रयोगमा जारी कलका कारण कल गर्न सकिँदैन।"</string>
+    <string name="cant_call_due_to_ongoing_unknown_call" msgid="8243532328969433172">"अर्को एपमा जारी कलका कारण कल गर्न सकिँदैन।"</string>
     <string name="notification_channel_incoming_call" msgid="5245550964701715662">"आगमन कलहरू"</string>
     <string name="notification_channel_missed_call" msgid="7168893015283909012">"मिस कलहरू"</string>
     <string name="notification_channel_call_blocking" msgid="2028807677868598710">"कलमाथि रोक लगाउने सुविधा"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index e6deb9c..0dece34 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -47,7 +47,7 @@
     <string name="respond_via_sms_failure_format" msgid="5198680980054596391">"<xliff:g id="PHONE_NUMBER">%s</xliff:g>కు సందేశాన్ని పంపడం విఫలమైంది."</string>
     <string name="enable_account_preference_title" msgid="6949224486748457976">"కాలింగ్ ఖాతాలు"</string>
     <string name="outgoing_call_not_allowed_user_restriction" msgid="3424338207838851646">"కేవలం అత్యవసర కాల్‌లు మాత్రమే అనుమతించబడతాయి."</string>
-    <string name="outgoing_call_not_allowed_no_permission" msgid="8590468836581488679">"ఈ అనువర్తనం ఫోన్ అనుమతి లేకుండా అవుట్‌గోయింగ్ కాల్‌లను చేయలేదు."</string>
+    <string name="outgoing_call_not_allowed_no_permission" msgid="8590468836581488679">"ఈ యాప్‌ ఫోన్ అనుమతి లేకుండా అవుట్‌గోయింగ్ కాల్‌లను చేయలేదు."</string>
     <string name="outgoing_call_error_no_phone_number_supplied" msgid="7665135102566099778">"కాల్ చేయడానికి, చెల్లుబాటు అయ్యే నంబర్‌ను నమోదు చేయండి."</string>
     <string name="duplicate_video_call_not_allowed" msgid="5754746140185781159">"ఈ సమయంలో కాల్‌ను జోడించడం సాధ్యపడదు."</string>
     <string name="no_vm_number" msgid="2179959110602180844">"వాయిస్ మెయిల్ నంబర్ లేదు"</string>
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index ed6d223..36d2db7 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -85,6 +85,7 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  *  Encapsulates all aspects of a given phone call throughout its lifecycle, starting
@@ -3160,6 +3161,13 @@
     void setConferenceableCalls(List<Call> conferenceableCalls) {
         mConferenceableCalls.clear();
         mConferenceableCalls.addAll(conferenceableCalls);
+        String confCallIds = "";
+        if (!conferenceableCalls.isEmpty()) {
+            confCallIds = conferenceableCalls.stream()
+                    .map(c -> c.getId())
+                    .collect(Collectors.joining(","));
+        }
+        Log.addEvent(this, LogUtils.Events.CONF_CALLS_CHANGED, confCallIds);
 
         for (Listener l : mListeners) {
             l.onConferenceableCallsChanged(this);
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
index e5a6ecc..7033a15 100644
--- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
@@ -1678,8 +1678,8 @@
                     // may run as a separate user from the foreground user. If we
                     // used AudioManager directly, we would change mute for the system's
                     // user and not the current foreground, which we want to avoid.
-                    audio.setMicrophoneMute(
-                            mute, mContext.getOpPackageName(), getCurrentUserId());
+                    audio.setMicrophoneMute(mute, mContext.getOpPackageName(),
+                            getCurrentUserId(), mContext.getAttributionTag());
                 } catch (RemoteException e) {
                     Log.e(this, e, "Remote exception while toggling mute.");
                 }
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index 21c6844..da2669c 100755
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -920,6 +920,45 @@
                         } else {
                             connectIdToCheck = callId;
                         }
+
+                        // Handle the case where an existing connection was added by Telephony via
+                        // a connection manager.  The remote connection service API does not include
+                        // the ability to specify a parent connection when adding an existing
+                        // connection, so we stash the desired parent in the connection extras.
+                        if (connectionExtras != null
+                                && connectionExtras.containsKey(
+                                        Connection.EXTRA_ADD_TO_CONFERENCE_ID)
+                                && connection.getParentCallId() == null) {
+                            String parentId = connectionExtras.getString(
+                                    Connection.EXTRA_ADD_TO_CONFERENCE_ID);
+                            Log.i(ConnectionServiceWrapper.this, "addExistingConnection: remote "
+                                    + "connection will auto-add to parent %s", parentId);
+                            // Replace parcelable connection instance, swapping the new desired
+                            // parent in.
+                            connection = new ParcelableConnection(
+                                    connection.getPhoneAccount(),
+                                    connection.getState(),
+                                    connection.getConnectionCapabilities(),
+                                    connection.getConnectionProperties(),
+                                    connection.getSupportedAudioRoutes(),
+                                    connection.getHandle(),
+                                    connection.getHandlePresentation(),
+                                    connection.getCallerDisplayName(),
+                                    connection.getCallerDisplayNamePresentation(),
+                                    connection.getVideoProvider(),
+                                    connection.getVideoState(),
+                                    connection.isRingbackRequested(),
+                                    connection.getIsVoipAudioMode(),
+                                    connection.getConnectTimeMillis(),
+                                    connection.getConnectElapsedTimeMillis(),
+                                    connection.getStatusHints(),
+                                    connection.getDisconnectCause(),
+                                    connection.getConferenceableConnectionIds(),
+                                    connection.getExtras(),
+                                    parentId,
+                                    connection.getCallDirection(),
+                                    connection.getCallerNumberVerificationStatus());
+                        }
                         // Check to see if this Connection has already been added.
                         Call alreadyAddedConnection = mCallsManager
                                 .getAlreadyAddedConnection(connectIdToCheck);
diff --git a/src/com/android/server/telecom/LogUtils.java b/src/com/android/server/telecom/LogUtils.java
index 138e441..f53f239 100644
--- a/src/com/android/server/telecom/LogUtils.java
+++ b/src/com/android/server/telecom/LogUtils.java
@@ -138,6 +138,7 @@
         public static final String REMOVE_CHILD = "REMOVE_CHILD";
         public static final String SET_PARENT = "SET_PARENT";
         public static final String CONF_STATE_CHANGED = "CONF_STATE_CHANGED";
+        public static final String CONF_CALLS_CHANGED = "CONF_CALLS_CHANGED";
         public static final String CALL_DIRECTION_CHANGED = "CALL_DIRECTION_CHANGED";
         public static final String MUTE = "MUTE";
         public static final String UNMUTE = "UNMUTE";
diff --git a/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java b/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java
index 4a308e0..51b1bc6 100644
--- a/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java
+++ b/src/com/android/server/telecom/callfiltering/CallScreeningServiceFilter.java
@@ -313,11 +313,14 @@
 
     private void bindCallScreeningService(
             CompletableFuture<CallFilteringResult> resultFuture) {
-        mConnection = new CallScreeningServiceConnection(resultFuture);
+        CallScreeningServiceConnection connection = new CallScreeningServiceConnection(
+                resultFuture);
         if (!CallScreeningServiceHelper.bindCallScreeningService(mContext,
-                mCallsManager.getCurrentUserHandle(), mPackageName, mConnection)) {
+                mCallsManager.getCurrentUserHandle(), mPackageName, connection)) {
             Log.i(this, "Call screening service binding failed.");
             resultFuture.complete(mPriorStageResult);
+        } else {
+            mConnection = connection;
         }
     }
 
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index a3b8654..6d47c2a 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -618,10 +618,12 @@
 
         mInCallServiceFixtureX.mInCallAdapter.mute(true);
         verify(mAudioService, timeout(TEST_TIMEOUT))
-                .setMicrophoneMute(eq(true), any(String.class), any(Integer.class));
+                .setMicrophoneMute(eq(true), any(String.class), any(Integer.class),
+                        nullable(String.class));
         mInCallServiceFixtureX.mInCallAdapter.mute(false);
         verify(mAudioService, timeout(TEST_TIMEOUT))
-                .setMicrophoneMute(eq(false), any(String.class), any(Integer.class));
+                .setMicrophoneMute(eq(false), any(String.class), any(Integer.class),
+                        nullable(String.class));
 
         mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_SPEAKER, null);
         waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager()
@@ -1185,7 +1187,7 @@
 
         ArgumentCaptor<Boolean> muteValueCaptor = ArgumentCaptor.forClass(Boolean.class);
         verify(mAudioService, times(2)).setMicrophoneMute(muteValueCaptor.capture(),
-                any(String.class), any(Integer.class));
+                any(String.class), any(Integer.class), nullable(String.class));
         List<Boolean> muteValues = muteValueCaptor.getAllValues();
         // Check mute status was changed twice with true and false.
         assertTrue(muteValues.get(0));
diff --git a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
index 7f462d4..2d6fa4c 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
@@ -604,8 +604,8 @@
                     doReturn(args[0]).when(fakeAudioManager).isMicrophoneMute();
                     return null;
                 }
-            }).when(audioService)
-                    .setMicrophoneMute(any(Boolean.class), any(String.class), any(Integer.class));
+            }).when(audioService).setMicrophoneMute(any(Boolean.class), any(String.class),
+                    any(Integer.class), nullable(String.class));
 
         } catch (android.os.RemoteException e) {
             // Do nothing, leave the faked microphone state as-is