Merge "Fix crash prone code in BluetoothDeviceManager."
diff --git a/OWNERS b/OWNERS
index 4ec2718..97cc81f 100644
--- a/OWNERS
+++ b/OWNERS
@@ -4,3 +4,5 @@
chinmayd@google.com
tjstuart@google.com
rgreenwalt@google.com
+pmadapurmath@google.com
+grantmenke@google.com
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 5c62bb1..b243fcd 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -40,7 +40,7 @@
<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>
+ <string name="respond_via_sms_setting_title_2" msgid="4914853536609553457">"ଶୀଘ୍ର ଉତ୍ତରକୁ ଏଡିଟ କରନ୍ତୁ"</string>
<string name="respond_via_sms_setting_summary" msgid="8054571501085436868"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="6579353156073272157">"ଶୀଘ୍ର ଉତ୍ତର"</string>
<string name="respond_via_sms_confirmation_format" msgid="2932395476561267842">"<xliff:g id="PHONE_NUMBER">%s</xliff:g>କୁ ମେସେଜ୍ ପଠାଗଲା।"</string>
@@ -55,13 +55,13 @@
<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_negative" msgid="8648669840052697821">"ବାତିଲ୍ କରନ୍ତୁ"</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_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>
<string name="change_default_call_screening_dialog_affirmative" msgid="7162433828280058647">"ଡିଫଲ୍ଟ ସେଟ୍ କରନ୍ତୁ"</string>
- <string name="change_default_call_screening_dialog_negative" msgid="1839266125623106342">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="change_default_call_screening_dialog_negative" msgid="1839266125623106342">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="blocked_numbers" msgid="8322134197039865180">"ବ୍ଲକ୍ କରାଯାଇଥିବା ନମ୍ବର୍"</string>
<string name="blocked_numbers_msg" msgid="2797422132329662697">"ବ୍ଲକ୍ କରାଯାଇଥିବା ନମ୍ବର୍ରୁ ଆପଣ କଲ୍ କିମ୍ବା ଟେକ୍ସଟ୍ ଗ୍ରହଣ କରିପାରିବେ ନାହିଁ।"</string>
<string name="block_number" msgid="3784343046852802722">"ଗୋଟିଏ ନମ୍ବର୍ ଯୋଡ଼ନ୍ତୁ"</string>
@@ -73,7 +73,7 @@
<string name="non_primary_user" msgid="315564589279622098">"କେବଳ ଡିଭାଇସ୍ର ମାଲିକ ଅବରୋଧ କରାଯାଇଥିବା ନମ୍ବର୍କୁ ଦେଖିପାରିବେ ଓ ପରିଚାଳନା କରିପାରିବେ।"</string>
<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_body" msgid="1261213114919301485">"ଆପଣ ଗୋଟିଏ ଜରୁରିକାଳୀନ ନମ୍ବରକୁ ଡାଏଲ କିମ୍ବା ଟେକ୍ସଟ କରିବା ପରେ, ଜରୁରିକାଳୀନ ସେବା ଆପଣଙ୍କୁ କଣ୍ଟାକ୍ଟ କରିପାରୁଛି କି ନାହିଁ ତାହା ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ ଅବରୋଧକୁ ବନ୍ଦ କରି ଦିଆଯାଇଛି।"</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>
@@ -119,8 +119,8 @@
<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>
- <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="3140411733995271126">"ଜରୁରିକାଳୀନ ସହାୟତା କର୍ମଚାରୀମାନେ ଆପଣଙ୍କୁ ଯୋଗଯୋଗ କରିବା ପାଇଁ କଲ୍ ଅବରୋଧକୁ ଅକ୍ଷମ କରାଯାଇଛି।"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="3140411733995271126">"ଜରୁରିକାଳୀନ ଉତ୍ତରଦାତାମାନେ ଆପଣଙ୍କୁ କଣ୍ଟାକ୍ଟ କରିବା ପାଇଁ କଲ ଅବରୋଧକୁ ଅକ୍ଷମ କରାଯାଇଛି।"</string>
<string name="developer_title" msgid="9146088855661672353">"ଟେଲେକମ୍ ଡେଭେଲପର୍ ମେନୁ"</string>
<string name="toast_emergency_can_not_pull_call" msgid="9074229465338410869">"ଜରୁରୀକାଳୀନ କଲ୍ ବେଳେ ଅନ୍ୟ କଲ୍ ଉଠାଇ ପାରିବେ ନାହିଁ।"</string>
- <string name="cancel" msgid="6733466216239934756">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="cancel" msgid="6733466216239934756">"ବାତିଲ କରନ୍ତୁ"</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index b904115..af14060 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -69,8 +69,8 @@
<string name="unblock_button" msgid="8732021675729981781">"అన్బ్లాక్ చేయి"</string>
<string name="add_blocked_dialog_body" msgid="8599974422407139255">"దీని నుండి కాల్స్ మరియు మెసేజ్లను బ్లాక్ చేయండి"</string>
<string name="add_blocked_number_hint" msgid="8769422085658041097">"ఫోన్ నంబర్"</string>
- <string name="block_button" msgid="485080149164258770">"బ్లాక్ చేయి"</string>
- <string name="non_primary_user" msgid="315564589279622098">"కేవలం పరికర యజమాని మాత్రమే బ్లాక్ చేసిన నంబర్లను వీక్షించగలరు మరియు నిర్వహించగలరు."</string>
+ <string name="block_button" msgid="485080149164258770">"బ్లాక్ చేయండి"</string>
+ <string name="non_primary_user" msgid="315564589279622098">"కేవలం పరికర యజమాని మాత్రమే బ్లాక్ చేసిన నంబర్లను చూడగలరు మరియు నిర్వహించగలరు."</string>
<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>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index d91c260..b2a6c8b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -89,7 +89,7 @@
<string name="answering_ends_other_managed_calls" msgid="3974069768615307659">"如果接听此来电,您当前的通话会中断。"</string>
<string name="answering_ends_other_managed_video_call" msgid="1988508241432031327">"如果接听此来电,您当前的视频通话会中断。"</string>
<string name="answer_incoming_call" msgid="2045888814782215326">"接听"</string>
- <string name="decline_incoming_call" msgid="922147089348451310">"拒绝"</string>
+ <string name="decline_incoming_call" msgid="922147089348451310">"拒接"</string>
<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>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 39359b3..b9185ed 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -39,7 +39,7 @@
<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_4" msgid="9141132488345561047">"我現在不方便講話,晚點再打來好嗎?"</string>
- <string name="respond_via_sms_setting_title" msgid="4762275482898830160">"快速回應"</string>
+ <string name="respond_via_sms_setting_title" msgid="4762275482898830160">"應答短訊"</string>
<string name="respond_via_sms_setting_title_2" msgid="4914853536609553457">"編輯快速回應"</string>
<string name="respond_via_sms_setting_summary" msgid="8054571501085436868"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="6579353156073272157">"快速回應"</string>
diff --git a/res/xml/activity_blocked_numbers.xml b/res/xml/activity_blocked_numbers.xml
index f884ec9..e77184d 100644
--- a/res/xml/activity_blocked_numbers.xml
+++ b/res/xml/activity_blocked_numbers.xml
@@ -70,6 +70,8 @@
android:layout_height="wrap_content"
android:text="@string/blocked_numbers_msg"
android:paddingBottom="@dimen/blocked_numbers_extra_large_padding"
+ android:clickable="false"
+ android:longClickable="false"
style="@style/BlockedNumbersTextPrimary2" />
<TextView
diff --git a/res/xml/add_blocked_number_dialog.xml b/res/xml/add_blocked_number_dialog.xml
index 35ab633..c344280 100644
--- a/res/xml/add_blocked_number_dialog.xml
+++ b/res/xml/add_blocked_number_dialog.xml
@@ -28,6 +28,8 @@
android:text="@string/add_blocked_dialog_body"
android:paddingBottom="@dimen/blocked_numbers_large_padding"
android:gravity="start"
+ android:clickable="false"
+ android:longClickable="false"
style="@style/BlockedNumbersTextPrimary2" />
<EditText
android:id="@+id/add_blocked_number"
diff --git a/src/com/android/server/telecom/Analytics.java b/src/com/android/server/telecom/Analytics.java
index d6780ed..beb19ee 100644
--- a/src/com/android/server/telecom/Analytics.java
+++ b/src/com/android/server/telecom/Analytics.java
@@ -16,6 +16,8 @@
package com.android.server.telecom;
+import static java.util.Map.entry;
+
import android.content.Context;
import android.os.SystemProperties;
@@ -59,101 +61,95 @@
public static final String ANALYTICS_DUMPSYS_ARG = "analytics";
private static final String CLEAR_ANALYTICS_ARG = "clear";
- public static final Map<String, Integer> sLogEventToAnalyticsEvent =
- new HashMap<String, Integer>() {{
- put(LogUtils.Events.SET_SELECT_PHONE_ACCOUNT,
- AnalyticsEvent.SET_SELECT_PHONE_ACCOUNT);
- put(LogUtils.Events.REQUEST_HOLD, AnalyticsEvent.REQUEST_HOLD);
- put(LogUtils.Events.REQUEST_UNHOLD, AnalyticsEvent.REQUEST_UNHOLD);
- put(LogUtils.Events.SWAP, AnalyticsEvent.SWAP);
- put(LogUtils.Events.SKIP_RINGING, AnalyticsEvent.SKIP_RINGING);
- put(LogUtils.Events.CONFERENCE_WITH, AnalyticsEvent.CONFERENCE_WITH);
- put(LogUtils.Events.SPLIT_FROM_CONFERENCE, AnalyticsEvent.SPLIT_CONFERENCE);
- put(LogUtils.Events.SET_PARENT, AnalyticsEvent.SET_PARENT);
- put(LogUtils.Events.MUTE, AnalyticsEvent.MUTE);
- put(LogUtils.Events.UNMUTE, AnalyticsEvent.UNMUTE);
- put(LogUtils.Events.AUDIO_ROUTE_BT, AnalyticsEvent.AUDIO_ROUTE_BT);
- put(LogUtils.Events.AUDIO_ROUTE_EARPIECE, AnalyticsEvent.AUDIO_ROUTE_EARPIECE);
- put(LogUtils.Events.AUDIO_ROUTE_HEADSET, AnalyticsEvent.AUDIO_ROUTE_HEADSET);
- put(LogUtils.Events.AUDIO_ROUTE_SPEAKER, AnalyticsEvent.AUDIO_ROUTE_SPEAKER);
- put(LogUtils.Events.SILENCE, AnalyticsEvent.SILENCE);
- put(LogUtils.Events.SCREENING_COMPLETED, AnalyticsEvent.SCREENING_COMPLETED);
- put(LogUtils.Events.BLOCK_CHECK_FINISHED, AnalyticsEvent.BLOCK_CHECK_FINISHED);
- put(LogUtils.Events.DIRECT_TO_VM_FINISHED, AnalyticsEvent.DIRECT_TO_VM_FINISHED);
- put(LogUtils.Events.REMOTELY_HELD, AnalyticsEvent.REMOTELY_HELD);
- put(LogUtils.Events.REMOTELY_UNHELD, AnalyticsEvent.REMOTELY_UNHELD);
- put(LogUtils.Events.REQUEST_PULL, AnalyticsEvent.REQUEST_PULL);
- put(LogUtils.Events.REQUEST_ACCEPT, AnalyticsEvent.REQUEST_ACCEPT);
- put(LogUtils.Events.REQUEST_REJECT, AnalyticsEvent.REQUEST_REJECT);
- put(LogUtils.Events.SET_ACTIVE, AnalyticsEvent.SET_ACTIVE);
- put(LogUtils.Events.SET_DISCONNECTED, AnalyticsEvent.SET_DISCONNECTED);
- put(LogUtils.Events.SET_HOLD, AnalyticsEvent.SET_HOLD);
- put(LogUtils.Events.SET_DIALING, AnalyticsEvent.SET_DIALING);
- put(LogUtils.Events.START_CONNECTION, AnalyticsEvent.START_CONNECTION);
- put(LogUtils.Events.BIND_CS, AnalyticsEvent.BIND_CS);
- put(LogUtils.Events.CS_BOUND, AnalyticsEvent.CS_BOUND);
- put(LogUtils.Events.SCREENING_SENT, AnalyticsEvent.SCREENING_SENT);
- put(LogUtils.Events.DIRECT_TO_VM_INITIATED, AnalyticsEvent.DIRECT_TO_VM_INITIATED);
- put(LogUtils.Events.BLOCK_CHECK_INITIATED, AnalyticsEvent.BLOCK_CHECK_INITIATED);
- put(LogUtils.Events.FILTERING_INITIATED, AnalyticsEvent.FILTERING_INITIATED);
- put(LogUtils.Events.FILTERING_COMPLETED, AnalyticsEvent.FILTERING_COMPLETED);
- put(LogUtils.Events.FILTERING_TIMED_OUT, AnalyticsEvent.FILTERING_TIMED_OUT);
- }};
+ public static final Map<String, Integer> sLogEventToAnalyticsEvent = Map.ofEntries(
+ entry(LogUtils.Events.SET_SELECT_PHONE_ACCOUNT,
+ AnalyticsEvent.SET_SELECT_PHONE_ACCOUNT),
+ entry(LogUtils.Events.REQUEST_HOLD, AnalyticsEvent.REQUEST_HOLD),
+ entry(LogUtils.Events.REQUEST_UNHOLD, AnalyticsEvent.REQUEST_UNHOLD),
+ entry(LogUtils.Events.SWAP, AnalyticsEvent.SWAP),
+ entry(LogUtils.Events.SKIP_RINGING, AnalyticsEvent.SKIP_RINGING),
+ entry(LogUtils.Events.CONFERENCE_WITH, AnalyticsEvent.CONFERENCE_WITH),
+ entry(LogUtils.Events.SPLIT_FROM_CONFERENCE, AnalyticsEvent.SPLIT_CONFERENCE),
+ entry(LogUtils.Events.SET_PARENT, AnalyticsEvent.SET_PARENT),
+ entry(LogUtils.Events.MUTE, AnalyticsEvent.MUTE),
+ entry(LogUtils.Events.UNMUTE, AnalyticsEvent.UNMUTE),
+ entry(LogUtils.Events.AUDIO_ROUTE_BT, AnalyticsEvent.AUDIO_ROUTE_BT),
+ entry(LogUtils.Events.AUDIO_ROUTE_EARPIECE, AnalyticsEvent.AUDIO_ROUTE_EARPIECE),
+ entry(LogUtils.Events.AUDIO_ROUTE_HEADSET, AnalyticsEvent.AUDIO_ROUTE_HEADSET),
+ entry(LogUtils.Events.AUDIO_ROUTE_SPEAKER, AnalyticsEvent.AUDIO_ROUTE_SPEAKER),
+ entry(LogUtils.Events.SILENCE, AnalyticsEvent.SILENCE),
+ entry(LogUtils.Events.SCREENING_COMPLETED, AnalyticsEvent.SCREENING_COMPLETED),
+ entry(LogUtils.Events.BLOCK_CHECK_FINISHED, AnalyticsEvent.BLOCK_CHECK_FINISHED),
+ entry(LogUtils.Events.DIRECT_TO_VM_FINISHED, AnalyticsEvent.DIRECT_TO_VM_FINISHED),
+ entry(LogUtils.Events.REMOTELY_HELD, AnalyticsEvent.REMOTELY_HELD),
+ entry(LogUtils.Events.REMOTELY_UNHELD, AnalyticsEvent.REMOTELY_UNHELD),
+ entry(LogUtils.Events.REQUEST_PULL, AnalyticsEvent.REQUEST_PULL),
+ entry(LogUtils.Events.REQUEST_ACCEPT, AnalyticsEvent.REQUEST_ACCEPT),
+ entry(LogUtils.Events.REQUEST_REJECT, AnalyticsEvent.REQUEST_REJECT),
+ entry(LogUtils.Events.SET_ACTIVE, AnalyticsEvent.SET_ACTIVE),
+ entry(LogUtils.Events.SET_DISCONNECTED, AnalyticsEvent.SET_DISCONNECTED),
+ entry(LogUtils.Events.SET_HOLD, AnalyticsEvent.SET_HOLD),
+ entry(LogUtils.Events.SET_DIALING, AnalyticsEvent.SET_DIALING),
+ entry(LogUtils.Events.START_CONNECTION, AnalyticsEvent.START_CONNECTION),
+ entry(LogUtils.Events.BIND_CS, AnalyticsEvent.BIND_CS),
+ entry(LogUtils.Events.CS_BOUND, AnalyticsEvent.CS_BOUND),
+ entry(LogUtils.Events.SCREENING_SENT, AnalyticsEvent.SCREENING_SENT),
+ entry(LogUtils.Events.DIRECT_TO_VM_INITIATED,
+ AnalyticsEvent.DIRECT_TO_VM_INITIATED),
+ entry(LogUtils.Events.BLOCK_CHECK_INITIATED, AnalyticsEvent.BLOCK_CHECK_INITIATED),
+ entry(LogUtils.Events.FILTERING_INITIATED, AnalyticsEvent.FILTERING_INITIATED),
+ entry(LogUtils.Events.FILTERING_COMPLETED, AnalyticsEvent.FILTERING_COMPLETED),
+ entry(LogUtils.Events.FILTERING_TIMED_OUT, AnalyticsEvent.FILTERING_TIMED_OUT));
- public static final Map<String, Integer> sLogSessionToSessionId =
- new HashMap<String, Integer> () {{
- put(LogUtils.Sessions.ICA_ANSWER_CALL, SessionTiming.ICA_ANSWER_CALL);
- put(LogUtils.Sessions.ICA_REJECT_CALL, SessionTiming.ICA_REJECT_CALL);
- put(LogUtils.Sessions.ICA_DISCONNECT_CALL, SessionTiming.ICA_DISCONNECT_CALL);
- put(LogUtils.Sessions.ICA_HOLD_CALL, SessionTiming.ICA_HOLD_CALL);
- put(LogUtils.Sessions.ICA_UNHOLD_CALL, SessionTiming.ICA_UNHOLD_CALL);
- put(LogUtils.Sessions.ICA_MUTE, SessionTiming.ICA_MUTE);
- put(LogUtils.Sessions.ICA_SET_AUDIO_ROUTE, SessionTiming.ICA_SET_AUDIO_ROUTE);
- put(LogUtils.Sessions.ICA_CONFERENCE, SessionTiming.ICA_CONFERENCE);
- put(LogUtils.Sessions.CSW_HANDLE_CREATE_CONNECTION_COMPLETE,
- SessionTiming.CSW_HANDLE_CREATE_CONNECTION_COMPLETE);
- put(LogUtils.Sessions.CSW_SET_ACTIVE, SessionTiming.CSW_SET_ACTIVE);
- put(LogUtils.Sessions.CSW_SET_RINGING, SessionTiming.CSW_SET_RINGING);
- put(LogUtils.Sessions.CSW_SET_DIALING, SessionTiming.CSW_SET_DIALING);
- put(LogUtils.Sessions.CSW_SET_DISCONNECTED, SessionTiming.CSW_SET_DISCONNECTED);
- put(LogUtils.Sessions.CSW_SET_ON_HOLD, SessionTiming.CSW_SET_ON_HOLD);
- put(LogUtils.Sessions.CSW_REMOVE_CALL, SessionTiming.CSW_REMOVE_CALL);
- put(LogUtils.Sessions.CSW_SET_IS_CONFERENCED, SessionTiming.CSW_SET_IS_CONFERENCED);
- put(LogUtils.Sessions.CSW_ADD_CONFERENCE_CALL,
- SessionTiming.CSW_ADD_CONFERENCE_CALL);
+ public static final Map<String, Integer> sLogSessionToSessionId = Map.ofEntries(
+ entry(LogUtils.Sessions.ICA_ANSWER_CALL, SessionTiming.ICA_ANSWER_CALL),
+ entry(LogUtils.Sessions.ICA_REJECT_CALL, SessionTiming.ICA_REJECT_CALL),
+ entry(LogUtils.Sessions.ICA_DISCONNECT_CALL, SessionTiming.ICA_DISCONNECT_CALL),
+ entry(LogUtils.Sessions.ICA_HOLD_CALL, SessionTiming.ICA_HOLD_CALL),
+ entry(LogUtils.Sessions.ICA_UNHOLD_CALL, SessionTiming.ICA_UNHOLD_CALL),
+ entry(LogUtils.Sessions.ICA_MUTE, SessionTiming.ICA_MUTE),
+ entry(LogUtils.Sessions.ICA_SET_AUDIO_ROUTE, SessionTiming.ICA_SET_AUDIO_ROUTE),
+ entry(LogUtils.Sessions.ICA_CONFERENCE, SessionTiming.ICA_CONFERENCE),
+ entry(LogUtils.Sessions.CSW_HANDLE_CREATE_CONNECTION_COMPLETE,
+ SessionTiming.CSW_HANDLE_CREATE_CONNECTION_COMPLETE),
+ entry(LogUtils.Sessions.CSW_SET_ACTIVE, SessionTiming.CSW_SET_ACTIVE),
+ entry(LogUtils.Sessions.CSW_SET_RINGING, SessionTiming.CSW_SET_RINGING),
+ entry(LogUtils.Sessions.CSW_SET_DIALING, SessionTiming.CSW_SET_DIALING),
+ entry(LogUtils.Sessions.CSW_SET_DISCONNECTED, SessionTiming.CSW_SET_DISCONNECTED),
+ entry(LogUtils.Sessions.CSW_SET_ON_HOLD, SessionTiming.CSW_SET_ON_HOLD),
+ entry(LogUtils.Sessions.CSW_REMOVE_CALL, SessionTiming.CSW_REMOVE_CALL),
+ entry(LogUtils.Sessions.CSW_SET_IS_CONFERENCED, SessionTiming.CSW_SET_IS_CONFERENCED),
+ entry(LogUtils.Sessions.CSW_ADD_CONFERENCE_CALL,
+ SessionTiming.CSW_ADD_CONFERENCE_CALL));
- }};
-
- public static final Map<String, Integer> sLogEventTimingToAnalyticsEventTiming =
- new HashMap<String, Integer>() {{
- put(LogUtils.Events.Timings.ACCEPT_TIMING,
- ParcelableCallAnalytics.EventTiming.ACCEPT_TIMING);
- put(LogUtils.Events.Timings.REJECT_TIMING,
- ParcelableCallAnalytics.EventTiming.REJECT_TIMING);
- put(LogUtils.Events.Timings.DISCONNECT_TIMING,
- ParcelableCallAnalytics.EventTiming.DISCONNECT_TIMING);
- put(LogUtils.Events.Timings.HOLD_TIMING,
- ParcelableCallAnalytics.EventTiming.HOLD_TIMING);
- put(LogUtils.Events.Timings.UNHOLD_TIMING,
- ParcelableCallAnalytics.EventTiming.UNHOLD_TIMING);
- put(LogUtils.Events.Timings.OUTGOING_TIME_TO_DIALING_TIMING,
- ParcelableCallAnalytics.EventTiming.OUTGOING_TIME_TO_DIALING_TIMING);
- put(LogUtils.Events.Timings.BIND_CS_TIMING,
- ParcelableCallAnalytics.EventTiming.BIND_CS_TIMING);
- put(LogUtils.Events.Timings.SCREENING_COMPLETED_TIMING,
- ParcelableCallAnalytics.EventTiming.SCREENING_COMPLETED_TIMING);
- put(LogUtils.Events.Timings.DIRECT_TO_VM_FINISHED_TIMING,
- ParcelableCallAnalytics.EventTiming.DIRECT_TO_VM_FINISHED_TIMING);
- put(LogUtils.Events.Timings.BLOCK_CHECK_FINISHED_TIMING,
- ParcelableCallAnalytics.EventTiming.BLOCK_CHECK_FINISHED_TIMING);
- put(LogUtils.Events.Timings.FILTERING_COMPLETED_TIMING,
- ParcelableCallAnalytics.EventTiming.FILTERING_COMPLETED_TIMING);
- put(LogUtils.Events.Timings.FILTERING_TIMED_OUT_TIMING,
- ParcelableCallAnalytics.EventTiming.FILTERING_TIMED_OUT_TIMING);
- put(LogUtils.Events.Timings.START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING,
+ public static final Map<String, Integer> sLogEventTimingToAnalyticsEventTiming = Map.ofEntries(
+ entry(LogUtils.Events.Timings.ACCEPT_TIMING,
+ ParcelableCallAnalytics.EventTiming.ACCEPT_TIMING),
+ entry(LogUtils.Events.Timings.REJECT_TIMING,
+ ParcelableCallAnalytics.EventTiming.REJECT_TIMING),
+ entry(LogUtils.Events.Timings.DISCONNECT_TIMING,
+ ParcelableCallAnalytics.EventTiming.DISCONNECT_TIMING),
+ entry(LogUtils.Events.Timings.HOLD_TIMING,
+ ParcelableCallAnalytics.EventTiming.HOLD_TIMING),
+ entry(LogUtils.Events.Timings.UNHOLD_TIMING,
+ ParcelableCallAnalytics.EventTiming.UNHOLD_TIMING),
+ entry(LogUtils.Events.Timings.OUTGOING_TIME_TO_DIALING_TIMING,
+ ParcelableCallAnalytics.EventTiming.OUTGOING_TIME_TO_DIALING_TIMING),
+ entry(LogUtils.Events.Timings.BIND_CS_TIMING,
+ ParcelableCallAnalytics.EventTiming.BIND_CS_TIMING),
+ entry(LogUtils.Events.Timings.SCREENING_COMPLETED_TIMING,
+ ParcelableCallAnalytics.EventTiming.SCREENING_COMPLETED_TIMING),
+ entry(LogUtils.Events.Timings.DIRECT_TO_VM_FINISHED_TIMING,
+ ParcelableCallAnalytics.EventTiming.DIRECT_TO_VM_FINISHED_TIMING),
+ entry(LogUtils.Events.Timings.BLOCK_CHECK_FINISHED_TIMING,
+ ParcelableCallAnalytics.EventTiming.BLOCK_CHECK_FINISHED_TIMING),
+ entry(LogUtils.Events.Timings.FILTERING_COMPLETED_TIMING,
+ ParcelableCallAnalytics.EventTiming.FILTERING_COMPLETED_TIMING),
+ entry(LogUtils.Events.Timings.FILTERING_TIMED_OUT_TIMING,
+ ParcelableCallAnalytics.EventTiming.FILTERING_TIMED_OUT_TIMING),
+ entry(LogUtils.Events.Timings.START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING,
ParcelableCallAnalytics.EventTiming.
- START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING);
- }};
+ START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING));
public static final Map<Integer, String> sSessionIdToLogSession = new HashMap<>();
static {
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 4d829bb..cd13a92 100755
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -2091,6 +2091,16 @@
boolean endEarly = false;
String disconnectReason = "";
String callRedirectionApp = mRoleManagerAdapter.getDefaultCallRedirectionApp();
+ PhoneAccount phoneAccount = mPhoneAccountRegistrar
+ .getPhoneAccountUnchecked(phoneAccountHandle);
+ if (phoneAccount != null
+ && !phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_MULTI_USER)) {
+ // Check if the phoneAccountHandle belongs to the current user
+ if (phoneAccountHandle != null &&
+ !phoneAccountHandle.getUserHandle().equals(mCurrentUserHandle)) {
+ phoneAccountHandle = null;
+ }
+ }
boolean isPotentialEmergencyNumber;
try {
@@ -2125,9 +2135,9 @@
endEarly = true;
disconnectReason = "Null handle from Call Redirection Service";
} else if (phoneAccountHandle == null) {
- Log.w(this, "onCallRedirectionComplete: phoneAccountHandle is null");
+ Log.w(this, "onCallRedirectionComplete: phoneAccountHandle is unavailable");
endEarly = true;
- disconnectReason = "Null phoneAccountHandle from Call Redirection Service";
+ disconnectReason = "Unavailable phoneAccountHandle from Call Redirection Service";
} else if (isPotentialEmergencyNumber) {
Log.w(this, "onCallRedirectionComplete: emergency number %s is redirected from Call"
+ " Redirection Service", handle.getSchemeSpecificPart());
@@ -2148,6 +2158,7 @@
return;
}
+ final PhoneAccountHandle finalPhoneAccountHandle = phoneAccountHandle;
if (uiAction.equals(CallRedirectionProcessor.UI_TYPE_USER_DEFINED_ASK_FOR_CONFIRM)) {
Log.addEvent(call, LogUtils.Events.REDIRECTION_USER_CONFIRMATION);
mPendingRedirectedOutgoingCall = call;
@@ -2157,7 +2168,7 @@
@Override
public void loggedRun() {
Log.addEvent(call, LogUtils.Events.REDIRECTION_USER_CONFIRMED);
- call.setTargetPhoneAccount(phoneAccountHandle);
+ call.setTargetPhoneAccount(finalPhoneAccountHandle);
placeOutgoingCall(call, handle, gatewayInfo, speakerphoneOn,
videoState);
}
@@ -2167,7 +2178,7 @@
new Runnable("CM.oCRC", mLock) {
@Override
public void loggedRun() {
- call.setTargetPhoneAccount(phoneAccountHandle);
+ call.setTargetPhoneAccount(finalPhoneAccountHandle);
placeOutgoingCall(call, handle, null, speakerphoneOn,
videoState);
}
diff --git a/src/com/android/server/telecom/RespondViaSmsManager.java b/src/com/android/server/telecom/RespondViaSmsManager.java
index 23ccc1c..8507703 100644
--- a/src/com/android/server/telecom/RespondViaSmsManager.java
+++ b/src/com/android/server/telecom/RespondViaSmsManager.java
@@ -31,11 +31,13 @@
import android.telephony.PhoneNumberUtils;
import android.telephony.SmsManager;
import android.telephony.SubscriptionManager;
+import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.widget.Toast;
+import java.text.Bidi;
import java.util.ArrayList;
import java.util.List;
@@ -158,7 +160,9 @@
final String formatString = res.getString(success
? R.string.respond_via_sms_confirmation_format
: R.string.respond_via_sms_failure_format);
- final String confirmationMsg = String.format(formatString, phoneNumber);
+ final BidiFormatter phoneNumberFormatter = BidiFormatter.getInstance();
+ final String confirmationMsg = String.format(formatString,
+ phoneNumberFormatter.unicodeWrap(phoneNumber));
int startingPosition = confirmationMsg.indexOf(phoneNumber);
int endingPosition = startingPosition + phoneNumber.length();
@@ -207,10 +211,12 @@
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
sentIntents.add(pendingIntent);
}
+
MessageSentReceiver receiver = new MessageSentReceiver(
!TextUtils.isEmpty(contactName) ? contactName : phoneNumber,
messageParts.size());
- context.registerReceiver(receiver, new IntentFilter(ACTION_MESSAGE_SENT));
+ context.registerReceiver(receiver, new IntentFilter(ACTION_MESSAGE_SENT),
+ Context.RECEIVER_NOT_EXPORTED);
smsManager.sendMultipartTextMessage(phoneNumber, null, messageParts,
sentIntents/*sentIntent*/, null /*deliveryIntent*/, context.getOpPackageName(),
context.getAttributionTag());
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 06a190b..ee7aba6 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -41,6 +41,7 @@
import android.content.PermissionChecker;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Binder;
@@ -191,25 +192,26 @@
}
@Override
- public List<PhoneAccountHandle> getCallCapablePhoneAccounts(
+ public ParceledListSlice<PhoneAccountHandle> getCallCapablePhoneAccounts(
boolean includeDisabledAccounts, String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.gCCPA", Log.getPackageAbbreviation(callingPackage));
if (includeDisabledAccounts &&
!canReadPrivilegedPhoneState(
callingPackage, "getCallCapablePhoneAccounts")) {
- return Collections.emptyList();
+ return ParceledListSlice.emptyList();
}
if (!canReadPhoneState(callingPackage, callingFeatureId,
"getCallCapablePhoneAccounts")) {
- return Collections.emptyList();
+ return ParceledListSlice.emptyList();
}
synchronized (mLock) {
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar.getCallCapablePhoneAccounts(null,
- includeDisabledAccounts, callingUserHandle);
+ return new ParceledListSlice<>(
+ mPhoneAccountRegistrar.getCallCapablePhoneAccounts(null,
+ includeDisabledAccounts, callingUserHandle));
} catch (Exception e) {
Log.e(this, e, "getCallCapablePhoneAccounts");
throw e;
@@ -223,8 +225,8 @@
}
@Override
- public List<PhoneAccountHandle> getSelfManagedPhoneAccounts(String callingPackage,
- String callingFeatureId) {
+ public ParceledListSlice<PhoneAccountHandle> getSelfManagedPhoneAccounts(
+ String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.gSMPA", Log.getPackageAbbreviation(callingPackage));
if (!canReadPhoneState(callingPackage, callingFeatureId,
@@ -235,8 +237,8 @@
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar.getSelfManagedPhoneAccounts(
- callingUserHandle);
+ return new ParceledListSlice<>(mPhoneAccountRegistrar
+ .getSelfManagedPhoneAccounts(callingUserHandle));
} catch (Exception e) {
Log.e(this, e, "getSelfManagedPhoneAccounts");
throw e;
@@ -250,8 +252,8 @@
}
@Override
- public List<PhoneAccountHandle> getOwnSelfManagedPhoneAccounts(String callingPackage,
- String callingFeatureId) {
+ public ParceledListSlice<PhoneAccountHandle> getOwnSelfManagedPhoneAccounts(
+ String callingPackage, String callingFeatureId) {
try {
Log.startSession("TSI.gOSMPA", Log.getPackageAbbreviation(callingPackage));
try {
@@ -269,9 +271,9 @@
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar.getSelfManagedPhoneAccountsForPackage(
- callingPackage,
- callingUserHandle);
+ return new ParceledListSlice<>(mPhoneAccountRegistrar
+ .getSelfManagedPhoneAccountsForPackage(callingPackage,
+ callingUserHandle));
} catch (Exception e) {
Log.e(this, e,
"getSelfManagedPhoneAccountsForPackage");
@@ -286,8 +288,8 @@
}
@Override
- public List<PhoneAccountHandle> getPhoneAccountsSupportingScheme(String uriScheme,
- String callingPackage) {
+ public ParceledListSlice<PhoneAccountHandle> getPhoneAccountsSupportingScheme(
+ String uriScheme, String callingPackage) {
try {
Log.startSession("TSI.gPASS", Log.getPackageAbbreviation(callingPackage));
try {
@@ -296,15 +298,16 @@
} catch (SecurityException e) {
EventLog.writeEvent(0x534e4554, "62347125", Binder.getCallingUid(),
"getPhoneAccountsSupportingScheme: " + callingPackage);
- return Collections.emptyList();
+ return ParceledListSlice.emptyList();
}
synchronized (mLock) {
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar.getCallCapablePhoneAccounts(uriScheme, false,
- callingUserHandle);
+ return new ParceledListSlice<>(mPhoneAccountRegistrar
+ .getCallCapablePhoneAccounts(uriScheme, false,
+ callingUserHandle));
} catch (Exception e) {
Log.e(this, e, "getPhoneAccountsSupportingScheme %s", uriScheme);
throw e;
@@ -318,7 +321,8 @@
}
@Override
- public List<PhoneAccountHandle> getPhoneAccountsForPackage(String packageName) {
+ public ParceledListSlice<PhoneAccountHandle> getPhoneAccountsForPackage(
+ String packageName) {
//TODO: Deprecate this in S
try {
enforceCallingPackage(packageName, "getPhoneAccountsForPackage");
@@ -341,8 +345,8 @@
long token = Binder.clearCallingIdentity();
try {
Log.startSession("TSI.gPAFP");
- return mPhoneAccountRegistrar.getPhoneAccountsForPackage(packageName,
- callingUserHandle);
+ return new ParceledListSlice<>(mPhoneAccountRegistrar
+ .getPhoneAccountsForPackage(packageName, callingUserHandle));
} catch (Exception e) {
Log.e(this, e, "getPhoneAccountsForPackage %s", packageName);
throw e;
@@ -412,7 +416,7 @@
synchronized (mLock) {
try {
// This list is pre-filtered for the calling user.
- return getAllPhoneAccounts().size();
+ return getAllPhoneAccounts().getList().size();
} catch (Exception e) {
Log.e(this, e, "getAllPhoneAccountsCount");
throw e;
@@ -425,7 +429,7 @@
}
@Override
- public List<PhoneAccount> getAllPhoneAccounts() {
+ public ParceledListSlice<PhoneAccount> getAllPhoneAccounts() {
synchronized (mLock) {
try {
Log.startSession("TSI.gAPA");
@@ -441,7 +445,8 @@
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar.getAllPhoneAccounts(callingUserHandle);
+ return new ParceledListSlice<>(mPhoneAccountRegistrar
+ .getAllPhoneAccounts(callingUserHandle));
} catch (Exception e) {
Log.e(this, e, "getAllPhoneAccounts");
throw e;
@@ -455,7 +460,7 @@
}
@Override
- public List<PhoneAccountHandle> getAllPhoneAccountHandles() {
+ public ParceledListSlice<PhoneAccountHandle> getAllPhoneAccountHandles() {
try {
Log.startSession("TSI.gAPAH");
try {
@@ -471,7 +476,8 @@
final UserHandle callingUserHandle = Binder.getCallingUserHandle();
long token = Binder.clearCallingIdentity();
try {
- return mPhoneAccountRegistrar.getAllPhoneAccountHandles(callingUserHandle);
+ return new ParceledListSlice<>(mPhoneAccountRegistrar
+ .getAllPhoneAccountHandles(callingUserHandle));
} catch (Exception e) {
Log.e(this, e, "getAllPhoneAccounts");
throw e;
diff --git a/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java b/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java
index 627fa44..3283fec 100644
--- a/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java
+++ b/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java
@@ -187,6 +187,7 @@
private boolean mLeAudioCallbackRegistered = false;
private BluetoothLeAudio mBluetoothLeAudioService;
private boolean mLeAudioSetAsCommunicationDevice = false;
+ private String mLeAudioDevice;
private boolean mHearingAidSetAsCommunicationDevice = false;
private BluetoothDevice mBluetoothHearingAidActiveDeviceCache;
private BluetoothAdapter mBluetoothAdapter;
@@ -418,10 +419,17 @@
}
public void clearLeAudioCommunicationDevice() {
+ Log.i(this, "clearLeAudioCommunicationDevice: mLeAudioSetAsCommunicationDevice = " +
+ mLeAudioSetAsCommunicationDevice + " device = " + mLeAudioDevice);
if (!mLeAudioSetAsCommunicationDevice) {
return;
}
mLeAudioSetAsCommunicationDevice = false;
+ if (mLeAudioDevice != null) {
+ mBluetoothRouteManager.onAudioLost(mLeAudioDevice);
+ mLeAudioDevice = null;
+ }
+
if (mAudioManager == null) {
Log.i(this, "clearLeAudioCommunicationDevice: mAudioManager is null");
return;
@@ -430,7 +438,6 @@
AudioDeviceInfo audioDeviceInfo = mAudioManager.getCommunicationDevice();
if (audioDeviceInfo != null && audioDeviceInfo.getType()
== AudioDeviceInfo.TYPE_BLE_HEADSET) {
- mBluetoothRouteManager.onAudioLost(mAudioManager.getCommunicationDevice().getAddress());
mAudioManager.clearCommunicationDevice();
}
}
@@ -496,6 +503,7 @@
Log.i(this, " bleHeadset device set");
mBluetoothRouteManager.onAudioOn(bleHeadset.getAddress());
mLeAudioSetAsCommunicationDevice = true;
+ mLeAudioDevice = bleHeadset.getAddress();
}
return result;
}
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index 6fd8334..160114a 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -37,7 +37,6 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -57,7 +56,7 @@
import android.telecom.CallerInfo;
import android.telecom.Connection;
import android.telecom.DisconnectCause;
-import android.telecom.Log;
+import android.telecom.GatewayInfo;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
@@ -77,7 +76,6 @@
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;
@@ -133,8 +131,12 @@
@RunWith(JUnit4.class)
public class CallsManagerTest extends TelecomTestCase {
private static final int TEST_TIMEOUT = 5000; // milliseconds
+ private static final int SECONDARY_USER_ID = 12;
private static final PhoneAccountHandle SIM_1_HANDLE = new PhoneAccountHandle(
ComponentName.unflattenFromString("com.foo/.Blah"), "Sim1");
+ private static final PhoneAccountHandle SIM_1_HANDLE_SECONDARY = new PhoneAccountHandle(
+ ComponentName.unflattenFromString("com.foo/.Blah"), "Sim1",
+ new UserHandle(SECONDARY_USER_ID));
private static final PhoneAccountHandle SIM_2_HANDLE = new PhoneAccountHandle(
ComponentName.unflattenFromString("com.foo/.Blah"), "Sim2");
private static final PhoneAccountHandle CONNECTION_MGR_1_HANDLE = new PhoneAccountHandle(
@@ -165,11 +167,9 @@
private static final Uri TEST_ADDRESS = Uri.parse("tel:555-1212");
private static final Uri TEST_ADDRESS2 = Uri.parse("tel:555-1213");
private static final Uri TEST_ADDRESS3 = Uri.parse("tel:555-1214");
- private static final Map<Uri, PhoneAccountHandle> CONTACT_PREFERRED_ACCOUNT =
- new HashMap<Uri, PhoneAccountHandle>() {{
- put(TEST_ADDRESS2, SIM_1_HANDLE);
- put(TEST_ADDRESS3, SIM_2_HANDLE);
- }};
+ private static final Map<Uri, PhoneAccountHandle> CONTACT_PREFERRED_ACCOUNT = Map.of(
+ TEST_ADDRESS2, SIM_1_HANDLE,
+ TEST_ADDRESS3, SIM_2_HANDLE);
private static int sCallId = 1;
private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { };
@@ -1676,6 +1676,23 @@
new UserHandle(90210)));
}
+ @SmallTest
+ @Test
+ public void testCrossUserCallRedirectionEndEarlyForIncapablePhoneAccount() {
+ when(mPhoneAccountRegistrar.getPhoneAccountUnchecked(eq(SIM_1_HANDLE_SECONDARY)))
+ .thenReturn(SIM_1_ACCOUNT);
+ mCallsManager.onUserSwitch(UserHandle.SYSTEM);
+
+ Call callSpy = addSpyCall(CallState.NEW);
+ mCallsManager.onCallRedirectionComplete(callSpy, TEST_ADDRESS, SIM_1_HANDLE_SECONDARY,
+ new GatewayInfo("foo", TEST_ADDRESS2, TEST_ADDRESS), true /* speakerphoneOn */,
+ VideoProfile.STATE_AUDIO_ONLY, false /* shouldCancelCall */, "" /* uiAction */);
+
+ ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
+ verify(callSpy).disconnect(argumentCaptor.capture());
+ assertTrue(argumentCaptor.getValue().contains("Unavailable phoneAccountHandle"));
+ }
+
private Call addSpyCall() {
return addSpyCall(SIM_2_HANDLE, CallState.ACTIVE);
}
diff --git a/tests/src/com/android/server/telecom/tests/ProximitySensorManagerTest.java b/tests/src/com/android/server/telecom/tests/ProximitySensorManagerTest.java
index eafaa53..807b7cf 100644
--- a/tests/src/com/android/server/telecom/tests/ProximitySensorManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/ProximitySensorManagerTest.java
@@ -31,7 +31,7 @@
import org.junit.runners.JUnit4;
import org.mockito.Mock;
-import java.util.ArrayList;
+import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -67,9 +67,7 @@
@SmallTest
@Test
public void testTurnOnProximityWithCallsActive() throws Exception {
- when(mCallsManager.getCalls()).thenReturn(new ArrayList<Call>(){{
- add(mCall);
- }});
+ when(mCallsManager.getCalls()).thenReturn(List.of(mCall));
when(mWakeLockAdapter.isHeld()).thenReturn(false);
mProximitySensorManager.turnOn();
@@ -80,7 +78,7 @@
@SmallTest
@Test
public void testTurnOnProximityWithNoCallsActive() throws Exception {
- when(mCallsManager.getCalls()).thenReturn(new ArrayList<Call>());
+ when(mCallsManager.getCalls()).thenReturn(List.of());
when(mWakeLockAdapter.isHeld()).thenReturn(false);
mProximitySensorManager.turnOn();
@@ -102,9 +100,7 @@
@SmallTest
@Test
public void testCallRemovedFromCallsManagerCallsActive() throws Exception {
- when(mCallsManager.getCalls()).thenReturn(new ArrayList<Call>(){{
- add(mCall);
- }});
+ when(mCallsManager.getCalls()).thenReturn(List.of(mCall));
when(mWakeLockAdapter.isHeld()).thenReturn(true);
mProximitySensorManager.onCallRemoved(mock(Call.class));
@@ -115,7 +111,7 @@
@SmallTest
@Test
public void testCallRemovedFromCallsManagerNoCallsActive() throws Exception {
- when(mCallsManager.getCalls()).thenReturn(new ArrayList<Call>());
+ when(mCallsManager.getCalls()).thenReturn(List.of());
when(mWakeLockAdapter.isHeld()).thenReturn(true);
mProximitySensorManager.onCallRemoved(mock(Call.class));
diff --git a/tests/src/com/android/server/telecom/tests/SessionTest.java b/tests/src/com/android/server/telecom/tests/SessionTest.java
index 4be3dad..f38618c 100644
--- a/tests/src/com/android/server/telecom/tests/SessionTest.java
+++ b/tests/src/com/android/server/telecom/tests/SessionTest.java
@@ -144,6 +144,7 @@
* Ensure creating two sessions that are parent/child of each other does not lead to a crash
* or infinite recursion when using Session#toString.
*/
+ @SuppressWarnings("ReturnValueIgnored")
@SmallTest
@Test
public void testRecursion_toString() {
@@ -159,7 +160,6 @@
// Make sure calling these methods does not result in a crash
try {
-
parentSession.toString();
childSession.toString();
} catch (Exception e) {
@@ -176,6 +176,7 @@
* Ensure creating two sessions and setting the child as the parent to itself doesn't cause a
* crash due to infinite recursion.
*/
+ @SuppressWarnings("ReturnValueIgnored")
@SmallTest
@Test
public void testRecursion_toString_childCircDep() {
@@ -237,6 +238,7 @@
* Ensure creating two sessions that are parent/child of each other does not lead to a crash
* or infinite recursion in the general case.
*/
+ @SuppressWarnings("ReturnValueIgnored")
@SmallTest
@Test
public void testRecursion() {
diff --git a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
index 210f80e..f6f2ae2 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
@@ -372,14 +372,9 @@
@SmallTest
@Test
public void testGetCallCapablePhoneAccounts() throws RemoteException {
- List<PhoneAccountHandle> fullPHList = new ArrayList<PhoneAccountHandle>() {{
- add(TEL_PA_HANDLE_16);
- add(SIP_PA_HANDLE_17);
- }};
+ List<PhoneAccountHandle> fullPHList = List.of(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
+ List<PhoneAccountHandle> smallPHList = List.of(SIP_PA_HANDLE_17);
- List<PhoneAccountHandle> smallPHList = new ArrayList<PhoneAccountHandle>() {{
- add(SIP_PA_HANDLE_17);
- }};
// Returns all phone accounts when getCallCapablePhoneAccounts is called.
when(mFakePhoneAccountRegistrar
.getCallCapablePhoneAccounts(nullable(String.class), eq(true),
@@ -391,24 +386,24 @@
makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
assertEquals(fullPHList,
- mTSIBinder.getCallCapablePhoneAccounts(true, DEFAULT_DIALER_PACKAGE, null));
+ mTSIBinder.getCallCapablePhoneAccounts(
+ true, DEFAULT_DIALER_PACKAGE, null).getList());
assertEquals(smallPHList,
- mTSIBinder.getCallCapablePhoneAccounts(false, DEFAULT_DIALER_PACKAGE, null));
+ mTSIBinder.getCallCapablePhoneAccounts(
+ false, DEFAULT_DIALER_PACKAGE, null).getList());
}
@SmallTest
@Test
public void testGetCallCapablePhoneAccountsFailure() throws RemoteException {
- List<String> enforcedPermissions = new ArrayList<String>() {{
- add(READ_PHONE_STATE);
- add(READ_PRIVILEGED_PHONE_STATE);
- }};
+ List<String> enforcedPermissions = List.of(READ_PHONE_STATE, READ_PRIVILEGED_PHONE_STATE);
+
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
argThat(new AnyStringIn(enforcedPermissions)), anyString());
List<PhoneAccountHandle> result = null;
try {
- result = mTSIBinder.getCallCapablePhoneAccounts(true, "", null);
+ result = mTSIBinder.getCallCapablePhoneAccounts(true, "", null).getList();
} catch (SecurityException e) {
// intended behavior
}
@@ -420,13 +415,9 @@
@SmallTest
@Test
public void testGetPhoneAccountsSupportingScheme() throws RemoteException {
- List<PhoneAccountHandle> sipPHList = new ArrayList<PhoneAccountHandle>() {{
- add(SIP_PA_HANDLE_17);
- }};
+ List<PhoneAccountHandle> sipPHList = List.of(SIP_PA_HANDLE_17);
+ List<PhoneAccountHandle> telPHList = List.of(TEL_PA_HANDLE_16);
- List<PhoneAccountHandle> telPHList = new ArrayList<PhoneAccountHandle>() {{
- add(TEL_PA_HANDLE_16);
- }};
when(mFakePhoneAccountRegistrar
.getCallCapablePhoneAccounts(eq("tel"), anyBoolean(), any(UserHandle.class)))
.thenReturn(telPHList);
@@ -436,25 +427,25 @@
makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
assertEquals(telPHList,
- mTSIBinder.getPhoneAccountsSupportingScheme("tel", DEFAULT_DIALER_PACKAGE));
+ mTSIBinder.getPhoneAccountsSupportingScheme(
+ "tel", DEFAULT_DIALER_PACKAGE).getList());
assertEquals(sipPHList,
- mTSIBinder.getPhoneAccountsSupportingScheme("sip", DEFAULT_DIALER_PACKAGE));
+ mTSIBinder.getPhoneAccountsSupportingScheme(
+ "sip", DEFAULT_DIALER_PACKAGE).getList());
}
@SmallTest
@Test
public void testGetPhoneAccountsForPackage() throws RemoteException {
- List<PhoneAccountHandle> phoneAccountHandleList = new ArrayList<PhoneAccountHandle>() {{
- add(TEL_PA_HANDLE_16);
- add(SIP_PA_HANDLE_17);
- }};
+ List<PhoneAccountHandle> phoneAccountHandleList = List.of(
+ TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
when(mFakePhoneAccountRegistrar
.getPhoneAccountsForPackage(anyString(), any(UserHandle.class)))
.thenReturn(phoneAccountHandleList);
makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17);
assertEquals(phoneAccountHandleList,
mTSIBinder.getPhoneAccountsForPackage(
- TEL_PA_HANDLE_16.getComponentName().getPackageName()));
+ TEL_PA_HANDLE_16.getComponentName().getPackageName()).getList());
}
@SmallTest
@@ -476,14 +467,14 @@
@SmallTest
@Test
public void testGetAllPhoneAccounts() throws RemoteException {
- List<PhoneAccount> phoneAccountList = new ArrayList<PhoneAccount>() {{
- add(makePhoneAccount(TEL_PA_HANDLE_16).build());
- add(makePhoneAccount(SIP_PA_HANDLE_17).build());
- }};
+ List<PhoneAccount> phoneAccountList = List.of(
+ makePhoneAccount(TEL_PA_HANDLE_16).build(),
+ makePhoneAccount(SIP_PA_HANDLE_17).build());
+
when(mFakePhoneAccountRegistrar.getAllPhoneAccounts(any(UserHandle.class)))
.thenReturn(phoneAccountList);
- assertEquals(2, mTSIBinder.getAllPhoneAccounts().size());
+ assertEquals(2, mTSIBinder.getAllPhoneAccounts().getList().size());
}
@SmallTest