Merge "Add BluetoothDeviceManager (multi-hfp part 1)"
am: fbe4cadff4
Change-Id: Ia0ba17d93b2678c236a9efdd8c3635d2d66884b5
diff --git a/Android.mk b/Android.mk
index 4785b24..79ef194 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,9 +5,13 @@
LOCAL_JAVA_LIBRARIES := telephony-common
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-proto-files-under, proto)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/proto/
+LOCAL_PROTO_JAVA_OUTPUT_PARAMS := optional_field_style=accessors
+
LOCAL_PACKAGE_NAME := Telecom
LOCAL_CERTIFICATE := platform
diff --git a/proto/telecom.proto b/proto/telecom.proto
new file mode 100644
index 0000000..06dd394
--- /dev/null
+++ b/proto/telecom.proto
@@ -0,0 +1,280 @@
+syntax = "proto2";
+
+package com.android.server.telecom;
+
+option java_package = "com.android.server.telecom";
+option java_outer_classname = "TelecomLogClass";
+
+// The information about the telecom events.
+message TelecomLog {
+
+ // Information about each call.
+ repeated CallLog call_logs = 1;
+
+ // Timing information for the logging sessions
+ repeated LogSessionTiming session_timings = 2;
+}
+
+message LogSessionTiming {
+ enum SessionEntryPoint {
+ ICA_ANSWER_CALL = 1;
+ ICA_REJECT_CALL = 2;
+ ICA_DISCONNECT_CALL = 3;
+ ICA_HOLD_CALL = 4;
+ ICA_UNHOLD_CALL = 5;
+ ICA_MUTE = 6;
+ ICA_SET_AUDIO_ROUTE = 7;
+ ICA_CONFERENCE = 8;
+
+ CSW_HANDLE_CREATE_CONNECTION_COMPLETE = 100;
+ CSW_SET_ACTIVE = 101;
+ CSW_SET_RINGING = 102;
+ CSW_SET_DIALING = 103;
+ CSW_SET_DISCONNECTED = 104;
+ CSW_SET_ON_HOLD = 105;
+ CSW_REMOVE_CALL = 106;
+ CSW_SET_IS_CONFERENCED = 107;
+ CSW_ADD_CONFERENCE_CALL = 108;
+ }
+
+ // The entry point into Telecom code that this session tracks.
+ optional SessionEntryPoint sessionEntryPoint = 1;
+ // The time it took for this session to finish.
+ optional int64 time_millis = 2;
+}
+
+message Event {
+ // From android.telecom.ParcelableAnalytics
+ enum EventName {
+ SET_SELECT_PHONE_ACCOUNT = 0;
+ SET_ACTIVE = 1;
+ SET_DISCONNECTED = 2;
+ START_CONNECTION = 3;
+ SET_DIALING = 4;
+ BIND_CS = 5;
+ CS_BOUND = 6;
+ REQUEST_ACCEPT = 7;
+ REQUEST_REJECT = 8;
+
+ SCREENING_SENT = 100;
+ SCREENING_COMPLETED = 101;
+ DIRECT_TO_VM_INITIATED = 102;
+ DIRECT_TO_VM_FINISHED = 103;
+ BLOCK_CHECK_INITIATED = 104;
+ BLOCK_CHECK_FINISHED = 105;
+ FILTERING_INITIATED = 106;
+ FILTERING_COMPLETED = 107;
+ FILTERING_TIMED_OUT = 108;
+
+ SKIP_RINGING = 200;
+ SILENCE = 201;
+ MUTE = 202;
+ UNMUTE = 203;
+ AUDIO_ROUTE_BT = 204;
+ AUDIO_ROUTE_EARPIECE = 205;
+ AUDIO_ROUTE_HEADSET = 206;
+ AUDIO_ROUTE_SPEAKER = 207;
+
+ CONFERENCE_WITH = 300;
+ SPLIT_CONFERENCE = 301;
+ SET_PARENT = 302;
+
+ REQUEST_HOLD = 400;
+ REQUEST_UNHOLD = 401;
+ REMOTELY_HELD = 402;
+ REMOTELY_UNHELD = 403;
+ SET_HOLD = 404;
+ SWAP = 405;
+
+ REQUEST_PULL = 500;
+ }
+
+ // The ID of the event.
+ optional EventName event_name = 1;
+
+ // The elapsed time since the last event, rounded to one significant digit.
+ // If the event is the first, this will be negative.
+ optional int64 time_since_last_event_millis = 2;
+}
+
+message VideoEvent {
+ // From android.telecom.ParcelableCallAnalytics
+ enum VideoEventName {
+ SEND_LOCAL_SESSION_MODIFY_REQUEST = 0;
+ SEND_LOCAL_SESSION_MODIFY_RESPONSE = 1;
+ RECEIVE_REMOTE_SESSION_MODIFY_REQUEST = 2;
+ RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE = 3;
+ }
+
+ // From android.telecom.VideoProfile
+ enum VideoState {
+ STATE_AUDIO_ONLY = 0;
+ STATE_TX_ENABLED = 1;
+ STATE_RX_ENABLED = 2;
+ STATE_BIDIRECTIONAL = 3;
+ STATE_PAUSED = 4;
+ }
+
+ // The ID of the event.
+ optional VideoEventName event_name = 1;
+
+ // The elapsed time since the last event, rounded to one significant digit.
+ // If the event is the first, this will be negative.
+ optional int64 time_since_last_event_millis = 2;
+
+ // The video state
+ optional int32 video_state = 3;
+}
+
+message EventTimingEntry {
+ enum EventTimingName {
+ ACCEPT_TIMING = 0;
+ REJECT_TIMING = 1;
+ DISCONNECT_TIMING = 2;
+ HOLD_TIMING = 3;
+ UNHOLD_TIMING = 4;
+ OUTGOING_TIME_TO_DIALING_TIMING = 5;
+ BIND_CS_TIMING = 6;
+ SCREENING_COMPLETED_TIMING = 7;
+ DIRECT_TO_VM_FINISHED_TIMING = 8;
+ BLOCK_CHECK_FINISHED_TIMING = 9;
+ FILTERING_COMPLETED_TIMING = 10;
+ FILTERING_TIMED_OUT_TIMING = 11;
+ }
+
+ // The name of the event timing.
+ optional EventTimingName timing_name = 1;
+
+ // The number of milliseconds that this event pair took.
+ optional int64 time_millis = 2;
+}
+
+message InCallServiceInfo {
+ // Keep this up-to-date with com.android.server.telecom.InCallController.
+ enum InCallServiceType {
+ IN_CALL_SERVICE_TYPE_INVALID = 0;
+ IN_CALL_SERVICE_TYPE_DIALER_UI = 1;
+ IN_CALL_SERVICE_TYPE_SYSTEM_UI = 2;
+ IN_CALL_SERVICE_TYPE_CAR_MODE_UI = 3;
+ IN_CALL_SERVICE_TYPE_NON_UI = 4;
+ }
+
+ // The shortened component name of the in-call service.
+ optional string in_call_service_name = 1;
+
+ // The type of the in-call service
+ optional InCallServiceType in_call_service_type = 2;
+}
+
+// Information about each call.
+message CallLog {
+
+ // Information on call-types.
+ enum CallType {
+
+ // Call type is not known.
+ CALLTYPE_UNKNOWN = 0;
+
+ // Incoming call.
+ CALLTYPE_INCOMING = 1;
+
+ // Outgoing call.
+ CALLTYPE_OUTGOING = 2;
+ }
+
+ // Termination code.
+ enum CallTerminationCode {
+
+ // Disconnected because of an unknown or unspecified reason.
+ CALL_TERMINATION_CODE_UNKNOWN = 0;
+
+ // Disconnected because there was an error, such as a problem
+ // with the network.
+ CALL_TERMINATION_CODE_ERROR = 1;
+
+ // Disconnected because of a local user-initiated action,
+ // such as hanging up.
+ CALL_TERMINATION_CODE_LOCAL = 2;
+
+ // Disconnected because of a remote user-initiated action,
+ // such as the other party hanging up.
+ CALL_TERMINATION_CODE_REMOTE = 3;
+
+ // Disconnected because it has been canceled.
+ CALL_TERMINATION_CODE_CANCELED = 4;
+
+ // Disconnected because there was no response to an incoming call.
+ CALL_TERMINATION_CODE_MISSED = 5;
+
+ // Disconnected because the user rejected an incoming call.
+ CALL_TERMINATION_CODE_REJECTED = 6;
+
+ // Disconnected because the other party was busy.
+ CALL_TERMINATION_CODE_BUSY = 7;
+
+ // Disconnected because of a restriction on placing the call,
+ // such as dialing in airplane mode.
+ CALL_TERMINATION_CODE_RESTRICTED = 8;
+
+ // Disconnected for reason not described by other disconnect codes.
+ CALL_TERMINATION_CODE_OTHER = 9;
+
+ // Disconnected because the connection manager did not support the call.
+ // The call will be tried again without a connection manager.
+ CONNECTION_MANAGER_NOT_SUPPORTED = 10;
+ }
+
+ // Start time of the connection.
+ // Rounded to the nearest 5 minute interval.
+ optional int64 start_time_5min = 1;
+
+ // Duration in millis.
+ optional int64 call_duration_millis = 2;
+
+ // Call type.
+ optional CallType type = 3;
+
+ // True if the call interrupted an in-progress call, whether it was the
+ // user dialing out during a call or an incoming call during another call.
+ optional bool is_additional_call = 4 [default = false];
+
+ // True if the call was interrupted by another call.
+ optional bool is_interrupted = 5 [default = false];
+
+ // A bitmask with bits corresponding to call technologies that were used
+ // during the call. The ones that we will record are CDMA, GSM, IMS, SIP,
+ // and third-party.
+ // See the com.android.server.telecom.Analytics.*_PHONE constants.
+ optional int32 call_technologies = 6;
+
+ // Indicates the call termination code.
+ optional CallTerminationCode call_termination_code = 7;
+
+ // A list of the package names of connection services used.
+ repeated string connection_service = 9;
+
+ // Set to true if the call was created from createCallForExistingConnection.
+ optional bool is_created_from_existing_connection = 10 [default = false];
+
+ // Set to true if its an emergency call.
+ optional bool is_emergency_call = 11 [default = false];
+
+ // A list of the events that occur during the call.
+ repeated Event call_events = 12;
+
+ // A map from the names of latency timings to the timings.
+ repeated EventTimingEntry call_timings = 13;
+
+ // Whether this call has ever been a video call
+ optional bool is_video_call = 14 [default = false];
+
+ // A list of the video events during the call.
+ repeated VideoEvent video_events = 15;
+
+ // A list of the in-call services bound during the call.
+ repeated InCallServiceInfo in_call_services = 16;
+
+ // A bitmask of the properties that were set at any point during the call.
+ // Bits are defined by android.telecom.Connection.PROPERTY_* constants.
+ optional int32 connection_properties = 17;
+}
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index e46f852..3984a5d 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Oproepbestuur"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Foonoproepbestuur"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Bel"</string>
<string name="unknown" msgid="6878797917991465859">"Onbekend"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Gemiste oproep"</string>
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Boodskap"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Oproep stilgemaak."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Luidsprekerfoon geaktiveer."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Kan nie nou praat nie. Hoe\'s dit?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Kan nie nou praat nie. Wat\'s nuus?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ek bel jou nou-nou terug."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ek bel jou later."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kan nie nou praat nie. Bel my later?"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Verander verstekbellerprogram?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Gebruik <xliff:g id="NEW_APP">%1$s</xliff:g> eerder as <xliff:g id="CURRENT_APP">%2$s</xliff:g> as jou verstekbellerprogram?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Gebruik <xliff:g id="NEW_APP">%s</xliff:g> as jou verstekbellerprogram?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Geblokkeerde nommers"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Jy sal nie oproepe of boodskappe vanaf geblokkeerde nommers ontvang nie."</string>
- <string name="block_number" msgid="1101252256321306179">"Voeg \'n nommer by"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Deblokkeer <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Deblokkeer"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokkeer oproepe en SMS\'e vanaf"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Foonnommer"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokkeer"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Net die toesteleienaar kan geblokkeerde nommers bekyk en bestuur."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Deblokkeer"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokkering is tydelik af"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Nadat jy \'n noodnommer gebel het of \'n boodskap daarheen gestuur het, sal blokkering afgeskakel word sodat nooddienste jou kan kontak."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Heraktiveer nou"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> geblokkeer"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> is gedeblokkeer"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Kan nie noodgevalnommer blokkeer nie."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> is reeds geblokkeer."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Gebruik tans die persoonlike beller om die oproep te maak"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 3c62c86..dbd4c30 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"የጥሪ አስተዳደር"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"የስልክ ጥሪ አስተዳደር"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ስልክ"</string>
<string name="unknown" msgid="6878797917991465859">"ያልታወቀ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"ያመለጠጥሪ"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ነባሪ መደወያ መተግበሪያ ይለወጥ?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g>ን በ<xliff:g id="CURRENT_APP">%2$s</xliff:g> ምትክ እንደ የእርስዎ ነባሪ መደወያ መተግበሪያ ይጠቀም?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g>ን እንደ የእርስዎ ነባሪ መደወያ መተግበሪያ ይጠቀም?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"የታገዱ ቁጥሮች"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ከታገዱ ቁጥሮች ጥሪዎች ወይም ጽሑፎች አይቀበሉም።"</string>
- <string name="block_number" msgid="1101252256321306179">"ቁጥር ያክሉ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"የ<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> እገዳ ይነሳ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"እገዳውን አንሳ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ከሚከተለው የሚመጡ ጥሪዎችን እና ጽሑፎችን አግድ፦"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"የስልክ ቁጥር"</string>
- <string name="block_button" msgid="8822290682524373357">"አግድ"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"የመሣሪያው ባለቤት ብቻ ነው የታገዱ ቁጥሮችን ማየት እና ማስተዳደር የሚችለው።"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"እገዳውን አንሳ"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ማገድ ለጊዜው ጠፍቷል"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"የድንገተኛ አደጋ ቁጥር ከደወሉ ወይ ከጻፉ በኋላ፣ የድንገተኛ አደጋ አገልግሎቶች እርስዎን መገናኘት እንዲሚችል ለማረጋገጥ ማገጃ ጠፍቷል።"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"አሁን እንደገና-ያንቁ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ታግዷል"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> እገዳው ተነስቷል"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"አስቸኳይ ጊዜ ቁጥር ማገድ አልቻለም።"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ቀድሞውኑ ታግዷል።"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ጥሪውን ለማድረግ የግል መደወያውን መጠቀም"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 40b895d..0ea39f5 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"إدارة المكالمات"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"إدارة المكالمات الهاتفية"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"الهاتف"</string>
<string name="unknown" msgid="6878797917991465859">"غير معروف"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"مكالمة فائتة"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"هل تريد تغيير التطبيق الافتراضي لبرنامج الاتصال؟"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"هل تريد استخدام <xliff:g id="NEW_APP">%1$s</xliff:g> بدلاً من <xliff:g id="CURRENT_APP">%2$s</xliff:g> تطبيقًا افتراضيًا لبرنامج الاتصال؟"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"هل تريد استخدام <xliff:g id="NEW_APP">%s</xliff:g> تطبيقًا افتراضيًا لبرنامج الاتصال؟"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"الأرقام المحظورة"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"لن تتلقى المكالمات أو المراسلات النصية من الأرقام المحظورة."</string>
- <string name="block_number" msgid="1101252256321306179">"إضافة رقم"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"هل تريد إلغاء حظر <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>؟"</string>
- <string name="unblock_button" msgid="3078048901972674170">"إلغاء الحظر"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"حظر المكالمات والرسائل النصية من"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"رقم الهاتف"</string>
- <string name="block_button" msgid="8822290682524373357">"حظر"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"يمكن لمالك الجهاز فقط الاطلاع على الأرقام المحظورة وإدارتها."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"إلغاء الحظر"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"تم إيقاف الحظر مؤقتًا"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"بعد الاتصال الهاتفي أو إرسال رسالة نصية إلى رقم طوارئ، يتم إيقاف تشغيل الحظر لضمان تمكن خدمات الطوارئ من الاتصال بك."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"إعادة تمكين الآن"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> محظور"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"تم إلغاء حظر <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"غير قادر على حظر رقم الطوارئ."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"تم حظر <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> بالفعل."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"يتم استخدام أداة الاتصال الشخصي لإجراء الاتصال"</string>
</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 21936d8..353de80 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Zənglərin İdarə Olunması"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefon Zənglərin İdarə Olunması"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Naməlum"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Buraxılmış zəng"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Defolt nömrə yığan tətbiqi dəyişdirilsin?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Defolt nömrə yığan tətbiqi kimi <xliff:g id="CURRENT_APP">%2$s</xliff:g> əvəzinə <xliff:g id="NEW_APP">%1$s</xliff:g> işlədilsin?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Defolt nömrə yığan tətbiqi kimi <xliff:g id="NEW_APP">%s</xliff:g> işlədilsin?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Bloklanmış nömrələr"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Blok edilmiş nömrədən zənglər və ya mesajlar almayacaqsınız."</string>
- <string name="block_number" msgid="1101252256321306179">"Nömrə əlavə edin"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> nömrəsi blokdan çıxarılsın?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Blokdan çıxar"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Zəngləri və mətnləri buradan blok edin"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefon nömrəsi"</string>
- <string name="block_button" msgid="8822290682524373357">"Blok edin"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Yalnız cihaz sahibi blok edilmiş nömrələrə baxa və idarə edə bilər."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Blokdan çıxarın"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bloklama müvəqqəti olaraq deaktiv edildi"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Fövqəladə nömrəyə zəng etdikdən və ya mesaj yazdıqdan sonra, fövqəladə xidmətlərin Sizinlə əlaqə yarada biləcəyinə əmin olmaq üçün bloklama deaktiv edildi."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"İndi yenidən aktiv edin"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blok edildi"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> blokdan çıxarıldı"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Fövqəladə nömrəni blok etmək mümkün deyil."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> artıq blok edilib."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Zəng etmək üçün şəxsi nömrə yığımı istifadə olunur"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 605f6ca..fa451b7 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Управление на обажданията"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Управление на телефонните обаждания"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Неизвестен номер"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Пропуснато обаждане"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Да се промени ли основното приложение за дайлер?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g> да се използва ли вместо <xliff:g id="CURRENT_APP">%2$s</xliff:g> като основното ви приложение за дайлер?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Да се използва ли <xliff:g id="NEW_APP">%s</xliff:g> като основното ви приложение за дайлер?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Блокирани номера"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Няма да получавате обаждания или SMS от блокираните номера."</string>
- <string name="block_number" msgid="1101252256321306179">"Добавяне на номер"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Искате ли да отблокирате <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Отблокиране"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Блокиране на обажданията и текстовите съобщения от"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Телефонен номер"</string>
- <string name="block_button" msgid="8822290682524373357">"Блокиране"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Само собственикът на устройството може да преглежда и управлява блокираните номера."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Отблокиране"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Блокирането временно е изключено"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"След като наберете или изпратите SMS до номер за спешни повиквания, блокирането се изключва, за да могат спешните служби да се свържат с вас."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Повторно активиране сега"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> е блокиран"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> е отблокиран"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Номера за спешни случаи не могат да се блокират."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> вече е блокиран."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"За извършване на обаждането се използва личната клавиатура за набиране"</string>
</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 1ce7c85..787c331 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"কল ব্যবস্থাপনা"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ফোন কল ব্যবস্থাপনা"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ফোন"</string>
<string name="unknown" msgid="6878797917991465859">"অজানা"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"মিসড কল"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ডিফল্ট ডায়ালার অ্যাপ পরিবর্তন করবেন?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"আপনার ডিফল্ট ডায়লার অ্যাপ হিসেবে <xliff:g id="CURRENT_APP">%2$s</xliff:g> পরিবর্তে <xliff:g id="NEW_APP">%1$s</xliff:g> ব্যবহার করবেন?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"আপনার ডিফল্ট ডায়লার অ্যাপ হিসেবে <xliff:g id="NEW_APP">%s</xliff:g> ব্যবহার করবেন?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"অবরুদ্ধ নম্বরগুলি"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"অবরুদ্ধ নম্বরগুলি থেকে আপনি কল বা এসএমএস পাবেন না।"</string>
- <string name="block_number" msgid="1101252256321306179">"একটি নম্বর যোগ করুন"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> অবরোধ মুক্ত করবেন?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"অবরোধ মুক্ত করুন"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"এর থেকে কল এবং এসএমএস অবরোধ করুন"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ফোন নম্বর"</string>
- <string name="block_button" msgid="8822290682524373357">"অবরোধ করুন"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"শুধুমাত্র ডিভাইসের মালিক এই অবরুদ্ধ নম্বরগুলিকে দেখতে এবং পরিচালনা করতে পারেন৷"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"অবরোধ মুক্ত করুন"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"অবরুদ্ধ করা সাময়িকভাবে বন্ধ আছে"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"আপনি কোনো জরুরি নম্বরে ডায়াল করার বা এসএমএস পাঠানোর পরে, জরুরি পরিষেবাগুলি যাতে আপনাকে কল করতে পারে সেই বিষয়টি নিশ্চিত করতে অবরুদ্ধ করার ব্যবস্থাটিকে বন্ধ করা হয়৷"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"এখনই পুনরায় সক্ষম করুন"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> অবরোধ করা হয়েছে"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> অবরোধ মুক্ত করা হয়েছে"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"জরুরি নম্বর অবরোধ করতে অক্ষম৷"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ইতিমধ্যেই অবরোধ করা রয়েছে৷"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"কল করার জন্য ব্যক্তিগত ডায়ালার ব্যবহার করা হচ্ছে"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index fc92f36..dc5b73c 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestió de trucades"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Gestió de trucades telefòniques"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telèfon"</string>
<string name="unknown" msgid="6878797917991465859">"Desconegut"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Trucada perduda"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Vols canviar l\'aplicació de marcador predeterminada?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Vols fer servir <xliff:g id="NEW_APP">%1$s</xliff:g> en lloc de <xliff:g id="CURRENT_APP">%2$s</xliff:g> com a aplicació de marcador predeterminada?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Vols fer servir <xliff:g id="NEW_APP">%s</xliff:g> com a aplicació de marcador predeterminada?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Números bloquejats"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"No rebràs trucades ni missatges de text dels números bloquejats."</string>
- <string name="block_number" msgid="1101252256321306179">"Afegeix un número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vols desbloquejar el número <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desbloqueja"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloqueja trucades i missatges de text de"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Número de telèfon"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloqueja"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Només el propietari del dispositiu pot consultar i gestionar els números bloquejats."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desbloqueja"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"El bloqueig està desactivat temporalment"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Quan marques un número d\'emergència o hi envies un missatge de text, el bloqueig es desactiva per garantir que els serveis d\'emergència puguin contactar amb tu."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Torna a activar ara"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloquejat"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> desbloquejat"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"No es pot bloquejar el número d\'emergència."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ja està bloquejat."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"S\'està utilitzant el telèfon personal per fer la trucada"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 8f4e4fc..dbc7165 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Správa hovorů"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Správa telefonních hovorů"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Neznámý volající"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Zmeškaný hovor"</string>
@@ -31,7 +31,7 @@
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Teď nemůžu telefonovat, o co jde?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Zavolám zpátky."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Zavolám později."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nemůžu telefonovat. Zavoláte později?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nemůžu telefonovat, volejte jindy."</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Rychlé odpovědi"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Upravit rychlé odpovědi"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Změnit výchozí aplikaci vytáčení?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Chcete aplikaci <xliff:g id="NEW_APP">%1$s</xliff:g> použít jako výchozí aplikaci vytáčení místo aplikace <xliff:g id="CURRENT_APP">%2$s</xliff:g>?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Chcete aplikaci <xliff:g id="NEW_APP">%s</xliff:g> použít jako výchozí aplikaci vytáčení?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokovaná čísla"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Ze zablokovaných čísel už nebudete přijímat hovory ani zprávy SMS."</string>
- <string name="block_number" msgid="1101252256321306179">"Přidat číslo"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Odblokovat číslo <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Odblokovat"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokovat hovory a SMS od odesílatele"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonní číslo"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokovat"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Prohlížet a spravovat blokovaná čísla může pouze vlastník zařízení."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Odblokovat"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokování je dočasně vypnuto"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Když vytočíte nebo pošlete zprávu na číslo tísňové linky, blokování je vypnuto, aby vás pohotovostní služby mohly kontaktovat."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Znovu zapnout"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Číslo <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bylo zablokováno"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Číslo <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> bylo odblokováno"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Číslo tísňové linky se nepodařilo zablokovat."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Číslo <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> už je zablokováno."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Volání se provádí pomocí osobního vytáčení"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index f90cecf..8b1f7df 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Opkaldsstyring"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Opkaldsstyring"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Opkald"</string>
<string name="unknown" msgid="6878797917991465859">"Ukendt"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Ubesvarede opkald"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Vil du skifte standardappen til opkald?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Brug <xliff:g id="NEW_APP">%1$s</xliff:g> i stedet for <xliff:g id="CURRENT_APP">%2$s</xliff:g> som din standardapp til opkald?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Brug <xliff:g id="NEW_APP">%s</xliff:g> som din standardapp til opkald?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokerede telefonnumre"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Du modtager ikke opkald eller sms-beskeder fra blokerede numre."</string>
- <string name="block_number" msgid="1101252256321306179">"Tilføj et nummer"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vil du ophæve blokeringen af <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Ophæv blokeringen"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloker opkald og sms-beskeder fra"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonnummer"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloker"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Det er kun ejeren af en enhed, der kan se og administrere blokerede numre."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Ophæv blokering"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokering er midlertidigt slået fra"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Når du har ringet eller sendt en sms-besked til alarmcentralen, bliver blokering slået fra for at sikre, at alarmcentralen kan komme i kontakt med dig."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Genaktiver nu"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blev blokeret"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Blokeringen af <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> blev ophævet"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Nødnummeret kan ikke blokeres."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> er allerede blokeret."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Opkaldet foretages med det personlige opkaldsprogram"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 71949ea..44277c8 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Anrufverwaltung"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Anrufverwaltung"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Unbekannt"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Entgangener Anruf"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Standard-App für Telefonie ändern?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g> statt <xliff:g id="CURRENT_APP">%2$s</xliff:g> als Standard-App für Telefonie verwenden?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> als Standard-App für Telefonie verwenden?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blockierte Nummern"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Du erhältst keine Anrufe oder SMS von blockierten Nummern."</string>
- <string name="block_number" msgid="1101252256321306179">"Nummer hinzufügen"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Blockierung von <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> aufheben?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Blockierung aufheben"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Anrufe und SMS blockieren von"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonnummer"</string>
- <string name="block_button" msgid="8822290682524373357">"Blockieren"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Nur der Geräteeigentümer kann blockierte Nummern sehen und verwalten."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Blockierung aufheben"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blockierung vorübergehend aus"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Nachdem du eine Notrufnummer gewählt oder per SMS gesendet hast, wird die Blockierung aufgehoben, damit dich die Notfalldienste erreichen können."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Jetzt neu aktivieren"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blockiert"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Blockierung von <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> aufgehoben"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Die Notrufnummer kann nicht blockiert werden."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ist bereits blockiert."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Zum Anrufen wird das eigene Telefon genutzt"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index c39387a..af41ee4 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Διαχείριση κλήσεων"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Διαχείριση τηλεφωνικών κλήσεων"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Τηλέφωνο"</string>
<string name="unknown" msgid="6878797917991465859">"Άγνωστος"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Αναπάντητη κλήση"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Αλλαγή της προεπιλεγμένης εφαρμογής Dialer;"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Χρήση της εφαρμογής <xliff:g id="NEW_APP">%1$s</xliff:g> αντί για την εφαρμογή <xliff:g id="CURRENT_APP">%2$s</xliff:g> ως προεπιλεγμένης εφαρμογής Dialer;"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Χρήση της εφαρμογής <xliff:g id="NEW_APP">%s</xliff:g> ως προεπιλεγμένης εφαρμογής Dialer;"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Αποκλεισμένοι αριθμοί"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Δεν θα λαμβάνετε κλήσεις ή μηνύματα κειμένου από αποκλεισμένους αριθμούς."</string>
- <string name="block_number" msgid="1101252256321306179">"Προσθήκη αριθμού"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Να καταργηθεί ο αποκλεισμός του αριθμού <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>;"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Κατάργηση αποκλεισμού"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Αποκλεισμός κλήσεων/μηνυμάτων από"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Αριθμός τηλεφώνου"</string>
- <string name="block_button" msgid="8822290682524373357">"Αποκλεισμός"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Μόνο ο κάτοχος της συσκευής μπορεί να προβάλλει και να διαχειρίζεται αποκλεισμένους αριθμούς."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Κατάργηση αποκλεισμού"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Αποκλεισμός προσωρινά απενεργοποιημένος"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Αφού καλέσετε ή στείλετε μήνυμα κειμένου προς έναν αριθμό έκτακτης ανάγκης, ο αποκλεισμός απενεργοποιείται, προκειμένου να διασφαλιστεί ότι είναι δυνατή η επικοινωνία μαζί σας από τις υπηρεσίες έκτακτης ανάγκης."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Επανενεργοποίηση τώρα"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Ο αριθμός <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> έχει αποκλειστεί"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Καταργήθηκε ο αποκλεισμός του αριθμού <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Δεν είναι δυνατός ο αποκλεισμός του αριθμού εκτάκτου ανάγκης."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Ο αριθμός <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> έχει ήδη αποκλειστεί."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Χρήση του προσωπικού σας προγράμματος κλήσης για την πραγματοποίηση της κλήσης"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 661ceee..a7d9e24 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -16,8 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Call Management"</string>
- <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Phone"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Phone Call Management"</string>
+ <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telephone"</string>
<string name="unknown" msgid="6878797917991465859">"Unknown"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Missed call"</string>
<string name="notification_missedWorkCallTitle" msgid="6242489980390803090">"Missed work call"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Change default Dialer app?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Use <xliff:g id="NEW_APP">%1$s</xliff:g> instead of <xliff:g id="CURRENT_APP">%2$s</xliff:g> as your default dialler app?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Use <xliff:g id="NEW_APP">%s</xliff:g> as your default dialler app?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blocked numbers"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"You won\'t receive calls or texts from blocked numbers."</string>
- <string name="block_number" msgid="1101252256321306179">"Add a number"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Unblock <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Unblock"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Block calls and texts from"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Phone number"</string>
- <string name="block_button" msgid="8822290682524373357">"Block"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Only the device owner can view and manage blocked numbers."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Unblock"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blocking temporarily off"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"When you dial or text an emergency number, blocking is turned off to ensure that emergency services can contact you."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Re-enable now"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blocked"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> unblocked"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Unable to block emergency number."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> is already blocked."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Using the personal dialler to make the call"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 661ceee..a7d9e24 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -16,8 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Call Management"</string>
- <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Phone"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Phone Call Management"</string>
+ <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telephone"</string>
<string name="unknown" msgid="6878797917991465859">"Unknown"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Missed call"</string>
<string name="notification_missedWorkCallTitle" msgid="6242489980390803090">"Missed work call"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Change default Dialer app?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Use <xliff:g id="NEW_APP">%1$s</xliff:g> instead of <xliff:g id="CURRENT_APP">%2$s</xliff:g> as your default dialler app?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Use <xliff:g id="NEW_APP">%s</xliff:g> as your default dialler app?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blocked numbers"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"You won\'t receive calls or texts from blocked numbers."</string>
- <string name="block_number" msgid="1101252256321306179">"Add a number"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Unblock <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Unblock"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Block calls and texts from"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Phone number"</string>
- <string name="block_button" msgid="8822290682524373357">"Block"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Only the device owner can view and manage blocked numbers."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Unblock"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blocking temporarily off"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"When you dial or text an emergency number, blocking is turned off to ensure that emergency services can contact you."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Re-enable now"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blocked"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> unblocked"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Unable to block emergency number."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> is already blocked."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Using the personal dialler to make the call"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 661ceee..a7d9e24 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -16,8 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Call Management"</string>
- <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Phone"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Phone Call Management"</string>
+ <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telephone"</string>
<string name="unknown" msgid="6878797917991465859">"Unknown"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Missed call"</string>
<string name="notification_missedWorkCallTitle" msgid="6242489980390803090">"Missed work call"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Change default Dialer app?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Use <xliff:g id="NEW_APP">%1$s</xliff:g> instead of <xliff:g id="CURRENT_APP">%2$s</xliff:g> as your default dialler app?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Use <xliff:g id="NEW_APP">%s</xliff:g> as your default dialler app?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blocked numbers"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"You won\'t receive calls or texts from blocked numbers."</string>
- <string name="block_number" msgid="1101252256321306179">"Add a number"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Unblock <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Unblock"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Block calls and texts from"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Phone number"</string>
- <string name="block_button" msgid="8822290682524373357">"Block"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Only the device owner can view and manage blocked numbers."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Unblock"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blocking temporarily off"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"When you dial or text an emergency number, blocking is turned off to ensure that emergency services can contact you."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Re-enable now"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blocked"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> unblocked"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Unable to block emergency number."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> is already blocked."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Using the personal dialler to make the call"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index a791c8a..5d6e049 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Administración de llamadas"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Administración de llamadas telefónicas"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Teléfono"</string>
<string name="unknown" msgid="6878797917991465859">"Desconocida"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Llamada perdida"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"¿Quieres cambiar la aplicación Marcador predeterminada?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"¿Quieres usar <xliff:g id="NEW_APP">%1$s</xliff:g> en lugar de <xliff:g id="CURRENT_APP">%2$s</xliff:g> como la aplicación de marcado predeterminada?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"¿Quieres usar <xliff:g id="NEW_APP">%s</xliff:g> como la aplicación de marcado predeterminada?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"No recibirás llamadas ni mensajes de texto de los números bloqueados."</string>
- <string name="block_number" msgid="1101252256321306179">"Agregar un número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"¿Quieres desbloquear el <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear llamadas y mensajes de texto de"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Número de teléfono"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquear"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Solo el propietario del dispositivo puede ver y administrar los números bloqueados."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desbloquear"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"El bloqueo se desactivó de forma temporal"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Luego de que llamas o envías un mensaje a un número de emergencia, el bloqueo se desactiva para garantizar que los servicios de emergencia puedan ponerse en contacto contigo."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Volver a habilitar ahora"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloqueado"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> desbloqueado"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"No se puede bloquear el número de emergencia."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ya está bloqueado."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Usando el teléfono personal para realizar la llamada"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b793ca7..ab4a174 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestión de llamadas"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Gestión de llamadas del teléfono"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Teléfono"</string>
<string name="unknown" msgid="6878797917991465859">"Desconocido"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Llamada perdida"</string>
@@ -35,7 +35,7 @@
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Respuestas rápidas"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Editar respuestas rápidas"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
- <string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Respuesta rápida"</string>
+ <string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Respuestas rápidas"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mensaje enviado a <xliff:g id="PHONE_NUMBER">%s</xliff:g>"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Cuentas de llamadas"</string>
<string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Solo se permiten llamadas de emergencia."</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"¿Cambiar el marcador predeterminado?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"¿Quieres utilizar <xliff:g id="NEW_APP">%1$s</xliff:g> en lugar de <xliff:g id="CURRENT_APP">%2$s</xliff:g> como marcador predeterminado?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"¿Quieres utilizar <xliff:g id="NEW_APP">%s</xliff:g> como marcador predeterminado?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"No recibirás llamadas ni SMS de los números bloqueados."</string>
- <string name="block_number" msgid="1101252256321306179">"Añadir un número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"¿Desbloquear el número <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear llamadas y mensajes de texto del número"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Número de teléfono"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquear"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Solo el propietario del dispositivo puede ver y administrar los números bloqueados."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desbloquear"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bloqueo desactivado temporalmente"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Después de llamar o enviar un SMS a un número de emergencias, el bloqueo se desactiva para que los servicios de emergencias puedan contactarte."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Volver a habilitarlo ahora"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloqueado"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> desbloqueado"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"No se puede bloquear el número de emergencias."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"El <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ya está bloqueado."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Utilizando teléfono personal para llamar"</string>
</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index ff37ee4..a567faf 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Kõnehaldus"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefonikõnede haldus"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Tundmatu"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Vastamata kõne"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Kas muuta helistamise vaikerakendust?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Kas kasutada rakendust <xliff:g id="NEW_APP">%1$s</xliff:g> rakenduse <xliff:g id="CURRENT_APP">%2$s</xliff:g> asemel helistamise vaikerakendusena?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Kas kasutada rakendust <xliff:g id="NEW_APP">%s</xliff:g> helistamise vaikerakendusena?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokeeritud numbrid"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Te ei saa blokeeritud numbritelt kõnesid ega tekstsõnumeid."</string>
- <string name="block_number" msgid="1101252256321306179">"Lisa number"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Kas deblokeerida number <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Deblokeeri"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokeeri kõned ja tekstsõnumid numbrilt"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefoninumber"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokeeri"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Ainult seadme omanik saab blokeeritud numbreid vaadata ja hallata."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Deblokeerimine"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokeerimine on ajutiselt välja lülitatud"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Kui helistate või saadate sõnumi hädaabinumbrile, lülitatakse blokeerimine välja, et hädaabiteenused saaksid teiega ühendust võtta."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Luba kohe uuesti"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Number <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> on blokeeritud"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Number <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> on deblokeeritud"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Hädaabinumbrit ei saa blokeerida."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Number <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> on juba blokeeritud."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Helistamiseks kasutatakse isiklikku helistamisprogrammi"</string>
</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 3a3bdd9..3cf0454 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Deien kudeaketa"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefono-deien kudeaketa"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefonoa"</string>
<string name="unknown" msgid="6878797917991465859">"Ezezaguna"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Dei galdua"</string>
@@ -31,7 +31,7 @@
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Ezin dut hitz egin. Arazoren bat al dago?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Oraintxe deituko dizut bueltan."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Geroago deituko dizut."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ezin dut hitz egin. Deitu geroago, mesedez."</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ezin dut hitz egin. Deitu geroago."</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Erantzun bizkorrak"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Editatu erantzun bizkorrak"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -39,7 +39,7 @@
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mezua bidali da <xliff:g id="PHONE_NUMBER">%s</xliff:g> zenbakira."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Deiak egiteko kontuak"</string>
<string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Larrialdi-deiak bakarrik egin daitezke."</string>
- <string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Aplikazioak deitu ahal izan dezan, telefonoaren eginbidea erabiltzeko baimena behar du."</string>
+ <string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Aplikazioak irteerako deiak egin ahal izan ditzan, telefonoaren eginbidea erabiltzeko baimena behar du."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Deitzeko, idatzi balio duen zenbaki bat."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Une honetan ezin da deirik gehitu."</string>
<string name="no_vm_number" msgid="4164780423805688336">"Erantzungailuaren zenbakia falta da"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Telefono-aplikazio lehenetsia aldatu nahi duzu?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> aplikazioaren ordez <xliff:g id="NEW_APP">%1$s</xliff:g> erabili nahi duzu telefono-aplikazio lehenetsi gisa?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> telefono-aplikazio lehenetsi gisa erabili nahi duzu?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokeatutako zenbakiak"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Ez duzu jasoko deirik edo testu-mezurik blokeatutako zenbakietatik."</string>
- <string name="block_number" msgid="1101252256321306179">"Gehitu zenbakia"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> desblokeatu?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desblokeatu"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokeatu zenbaki honetatik jasotzen diren deiak eta testu-mezuak:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefono-zenbakia"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokeatu"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Gailuaren jabeak soilik ikus eta kudea ditzake blokeatutako zenbakiak."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desblokeatu"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Aldi baterako desgaitu da blokeatzeko aukera"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Larrialdietarako zenbakia markatu ondoren, edo zenbait horretara testu-mezua bidali ondoren, desaktibatu egingo da blokeatzeko aukera, larrialdi-zerbitzuak zurekin harremanetan jarriko direla ziurtatzeko."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Gaitu berriro"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Blokeatu da <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Desblokeatu da <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Ezin da blokeatu larrialdi-zenbakia."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blokeatuta dago dagoeneko."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Telefono pertsonala erabiltzen ari zara deia egiteko"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index aec0966..c2f6ea9 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"مدیریت تماس"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"مدیریت تماس تلفنی"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"تلفن"</string>
<string name="unknown" msgid="6878797917991465859">"ناشناس"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"تماس بی پاسخ"</string>
@@ -29,7 +29,7 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"تماس نادیده گرفته شد."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"تلفن آیفوندار فعال شد."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"اکنون نمیتوانم صحبت کنم. موضوع چیست؟"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"بیدرنگ با شما تماس میگیرم."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"به زودی با شما تماس میگیرم."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"بعداً با شما تماس میگیرم."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"اکنون نمیتوانم صحبت کنم. بعداً به من زنگ میزنید؟"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"پاسخهای سریع"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"برنامه شمارهگیر پیشفرض تغییر کند؟"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"از <xliff:g id="NEW_APP">%1$s</xliff:g> به جای <xliff:g id="CURRENT_APP">%2$s</xliff:g> به عنوان برنامه شمارهگیر پیشفرض استفاده شود؟"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"از <xliff:g id="NEW_APP">%s</xliff:g> به عنوان برنامه شمارهگیر پیشفرض استفاده شود؟"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"شمارههای مسدودشده"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"از شمارههای مسدودشده نمیتوانید تماس یا پیامک دریافت کنید."</string>
- <string name="block_number" msgid="1101252256321306179">"افزودن شماره"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> رفع انسداد شود؟"</string>
- <string name="unblock_button" msgid="3078048901972674170">"رفع انسداد"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"مسدود کردن تماس و پیامک از"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"شماره تلفن"</string>
- <string name="block_button" msgid="8822290682524373357">"مسدود کردن"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"فقط مالک دستگاه میتواند شمارههای مسدودشده را مدیریت کند."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"رفع انسداد"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"امکان مسدود کردن موقتاً خاموش شده است."</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"بعد از گرفتن شماره اضطراری یا ارسال پیام نوشتاری به آن شماره، برای اطمینان از اینکه سرویسهای اضطراری با شما تماس بگیرند، امکان مسدود کردن خاموش شده است."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"اکنون دوباره فعال شود"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> مسدود شد"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"انسداد <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> لغو شد"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"شماره اضطراری مسدود نشد."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> قبلاً مسدود شده است."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"استفاده از شمارهگیر شخصی برای گرفتن تماس"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 5481e47..d318f6b 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Puhelujen hallinta"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Puhelujen hallinta"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Puhelin"</string>
<string name="unknown" msgid="6878797917991465859">"Tuntematon"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Vastaamatta jäänyt puhelu"</string>
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Viesti"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Puhelu mykistetty."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Kaiutin käytössä."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"En voi vastata. Mitä asiaa?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"En voi vastata - mitä asiaa?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Soitan sinulle pian."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Soitan sinulle myöhemmin."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"En voi vastata. Soitatko myöhemmin?"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Vaihdetaanko oletuspuhelusovellus?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Asetetaanko oletuspuhelusovellukseksi <xliff:g id="NEW_APP">%1$s</xliff:g> sovelluksen <xliff:g id="CURRENT_APP">%2$s</xliff:g> sijaan?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Asetetaanko <xliff:g id="NEW_APP">%s</xliff:g> oletuspuhelusovellukseksi?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Estetyt numerot"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Et voi vastaanottaa puheluita tai tekstiviestejä estetyistä numeroista."</string>
- <string name="block_number" msgid="1101252256321306179">"Lisää numero"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Kumotaanko numeron <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> esto?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Kumoa esto"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Estä puhelut ja tekstiviestit numerosta"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Puhelinnumero"</string>
- <string name="block_button" msgid="8822290682524373357">"Estä"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Vain laitteen omistaja voi katsella ja hallinnoida estettyjä numeroita."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Kumoa esto"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Esto on väliaikaisesti pois käytöstä"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Hätänumeroon soittamisen tai tekstiviestin lähettämisen jälkeen esto poistetaan käytöstä, jotta hätäviranomaiset voivat olla yhteydessä sinuun."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Ota nyt uudelleen käyttöön"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> estettiin."</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Numeron <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> esto kumottiin."</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Hätänumeroa ei voi estää."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> on jo estetty."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Puhelun soittaminen henkilökohtaisella numerovalitsimella"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index f1f6f14..d88a8ed 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestion des appels"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Gestion des appels téléphoniques"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Téléphone"</string>
<string name="unknown" msgid="6878797917991465859">"Inconnu"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Appel manqué"</string>
@@ -33,7 +33,7 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Je t\'appellerai plus tard."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Peux pas parler. On se rappelle?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Réponses rapides"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Modifier réponses rapides"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Modif. rép. rapides"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Réponse rapide"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Message envoyé à <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Changer l\'application de composition par défaut?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Utiliser <xliff:g id="NEW_APP">%1$s</xliff:g> au lieu de <xliff:g id="CURRENT_APP">%2$s</xliff:g> comme application de composition par défaut?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Utiliser <xliff:g id="NEW_APP">%s</xliff:g> comme application de composition par défaut?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Numéros bloqués"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Vous ne recevrez pas d\'appels ni de messages texte provenant des numéros bloqués."</string>
- <string name="block_number" msgid="1101252256321306179">"Ajouter un numéro"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Débloquer <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Débloquer"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquer les appels et les textos de"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Numéro de téléphone"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquer"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Seul le propriétaire de l\'appareil peut afficher et gérer les numéros bloqués."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Débloquer"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Le blocage est temporairement désactivé"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Lorsque vous communiquez avec les services d\'urgence par téléphone ou par message texte, la fonctionnalité de blocage est désactivée pour que ceux-ci puissent vous joindre."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Réactiver le blocage maintenant"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Le numéro <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> a été bloqué."</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Le numéro <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> a été débloqué."</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Impossible de bloquer le numéro d\'urgence."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Le numéro <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> a déjà été bloqué."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Utilisation du clavier personnel pour faire l\'appel…"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f641545..9962c6e 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestion des appels"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Gestion des appels téléphoniques"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Téléphone"</string>
<string name="unknown" msgid="6878797917991465859">"Inconnu"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Appel manqué"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Modifier l\'application de clavier par défaut ?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Utiliser <xliff:g id="NEW_APP">%1$s</xliff:g> et non plus <xliff:g id="CURRENT_APP">%2$s</xliff:g> comme application de clavier par défaut ?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Utiliser <xliff:g id="NEW_APP">%s</xliff:g> comme application de clavier par défaut ?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Numéros bloqués"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Vous ne recevrez plus les appels ni les SMS émis depuis les numéros bloqués."</string>
- <string name="block_number" msgid="1101252256321306179">"Ajouter un numéro"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Débloquer <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Débloquer"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquer les appels et les SMS de"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Numéro de téléphone"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquer"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Seul le propriétaire de l\'appareil peut afficher et gérer les numéros bloqués."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Débloquer"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Le blocage est temporairement désactivé."</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Si vous composez un numéro d\'urgence ou que vous envoyez un SMS à ce type de numéro, le blocage est désactivé pour que les services d\'urgence puissent vous contacter."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Réactiver"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloqué"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> débloqué"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Vous ne pouvez pas bloquer un numéro d\'urgence."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Le numéro \"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>\" est déjà bloqué."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Utilisation du clavier personnel pour passer l\'appel…"</string>
</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index ae89a83..ef36d3a 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Xestión de chamadas"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Xestión de chamadas do teléfono"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Teléfono"</string>
<string name="unknown" msgid="6878797917991465859">"Descoñecido"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Chamada perdida"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Queres cambiar a aplicación predeterminada do marcador?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Queres usar <xliff:g id="NEW_APP">%1$s</xliff:g> en lugar de <xliff:g id="CURRENT_APP">%2$s</xliff:g> como a túa aplicación de marcador predeterminada?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Queres usar <xliff:g id="NEW_APP">%s</xliff:g> como a túa aplicación de marcador predeterminada?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Non recibirás chamadas nin mensaxes de texto desde números bloqueados."</string>
- <string name="block_number" msgid="1101252256321306179">"Engadir un número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Queres desbloquear o <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear chamadas e mensaxes do"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Número de teléfono"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquear"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Só o propietario do dispositivo pode ver e xestionar os números bloqueados."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desbloquear"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"O bloqueo desactivouse temporalmente"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Despois de facer unha chamada ou enviar unha mensaxe a un número de emerxencia, desactívase o bloqueo para garantir que os servizos de emerxencia poidan poñerse en contacto contigo."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Volver activar agora"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Bloqueouse o <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Desbloqueouse o <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Non se pode bloquear o número de emerxencia."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"O <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> xa está bloqueado."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Usando o marcador persoal para facer a chamada"</string>
</resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 3442516..f5db5ce 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"કૉલ સંચાલન"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ફોન કૉલ સંચાલન"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ફોન"</string>
<string name="unknown" msgid="6878797917991465859">"અજાણ્યું"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"છૂટેલો કૉલ"</string>
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"સંદેશ"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"કૉલ મ્યૂટ કરેલ છે."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"સ્પીકરફોન પસંદ કરેલ છે."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"હમણાં વાત નહીં કરી શકું. શું ચાલે છે?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"હમણાં વાત કરી શકાતી નથી. શું ચાલે છે?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"હું તરત જ પાછો કૉલ કરીશ."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"હું પછીથી કૉલ કરીશ."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"હમણાં વાત નહીં કરી શકું. મને પછીથી કૉલ કરી શકશો?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"હમણાં વાત કરી શકાતી નથી. મને પછીથી કૉલ કરી શકશો?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"ઝડપી પ્રતિસાદ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ઝડપી પ્રતિસાદ સંપાદિત કરો"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -39,31 +39,13 @@
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> પર સંદેશ મોકલ્યો."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"કૉલિંગ એકાઉન્ટ્સ"</string>
<string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"ફક્ત કટોકટીના કૉલ્સને મંજૂરી છે."</string>
- <string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ફોન પરવાનગી વિના આ ઍપ્લિકેશન આઉટગોઇંગ કૉલ્સ કરી શકતી નથી."</string>
+ <string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ફોન પરવાનગી વિના આ એપ્લિકેશન આઉટગોઇંગ કૉલ્સ કરી શકતી નથી."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"કૉલ કરવા માટે, માન્ય નંબર દાખલ કરો."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"આ સમયે કૉલ ઉમેરી શકાતો નથી."</string>
<string name="no_vm_number" msgid="4164780423805688336">"વૉઇસમેઇલ નંબર ખૂટે છે"</string>
<string name="no_vm_number_msg" msgid="1300729501030053828">"SIM કાર્ડ પર કોઈ વૉઇસમેઇલ નંબર સંગ્રહિત નથી."</string>
<string name="add_vm_number_str" msgid="4676479471644687453">"નંબર ઉમેરો"</string>
- <string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ડિફોલ્ટ ડાયલર ઍપ્લિકેશન બદલીએ?"</string>
- <string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"તમારી ડિફોલ્ટ ડાયલર ઍપ્લિકેશન તરીકે <xliff:g id="CURRENT_APP">%2$s</xliff:g> ને બદલે <xliff:g id="NEW_APP">%1$s</xliff:g> નો ઉપયોગ કરીએ?"</string>
- <string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"તમારી ડિફોલ્ટ ડાયલર ઍપ્લિકેશન તરીકે <xliff:g id="NEW_APP">%s</xliff:g> નો ઉપયોગ કરીએ?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"અવરોધિત નંબરો"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"તમે અવરોધિત નંબરોથી કૉલ્સ અથવા ટેક્સ્ટ પ્રાપ્ત કરશો નહીં."</string>
- <string name="block_number" msgid="1101252256321306179">"એક નંબર ઉમેરો"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ને અનાવરોધિત કરીએ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"અનાવરોધિત કરો"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"આ નંબરના કૉલ્સ અને ટેક્સ્ટને અવરોધિત કરો"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ફોન નંબર"</string>
- <string name="block_button" msgid="8822290682524373357">"અવરોધિત કરો"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ફક્ત ઉપકરણના માલિક અવરોધિત નંબરોને જોઈ અને સંચાલિત કરી શકે છે."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"અનાવરોધિત કરો"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"અવરોધિત કરવાનું અસ્થાયીરૂપે બંધ છે"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"તમે કોઈ કટોકટીનો નંબર ડાયલ કરો કે ટેક્સ્ટ કરો તે પછી, કટોકટીની સેવાઓ તમારો સંપર્ક કરી શકે તેની ખાતરી કરવા માટે અવરોધિત કરવું બંધ કરવામાં આવે છે."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"હવે ફરીથી સક્ષમ કરો"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> અવરોધિત કર્યો"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> અનાવરોધિત કર્યો"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"કટોકટીના નંબરને અવરોધિત કરવામાં અસમર્થ."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>, પહેલાંથી અવરોધિત કરવામાં આવ્યો છે."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"કૉલ કરવા માટે વ્યક્તિગત ડાયલરનો ઉપયોગ કરી રહ્યાં છે"</string>
+ <string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ડિફોલ્ટ ડાયલર એપ્લિકેશન બદલીએ?"</string>
+ <string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"તમારી ડિફોલ્ટ ડાયલર એપ્લિકેશન તરીકે <xliff:g id="CURRENT_APP">%2$s</xliff:g> ને બદલે <xliff:g id="NEW_APP">%1$s</xliff:g> નો ઉપયોગ કરીએ?"</string>
+ <string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"તમારી ડિફોલ્ટ ડાયલર એપ્લિકેશન તરીકે <xliff:g id="NEW_APP">%s</xliff:g> નો ઉપયોગ કરીએ?"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index c011b4a..463cdc4 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"कॉल प्रबंधन"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"फ़ोन कॉल प्रबंधन"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"फ़ोन"</string>
<string name="unknown" msgid="6878797917991465859">"अज्ञात"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"छूटी कॉल"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"डिफ़ॉल्ट डायलर ऐप को बदलें?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"अपने डिफ़ॉल्ट डायलर ऐप के रूप में <xliff:g id="CURRENT_APP">%2$s</xliff:g> के बजाय <xliff:g id="NEW_APP">%1$s</xliff:g> का उपयोग करें?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"अपने डिफ़ॉल्ट डायलर ऐप के रूप में <xliff:g id="NEW_APP">%s</xliff:g> का उपयोग करें?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"अवरोधित नंबर"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"आपको अवरुद्ध किए गए नंबर से कॉल या लेख संदेश प्राप्त नहीं होंगे."</string>
- <string name="block_number" msgid="1101252256321306179">"एक नंबर जोड़ें"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> को अनवरोधित करें?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"अनवरोधित करें"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"इसके कॉल और लेख को अवरुद्ध करें"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"फ़ोन नंबर"</string>
- <string name="block_button" msgid="8822290682524373357">"अवरुद्ध करें"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"केवल डिवाइस स्वामी अवरुद्ध किए गए नंबर देख और प्रबंधित कर सकते हैं."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"अनवरोधित करें"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"अवरोधन अस्थायी रूप से बंद है"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"आपातकालीन नंबर डायल करने या उस पर लेख संदेश भेजने के बाद, अवरोधन बंद हो जाता है ताकि आपातकालीन सेवाएं आपसे संपर्क कर सकें."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"अभी पुन: सक्षम करें"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> अवरोधित है"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> अनवरोधित है"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"आपातकालीन नंबर अवरुद्ध करने में असमर्थ."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> पहले से अवरोधित है."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"कॉल करने के लिए व्यक्तिगत डायलर का उपयोग करना"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 6e7fb3a..5022e7e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Upravljanje pozivom"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Upravljanje telefonskim pozivima"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Nepoznato"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Propušteni poziv"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Želite li promijeniti zadanu aplikaciju brojčanika?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Želite li upotrebljavati <xliff:g id="NEW_APP">%1$s</xliff:g> umjesto aplikacije <xliff:g id="CURRENT_APP">%2$s</xliff:g> kao zadanu aplikaciju brojčanika?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Želite li upotrebljavati <xliff:g id="NEW_APP">%s</xliff:g> kao zadanu aplikaciju brojčanika?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokirani brojevi"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Nećete primati ni pozive ni poruke s blokiranih brojeva."</string>
- <string name="block_number" msgid="1101252256321306179">"Dodaj broj"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Želite li deblokirati <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Deblokiraj"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokirajte pozive i poruke koje upućuje"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonski broj"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokiraj"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Samo vlasnik uređaja može pregledavati i kontrolirati blokirane brojeve."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Deblokiranje"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokiranje je privremeno isključeno"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Nakon što nazovete broj hitne službe ili pošaljete poruku na njega, blokada će se isključiti kako bi vam se hitna služba mogla javiti."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Ponovno omogući sada"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Broj <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> je blokiran"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Broj <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> deblokiran je"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Broj hitne službe ne može se blokirati."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Broj <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> već je blokiran."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Za upućivanje poziva upotrebljava se osobni program za biranje"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 72476bc..ab39a81 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Híváskezelés"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Híváskezelés"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Ismeretlen"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Nem fogadott hívás"</string>
@@ -29,9 +29,9 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Hívás némítva."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Kihangosítás engedélyezve."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Most nem alkalmas. Mi újság?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Hamarosan visszahívlak."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Később visszahívlak."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Most nem alkalmas. Hívnál később?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Hamarosan visszahívom."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Később visszahívom."</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Most nem alkalmas. Hívna később?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Gyors válaszok"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Gyors válaszok szerkesztése"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Módosítja az alapértelmezett tárcsázó alkalmazást?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Legyen a(z) <xliff:g id="NEW_APP">%1$s</xliff:g> az alapértelmezett tárcsázó alkalmazás a(z) <xliff:g id="CURRENT_APP">%2$s</xliff:g> helyett?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Legyen a(z) <xliff:g id="NEW_APP">%s</xliff:g> az alapértelmezett tárcsázó alkalmazás?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Letiltott számok"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"A jövőben nem kap hívásokat vagy SMS-eket a letiltott számokról."</string>
- <string name="block_number" msgid="1101252256321306179">"Szám hozzáadása"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Feloldja a következő szám letiltását: <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Letiltás feloldása"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"A következő számról érkező hívások és SMS-ek letiltása:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonszám"</string>
- <string name="block_button" msgid="8822290682524373357">"Letiltás"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Csak az eszköz tulajdonosa nézheti meg és kezelheti a letiltott számokat."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Letiltás feloldása"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"A tiltás átmenetileg felfüggesztve"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Ha segélyhívószámot tárcsáz, vagy segélyhívószámra küld SMS-t, a rendszer feloldja a tiltást, hogy a sürgősségi szolgáltatások felvehessék Önnel a kapcsolatot."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Újbóli engedélyezés most"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> letiltva"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> letiltása feloldva"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Nem sikerült letiltani a segélyhívószámot."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"A következő szám már le van tiltva: <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Hívás indítása a személyes tárcsázóval"</string>
</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 1061754..56773ea 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Զանգերի կառավարում"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Հեռախոսային զանգերի կառավարում"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Հեռախոս"</string>
<string name="unknown" msgid="6878797917991465859">"Անհայտ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Բաց թողնված զանգ"</string>
@@ -30,8 +30,8 @@
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Բարձրախոսը միացված է:"</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Չեմ կարող խոսել հիմա: Ի՞նչ կա չկա:"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ես ձեզ հիմա հետ կզանգեմ:"</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ես ձեզ մի փոքր ուշ կզանգեմ:"</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Չեմ կարող խոսել հիմա: Կզանգե՞ք ավելի ուշ:"</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ես ձեր մի փոքր ուշ կզանգեմ:"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Չեմ կարող խոսել հիմա: Զանգե՞մ ձեզ մի փոքր ուշ:"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Արագ պատասխաններ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Խմբագրել արագ պատասխանները"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Փոխե՞լ կանխադրված Համարհավաքի հավելվածը:"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Օգտագործե՞լ <xliff:g id="NEW_APP">%1$s</xliff:g> հավելվածը <xliff:g id="CURRENT_APP">%2$s</xliff:g>-ի փոխարեն որպես համարհավաքի կանխադրված հավելված:"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Դարձնե՞լ <xliff:g id="NEW_APP">%s</xliff:g> հավելվածը համարհավաքի կանխադրված հավելված:"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Արգելափակված համարներ"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Արգելափակված համարներից զանգեր կամ SMS–ներ չեք ստանա:"</string>
- <string name="block_number" msgid="1101252256321306179">"Ավելացնել համար"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Արգելաբացե՞լ <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> համարը:"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Արգելաբացել"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Արգելափակել այս համարից ստացվող զանգերն ու տեքստային հաղորդագրությունները"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Հեռախոսահամարը"</string>
- <string name="block_button" msgid="8822290682524373357">"Արգելափակել"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Միայն սարքի սեփականատերը կարող է դիտել և կառավարել արգելափակված համարները:"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Արգելաբացել"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Արգելափակումը ժամանակավորապես անջատվել է"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Արտակարգ իրավիճակի հեռախոսահամար հավաքելուց հետո հեռախոսի արգելափակումը կանջատվի, որպեսզի արտակարգ իրավիճակների ծառայությունները կարողանան կապվել ձեզ հետ:"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Նորից միացնել"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> համարն արգելափակվեց"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> արգելաբացվեց"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Արտակարգ իրավիճակների հեռախոսահամարը հնարավոր չէ արգելափակել:"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> համարն արդեն արգելափակված է:"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Զանգելու նպատակով անհատական համարհավաքիչի օգտագործում"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index edb0731..d8f823f 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Pengelolaan Panggilan Telepon"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Pengelolaan Panggilan Telepon"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telepon"</string>
<string name="unknown" msgid="6878797917991465859">"Tidak diketahui"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Panggilan tak terjawab"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Ubah aplikasi Pemanggil default?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Gunakan <xliff:g id="NEW_APP">%1$s</xliff:g>, bukan <xliff:g id="CURRENT_APP">%2$s</xliff:g> sebagai aplikasi pemanggil default?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Gunakan <xliff:g id="NEW_APP">%s</xliff:g> sebagai aplikasi pemanggil default?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Nomor yang diblokir"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Anda tidak akan menerima telepon atau SMS dari nomor yang diblokir."</string>
- <string name="block_number" msgid="1101252256321306179">"Tambah nomor"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Batalkan pemblokiran <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Batalkan pemblokiran"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokir panggilan telepon dan SMS dari"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Nomor telepon"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokir"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Hanya pemilik perangkat yang dapat melihat dan mengelola nomor yang diblokir."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Bebaskan"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokir dinonaktifkan sementara"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Setelah Anda menelepon atau mengirim SMS ke nomor gawat darurat, blokir akan dinonaktifkan agar layanan gawat darurat tersebut dapat menghubungi Anda."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Aktifkan lagi sekarang"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> diblokir"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> dibebaskan"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Tidak dapat memblokir nomor darurat."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> sudah diblokir."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Menggunakan telepon pribadi untuk melakukan panggilan"</string>
</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 928a74e..56610c5 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Símtalastjórnun"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Símtalastjórnun"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Sími"</string>
<string name="unknown" msgid="6878797917991465859">"Óþekkt"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Ósvarað símtal"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Viltu skipta um sjálfgefið hringiforrit?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Nota <xliff:g id="NEW_APP">%1$s</xliff:g> í stað <xliff:g id="CURRENT_APP">%2$s</xliff:g> sem sjálfgefið hringiforrit?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Nota <xliff:g id="NEW_APP">%s</xliff:g> sem sjálfgefið hringiforrit?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Númer á bannlista"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Þú færð ekki símtöl eða skilaboð frá númerum á bannlista."</string>
- <string name="block_number" msgid="1101252256321306179">"Bæta við númeri"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Taka <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> af bannlista?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Taka af bannlista"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Loka fyrir símtöl og skilaboð frá"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Símanúmer"</string>
- <string name="block_button" msgid="8822290682524373357">"Setja á bannlista"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Aðeins eigandi tækisins getur skoðað og stjórnað númerum á bannlista."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Taka af bannlista"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Slökkt tímabundið á lokun símtala"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Eftir að þú hefur hringt eða sent skilaboð í neyðarnúmer verður slökkt á lokun símtala til að tryggja að neyðarþjónusta geti haft samband við þig."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Kveikja aftur núna"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> á bannlista"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ekki á bannlista"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Getur ekki sett neyðarnúmer á bannlista."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> er nú þegar á bannlista."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Notar eigin símaforrit til að hringja"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index bddb598..47c5a1b 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestione chiamate"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Phone Call Management"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefono"</string>
<string name="unknown" msgid="6878797917991465859">"Sconosciuto"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Chiamata senza risposta"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Modificare l\'app tastiera predefinita?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Utilizzare <xliff:g id="NEW_APP">%1$s</xliff:g> invece di <xliff:g id="CURRENT_APP">%2$s</xliff:g> come app tastiera predefinita?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Utilizzare <xliff:g id="NEW_APP">%s</xliff:g> come app tastiera predefinita?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Numeri bloccati"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Non riceverai chiamate o SMS da numeri bloccati."</string>
- <string name="block_number" msgid="1101252256321306179">"Aggiungi un numero"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Sbloccare <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Sblocca"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blocca chiamate e SMS da"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Numero di telefono"</string>
- <string name="block_button" msgid="8822290682524373357">"Blocca"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Soltanto il proprietario del dispositivo può visualizzare e gestire i numeri bloccati."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Sblocca"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blocco temporaneamente disattivato"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Dopo aver chiamato o inviato un SMS a un numero di emergenza, il blocco viene disattivato per garantire che i servizi di emergenza possano contattarti."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Riattiva ora"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloccato"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> sbloccato"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Impossibile bloccare un numero di emergenza."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> è già bloccato."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Utilizzo dell\'app Telefono personale per chiamare"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 24fa715..af490ca 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ניהול השיחות"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ניהול שיחות טלפון"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"טלפון"</string>
<string name="unknown" msgid="6878797917991465859">"לא ידוע"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"שיחה שלא נענתה"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"האם לשנות את אפליקציית החייגן שבברירת מחדל?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"האם להשתמש ב-<xliff:g id="NEW_APP">%1$s</xliff:g> במקום ב-<xliff:g id="CURRENT_APP">%2$s</xliff:g> כאפליקציית החייגן שבברירת מחדל?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"האם להשתמש ב-<xliff:g id="NEW_APP">%s</xliff:g> כאפליקציית החייגן שבברירת מחדל?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"מספרים חסומים"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"לא תקבל שיחות או הודעות טקסט מהמספרים החסומים."</string>
- <string name="block_number" msgid="1101252256321306179">"הוסף מספר"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"האם לבטל את חסימת המספר <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"בטל חסימה"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"חסום שיחות והודעות טקסט מ-"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"מספר טלפון"</string>
- <string name="block_button" msgid="8822290682524373357">"חסום"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"רק בעל המכשיר יכול להציג ולנהל מספרים חסומים."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ביטול חסימה"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"החסימה הושבתה זמנית"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"לאחר חיוג או שליחת הודעה למספר חירום, החסימה תושבת כדי ששירותי החירום יוכלו ליצור איתך קשר."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"הפעל מחדש עכשיו"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> נחסם"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"החסימה של <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> בוטלה"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"אי אפשר לחסום מספרי חירום."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"המספר <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> כבר חסום."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"משתמש בחייגן האישי כדי להתקשר"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1977b02..07e9c9f 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"通話管理"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"通話管理"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"電話"</string>
<string name="unknown" msgid="6878797917991465859">"通知不可能"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"不在着信"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"既定の電話アプリを変更しますか?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g>を<xliff:g id="CURRENT_APP">%2$s</xliff:g>の代わりに既定の電話アプリとして使用しますか?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g>を既定の電話アプリとして使用しますか?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ブロックした番号"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ブロックした電話番号からの通話やテキスト メッセージを受け取ることはありません。"</string>
- <string name="block_number" msgid="1101252256321306179">"番号を追加"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> のブロックを解除しますか?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ブロックを解除"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"次の発信元からの通話とテキスト メッセージをブロック"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"電話番号"</string>
- <string name="block_button" msgid="8822290682524373357">"ブロック"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ブロックした番号を表示、管理できるのは端末の所有者のみです。"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ブロックを解除"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ブロックが一時的に OFF になっています"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"緊急通報番号に電話をかけたり、テキスト メッセージを送信したりすると、ブロックが OFF になり、緊急通報受理機関からの通話を着信できるようになります。"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"再度有効にする"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> をブロックしました"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> のブロックを解除しました"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"緊急通報番号はブロックできません。"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> は既にブロックされています。"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"個人用の電話アプリで電話する"</string>
</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 520913b..b8986a2 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ზარების მართვა"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ტელეფონის ზარების მართვა"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ტელეფონი"</string>
<string name="unknown" msgid="6878797917991465859">"უცნობი"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"გამოტოვებული ზარი"</string>
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"შეტყობინების გაგზავნა"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"ზარი დადუმებულია."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"სპიკერები ჩართულია."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ვერ ვპასუხობ. რა ხდება?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ვერ ვლაპარაკობ. რა ხდება?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ცოტა ხანში გადმოვრეკავ."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"მოგვიანებით გადმოვრეკავ."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ვერ ვპასუხობ. მოგვიანებით დამირეკეთ."</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ვერ ვპასუხობ. მოგვიანებით დამირეკე."</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"სწრაფი პასუხი"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"სწრაფი პასუხის რედაქტირება"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"გსურთ ამკრეფის ნაგულისხმევი აპის შეცვლა?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"გსურთ ამკრეფის ნაგულისხმევ აპად <xliff:g id="CURRENT_APP">%2$s</xliff:g>-ის ნაცვლად <xliff:g id="NEW_APP">%1$s</xliff:g>-ის გამოყენება?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"გსურთ, გამოიყენოთ <xliff:g id="NEW_APP">%s</xliff:g>, როგორც ამკრეფის ნაგულისხმევი აპი?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"დაბლოკილი ნომრები"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"დაბლოკილი ნომრებიდან ზარებსა და ტექსტურ შეტყობინებებს ვერ მიიღებთ."</string>
- <string name="block_number" msgid="1101252256321306179">"ნომრის დამატება"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"გსურთ, განბლოკოთ <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"განბლოკვა"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ზარებისა და ტექსტური შეტყობინებების დაბლოკვა ნომრიდან:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ტელეფონის ნომერი"</string>
- <string name="block_button" msgid="8822290682524373357">"დაბლოკვა"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"დაბლოკილი ნომრების ნახვა და მართვა მხოლოდ მოწყობილობის მფლობელს შეუძლია."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"განბლოკვა"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ბლოკი დროებით გამორთულია"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"საგანგებო ნომრის აკრეფის ან მასზე ტესქტური შეტყობინების გაგზავნის შემდეგ ბლოკი გამოირთვება, რათა გადაუდებელი დახმარების სერვისებმა თქვენთან დაკავშირება შეძლოს."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ხელახლა ჩართვა ახლავე"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> დაბლოკილია"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> განბლოკილია"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"საგანგებო ნომრის დაბლოკვა შეუძლებელია."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> უკვე დაბლოკილია."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ზარის განსახორციელებლად გამოიყენება პირადი დამრეკი"</string>
</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 524203f..baf6ef7 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Қоңырауды басқару"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Телефон қоңырауларын басқару"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Белгісіз"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Қабылданбаған қоңырау"</string>
@@ -29,7 +29,7 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Қоңырау үнсіздендірілген."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Үндеткішті телефон қосылды."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Қазір сөйлесе алмаймын. Не болды?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Қазір өзім қоңырау шаламын."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Сізге кері қоңырау шаламын."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Сізге кейінірек қоңырау шаламын."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Қазір сөйлесе алмаймын. Кейінірек?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Жылдам жауаптар"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Әдепкі нөмір тергіш қолданбаны өзгерткіңіз келе ме?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> орнына <xliff:g id="NEW_APP">%1$s</xliff:g> қолданбасын әдепкі тергіш қолданба ретінде пайдалану қажет пе?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> қолданбасын әдепкі нөмір тергіш қолданба ретінде пайдалану қажет пе?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Бөгелген нөмірлер"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Тыйым салынған нөмірлерден қоңыраулар немесе мәтіндік хабарлар алмайсыз."</string>
- <string name="block_number" msgid="1101252256321306179">"Нөмір қосу"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> бөгеуден шығарылсын ба?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Бөгеуден шығару"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Қоңыраулары мен мәтіндік хабарлары бөгелетін нөмір"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Телефон нөмірі"</string>
- <string name="block_button" msgid="8822290682524373357">"Бөгеу"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Бөгелген нөмірлерді тек құрылғы иесі көре және басқара алады."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Бөгеуді алу"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Тыйым уақытша алынды"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Төтенше жағдай нөмірін терген немесе мәтіндік хабар жіберген соң, төтенше жағдай қызметтері сізге хабарласа алуы үшін тыйым алынады."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Қазір қайта қосу"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> бөгелген"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> бөгеуден шығарылған"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Жедел қызмет нөмірін бөгеу мүмкін емес."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> бұрыннан бөгелген."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Қоңырау шалу үшін жеке нөмір тергішті пайдалану"</string>
</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 93dac37..39cbf3d 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"គ្រប់គ្រងការហៅ"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ការគ្រប់គ្រងការហៅទូរស័ព្ទ"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ទូរស័ព្ទ"</string>
<string name="unknown" msgid="6878797917991465859">"មិនស្គាល់"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"ខកខានទទួល"</string>
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"សារ"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"ការហៅបិទសំឡេង។"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"បានបើកអូប៉ាល័រទូរស័ព្ទ។"</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"មិនអាចនិយាយបានឥឡូវនេះ។ មានការអីដែរ?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"មិនអាចនិយាយបានឥឡូវនេះ។ មានអ្វីកើតឡើង?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ខ្ញុំនឹងហៅទៅអ្នកវិញ។"</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ខ្ញុំនឹងហៅទៅអ្នកនៅពេលក្រោយ។"</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"មិនអាចនិយាយបានទេឥឡូវនេះ។ ហៅមកខ្ញុំពេលក្រោយ?"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ប្តូរកម្មវិធីហៅទូរស័ព្ទលំនាំដើម?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"ប្រើ <xliff:g id="NEW_APP">%1$s</xliff:g> ជំនួសឲ្យ <xliff:g id="CURRENT_APP">%2$s</xliff:g> ជាកម្មវិធីហៅទូរស័ព្ទលំនាំដើមរបស់អ្នក?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"ប្រើ <xliff:g id="NEW_APP">%s</xliff:g> ជាកម្មវិធីហៅទូរស័ព្ទលំនាំដើមរបស់អ្នក?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"លេខដែលបានរារាំង"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"អ្នកនឹងមិនទទួលបានការហៅទូរស័ព្ទ ឬសារពីលេខដែលបានរារាំងឡើយ។"</string>
- <string name="block_number" msgid="1101252256321306179">"បញ្ចូលលេខ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"ឈប់រារាំង <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ឬ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ឈប់រារាំង"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"រារាំងការហៅ និងការផ្ញើសារពី"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"លេខទូរសព្ទ"</string>
- <string name="block_button" msgid="8822290682524373357">"រារាំង"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"មានតែម្ចាស់ឧបករណ៍តែប៉ុណ្ណោះដែលអាចមើល និងគ្រប់គ្រងបញ្ជីរារាំងបាន"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ឈប់ទប់ស្កាត់"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"បានបិទការទប់ស្កាត់ជាបណ្ដោះអាសន្ន"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"បន្ទាប់ពីអ្នកចុចហៅ ឬផ្ញើសារលេខអាសន្ន ការទប់ស្កាត់ត្រូវបានបិទដើម្បីប្រាកដថាសេវាកម្មអាសន្នអាចទាក់ទងអ្នកបាន។"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"បើកដំណើរការឡើងវិញឥឡូវនេះ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"បានទប់ស្កាត់ <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"បានអនុញ្ញាត <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"មិនអាចទប់ស្កាត់លេខបន្ទាន់បានទេ។"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ត្រូវបានទប់ស្កាត់រួចហើយ។"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"កំពុងប្រើកម្មវិធីហៅផ្ទាល់ខ្លួនដើម្បីធ្វើការហៅទូរស័ព្ទ"</string>
</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 0117849..60f8caa 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ಕರೆ ನಿರ್ವಹಣೆ"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ಫೋನ್ ಕರೆ ನಿರ್ವಹಣೆ"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ಫೋನ್"</string>
<string name="unknown" msgid="6878797917991465859">"ಅಜ್ಞಾತ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"ಮಿಸ್ಡ್ ಕಾಲ್"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ಡೀಫಾಲ್ಟ್ ಡಯಲರ್ ಅಪ್ಲಿಕೇಶನ್ ಬದಲಾಯಿಸುವುದೇ?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> ಬದಲಿಗೆ <xliff:g id="NEW_APP">%1$s</xliff:g> ಅನ್ನು ನಿಮ್ಮ ಡೀಫಾಲ್ಟ್ ಡಯಲರ್ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿ ಬಳಸುವುದೇ?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> ಅನ್ನು ನಿಮ್ಮ ಡೀಫಾಲ್ಟ್ ಡಯಲರ್ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿ ಬಳಸುವುದೇ?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳು"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳಿಂದ ಕರೆಗಳು ಅಥವಾ ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ನೀವು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ."</string>
- <string name="block_number" msgid="1101252256321306179">"ಸಂಖ್ಯೆ ಸೇರಿಸಿ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ನಿರ್ಬಂಧ ತೆಗೆಯುವುದೇ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ನಿರ್ಬಂಧ ತೆಗೆಯಿರಿ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ಇದರಿಂದ ಬರುವ ಕರೆಗಳು ಮತ್ತು ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ಫೋನ್ ಸಂಖ್ಯೆ"</string>
- <string name="block_button" msgid="8822290682524373357">"ನಿರ್ಬಂಧಿಸು"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ಸಾಧನ ಮಾಲೀಕರು ಮಾತ್ರ ನಿರ್ಬಂಧಿಸಿದ ಸಂಖ್ಯೆಗಳನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ನಿರ್ಬಂಧ ತೆಗೆಯಿರಿ"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ನಿರ್ಬಂಧಿಸುವಿಕೆ ತಾತ್ಕಾಲಿಕವಾಗಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"ನೀವು ತುರ್ತು ಸಂಖ್ಯೆಯನ್ನು ಡಯಲ್ ಮಾಡಿದ ಅಥವಾ ಪಠ್ಯ ಸಂದೇಶ ಕಳುಹಿಸಿದ ನಂತರ, ತುರ್ತು ಸೇವೆಗಳಲ್ಲಿ ನಿಮ್ಮನ್ನು ಸಂಪರ್ಕಿಸಬಹುದು ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಿರ್ಬಂಧಿಸುವಿಕೆ ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ಇದೀಗ ಮರು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ನಿರ್ಬಂಧ ತೆಗೆಯಲಾಗಿದೆ"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ತುರ್ತು ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ಅನ್ನು ಈಗಾಗಲೇ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ಕರೆ ಮಾಡಲು ವೈಯಕ್ತಿಕ ಡಯಲರ್ ಬಳಸಲಾಗುತ್ತಿದೆ"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 8b347b5..4c51e98 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"통화 관리"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"통화 관리"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"전화"</string>
<string name="unknown" msgid="6878797917991465859">"알 수 없음"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"부재중 전화"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"기본 다이얼러 앱을 변경하시겠습니까?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> 대신 <xliff:g id="NEW_APP">%1$s</xliff:g>을(를) 기본 다이얼러 앱으로 사용하시겠습니까?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g>을(를) 기본 다이얼러 앱으로 사용하시겠습니까?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"차단된 번호"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"차단한 번호에서 걸려오는 전화나 문자를 더 이상 받지 않습니다."</string>
- <string name="block_number" msgid="1101252256321306179">"번호 추가"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>번을 차단 해제하시겠습니까?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"차단 해제"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"전화와 문자 메시지를 차단할 번호"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"전화번호"</string>
- <string name="block_button" msgid="8822290682524373357">"차단"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"기기 소유자만 차단된 번호를 보고 관리할 수 있습니다."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"차단 해제"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"차단 기능이 일시적으로 중지됨"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"긴급 전화번호로 전화를 걸거나 문자를 보내면 긴급 서비스를 사용할 수 있도록 차단 기능이 중지됩니다."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"지금 다시 사용 설정"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>번은 차단되었습니다."</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>번은 차단 해제되었습니다."</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"긴급 전화번호를 차단할 수 없습니다."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>번은 이미 차단되었습니다."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"전화를 걸 때 개인 다이얼러 사용"</string>
</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index f0ddb39..c805165 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Чалууларды башкаруу"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Телефон чалууларын башкаруу"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Белгисиз"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Кабыл алынбаган чалуу"</string>
@@ -31,7 +31,7 @@
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Азыр сүйлөшө албайм. Эмне болду?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Кайра чалам."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Кийинчерээк чалып коём."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Сүйлөшө албайм. Ананыраак чалчы?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Сүйлөшө албайм. Кийин чаласызбы?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Тез жооптор"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Тез жоопторду өзгөртүү"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Демейки номер тергич колдонмо өзгөрүлсүнбү?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Демейки номер тергич колдонмо катары мурунку <xliff:g id="CURRENT_APP">%2$s</xliff:g> колдонмонун ордуна <xliff:g id="NEW_APP">%1$s</xliff:g> бул колдонмо колдонулсунбу?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Демейки номер тергич колдонмо катары <xliff:g id="NEW_APP">%s</xliff:g> колдонулсунбу?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Бөгөттөлгөн номерлер"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Бөгөттөлгөн номерлерден эч ким чалып же билдирүү жөнөтө албайт."</string>
- <string name="block_number" msgid="1101252256321306179">"Номер кошуу"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> бөгөттөн чыгарылсынбы?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Бөгөттөн чыгаруу"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Төмөнкү номерден келген чалуулар менен SMS билдирүүлөрүн бөгөттөө"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Телефон номери"</string>
- <string name="block_button" msgid="8822290682524373357">"Бөгөттөө"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Бөгөттөлгөн номерлерди түзмөк ээси гана көрүп жана башкара алат."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Бөгөттөн чыгаруу"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Бөгөттөө функциясы убактылуу өчүк"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Өзгөчө кырдаалдар кызматынын номерин терип же ошол номерге билдирүү жөнөтүлгөндөн кийин түзмөк бөгөттөн чыгарылат."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Кайра жандыруу"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> бөгөттөлдү"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> бөгөттөн чыгарылды"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Өзгөчө кырдаал кызматынын номери бөгөттөлбөй жатат."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> мурунтан эле бөгөттөлгөн."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Чалууларды аткаруу үчүн жеке тергич колдонулууда"</string>
</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index ac8ed8c..02eda11 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ການຈັດການການໂທ"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ການຈັດການການໂທລະສັບ"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ໂທລະສັບ"</string>
<string name="unknown" msgid="6878797917991465859">"ບໍ່ຮູ້ຈັກ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ປ່ຽນແປງແອັບແຜ່ນກົດມາດຕະຖານ?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"ໃຊ້ <xliff:g id="NEW_APP">%1$s</xliff:g> ແທນ <xliff:g id="CURRENT_APP">%2$s</xliff:g> ເປັນແອັບແຜ່ນກົດມາດຕະຖານຂອງທ່ານ?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"ໃຊ້ <xliff:g id="NEW_APP">%s</xliff:g> ເປັນແອັບແຜ່ນກົດມາດຕະຖານຂອງທ່ານ?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ເບີໂທລະສັບທີ່ບລັອກໄວ້"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ທ່ານຈະບໍ່ໄດ້ຮັບສາຍ ຫຼື ຂໍ້ຄວາມຈາກເບີທີ່ບລັອກໄວ້."</string>
- <string name="block_number" msgid="1101252256321306179">"ເພີ່ມເບີໂທລະສັບ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"ຍົກເລີກການບລັອກ <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ບໍ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ຍົກເລີກການບລັອກ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ບລັອກການໂທ ແລະ ຂໍ້ຄວາມຈາກ"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ເບີໂທລະສັບ"</string>
- <string name="block_button" msgid="8822290682524373357">"ບລັອກ"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ມີແຕ່ເຈົ້າຂອງອຸປະກອນເທົ່ານັ້ນທີ່ສາມາດເບິ່ງ ແລະ ຈັດການເບີທີ່ຖືກບລັອກໄວ້."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ຍົກເລີກການບລັອກ"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ຍົກເລີກການບລັອກຊົ່ວຄາວ"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"ຫຼັງຈາກທີ່ທ່ານໂທ ຫຼື ສົ່ງຂໍ້ຄວາມຫາເບີສຸກເສີນໃດໜຶ່ງແລ້ວ, ການບລັອກຈະຖືກປິດໄວ້ເພື່ອໃຫ້ແນ່ໃຈວ່າບໍລິການສຸກເສີນດັ່ງກ່າວຈະສາມາດຕິດຕໍ່ຫາທ່ານໄດ້."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ເປີດໃຊ້ຄືນໃໝ່ດຽວນີ້"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"ບລັອກ <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ແລ້ວ"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"ປົດບລັອກ <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ແລ້ວ"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ບໍ່ສາມາດບລັອກເບີໂທສຸກເສີນໄດ້."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ຖືກບລັອກຢູ່ກ່ອນແລ້ວ."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ໃຊ້ແປ້ນໂທສ່ວນຕົວເພື່ອໂທອອກ"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index c1146fd..c801acd 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Skambučių tvarkymas"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefono skambučių tvarkymas"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefonas"</string>
<string name="unknown" msgid="6878797917991465859">"Nežinomas"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Praleistas skambutis"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Pakeisti numatytąją numerio rinkiklio programą?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Naudoti „<xliff:g id="NEW_APP">%1$s</xliff:g>“ vietoje „<xliff:g id="CURRENT_APP">%2$s</xliff:g>“ kaip numatytąją numerio rinkiklio programą?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Naudoti „<xliff:g id="NEW_APP">%s</xliff:g>“ kaip numatytąją numerio rinkiklio programą?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Užblokuoti numeriai"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Negausite skambučių ar teksto pranešimų iš užblokuotų numerių."</string>
- <string name="block_number" msgid="1101252256321306179">"Pridėti numerį"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Panaikinti <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> blokavimą?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Atblokuoti"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokuoti skambučius ir teksto pranešimus nuo"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefono numeris"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokuoti"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Tik įrenginio savininkas gali peržiūrėti ir tvarkyti užblokuotus numerius."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Panaikinti blokavimą"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokavimo funkcija laikinai išjungta"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Surinkus pagalbos numerį ar išsiuntus juo pranešimą blokavimo funkcija išjungiama, siekiant užtikrinti, kad pagalbos tarnybos galėtų su jumis susisiekti."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Dabar įgalinti iš naujo"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> užblokuotas"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> blokavimas panaikintas"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Negalima užblokuoti pagalbos numerio."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> jau užblokuotas."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Asmeninio numerio rinkiklio naudojimas skambinant"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 0bee0f2..8f86db9 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Zvanu pārvaldība"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Tālruņa zvanu pārvaldība"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Tālrunis"</string>
<string name="unknown" msgid="6878797917991465859">"Nezināms"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Neatbildēts zvans"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Vai mainīt numura sastādītāja noklusējuma lietotni?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Vai lietotnes <xliff:g id="CURRENT_APP">%2$s</xliff:g> vietā izmantot <xliff:g id="NEW_APP">%1$s</xliff:g> kā numura sastādītāja noklusējuma lietotni?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Vai izmantot <xliff:g id="NEW_APP">%s</xliff:g> kā numura sastādītāja noklusējuma lietotni?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Bloķētie numuri"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Jūs nesaņemsiet zvanus vai īsziņas no bloķētajiem numuriem."</string>
- <string name="block_number" msgid="1101252256321306179">"Pievienot numuru"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vai atbloķēt numuru <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Atbloķēt"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloķēt ienākošos zvanus un īsziņas no numura"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Tālruņa numurs"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloķēt"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Tikai ierīces īpašnieks var skatīt un pārvaldīt bloķētos numurus."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Atbloķēt"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bloķēšana īslaicīgi izslēgta"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Pēc avārijas dienesta numura sastādīšanas vai īsziņas sūtīšanas uz to tiek izslēgta bloķēšana, lai avārijas dienesti varētu ar jums sazināties."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Atkārtoti iespējot tūlīt"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloķēts"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> atbloķēts"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Ārkārtas numuru nevar bloķēt."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> jau ir bloķēts."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Zvans tiek veikts, izmantojot personisko numura sastādītāju"</string>
</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 33a7b73..6ce21c0 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Управување со повик"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Управување со телефонски повици"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Непознато"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Пропуштен повик"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Смени ја стандардната апликација Бирач?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Користи <xliff:g id="NEW_APP">%1$s</xliff:g> наместо <xliff:g id="CURRENT_APP">%2$s</xliff:g> како стандардна апликација за бирање?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Користи <xliff:g id="NEW_APP">%s</xliff:g> како стандардна апликација за бирање?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Блокирани броеви"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Нема да добивате повици или SMS од блокирани броеви."</string>
- <string name="block_number" msgid="1101252256321306179">"Додај број"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Одблокирајте го <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Одблокирај"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Блокирај повици и пораки од"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Телефонски број"</string>
- <string name="block_button" msgid="8822290682524373357">"Блокирај"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Само сопственикот на уредот може да ги прикаже и да управува со блокираните броеви."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Одблокирај"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Блокирањето е привремено исклучено"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Откако ќе повикате или ќе испратите SMS на број за итни случаи, блокирањето се исклучува за да може да ве контактираат службите за итни случаи."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Овозможи сега повторно"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> е блокиран"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> е деблокиран"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Бројот за итни случаи не може да се блокира."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> е веќе блокиран."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Користење на личниот бирач за остварување повик"</string>
</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index b2a87bd..e51f662 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"കോൾ മാനേജുമെന്റ്"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ഫോൺ കോൾ മാനേജ്മെന്റ്"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ഫോണ്"</string>
<string name="unknown" msgid="6878797917991465859">"അജ്ഞാതം"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"മിസ്ഡ് കോൾ"</string>
@@ -32,7 +32,7 @@
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ഞാൻ നിങ്ങളെ ഉടൻ തിരിച്ചുവിളിക്കാം."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ഞാൻ നിങ്ങളെ പിന്നീട് വിളിക്കാം."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ഇപ്പോൾ സംസാരിക്കാനാകില്ല. എന്നെ പിന്നീട് വിളിക്കാമോ?"</string>
- <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"അതിവേഗ പ്രതികരണങ്ങൾ"</string>
+ <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"ദ്രുത പ്രതികരണങ്ങൾ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"പ്രതികരണം എഡിറ്റുചെയ്യൂ"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ദ്രുത പ്രതികരണം"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"സ്ഥിര ഡയലർ ആപ്പ് മാറ്റണോ?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> എന്നതിനുപകരം <xliff:g id="NEW_APP">%1$s</xliff:g> എന്നതിനെ നിങ്ങളുടെ സ്ഥിര ഡയലർ ആപ്പ് ആയി ഉപയോഗിക്കണോ?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> എന്നതിനെ നിങ്ങളുടെ സ്ഥിര ഡയലർ ആപ്പ് ആയി ഉപയോഗിക്കണോ?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ബ്ലോക്കുചെയ്ത നമ്പറുകളിൽ നിന്ന് നിങ്ങൾക്ക് കോളുകളോ സന്ദേശങ്ങളോ ലഭിക്കില്ല."</string>
- <string name="block_number" msgid="1101252256321306179">"ഒരു നമ്പർ ചേർക്കുക"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> അൺബ്ലോക്കുചെയ്യണോ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"അൺബ്ലോക്കുചെയ്യുക"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ഇനിപ്പറയുന്നതിൽ നിന്നുള്ള കോളുകളും ടെക്സ്റ്റുകളും ബ്ലോക്കുചെയ്യുക"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ഫോൺ നമ്പർ"</string>
- <string name="block_button" msgid="8822290682524373357">"ബ്ലോക്കുചെയ്യുക"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ ഉപകരണ ഉടമയ്ക്ക് മാത്രമേ കാണാനും മാനേജുചെയ്യാനും കഴിയൂ."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"അൺബ്ലോക്കുചെയ്യുക"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ബ്ലോക്കുചെയ്യൽ താൽക്കാലികമായി ഓഫാണ്"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"നിങ്ങൾ ഒരു എമർജൻസി നമ്പർ ഡയൽ ചെയ്ത് കഴിയുമ്പോഴോ അതിലേക്ക് സന്ദേശമയച്ചുകഴിയുമ്പോഴോ, എമർജൻസി സേവനങ്ങൾ നിങ്ങളിലേക്ക് എത്തുമെന്ന് ഉറപ്പാക്കാൻ കോൾ ബ്ലോക്കിംഗ് ഓഫാക്കും."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ഇപ്പോൾ വീണ്ടും പ്രവർത്തനക്ഷമമാക്കുക"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ബ്ലോക്കുചെയ്തു"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> അൺബ്ലോക്കുചെയ്തു"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"അടിയന്തര നമ്പർ ബ്ലോക്കുചെയ്യാനാകുന്നില്ല."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> മുമ്പേതന്നെ ബ്ലോക്കുചെയ്തതാണ്."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"കോൾ ചെയ്യുന്നതിന് സ്വകാര്യ ഡയലർ ഉപയോഗിക്കുന്നു"</string>
</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index cfe39d0..12a17aa 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Дуудлагын удирдлага"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Гар утасны Дуудлагын Удирдлага"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Утас"</string>
<string name="unknown" msgid="6878797917991465859">"Тодорхойгүй"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Аваагүй дуудлага"</string>
@@ -25,15 +25,15 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> аваагүй дуудлага"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>-н аваагүй дуудлага"</string>
<string name="notification_missedCall_call_back" msgid="2684890353590890187">"Буцааж залгах"</string>
- <string name="notification_missedCall_message" msgid="3049928912736917988">"Мессэж"</string>
+ <string name="notification_missedCall_message" msgid="3049928912736917988">"Зурвас"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Дууг хаасан."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Чанга яригчийг идэвхжүүлсэн."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Ярих боломжгүй байна. Сонин юу байна?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Би тань руу одоо буцаагаад залгая."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Би тань руу яг одоо буцаагаад залгана."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Би тань руу дараа залгана."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ярих боломжгүй байна. Дараа залгах уу?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Одоо ярих боломжгүй байна. Дараа надруу залгах уу?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Шуурхай хариунууд"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Шуурхай хариуг засах"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Шуурхай хариунуудыг засах"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Шуурхай хариу"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Зурвасыг <xliff:g id="PHONE_NUMBER">%s</xliff:g> руу илгээв."</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Үндсэн залгагч апп-ыг өөрчлөх үү?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g>-ыг <xliff:g id="CURRENT_APP">%2$s</xliff:g>-ын оронд таны үндсэн залгагч апп болгон тохируулах уу?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g>-ыг таны үндсэн залгагч апп болгон тохируулах уу?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Блоклосон дугаар"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Та хориглосон дугаараас дуудлага, мессеж хүлээн авахгүй."</string>
- <string name="block_number" msgid="1101252256321306179">"Дугаар нэмэх"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>-г блокоос гаргах уу?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Блокоос гаргах"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Дараахаас ирэх дуудлага, текстийг блоклох"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Утасны дугаар"</string>
- <string name="block_button" msgid="8822290682524373357">"Блоклох"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Зөвхөн энэ төхөөрөмжийн эзэн блоклосон дугаарыг харж, өөрчлөх боломжтой."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Хоригийг тайлах"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Дугаар хориглох түр хугацаанд идэвхгүй болсон"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Түргэн тусламжийн дугаар руу залгах буюу мессеж бичсэний дараа түргэн тусламжаас тантай холбогдох боломжтой байлгахын тулд дугаар хориглохыг идэвхгүй болгоно."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Одоо дахин идэвхжүүлэх"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>-г хориглосон"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>-н хоригийг авсан"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Яаралтай дугаарыг хориглох боломжгүй."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>-г аль хэдийн хориглосон байна."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Дуудлага хийхийн тулд хувийн залгагчийг ашиглаж байна"</string>
</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 3dfcd34..6c9a25d 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"कॉल व्यवस्थापन"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"फोन कॉल व्यवस्थापन"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"फोन"</string>
<string name="unknown" msgid="6878797917991465859">"अज्ञात"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"सुटलेला कॉल"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"डीफॉल्ट डायलर अॅप बदलायचा?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"आपला डीफॉल्ट डायलर अॅप म्हणून <xliff:g id="CURRENT_APP">%2$s</xliff:g> ऐवजी <xliff:g id="NEW_APP">%1$s</xliff:g> वापरायचा?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"आपला डीफॉल्ट डायलर अॅप म्हणून <xliff:g id="NEW_APP">%s</xliff:g> वापरायचा?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"अवरोधित केलेले नंबर"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"आपल्याला अवरोधित नंबरवरून कॉल किंवा मजकूर प्राप्त होणार नाहीत."</string>
- <string name="block_number" msgid="1101252256321306179">"एक नंबर जोडा"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> अनावरोधित करायचा?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"अनावरोधित करा"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"यावरील कॉल आणि मजकूर अवरोधित करा"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"फोन नंबर"</string>
- <string name="block_button" msgid="8822290682524373357">"अवरोधित करा"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"फक्त डिव्हाइस मालक अवरोधित केलेले नंबर पाहू आणि व्यवस्थापित करू शकतो."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"अनावरोधित करा"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"अवरोधित करणे तात्पुरते बंद आहे"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"आपण एखादा आणीबाणी नंबर डायल केला किंवा त्यावर मजकूर पाठविल्यानंतर, आणीबाणी सेवा आपल्याशी संपर्क साधू शकतात हे सुनिश्चित करण्यासाठी अवरोधित करणे बंद करते."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"आता पुन्हा-सक्षम करा"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> अवरोधित केला"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> अनावरोधित केला"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"आणीबाणी नंबर अवरोधित करण्यात अक्षम."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> आधीपासून अवरोधित केला आहे."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"कॉल करण्यासाठी वैयक्तिक डायलर वापरणे"</string>
</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index c77f2bb..0504627 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Pengurusan Panggilan"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Pengurusan Panggilan Telefon"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Tidak diketahui"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Panggilan tidak dijawab"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Tukar apl Pendail lalai?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Gunakan <xliff:g id="NEW_APP">%1$s</xliff:g> dan bukannya <xliff:g id="CURRENT_APP">%2$s</xliff:g> sebagai apl pendail lalai anda?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Gunakan <xliff:g id="NEW_APP">%s</xliff:g> sebagai apl pendail lalai anda?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Nombor yang disekat"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Anda tidak akan menerima panggilan atau teks daripada nombor yang disekat."</string>
- <string name="block_number" msgid="1101252256321306179">"Tambahkan nombor"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Nyahsekat <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Nyahsekat"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Sekat panggilan dan teks daripada"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Nombor telefon"</string>
- <string name="block_button" msgid="8822290682524373357">"Sekat"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Hanya pemilik peranti boleh melihat dan menguruskan nombor yang disekat."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Nyahsekat"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Sekatan dimatikan untuk sementara waktu"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Sekatan dimatikan selepas anda mendail atau menghantar teks kepada nombor kecemasan untuk memastikan perkhidmatan kecemasan dapat menghubungi anda."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Dayakan semula sekarang"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> disekat"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> dinyahsekat"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Tidak dapat menyekat nombor kecemasan."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> sudah disekat."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Menggunakan pendail peribadi untuk membuat panggilan"</string>
</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 1eccf5e..5db1d5b 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ခေါ်ဆိုမှုစီမံခန့်ခွဲရေး"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ဖုန်းခေါ်ဆိုခြင်း စီမံမှု"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ဖုန်း"</string>
<string name="unknown" msgid="6878797917991465859">"အကြောင်းအရာ မသိရှိ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"လွဲသွားသော ဖုန်းခေါ်မှု"</string>
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"စာတို"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"နားထောင်ရုံသာ (စကားပြောပိတ်ထားသည်)"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"စပီကာဖုန်း သုံးလို့ရသည်"</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"အခုပြောလို့မရဘူး။ အကြောင်းထူးရှိလား။"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"အခုပြောလို့မရဘူး။အကြောင်းထူးရှိလား?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ပြန်ခေါ်လိုက်မယ်နော်"</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"နောက်မှ ပြန်ခေါ်လိုက်မယ်"</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"အခုပြောလို့မရဘူး။ ပြန်ခေါ်ပါလား။"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"အခုပြောလို့မရဘူး။ထပ်ခေါ်နော်?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"အမြန်တုံ့ပြန်ချက်များ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"အမြန်တုံ့ပြန်ချက်များပြင်ခြင်း"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"စက်ရုံထုတ်ဖုန်းခေါ်အပ်ဖ်ကိုပြောင်းလိုပါသလား"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> အစား <xliff:g id="NEW_APP">%1$s</xliff:g> ကိုသင့်ရဲ့ စက်ရုံထုတ်ဖုန်းခေါ်အပ်ဖ်အဖြစ် သုံးလိုပါသလား"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> ကိုသင့်ရဲ့စက်ရုံထုတ်ဖုန်းခေါ်အပ်ဖ်အဖြစ် သုံးလိုပါသလား"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ပိတ်ဆို့ထားသည့် နံပါတ်များ"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"သင်သည် ဘလော့ခ်လုပ်ထားသော နံပါတ်များမှ ဖုန်းခေါ်ခြင်း (သို့) စာသားပို့ခြင်းတို့ကို လက်ခံရရှိမည် မဟုတ်ပါ။"</string>
- <string name="block_number" msgid="1101252256321306179">"နံပါတ်တစ်ခု ထည့်ပါ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ကို ပိတ်ဆို့မှုပြန်ဖွင့်မလား။"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ပိတ်ဆို့မှုပြန်ဖွင့်ပါ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ဖော်ပြပါပုဂ္ဂိုလ်ထံမှ စာနှင့် ခေါ်ဆိုမှုများကို ပိတ်ဆို့ပါ"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ဖုန်းနံပါတ်"</string>
- <string name="block_button" msgid="8822290682524373357">"ပိတ်ဆို့ပါ"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ပိတ်ဆို့ထားသည့် နံပါတ်များကို စက်ပစ္စည်းပိုင်ရှင်သာလျှင် ကြည့်ရှု၍ စီမံခန့်ခွဲနိုင်ပါသည်။"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"မပိတ်ဆို့တော့ပါ"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ဘလော့ခ်လုပ်ခြင်းကို ပိတ်ထားပါသည်"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"သင် အရေးပေါ်နံပါတ်တစ်ခုကို ဖုန်းခေါ် (သို့) စာသားပို့ပြီးနောက် အရေးပေါ်ဝန်ဆောင်မှုများက သင့်ကို ဆက်သွယ်နိုင်ကြောင်း သေချာစေရန် ဘလော့ခ်လုပ်ခြင်းကို ပိတ်ထားပါသည်။"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ယခု ပြန်ဖွင့်လိုက်ပါ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ကို ပိတ်ဆို့ပြီးပါပြီ"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ကို မပိတ်ဆို့တော့ပါ"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"အရေးပေါ်နံပါတ်ကို ပိတ်ဆို့၍ မရပါ။"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ကို ပိတ်ဆို့ထားပြီး ဖြစ်သည်။"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ဖုန်းခေါ်ဆိုမှုပြုလုပ်ရန် ကိုယ်ရေးကိုယ်တာ ဖုန်းခေါ်ဆိုမှုစနစ်ကို အသုံးပြုခြင်း"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1af23ae..04588eb 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Administrering av samtaler"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Administrering av telefonsamtaler"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Ukjent"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Tapt anrop"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Vil du endre standard telefonapp?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Vil du bruke <xliff:g id="NEW_APP">%1$s</xliff:g> i stedet for <xliff:g id="CURRENT_APP">%2$s</xliff:g> som standard telefonapp?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Vil du bruke <xliff:g id="NEW_APP">%s</xliff:g> som standard telefonapp?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokkerte numre"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Du mottar ingen anrop eller tekstmeldinger fra blokkerte numre."</string>
- <string name="block_number" msgid="1101252256321306179">"Legg til et nummer"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vil du oppheve blokkeringen av <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Opphev blokkering"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokkér anrop og meldinger fra"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonnummer"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokkér"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Bare enhetseieren kan se og administrere blokkerte numre."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Opphev blokkeringen"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokkeringen er midlertidig slått av"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Når du har ringt eller sendt tekstmelding til et nødnummer, blir blokkeringen slått av, sånn at nødtjenesten har mulighet til å kontakte deg."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Slå på igjen nå"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> er blokkert"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Blokkeringen av <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> er opphevet"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Kan ikke blokkere nødnumre."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> er allerede blokkert."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Ring via den personlige ringeappen"</string>
</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 3becfb9..a804221 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"कल व्यवस्थापन"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"फोन कल व्यवस्थापन"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"फोन"</string>
<string name="unknown" msgid="6878797917991465859">"अज्ञात"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"छुटेका कल"</string>
@@ -31,7 +31,7 @@
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"अहिले कुरा गर्न मिल्दैन। के भइरहेको छ?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"मैले तपाईंलाई तुरुन्तै कल गर्ने छु।"</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"म तपाईंलाई पछि कल गर्ने छु।"</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"अहिले कुरा गर्न सक्नु हुन्न। मलाई पछि कल गर्नुहुन्छ?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"अहिले कुरा गर्न सक्नु हुन्न। मलाई पछि कल गर्नुहोस्?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"द्रुत प्रतिक्रियाहरू"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"द्रुत प्रतिक्रियाहरू सम्पादन गर्नुहोस्"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"पूर्वनिर्धारित डायलर अनुप्रयोग फेर्ने हो?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g>को सट्टामा <xliff:g id="NEW_APP">%1$s</xliff:g>लाई पूर्वनिर्धारित डायलर अनुप्रयोगको रूपमा प्रयोग गर्ने हो?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g>लाई तपाईँको पूर्वनिर्धारित डायलर अनुप्रयोगको रूपमा प्रयोग गर्ने हो?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"रोकिएका नम्बरहरू"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"तपाईँले रोक लगाइएका नम्बरहरूबाट फोन वा पाठ सन्देशहरू प्राप्त गर्नुहुने छैन।"</string>
- <string name="block_number" msgid="1101252256321306179">"नम्बर थप्नुहोस्"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> लाई अनब्लक गर्ने हो?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"अनब्लक गर्नुहोस्"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"यस नम्बरबाट कल र पाठ सन्देशहरूलाई रोक्नुहोस्"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"फोन नम्बर"</string>
- <string name="block_button" msgid="8822290682524373357">"रोक्नुहोस्"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"यन्त्रको मालिकले रोकिएका नम्बरहरूलाई हेर्न र व्यवस्थापन गर्न सक्छ।"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"अनब्लक गर्नुहोस्"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"रोक लगाउने काम अस्थायी रूपमा निष्क्रिय छ"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"तपाईँले आपतकालीन नम्बरमा डायल गरेपछि वा पाठ सन्देश पठाएपछि आपतकालीन सेवाहरूले तपाईँलाई सम्पर्क गर्न सकून् भन्ने कुरा सुनिश्चित गर्न कलमाथिको अवरोध निष्क्रिय गरिन्छ।"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"अब पुन:-सक्रिय गर्नुहोस्"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> लाई रोकियो"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> माथिको रोक हटाइयो"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"आपतकालीन नम्बरमाथि रोक लगाउन सकिएन।"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> लाई पहिले नै रोकिएको छ।"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"कल गर्न व्यक्तिगत डायलर प्रयोग गर्दै"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b50b111..829bf0b 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Oproepbeheer"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefoonoproepbeheer"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefoon"</string>
<string name="unknown" msgid="6878797917991465859">"Onbekend"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Gemiste oproep"</string>
@@ -31,7 +31,7 @@
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Kan nu niet opnemen. Alles goed?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ik bel je zo terug."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ik bel je later."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kan nu niet opnemen. Bel je me later?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kan nu niet opnemen. Bel me later."</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Snelle reacties"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Snelle reacties bewerken"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Standaard kiezerapp wijzigen?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g> in plaats van <xliff:g id="CURRENT_APP">%2$s</xliff:g> gebruiken als standaard kiezerapp?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> gebruiken als standaard kiezerapp?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Geblokkeerde nummers"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Je ontvangt geen oproepen of sms\'jes van geblokkeerde nummers."</string>
- <string name="block_number" msgid="1101252256321306179">"Een nummer toevoegen"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Blokkering van <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> opheffen?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Blokkering opheffen"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Oproepen en sms\'jes blokkeren van"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefoonnummer"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokkeren"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Alleen de eigenaar van het apparaat kan geblokkeerd nummers bekijken en beheren."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Blokkering opheffen"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokkering tijdelijk uitgeschakeld"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Als je een noodnummer belt of er een sms naartoe stuurt, wordt de blokkering uitgeschakeld om te zorgen dat hulpdiensten contact met je kunnen opnemen."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Nu opnieuw inschakelen"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> geblokkeerd"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Blokkering van <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> opgeheven"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Kan alarmnummer niet blokkeren."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> is al geblokkeerd."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"De persoonlijke kiezer gebruiken om te bellen"</string>
</resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 738f992..41e1a4a 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ਕਾਲ ਪ੍ਰਬੰਧਨ"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ਫ਼ੋਨ - ਕਾਲ ਪ੍ਰਬੰਧਨ"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ਫ਼ੋਨ"</string>
<string name="unknown" msgid="6878797917991465859">"ਅਗਿਆਤ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"ਮਿਸਡ ਕਾਲ"</string>
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"ਸੁਨੇਹਾ"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"ਕਾਲ ਮਿਊਟ ਕੀਤੀ।"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"ਸਪੀਕਰਫੋਨ ਸਮਰਥਿਤ।"</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ਹੁਣ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਮਾਜ਼ਰਾ ਹੈ?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ਮੈਂ ਤੁਹਾਨੂੰ ਹੁਣੇ ਵਾਪਸ ਕਾਲ ਕਰਾਂਗਾ/ਗੀ।"</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰਾਂਗਾ/ਗੀ।"</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ਹੁਣ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਮੈਨੂੰ ਬਾਅਦ ਵਿੱਚ ਫ਼ੋਨ ਕਰ ਸਕਦੇ ਹੋ?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ਹੁਣ ਗੱਲ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਕੀ ਹੋ ਰਿਹਾ ਹੈ?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ਮੈਂ ਤੁਹਾਨੂੰ ਹੁਣੇ ਵਾਪਸ ਕਾਲ ਕਰਾਂਗਾ।"</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰਾਂਗਾ।"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ਹੁਣ ਗੱਲ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਕੀ ਮੈਨੂੰ ਬਾਅਦ ਵਿੱਚ ਫੋਨ ਕਰ ਸਕਦੇ ਹੋ?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"ਤਤਕਾਲ ਜਵਾਬ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ਤਤਕਾਲ ਜਵਾਬ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -45,25 +45,7 @@
<string name="no_vm_number" msgid="4164780423805688336">"ਲੁਪਤ ਵੌਇਸਮੇਲ ਨੰਬਰ"</string>
<string name="no_vm_number_msg" msgid="1300729501030053828">"SIM ਕਾਰਡ ਤੇ ਕੋਈ ਵੌਇਸਮੇਲ ਨੰਬਰ ਸਟੋਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
<string name="add_vm_number_str" msgid="4676479471644687453">"ਨੰਬਰ ਜੋੜੋ"</string>
- <string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ਕੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡਾਇਲਰ ਐਪ ਨੂੰ ਬਦਲਣਾ ਹੈ?"</string>
- <string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"ਕੀ <xliff:g id="CURRENT_APP">%2$s</xliff:g> ਦੀ ਬਜਾਏ <xliff:g id="NEW_APP">%1$s</xliff:g> ਨੂੰ ਆਪਣੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡਾਇਲਰ ਐਪ ਵਜੋਂ ਵਰਤਣਾ ਹੈ?"</string>
- <string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"ਕੀ <xliff:g id="NEW_APP">%s</xliff:g> ਨੂੰ ਆਪਣੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡਾਇਲਰ ਐਪ ਵਜੋਂ ਵਰਤਣਾ ਹੈ?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ਬਲੌਕ ਕੀਤੇ ਗਏ ਨੰਬਰ"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ਤੁਹਾਨੂੰ ਬਲੌਕ ਕੀਤੇ ਨੰਬਰਾਂ ਤੋਂ ਕਾਲਾਂ ਜਾਂ ਲਿਖਤ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋਣਗੇ।"</string>
- <string name="block_number" msgid="1101252256321306179">"ਇੱਕ ਨੰਬਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"ਕੀ <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ਨੂੰ ਅਣਬਲੌਕ ਕਰਨਾ ਹੈ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ਅਣਬਲੌਕ ਕਰੋ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ਇਸ ਨੰਬਰ ਤੋਂ ਕਾਲਾਂ ਅਤੇ ਲਿਖਤੀ ਸੁਨੇਹਿਆਂ ਨੂੰ ਬਲੌਕ ਕਰੋ"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ਫੋਨ ਨੰਬਰ"</string>
- <string name="block_button" msgid="8822290682524373357">"ਬਲੌਕ ਕਰੋ"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ਸਿਰਫ਼ ਡੀਵਾਈਸ ਮਾਲਕ ਹੀ ਬਲੌਕ ਕੀਤੇ ਗਏ ਨੰਬਰਾਂ ਨੂੰ ਵੇਖ ਅਤੇ ਪ੍ਰਬੰਧਿਤ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ਅਨਬਲੌਕ ਕਰੋ"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ਬਲੌਕਿੰਗ ਆਰਜ਼ੀ ਤੌਰ \'ਤੇ ਬੰਦ ਹੈ"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਇੱਕ ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਨੂੰ ਡਾਇਲ ਕੀਤੇ ਜਾਣ ਜਾਂ ਲਿਖਤ ਸੁਨੇਹਾ ਭੇਜੇ ਜਾਣ ਤੋਂ ਬਾਅਦ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਬਲੌਕਿੰਗ ਨੂੰ ਬੰਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਕਿ ਐਮਰਜੈਂਸੀ ਸੇਵਾਵਾਂ ਤੁਹਾਨੂੰ ਸੰਪਰਕ ਕਰ ਸਕਣ।"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ਹੁਣੇ ਦੁਬਾਰਾ ਯੋਗ ਬਣਾਓ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ਬਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ਅਣਬਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਨੂੰ ਬਲੌਕ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ।"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਬਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ਕਾਲ ਕਰਨ ਲਈ ਨਿੱਜੀ ਡਾਇਲਰ ਦੀ ਵਰਤੋਂ ਕਰਨੀ"</string>
+ <string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ਕੀ ਡਿਫ਼ੌਲਟ ਡਾਇਲਰ ਐਪ ਨੂੰ ਬਦਲਣਾ ਹੈ?"</string>
+ <string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"ਕੀ <xliff:g id="CURRENT_APP">%2$s</xliff:g> ਦੀ ਬਜਾਏ <xliff:g id="NEW_APP">%1$s</xliff:g> ਨੂੰ ਆਪਣੀ ਡਿਫ਼ੌਲਟ ਡਾਇਲਰ ਐਪ ਦਾ ਉਪਯੋਗ ਕਰਨਾ ਹੈ?"</string>
+ <string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"ਕੀ <xliff:g id="NEW_APP">%s</xliff:g> ਨੂੰ ਆਪਣੀ ਡਿਫ਼ੌਲਟ ਡਾਇਲਰ ਐਪ ਦਾ ਉਪਯੋਗ ਕਰਨਾ ਹੈ?"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index c6567ec..813bf29 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Zarządzanie połączeniami"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefon – zarządzanie połączeniami"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Nieznany"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Nieodebrane połączenie"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Zmienić domyślną aplikację telefonu?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Zmienić <xliff:g id="CURRENT_APP">%2$s</xliff:g> na <xliff:g id="NEW_APP">%1$s</xliff:g> jako domyślną aplikację telefonu?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Ustawić <xliff:g id="NEW_APP">%s</xliff:g> jako domyślną aplikację telefonu?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Zablokowane numery"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Nie będziesz otrzymywać połączeń ani SMS-ów z zablokowanych numerów."</string>
- <string name="block_number" msgid="1101252256321306179">"Dodaj numer"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Odblokować <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Odblokuj"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokuj połączenia i SMS-y z:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Numer telefonu"</string>
- <string name="block_button" msgid="8822290682524373357">"Zablokuj"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Tylko właściciel urządzenia może przeglądać zablokowane numery i nimi zarządzać."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Odblokuj"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokada tymczasowo wyłączona"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Gdy wybierzesz numer awaryjny lub wyślesz pod ten numer SMS-a, blokada zostanie wyłączona, aby odpowiednie służby mogły się z Tobą skontaktować."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Włącz ponownie"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Numer <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> został zablokowany"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Numer <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> został odblokowany"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Nie można zablokować numeru alarmowego."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Numer <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> jest już zablokowany."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Wykonuję połączenie z osobistego telefonu"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 8f45672..cc3db6e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestão de chamadas"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Gestão de chamadas do telemóvel"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefone"</string>
<string name="unknown" msgid="6878797917991465859">"Desconhecido"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Chamada não atendida"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Alterar aplicação de Telefone predefinida?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Utilizar <xliff:g id="NEW_APP">%1$s</xliff:g> em vez de <xliff:g id="CURRENT_APP">%2$s</xliff:g> como a aplicação de telefone predefinida?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Utilizar <xliff:g id="NEW_APP">%s</xliff:g> como a aplicação de telefone predefinida?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Não irá receber chamadas ou mensagens de texto de números bloqueados."</string>
- <string name="block_number" msgid="1101252256321306179">"Adicionar um número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Pretende desbloquear <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear chamadas e mensagens de texto de"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Número de telefone"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquear"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Apenas o proprietário do dispositivo pode ver e gerir os números bloqueados."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desbloquear"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bloqueio temporariamente desativado"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Após marcar ou enviar uma mensagem de texto para um número de emergência, o bloqueio é desativado para garantir que os serviços de emergência conseguem contactá-lo."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Reativar agora"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> bloqueado"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> desbloqueado"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Não é possível bloquear números de emergência."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> já está bloqueado."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"A utilizar o telefone pessoal para efetuar a chamada"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index e2dc815..9dea13f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gerenciamento de chamadas"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Gerenciamento de chamadas telefônicas"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefone"</string>
<string name="unknown" msgid="6878797917991465859">"Desconhecido"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Chamada perdida"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Alterar o app discador padrão?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Usar <xliff:g id="NEW_APP">%1$s</xliff:g> em vez de <xliff:g id="CURRENT_APP">%2$s</xliff:g> como seu app discador padrão?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Usar <xliff:g id="NEW_APP">%s</xliff:g> como seu app discador padrão?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Você não receberá chamadas nem mensagens de texto dos números bloqueados."</string>
- <string name="block_number" msgid="1101252256321306179">"Adicionar um número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Desbloquear <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear chamadas e mensagens de texto de"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Nº de telefone"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloquear"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Apenas o proprietário do dispositivo pode ver e gerenciar os números bloqueados."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Desbloquear"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bloqueio temporariamente desativado"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Após discar ou enviar uma mensagem de texto para um número de emergência, o bloqueio é desativado para garantir o contato do serviço de emergência com você."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Reativar agora"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"O número <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> está bloqueado."</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"O número <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> está desbloqueado."</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Não é possível bloquear o número de emergência."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"O número <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> já está bloqueado."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Usando o discador pessoal para fazer a chamada"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index ccad8e3..fd7050d 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Gestionarea apelurilor"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefon – Gestionarea apelurilor"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Necunoscut"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Apel nepreluat"</string>
@@ -29,8 +29,8 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Apel cu sunet dezactivat."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Difuzor activat."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Nu pot acum. Despre ce e vorba?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Sun eu imediat."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Sun eu mai târziu."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Te sun imediat înapoi."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Te sun mai târziu."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nu pot acum. Vorbim mai târziu?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Răspunsuri rapide"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Editați răspunsurile rapide"</string>
@@ -42,28 +42,10 @@
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Această aplicație nu poate efectua apeluri fără permisiunea Telefon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Pentru a apela, introduceți un număr valid."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Apelul nu poate fi adăugat în acest moment."</string>
- <string name="no_vm_number" msgid="4164780423805688336">"Lipsește numărul mesageriei vocale"</string>
+ <string name="no_vm_number" msgid="4164780423805688336">"Lipseşte numărul mesageriei vocale"</string>
<string name="no_vm_number_msg" msgid="1300729501030053828">"Niciun număr de mesagerie vocală nu este stocat pe cardul SIM."</string>
<string name="add_vm_number_str" msgid="4676479471644687453">"Adăugați numărul"</string>
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Schimbați aplicația Telefon prestabilită?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Folosiți <xliff:g id="NEW_APP">%1$s</xliff:g> și nu <xliff:g id="CURRENT_APP">%2$s</xliff:g> ca aplicație de telefonie prestabilită?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Folosiți <xliff:g id="NEW_APP">%s</xliff:g> ca aplicație de telefonie prestabilită?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Numere blocate"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Nu veți primi apeluri sau mesaje text de la numerele blocate."</string>
- <string name="block_number" msgid="1101252256321306179">"Adăugați un număr"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Deblocați <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Deblocați"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blocați apelurile și mesajele text de la"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Număr de telefon"</string>
- <string name="block_button" msgid="8822290682524373357">"Blocați"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Numai proprietarul dispozitivului poate vedea și gestiona numerele blocate."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Deblocați"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blocarea este dezactivată temporar"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"După ce formați un număr de urgență sau trimiteți un mesaj la acesta, blocarea este dezactivată pentru ca serviciile de urgență să vă poată contacta."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Reactivați acum"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> este blocat"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> este deblocat"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Numărul de urgență nu poate fi blocat."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> este deja blocat."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Utilizarea telefonului personal pentru a apela"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1f6f5af..54d5711 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Управление звонками"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Телефон – управление звонками"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Неизвестный абонент"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Пропущенный вызов"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Новое приложение для звонков"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"\"<xliff:g id="NEW_APP">%1$s</xliff:g>\" станет приложением для звонков по умолчанию вместо \"<xliff:g id="CURRENT_APP">%2$s</xliff:g>\". Продолжить?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"\"<xliff:g id="NEW_APP">%s</xliff:g>\" станет приложением для звонков по умолчанию. Продолжить?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Заблокированные номера"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Звонки и сообщения с заблокированных номеров поступать не будут."</string>
- <string name="block_number" msgid="1101252256321306179">"Добавить номер"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Разблокировать номер <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Разблокировать"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Блокировать звонки и сообщения с"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Номер телефона"</string>
- <string name="block_button" msgid="8822290682524373357">"Заблокировать"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Просматривать и изменять список заблокированных номеров может только владелец устройства."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Разблокировать"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Блокировка временно снята"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"После набора или отправки сообщения на номер экстренной службы блокировка будет выключена, чтобы специалисты могли связаться с вами."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Включить блокировку"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> заблокирован"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Номер <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> разблокирован"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Невозможно заблокировать номер экстренной службы."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> уже заблокирован."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Набор номера с помощью персонализированной панели"</string>
</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 78badfa..f1b014c 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"ඇමතුම් කළමනාකරණය"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"දුරකථන ඇමතුම් කළමනාකරණය"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"දුරකථනය"</string>
<string name="unknown" msgid="6878797917991465859">"නොදනී"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"මඟ හැරුණු ඇමතුම"</string>
@@ -33,7 +33,7 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"මම ඔබට පසුව අමතන්නම්."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"දැන් කථා කරන්න බෑ. පසුව අමතන්නද?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"ක්ෂණික ප්රතිචාර"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ක්ෂණික ප්රතිචාර සංස්කරණය"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ක්ෂණික ප්රතිචාර සංස්කරණය කරන්න"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ක්ෂණික ප්රතිචාරය"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> හට පණිවිඩය යවන්න."</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"සුපුරුදු දුරකථන යෙදුම වෙනස් කරන්න ද?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> වෙනුවට <xliff:g id="NEW_APP">%1$s</xliff:g> ඔබගේ සුපුරුදු දුරකථන යෙදුම ලෙස භාවිතා කරන්නද?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> ඔබගේ සුපුරුදු දුරකථන යෙදුම ලෙස භාවිතා කරන්නද?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"අවහිර කළ අංක"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ඔබට අවහිර කළ අංකයවලින් ඇමතුම් හෝ පෙළ නොලැබෙනු ඇත."</string>
- <string name="block_number" msgid="1101252256321306179">"අංකයක් එක් කරන්න"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> අවහිර නොකරන්නද?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"අවහිර නොකරන්න"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ඇමතුම් හා පෙළ අවහිර කරන්න"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"දුරකථන අංකය"</string>
- <string name="block_button" msgid="8822290682524373357">"අවහිර කරන්න"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"උපාංගය හිමිකරුට පමණක් අවහිර අංක බැලීමට සහ කළමනාකරණය කිරීමට හැකිය."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"අවහිර කිරීමෙන් ඉවත් කරන්න"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"අවහිර කිරීම තාවකාලිකව අක්රියයි"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"ඔබ හදිසි ඇමතුම් අංකයක් ඩයල් කිරීමෙන් හෝ පෙළ පණිවිඩයක් යැවීමෙන් පසු, හදිසි අවස්ථා සේවාවලට ඔබට ඇමතිය හැකි බව තහවුරු කිරීමට අවහිර කිරීම අක්රිය කරයි."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"දැන් නැවත-සබල කරන්න"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> අවහිර කරන ලදී"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> අවහිර කිරීමෙන් ඉවත් කරන ලදී"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"හදිසි අවස්ථා අංකය අවහිර කිරීමට නොහැකිය."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> දැනටමත් අවහිර කර ඇත."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"ඇමතුම ගැනීමට පුද්ගලික අමතනය භාවිත කරමින්"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 5da7467..9139650 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Správa hovorov"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Správa telefónnych hovorov"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefón"</string>
<string name="unknown" msgid="6878797917991465859">"Neznáme"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Zmeškaný hovor"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Chcete zmeniť predvolenú aplikáciu vytáčania?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Chcete použiť aplikáciu <xliff:g id="NEW_APP">%1$s</xliff:g> namiesto aplikácie <xliff:g id="CURRENT_APP">%2$s</xliff:g> ako predvolenú aplikáciu vytáčania?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Chcete použiť aplikáciu <xliff:g id="NEW_APP">%s</xliff:g> ako predvolenú aplikáciu vytáčania?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokované čísla"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Z blokovaných čísel nebudete prijímať hovory ani textové správy."</string>
- <string name="block_number" msgid="1101252256321306179">"Pridať číslo"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Odblokovať číslo <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Odblokovať"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokovať hovory a textové správy z čísla"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefónne číslo"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokovať"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Iba vlastník zariadenia môže zobrazovať a spravovať blokované čísla."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Odblokovať"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokovanie je dočasne vypnuté"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Keď vytočíte číslo tiesňového volania alebo naň odošlete textovú správu, blokovanie bude vypnuté, aby vás mohli pohotovostné služby kontaktovať."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Znova zapnúť"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Číslo <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> je zablokované"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Číslo je <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> odblokované"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Číslo tiesňového volania sa nedá zablokovať."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Číslo <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> je už zablokované."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Na volanie sa používa osobné vytáčanie"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 00a811b..374266e 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Upravljanje klicev"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Upravljanje telefonskih klicev"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Neznano"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Neodgovorjeni klic"</string>
@@ -29,8 +29,8 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Klic izključen."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Zvočnik omogočen."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Zdaj ne morem govoriti. Za kaj gre?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Pokličem takoj."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Pokličem pozneje."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Takoj bom poklical."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Poklical bom pozneje."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Zdaj ne morem govoriti. Pozneje?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Hitri odgovori"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Urejanje hitrih odgovorov"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Želite spremeniti privzeto aplikacijo za klicanje?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Želite <xliff:g id="NEW_APP">%1$s</xliff:g> uporabljati kot privzeto aplikacijo za klicanje namesto <xliff:g id="CURRENT_APP">%2$s</xliff:g>?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Želite <xliff:g id="NEW_APP">%s</xliff:g> uporabljati kot privzeto aplikacijo za klicanje?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blokirane številke"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Z blokiranih številk ne boste prejemali klicev ali sporočil SMS."</string>
- <string name="block_number" msgid="1101252256321306179">"Dodaj številko"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Želite odblokirati številko <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Odblokiraj"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokiranje klicev in SMS-jev s številke"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonska številka"</string>
- <string name="block_button" msgid="8822290682524373357">"Blokiraj"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Samo lastnik naprave si lahko ogleda blokirane številke in jih upravlja."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Odblokiraj"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokiranje je začasno izklopljeno"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Ko izberete številko za klic v sili ali nanjo pošljete sporočilo SMS, se blokiranje izklopi, s čimer se zagotovi, da vas lahko pokličejo iz služb za pomoč v sili."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Znova omogoči"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Številka <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> je blokirana"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Številka <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> je odblokirana"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Številke za klic v sili ni mogoče blokirati."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Številka <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> je že blokirana."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Uporaba osebnega klicalnika za klic"</string>
</resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index b13c2ab..b328b7f 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Menaxhimi i thirrjes"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Menaxhimi i telefonatave"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefoni"</string>
<string name="unknown" msgid="6878797917991465859">"I panjohur"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Telefonatë e humbur"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Të ndryshohet apl. parazgjedhur i formuesit të numrave?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Të përdoret <xliff:g id="NEW_APP">%1$s</xliff:g> në vend të <xliff:g id="CURRENT_APP">%2$s</xliff:g> si aplikacioni i parazgjedhur i formuesit të numrave?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Të përdoret <xliff:g id="NEW_APP">%s</xliff:g> si aplikacioni i parazgjedhur i formuesit të numrave?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Numrat e bllokuar"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Nuk do të marrësh telefonata ose mesazhe me tekst nga numrat e bllokuar."</string>
- <string name="block_number" msgid="1101252256321306179">"Shto një numër"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Zhblloko <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Zhblloko"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blloko telefonatat dhe mesazhet me tekst nga"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Numri i telefonit"</string>
- <string name="block_button" msgid="8822290682524373357">"Blloko"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Vetëm zotëruesi i pajisjes mund të shikojë dhe të menaxhojë numrat e bllokuar."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Zhblloko"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bllokimi përkohësisht joaktiv"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Pasi shtypet ose dërgohet mesazh me tekst te një numër i urgjencës, bllokimi është çaktivizuar për të siguruar që shërbimet e emergjencës të mund të të kontaktojnë."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Riaktivizo tani"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> u bllokua"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> u zhbllokua"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Numri i urgjencës nuk mund të bllokohet."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> është i bllokuar tashmë."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Po përdor formuesin personal të numrave për të kryer telefonatën"</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 1fd28f2..2eaadc5 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Управљање позивима"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Управљање телефонским позивима"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Непознато"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Пропуштен позив"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Променити подразумевану апликацију Телефон?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Желите ли да користите апликацију <xliff:g id="NEW_APP">%1$s</xliff:g> уместо апликације <xliff:g id="CURRENT_APP">%2$s</xliff:g> као подразумевану апликацију за позивање телефонских бројева?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Желите ли да користите апликацију <xliff:g id="NEW_APP">%s</xliff:g> као подразумевану апликацију за позивање телефонских бројева?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Блокирани бројеви"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Нећете примати позиве ни SMS-ове са блокираних бројева."</string>
- <string name="block_number" msgid="1101252256321306179">"Додај број"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Желите ли да деблокирате <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Деблокирај"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Блокирајте позиве и SMS-ове од"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Број телефона"</string>
- <string name="block_button" msgid="8822290682524373357">"Блокирај"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Само власник уређаја може да прегледа блокиране бројеве и управља њима."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Деблокирајте"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Блокирање је привремено искључено"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Кад позовете број хитне службе или на тај број пошаљете SMS, блокирање се искључује да би хитне службе могле да вас контактирају."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Поново омогући"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> је блокиран"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> је деблокиран"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Није могуће блокирати број хитне службе."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> је већ блокиран."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Коришћење бројчаника из личног профила за упућивање позива"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ac22da8..ddd421c 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Samtalshantering"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Samtalshantering"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Okänd"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Missat samtal"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Vill du byta standardapp för uppringning?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Vill du använda <xliff:g id="NEW_APP">%1$s</xliff:g> i stället för <xliff:g id="CURRENT_APP">%2$s</xliff:g> som standardapp för uppringning?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Vill du använda <xliff:g id="NEW_APP">%s</xliff:g> som standardapp för uppringning?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Blockerade nummer"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Du kommer inte ta emot samtal eller sms från blockerade nummer."</string>
- <string name="block_number" msgid="1101252256321306179">"Lägg till ett telefonnummer"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vill du häva blockeringen av <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Häv blockering"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blockera samtal och sms från"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonnummer"</string>
- <string name="block_button" msgid="8822290682524373357">"Blockera"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Bara enhetens ägare kan se och hantera blockerade nummer."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Avblockera"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blockeringen har inaktiverats tillfälligt"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"När du ringer eller sms:ar ett nödnummer inaktiveras blockering för att säkerställa att räddningstjänsten kan kontakta dig."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Återaktivera nu"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blockerat"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> avblockerat"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Det går inte att blockera nödnummer."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> är redan blockerat."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Ringer med den egna uppringningsfunktionen"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 58d8e24..4686e15 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -16,20 +16,20 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Kudhibiti Simu"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Usimamizi wa Mazunguzo ya Simu"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Simu"</string>
<string name="unknown" msgid="6878797917991465859">"Haijulikani"</string>
- <string name="notification_missedCallTitle" msgid="7554385905572364535">"Simu uliyokosa"</string>
+ <string name="notification_missedCallTitle" msgid="7554385905572364535">"Simu isiyojibiwa"</string>
<string name="notification_missedWorkCallTitle" msgid="6242489980390803090">"Simu ya kazini ambayo hukujibu"</string>
<string name="notification_missedCallsTitle" msgid="1361677948941502522">"Simu zisizojibiwa"</string>
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> simu ambazo hazijajibiwa"</string>
- <string name="notification_missedCallTicker" msgid="504686252427747209">"Ulikosa simu kutoka kwa <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
+ <string name="notification_missedCallTicker" msgid="504686252427747209">"Simu isiyojibiwa kutoka <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_missedCall_call_back" msgid="2684890353590890187">"Mpigie"</string>
<string name="notification_missedCall_message" msgid="3049928912736917988">"Ujumbe"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Simu imezimwa."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Spika za simu zimewezeshwa"</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Siwezi kuongea sasa. Kuna nini?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Nitakupigia baada ya dakika chache."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Nitakupigia sasa hivi."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Nitakupigia baadaye."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Siwezi kuongea sasa. Nipigie baadaye"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Majibu ya haraka"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Ungependa kubadilisha programu chaguo-msingi ya simu?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Ungependa kutumia <xliff:g id="NEW_APP">%1$s</xliff:g> badala ya <xliff:g id="CURRENT_APP">%2$s</xliff:g> kama programu ya chaguo-msingi ya kupigia simu?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Ungependa kutumia <xliff:g id="NEW_APP">%s</xliff:g> kama programu ya chaguo-msingi ya kupigia simu?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Nambari zilizozuiwa"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Hutapokea simu au SMS kutoka kwa nambari zilizozuiwa."</string>
- <string name="block_number" msgid="1101252256321306179">"Ongeza nambari"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Ungependa kuacha kuzuia <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Acha kuzuia"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Zuia simu na SMS kutoka kwa"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Nambari ya simu"</string>
- <string name="block_button" msgid="8822290682524373357">"Zuia"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Ni mmiliki wa kifaa pekee anayeweza kuangalia na kuthibiti nambari zilizozuiwa."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Acha kuzuia"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Kipengele cha kuzuia kimezimwa kwa muda"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Ukishapiga au kutuma ujumbe kwa nambari ya dharura, kipengele cha kuzuia anwani huzimwa ili watoa huduma za dharura waweze kuwasiliana nawe."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Kiwashe tena sasa"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> imezuiwa"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> imeacha kuzuiwa"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Huwezi kuzuia nambari ya dharura."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> tayari imezuiwa."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Kupiga simu kwa kutumia kipiga simu cha binafsi"</string>
</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index b68a98f..d22d047 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"அழைப்பு நிர்வாகம்"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ஃபோன் அழைப்பு நிர்வாகம்"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ஃபோன்"</string>
<string name="unknown" msgid="6878797917991465859">"தெரியாதவர்"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"தவறிய அழைப்பு"</string>
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"செய்தி"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"அழைப்பு முடக்கப்பட்டது."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"ஸ்பீக்கர்ஃபோன் இயக்கப்பட்டது."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"இப்போது பேசமுடியாது. என்ன விஷேசம்?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"இப்போது பேச முடியாது. ஏதேனும் முக்கிய செய்தியா?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"சிறிதுநேரம் கழித்து நான் அழைக்கிறேன்."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"பிறகு அழைக்கிறேன்."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"இப்போது பேச முடியவில்லை. பிறகு அழைக்க முடியுமா?"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"இயல்புநிலை டயலர் பயன்பாட்டை மாற்றவா?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="NEW_APP">%1$s</xliff:g>ஐ <xliff:g id="CURRENT_APP">%2$s</xliff:g>க்குப் பதிலாக, இயல்புநிலை டயலர் பயன்பாடாகப் பயன்படுத்தவா?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g>ஐ இயல்புநிலை டயலர் பயன்பாடாகப் பயன்படுத்தவா?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"தடுக்கப்பட்ட எண்கள்"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"தடுக்கப்பட்ட எண்களிலிருந்து அழைப்புகள் அல்லது உரைச் செய்திகளைப் பெறமாட்டீர்கள்."</string>
- <string name="block_number" msgid="1101252256321306179">"எண்ணைச் சேர்"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>ஐ அனுமதிக்கவா?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"அனுமதி"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"இந்த எண்ணிலிருந்து வரும் அழைப்புகளையும் உரைச்செய்திகளையும் தடு:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"மொபைல் எண்"</string>
- <string name="block_button" msgid="8822290682524373357">"தடு"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"சாதன உரிமையாளர் மட்டுமே தடுக்கப்பட்ட எண்களைப் பார்க்கவும் நிர்வகிக்கவும் முடியும்."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"அனுமதிக்கும்"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"அழைப்புத் தடுப்பு அம்சம் தற்காலிகமாக முடக்கப்பட்டுள்ளது"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"அவசர அழைப்பு எண்ணை அழைத்த பிறகு அல்லது அதற்கு உரைச் செய்தியை அனுப்பிய பிறகு, அவசர அழைப்புச் சேவைகள் உங்களைத் தொடர்புகொள்வதற்காக அழைப்புத் தடுப்பு அம்சம் முடக்கப்படுகிறது."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"இப்போதே மீண்டும் இயக்கு"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> தடுக்கப்பட்டது"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> அனுமதிக்கப்பட்டது"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"அவசர அழைப்பு எண்ணைத் தடுக்க முடியவில்லை."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ஏற்கனவே தடுக்கப்பட்டது."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"தனிப்பட்ட டயலரைப் பயன்படுத்தி அழைக்கவும்"</string>
</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index e6d8156..83d2074 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"కాల్ నిర్వహణ"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"ఫోన్ కాల్ నిర్వహణ"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"ఫోన్"</string>
<string name="unknown" msgid="6878797917991465859">"తెలియదు"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"సమాధానం ఇవ్వని కాల్"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"డిఫాల్ట్ డయలర్ అనువర్తనాన్ని మార్చాలా?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"మీ డిఫాల్ట్ డయలర్ అనువర్తనంగా <xliff:g id="CURRENT_APP">%2$s</xliff:g> బదులు <xliff:g id="NEW_APP">%1$s</xliff:g>ని ఉపయోగించాలా?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"మీ డిఫాల్ట్ డయలర్ అనువర్తనంగా <xliff:g id="NEW_APP">%s</xliff:g>ని ఉపయోగించాలా?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"బ్లాక్ చేయబడిన నంబర్లు"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"మీరు బ్లాక్ చేయబడిన నంబర్ల నుండి కాల్లు లేదా వచన సందేశాలను స్వీకరించరు."</string>
- <string name="block_number" msgid="1101252256321306179">"నంబర్ను జోడించు"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>ని అన్బ్లాక్ చేయాలా?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"అన్బ్లాక్ చేయి"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"దీని నుండి కాల్లు మరియు సందేశాలను బ్లాక్ చేయండి"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"ఫోన్ నంబర్"</string>
- <string name="block_button" msgid="8822290682524373357">"బ్లాక్ చేయి"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"కేవలం పరికర యజమాని మాత్రమే బ్లాక్ చేసిన నంబర్లను వీక్షించగలరు మరియు నిర్వహించగలరు."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"అన్బ్లాక్ చేస్తుంది"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"బ్లాకింగ్ తాత్కాలికంగా ఆఫ్ చేయబడింది"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"మీరు అత్యవసర నంబర్కి డయల్ చేసాక లేదా వచన సందేశం పంపాక, అత్యవసర సేవలు తిరిగి మిమ్మల్ని సంప్రదించగలిగేలా చేయడానికి బ్లాకింగ్ ఆఫ్ చేయబడుతుంది."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ఇప్పుడే మళ్లీ ప్రారంభించు"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> బ్లాక్ చేయబడింది"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> అన్బ్లాక్ చేయబడింది"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"అత్యవసర నంబర్ను బ్లాక్ చేయడం సాధ్యపడలేదు."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ఇప్పటికే బ్లాక్ చేయబడింది."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"కాల్ చేయడానికి వ్యక్తిగత డయలర్ను ఉపయోగిస్తోంది"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 5a7cf4f..ee9b6fd 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"การจัดการการโทร"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"การจัดการการโทรศัพท์"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"โทรศัพท์"</string>
<string name="unknown" msgid="6878797917991465859">"ไม่ทราบ"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"สายที่ไม่ได้รับ"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"เปลี่ยนแอปแป้นโทรศัพท์เริ่มต้นไหม"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"ใช้ <xliff:g id="NEW_APP">%1$s</xliff:g> เป็นแอปแป้นโทรศัพท์เริ่มต้นแทน <xliff:g id="CURRENT_APP">%2$s</xliff:g> ไหม"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"ใช้ <xliff:g id="NEW_APP">%s</xliff:g> เป็นแอปแป้นโทรศัพท์เริ่มต้นไหม"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"หมายเลขที่ถูกบล็อก"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"คุณจะไม่สามารถรับสายหรือข้อความจากหมายเลขที่บล็อกได้"</string>
- <string name="block_number" msgid="1101252256321306179">"เพิ่มหมายเลข"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"เลิกบล็อก <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ใช่ไหม"</string>
- <string name="unblock_button" msgid="3078048901972674170">"เลิกบล็อก"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"บล็อกสายเรียกเข้าและข้อความจาก"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"หมายเลขโทรศัพท์"</string>
- <string name="block_button" msgid="8822290682524373357">"บล็อก"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"มีเพียงเจ้าของอุปกรณ์เท่านั้นที่สามารถดูและจัดการหมายเลขที่ถูกบล็อก"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"เลิกบล็อก"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ปิดการบล็อกไว้ชั่วคราว"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"หลังจากส่งข้อความถึงหรือกดหมายเลขโทรศัพท์ฉุกเฉิน ระบบจะปิดการบล็อกเพื่อให้บริการฉุกเฉินติดต่อคุณได้"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"เปิดใช้งานอีกครั้งเลย"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"บล็อก <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> แล้ว"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"เลิกบล็อก <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> แล้ว"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ไม่สามารถบล็อกหมายเลขฉุกเฉินได้"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ถูกบล็อกอยู่แล้ว"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"การใช้โทรศัพท์ส่วนตัวเพื่อทำการโทร"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b658c36..2de1ac5 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Pamamahala sa Tawag"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Pamamahala sa Tawag sa Telepono"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telepono"</string>
<string name="unknown" msgid="6878797917991465859">"Di-kilala"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Hindi nasagot na tawag"</string>
@@ -29,7 +29,7 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Naka-mute ang tawag."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Pinapagana ang speakerphone."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Di masagot ngayon. Ano\'ng meron?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Tawagan kita muli."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Tawagan kita ulit."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Tawagan kita mamaya."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Di masagot ngayon. Tawag ka mamaya?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Mga mabilisang tugon"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Baguhin ang iyong default na Dialer app?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Gamitin ang <xliff:g id="NEW_APP">%1$s</xliff:g> sa halip na <xliff:g id="CURRENT_APP">%2$s</xliff:g> bilang default na dialer app mo?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Gamitin ang <xliff:g id="NEW_APP">%s</xliff:g> bilang default na dialer app mo?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Mga naka-block na numero"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Hindi ka makakatanggap ng mga tawag o mga text mula sa mga naka-block na numero."</string>
- <string name="block_number" msgid="1101252256321306179">"Magdagdag ng numero"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Aalisin ba sa pagkaka-block ang <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Alisin sa pagkaka-block"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"I-block ang mga tawag at text mula sa"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Numero ng telepono"</string>
- <string name="block_button" msgid="8822290682524373357">"I-block"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Ang may-ari ng device lang ang makakakita at makakapamahala sa mga naka-block na numero."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Inaalis sa pagkaka-block"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Pansamantalang naka-off ang pag-block"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Pagkatapos mong i-dial o i-text ang isang pang-emergency na numero, ino-off ang pag-block upang matiyak na maaaring makipag-ugnayan sa iyo ang mga serbisyong pang-emergency."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"I-enable muli ngayon"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Naka-block ang <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Naka-unblock ang <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Hindi ma-block ang numerong pang-emergency."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Naka-block na ang <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Ginagamit ang personal na dialer upang tumawag"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 229cf0f..b3c6698 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Çağrı Yönetimi"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefon Çağrısı Yönetimi"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Bilinmiyor"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Cevapsız çağrı"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Varsayılan Numara Çeviri uygulaması değiştirilsin mi?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Varsayılan numara çevirici uygulamanız olarak <xliff:g id="CURRENT_APP">%2$s</xliff:g> yerine <xliff:g id="NEW_APP">%1$s</xliff:g> kullanılsın mı?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Varsayılan numara çevirici uygulamanız olarak <xliff:g id="NEW_APP">%s</xliff:g> kullanılsın mı?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Engellenen numaralar"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Engellenen numaralardan gelen çağrıları veya kısa mesajları almazsınız."</string>
- <string name="block_number" msgid="1101252256321306179">"Numara ekle"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> numaralı telefonun engellemesi kaldırılsın mı?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Engellemeyi kaldır"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Şu numaradan gelen çağrıları ve kısa mesajları engelle:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefon numarası"</string>
- <string name="block_button" msgid="8822290682524373357">"Engelle"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Yalnızca cihaz sahibi engellenen numaraları görüntüleyebilir ve yönetebilir."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Engellemeyi kaldır"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Engelleme geçici olarak kapalı"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Bir acil durum numarasını çevirmenizin veya acil durum numarasına kısa mesaj göndermenizin ardından acil durum hizmetlerinin size ulaşabilmesi için engelleme kapatılır."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Şimdi yeniden etkinleştir"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> engellendi"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> numaralı telefonun engellemesi kaldırıldı"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Acil durum numarası engellenemedi."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> zaten engellenmiş durumda."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Telefon etmek için kişisel numara çeviriciyi kullanma"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 384413e..7bdfe8c 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Керування дзвінками"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Керування дзвінками"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Телефон"</string>
<string name="unknown" msgid="6878797917991465859">"Невідомий"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Пропущений виклик"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Змінити додаток для дзвінків за умовчанням?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Зробити <xliff:g id="NEW_APP">%1$s</xliff:g> додатком для дзвінків за умовчанням замість додатка <xliff:g id="CURRENT_APP">%2$s</xliff:g>?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Зробити <xliff:g id="NEW_APP">%s</xliff:g> додатком для дзвінків за умовчанням?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Заблоковані номери"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Ви не отримуватимете виклики й повідомлення із заблокованих номерів."</string>
- <string name="block_number" msgid="1101252256321306179">"Додати номер"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Розблокувати <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Розблокувати"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Заблокувати виклики та SMS із"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Номер телефону"</string>
- <string name="block_button" msgid="8822290682524373357">"Заблокувати"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Лише власник пристрою може переглядати заблоковані номери та керувати ними."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Розблокувати"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Блокування тимчасово вимкнено"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Після набору або введення екстреного номеру блокування вимикається, щоб із вами могли зв’язатися представники екстрених служб."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Відновити"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> заблоковано"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Номер <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> розблоковано"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Неможливо заблокувати номер екстреної служби."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> уже заблоковано."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Для дзвінків використовується особистий додаток набору номерів"</string>
</resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index f880d83..ccb3eb0 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"کال مینجمنٹ"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"فون کال کا نظم"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"فون"</string>
<string name="unknown" msgid="6878797917991465859">"نامعلوم"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"چھوٹی ہوئی کال"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"ڈیفالٹ ڈائلر ایپ تبدیل کریں"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> کی بجائے <xliff:g id="NEW_APP">%1$s</xliff:g> کو بطور اپنی ڈیفالٹ ڈائلر ایپ استعمال کریں؟"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> کو بطور اپنی ڈیفالٹ ڈائلر ایپ استعمال کریں؟"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"مسدود کردہ نمبرز"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"آپ مسدود کردہ نمبروں سے کالیں یا متنی پیغامات وصول نہیں کریں گے۔"</string>
- <string name="block_number" msgid="1101252256321306179">"ایک نمبر شامل کریں"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> غیر مسدود کریں؟"</string>
- <string name="unblock_button" msgid="3078048901972674170">"غیر مسدود کریں"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"اس نمبر سے کالز اور پیغامات مسدود کریں"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"فون نمبر"</string>
- <string name="block_button" msgid="8822290682524373357">"مسدود کریں"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"صرف آلہ کا مالک مسدود کردہ نمبرز کو دیکھ سکتا ہے اور ان کا نظم کر سکتا ہے۔"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"غیر مسدود کریں"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"مسدود کرنا عارضی طور پر آف ہے"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"جب آپ کوئی ایمرجنسی نمبر ڈائل کرتے یا اسے متن بھیجتے ہیں تو انسداد کو آف کر دیا جاتا ہے تاکہ ہنگامی سروسز آپ سے رابطہ کر سکیں۔"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"اب دوبارہ فعال کریں"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> مسدود ہے"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> غیر مسدود ہے"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ہنگامی نمبر مسدود کرنے سے قاصر۔"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> پہلے ہی مسدود ہے۔"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"کال کرنے کیلئے ذاتی ڈائلر استعمال ہو رہا ہے"</string>
</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index ecfbf3b..c42152f 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Qo‘ng‘iroqlar boshqaruvi"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Telefon – qo‘ng‘iroqlarni boshqarish"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
<string name="unknown" msgid="6878797917991465859">"Noma’lum"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Javobsiz qo‘ng‘iroq"</string>
@@ -37,7 +37,7 @@
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Tezkor javob"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Xabar <xliff:g id="PHONE_NUMBER">%s</xliff:g>ga jo‘natildi."</string>
- <string name="enable_account_preference_title" msgid="2021848090086481720">"Qo‘ng‘iroq uchun hisoblar"</string>
+ <string name="enable_account_preference_title" msgid="2021848090086481720">"Qo‘ng‘iroq hisoblari"</string>
<string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Faqat favqulodda qo‘ng‘iroqlarga ruxsat berilgan."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Bu ilova Telefon ruxsatnomasisiz chiquvchi qo‘ng‘iroqlarni amalga oshira olmaydi."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Qo‘ng‘iroq qilish uchun raqamni to‘g‘ri kiriting."</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Birlamchi raqam terish ilovasi o‘zgartirilsinmi?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Raqam terish uchun birlamchi ilova sifatida <xliff:g id="CURRENT_APP">%2$s</xliff:g> o‘rniga <xliff:g id="NEW_APP">%1$s</xliff:g> ilovasi tanlansinmi?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"<xliff:g id="NEW_APP">%s</xliff:g> raqam terish uchun birlamchi ilova sifatida tanlansinmi?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Bloklangan raqamlar"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Bloklangan raqamlardan keladigan qo‘ng‘iroq yoki SMS xabarlar qabul qilinmaydi."</string>
- <string name="block_number" msgid="1101252256321306179">"Raqam qo‘shish"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> raqami blokdan chiqarilsinmi?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Blokdan chiqarish"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Quyidagi raqamdan keladigan qo‘ng‘iroq va SMS xabarlar bloklansin"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefon raqami"</string>
- <string name="block_button" msgid="8822290682524373357">"Bloklash"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Faqat qurilma egasi bloklangan raqamlarni ko‘rishi va boshqarishi mumkin."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Blokdan chiqarish"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Telefon raqamini bloklash xususiyati vaqtinchalik o‘chirib qo‘yilgan"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Favqulodda chaqiruv raqamiga qo‘ng‘iroq qilganda yoki unga matnli xabar yuborganingizda, favqulodda holatlar xizmati xodimlari siz bilan bog‘lana olishlari uchun telefoningizda telefon raqamlarini bloklash xususiyati o‘chirib qo‘yiladi."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Qayta faollashtirish"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> raqami bloklandi"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> raqami blokdan chiqarildi"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Favqulodda qo‘ng‘iroq raqamini bloklab bo‘lmadi."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> raqami allaqachon bloklangan."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Qo‘ng‘iroq qilish uchun shaxsiy raqam tergichdan foydalanilmoqda"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index ec10471..df5f1c4 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Quản lý cuộc gọi"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Quản lý cuộc gọi điện thoại"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Điện thoại"</string>
<string name="unknown" msgid="6878797917991465859">"Không xác định"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Cuộc gọi nhỡ"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Thay đổi ứng dụng Trình quay số mặc định?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Sử dụng <xliff:g id="NEW_APP">%1$s</xliff:g> làm ứng dụng trình quay số mặc định của bạn thay vì <xliff:g id="CURRENT_APP">%2$s</xliff:g>?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Sử dụng <xliff:g id="NEW_APP">%s</xliff:g> làm ứng dụng trình quay số mặc định của bạn?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Số bị chặn"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Bạn sẽ không nhận được cuộc gọi hoặc tin nhắn từ các số bị chặn."</string>
- <string name="block_number" msgid="1101252256321306179">"Thêm số điện thoại"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Bỏ chặn <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Bỏ chặn"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Chặn cuộc gọi và tin nhắn từ"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Số điện thoại"</string>
- <string name="block_button" msgid="8822290682524373357">"Chặn"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Chỉ chủ sở hữu thiết bị mới có thể xem và quản lý các số bị chặn."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Bỏ chặn"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Chế độ chặn tạm thời tắt"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Sau khi bạn quay số hoặc gửi tin nhắn tới số khẩn cấp, chế độ chặn sẽ bị tắt để đảm bảo dịch vụ khẩn cấp có thể liên hệ với bạn."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Bật lại ngay bây giờ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Đã chặn <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Đã bỏ chặn <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Không thể chặn số khẩn cấp."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> đã bị chặn."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Sử dụng trình quay số cá nhân để gọi điện"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index b67f1f3..eda2169 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"通话管理"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"通话管理"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"电话"</string>
<string name="unknown" msgid="6878797917991465859">"未知"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"未接电话"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"要更改默认拨号器应用吗?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"要使用<xliff:g id="NEW_APP">%1$s</xliff:g>(而非<xliff:g id="CURRENT_APP">%2$s</xliff:g>)作为您的默认拨号器应用吗?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"要使用<xliff:g id="NEW_APP">%s</xliff:g>作为您的默认拨号器应用吗?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"已屏蔽的号码"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"您不会收到来自已屏蔽的号码的来电或短信。"</string>
- <string name="block_number" msgid="1101252256321306179">"添加电话号码"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"要取消屏蔽 <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> 吗?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"取消屏蔽"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"屏蔽以下号码的来电和短信:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"电话号码"</string>
- <string name="block_button" msgid="8822290682524373357">"屏蔽"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"只有机主才能查看和管理已屏蔽的号码。"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"取消屏蔽"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"已暂时关闭来电拦截功能"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"您拨打紧急服务电话或向其发送短信后,系统会关闭来电拦截功能,以确保紧急服务人员能与您联系。"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"立即重新启用"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"已屏蔽 <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"已取消屏蔽 <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"无法屏蔽紧急服务号码。"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> 已被屏蔽。"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"使用个人拨号器拨打电话"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 0fe3e60..7310bc0 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"通話管理"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"手機通話管理"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"電話"</string>
<string name="unknown" msgid="6878797917991465859">"未知"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"未接來電"</string>
@@ -28,8 +28,8 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"短訊"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"通話已靜音。"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"擴音器已啟用"</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"我現在不方便通話,有什麼事嗎?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"我很快會打電話給你。"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"我現在不方便通話,有什麼事?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"我待會就打電話給你。"</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"我晚點打電話給你。"</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"我現在不方便通話,晚點再打來好嗎?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"快速回應"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"變更預設撥號器應用程式?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"使用 <xliff:g id="NEW_APP">%1$s</xliff:g> 取代 <xliff:g id="CURRENT_APP">%2$s</xliff:g> 作為預設撥號器應用程式?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"使用 <xliff:g id="NEW_APP">%s</xliff:g> 為預設撥號器應用程式?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"已封鎖的號碼"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"您不會收到已封鎖號碼的來電或短訊。"</string>
- <string name="block_number" msgid="1101252256321306179">"新增號碼"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"要解除封鎖 <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> 嗎?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"解除封鎖"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"封鎖下列號碼的來電和短訊:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"電話號碼"</string>
- <string name="block_button" msgid="8822290682524373357">"封鎖"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"只有裝置擁有者可查看和管理已封鎖的號碼。"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"解除封鎖"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"暫時關閉封鎖功能"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"在您撥打或發短訊至緊急號碼後,封鎖功能會停用,以確保緊急服務可與您聯絡。"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"立即重新啟用"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"已封鎖 <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"已解除對 <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> 的封鎖"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"無法封鎖緊急電話號碼。"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"已封鎖 <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>。"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"使用個人撥號器撥打電話"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 9d4b99d..137f641 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"通話管理"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"通話管理"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"電話"</string>
<string name="unknown" msgid="6878797917991465859">"不明"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"未接來電"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"要變更預設撥號應用程式嗎?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"要將 <xliff:g id="NEW_APP">%1$s</xliff:g> (而非 <xliff:g id="CURRENT_APP">%2$s</xliff:g>) 設為預設撥號應用程式嗎?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"要將 <xliff:g id="NEW_APP">%s</xliff:g> 設為預設撥號應用程式嗎?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"已封鎖的號碼"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"您不會收到已封鎖號碼的來電或簡訊。"</string>
- <string name="block_number" msgid="1101252256321306179">"新增號碼"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"要解除封鎖 <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> 嗎?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"解除封鎖"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"封鎖以下號碼的來電和簡訊:"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"電話號碼"</string>
- <string name="block_button" msgid="8822290682524373357">"封鎖"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"只有裝置擁有者能夠查看及管理已封鎖的號碼。"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"解除封鎖"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"已暫時停用來電封鎖功能"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"當您撥打或傳送簡訊到緊急服務電話後,系統就會停用來電封鎖功能,以確保緊急服務人員能夠與您聯絡。"</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"立即重新啟用"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"已封鎖 <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"已解除封鎖 <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"無法封鎖緊急服務電話號碼。"</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> 已在封鎖清單中。"</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"使用個人撥號程式撥打電話"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 00c7e14..5e1cad7 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="telecommAppLabel" product="default" msgid="382363169988504520">"Ukuphathwa kwekholi"</string>
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Ukuphathwa kwekholi yefoni"</string>
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Ifoni"</string>
<string name="unknown" msgid="6878797917991465859">"Akwaziwa"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"Ikholi ekulahlekele"</string>
@@ -48,22 +48,4 @@
<string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Guqula uhlelo lwakho lokusebenza oluzenzakalelayo lokudayela?"</string>
<string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Sebenzisa i-<xliff:g id="NEW_APP">%1$s</xliff:g> esikhundleni se-<xliff:g id="CURRENT_APP">%2$s</xliff:g> njengohlelo lwakho lokusebenza oluzenzakalelayo lokokudayela?"</string>
<string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Sebenzisa i-<xliff:g id="NEW_APP">%s</xliff:g> njengohlelo lwakho lokusebenza oluzenzakalelayo lokokudayela?"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"Izinombolo ezivinjiwe"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Ngeke uthole amakholi noma imibhalo kusuka kuzinombolo ezivinjelwe."</string>
- <string name="block_number" msgid="1101252256321306179">"Engeza inombolo"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vulela i-<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Vulela"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Vimba amakholi nemibhalo kusukela ku-"</string>
- <string name="add_blocked_number_hint" msgid="6847675097085433553">"Inombolo yefoni"</string>
- <string name="block_button" msgid="8822290682524373357">"Vimba"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"Umnikazi wedivayisi kuphela ongabuka aphinde aphathe izinombolo ezivinjelwe."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"Vulela"</string>
- <string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Ukuvimble kuvaliwe okwesikhashana"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Ngemuva kokudayela noma ubhalele inombolo yesimo esiphuthumayo, ukuvimbela kuvaliwe ukuqinisekisa amasevisi esimo esiphuthumayo angakwazi ukuxhumana nawe."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Nika amandla manje"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"I-<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ivinjiwe"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"I-<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ayivinjiwe"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Ayikwazi ukuvimba inombolo yesimo esiphuthumayo."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"I-<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> isivele ivinjiwe."</string>
- <string name="toast_personal_call_msg" msgid="5115361633476779723">"Ukusebenzisa okokudayila komuntu siqu ukwenza ikholi"</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 75b8352..b0bcd3c 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,11 +15,11 @@
-->
<resources>
- <color name="theme_color">#0288d1</color>
+ <color name="theme_color">#2a56c6</color>
<color name="dialer_settings_actionbar_text_color">#ffffff</color>
<color name="dialer_settings_actionbar_background_color">@color/theme_color</color>
- <color name="dialer_settings_color_dark">#0277bd</color>
+ <color name="dialer_settings_color_dark">#1c3aa9</color>
<color name="blocked_numbers_divider_color">#e5e5e5</color>
<color name="blocked_numbers_butter_bar_color">#f5f5f5</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e46aa54..11b2d50 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -109,12 +109,13 @@
<!-- Title of dialog used to comfirm whether the user intends to change the default dialer
application [CHAR LIMIT=55]-->
- <string name="change_default_dialer_dialog_title">Change default Dialer app?</string>
- <!-- Text in dialog used to confirm whether or not the user intends to change the default dialer, if a different default dialer has been previously set. -->
- <string name="change_default_dialer_with_previous_app_set_text">Use <xliff:g id="new_app">%1$s</xliff:g> instead of <xliff:g id="current_app">%2$s</xliff:g> as your default dialer app?</string>
- <!-- Text in dialog used to confirm whether or not the user intends to change the default dialer, if a different default dialer has not been previously set. -->
- <string name="change_default_dialer_no_previous_app_set_text">Use <xliff:g id="new_app">%s</xliff:g> as your default dialer app?</string>
-
+ <string name="change_default_dialer_dialog_title">Make <xliff:g id="new_app">%s</xliff:g> your default Phone app?</string>
+ <!-- Confirmation text that a user taps on to change the Default Phone App-->
+ <string name="change_default_dialer_dialog_affirmative">Set Default</string>
+ <!-- Cancel text that a user taps on to not change the Default Phone App-->
+ <string name="change_default_dialer_dialog_negative">Cancel</string>
+ <!-- Warning message indicating what may happen if a user allows a 3rd party app to become the default dialer.-->
+ <string name="change_default_dialer_warning_message"><xliff:g id="new_app">%s</xliff:g> will be able to place and control all aspects of calls. Only apps you trust should be set as the default Phone app.</string>
<!-- Blocked numbers -->
<string name="blocked_numbers">Blocked numbers</string>
diff --git a/src/com/android/server/telecom/Analytics.java b/src/com/android/server/telecom/Analytics.java
index afbb69d..0a15b26 100644
--- a/src/com/android/server/telecom/Analytics.java
+++ b/src/com/android/server/telecom/Analytics.java
@@ -16,44 +16,174 @@
package com.android.server.telecom;
-import android.telecom.ParcelableCallAnalytics;
+import android.telecom.Connection;
import android.telecom.DisconnectCause;
+import android.telecom.Logging.EventManager;
+import android.telecom.ParcelableCallAnalytics;
+import android.telecom.TelecomAnalytics;
+import android.util.Base64;
import android.telecom.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.IndentingPrintWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+
+import static android.telecom.ParcelableCallAnalytics.AnalyticsEvent;
+import static android.telecom.TelecomAnalytics.SessionTiming;
/**
* A class that collects and stores data on how calls are being made, in order to
* aggregate these into useful statistics.
*/
public class Analytics {
- public static class CallInfo {
- void setCallStartTime(long startTime) {
+ 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> 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> 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);
+ }};
+
+ public static final Map<Integer, String> sSessionIdToLogSession = new HashMap<>();
+ static {
+ for (Map.Entry<String, Integer> e : sLogSessionToSessionId.entrySet()) {
+ sSessionIdToLogSession.put(e.getValue(), e.getKey());
+ }
+ }
+
+ public static class CallInfo {
+ public void setCallStartTime(long startTime) {
}
- void setCallEndTime(long endTime) {
+ public void setCallEndTime(long endTime) {
}
- void setCallIsAdditional(boolean isAdditional) {
+ public void setCallIsAdditional(boolean isAdditional) {
}
- void setCallIsInterrupted(boolean isInterrupted) {
+ public void setCallIsInterrupted(boolean isInterrupted) {
}
- void setCallDisconnectCause(DisconnectCause disconnectCause) {
+ public void setCallDisconnectCause(DisconnectCause disconnectCause) {
}
- void addCallTechnology(int callTechnology) {
+ public void addCallTechnology(int callTechnology) {
}
- void setCreatedFromExistingConnection(boolean createdFromExistingConnection) {
+ public void setCreatedFromExistingConnection(boolean createdFromExistingConnection) {
}
- void setCallConnectionService(String connectionServiceName) {
+ public void setCallConnectionService(String connectionServiceName) {
+ }
+
+ public void setCallEvents(EventManager.EventRecord records) {
+ }
+
+ public void setCallIsVideo(boolean isVideo) {
+ }
+
+ public void addVideoEvent(int eventId, int videoState) {
+ }
+
+ public void addInCallService(String serviceName, int type) {
+ }
+
+ public void addCallProperties(int properties) {
}
}
@@ -82,6 +212,15 @@
public String connectionService;
public boolean isEmergency = false;
+ public EventManager.EventRecord callEvents;
+
+ public boolean isVideo = false;
+ public List<TelecomLogClass.VideoEvent> videoEvents;
+ public List<TelecomLogClass.InCallServiceInfo> inCallServiceInfos;
+ public int callProperties = 0;
+
+ private long mTimeOfLastVideoEvent = -1;
+
CallInfoImpl(String callId, int callDirection) {
this.callId = callId;
startTime = 0;
@@ -89,6 +228,8 @@
this.callDirection = callDirection;
callTechnologies = 0;
connectionService = "";
+ videoEvents = new LinkedList<>();
+ inCallServiceInfos = new LinkedList<>();
}
CallInfoImpl(CallInfoImpl other) {
@@ -102,6 +243,10 @@
this.createdFromExistingConnection = other.createdFromExistingConnection;
this.connectionService = other.connectionService;
this.isEmergency = other.isEmergency;
+ this.callEvents = other.callEvents;
+ this.isVideo = other.isVideo;
+ this.videoEvents = other.videoEvents;
+ this.callProperties = other.callProperties;
if (other.callTerminationReason != null) {
this.callTerminationReason = new DisconnectCause(
@@ -166,6 +311,45 @@
}
@Override
+ public void setCallEvents(EventManager.EventRecord records) {
+ this.callEvents = records;
+ }
+
+ @Override
+ public void setCallIsVideo(boolean isVideo) {
+ this.isVideo = isVideo;
+ }
+
+ @Override
+ public void addVideoEvent(int eventId, int videoState) {
+ long timeSinceLastEvent;
+ long currentTime = System.currentTimeMillis();
+ if (mTimeOfLastVideoEvent < 0) {
+ timeSinceLastEvent = -1;
+ } else {
+ timeSinceLastEvent = roundToOneSigFig(currentTime - mTimeOfLastVideoEvent);
+ }
+ mTimeOfLastVideoEvent = currentTime;
+
+ videoEvents.add(new TelecomLogClass.VideoEvent()
+ .setEventName(eventId)
+ .setTimeSinceLastEventMillis(timeSinceLastEvent)
+ .setVideoState(videoState));
+ }
+
+ @Override
+ public void addInCallService(String serviceName, int type) {
+ inCallServiceInfos.add(new TelecomLogClass.InCallServiceInfo()
+ .setInCallServiceName(serviceName)
+ .setInCallServiceType(type));
+ }
+
+ @Override
+ public void addCallProperties(int properties) {
+ this.callProperties |= properties;
+ }
+
+ @Override
public String toString() {
return "{\n"
+ " startTime: " + startTime + '\n'
@@ -176,28 +360,93 @@
+ " callTechnologies: " + getCallTechnologiesAsString() + '\n'
+ " callTerminationReason: " + getCallDisconnectReasonString() + '\n'
+ " connectionService: " + connectionService + '\n'
+ + " isVideoCall: " + isVideo + '\n'
+ + " inCallServices: " + getInCallServicesString() + '\n'
+ + " callProperties: " + Connection.propertiesToStringShort(callProperties)
+ + '\n'
+ "}\n";
}
public ParcelableCallAnalytics toParcelableAnalytics() {
+ TelecomLogClass.CallLog analyticsProto = toProto();
+ List<ParcelableCallAnalytics.AnalyticsEvent> events =
+ Arrays.stream(analyticsProto.callEvents)
+ .map(callEventProto -> new ParcelableCallAnalytics.AnalyticsEvent(
+ callEventProto.getEventName(),
+ callEventProto.getTimeSinceLastEventMillis())
+ ).collect(Collectors.toList());
+
+ List<ParcelableCallAnalytics.EventTiming> timings =
+ Arrays.stream(analyticsProto.callTimings)
+ .map(callTimingProto -> new ParcelableCallAnalytics.EventTiming(
+ callTimingProto.getTimingName(),
+ callTimingProto.getTimeMillis())
+ ).collect(Collectors.toList());
+
+ ParcelableCallAnalytics result = new ParcelableCallAnalytics(
+ // rounds down to nearest 5 minute mark
+ analyticsProto.getStartTime5Min(),
+ analyticsProto.getCallDurationMillis(),
+ analyticsProto.getType(),
+ analyticsProto.getIsAdditionalCall(),
+ analyticsProto.getIsInterrupted(),
+ analyticsProto.getCallTechnologies(),
+ analyticsProto.getCallTerminationCode(),
+ analyticsProto.getIsEmergencyCall(),
+ analyticsProto.connectionService[0],
+ analyticsProto.getIsCreatedFromExistingConnection(),
+ events,
+ timings);
+
+ result.setIsVideoCall(analyticsProto.getIsVideoCall());
+ result.setVideoEvents(Arrays.stream(analyticsProto.videoEvents)
+ .map(videoEventProto -> new ParcelableCallAnalytics.VideoEvent(
+ videoEventProto.getEventName(),
+ videoEventProto.getTimeSinceLastEventMillis(),
+ videoEventProto.getVideoState())
+ ).collect(Collectors.toList()));
+
+ return result;
+ }
+
+ public TelecomLogClass.CallLog toProto() {
+ TelecomLogClass.CallLog result = new TelecomLogClass.CallLog();
+ result.setStartTime5Min(
+ startTime - startTime % ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
+
// Rounds up to the nearest second.
long callDuration = (endTime == 0 || startTime == 0) ? 0 : endTime - startTime;
callDuration += (callDuration % MILLIS_IN_1_SECOND == 0) ?
0 : (MILLIS_IN_1_SECOND - callDuration % MILLIS_IN_1_SECOND);
- return new ParcelableCallAnalytics(
- // rounds down to nearest 5 minute mark
- startTime - startTime % ParcelableCallAnalytics.MILLIS_IN_5_MINUTES,
- callDuration,
- callDirection,
- isAdditionalCall,
- isInterrupted,
- callTechnologies,
- callTerminationReason == null ?
- ParcelableCallAnalytics.STILL_CONNECTED :
- callTerminationReason.getCode(),
- isEmergency,
- connectionService,
- createdFromExistingConnection);
+ result.setCallDurationMillis(callDuration);
+
+ result.setType(callDirection)
+ .setIsAdditionalCall(isAdditionalCall)
+ .setIsInterrupted(isInterrupted)
+ .setCallTechnologies(callTechnologies)
+ .setCallTerminationCode(
+ callTerminationReason == null ?
+ ParcelableCallAnalytics.STILL_CONNECTED :
+ callTerminationReason.getCode())
+ .setIsEmergencyCall(isEmergency)
+ .setIsCreatedFromExistingConnection(createdFromExistingConnection)
+ .setIsEmergencyCall(isEmergency)
+ .setIsVideoCall(isVideo)
+ .setConnectionProperties(callProperties);
+
+ result.connectionService = new String[] {connectionService};
+ if (callEvents != null) {
+ result.callEvents = convertLogEventsToProtoEvents(callEvents.getEvents());
+ result.callTimings = callEvents.extractEventTimings().stream()
+ .map(Analytics::logEventTimingToProtoEventTiming)
+ .toArray(TelecomLogClass.EventTimingEntry[]::new);
+ }
+ result.videoEvents =
+ videoEvents.toArray(new TelecomLogClass.VideoEvent[videoEvents.size()]);
+ result.inCallServices = inCallServiceInfos.toArray(
+ new TelecomLogClass.InCallServiceInfo[inCallServiceInfos.size()]);
+
+ return result;
}
private String getCallDirectionString() {
@@ -232,6 +481,21 @@
return "NOT SET";
}
}
+
+ private String getInCallServicesString() {
+ StringBuilder s = new StringBuilder();
+ s.append("[\n");
+ for (TelecomLogClass.InCallServiceInfo service : inCallServiceInfos) {
+ s.append(" ");
+ s.append("name: ");
+ s.append(service.getInCallServiceName());
+ s.append(" type: ");
+ s.append(service.getInCallServiceType());
+ s.append("\n");
+ }
+ s.append("]");
+ return s.toString();
+ }
}
public static final String TAG = "TelecomAnalytics";
@@ -247,10 +511,30 @@
public static final int SIP_PHONE = ParcelableCallAnalytics.SIP_PHONE;
public static final int THIRD_PARTY_PHONE = ParcelableCallAnalytics.THIRD_PARTY_PHONE;
+ // Constants for video events
+ public static final int SEND_LOCAL_SESSION_MODIFY_REQUEST =
+ ParcelableCallAnalytics.VideoEvent.SEND_LOCAL_SESSION_MODIFY_REQUEST;
+ public static final int SEND_LOCAL_SESSION_MODIFY_RESPONSE =
+ ParcelableCallAnalytics.VideoEvent.SEND_LOCAL_SESSION_MODIFY_RESPONSE;
+ public static final int RECEIVE_REMOTE_SESSION_MODIFY_REQUEST =
+ ParcelableCallAnalytics.VideoEvent.RECEIVE_REMOTE_SESSION_MODIFY_REQUEST;
+ public static final int RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE =
+ ParcelableCallAnalytics.VideoEvent.RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE;
+
public static final long MILLIS_IN_1_SECOND = ParcelableCallAnalytics.MILLIS_IN_1_SECOND;
private static final Object sLock = new Object(); // Coarse lock for all of analytics
private static final Map<String, CallInfoImpl> sCallIdToInfo = new HashMap<>();
+ private static final List<SessionTiming> sSessionTimings = new LinkedList<>();
+
+ public static void addSessionTiming(String sessionName, long time) {
+ if (sLogSessionToSessionId.containsKey(sessionName)) {
+ synchronized (sLock) {
+ sSessionTimings.add(new SessionTiming(sLogSessionToSessionId.get(sessionName),
+ time));
+ }
+ }
+ }
public static CallInfo initiateCallAnalytics(String callId, int direction) {
Log.d(TAG, "Starting analytics for call " + callId);
@@ -261,26 +545,77 @@
return callInfo;
}
- public static ParcelableCallAnalytics[] dumpToParcelableAnalytics() {
- ParcelableCallAnalytics[] result;
+ public static TelecomAnalytics dumpToParcelableAnalytics() {
+ List<ParcelableCallAnalytics> calls = new LinkedList<>();
+ List<SessionTiming> sessionTimings = new LinkedList<>();
synchronized (sLock) {
- result = new ParcelableCallAnalytics[sCallIdToInfo.size()];
- int idx = 0;
- for (CallInfoImpl entry : sCallIdToInfo.values()) {
- result[idx] = entry.toParcelableAnalytics();
- idx++;
- }
+ calls.addAll(sCallIdToInfo.values().stream()
+ .map(CallInfoImpl::toParcelableAnalytics)
+ .collect(Collectors.toList()));
+ sessionTimings.addAll(sSessionTimings);
sCallIdToInfo.clear();
+ sSessionTimings.clear();
}
- return result;
+ return new TelecomAnalytics(sessionTimings, calls);
+ }
+
+ public static void dumpToEncodedProto(PrintWriter pw, String[] args) {
+ TelecomLogClass.TelecomLog result = new TelecomLogClass.TelecomLog();
+
+ synchronized (sLock) {
+ result.callLogs = sCallIdToInfo.values().stream()
+ .map(CallInfoImpl::toProto)
+ .toArray(TelecomLogClass.CallLog[]::new);
+ result.sessionTimings = sSessionTimings.stream()
+ .map(timing -> new TelecomLogClass.LogSessionTiming()
+ .setSessionEntryPoint(timing.getKey())
+ .setTimeMillis(timing.getTime()))
+ .toArray(TelecomLogClass.LogSessionTiming[]::new);
+ if (args.length > 1 && CLEAR_ANALYTICS_ARG.equals(args[1])) {
+ sCallIdToInfo.clear();
+ sSessionTimings.clear();
+ }
+ }
+ String encodedProto = Base64.encodeToString(
+ TelecomLogClass.TelecomLog.toByteArray(result), Base64.DEFAULT);
+ pw.write(encodedProto);
}
public static void dump(IndentingPrintWriter writer) {
synchronized (sLock) {
- for (Map.Entry<String, CallInfoImpl> entry : sCallIdToInfo.entrySet()) {
- writer.printf("Call %s: ", entry.getKey());
- writer.println(entry.getValue().toString());
+ int prefixLength = CallsManager.TELECOM_CALL_ID_PREFIX.length();
+ List<String> callIds = new ArrayList<>(sCallIdToInfo.keySet());
+ // Sort the analytics in increasing order of call IDs
+ try {
+ Collections.sort(callIds, (id1, id2) -> {
+ int i1, i2;
+ try {
+ i1 = Integer.valueOf(id1.substring(prefixLength));
+ } catch (NumberFormatException e) {
+ i1 = Integer.MAX_VALUE;
+ }
+
+ try {
+ i2 = Integer.valueOf(id2.substring(prefixLength));
+ } catch (NumberFormatException e) {
+ i2 = Integer.MAX_VALUE;
+ }
+ return i1 - i2;
+ });
+ } catch (IllegalArgumentException e) {
+ // do nothing, leave the list in a partially sorted state.
}
+
+ for (String callId : callIds) {
+ writer.printf("Call %s: ", callId);
+ writer.println(sCallIdToInfo.get(callId).toString());
+ }
+
+ Map<Integer, Double> averageTimings = SessionTiming.averageTimings(sSessionTimings);
+ averageTimings.entrySet().stream()
+ .filter(e -> sSessionIdToLogSession.containsKey(e.getKey()))
+ .forEach(e -> writer.printf("%s: %.2f\n",
+ sSessionIdToLogSession.get(e.getKey()), e.getValue()));
}
}
@@ -291,8 +626,9 @@
}
/**
- * Returns a deep copy of callIdToInfo that's safe to read/write without synchronization
+ * Returns a copy of callIdToInfo. Use only for testing.
*/
+ @VisibleForTesting
public static Map<String, CallInfoImpl> cloneData() {
synchronized (sLock) {
Map<String, CallInfoImpl> result = new HashMap<>(sCallIdToInfo.size());
@@ -302,4 +638,43 @@
return result;
}
}
+
+ private static TelecomLogClass.Event[] convertLogEventsToProtoEvents(
+ List<EventManager.Event> logEvents) {
+ long timeOfLastEvent = -1;
+ ArrayList<TelecomLogClass.Event> events = new ArrayList<>(logEvents.size());
+ for (EventManager.Event logEvent : logEvents) {
+ if (sLogEventToAnalyticsEvent.containsKey(logEvent.eventId)) {
+ TelecomLogClass.Event event = new TelecomLogClass.Event();
+ event.setEventName(sLogEventToAnalyticsEvent.get(logEvent.eventId));
+ event.setTimeSinceLastEventMillis(roundToOneSigFig(
+ timeOfLastEvent < 0 ? -1 : logEvent.time - timeOfLastEvent));
+ events.add(event);
+ timeOfLastEvent = logEvent.time;
+ }
+ }
+ return events.toArray(new TelecomLogClass.Event[events.size()]);
+ }
+
+ private static TelecomLogClass.EventTimingEntry logEventTimingToProtoEventTiming(
+ EventManager.EventRecord.EventTiming logEventTiming) {
+ int analyticsEventTimingName =
+ sLogEventTimingToAnalyticsEventTiming.containsKey(logEventTiming.name) ?
+ sLogEventTimingToAnalyticsEventTiming.get(logEventTiming.name) :
+ ParcelableCallAnalytics.EventTiming.INVALID;
+ return new TelecomLogClass.EventTimingEntry()
+ .setTimingName(analyticsEventTimingName)
+ .setTimeMillis(logEventTiming.time);
+ }
+
+ @VisibleForTesting
+ public static long roundToOneSigFig(long val) {
+ if (val == 0) {
+ return val;
+ }
+ int logVal = (int) Math.floor(Math.log10(val < 0 ? -val : val));
+ double s = Math.pow(10, logVal);
+ double dec = val / s;
+ return (long) (Math.round(dec) * s);
+ }
}
diff --git a/src/com/android/server/telecom/BluetoothManager.java b/src/com/android/server/telecom/BluetoothManager.java
index 93ec8b1..d043cc5 100644
--- a/src/com/android/server/telecom/BluetoothManager.java
+++ b/src/com/android/server/telecom/BluetoothManager.java
@@ -123,7 +123,7 @@
private BluetoothHeadsetProxy mBluetoothHeadset;
private long mBluetoothConnectionRequestTime;
- private final Runnable mBluetoothConnectionTimeout = new Runnable("BM.cBA") {
+ private final Runnable mBluetoothConnectionTimeout = new Runnable("BM.cBA", null /*lock*/) {
@Override
public void loggedRun() {
if (!isBluetoothAudioConnected()) {
@@ -134,7 +134,7 @@
}
};
- private final Runnable mRetryConnectAudio = new Runnable("BM.rCA") {
+ private final Runnable mRetryConnectAudio = new Runnable("BM.rCA", null /*lock*/) {
@Override
public void loggedRun() {
Log.i(this, "Retrying connecting to bluetooth audio.");
diff --git a/src/com/android/server/telecom/BluetoothPhoneServiceImpl.java b/src/com/android/server/telecom/BluetoothPhoneServiceImpl.java
index 31b2dc5..2173fa5 100644
--- a/src/com/android/server/telecom/BluetoothPhoneServiceImpl.java
+++ b/src/com/android/server/telecom/BluetoothPhoneServiceImpl.java
@@ -31,6 +31,7 @@
import android.telecom.Connection;
import android.telecom.Log;
import android.telecom.PhoneAccount;
+import android.telecom.VideoProfile;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -99,7 +100,7 @@
Log.i(TAG, "BT - answering call");
Call call = mCallsManager.getRingingCall();
if (call != null) {
- mCallsManager.answerCall(call, call.getVideoState());
+ mCallsManager.answerCall(call, VideoProfile.STATE_AUDIO_ONLY);
return true;
}
return false;
@@ -292,11 +293,17 @@
public CallsManagerListener mCallsManagerListener = new CallsManagerListenerBase() {
@Override
public void onCallAdded(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
updateHeadsetWithCallState(false /* force */);
}
@Override
public void onCallRemoved(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
mClccIndexMap.remove(call);
updateHeadsetWithCallState(false /* force */);
}
@@ -319,6 +326,9 @@
@Override
public void onCallStateChanged(Call call, int oldState, int newState) {
+ if (call.isExternalCall()) {
+ return;
+ }
// If a call is being put on hold because of a new connecting call, ignore the
// CONNECTING since the BT state update needs to send out the numHeld = 1 + dialing
// state atomically.
@@ -336,7 +346,8 @@
// state. We can assume that the active call will be automatically held which will
// send another update at which point we will be in the right state.
if (mCallsManager.getActiveCall() != null
- && oldState == CallState.CONNECTING && newState == CallState.DIALING) {
+ && oldState == CallState.CONNECTING &&
+ (newState == CallState.DIALING || newState == CallState.PULLING)) {
return;
}
updateHeadsetWithCallState(false /* force */);
@@ -344,6 +355,9 @@
@Override
public void onIsConferencedChanged(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
/*
* Filter certain onIsConferencedChanged callbacks. Unfortunately this needs to be done
* because conference change events are not atomic and multiple callbacks get fired
@@ -488,6 +502,12 @@
return false;
if (activeCall != null) {
mCallsManager.disconnectCall(activeCall);
+ if (ringingCall != null) {
+ mCallsManager.answerCall(ringingCall, VideoProfile.STATE_AUDIO_ONLY);
+ } else if (heldCall != null) {
+ mCallsManager.unholdCall(heldCall);
+ }
+ return true;
}
if (ringingCall != null) {
mCallsManager.answerCall(ringingCall, ringingCall.getVideoState());
@@ -502,7 +522,7 @@
updateHeadsetWithCallState(true /* force */);
return true;
} else if (ringingCall != null) {
- mCallsManager.answerCall(ringingCall, ringingCall.getVideoState());
+ mCallsManager.answerCall(ringingCall, VideoProfile.STATE_AUDIO_ONLY);
return true;
} else if (heldCall != null) {
// CallsManager will hold any active calls when unhold() is called on a
@@ -812,6 +832,7 @@
case CallState.CONNECTING:
case CallState.SELECT_PHONE_ACCOUNT:
case CallState.DIALING:
+ case CallState.PULLING:
// Yes, this is correctly returning ALERTING.
// "Dialing" for BT means that we have sent information to the service provider
// to place the call but there is no confirmation that the call is going through.
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 2012231..b9b2fda 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -107,7 +107,7 @@
void onExtrasRemoved(Call c, int source, List<String> keys);
void onHandleChanged(Call call);
void onCallerDisplayNameChanged(Call call);
- void onVideoStateChanged(Call call);
+ void onVideoStateChanged(Call call, int previousVideoState, int newVideoState);
void onTargetPhoneAccountChanged(Call call);
void onConnectionManagerPhoneAccountChanged(Call call);
void onPhoneAccountChanged(Call call);
@@ -164,7 +164,7 @@
@Override
public void onCallerDisplayNameChanged(Call call) {}
@Override
- public void onVideoStateChanged(Call call) {}
+ public void onVideoStateChanged(Call call, int previousVideoState, int newVideoState) {}
@Override
public void onTargetPhoneAccountChanged(Call call) {}
@Override
@@ -439,8 +439,6 @@
|| callDirection == CALL_DIRECTION_INCOMING;
maybeLoadCannedSmsResponses();
mAnalytics = new Analytics.CallInfo();
-
- Log.addEvent(this, LogUtils.Events.CREATED);
}
/**
@@ -512,6 +510,7 @@
analyticsDirection = Analytics.UNKNOWN_DIRECTION;
}
mAnalytics = Analytics.initiateCallAnalytics(mId, analyticsDirection);
+ Log.addEvent(this, LogUtils.Events.CREATED);
}
public Analytics.CallInfo getAnalytics() {
@@ -595,6 +594,11 @@
return false;
}
+ // Only Redial a Call in the case of it being an Emergency Call.
+ if(!isEmergencyCall()) {
+ return false;
+ }
+
// Make sure that there are additional connection services to process.
if (mCreateConnectionProcessor == null
|| !mCreateConnectionProcessor.isProcessingComplete()
@@ -695,6 +699,9 @@
case CallState.DIALING:
event = LogUtils.Events.SET_DIALING;
break;
+ case CallState.PULLING:
+ event = LogUtils.Events.SET_PULLING;
+ break;
case CallState.DISCONNECTED:
event = LogUtils.Events.SET_DISCONNECTED;
data = getDisconnectCause();
@@ -1023,10 +1030,18 @@
connectionCapabilities = removeVideoCapabilities(connectionCapabilities);
}
+ int previousCapabilities = mConnectionCapabilities;
mConnectionCapabilities = connectionCapabilities;
for (Listener l : mListeners) {
l.onConnectionCapabilitiesChanged(this);
}
+
+ int xorCaps = previousCapabilities ^ mConnectionCapabilities;
+ Log.addEvent(this, LogUtils.Events.CAPABILITY_CHANGE,
+ "Current: [%s], Removed [%s], Added [%s]",
+ Connection.capabilitiesToStringShort(mConnectionCapabilities),
+ Connection.capabilitiesToStringShort(previousCapabilities & xorCaps),
+ Connection.capabilitiesToStringShort(mConnectionCapabilities & xorCaps));
}
}
@@ -1047,12 +1062,21 @@
if (wasExternal != isExternal) {
Log.v(this, "setConnectionProperties: external call changed isExternal = %b",
isExternal);
-
+ Log.addEvent(this, LogUtils.Events.IS_EXTERNAL, isExternal);
for (Listener l : mListeners) {
l.onExternalCallChanged(this, isExternal);
}
}
+
+ mAnalytics.addCallProperties(mConnectionProperties);
+
+ int xorProps = previousProperties ^ mConnectionProperties;
+ Log.addEvent(this, LogUtils.Events.PROPERTY_CHANGE,
+ "Current: [%s], Removed [%s], Added [%s]",
+ Connection.propertiesToStringShort(mConnectionProperties),
+ Connection.propertiesToStringShort(previousProperties & xorProps),
+ Connection.propertiesToStringShort(mConnectionProperties & xorProps));
}
}
@@ -1323,16 +1347,24 @@
*/
@VisibleForTesting
public void answer(int videoState) {
- Preconditions.checkNotNull(mConnectionService);
-
// Check to verify that the call is still in the ringing state. A call can change states
// between the time the user hits 'answer' and Telecom receives the command.
if (isRinging("answer")) {
+ if (!isVideoCallingSupported() && VideoProfile.isVideo(videoState)) {
+ // Video calling is not supported, yet the InCallService is attempting to answer as
+ // video. We will simply answer as audio-only.
+ videoState = VideoProfile.STATE_AUDIO_ONLY;
+ }
// At this point, we are asking the connection service to answer but we don't assume
// that it will work. Instead, we wait until confirmation from the connectino service
// that the call is in a non-STATE_RINGING state before changing the UI. See
// {@link ConnectionServiceAdapter#setActive} and other set* methods.
- mConnectionService.answer(this, videoState);
+ if (mConnectionService != null) {
+ mConnectionService.answer(this, videoState);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "answer call failed due to null CS callId=%s", getId());
+ }
Log.addEvent(this, LogUtils.Events.REQUEST_ACCEPT);
}
}
@@ -1345,15 +1377,18 @@
*/
@VisibleForTesting
public void reject(boolean rejectWithMessage, String textMessage) {
- Preconditions.checkNotNull(mConnectionService);
-
// Check to verify that the call is still in the ringing state. A call can change states
// between the time the user hits 'reject' and Telecomm receives the command.
if (isRinging("reject")) {
// Ensure video state history tracks video state at time of rejection.
mVideoStateHistory |= mVideoState;
- mConnectionService.reject(this, rejectWithMessage, textMessage);
+ if (mConnectionService != null) {
+ mConnectionService.reject(this, rejectWithMessage, textMessage);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "reject call failed due to null CS callId=%s", getId());
+ }
Log.addEvent(this, LogUtils.Events.REQUEST_REJECT);
}
}
@@ -1362,10 +1397,13 @@
* Puts the call on hold if it is currently active.
*/
void hold() {
- Preconditions.checkNotNull(mConnectionService);
-
if (mState == CallState.ACTIVE) {
- mConnectionService.hold(this);
+ if (mConnectionService != null) {
+ mConnectionService.hold(this);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "hold call failed due to null CS callId=%s", getId());
+ }
Log.addEvent(this, LogUtils.Events.REQUEST_HOLD);
}
}
@@ -1374,10 +1412,13 @@
* Releases the call from hold if it is currently active.
*/
void unhold() {
- Preconditions.checkNotNull(mConnectionService);
-
if (mState == CallState.ON_HOLD) {
- mConnectionService.unhold(this);
+ if (mConnectionService != null) {
+ mConnectionService.unhold(this);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "unhold call failed due to null CS callId=%s", getId());
+ }
Log.addEvent(this, LogUtils.Events.REQUEST_UNHOLD);
}
}
@@ -1431,7 +1472,12 @@
// If the change originated from an InCallService, notify the connection service.
if (source == SOURCE_INCALL_SERVICE) {
- mConnectionService.onExtrasChanged(this, mExtras);
+ if (mConnectionService != null) {
+ mConnectionService.onExtrasChanged(this, mExtras);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "putExtras failed due to null CS callId=%s", getId());
+ }
}
}
@@ -1461,7 +1507,12 @@
// If the change originated from an InCallService, notify the connection service.
if (source == SOURCE_INCALL_SERVICE) {
- mConnectionService.onExtrasChanged(this, mExtras);
+ if (mConnectionService != null) {
+ mConnectionService.onExtrasChanged(this, mExtras);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "removeExtras failed due to null CS callId=%s", getId());
+ }
}
}
@@ -1502,7 +1553,12 @@
}
void postDialContinue(boolean proceed) {
- mConnectionService.onPostDialContinue(this, proceed);
+ if (mConnectionService != null) {
+ mConnectionService.onPostDialContinue(this, proceed);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "postDialContinue failed due to null CS callId=%s", getId());
+ }
}
void conferenceWith(Call otherCall) {
@@ -1566,7 +1622,7 @@
* {@link android.telecom.Connection#PROPERTY_IS_EXTERNAL_CALL} property set.
* <p>
* An external call is a representation of a call which is taking place on another device
- * associated with a PhoneAccount on this device. Issuing a request to pull the external call
+ * associated with a PhoneAccount on this device. Issuing a request to pull the external call
* tells the {@link android.telecom.ConnectionService} that it should move the call from the
* other device to this one. An example of this is the IMS multi-endpoint functionality. A
* user may have two phones with the same phone number. If the user is engaged in an active
@@ -1604,7 +1660,12 @@
* @param extras Associated extras.
*/
public void sendCallEvent(String event, Bundle extras) {
- mConnectionService.sendCallEvent(this, event, extras);
+ if (mConnectionService != null) {
+ mConnectionService.sendCallEvent(this, event, extras);
+ } else {
+ Log.e(this, new NullPointerException(),
+ "sendCallEvent failed due to null CS callId=%s", getId());
+ }
}
void setParentCall(Call parentCall) {
@@ -1786,7 +1847,10 @@
*/
private void setCallerInfo(Uri handle, CallerInfo callerInfo) {
Trace.beginSection("setCallerInfo");
- Preconditions.checkNotNull(callerInfo);
+ if (callerInfo == null) {
+ Log.i(this, "CallerInfo lookup returned null, skipping update");
+ return;
+ }
if (!handle.equals(mHandle)) {
Log.i(this, "setCallerInfo received stale caller info for an old handle. Ignoring.");
@@ -1925,6 +1989,12 @@
* @param videoState The video state for the call.
*/
public void setVideoState(int videoState) {
+ // If the phone account associated with this call does not support video calling, then we
+ // will automatically set the video state to audio-only.
+ if (!isVideoCallingSupported()) {
+ videoState = VideoProfile.STATE_AUDIO_ONLY;
+ }
+
// Track which video states were applicable over the duration of the call.
// Only track the call state when the call is active or disconnected. This ensures we do
// not include the video state when:
@@ -1936,9 +2006,18 @@
mVideoStateHistory = mVideoStateHistory | videoState;
}
+ int previousVideoState = mVideoState;
mVideoState = videoState;
- for (Listener l : mListeners) {
- l.onVideoStateChanged(this);
+ if (mVideoState != previousVideoState) {
+ Log.addEvent(this, LogUtils.Events.VIDEO_STATE_CHANGED,
+ VideoProfile.videoStateToString(videoState));
+ for (Listener l : mListeners) {
+ l.onVideoStateChanged(this, previousVideoState, mVideoState);
+ }
+ }
+
+ if (VideoProfile.isVideo(videoState)) {
+ mAnalytics.setCallIsVideo(true);
}
}
@@ -2010,6 +2089,8 @@
return CallState.ACTIVE;
case Connection.STATE_DIALING:
return CallState.DIALING;
+ case Connection.STATE_PULLING_CALL:
+ return CallState.PULLING;
case Connection.STATE_DISCONNECTED:
return CallState.DISCONNECTED;
case Connection.STATE_HOLDING:
@@ -2086,6 +2167,7 @@
* @param extras The extras.
*/
public void onConnectionEvent(String event, Bundle extras) {
+ Log.addEvent(this, LogUtils.Events.CONNECTION_EVENT, event);
if (Connection.EVENT_ON_HOLD_TONE_START.equals(event)) {
mIsRemotelyHeld = true;
Log.addEvent(this, LogUtils.Events.REMOTELY_HELD);
diff --git a/src/com/android/server/telecom/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
index a0d4781..4a35acc 100644
--- a/src/com/android/server/telecom/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -73,6 +73,7 @@
put(CallState.CONNECTING, mActiveDialingOrConnectingCalls);
put(CallState.ACTIVE, mActiveDialingOrConnectingCalls);
put(CallState.DIALING, mActiveDialingOrConnectingCalls);
+ put(CallState.PULLING, mActiveDialingOrConnectingCalls);
put(CallState.RINGING, mRingingCalls);
put(CallState.ON_HOLD, mHoldingCalls);
}};
@@ -106,7 +107,7 @@
}
updateForegroundCall();
- if (newState == CallState.DISCONNECTED) {
+ if (shouldPlayDisconnectTone(oldState, newState)) {
playToneForDisconnectedCall(call);
}
@@ -178,12 +179,20 @@
*/
@Override
public void onExternalCallChanged(Call call, boolean isExternalCall) {
- if (isExternalCall) {
+ if (isExternalCall) {
Log.d(LOG_TAG, "Removing call which became external ID %s", call.getId());
removeCall(call);
} else if (!isExternalCall) {
Log.d(LOG_TAG, "Adding external call which was pulled with ID %s", call.getId());
addCall(call);
+
+ if (mCallsManager.isSpeakerphoneAutoEnabledForVideoCalls(call.getVideoState())) {
+ // When pulling a video call, automatically enable the speakerphone.
+ Log.d(LOG_TAG, "Switching to speaker because external video call %s was pulled." +
+ call.getId());
+ mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
+ CallAudioRouteStateMachine.SWITCH_SPEAKER);
+ }
}
}
@@ -315,6 +324,25 @@
CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE);
}
+ @Override
+ public void onVideoStateChanged(Call call, int previousVideoState, int newVideoState) {
+ if (call != getForegroundCall()) {
+ Log.d(LOG_TAG, "Ignoring video state change from %s to %s for call %s -- not " +
+ "foreground.", VideoProfile.videoStateToString(previousVideoState),
+ VideoProfile.videoStateToString(newVideoState), call.getId());
+ return;
+ }
+
+ if (!VideoProfile.isVideo(previousVideoState) &&
+ mCallsManager.isSpeakerphoneAutoEnabledForVideoCalls(newVideoState)) {
+ Log.d(LOG_TAG, "Switching to speaker because call %s transitioned video state from %s" +
+ " to %s", call.getId(), VideoProfile.videoStateToString(previousVideoState),
+ VideoProfile.videoStateToString(newVideoState));
+ mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
+ CallAudioRouteStateMachine.SWITCH_SPEAKER);
+ }
+ }
+
public CallAudioState getCallAudioState() {
return mCallAudioRouteStateMachine.getCurrentCallAudioState();
}
@@ -395,8 +423,8 @@
}
@VisibleForTesting
- public void startRinging() {
- mRinger.startRinging(mForegroundCall);
+ public boolean startRinging() {
+ return mRinger.startRinging(mForegroundCall);
}
@VisibleForTesting
@@ -476,9 +504,13 @@
case CallState.ON_HOLD:
onCallLeavingHold();
break;
+ case CallState.PULLING:
+ onCallLeavingActiveDialingOrConnecting();
+ break;
case CallState.DIALING:
stopRingbackForCall(call);
onCallLeavingActiveDialingOrConnecting();
+ break;
}
}
@@ -494,6 +526,9 @@
case CallState.ON_HOLD:
onCallEnteringHold();
break;
+ case CallState.PULLING:
+ onCallEnteringActiveDialingOrConnecting();
+ break;
case CallState.DIALING:
onCallEnteringActiveDialingOrConnecting();
playRingbackForCall(call);
@@ -649,7 +684,7 @@
if (shouldPlayHoldTone()) {
if (mHoldTonePlayer == null) {
mHoldTonePlayer = mPlayerFactory.createPlayer(InCallTonePlayer.TONE_CALL_WAITING);
- mHoldTonePlayer.start();
+ mHoldTonePlayer.startTone();
}
} else {
if (mHoldTonePlayer != null) {
@@ -703,6 +738,15 @@
}
}
+ private boolean shouldPlayDisconnectTone(int oldState, int newState) {
+ if (newState != CallState.DISCONNECTED) {
+ return false;
+ }
+ return oldState == CallState.ACTIVE ||
+ oldState == CallState.DIALING ||
+ oldState == CallState.ON_HOLD;
+ }
+
@VisibleForTesting
public Set<Call> getTrackedCalls() {
return mCalls;
diff --git a/src/com/android/server/telecom/CallAudioModeStateMachine.java b/src/com/android/server/telecom/CallAudioModeStateMachine.java
index 2e3c5bd..7121a53 100644
--- a/src/com/android/server/telecom/CallAudioModeStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioModeStateMachine.java
@@ -204,19 +204,22 @@
@Override
public void enter() {
Log.i(LOG_TAG, "Audio focus entering RINGING state");
- mAudioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
- AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
- if (mMostRecentMode == AudioManager.MODE_IN_CALL) {
- // Preserving behavior from the old CallAudioManager.
- Log.i(LOG_TAG, "Transition from IN_CALL -> RINGTONE."
- + " Resetting to NORMAL first.");
- mAudioManager.setMode(AudioManager.MODE_NORMAL);
+ if (mCallAudioManager.startRinging()) {
+ mAudioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+ if (mMostRecentMode == AudioManager.MODE_IN_CALL) {
+ // Preserving behavior from the old CallAudioManager.
+ Log.i(LOG_TAG, "Transition from IN_CALL -> RINGTONE."
+ + " Resetting to NORMAL first.");
+ mAudioManager.setMode(AudioManager.MODE_NORMAL);
+ }
+ mAudioManager.setMode(AudioManager.MODE_RINGTONE);
+ mCallAudioManager.setCallAudioRouteFocusState(CallAudioRouteStateMachine.RINGING_FOCUS);
+ } else {
+ Log.i(LOG_TAG, "Entering RINGING but not acquiring focus -- silent ringtone");
}
- mAudioManager.setMode(AudioManager.MODE_RINGTONE);
mCallAudioManager.stopCallWaiting();
- mCallAudioManager.startRinging();
- mCallAudioManager.setCallAudioRouteFocusState(CallAudioRouteStateMachine.RINGING_FOCUS);
}
@Override
@@ -528,4 +531,4 @@
return mUnfocusedState;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
index e3d459c..28b3ec5 100644
--- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
@@ -18,7 +18,11 @@
import android.app.ActivityManagerNative;
+import android.app.NotificationManager;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.UserInfo;
import android.media.AudioManager;
import android.media.IAudioService;
@@ -110,6 +114,13 @@
public static final int ACTIVE_FOCUS = 2;
public static final int RINGING_FOCUS = 3;
+ private static final SparseArray<String> AUDIO_ROUTE_TO_LOG_EVENT = new SparseArray<String>() {{
+ put(CallAudioState.ROUTE_BLUETOOTH, LogUtils.Events.AUDIO_ROUTE_BT);
+ put(CallAudioState.ROUTE_EARPIECE, LogUtils.Events.AUDIO_ROUTE_EARPIECE);
+ put(CallAudioState.ROUTE_SPEAKER, LogUtils.Events.AUDIO_ROUTE_SPEAKER);
+ put(CallAudioState.ROUTE_WIRED_HEADSET, LogUtils.Events.AUDIO_ROUTE_HEADSET);
+ }};
+
private static final SparseArray<String> MESSAGE_CODE_TO_NAME = new SparseArray<String>() {{
put(CONNECT_WIRED_HEADSET, "CONNECT_WIRED_HEADSET");
put(DISCONNECT_WIRED_HEADSET, "DISCONNECT_WIRED_HEADSET");
@@ -142,6 +153,34 @@
put(RUN_RUNNABLE, "RUN_RUNNABLE");
}};
+ /**
+ * BroadcastReceiver used to track changes in the notification interruption filter. This
+ * ensures changes to the notification interruption filter made by the user during a call are
+ * respected when restoring the notification interruption filter state.
+ */
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.startSession("CARSM.oR");
+ try {
+ String action = intent.getAction();
+
+ if (action.equals(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED)) {
+ if (mAreNotificationSuppressed) {
+ // If we've already set the interruption filter, and the user changes it to
+ // something other than INTERRUPTION_FILTER_ALARMS, assume we will no longer
+ // try to change it back if the audio route changes.
+ mAreNotificationSuppressed =
+ mInterruptionFilterProxy.getCurrentInterruptionFilter()
+ == NotificationManager.INTERRUPTION_FILTER_ALARMS;
+ }
+ }
+ } finally {
+ Log.endSession();
+ }
+ }
+ };
+
private static final String ACTIVE_EARPIECE_ROUTE_NAME = "ActiveEarpieceRoute";
private static final String ACTIVE_BLUETOOTH_ROUTE_NAME = "ActiveBluetoothRoute";
private static final String ACTIVE_SPEAKER_ROUTE_NAME = "ActiveSpeakerRoute";
@@ -245,6 +284,9 @@
super.enter();
setSpeakerphoneOn(false);
setBluetoothOn(false);
+ if (mAudioFocusType == ACTIVE_FOCUS) {
+ setNotificationsSuppressed(true);
+ }
CallAudioState newState = new CallAudioState(mIsMuted, ROUTE_EARPIECE,
mAvailableRoutes);
setSystemAudioState(newState);
@@ -252,6 +294,12 @@
}
@Override
+ public void exit() {
+ super.exit();
+ setNotificationsSuppressed(false);
+ }
+
+ @Override
public void updateSystemAudioState() {
updateInternalCallAudioState();
setSystemAudioState(mCurrentCallAudioState);
@@ -289,6 +337,10 @@
transitionTo(mActiveSpeakerRoute);
return HANDLED;
case SWITCH_FOCUS:
+ if (msg.arg1 == ACTIVE_FOCUS) {
+ setNotificationsSuppressed(true);
+ }
+
if (msg.arg1 == NO_FOCUS) {
reinitialize();
}
@@ -1066,6 +1118,7 @@
private int mAudioFocusType;
private boolean mWasOnSpeaker;
private boolean mIsMuted;
+ private boolean mAreNotificationSuppressed = false;
private final Context mContext;
private final CallsManager mCallsManager;
@@ -1074,6 +1127,7 @@
private final WiredHeadsetManager mWiredHeadsetManager;
private final StatusBarNotifier mStatusBarNotifier;
private final CallAudioManager.AudioServiceFactory mAudioServiceFactory;
+ private final InterruptionFilterProxy mInterruptionFilterProxy;
private final boolean mDoesDeviceSupportEarpieceRoute;
private final TelecomSystem.SyncRoot mLock;
private boolean mHasUserExplicitlyLeftBluetooth = false;
@@ -1093,6 +1147,7 @@
WiredHeadsetManager wiredHeadsetManager,
StatusBarNotifier statusBarNotifier,
CallAudioManager.AudioServiceFactory audioServiceFactory,
+ InterruptionFilterProxy interruptionFilterProxy,
boolean doesDeviceSupportEarpieceRoute) {
super(NAME);
addState(mActiveEarpieceRoute);
@@ -1112,6 +1167,11 @@
mWiredHeadsetManager = wiredHeadsetManager;
mStatusBarNotifier = statusBarNotifier;
mAudioServiceFactory = audioServiceFactory;
+ mInterruptionFilterProxy = interruptionFilterProxy;
+ // Register for misc other intent broadcasts.
+ IntentFilter intentFilter =
+ new IntentFilter(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED);
+ context.registerReceiver(mReceiver, intentFilter);
mDoesDeviceSupportEarpieceRoute = doesDeviceSupportEarpieceRoute;
mLock = callsManager.getLock();
@@ -1219,10 +1279,54 @@
quitNow();
}
+ /**
+ * Sets whether notifications should be suppressed or not. Used when in a call to ensure the
+ * device will not vibrate due to notifications.
+ * Alarm-only filtering is activated when
+ *
+ * @param on {@code true} when notification suppression should be activated, {@code false} when
+ * it should be deactivated.
+ */
+ private void setNotificationsSuppressed(boolean on) {
+ if (mInterruptionFilterProxy == null) {
+ return;
+ }
+
+ Log.i(this, "setNotificationsSuppressed: on=%s; suppressed=%s", (on ? "yes" : "no"),
+ (mAreNotificationSuppressed ? "yes" : "no"));
+ if (on) {
+ if (!mAreNotificationSuppressed) {
+ // Enabling suppression of notifications.
+ int interruptionFilter = mInterruptionFilterProxy.getCurrentInterruptionFilter();
+ if (interruptionFilter == NotificationManager.INTERRUPTION_FILTER_ALL) {
+ // No interruption filter is specified, so suppress notifications by setting the
+ // current filter to alarms-only.
+ mAreNotificationSuppressed = true;
+ mInterruptionFilterProxy.setInterruptionFilter(
+ NotificationManager.INTERRUPTION_FILTER_ALARMS);
+ } else {
+ // Interruption filter is already chosen by the user, so do not attempt to change
+ // it.
+ mAreNotificationSuppressed = false;
+ }
+ }
+ } else {
+ // Disabling suppression of notifications.
+ if (mAreNotificationSuppressed) {
+ // We have implemented the alarms-only policy and the user has not changed it since
+ // we originally set it, so reset the notification filter.
+ mInterruptionFilterProxy.setInterruptionFilter(
+ NotificationManager.INTERRUPTION_FILTER_ALL);
+ }
+ mAreNotificationSuppressed = false;
+ }
+ }
+
private void setSpeakerphoneOn(boolean on) {
if (mAudioManager.isSpeakerphoneOn() != on) {
Log.i(this, "turning speaker phone %s", on);
mAudioManager.setSpeakerphoneOn(on);
+ mStatusBarNotifier.notifySpeakerphone(on);
}
}
@@ -1242,8 +1346,8 @@
private void setMuteOn(boolean mute) {
mIsMuted = mute;
- Log.addEvent(mCallsManager.getForegroundCall(), LogUtils.Events.MUTE,
- mute ? "on" : "off");
+ Log.addEvent(mCallsManager.getForegroundCall(), mute ? LogUtils.Events.MUTE : LogUtils.Events.UNMUTE);
+
if (mute != mAudioManager.isMicrophoneMute() && isInActiveState()) {
IAudioService audio = mAudioServiceFactory.getAudioService();
Log.i(this, "changing microphone mute state to: %b [serviceIsNull=%b]",
@@ -1257,6 +1361,7 @@
// user and not the current foreground, which we want to avoid.
audio.setMicrophoneMute(
mute, mContext.getOpPackageName(), getCurrentUserId());
+ mStatusBarNotifier.notifyMute(mute);
} catch (RemoteException e) {
Log.e(this, e, "Remote exception while toggling mute.");
@@ -1298,8 +1403,9 @@
newCallAudioState);
if (force || !newCallAudioState.equals(mLastKnownCallAudioState)) {
if (newCallAudioState.getRoute() != mLastKnownCallAudioState.getRoute()) {
- Log.addEvent(mCallsManager.getForegroundCall(), LogUtils.Events.AUDIO_ROUTE,
- CallAudioState.audioRouteToString(newCallAudioState.getRoute()));
+ Log.addEvent(mCallsManager.getForegroundCall(),
+ AUDIO_ROUTE_TO_LOG_EVENT.get(newCallAudioState.getRoute(),
+ LogUtils.Events.AUDIO_ROUTE));
}
mCallsManager.onCallAudioStateChanged(mLastKnownCallAudioState, newCallAudioState);
@@ -1424,6 +1530,7 @@
setMuteOn(mIsMuted);
mWasOnSpeaker = false;
mHasUserExplicitlyLeftBluetooth = false;
+ mLastKnownCallAudioState = initState;
transitionTo(mRouteCodeToQuiescentState.get(initState.getRoute()));
}
}
diff --git a/src/com/android/server/telecom/CallLogManager.java b/src/com/android/server/telecom/CallLogManager.java
index 5fc7062..d89f54a 100755
--- a/src/com/android/server/telecom/CallLogManager.java
+++ b/src/com/android/server/telecom/CallLogManager.java
@@ -145,10 +145,12 @@
// 1) It was not in the "choose account" phase when disconnected
// 2) It is a conference call
// 3) Call was not explicitly canceled
+ // 4) Call is not an external call
if (isNewlyDisconnected &&
(oldState != CallState.SELECT_PHONE_ACCOUNT &&
!call.isConference() &&
- !isCallCanceled)) {
+ !isCallCanceled) &&
+ !call.isExternalCall()) {
int type;
if (!call.isIncoming()) {
type = Calls.OUTGOING_TYPE;
@@ -215,7 +217,8 @@
Long callDataUsage = call.getCallDataUsage() == Call.DATA_USAGE_NOT_SET ? null :
call.getCallDataUsage();
- int callFeatures = getCallFeatures(call.getVideoStateHistory());
+ int callFeatures = getCallFeatures(call.getVideoStateHistory(),
+ call.getDisconnectCause().getCode() == DisconnectCause.CALL_PULLED);
logCall(call.getCallerInfo(), logNumber, call.getPostDialDigits(), formattedViaNumber,
call.getHandlePresentation(), callLogType, callFeatures, accountHandle,
creationTime, age, callDataUsage, call.isEmergencyCall(), call.getInitiatingUser(),
@@ -288,13 +291,18 @@
* Based on the video state of the call, determines the call features applicable for the call.
*
* @param videoState The video state.
+ * @param isPulledCall {@code true} if this call was pulled to another device.
* @return The call features.
*/
- private static int getCallFeatures(int videoState) {
+ private static int getCallFeatures(int videoState, boolean isPulledCall) {
+ int features = 0;
if (VideoProfile.isVideo(videoState)) {
- return Calls.FEATURES_VIDEO;
+ features |= Calls.FEATURES_VIDEO;
}
- return 0;
+ if (isPulledCall) {
+ features |= Calls.FEATURES_PULLED_EXTERNALLY;
+ }
+ return features;
}
/**
diff --git a/src/com/android/server/telecom/CallState.java b/src/com/android/server/telecom/CallState.java
index 0d2ca48..0aa928f 100644
--- a/src/com/android/server/telecom/CallState.java
+++ b/src/com/android/server/telecom/CallState.java
@@ -103,6 +103,15 @@
*/
public static final int DISCONNECTING = 9;
+ /**
+ * Indicates that the call is in the process of being pulled to the local device.
+ * <p>
+ * This state should only be set on a call with
+ * {@link android.telecom.Connection#PROPERTY_IS_EXTERNAL_CALL} and
+ * {@link android.telecom.Connection#CAPABILITY_CAN_PULL_CALL}.
+ */
+ public static final int PULLING = 10;
+
public static String toString(int callState) {
switch (callState) {
case NEW:
@@ -125,6 +134,8 @@
return "ABORTED";
case DISCONNECTING:
return "DISCONNECTING";
+ case PULLING:
+ return "PULLING";
default:
return "UNKNOWN";
}
diff --git a/src/com/android/server/telecom/CallerInfoLookupHelper.java b/src/com/android/server/telecom/CallerInfoLookupHelper.java
index 9ccae0e..f67a7f7 100644
--- a/src/com/android/server/telecom/CallerInfoLookupHelper.java
+++ b/src/com/android/server/telecom/CallerInfoLookupHelper.java
@@ -16,6 +16,7 @@
package com.android.server.telecom;
+import android.annotation.Nullable;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
@@ -44,7 +45,7 @@
* @param info
* @return true if the value should be cached, false otherwise.
*/
- void onCallerInfoQueryComplete(Uri handle, CallerInfo info);
+ void onCallerInfoQueryComplete(Uri handle, @Nullable CallerInfo info);
void onContactPhotoQueryComplete(Uri handle, CallerInfo info);
}
@@ -57,6 +58,7 @@
listeners = new LinkedList<>();
}
}
+
private final Map<Uri, CallerInfoQueryInfo> mQueryEntries = new HashMap<>();
private final CallerInfoAsyncQueryFactory mCallerInfoAsyncQueryFactory;
@@ -77,11 +79,13 @@
public void startLookup(final Uri handle, OnQueryCompleteListener listener) {
if (handle == null) {
+ listener.onCallerInfoQueryComplete(handle, null);
return;
}
final String number = handle.getSchemeSpecificPart();
if (TextUtils.isEmpty(number)) {
+ listener.onCallerInfoQueryComplete(handle, null);
return;
}
@@ -96,7 +100,7 @@
info.callerInfo.cachedPhotoIcon != null)) {
listener.onContactPhotoQueryComplete(handle, info.callerInfo);
} else if (info.imageQueryPending) {
- Log.i(this, "There is a previously incomplete query for handle %s. " +
+ Log.i(this, "There is a pending photo query for handle %s. " +
"Adding to listeners for this query.", Log.piiHandle(handle));
info.listeners.add(listener);
}
@@ -113,7 +117,7 @@
}
}
- mHandler.post(new Runnable("CILH.sL") {
+ mHandler.post(new Runnable("CILH.sL", mLock) {
@Override
public void loggedRun() {
Session continuedSession = Log.createSubsession();
@@ -140,11 +144,15 @@
Log.continueSession((Session) cookie, "CILH.oQC");
try {
if (mQueryEntries.containsKey(handle)) {
+ Log.i(CallerInfoLookupHelper.this, "CI query for handle %s has completed;" +
+ " notifying all listeners.", Log.piiHandle(handle));
CallerInfoQueryInfo info = mQueryEntries.get(handle);
for (OnQueryCompleteListener l : info.listeners) {
l.onCallerInfoQueryComplete(handle, ci);
}
if (ci.contactDisplayPhotoUri == null) {
+ Log.i(CallerInfoLookupHelper.this, "There is no photo for this " +
+ "contact, skipping photo query");
mQueryEntries.remove(handle);
} else {
info.callerInfo = ci;
@@ -153,7 +161,7 @@
}
} else {
Log.i(CallerInfoLookupHelper.this, "CI query for handle %s has completed," +
- " but there are no listeners left.", handle);
+ " but there are no listeners left.", Log.piiHandle(handle));
}
} finally {
Log.endSession();
@@ -163,7 +171,7 @@
}
private void startPhotoLookup(final Uri handle, final Uri contactPhotoUri) {
- mHandler.post(new Runnable("CILH.sPL") {
+ mHandler.post(new Runnable("CILH.sPL", mLock) {
@Override
public void loggedRun() {
Session continuedSession = Log.createSubsession();
@@ -190,6 +198,7 @@
if (info.callerInfo == null) {
Log.w(CallerInfoLookupHelper.this, "Photo query finished, but the " +
"CallerInfo object previously looked up was not cached.");
+ mQueryEntries.remove(handle);
return;
}
info.callerInfo.cachedPhoto = photo;
@@ -200,7 +209,8 @@
mQueryEntries.remove(handle);
} else {
Log.i(CallerInfoLookupHelper.this, "Photo query for handle %s has" +
- " completed, but there are no listeners left.", handle);
+ " completed, but there are no listeners left.",
+ Log.piiHandle(handle));
}
} finally {
Log.endSession();
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 1055d5b..b5c99bc 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -17,6 +17,7 @@
package com.android.server.telecom;
import android.app.ActivityManager;
+import android.app.NotificationManager;
import android.content.Context;
import android.content.pm.UserInfo;
import android.content.Intent;
@@ -71,6 +72,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -104,7 +106,7 @@
void onRingbackRequested(Call call, boolean ringback);
void onIsConferencedChanged(Call call);
void onIsVoipAudioModeChanged(Call call);
- void onVideoStateChanged(Call call);
+ void onVideoStateChanged(Call call, int previousVideoState, int newVideoState);
void onCanAddCallChanged(boolean canAddCall);
void onSessionModifyRequestReceived(Call call, VideoProfile videoProfile);
void onHoldToneRequested(Call call);
@@ -121,11 +123,13 @@
private static final int MAXIMUM_TOP_LEVEL_CALLS = 2;
private static final int[] OUTGOING_CALL_STATES =
- {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING};
+ {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING,
+ CallState.PULLING};
private static final int[] LIVE_CALL_STATES =
{CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING,
- CallState.ACTIVE};
+ CallState.PULLING, CallState.ACTIVE};
+
public static final String TELECOM_CALL_ID_PREFIX = "TC@";
// Maps call technologies in PhoneConstants to those in Analytics.
@@ -192,6 +196,7 @@
private final DefaultDialerManagerAdapter mDefaultDialerManagerAdapter;
private final Timeouts.Adapter mTimeoutsAdapter;
private final PhoneNumberUtilsAdapter mPhoneNumberUtilsAdapter;
+ private final NotificationManager mNotificationManager;
private final Set<Call> mLocallyDisconnectingCalls = new HashSet<>();
private final Set<Call> mPendingCallsToDisconnect = new HashSet<>();
/* Handler tied to thread in which CallManager was initialized. */
@@ -223,7 +228,8 @@
DefaultDialerManagerAdapter defaultDialerAdapter,
Timeouts.Adapter timeoutsAdapter,
AsyncRingtonePlayer asyncRingtonePlayer,
- PhoneNumberUtilsAdapter phoneNumberUtilsAdapter) {
+ PhoneNumberUtilsAdapter phoneNumberUtilsAdapter,
+ InterruptionFilterProxy interruptionFilterProxy) {
mContext = context;
mLock = lock;
mPhoneNumberUtilsAdapter = phoneNumberUtilsAdapter;
@@ -241,6 +247,8 @@
mContactsAsyncHelper, mLock);
mDtmfLocalTonePlayer = new DtmfLocalTonePlayer();
+ mNotificationManager = (NotificationManager) context.getSystemService(
+ Context.NOTIFICATION_SERVICE);
CallAudioRouteStateMachine callAudioRouteStateMachine = new CallAudioRouteStateMachine(
context,
this,
@@ -248,6 +256,7 @@
wiredHeadsetManager,
statusBarNotifier,
audioServiceFactory,
+ interruptionFilterProxy,
CallAudioRouteStateMachine.doesDeviceSupportEarpieceRoute()
);
callAudioRouteStateMachine.initialize();
@@ -266,7 +275,7 @@
RingtoneFactory ringtoneFactory = new RingtoneFactory(this, context);
SystemVibrator systemVibrator = new SystemVibrator(context);
mInCallController = new InCallController(
- context, mLock, this, systemStateProvider, defaultDialerAdapter);
+ context, mLock, this, systemStateProvider, defaultDialerAdapter, mTimeoutsAdapter);
mRinger = new Ringer(playerFactory, context, systemSettingsUtil, asyncRingtonePlayer,
ringtoneFactory, systemVibrator, mInCallController);
@@ -347,6 +356,12 @@
@Override
public void onSuccessfulIncomingCall(Call incomingCall) {
Log.d(this, "onSuccessfulIncomingCall");
+ if (incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE)) {
+ Log.i(this, "Skipping call filtering due to ECBM");
+ onCallFilteringComplete(incomingCall, new CallFilteringResult(true, false, true, true));
+ return;
+ }
+
List<IncomingCallFilter.CallFilter> filters = new ArrayList<>();
filters.add(new DirectToVoicemailCallFilter(mCallerInfoLookupHelper));
filters.add(new AsyncBlockCheckFilter(mContext, new BlockCheckerAdapter()));
@@ -368,6 +383,7 @@
result.shouldAllowCall ? "successful incoming call" : "blocking call");
} else {
Log.i(this, "onCallFilteringCompleted: call already disconnected.");
+ return;
}
if (result.shouldAllowCall) {
@@ -446,15 +462,12 @@
mDtmfLocalTonePlayer.playTone(call, nextChar);
- // TODO: Create a LockedRunnable class that does the synchronization automatically.
- mStopTone = new Runnable("CM.oPDC") {
+ mStopTone = new Runnable("CM.oPDC", mLock) {
@Override
public void loggedRun() {
- synchronized (mLock) {
- // Set a timeout to stop the tone in case there isn't another tone to
- // follow.
- mDtmfLocalTonePlayer.stopTone(call);
- }
+ // Set a timeout to stop the tone in case there isn't another tone to
+ // follow.
+ mDtmfLocalTonePlayer.stopTone(call);
}
};
mHandler.postDelayed(mStopTone.prepare(),
@@ -476,7 +489,7 @@
@Override
public void onParentChanged(Call call) {
// parent-child relationship affects which call should be foreground, so do an update.
- updateCallsManagerState();
+ updateCanAddCall();
for (CallsManagerListener listener : mListeners) {
listener.onIsConferencedChanged(call);
}
@@ -485,7 +498,7 @@
@Override
public void onChildrenChanged(Call call) {
// parent-child relationship affects which call should be foreground, so do an update.
- updateCallsManagerState();
+ updateCanAddCall();
for (CallsManagerListener listener : mListeners) {
listener.onIsConferencedChanged(call);
}
@@ -499,23 +512,21 @@
}
@Override
- public void onVideoStateChanged(Call call) {
+ public void onVideoStateChanged(Call call, int previousVideoState, int newVideoState) {
for (CallsManagerListener listener : mListeners) {
- listener.onVideoStateChanged(call);
+ listener.onVideoStateChanged(call, previousVideoState, newVideoState);
}
}
@Override
public boolean onCanceledViaNewOutgoingCallBroadcast(final Call call) {
mPendingCallsToDisconnect.add(call);
- mHandler.postDelayed(new Runnable("CM.oCVNOCB") {
+ mHandler.postDelayed(new Runnable("CM.oCVNOCB", mLock) {
@Override
public void loggedRun() {
- synchronized (mLock) {
- if (mPendingCallsToDisconnect.remove(call)) {
- Log.i(this, "Delayed disconnection of call: %s", call);
- call.disconnect();
- }
+ if (mPendingCallsToDisconnect.remove(call)) {
+ Log.i(this, "Delayed disconnection of call: %s", call);
+ call.disconnect();
}
}
}.prepare(), Timeouts.getNewOutgoingCallCancelMillis(mContext.getContentResolver()));
@@ -630,7 +641,8 @@
return false;
}
- CallAudioState getAudioState() {
+ @VisibleForTesting
+ public CallAudioState getAudioState() {
return mCallAudioManager.getCallAudioState();
}
@@ -742,9 +754,10 @@
// Check to see if we can reuse any of the calls that are waiting to disconnect.
// See {@link Call#abort} and {@link #onCanceledViaNewOutgoingCall} for more information.
Call reusedCall = null;
- for (Call pendingCall : mPendingCallsToDisconnect) {
+ for (Iterator<Call> callIter = mPendingCallsToDisconnect.iterator(); callIter.hasNext();) {
+ Call pendingCall = callIter.next();
if (reusedCall == null && areHandlesEqual(pendingCall.getHandle(), handle)) {
- mPendingCallsToDisconnect.remove(pendingCall);
+ callIter.remove();
Log.i(this, "Reusing disconnected call %s", pendingCall);
reusedCall = pendingCall;
} else {
@@ -788,10 +801,10 @@
false /* forceAttachToExistingConnection */,
false /* isConference */
);
- call.setInitiatingUser(initiatingUser);
-
call.initAnalytics();
+ call.setInitiatingUser(initiatingUser);
+
isReusedCall = false;
}
@@ -803,11 +816,13 @@
// If this is an emergency video call, we need to check if the phone account supports
// emergency video calling.
- if (call.isEmergencyCall() && VideoProfile.isVideo(videoState)) {
+ // Also, ensure we don't try to place an outgoing call with video if video is not
+ // supported.
+ if (VideoProfile.isVideo(videoState)) {
PhoneAccount account =
mPhoneAccountRegistrar.getPhoneAccount(phoneAccountHandle, initiatingUser);
- if (account != null &&
+ if (call.isEmergencyCall() && account != null &&
!account.hasCapabilities(PhoneAccount.CAPABILITY_EMERGENCY_VIDEO_CALLING)) {
// Phone account doesn't support emergency video calling, so fallback to
// audio-only now to prevent the InCall UI from setting up video surfaces
@@ -815,6 +830,12 @@
Log.i(this, "startOutgoingCall - emergency video calls not supported; " +
"falling back to audio-only");
videoState = VideoProfile.STATE_AUDIO_ONLY;
+ } else if (account != null &&
+ !account.hasCapabilities(PhoneAccount.CAPABILITY_VIDEO_CALLING)) {
+ // Phone account doesn't support video calling, so fallback to audio-only.
+ Log.i(this, "startOutgoingCall - video calls not supported; fallback to " +
+ "audio-only.");
+ videoState = VideoProfile.STATE_AUDIO_ONLY;
}
}
@@ -833,7 +854,7 @@
}
}
- if (phoneAccountHandle == null && accounts.size() > 0 && !call.isEmergencyCall()) {
+ if (phoneAccountHandle == null && accounts.size() > 0) {
// No preset account, check if default exists that supports the URI scheme for the
// handle and verify it can be used.
if(accounts.size() > 1) {
@@ -932,26 +953,24 @@
final boolean useSpeakerWhenDocked = mContext.getResources().getBoolean(
R.bool.use_speaker_when_docked);
- final boolean isDocked = mDockManager.isDocked();
- final boolean useSpeakerForVideoCall = isSpeakerphoneAutoEnabled(videoState);
+ final boolean useSpeakerForDock = isSpeakerphoneEnabledForDock();
+ final boolean useSpeakerForVideoCall = isSpeakerphoneAutoEnabledForVideoCalls(videoState);
// Auto-enable speakerphone if the originating intent specified to do so, if the call
// is a video call, of if using speaker when docked
call.setStartWithSpeakerphoneOn(speakerphoneOn || useSpeakerForVideoCall
- || (useSpeakerWhenDocked && isDocked));
+ || (useSpeakerWhenDocked && useSpeakerForDock));
call.setVideoState(videoState);
if (speakerphoneOn) {
Log.i(this, "%s Starting with speakerphone as requested", call);
- } else if (useSpeakerWhenDocked && useSpeakerWhenDocked) {
+ } else if (useSpeakerWhenDocked && useSpeakerForDock) {
Log.i(this, "%s Starting with speakerphone because car is docked.", call);
} else if (useSpeakerForVideoCall) {
Log.i(this, "%s Starting with speakerphone because its a video call.", call);
}
if (call.isEmergencyCall()) {
- // Emergency -- CreateConnectionProcessor will choose accounts automatically
- call.setTargetPhoneAccount(null);
new AsyncEmergencyContactNotifier(mContext).execute();
}
@@ -1001,7 +1020,8 @@
// STATE_DIALING, put it on hold before answering the call.
if (foregroundCall != null && foregroundCall != call &&
(foregroundCall.isActive() ||
- foregroundCall.getState() == CallState.DIALING)) {
+ foregroundCall.getState() == CallState.DIALING ||
+ foregroundCall.getState() == CallState.PULLING)) {
if (0 == (foregroundCall.getConnectionCapabilities()
& Connection.CAPABILITY_HOLD)) {
// This call does not support hold. If it is from a different connection
@@ -1034,7 +1054,7 @@
// We do not update the UI until we get confirmation of the answer() through
// {@link #markCallAsActive}.
call.answer(videoState);
- if (isSpeakerphoneAutoEnabled(videoState)) {
+ if (isSpeakerphoneAutoEnabledForVideoCalls(videoState)) {
call.setStartWithSpeakerphoneOn(true);
}
}
@@ -1048,7 +1068,7 @@
* @param videoState The video state of the call.
* @return {@code true} if the speakerphone should be enabled.
*/
- private boolean isSpeakerphoneAutoEnabled(int videoState) {
+ public boolean isSpeakerphoneAutoEnabledForVideoCalls(int videoState) {
return VideoProfile.isVideo(videoState) &&
!mWiredHeadsetManager.isPluggedIn() &&
!mBluetoothManager.isBluetoothAvailable() &&
@@ -1056,6 +1076,19 @@
}
/**
+ * Determines if the speakerphone should be enabled for when docked. Speakerphone
+ * should be enabled if the device is docked and bluetooth or the wired headset are
+ * not in use.
+ *
+ * @return {@code true} if the speakerphone should be enabled for the dock.
+ */
+ private boolean isSpeakerphoneEnabledForDock() {
+ return mDockManager.isDocked() &&
+ !mWiredHeadsetManager.isPluggedIn() &&
+ !mBluetoothManager.isBluetoothAvailable();
+ }
+
+ /**
* Determines if the speakerphone should be automatically enabled for video calls.
*
* @return {@code true} if the speakerphone should automatically be enabled.
@@ -1176,13 +1209,19 @@
if (!mCalls.contains(call)) {
Log.w(this, "Unknown call (%s) asked to be removed from hold", call);
} else {
+ boolean otherCallHeld = false;
Log.d(this, "unholding call: (%s)", call);
for (Call c : mCalls) {
// Only attempt to hold parent calls and not the individual children.
if (c != null && c.isAlive() && c != call && c.getParentCall() == null) {
+ otherCallHeld = true;
+ Log.addEvent(c, LogUtils.Events.SWAP);
c.hold();
}
}
+ if (otherCallHeld) {
+ Log.addEvent(call, LogUtils.Events.SWAP);
+ }
call.unhold();
}
}
@@ -1194,6 +1233,7 @@
}
handleCallTechnologyChange(c);
handleChildAddressChange(c);
+ updateCanAddCall();
}
// Construct the list of possible PhoneAccounts that the outgoing call can use based on the
@@ -1342,6 +1382,11 @@
maybeMoveToSpeakerPhone(call);
}
+ void markCallAsPulling(Call call) {
+ setCallState(call, CallState.PULLING, "pulling set explicitly");
+ maybeMoveToSpeakerPhone(call);
+ }
+
void markCallAsActive(Call call) {
setCallState(call, CallState.ACTIVE, "active set explicitly");
maybeMoveToSpeakerPhone(call);
@@ -1367,12 +1412,21 @@
*/
void markCallAsRemoved(Call call) {
removeCall(call);
+ Call foregroundCall = mCallAudioManager.getPossiblyHeldForegroundCall();
if (mLocallyDisconnectingCalls.contains(call)) {
mLocallyDisconnectingCalls.remove(call);
- Call foregroundCall = mCallAudioManager.getPossiblyHeldForegroundCall();
if (foregroundCall != null && foregroundCall.getState() == CallState.ON_HOLD) {
foregroundCall.unhold();
}
+ } else if (foregroundCall != null &&
+ !foregroundCall.can(Connection.CAPABILITY_SUPPORT_HOLD) &&
+ foregroundCall.getState() == CallState.ON_HOLD) {
+
+ // The new foreground call is on hold, however the carrier does not display the hold
+ // button in the UI. Therefore, we need to auto unhold the held call since the user has
+ // no means of unholding it themselves.
+ Log.i(this, "Auto-unholding held foreground call (call doesn't support hold)");
+ foregroundCall.unhold();
}
}
@@ -1429,13 +1483,14 @@
mCallAudioManager.toggleMute();
return true;
} else {
- ringingCall.answer(ringingCall.getVideoState());
+ ringingCall.answer(VideoProfile.STATE_AUDIO_ONLY);
return true;
}
} else if (HeadsetMediaButton.LONG_PRESS == type) {
Log.d(this, "handleHeadsetHook: longpress -> hangup");
Call callToHangup = getFirstCallWithState(
- CallState.RINGING, CallState.DIALING, CallState.ACTIVE, CallState.ON_HOLD);
+ CallState.RINGING, CallState.DIALING, CallState.PULLING, CallState.ACTIVE,
+ CallState.ON_HOLD);
if (callToHangup != null) {
callToHangup.disconnect();
return true;
@@ -1448,7 +1503,8 @@
/**
* Returns true if telecom supports adding another top-level call.
*/
- boolean canAddCall() {
+ @VisibleForTesting
+ public boolean canAddCall() {
boolean isDeviceProvisioned = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0) != 0;
if (!isDeviceProvisioned) {
@@ -1465,9 +1521,18 @@
if (call.isEmergencyCall()) {
// We never support add call if one of the calls is an emergency call.
return false;
+ } else if (call.isExternalCall()) {
+ // External calls don't count.
+ continue;
} else if (call.getParentCall() == null) {
count++;
}
+ Bundle extras = call.getExtras();
+ if (extras != null) {
+ if (extras.getBoolean(Connection.EXTRA_DISABLE_ADD_CALL, false)) {
+ return false;
+ }
+ }
// We do not check states for canAddCall. We treat disconnected calls the same
// and wait until they are removed instead. If we didn't count disconnected calls,
@@ -1478,6 +1543,7 @@
return false;
}
}
+
return true;
}
@@ -1551,6 +1617,10 @@
continue;
}
+ if (call.isExternalCall()) {
+ continue;
+ }
+
if (currentState == call.getState()) {
return call;
}
@@ -1633,7 +1703,16 @@
* @param incomingCall Incoming call that has been rejected
*/
private void rejectCallAndLog(Call incomingCall) {
- incomingCall.reject(false, null);
+ if (incomingCall.getConnectionService() != null) {
+ // Only reject the call if it has not already been destroyed. If a call ends while
+ // incoming call filtering is taking place, it is possible that the call has already
+ // been destroyed, and as such it will be impossible to send the reject to the
+ // associated ConnectionService.
+ incomingCall.reject(false, null);
+ } else {
+ Log.i(this, "rejectCallAndLog - call already destroyed.");
+ }
+
// Since the call was not added to the list of calls, we have to call the missed
// call notifier and the call logger manually.
// Do we need missed call notification for direct to Voicemail calls?
@@ -1658,7 +1737,7 @@
extras.putLong(TelecomManager.EXTRA_CALL_TELECOM_ROUTING_END_TIME_MILLIS,
SystemClock.elapsedRealtime());
- updateCallsManagerState();
+ updateCanAddCall();
// onCallAdded for calls which immediately take the foreground (like the first call).
for (CallsManagerListener listener : mListeners) {
if (LogUtils.SYSTRACE_DEBUG) {
@@ -1690,7 +1769,7 @@
// Only broadcast changes for calls that are being tracked.
if (shouldNotify) {
- updateCallsManagerState();
+ updateCanAddCall();
for (CallsManagerListener listener : mListeners) {
if (LogUtils.SYSTRACE_DEBUG) {
Trace.beginSection(listener.getClass().toString() + " onCallRemoved");
@@ -1731,7 +1810,7 @@
Trace.beginSection("onCallStateChanged");
// Only broadcast state change for calls that are being tracked.
if (mCalls.contains(call)) {
- updateCallsManagerState();
+ updateCanAddCall();
for (CallsManagerListener listener : mListeners) {
if (LogUtils.SYSTRACE_DEBUG) {
Trace.beginSection(listener.getClass().toString() + " onCallStateChanged");
@@ -1762,10 +1841,6 @@
}
}
- private void updateCallsManagerState() {
- updateCanAddCall();
- }
-
private boolean isPotentialMMICode(Uri handle) {
return (handle != null && handle.getSchemeSpecificPart() != null
&& handle.getSchemeSpecificPart().contains("#"));
@@ -1801,7 +1876,9 @@
int count = 0;
for (int state : states) {
for (Call call : mCalls) {
- if (call.getParentCall() == null && call.getState() == state) {
+ if (call.getParentCall() == null && call.getState() == state &&
+ !call.isExternalCall()) {
+
count++;
}
}
@@ -1826,7 +1903,7 @@
}
private boolean hasMaximumDialingCalls() {
- return MAXIMUM_DIALING_CALLS <= getNumCallsWithState(CallState.DIALING);
+ return MAXIMUM_DIALING_CALLS <= getNumCallsWithState(CallState.DIALING, CallState.PULLING);
}
private boolean makeRoomForOutgoingCall(Call call, boolean isEmergency) {
@@ -1964,6 +2041,8 @@
* @return The new call.
*/
Call createCallForExistingConnection(String callId, ParcelableConnection connection) {
+ boolean isDowngradedConference = (connection.getConnectionProperties()
+ & Connection.PROPERTY_IS_DOWNGRADED_CONFERENCE) != 0;
Call call = new Call(
callId,
mContext,
@@ -1979,7 +2058,7 @@
connection.getPhoneAccount(), /* targetPhoneAccountHandle */
Call.CALL_DIRECTION_UNDEFINED /* callDirection */,
false /* forceAttachToExistingConnection */,
- false /* isConference */,
+ isDowngradedConference /* isConference */,
connection.getConnectTimeMillis() /* connectTimeMillis */);
call.initAnalytics();
diff --git a/src/com/android/server/telecom/CallsManagerListenerBase.java b/src/com/android/server/telecom/CallsManagerListenerBase.java
index 9bfa098..a4c76c1 100644
--- a/src/com/android/server/telecom/CallsManagerListenerBase.java
+++ b/src/com/android/server/telecom/CallsManagerListenerBase.java
@@ -69,7 +69,7 @@
}
@Override
- public void onVideoStateChanged(Call call) {
+ public void onVideoStateChanged(Call call, int previousVideoState, int newVideoState) {
}
@Override
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index 22ea7ad..b30f52d 100644
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -16,6 +16,7 @@
package com.android.server.telecom;
+import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.Context;
import android.net.Uri;
@@ -34,6 +35,7 @@
import android.telecom.Logging.Session;
import android.telecom.ParcelableConference;
import android.telecom.ParcelableConnection;
+import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.StatusHints;
import android.telecom.TelecomManager;
@@ -68,7 +70,7 @@
@Override
public void handleCreateConnectionComplete(String callId, ConnectionRequest request,
ParcelableConnection connection, Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.hCCC");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_HANDLE_CREATE_CONNECTION_COMPLETE);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -84,7 +86,7 @@
@Override
public void setActive(String callId, Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.sA");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_ACTIVE);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -104,7 +106,7 @@
@Override
public void setRinging(String callId, Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.sR");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_RINGING);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -143,7 +145,7 @@
@Override
public void setDialing(String callId, Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.sD");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_DIALING);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -162,9 +164,27 @@
}
@Override
+ public void setPulling(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_PULLING);
+ long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ logIncoming("setPulling %s", callId);
+ Call call = mCallIdMapper.getCall(callId);
+ if (call != null) {
+ mCallsManager.markCallAsPulling(call);
+ }
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ Log.endSession();
+ }
+ }
+
+ @Override
public void setDisconnected(String callId, DisconnectCause disconnectCause,
Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.sD");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_DISCONNECTED);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -185,7 +205,7 @@
@Override
public void setOnHold(String callId, Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.sOH");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_ON_HOLD);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -226,7 +246,7 @@
@Override
public void removeCall(String callId, Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.rC");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_REMOVE_CALL);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -291,7 +311,7 @@
@Override
public void setIsConferenced(String callId, String conferenceCallId,
Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.sIC");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_SET_IS_CONFERENCED);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -327,15 +347,7 @@
// deliver the message anyway that they want. b/20530631.
Call call = mCallIdMapper.getCall(callId);
if (call != null) {
- // Just refresh the connection capabilities so that the UI
- // is forced to reenable the merge button as the capability
- // is still on the connection. Note when b/20530631 is fixed, we need
- // to revisit this fix to remove this hacky way of unhiding the merge
- // button (side effect of reprocessing the capabilities) and plumb
- // the failure event all the way to InCallUI instead of stopping
- // it here. That way we can also handle the UI of notifying that
- // the merged has failed.
- call.setConnectionCapabilities(call.getConnectionCapabilities(), true);
+ call.onConnectionEvent(Connection.EVENT_CALL_MERGE_FAILED, null);
} else {
Log.w(this, "setConferenceMergeFailed, unknown call id: %s", callId);
}
@@ -349,7 +361,7 @@
@Override
public void addConferenceCall(String callId, ParcelableConference parcelableConference,
Session.Info sessionInfo) {
- Log.startSession(sessionInfo, "CSW.aCC");
+ Log.startSession(sessionInfo, LogUtils.Sessions.CSW_ADD_CONFERENCE_CALL);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -621,17 +633,42 @@
}
@Override
- public void addExistingConnection(String callId, ParcelableConnection connection,
- Session.Info sessionInfo) {
+ public void addExistingConnection(String callId, ParcelableConnection connection,
+ Session.Info sessionInfo) {
Log.startSession(sessionInfo, "CSW.aEC");
+ UserHandle userHandle = Binder.getCallingUserHandle();
+ // Check that the Calling Package matches PhoneAccountHandle's Component Package
+ PhoneAccountHandle callingPhoneAccountHandle = connection.getPhoneAccount();
+ if (callingPhoneAccountHandle != null) {
+ mAppOpsManager.checkPackage(Binder.getCallingUid(),
+ callingPhoneAccountHandle.getComponentName().getPackageName());
+ }
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- logIncoming("addExistingConnection %s %s", callId, connection);
- Call existingCall = mCallsManager
- .createCallForExistingConnection(callId, connection);
- mCallIdMapper.addCall(existingCall, callId);
- existingCall.setConnectionService(ConnectionServiceWrapper.this);
+ // Make sure that the PhoneAccount associated with the incoming
+ // ParcelableConnection is in fact registered to Telecom and is being called
+ // from the correct user.
+ List<PhoneAccountHandle> accountHandles =
+ mPhoneAccountRegistrar.getCallCapablePhoneAccounts(null /*uriScheme*/,
+ false /*includeDisabledAccounts*/, userHandle);
+ PhoneAccountHandle phoneAccountHandle = null;
+ for (PhoneAccountHandle accountHandle : accountHandles) {
+ if(accountHandle.equals(callingPhoneAccountHandle)) {
+ phoneAccountHandle = accountHandle;
+ }
+ }
+ if (phoneAccountHandle != null) {
+ logIncoming("addExistingConnection %s %s", callId, connection);
+ Call existingCall = mCallsManager
+ .createCallForExistingConnection(callId, connection);
+ mCallIdMapper.addCall(existingCall, callId);
+ existingCall.setConnectionService(ConnectionServiceWrapper.this);
+ } else {
+ Log.e(this, new RemoteException("The PhoneAccount being used is not " +
+ "currently registered with Telecom."), "Unable to " +
+ "addExistingConnection.");
+ }
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -668,6 +705,7 @@
private final ConnectionServiceRepository mConnectionServiceRepository;
private final PhoneAccountRegistrar mPhoneAccountRegistrar;
private final CallsManager mCallsManager;
+ private final AppOpsManager mAppOpsManager;
/**
* Creates a connection service.
@@ -695,6 +733,7 @@
});
mPhoneAccountRegistrar = phoneAccountRegistrar;
mCallsManager = callsManager;
+ mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
}
/** See {@link IConnectionService#addConnectionServiceAdapter}. */
diff --git a/src/com/android/server/telecom/CreateConnectionProcessor.java b/src/com/android/server/telecom/CreateConnectionProcessor.java
index 2389935..2b88848 100644
--- a/src/com/android/server/telecom/CreateConnectionProcessor.java
+++ b/src/com/android/server/telecom/CreateConnectionProcessor.java
@@ -133,7 +133,7 @@
mCall.getTargetPhoneAccount(), mCall.getTargetPhoneAccount()));
}
adjustAttemptsForConnectionManager();
- adjustAttemptsForEmergency();
+ adjustAttemptsForEmergency(mCall.getTargetPhoneAccount());
mAttemptRecordIterator = mAttemptRecords.iterator();
attemptNextPhoneAccount();
}
@@ -295,7 +295,7 @@
// If we are possibly attempting to call a local emergency number, ensure that the
// plain PSTN connection services are listed, and nothing else.
- private void adjustAttemptsForEmergency() {
+ private void adjustAttemptsForEmergency(PhoneAccountHandle preferredPAH) {
if (mCall.isEmergencyCall()) {
Log.i(this, "Emergency number detected");
mAttemptRecords.clear();
@@ -314,16 +314,29 @@
allAccounts.add(TelephonyUtil.getDefaultEmergencyPhoneAccount());
}
- // First, add SIM phone accounts which can place emergency calls.
+ // First, possibly add the SIM phone account that the user prefers
+ PhoneAccount preferredPA = mPhoneAccountRegistrar.getPhoneAccountUnchecked(
+ preferredPAH);
+ if (preferredPA != null &&
+ preferredPA.hasCapabilities(PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS) &&
+ preferredPA.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
+ Log.i(this, "Will try PSTN account %s for emergency",
+ preferredPA.getAccountHandle());
+ mAttemptRecords.add(new CallAttemptRecord(preferredPAH, preferredPAH));
+ }
+
+ // Next, add all SIM phone accounts which can place emergency calls.
+ TelephonyUtil.sortSimPhoneAccounts(mContext, allAccounts);
for (PhoneAccount phoneAccount : allAccounts) {
if (phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS) &&
phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
- Log.i(this, "Will try PSTN account %s for emergency",
- phoneAccount.getAccountHandle());
- mAttemptRecords.add(
- new CallAttemptRecord(
- phoneAccount.getAccountHandle(),
- phoneAccount.getAccountHandle()));
+ PhoneAccountHandle phoneAccountHandle = phoneAccount.getAccountHandle();
+ // Don't add the preferred account since it has already been added previously.
+ if (!phoneAccountHandle.equals(preferredPAH)) {
+ Log.i(this, "Will try PSTN account %s for emergency", phoneAccountHandle);
+ mAttemptRecords.add(new CallAttemptRecord(phoneAccountHandle,
+ phoneAccountHandle));
+ }
}
}
@@ -426,7 +439,7 @@
public void handleCreateConnectionFailure(DisconnectCause errorDisconnectCause) {
// Failure of some sort; record the reasons for failure and try again if possible
Log.d(CreateConnectionProcessor.this, "Connection failed: (%s)", errorDisconnectCause);
- if(shouldFailCallIfConnectionManagerFails(errorDisconnectCause)){
+ if (shouldFailCallIfConnectionManagerFails(errorDisconnectCause)) {
notifyCallConnectionFailure(errorDisconnectCause);
return;
}
diff --git a/src/com/android/server/telecom/CreateConnectionTimeout.java b/src/com/android/server/telecom/CreateConnectionTimeout.java
index 0a8666f..399c28a 100644
--- a/src/com/android/server/telecom/CreateConnectionTimeout.java
+++ b/src/com/android/server/telecom/CreateConnectionTimeout.java
@@ -41,7 +41,7 @@
CreateConnectionTimeout(Context context, PhoneAccountRegistrar phoneAccountRegistrar,
ConnectionServiceWrapper service, Call call) {
- super("CCT");
+ super("CCT", null /*lock*/);
mContext = context;
mPhoneAccountRegistrar = phoneAccountRegistrar;
mConnectionService = service;
@@ -115,7 +115,8 @@
int state = call.getState();
return state == CallState.NEW
|| state == CallState.CONNECTING
- || state == CallState.DIALING;
+ || state == CallState.DIALING
+ || state == CallState.PULLING;
}
private long getTimeoutLengthMillis() {
diff --git a/src/com/android/server/telecom/HeadsetMediaButton.java b/src/com/android/server/telecom/HeadsetMediaButton.java
index a5cf9ec..f9ba60e 100644
--- a/src/com/android/server/telecom/HeadsetMediaButton.java
+++ b/src/com/android/server/telecom/HeadsetMediaButton.java
@@ -136,6 +136,9 @@
/** ${inheritDoc} */
@Override
public void onCallRemoved(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
if (!mCallsManager.hasAnyCalls()) {
mMediaSessionHandler.obtainMessage(MSG_MEDIA_SESSION_SET_ACTIVE, 0, 0).sendToTarget();
}
diff --git a/src/com/android/server/telecom/InCallAdapter.java b/src/com/android/server/telecom/InCallAdapter.java
index fe19480..e775818 100644
--- a/src/com/android/server/telecom/InCallAdapter.java
+++ b/src/com/android/server/telecom/InCallAdapter.java
@@ -48,7 +48,7 @@
@Override
public void answerCall(String callId, int videoState) {
try {
- Log.startSession("ICA.aC", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_ANSWER_CALL, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -71,7 +71,7 @@
@Override
public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
try {
- Log.startSession("ICA.rC", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_REJECT_CALL, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -163,7 +163,7 @@
@Override
public void disconnectCall(String callId) {
try {
- Log.startSession("ICA.dC", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_DISCONNECT_CALL, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -186,7 +186,7 @@
@Override
public void holdCall(String callId) {
try {
- Log.startSession("ICA.hC", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_HOLD_CALL, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -208,7 +208,7 @@
@Override
public void unholdCall(String callId) {
try {
- Log.startSession("ICA.uC", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_UNHOLD_CALL, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -253,7 +253,7 @@
@Override
public void mute(boolean shouldMute) {
try {
- Log.startSession("ICA.m", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_MUTE, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -270,7 +270,7 @@
@Override
public void setAudioRoute(int route) {
try {
- Log.startSession("ICA.sAR", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_SET_AUDIO_ROUTE, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -287,7 +287,7 @@
@Override
public void conference(String callId, String otherCallId) {
try {
- Log.startSession("ICA.c", mOwnerComponentName);
+ Log.startSession(LogUtils.Sessions.ICA_CONFERENCE, mOwnerComponentName);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index 31ed882..43c0e48 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -80,6 +80,60 @@
public void dump(IndentingPrintWriter pw) {}
}
+ private class InCallServiceInfo {
+ private final ComponentName mComponentName;
+ private boolean mIsExternalCallsSupported;
+ private final int mType;
+
+ public InCallServiceInfo(ComponentName componentName,
+ boolean isExternalCallsSupported,
+ int type) {
+ mComponentName = componentName;
+ mIsExternalCallsSupported = isExternalCallsSupported;
+ mType = type;
+ }
+
+ public ComponentName getComponentName() {
+ return mComponentName;
+ }
+
+ public boolean isExternalCallsSupported() {
+ return mIsExternalCallsSupported;
+ }
+
+ public int getType() {
+ return mType;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ InCallServiceInfo that = (InCallServiceInfo) o;
+
+ if (mIsExternalCallsSupported != that.mIsExternalCallsSupported) {
+ return false;
+ }
+ return mComponentName.equals(that.mComponentName);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mComponentName, mIsExternalCallsSupported);
+ }
+
+ @Override
+ public String toString() {
+ return "[" + mComponentName + " supportsExternal? " + mIsExternalCallsSupported + "]";
+ }
+ }
+
private class InCallServiceBindingConnection extends InCallServiceConnection {
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@@ -115,12 +169,12 @@
}
};
- private final ComponentName mComponentName;
+ private final InCallServiceInfo mInCallServiceInfo;
private boolean mIsConnected = false;
private boolean mIsBound = false;
- public InCallServiceBindingConnection(ComponentName componentName) {
- mComponentName = componentName;
+ public InCallServiceBindingConnection(InCallServiceInfo info) {
+ mInCallServiceInfo = info;
}
@Override
@@ -131,7 +185,7 @@
}
Intent intent = new Intent(InCallService.SERVICE_INTERFACE);
- intent.setComponent(mComponentName);
+ intent.setComponent(mInCallServiceInfo.getComponentName());
if (call != null && !call.isIncoming() && !call.isExternalCall()){
intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS,
call.getIntentExtras());
@@ -139,7 +193,7 @@
call.getTargetPhoneAccount());
}
- Log.i(this, "Attempting to bind to InCall %s, with %s", mComponentName, intent);
+ Log.i(this, "Attempting to bind to InCall %s, with %s", mInCallServiceInfo, intent);
mIsConnected = true;
if (!mContext.bindServiceAsUser(intent, mServiceConnection,
Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
@@ -148,6 +202,12 @@
mIsConnected = false;
}
+ if (call != null && mIsConnected) {
+ call.getAnalytics().addInCallService(
+ mInCallServiceInfo.getComponentName().flattenToShortString(),
+ mInCallServiceInfo.getType());
+ }
+
return mIsConnected;
}
@@ -170,10 +230,10 @@
protected void onConnected(IBinder service) {
boolean shouldRemainConnected =
- InCallController.this.onConnected(mComponentName, service);
+ InCallController.this.onConnected(mInCallServiceInfo, service);
if (!shouldRemainConnected) {
// Sometimes we can opt to disconnect for certain reasons, like if the
- // InCallService rejected our intialization step, or the calls went away
+ // InCallService rejected our initialization step, or the calls went away
// in the time it took us to bind to the InCallService. In such cases, we go
// ahead and disconnect ourselves.
disconnect();
@@ -181,7 +241,7 @@
}
protected void onDisconnected() {
- InCallController.this.onDisconnected(mComponentName);
+ InCallController.this.onDisconnected(mInCallServiceInfo.getComponentName());
disconnect(); // Unbind explicitly if we get disconnected.
if (mListener != null) {
mListener.onDisconnect(InCallServiceBindingConnection.this);
@@ -216,8 +276,9 @@
};
public EmergencyInCallServiceConnection(
- ComponentName componentName, InCallServiceConnection subConnection) {
- super(componentName);
+ InCallServiceInfo info, InCallServiceConnection subConnection) {
+
+ super(info);
mSubConnection = subConnection;
if (mSubConnection != null) {
mSubConnection.setListener(mSubListener);
@@ -501,7 +562,7 @@
}
@Override
- public void onVideoStateChanged(Call call) {
+ public void onVideoStateChanged(Call call, int previousVideoState, int newVideoState) {
updateCall(call);
}
@@ -537,7 +598,7 @@
private static final int IN_CALL_SERVICE_TYPE_NON_UI = 4;
/** The in-call app implementations, see {@link IInCallService}. */
- private final Map<ComponentName, IInCallService> mInCallServices = new ArrayMap<>();
+ private final Map<InCallServiceInfo, IInCallService> mInCallServices = new ArrayMap<>();
/**
* The {@link ComponentName} of the bound In-Call UI Service.
@@ -554,17 +615,19 @@
private final CallsManager mCallsManager;
private final SystemStateProvider mSystemStateProvider;
private final DefaultDialerManagerAdapter mDefaultDialerAdapter;
+ private final Timeouts.Adapter mTimeoutsAdapter;
private CarSwappingInCallServiceConnection mInCallServiceConnection;
private NonUIInCallServiceConnectionCollection mNonUIInCallServiceConnections;
public InCallController(Context context, TelecomSystem.SyncRoot lock, CallsManager callsManager,
SystemStateProvider systemStateProvider,
- DefaultDialerManagerAdapter defaultDialerAdapter) {
+ DefaultDialerManagerAdapter defaultDialerAdapter, Timeouts.Adapter timeoutsAdapter) {
mContext = context;
mLock = lock;
mCallsManager = callsManager;
mSystemStateProvider = systemStateProvider;
mDefaultDialerAdapter = defaultDialerAdapter;
+ mTimeoutsAdapter = timeoutsAdapter;
Resources resources = mContext.getResources();
mSystemInCallComponentName = new ComponentName(
@@ -585,16 +648,26 @@
// Track the call if we don't already know about it.
addCall(call);
- for (Map.Entry<ComponentName, IInCallService> entry : mInCallServices.entrySet()) {
- ComponentName componentName = entry.getKey();
+ List<ComponentName> componentsUpdated = new ArrayList<>();
+ for (Map.Entry<InCallServiceInfo, IInCallService> entry : mInCallServices.entrySet()) {
+ InCallServiceInfo info = entry.getKey();
+
+ if (call.isExternalCall() && !info.isExternalCallsSupported()) {
+ continue;
+ }
+
+ componentsUpdated.add(info.getComponentName());
IInCallService inCallService = entry.getValue();
+
ParcelableCall parcelableCall = ParcelableCallUtils.toParcelableCall(call,
- true /* includeVideoProvider */, mCallsManager.getPhoneAccountRegistrar());
+ true /* includeVideoProvider */, mCallsManager.getPhoneAccountRegistrar(),
+ info.isExternalCallsSupported());
try {
inCallService.addCall(parcelableCall);
} catch (RemoteException ignored) {
}
}
+ Log.i(this, "Call added to components: %s", componentsUpdated);
}
}
@@ -606,17 +679,15 @@
* give them enough time to process all the pending messages.
*/
Handler handler = new Handler(Looper.getMainLooper());
- handler.postDelayed(new Runnable("ICC.oCR") {
+ handler.postDelayed(new Runnable("ICC.oCR", mLock) {
@Override
public void loggedRun() {
- synchronized (mLock) {
- // Check again to make sure there are no active calls.
- if (mCallsManager.getCalls().isEmpty()) {
- unbindFromServices();
- }
+ // Check again to make sure there are no active calls.
+ if (mCallsManager.getCalls().isEmpty()) {
+ unbindFromServices();
}
}
- }.prepare(), Timeouts.getCallRemoveUnbindInCallServicesDelay(
+ }.prepare(), mTimeoutsAdapter.getCallRemoveUnbindInCallServicesDelay(
mContext.getContentResolver()));
}
call.removeListener(mCallListener);
@@ -626,8 +697,62 @@
@Override
public void onExternalCallChanged(Call call, boolean isExternalCall) {
Log.i(this, "onExternalCallChanged: %s -> %b", call, isExternalCall);
- // TODO: Need to add logic which ensures changes to a call's external state adds or removes
- // the call from the InCallServices depending on whether they support external calls.
+
+ List<ComponentName> componentsUpdated = new ArrayList<>();
+ if (!isExternalCall) {
+ // The call was external but it is no longer external. We must now add it to any
+ // InCallServices which do not support external calls.
+ for (Map.Entry<InCallServiceInfo, IInCallService> entry : mInCallServices.entrySet()) {
+ InCallServiceInfo info = entry.getKey();
+
+ if (info.isExternalCallsSupported()) {
+ // For InCallServices which support external calls, the call will have already
+ // been added to the connection service, so we do not need to add it again.
+ continue;
+ }
+
+ componentsUpdated.add(info.getComponentName());
+ IInCallService inCallService = entry.getValue();
+
+ ParcelableCall parcelableCall = ParcelableCallUtils.toParcelableCall(call,
+ true /* includeVideoProvider */, mCallsManager.getPhoneAccountRegistrar(),
+ info.isExternalCallsSupported());
+ try {
+ inCallService.addCall(parcelableCall);
+ } catch (RemoteException ignored) {
+ }
+ }
+ Log.i(this, "Previously external call added to components: %s", componentsUpdated);
+ } else {
+ // The call was regular but it is now external. We must now remove it from any
+ // InCallServices which do not support external calls.
+ // Remove the call by sending a call update indicating the call was disconnected.
+ ParcelableCall parcelableCall = ParcelableCallUtils.toParcelableCall(
+ call,
+ false /* includeVideoProvider */,
+ mCallsManager.getPhoneAccountRegistrar(),
+ false /* supportsExternalCalls */,
+ android.telecom.Call.STATE_DISCONNECTED /* overrideState */);
+
+ Log.i(this, "Removing external call %s ==> %s", call, parcelableCall);
+ for (Map.Entry<InCallServiceInfo, IInCallService> entry : mInCallServices.entrySet()) {
+ InCallServiceInfo info = entry.getKey();
+ if (info.isExternalCallsSupported()) {
+ // For InCallServices which support external calls, we do not need to remove
+ // the call.
+ continue;
+ }
+
+ componentsUpdated.add(info.getComponentName());
+ IInCallService inCallService = entry.getValue();
+
+ try {
+ inCallService.updateCall(parcelableCall);
+ } catch (RemoteException ignored) {
+ }
+ }
+ Log.i(this, "External call removed from components: %s", componentsUpdated);
+ }
}
@Override
@@ -717,6 +842,10 @@
if (!mInCallServices.isEmpty()) {
for (IInCallService inCallService : mInCallServices.values()) {
try {
+ Log.i(this, "notifyConnectionEvent {Call: %s, Event: %s, Extras:[%s]}",
+ (call != null ? call.toString() :"null"),
+ (event != null ? event : "null") ,
+ (extras != null ? extras.toString() : "null"));
inCallService.onConnectionEvent(mCallIdMapper.getCallId(call), event, extras);
} catch (RemoteException ignored) {
}
@@ -729,10 +858,14 @@
*/
private void unbindFromServices() {
if (isBoundToServices()) {
- mInCallServiceConnection.disconnect();
- mInCallServiceConnection = null;
- mNonUIInCallServiceConnections.disconnect();
- mNonUIInCallServiceConnections = null;
+ if (mInCallServiceConnection != null) {
+ mInCallServiceConnection.disconnect();
+ mInCallServiceConnection = null;
+ }
+ if (mNonUIInCallServiceConnections != null) {
+ mNonUIInCallServiceConnections.disconnect();
+ mNonUIInCallServiceConnections = null;
+ }
}
}
@@ -745,23 +878,25 @@
@VisibleForTesting
public void bindToServices(Call call) {
InCallServiceConnection dialerInCall = null;
- ComponentName defaultDialerComponent = getDefaultDialerComponent();
- Log.i(this, "defaultDialer: " + defaultDialerComponent);
- if (defaultDialerComponent != null &&
- !defaultDialerComponent.equals(mSystemInCallComponentName)) {
- dialerInCall = new InCallServiceBindingConnection(defaultDialerComponent);
+ InCallServiceInfo defaultDialerComponentInfo = getDefaultDialerComponent();
+ Log.i(this, "defaultDialer: " + defaultDialerComponentInfo);
+ if (defaultDialerComponentInfo != null &&
+ !defaultDialerComponentInfo.getComponentName().equals(mSystemInCallComponentName)) {
+ dialerInCall = new InCallServiceBindingConnection(defaultDialerComponentInfo);
}
Log.i(this, "defaultDialer: " + dialerInCall);
+ InCallServiceInfo systemInCallInfo = getInCallServiceComponent(mSystemInCallComponentName,
+ IN_CALL_SERVICE_TYPE_SYSTEM_UI);
EmergencyInCallServiceConnection systemInCall =
- new EmergencyInCallServiceConnection(mSystemInCallComponentName, dialerInCall);
+ new EmergencyInCallServiceConnection(systemInCallInfo, dialerInCall);
systemInCall.setHasEmergency(mCallsManager.hasEmergencyCall());
InCallServiceConnection carModeInCall = null;
- ComponentName carModeComponent = getCarModeComponent();
- if (carModeComponent != null &&
- !carModeComponent.equals(mSystemInCallComponentName)) {
- carModeInCall = new InCallServiceBindingConnection(carModeComponent);
+ InCallServiceInfo carModeComponentInfo = getCarModeComponent();
+ if (carModeComponentInfo != null &&
+ !carModeComponentInfo.getComponentName().equals(mSystemInCallComponentName)) {
+ carModeInCall = new InCallServiceBindingConnection(carModeComponentInfo);
}
mInCallServiceConnection =
@@ -769,18 +904,17 @@
mInCallServiceConnection.setCarMode(shouldUseCarModeUI());
mInCallServiceConnection.connect(call);
-
- List<ComponentName> nonUIInCallComponents =
- getInCallServiceComponents(null, IN_CALL_SERVICE_TYPE_NON_UI);
+ List<InCallServiceInfo> nonUIInCallComponents =
+ getInCallServiceComponents(IN_CALL_SERVICE_TYPE_NON_UI);
List<InCallServiceBindingConnection> nonUIInCalls = new LinkedList<>();
- for (ComponentName componentName : nonUIInCallComponents) {
- nonUIInCalls.add(new InCallServiceBindingConnection(componentName));
+ for (InCallServiceInfo serviceInfo : nonUIInCallComponents) {
+ nonUIInCalls.add(new InCallServiceBindingConnection(serviceInfo));
}
mNonUIInCallServiceConnections = new NonUIInCallServiceConnectionCollection(nonUIInCalls);
mNonUIInCallServiceConnections.connect(call);
}
- private ComponentName getDefaultDialerComponent() {
+ private InCallServiceInfo getDefaultDialerComponent() {
String packageName = mDefaultDialerAdapter.getDefaultDialerApplication(
mContext, mCallsManager.getCurrentUserHandle().getIdentifier());
Log.d(this, "Default Dialer package: " + packageName);
@@ -788,25 +922,57 @@
return getInCallServiceComponent(packageName, IN_CALL_SERVICE_TYPE_DIALER_UI);
}
- private ComponentName getCarModeComponent() {
- return getInCallServiceComponent(null, IN_CALL_SERVICE_TYPE_CAR_MODE_UI);
+ private InCallServiceInfo getCarModeComponent() {
+ // Seems strange to cast a String to null, but the signatures of getInCallServiceComponent
+ // differ in the types of the first parameter, and passing in null is inherently ambiguous.
+ return getInCallServiceComponent((String) null, IN_CALL_SERVICE_TYPE_CAR_MODE_UI);
}
- private ComponentName getInCallServiceComponent(String packageName, int type) {
- List<ComponentName> list = getInCallServiceComponents(packageName, type);
+ private InCallServiceInfo getInCallServiceComponent(ComponentName componentName, int type) {
+ List<InCallServiceInfo> list = getInCallServiceComponents(componentName, type);
+ if (list != null && !list.isEmpty()) {
+ return list.get(0);
+ } else {
+ // Last Resort: Try to bind to the ComponentName given directly.
+ Log.e(this, new Exception(), "Package Manager could not find ComponentName: "
+ + componentName +". Trying to bind anyway.");
+ return new InCallServiceInfo(componentName, false, type);
+ }
+ }
+
+ private InCallServiceInfo getInCallServiceComponent(String packageName, int type) {
+ List<InCallServiceInfo> list = getInCallServiceComponents(packageName, type);
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
- private List<ComponentName> getInCallServiceComponents(String packageName, int type) {
- List<ComponentName> retval = new LinkedList<>();
+ private List<InCallServiceInfo> getInCallServiceComponents(int type) {
+ return getInCallServiceComponents(null, null, type);
+ }
+
+ private List<InCallServiceInfo> getInCallServiceComponents(String packageName, int type) {
+ return getInCallServiceComponents(packageName, null, type);
+ }
+
+ private List<InCallServiceInfo> getInCallServiceComponents(ComponentName componentName,
+ int type) {
+ return getInCallServiceComponents(null, componentName, type);
+ }
+
+ private List<InCallServiceInfo> getInCallServiceComponents(String packageName,
+ ComponentName componentName, int requestedType) {
+
+ List<InCallServiceInfo> retval = new LinkedList<>();
Intent serviceIntent = new Intent(InCallService.SERVICE_INTERFACE);
if (packageName != null) {
serviceIntent.setPackage(packageName);
}
+ if (componentName != null) {
+ serviceIntent.setComponent(componentName);
+ }
PackageManager packageManager = mContext.getPackageManager();
for (ResolveInfo entry : packageManager.queryIntentServicesAsUser(
@@ -816,8 +982,15 @@
ServiceInfo serviceInfo = entry.serviceInfo;
if (serviceInfo != null) {
- if (type == 0 || type == getInCallServiceType(entry.serviceInfo, packageManager)) {
- retval.add(new ComponentName(serviceInfo.packageName, serviceInfo.name));
+ boolean isExternalCallsSupported = serviceInfo.metaData != null &&
+ serviceInfo.metaData.getBoolean(
+ TelecomManager.METADATA_INCLUDE_EXTERNAL_CALLS, false);
+ if (requestedType == 0 || requestedType == getInCallServiceType(entry.serviceInfo,
+ packageManager)) {
+
+ retval.add(new InCallServiceInfo(
+ new ComponentName(serviceInfo.packageName, serviceInfo.name),
+ isExternalCallsSupported, requestedType));
}
}
}
@@ -863,7 +1036,6 @@
return IN_CALL_SERVICE_TYPE_CAR_MODE_UI;
}
-
// Check to see that it is the default dialer package
boolean isDefaultDialerPackage = Objects.equals(serviceInfo.packageName,
mDefaultDialerAdapter.getDefaultDialerApplication(
@@ -901,16 +1073,16 @@
* this class and in-call app by sending the first update to in-call app. This method is
* called after a successful binding connection is established.
*
- * @param componentName The service {@link ComponentName}.
+ * @param info Info about the service, including its {@link ComponentName}.
* @param service The {@link IInCallService} implementation.
* @return True if we successfully connected.
*/
- private boolean onConnected(ComponentName componentName, IBinder service) {
- Trace.beginSection("onConnected: " + componentName);
- Log.i(this, "onConnected to %s", componentName);
+ private boolean onConnected(InCallServiceInfo info, IBinder service) {
+ Trace.beginSection("onConnected: " + info.getComponentName());
+ Log.i(this, "onConnected to %s", info.getComponentName());
IInCallService inCallService = IInCallService.Stub.asInterface(service);
- mInCallServices.put(componentName, inCallService);
+ mInCallServices.put(info, inCallService);
try {
inCallService.setInCallAdapter(
@@ -918,7 +1090,7 @@
mCallsManager,
mCallIdMapper,
mLock,
- componentName.getPackageName()));
+ info.getComponentName().getPackageName()));
} catch (RemoteException e) {
Log.e(this, e, "Failed to set the in-call adapter.");
Trace.endSection();
@@ -927,28 +1099,32 @@
// Upon successful connection, send the state of the world to the service.
List<Call> calls = orderCallsWithChildrenFirst(mCallsManager.getCalls());
- if (!calls.isEmpty()) {
- Log.i(this, "Adding %s calls to InCallService after onConnected: %s", calls.size(),
- componentName);
- for (Call call : calls) {
- try {
- // Track the call if we don't already know about it.
- addCall(call);
- inCallService.addCall(ParcelableCallUtils.toParcelableCall(
- call,
- true /* includeVideoProvider */,
- mCallsManager.getPhoneAccountRegistrar()));
- } catch (RemoteException ignored) {
- }
- }
+ Log.i(this, "Adding %s calls to InCallService after onConnected: %s, including external " +
+ "calls", calls.size(), info.getComponentName());
+ int numCallsSent = 0;
+ for (Call call : calls) {
try {
- inCallService.onCallAudioStateChanged(mCallsManager.getAudioState());
- inCallService.onCanAddCallChanged(mCallsManager.canAddCall());
+ if (call.isExternalCall() && !info.isExternalCallsSupported()) {
+ continue;
+ }
+
+ // Track the call if we don't already know about it.
+ addCall(call);
+ numCallsSent += 1;
+ inCallService.addCall(ParcelableCallUtils.toParcelableCall(
+ call,
+ true /* includeVideoProvider */,
+ mCallsManager.getPhoneAccountRegistrar(),
+ info.isExternalCallsSupported()));
} catch (RemoteException ignored) {
}
- } else {
- return false;
}
+ try {
+ inCallService.onCallAudioStateChanged(mCallsManager.getAudioState());
+ inCallService.onCanAddCallChanged(mCallsManager.canAddCall());
+ } catch (RemoteException ignored) {
+ }
+ Log.i(this, "%s calls sent to InCallService.", numCallsSent);
Trace.endSection();
return true;
}
@@ -982,16 +1158,23 @@
*/
private void updateCall(Call call, boolean videoProviderChanged) {
if (!mInCallServices.isEmpty()) {
- ParcelableCall parcelableCall = ParcelableCallUtils.toParcelableCall(
- call,
- videoProviderChanged /* includeVideoProvider */,
- mCallsManager.getPhoneAccountRegistrar());
- Log.i(this, "Sending updateCall %s ==> %s", call, parcelableCall);
+ Log.i(this, "Sending updateCall %s", call);
List<ComponentName> componentsUpdated = new ArrayList<>();
- for (Map.Entry<ComponentName, IInCallService> entry : mInCallServices.entrySet()) {
- ComponentName componentName = entry.getKey();
+ for (Map.Entry<InCallServiceInfo, IInCallService> entry : mInCallServices.entrySet()) {
+ InCallServiceInfo info = entry.getKey();
+ if (call.isExternalCall() && !info.isExternalCallsSupported()) {
+ continue;
+ }
+
+ ParcelableCall parcelableCall = ParcelableCallUtils.toParcelableCall(
+ call,
+ videoProviderChanged /* includeVideoProvider */,
+ mCallsManager.getPhoneAccountRegistrar(),
+ info.isExternalCallsSupported());
+ ComponentName componentName = info.getComponentName();
IInCallService inCallService = entry.getValue();
componentsUpdated.add(componentName);
+
try {
inCallService.updateCall(parcelableCall);
} catch (RemoteException ignored) {
@@ -1024,8 +1207,8 @@
public void dump(IndentingPrintWriter pw) {
pw.println("mInCallServices (InCalls registered):");
pw.increaseIndent();
- for (ComponentName componentName : mInCallServices.keySet()) {
- pw.println(componentName);
+ for (InCallServiceInfo info : mInCallServices.keySet()) {
+ pw.println(info);
}
pw.decreaseIndent();
diff --git a/src/com/android/server/telecom/InCallTonePlayer.java b/src/com/android/server/telecom/InCallTonePlayer.java
index b5f907b..62c692b 100644
--- a/src/com/android/server/telecom/InCallTonePlayer.java
+++ b/src/com/android/server/telecom/InCallTonePlayer.java
@@ -276,7 +276,12 @@
mSession = Log.createSubsession();
}
- start();
+ super.start();
+ }
+
+ @Override
+ public void start() {
+ Log.w(this, "Do not call the start method directly; use startTone instead.");
}
/**
@@ -295,15 +300,13 @@
private void cleanUpTonePlayer() {
// Release focus on the main thread.
- mMainThreadHandler.post(new Runnable("ICTP.cUTP") {
+ mMainThreadHandler.post(new Runnable("ICTP.cUTP", mLock) {
@Override
public void loggedRun() {
- synchronized (mLock) {
- if (sTonesPlaying == 0) {
- Log.wtf(this, "Over-releasing focus for tone player.");
- } else if (--sTonesPlaying == 0) {
- mCallAudioManager.setIsTonePlaying(false);
- }
+ if (sTonesPlaying == 0) {
+ Log.wtf(this, "Over-releasing focus for tone player.");
+ } else if (--sTonesPlaying == 0) {
+ mCallAudioManager.setIsTonePlaying(false);
}
}
}.prepare());
diff --git a/src/com/android/server/telecom/InCallWakeLockController.java b/src/com/android/server/telecom/InCallWakeLockController.java
index a0db54e..ac93bb5 100644
--- a/src/com/android/server/telecom/InCallWakeLockController.java
+++ b/src/com/android/server/telecom/InCallWakeLockController.java
@@ -38,16 +38,25 @@
@Override
public void onCallAdded(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
handleWakeLock();
}
@Override
public void onCallRemoved(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
handleWakeLock();
}
@Override
public void onCallStateChanged(Call call, int oldState, int newState) {
+ if (call.isExternalCall()) {
+ return;
+ }
handleWakeLock();
}
diff --git a/src/com/android/server/telecom/InterruptionFilterProxy.java b/src/com/android/server/telecom/InterruptionFilterProxy.java
new file mode 100644
index 0000000..434c341
--- /dev/null
+++ b/src/com/android/server/telecom/InterruptionFilterProxy.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2016 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;
+
+/**
+ * Defines common functionality used by {@link CallAudioRouteStateMachine} to control the current
+ * interruption filter for notifications while in a call. Used to ensure that this functionality
+ * can be mocked out in unit tests.
+ */
+public interface InterruptionFilterProxy {
+ void setInterruptionFilter(int interruptionFilter);
+ int getCurrentInterruptionFilter();
+}
diff --git a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
index 8de8fc9..95ab7db 100644
--- a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
@@ -56,9 +56,6 @@
*/
@VisibleForTesting
public class NewOutgoingCallIntentBroadcaster {
- private static final String EXTRA_ACTUAL_NUMBER_TO_DIAL =
- "android.telecom.extra.ACTUAL_NUMBER_TO_DIAL";
-
/**
* Legacy string constants used to retrieve gateway provider extras from intents. These still
* need to be copied from the source call intent to the destination intent in order to
@@ -68,14 +65,13 @@
public static final String EXTRA_GATEWAY_PROVIDER_PACKAGE =
"com.android.phone.extra.GATEWAY_PROVIDER_PACKAGE";
public static final String EXTRA_GATEWAY_URI = "com.android.phone.extra.GATEWAY_URI";
- public static final String EXTRA_GATEWAY_ORIGINAL_URI =
- "com.android.phone.extra.GATEWAY_ORIGINAL_URI";
private final CallsManager mCallsManager;
private final Call mCall;
private final Intent mIntent;
private final Context mContext;
private final PhoneNumberUtilsAdapter mPhoneNumberUtilsAdapter;
+ private final TelecomSystem.SyncRoot mLock;
/*
* Whether or not the outgoing call intent originated from the default phone application. If
@@ -93,6 +89,7 @@
mIntent = intent;
mPhoneNumberUtilsAdapter = phoneNumberUtilsAdapter;
mIsDefaultOrSystemPhoneApp = isDefaultPhoneApp;
+ mLock = mCallsManager.getLock();
}
/**
@@ -106,63 +103,65 @@
try {
Log.startSession("NOCBIR.oR");
Trace.beginSection("onReceiveNewOutgoingCallBroadcast");
- Log.v(this, "onReceive: %s", intent);
+ synchronized (mLock) {
+ Log.v(this, "onReceive: %s", intent);
- // Once the NEW_OUTGOING_CALL broadcast is finished, the resultData is used as the
- // actual number to call. (If null, no call will be placed.)
- String resultNumber = getResultData();
- Log.i(this, "Received new-outgoing-call-broadcast for %s with data %s", mCall,
- Log.pii(resultNumber));
+ // Once the NEW_OUTGOING_CALL broadcast is finished, the resultData is
+ // used as the actual number to call. (If null, no call will be placed.)
+ String resultNumber = getResultData();
+ Log.i(this, "Received new-outgoing-call-broadcast for %s with data %s", mCall,
+ Log.pii(resultNumber));
- boolean endEarly = false;
- if (resultNumber == null) {
- Log.v(this, "Call cancelled (null number), returning...");
- endEarly = true;
- } else if (mPhoneNumberUtilsAdapter.isPotentialLocalEmergencyNumber(
- mContext, resultNumber)) {
- Log.w(this, "Cannot modify outgoing call to emergency number %s.",
- resultNumber);
- endEarly = true;
- }
-
- if (endEarly) {
- if (mCall != null) {
- mCall.disconnect(true /* wasViaNewOutgoingCall */);
+ boolean endEarly = false;
+ if (resultNumber == null) {
+ Log.v(this, "Call cancelled (null number), returning...");
+ endEarly = true;
+ } else if (mPhoneNumberUtilsAdapter.isPotentialLocalEmergencyNumber(
+ mContext, resultNumber)) {
+ Log.w(this, "Cannot modify outgoing call to emergency number %s.",
+ resultNumber);
+ endEarly = true;
}
- return;
+
+ if (endEarly) {
+ if (mCall != null) {
+ mCall.disconnect(true /* wasViaNewOutgoingCall */);
+ }
+ return;
+ }
+
+ // If this call is already disconnected then we have nothing more to do.
+ if (mCall.isDisconnected()) {
+ Log.w(this, "Call has already been disconnected," +
+ " ignore the broadcast Call %s", mCall);
+ return;
+ }
+
+ Uri resultHandleUri = Uri.fromParts(
+ mPhoneNumberUtilsAdapter.isUriNumber(resultNumber) ?
+ PhoneAccount.SCHEME_SIP : PhoneAccount.SCHEME_TEL,
+ resultNumber, null);
+
+ Uri originalUri = mIntent.getData();
+
+ if (originalUri.getSchemeSpecificPart().equals(resultNumber)) {
+ Log.v(this, "Call number unmodified after" +
+ " new outgoing call intent broadcast.");
+ } else {
+ Log.v(this, "Retrieved modified handle after outgoing call intent" +
+ " broadcast: Original: %s, Modified: %s",
+ Log.pii(originalUri),
+ Log.pii(resultHandleUri));
+ }
+
+ GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
+ mCall.setNewOutgoingCallIntentBroadcastIsDone();
+ mCallsManager.placeOutgoingCall(mCall, resultHandleUri, gatewayInfo,
+ mIntent.getBooleanExtra(
+ TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false),
+ mIntent.getIntExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
+ VideoProfile.STATE_AUDIO_ONLY));
}
-
- // If this call is already disconnected then we have nothing more to do.
- if (mCall.isDisconnected()) {
- Log.w(this,
- "Call has already been disconnected, ignore the broadcast Call %s", mCall);
- return;
- }
-
- Uri resultHandleUri = Uri.fromParts(
- mPhoneNumberUtilsAdapter.isUriNumber(resultNumber) ?
- PhoneAccount.SCHEME_SIP : PhoneAccount.SCHEME_TEL,
- resultNumber, null);
-
- Uri originalUri = mIntent.getData();
-
- if (originalUri.getSchemeSpecificPart().equals(resultNumber)) {
- Log.v(this, "Call number unmodified after new outgoing call intent broadcast.");
- } else {
- Log.v(this, "Retrieved modified handle after outgoing call intent broadcast: "
- + "Original: %s, Modified: %s",
- Log.pii(originalUri),
- Log.pii(resultHandleUri));
- }
-
- GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
- mCall.setNewOutgoingCallIntentBroadcastIsDone();
- mCallsManager.placeOutgoingCall(mCall, resultHandleUri, gatewayInfo,
- mIntent.getBooleanExtra(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE,
- false),
- mIntent.getIntExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
- VideoProfile.STATE_AUDIO_ONLY));
-
} finally {
Trace.endSection();
Log.endSession();
diff --git a/src/com/android/server/telecom/ParcelableCallUtils.java b/src/com/android/server/telecom/ParcelableCallUtils.java
index 9b65197..9cc61b3 100644
--- a/src/com/android/server/telecom/ParcelableCallUtils.java
+++ b/src/com/android/server/telecom/ParcelableCallUtils.java
@@ -28,11 +28,13 @@
* Utilities dealing with {@link ParcelableCall}.
*/
public class ParcelableCallUtils {
+ private static final int CALL_STATE_OVERRIDE_NONE = -1;
+
public static class Converter {
public ParcelableCall toParcelableCall(Call call, boolean includeVideoProvider,
PhoneAccountRegistrar phoneAccountRegistrar) {
return ParcelableCallUtils.toParcelableCall(
- call, includeVideoProvider, phoneAccountRegistrar);
+ call, includeVideoProvider, phoneAccountRegistrar, false);
}
}
@@ -45,13 +47,45 @@
* method creates a {@link VideoCallImpl} instance on access it is important for the
* recipient of the {@link ParcelableCall} to know if the video provider changed.
* @param phoneAccountRegistrar The {@link PhoneAccountRegistrar}.
+ * @param supportsExternalCalls Indicates whether the call should be parcelled for an
+ * {@link InCallService} which supports external calls or not.
+ */
+ public static ParcelableCall toParcelableCall(
+ Call call,
+ boolean includeVideoProvider,
+ PhoneAccountRegistrar phoneAccountRegistrar,
+ boolean supportsExternalCalls) {
+ return toParcelableCall(call, includeVideoProvider, phoneAccountRegistrar,
+ supportsExternalCalls, CALL_STATE_OVERRIDE_NONE /* overrideState */);
+ }
+
+ /**
+ * Parcels all information for a {@link Call} into a new {@link ParcelableCall} instance.
+ *
+ * @param call The {@link Call} to parcel.
+ * @param includeVideoProvider {@code true} if the video provider should be parcelled with the
+ * {@link Call}, {@code false} otherwise. Since the {@link ParcelableCall#getVideoCall()}
+ * method creates a {@link VideoCallImpl} instance on access it is important for the
+ * recipient of the {@link ParcelableCall} to know if the video provider changed.
+ * @param phoneAccountRegistrar The {@link PhoneAccountRegistrar}.
+ * @param supportsExternalCalls Indicates whether the call should be parcelled for an
+ * {@link InCallService} which supports external calls or not.
+ * @param overrideState When not {@link #CALL_STATE_OVERRIDE_NONE}, use the provided state as an
+ * override to whatever is defined in the call.
* @return The {@link ParcelableCall} containing all call information from the {@link Call}.
*/
public static ParcelableCall toParcelableCall(
Call call,
boolean includeVideoProvider,
- PhoneAccountRegistrar phoneAccountRegistrar) {
- int state = getParcelableState(call);
+ PhoneAccountRegistrar phoneAccountRegistrar,
+ boolean supportsExternalCalls,
+ int overrideState) {
+ int state;
+ if (overrideState == CALL_STATE_OVERRIDE_NONE) {
+ state = getParcelableState(call, supportsExternalCalls);
+ } else {
+ state = overrideState;
+ }
int capabilities = convertConnectionToCallCapabilities(call.getConnectionCapabilities());
int properties = convertConnectionToCallProperties(call.getConnectionProperties());
if (call.isConference()) {
@@ -63,7 +97,7 @@
}
// If this is a single-SIM device, the "default SIM" will always be the only SIM.
- boolean isDefaultSmsAccount =
+ boolean isDefaultSmsAccount = phoneAccountRegistrar != null &&
phoneAccountRegistrar.isUserSelectedSmsPhoneAccount(call.getTargetPhoneAccount());
if (call.isRespondViaSmsCapable() && isDefaultSmsAccount) {
capabilities |= android.telecom.Call.Details.CAPABILITY_RESPOND_VIA_TEXT;
@@ -141,7 +175,7 @@
call.getExtras());
}
- private static int getParcelableState(Call call) {
+ private static int getParcelableState(Call call, boolean supportsExternalCalls) {
int state = CallState.NEW;
switch (call.getState()) {
case CallState.ABORTED:
@@ -157,6 +191,19 @@
case CallState.DIALING:
state = android.telecom.Call.STATE_DIALING;
break;
+ case CallState.PULLING:
+ if (supportsExternalCalls) {
+ // The InCallService supports external calls, so it must handle
+ // STATE_PULLING_CALL.
+ state = android.telecom.Call.STATE_PULLING_CALL;
+ } else {
+ // The InCallService does NOT support external calls, so remap
+ // STATE_PULLING_CALL to STATE_DIALING. In essence, pulling a call can be seen
+ // as a form of dialing, so it is appropriate for InCallServices which do not
+ // handle external calls.
+ state = android.telecom.Call.STATE_DIALING;
+ }
+ break;
case CallState.DISCONNECTING:
state = android.telecom.Call.STATE_DISCONNECTING;
break;
@@ -267,11 +314,14 @@
Connection.PROPERTY_GENERIC_CONFERENCE,
android.telecom.Call.Details.PROPERTY_GENERIC_CONFERENCE,
- Connection.PROPERTY_SHOW_CALLBACK_NUMBER,
+ Connection.PROPERTY_EMERGENCY_CALLBACK_MODE,
android.telecom.Call.Details.PROPERTY_EMERGENCY_CALLBACK_MODE,
Connection.PROPERTY_IS_EXTERNAL_CALL,
- android.telecom.Call.Details.PROPERTY_IS_EXTERNAL_CALL
+ android.telecom.Call.Details.PROPERTY_IS_EXTERNAL_CALL,
+
+ Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY,
+ android.telecom.Call.Details.PROPERTY_HAS_CDMA_VOICE_PRIVACY
};
private static int convertConnectionToCallProperties(int connectionProperties) {
diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
index bd96d12..143ea53 100644
--- a/src/com/android/server/telecom/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -60,7 +60,6 @@
import org.xmlpull.v1.XmlSerializer;
import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -77,8 +76,12 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* Handles writing and reading PhoneAccountHandle registration entries. This is a simple verbatim
@@ -245,6 +248,46 @@
}
/**
+ * @return The {@link DefaultPhoneAccountHandle} containing the user-selected default calling
+ * account and group Id for the {@link UserHandle} specified.
+ */
+ private DefaultPhoneAccountHandle getUserSelectedDefaultPhoneAccount(UserHandle userHandle) {
+ if (userHandle == null) {
+ return null;
+ }
+ DefaultPhoneAccountHandle defaultPhoneAccountHandle = mState.defaultOutgoingAccountHandles
+ .get(userHandle);
+ if (defaultPhoneAccountHandle == null) {
+ return null;
+ }
+
+ return defaultPhoneAccountHandle;
+ }
+
+ /**
+ * @return The currently registered PhoneAccount in Telecom that has the same group Id.
+ */
+ private PhoneAccount getPhoneAccountByGroupId(String groupId, ComponentName groupComponentName,
+ UserHandle userHandle, PhoneAccountHandle excludePhoneAccountHandle) {
+ if (groupId == null || groupId.isEmpty() || userHandle == null) {
+ return null;
+ }
+ // Get the PhoneAccount with the same group Id (and same ComponentName) that is not the
+ // newAccount that was just added
+ List<PhoneAccount> accounts = getAllPhoneAccounts(userHandle).stream()
+ .filter(account -> groupId.equals(account.getGroupId()) &&
+ !account.getAccountHandle().equals(excludePhoneAccountHandle) &&
+ Objects.equals(account.getAccountHandle().getComponentName(),
+ groupComponentName))
+ .collect(Collectors.toList());
+ // There should be one or no PhoneAccounts with the same group Id
+ if (accounts.size() > 1) {
+ Log.w(this, "Found multiple PhoneAccounts registered to the same Group Id!");
+ }
+ return accounts.isEmpty() ? null : accounts.get(0);
+ }
+
+ /**
* Sets the phone account with which to place all calls by default. Set by the user
* within phone settings.
*/
@@ -278,7 +321,8 @@
}
mState.defaultOutgoingAccountHandles
- .put(userHandle, new DefaultPhoneAccountHandle(userHandle, accountHandle));
+ .put(userHandle, new DefaultPhoneAccountHandle(userHandle, accountHandle,
+ account.getGroupId()));
}
write();
@@ -592,6 +636,8 @@
}
mState.accounts.add(account);
+ // Set defaults and replace based on the group Id.
+ maybeReplaceOldAccount(account);
// Reset enabled state to whatever the value was if the account was already registered,
// or _true_ if this is a SIM-based account. All SIM-based accounts are always enabled.
account.setIsEnabled(
@@ -698,6 +744,40 @@
}
}
+ private void maybeReplaceOldAccount(PhoneAccount newAccount) {
+ UserHandle newAccountUserHandle = newAccount.getAccountHandle().getUserHandle();
+ DefaultPhoneAccountHandle defaultHandle =
+ getUserSelectedDefaultPhoneAccount(newAccountUserHandle);
+ if (defaultHandle == null || defaultHandle.groupId.isEmpty()) {
+ Log.v(this, "maybeReplaceOldAccount: Not replacing PhoneAccount, no group Id or " +
+ "default.");
+ return;
+ }
+ if (!defaultHandle.groupId.equals(newAccount.getGroupId())) {
+ Log.v(this, "maybeReplaceOldAccount: group Ids are not equal.");
+ return;
+ }
+ if (Objects.equals(newAccount.getAccountHandle().getComponentName(),
+ defaultHandle.phoneAccountHandle.getComponentName())) {
+ // Move default calling account over to new user, since the ComponentNames and Group Ids
+ // are the same.
+ setUserSelectedOutgoingPhoneAccount(newAccount.getAccountHandle(),
+ newAccountUserHandle);
+ } else {
+ Log.v(this, "maybeReplaceOldAccount: group Ids are equal, but ComponentName is not" +
+ " the same as the default. Not replacing default PhoneAccount.");
+ }
+ PhoneAccount replacementAccount = getPhoneAccountByGroupId(newAccount.getGroupId(),
+ newAccount.getAccountHandle().getComponentName(), newAccountUserHandle,
+ newAccount.getAccountHandle());
+ if (replacementAccount != null) {
+ // Unregister the old PhoneAccount.
+ Log.v(this, "maybeReplaceOldAccount: Unregistering old PhoneAccount: " +
+ replacementAccount.getAccountHandle());
+ unregisterPhoneAccount(replacementAccount.getAccountHandle());
+ }
+ }
+
/**
* Determines if the connection service specified by a {@link PhoneAccountHandle} requires the
* {@link Manifest.permission#BIND_TELECOM_CONNECTION_SERVICE} permission.
@@ -905,10 +985,13 @@
public final PhoneAccountHandle phoneAccountHandle;
+ public final String groupId;
+
public DefaultPhoneAccountHandle(UserHandle userHandle,
- PhoneAccountHandle phoneAccountHandle) {
+ PhoneAccountHandle phoneAccountHandle, String groupId) {
this.userHandle = userHandle;
this.phoneAccountHandle = phoneAccountHandle;
+ this.groupId = groupId;
}
}
@@ -1155,6 +1238,13 @@
serializer.endTag(null, tagName);
}
+ protected void writeNonNullString(String tagName, String value, XmlSerializer serializer)
+ throws IOException {
+ serializer.startTag(null, tagName);
+ serializer.text(value != null ? value : "");
+ serializer.endTag(null, tagName);
+ }
+
/**
* Reads a string array from the XML parser.
*
@@ -1293,8 +1383,9 @@
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
if (parser.getName().equals(DEFAULT_OUTGOING)) {
if (s.versionNumber < 9) {
- // Migration old default phone account handle here by assuming the
- // default phone account handle is belong to primary user.
+ // Migrate old default phone account handle here by assuming the
+ // default phone account handle belongs to the primary user. Also,
+ // assume there are no groups.
parser.nextTag();
PhoneAccountHandle phoneAccountHandle = sPhoneAccountHandleXml
.readFromXml(parser, s.versionNumber, context);
@@ -1304,7 +1395,7 @@
UserHandle userHandle = primaryUser.getUserHandle();
DefaultPhoneAccountHandle defaultPhoneAccountHandle
= new DefaultPhoneAccountHandle(userHandle,
- phoneAccountHandle);
+ phoneAccountHandle, "" /* groupId */);
s.defaultOutgoingAccountHandles
.put(userHandle, defaultPhoneAccountHandle);
}
@@ -1344,6 +1435,7 @@
private static final String CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE
= "default_outgoing_phone_account_handle";
private static final String USER_SERIAL_NUMBER = "user_serial_number";
+ private static final String GROUP_ID = "group_id";
private static final String ACCOUNT_HANDLE = "account_handle";
@Override
@@ -1355,6 +1447,7 @@
if (serialNumber != -1) {
serializer.startTag(null, CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE);
writeLong(USER_SERIAL_NUMBER, serialNumber, serializer);
+ writeNonNullString(GROUP_ID, o.groupId, serializer);
serializer.startTag(null, ACCOUNT_HANDLE);
sPhoneAccountHandleXml.writeToXml(o.phoneAccountHandle, serializer,
context);
@@ -1372,6 +1465,7 @@
int outerDepth = parser.getDepth();
PhoneAccountHandle accountHandle = null;
String userSerialNumberString = null;
+ String groupId = "";
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
if (parser.getName().equals(ACCOUNT_HANDLE)) {
parser.nextTag();
@@ -1380,6 +1474,9 @@
} else if (parser.getName().equals(USER_SERIAL_NUMBER)) {
parser.next();
userSerialNumberString = parser.getText();
+ } else if (parser.getName().equals(GROUP_ID)) {
+ parser.next();
+ groupId = parser.getText();
}
}
UserHandle userHandle = null;
@@ -1393,8 +1490,9 @@
"Could not parse UserHandle " + userSerialNumberString);
}
}
- if (accountHandle != null && userHandle != null) {
- return new DefaultPhoneAccountHandle(userHandle, accountHandle);
+ if (accountHandle != null && userHandle != null && groupId != null) {
+ return new DefaultPhoneAccountHandle(userHandle, accountHandle,
+ groupId);
}
}
return null;
diff --git a/src/com/android/server/telecom/PhoneStateBroadcaster.java b/src/com/android/server/telecom/PhoneStateBroadcaster.java
index 8c9a5ad..a44fc03 100644
--- a/src/com/android/server/telecom/PhoneStateBroadcaster.java
+++ b/src/com/android/server/telecom/PhoneStateBroadcaster.java
@@ -44,6 +44,9 @@
@Override
public void onCallStateChanged(Call call, int oldState, int newState) {
+ if (call.isExternalCall()) {
+ return;
+ }
updateStates(call);
}
@@ -84,8 +87,8 @@
int callState = TelephonyManager.CALL_STATE_IDLE;
if (mCallsManager.hasRingingCall()) {
callState = TelephonyManager.CALL_STATE_RINGING;
- } else if (mCallsManager.getFirstCallWithState(CallState.DIALING, CallState.ACTIVE,
- CallState.ON_HOLD) != null) {
+ } else if (mCallsManager.getFirstCallWithState(CallState.DIALING, CallState.PULLING,
+ CallState.ACTIVE, CallState.ON_HOLD) != null) {
callState = TelephonyManager.CALL_STATE_OFFHOOK;
}
sendPhoneStateChangedBroadcast(call, callState);
diff --git a/src/com/android/server/telecom/ProximitySensorManager.java b/src/com/android/server/telecom/ProximitySensorManager.java
index 4ddb121..a79c0ed 100644
--- a/src/com/android/server/telecom/ProximitySensorManager.java
+++ b/src/com/android/server/telecom/ProximitySensorManager.java
@@ -39,6 +39,9 @@
@Override
public void onCallRemoved(Call call) {
+ if (call.isExternalCall()) {
+ return;
+ }
if (mCallsManager.getCalls().isEmpty()) {
Log.i(this, "All calls removed, resetting proximity sensor to default state");
turnOff(true);
diff --git a/src/com/android/server/telecom/RespondViaSmsManager.java b/src/com/android/server/telecom/RespondViaSmsManager.java
index e711c18..6b2a39e 100644
--- a/src/com/android/server/telecom/RespondViaSmsManager.java
+++ b/src/com/android/server/telecom/RespondViaSmsManager.java
@@ -30,6 +30,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.telecom.Connection;
import android.telecom.Log;
import android.telecom.Response;
import android.telephony.PhoneNumberUtils;
@@ -132,8 +133,7 @@
public void onIncomingCallRejected(Call call, boolean rejectWithMessage, String textMessage) {
if (rejectWithMessage
&& call.getHandle() != null
- && !call.can(
- android.telecom.Call.Details.CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION)) {
+ && !call.can(Connection.CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION)) {
int subId = mCallsManager.getPhoneAccountRegistrar().getSubscriptionIdForPhoneAccount(
call.getTargetPhoneAccount());
rejectCallWithMessage(call.getContext(), call.getHandle().getSchemeSpecificPart(),
diff --git a/src/com/android/server/telecom/Ringer.java b/src/com/android/server/telecom/Ringer.java
index 4c4da75..a5bcca0 100644
--- a/src/com/android/server/telecom/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -95,30 +95,32 @@
mInCallController = inCallController;
}
- public void startRinging(Call foregroundCall) {
+ public boolean startRinging(Call foregroundCall) {
+ AudioManager audioManager =
+ (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ boolean isRingerAudible = audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0;
+
if (mSystemSettingsUtil.isTheaterModeOn(mContext)) {
- return;
+ return false;
}
if (foregroundCall == null) {
Log.wtf(this, "startRinging called with null foreground call.");
- return;
+ return false;
}
if (mInCallController.doesConnectedDialerSupportRinging()) {
Log.addEvent(foregroundCall, LogUtils.Events.SKIP_RINGING);
- return;
+ return isRingerAudible;
}
stopCallWaiting();
if (!shouldRingForContact(foregroundCall.getContactUri())) {
- return;
+ return false;
}
- AudioManager audioManager =
- (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
- if (audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0) {
+ if (isRingerAudible) {
mRingingCall = foregroundCall;
Log.addEvent(foregroundCall, LogUtils.Events.START_RINGER);
// Because we wait until a contact info query to complete before processing a
@@ -127,7 +129,7 @@
// request the custom ringtone from the call and expect it to be current.
mRingtonePlayer.play(mRingtoneFactory, foregroundCall);
} else {
- Log.v(this, "startRingingOrCallWaiting, skipping because volume is 0");
+ Log.i(this, "startRingingOrCallWaiting, skipping because volume is 0");
}
if (shouldVibrate(mContext) && !mIsVibrating) {
@@ -135,6 +137,8 @@
VIBRATION_ATTRIBUTES);
mIsVibrating = true;
}
+
+ return isRingerAudible;
}
public void startCallWaiting(Call call) {
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index bf29395..c6ce910 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -43,6 +43,7 @@
import android.telecom.ParcelableCallAnalytics;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomAnalytics;
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.telephony.SubscriptionManager;
@@ -57,8 +58,6 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -1146,11 +1145,11 @@
}
@Override
- public List<ParcelableCallAnalytics> dumpCallAnalytics() {
+ public TelecomAnalytics dumpCallAnalytics() {
try {
Log.startSession("TSI.dCA");
enforcePermission(DUMP);
- return Arrays.asList(Analytics.dumpToParcelableAnalytics());
+ return Analytics.dumpToParcelableAnalytics();
} finally {
Log.endSession();
}
@@ -1174,6 +1173,11 @@
return;
}
+ if (args.length > 0 && Analytics.ANALYTICS_DUMPSYS_ARG.equals(args[0])) {
+ Analytics.dumpToEncodedProto(writer, args);
+ return;
+ }
+
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
if (mCallsManager != null) {
pw.println("CallsManager: ");
@@ -1294,6 +1298,7 @@
call = mCallsManager.getFirstCallWithState(
CallState.ACTIVE,
CallState.DIALING,
+ CallState.PULLING,
CallState.RINGING,
CallState.ON_HOLD);
}
diff --git a/src/com/android/server/telecom/TelecomSystem.java b/src/com/android/server/telecom/TelecomSystem.java
index ca74333..5bbce5c 100644
--- a/src/com/android/server/telecom/TelecomSystem.java
+++ b/src/com/android/server/telecom/TelecomSystem.java
@@ -180,7 +180,8 @@
bluetoothPhoneServiceImplFactory,
Timeouts.Adapter timeoutsAdapter,
AsyncRingtonePlayer asyncRingtonePlayer,
- PhoneNumberUtilsAdapter phoneNumberUtilsAdapter) {
+ PhoneNumberUtilsAdapter phoneNumberUtilsAdapter,
+ InterruptionFilterProxy interruptionFilterProxy) {
mContext = context.getApplicationContext();
LogUtils.initLogging(mContext);
@@ -222,7 +223,8 @@
defaultDialerAdapter,
timeoutsAdapter,
asyncRingtonePlayer,
- phoneNumberUtilsAdapter);
+ phoneNumberUtilsAdapter,
+ interruptionFilterProxy);
mRespondViaSmsManager = new RespondViaSmsManager(mCallsManager, mLock);
mCallsManager.setRespondViaSmsManager(mRespondViaSmsManager);
diff --git a/src/com/android/server/telecom/TelephonyUtil.java b/src/com/android/server/telecom/TelephonyUtil.java
index 69adaf9..50b8901 100644
--- a/src/com/android/server/telecom/TelephonyUtil.java
+++ b/src/com/android/server/telecom/TelephonyUtil.java
@@ -22,9 +22,15 @@
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import com.android.internal.annotations.VisibleForTesting;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
/**
* Utilities to deal with the system telephony services. The system telephony services are treated
* differently from 3rd party services in some situations (emergency calls, audio focus, etc...).
@@ -67,4 +73,55 @@
return handle != null && PhoneNumberUtils.isLocalEmergencyNumber(
context, handle.getSchemeSpecificPart());
}
+
+ public static void sortSimPhoneAccounts(Context context, List<PhoneAccount> accounts) {
+ final TelephonyManager telephonyManager = TelephonyManager.from(context);
+
+ // Sort the accounts according to how we want to display them.
+ Collections.sort(accounts, new Comparator<PhoneAccount>() {
+ @Override
+ public int compare(PhoneAccount account1, PhoneAccount account2) {
+ int retval = 0;
+
+ // SIM accounts go first
+ boolean isSim1 = account1.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
+ boolean isSim2 = account2.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
+ if (isSim1 != isSim2) {
+ retval = isSim1 ? -1 : 1;
+ }
+
+ int subId1 = telephonyManager.getSubIdForPhoneAccount(account1);
+ int subId2 = telephonyManager.getSubIdForPhoneAccount(account2);
+ if (subId1 != SubscriptionManager.INVALID_SUBSCRIPTION_ID &&
+ subId2 != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ retval = (SubscriptionManager.getSlotId(subId1) <
+ SubscriptionManager.getSlotId(subId2)) ? -1 : 1;
+ }
+
+ // Then order by package
+ if (retval == 0) {
+ String pkg1 = account1.getAccountHandle().getComponentName().getPackageName();
+ String pkg2 = account2.getAccountHandle().getComponentName().getPackageName();
+ retval = pkg1.compareTo(pkg2);
+ }
+
+ // Finally, order by label
+ if (retval == 0) {
+ String label1 = nullToEmpty(account1.getLabel().toString());
+ String label2 = nullToEmpty(account2.getLabel().toString());
+ retval = label1.compareTo(label2);
+ }
+
+ // Then by hashcode
+ if (retval == 0) {
+ retval = account1.hashCode() - account2.hashCode();
+ }
+ return retval;
+ }
+ });
+ }
+
+ private static String nullToEmpty(String str) {
+ return str == null ? "" : str;
+ }
}
diff --git a/src/com/android/server/telecom/Timeouts.java b/src/com/android/server/telecom/Timeouts.java
index 46894dc..f837947 100644
--- a/src/com/android/server/telecom/Timeouts.java
+++ b/src/com/android/server/telecom/Timeouts.java
@@ -32,6 +32,10 @@
public long getCallScreeningTimeoutMillis(ContentResolver cr) {
return Timeouts.getCallScreeningTimeoutMillis(cr);
}
+
+ public long getCallRemoveUnbindInCallServicesDelay(ContentResolver cr) {
+ return Timeouts.getCallRemoveUnbindInCallServicesDelay(cr);
+ }
}
/** A prefix to use for all keys so to not clobber the global namespace. */
@@ -53,22 +57,13 @@
}
/**
- * Returns the longest period, in milliseconds, to wait for the query for direct-to-voicemail
- * to complete. If the query goes beyond this timeout, the incoming call screen is shown to the
- * user.
- */
- public static long getDirectToVoicemailMillis(ContentResolver contentResolver) {
- return get(contentResolver, "direct_to_voicemail_ms", 500L);
- }
-
- /**
* Returns the amount of time to wait before disconnecting a call that was canceled via
* NEW_OUTGOING_CALL broadcast. This timeout allows apps which repost the call using a gateway
* to reuse the existing call, preventing the call from causing a start->end->start jank in the
* in-call UI.
*/
public static long getNewOutgoingCallCancelMillis(ContentResolver contentResolver) {
- return get(contentResolver, "new_outgoing_call_cancel_ms", 400L);
+ return get(contentResolver, "new_outgoing_call_cancel_ms", 100000L);
}
/**
@@ -132,11 +127,4 @@
public static long getCallScreeningTimeoutMillis(ContentResolver contentResolver) {
return get(contentResolver, "call_screening_timeout", 5000L /* 5 seconds */);
}
-
- /**
- * Returns the amount of time to wait for the block checker to allow or disallow a call.
- */
- public static long getBlockCheckTimeoutMillis(ContentResolver contentResolver) {
- return get(contentResolver, "block_check_timeout_millis", 500L);
- }
}
diff --git a/src/com/android/server/telecom/VideoProviderProxy.java b/src/com/android/server/telecom/VideoProviderProxy.java
index 4792d39..e14aba7 100644
--- a/src/com/android/server/telecom/VideoProviderProxy.java
+++ b/src/com/android/server/telecom/VideoProviderProxy.java
@@ -30,7 +30,6 @@
import com.android.internal.telecom.IVideoProvider;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -131,6 +130,30 @@
Log.startSession("VPP.rSMR");
synchronized (mLock) {
logFromVideoProvider("receiveSessionModifyRequest: " + videoProfile);
+ Log.addEvent(mCall, LogUtils.Events.RECEIVE_VIDEO_REQUEST,
+ VideoProfile.videoStateToString(videoProfile.getVideoState()));
+
+ mCall.getAnalytics().addVideoEvent(
+ Analytics.RECEIVE_REMOTE_SESSION_MODIFY_REQUEST,
+ videoProfile.getVideoState());
+
+ if (!mCall.isVideoCallingSupported() &&
+ VideoProfile.isVideo(videoProfile.getVideoState())) {
+ // If video calling is not supported by the phone account, and we receive
+ // a request to upgrade to video, automatically reject it without informing
+ // the InCallService.
+ Log.addEvent(mCall, LogUtils.Events.SEND_VIDEO_RESPONSE, "video not supported");
+ VideoProfile responseProfile = new VideoProfile(
+ VideoProfile.STATE_AUDIO_ONLY);
+ try {
+ mConectionServiceVideoProvider.sendSessionModifyResponse(
+ responseProfile);
+ } catch (RemoteException e) {
+ }
+
+ // Don't want to inform listeners of the request as we've just rejected it.
+ return;
+ }
// Inform other Telecom components of the session modification request.
for (Listener listener : mListeners) {
@@ -155,10 +178,19 @@
@Override
public void receiveSessionModifyResponse(int status, VideoProfile requestProfile,
VideoProfile responseProfile) {
+ logFromVideoProvider("receiveSessionModifyResponse: status=" + status +
+ " requestProfile=" + requestProfile + " responseProfile=" + responseProfile);
+ String eventMessage = "Status Code : " + status + " Video State: " +
+ (responseProfile != null ? responseProfile.getVideoState() : "null");
+ Log.addEvent(mCall, LogUtils.Events.RECEIVE_VIDEO_RESPONSE, eventMessage);
synchronized (mLock) {
- logFromVideoProvider("receiveSessionModifyResponse: status=" + status +
- " requestProfile=" + requestProfile + " responseProfile=" +
- responseProfile);
+ if (status == Connection.VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
+ mCall.getAnalytics().addVideoEvent(
+ Analytics.RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE,
+ responseProfile == null ?
+ VideoProfile.STATE_AUDIO_ONLY :
+ responseProfile.getVideoState());
+ }
VideoProviderProxy.this.receiveSessionModifyResponse(status, requestProfile,
responseProfile);
}
@@ -173,7 +205,8 @@
@Override
public void handleCallSessionEvent(int event) {
synchronized (mLock) {
- logFromVideoProvider("handleCallSessionEvent: " + event);
+ logFromVideoProvider("handleCallSessionEvent: " +
+ Connection.VideoProvider.sessionEventToString(event));
VideoProviderProxy.this.handleCallSessionEvent(event);
}
}
@@ -338,6 +371,11 @@
public void onSendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
synchronized (mLock) {
logFromInCall("sendSessionModifyRequest: from=" + fromProfile + " to=" + toProfile);
+ Log.addEvent(mCall, LogUtils.Events.SEND_VIDEO_REQUEST,
+ VideoProfile.videoStateToString(toProfile.getVideoState()));
+ mCall.getAnalytics().addVideoEvent(
+ Analytics.SEND_LOCAL_SESSION_MODIFY_REQUEST,
+ toProfile.getVideoState());
try {
mConectionServiceVideoProvider.sendSessionModifyRequest(fromProfile, toProfile);
} catch (RemoteException e) {
@@ -355,6 +393,11 @@
public void onSendSessionModifyResponse(VideoProfile responseProfile) {
synchronized (mLock) {
logFromInCall("sendSessionModifyResponse: " + responseProfile);
+ Log.addEvent(mCall, LogUtils.Events.SEND_VIDEO_RESPONSE,
+ VideoProfile.videoStateToString(responseProfile.getVideoState()));
+ mCall.getAnalytics().addVideoEvent(
+ Analytics.SEND_LOCAL_SESSION_MODIFY_RESPONSE,
+ responseProfile.getVideoState());
try {
mConectionServiceVideoProvider.sendSessionModifyResponse(responseProfile);
} catch (RemoteException e) {
@@ -435,7 +478,7 @@
* @param toLog The message to log.
*/
private void logFromInCall(String toLog) {
- Log.v(this, "IC->VP: " + toLog);
+ Log.i(this, "IC->VP (callId=" + (mCall == null ? "?" : mCall.getId()) + "): " + toLog);
}
/**
@@ -445,6 +488,6 @@
* @param toLog The message to log.
*/
private void logFromVideoProvider(String toLog) {
- Log.v(this, "VP->IC: " + toLog);
+ Log.i(this, "VP->IC (callId=" + (mCall == null ? "?" : mCall.getId()) + "): " + toLog);
}
}
diff --git a/src/com/android/server/telecom/callfiltering/AsyncBlockCheckFilter.java b/src/com/android/server/telecom/callfiltering/AsyncBlockCheckFilter.java
index 38c84fa..2f78d23 100644
--- a/src/com/android/server/telecom/callfiltering/AsyncBlockCheckFilter.java
+++ b/src/com/android/server/telecom/callfiltering/AsyncBlockCheckFilter.java
@@ -34,7 +34,8 @@
private final Context mContext;
private final BlockCheckerAdapter mBlockCheckerAdapter;
private Call mIncomingCall;
- private Session mLogSubsession;
+ private Session mBackgroundTaskSubsession;
+ private Session mPostExecuteSubsession;
private CallFilterResultCallback mCallback;
public AsyncBlockCheckFilter(Context context, BlockCheckerAdapter blockCheckerAdapter) {
@@ -53,13 +54,14 @@
@Override
protected void onPreExecute() {
- mLogSubsession = Log.createSubsession();
+ mBackgroundTaskSubsession = Log.createSubsession();
+ mPostExecuteSubsession = Log.createSubsession();
}
@Override
protected Boolean doInBackground(String... params) {
try {
- Log.continueSession(mLogSubsession, "ABCF.dIB");
+ Log.continueSession(mBackgroundTaskSubsession, "ABCF.dIB");
Log.addEvent(mIncomingCall, LogUtils.Events.BLOCK_CHECK_INITIATED);
return mBlockCheckerAdapter.isBlocked(mContext, params[0]);
} finally {
@@ -69,23 +71,28 @@
@Override
protected void onPostExecute(Boolean isBlocked) {
- CallFilteringResult result;
- if (isBlocked) {
- result = new CallFilteringResult(
- false, // shouldAllowCall
- true, //shouldReject
- false, //shouldAddToCallLog
- false // shouldShowNotification
- );
- } else {
- result = new CallFilteringResult(
- true, // shouldAllowCall
- false, // shouldReject
- true, // shouldAddToCallLog
- true // shouldShowNotification
- );
+ Log.continueSession(mPostExecuteSubsession, "ABCF.oPE");
+ try {
+ CallFilteringResult result;
+ if (isBlocked) {
+ result = new CallFilteringResult(
+ false, // shouldAllowCall
+ true, //shouldReject
+ false, //shouldAddToCallLog
+ false // shouldShowNotification
+ );
+ } else {
+ result = new CallFilteringResult(
+ true, // shouldAllowCall
+ false, // shouldReject
+ true, // shouldAddToCallLog
+ true // shouldShowNotification
+ );
+ }
+ Log.addEvent(mIncomingCall, LogUtils.Events.BLOCK_CHECK_FINISHED, result);
+ mCallback.onCallFilteringComplete(mIncomingCall, result);
+ } finally {
+ Log.endSession();
}
- Log.addEvent(mIncomingCall, LogUtils.Events.BLOCK_CHECK_FINISHED, result);
- mCallback.onCallFilteringComplete(mIncomingCall, result);
}
}
diff --git a/src/com/android/server/telecom/callfiltering/DirectToVoicemailCallFilter.java b/src/com/android/server/telecom/callfiltering/DirectToVoicemailCallFilter.java
index ffa327a..41e4351 100644
--- a/src/com/android/server/telecom/callfiltering/DirectToVoicemailCallFilter.java
+++ b/src/com/android/server/telecom/callfiltering/DirectToVoicemailCallFilter.java
@@ -24,6 +24,8 @@
import com.android.server.telecom.CallerInfoLookupHelper;
import com.android.server.telecom.LogUtils;
+import java.util.Objects;
+
public class DirectToVoicemailCallFilter implements IncomingCallFilter.CallFilter {
private final CallerInfoLookupHelper mCallerInfoLookupHelper;
@@ -35,13 +37,14 @@
public void startFilterLookup(final Call call, CallFilterResultCallback callback) {
Log.addEvent(call, LogUtils.Events.DIRECT_TO_VM_INITIATED);
final Uri callHandle = call.getHandle();
+
mCallerInfoLookupHelper.startLookup(callHandle,
new CallerInfoLookupHelper.OnQueryCompleteListener() {
@Override
public void onCallerInfoQueryComplete(Uri handle, CallerInfo info) {
CallFilteringResult result;
- if (callHandle.equals(handle)) {
- if (info.shouldSendToVoicemail) {
+ if (Objects.equals(callHandle, handle)) {
+ if (info != null && info.shouldSendToVoicemail) {
result = new CallFilteringResult(
false, // shouldAllowCall
true, // shouldReject
diff --git a/src/com/android/server/telecom/callfiltering/IncomingCallFilter.java b/src/com/android/server/telecom/callfiltering/IncomingCallFilter.java
index d059822..1c947d1 100644
--- a/src/com/android/server/telecom/callfiltering/IncomingCallFilter.java
+++ b/src/com/android/server/telecom/callfiltering/IncomingCallFilter.java
@@ -71,17 +71,15 @@
for (CallFilter filter : mFilters) {
filter.startFilterLookup(mCall, this);
}
- mHandler.postDelayed(new Runnable("ICF.pFTO") { // performFiltering time-out
+ // synchronized to prevent a race on mResult and to enter into Telecom.
+ mHandler.postDelayed(new Runnable("ICF.pFTO", mTelecomLock) { // performFiltering time-out
@Override
public void loggedRun() {
- // synchronized to prevent a race on mResult and to enter into Telecom.
- synchronized (mTelecomLock) {
- if (mIsPending) {
- Log.i(IncomingCallFilter.this, "Call filtering has timed out.");
- Log.addEvent(mCall, LogUtils.Events.FILTERING_TIMED_OUT);
- mListener.onCallFilteringComplete(mCall, mResult);
- mIsPending = false;
- }
+ if (mIsPending) {
+ Log.i(IncomingCallFilter.this, "Call filtering has timed out.");
+ Log.addEvent(mCall, LogUtils.Events.FILTERING_TIMED_OUT);
+ mListener.onCallFilteringComplete(mCall, mResult);
+ mIsPending = false;
}
}
}.prepare(), mTimeoutsAdapter.getCallScreeningTimeoutMillis(mContext.getContentResolver()));
@@ -92,16 +90,14 @@
mNumPendingFilters--;
mResult = result.combine(mResult);
if (mNumPendingFilters == 0) {
- mHandler.post(new Runnable("ICF.oCFC") {
+ // synchronized on mTelecomLock to enter into Telecom.
+ mHandler.post(new Runnable("ICF.oCFC", mTelecomLock) {
@Override
public void loggedRun() {
- // synchronized to enter into Telecom.
- synchronized (mTelecomLock) {
- if (mIsPending) {
- Log.addEvent(mCall, LogUtils.Events.FILTERING_COMPLETED, mResult);
- mListener.onCallFilteringComplete(mCall, mResult);
- mIsPending = false;
- }
+ if (mIsPending) {
+ Log.addEvent(mCall, LogUtils.Events.FILTERING_COMPLETED, mResult);
+ mListener.onCallFilteringComplete(mCall, mResult);
+ mIsPending = false;
}
}
}.prepare());
diff --git a/src/com/android/server/telecom/components/ChangeDefaultDialerDialog.java b/src/com/android/server/telecom/components/ChangeDefaultDialerDialog.java
index 5fd7904..107389b 100644
--- a/src/com/android/server/telecom/components/ChangeDefaultDialerDialog.java
+++ b/src/com/android/server/telecom/components/ChangeDefaultDialerDialog.java
@@ -21,11 +21,18 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.Color;
+import android.graphics.Typeface;
import android.os.Bundle;
import android.telecom.DefaultDialerManager;
import android.telecom.TelecomManager;
import android.telephony.TelephonyManager;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
import android.text.TextUtils;
+import android.text.style.ForegroundColorSpan;
+import android.text.style.StyleSpan;
import android.util.Log;
import com.android.internal.app.AlertActivity;
@@ -57,7 +64,7 @@
}
// Show dialog to require user confirmation.
- buildDialog(oldPackage, mNewPackage);
+ buildDialog(mNewPackage);
}
@Override
@@ -81,36 +88,26 @@
}
if (!DefaultDialerManager.getInstalledDialerApplications(this).contains(newPackage)) {
- Log.w(TAG, "Provided package name does not correspond to an installed Dialer "
+ Log.w(TAG, "Provided package name does not correspond to an installed Phone "
+ "application.");
return false;
}
if (!TextUtils.isEmpty(oldPackage) && TextUtils.equals(oldPackage, newPackage)) {
- Log.w(TAG, "Provided package name is already the current default Dialer application.");
+ Log.w(TAG, "Provided package name is already the current default Phone application.");
return false;
}
return true;
}
- private boolean buildDialog(String oldPackage, String newPackage) {
+ private boolean buildDialog(String newPackage) {
final PackageManager pm = getPackageManager();
- final String newPackageLabel =
- getApplicationLabelForPackageName(pm, newPackage);
+ final String newPackageLabel = getApplicationLabelForPackageName(pm, newPackage);
final AlertController.AlertParams p = mAlertParams;
- p.mTitle = getString(R.string.change_default_dialer_dialog_title);
- if (!TextUtils.isEmpty(oldPackage)) {
- String oldPackageLabel =
- getApplicationLabelForPackageName(pm, oldPackage);
- p.mMessage = getString(R.string.change_default_dialer_with_previous_app_set_text,
- newPackageLabel,
- oldPackageLabel);
- } else {
- p.mMessage = getString(R.string.change_default_dialer_no_previous_app_set_text,
- newPackageLabel);
- }
- p.mPositiveButtonText = getString(android.R.string.yes);
- p.mNegativeButtonText = getString(android.R.string.no);
+ p.mTitle = getString(R.string.change_default_dialer_dialog_title, newPackageLabel);
+ p.mMessage = getString(R.string.change_default_dialer_warning_message, newPackageLabel);
+ p.mPositiveButtonText = getString(R.string.change_default_dialer_dialog_affirmative);
+ p.mNegativeButtonText = getString(R.string.change_default_dialer_dialog_negative);
p.mPositiveButtonListener = this;
p.mNegativeButtonListener = this;
setupAlert();
diff --git a/src/com/android/server/telecom/components/TelecomService.java b/src/com/android/server/telecom/components/TelecomService.java
index 898ace9..d3cd073 100644
--- a/src/com/android/server/telecom/components/TelecomService.java
+++ b/src/com/android/server/telecom/components/TelecomService.java
@@ -16,6 +16,8 @@
package com.android.server.telecom.components;
+import android.app.Notification;
+import android.app.NotificationManager;
import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
@@ -36,7 +38,9 @@
import com.android.server.telecom.HeadsetMediaButtonFactory;
import com.android.server.telecom.InCallWakeLockControllerFactory;
import com.android.server.telecom.CallAudioManager;
+import com.android.server.telecom.InterruptionFilterProxy;
import com.android.server.telecom.PhoneAccountRegistrar;
+import com.android.server.telecom.PhoneNumberUtilsAdapter;
import com.android.server.telecom.PhoneNumberUtilsAdapterImpl;
import com.android.server.telecom.ProximitySensorManagerFactory;
import com.android.server.telecom.InCallWakeLockController;
@@ -72,6 +76,9 @@
*/
static void initializeTelecomSystem(Context context) {
if (TelecomSystem.getInstance() == null) {
+ final NotificationManager notificationManager =
+ (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+
TelecomSystem.setInstance(
new TelecomSystem(
context,
@@ -150,7 +157,18 @@
},
new Timeouts.Adapter(),
new AsyncRingtonePlayer(),
- new PhoneNumberUtilsAdapterImpl()
+ new PhoneNumberUtilsAdapterImpl(),
+ new InterruptionFilterProxy() {
+ @Override
+ public void setInterruptionFilter(int interruptionFilter) {
+ notificationManager.setInterruptionFilter(interruptionFilter);
+ }
+
+ @Override
+ public int getCurrentInterruptionFilter() {
+ return notificationManager.getCurrentInterruptionFilter();
+ }
+ }
));
}
if (BluetoothAdapter.getDefaultAdapter() != null) {
diff --git a/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java b/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
index dcb6813..5c8d0a4 100644
--- a/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
+++ b/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
@@ -31,6 +31,7 @@
import com.android.server.telecom.Constants;
import com.android.server.telecom.MissedCallNotifier;
import com.android.server.telecom.PhoneAccountRegistrar;
+import com.android.server.telecom.PhoneNumberUtilsAdapter;
import com.android.server.telecom.R;
import com.android.server.telecom.TelecomBroadcastIntentProcessor;
import com.android.server.telecom.TelecomSystem;
@@ -166,7 +167,7 @@
}
private void markMissedCallsAsRead(final UserHandle userHandle) {
- AsyncTask.execute(new Runnable("MCNI.mMCAR") {
+ AsyncTask.execute(new Runnable("MCNI.mMCAR", null /*lock*/) {
@Override
public void loggedRun() {
// Clear the list of new missed calls from the call log.
diff --git a/testapps/src/com/android/server/telecom/testapps/TestConnectionService.java b/testapps/src/com/android/server/telecom/testapps/TestConnectionService.java
index b30e372..0150dbe 100644
--- a/testapps/src/com/android/server/telecom/testapps/TestConnectionService.java
+++ b/testapps/src/com/android/server/telecom/testapps/TestConnectionService.java
@@ -165,6 +165,9 @@
capabilities |= CAPABILITY_RESPOND_VIA_TEXT;
setConnectionCapabilities(capabilities);
+ if (isIncoming) {
+ putExtra(Connection.EXTRA_ANSWERING_DROPS_FG_CALL, true);
+ }
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(
mHangupReceiver, new IntentFilter(TestCallActivity.ACTION_HANGUP_CALLS));
final IntentFilter filter =
diff --git a/tests/Android.mk b/tests/Android.mk
index e639b55..8a8113b 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -21,11 +21,17 @@
android-ex-camera2 \
android-support-v4 \
guava \
- mockito-target
+ mockito-target \
+ platform-test-annotations
LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
- $(call all-java-files-under, ../src)
+ $(call all-java-files-under, ../src) \
+ $(call all-proto-files-under, ../proto)
+
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/../proto/
+LOCAL_PROTO_JAVA_OUTPUT_PARAMS := optional_field_style=accessors
LOCAL_RESOURCE_DIR := \
$(LOCAL_PATH)/res \
@@ -46,6 +52,9 @@
LOCAL_MODULE_TAGS := tests
+LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.server.telecom.*
+LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := com.android.server.telecom.tests.*
+
include frameworks/base/packages/SettingsLib/common.mk
include $(BUILD_PACKAGE)
diff --git a/tests/src/com/android/server/telecom/tests/AnalyticsTests.java b/tests/src/com/android/server/telecom/tests/AnalyticsTests.java
new file mode 100644
index 0000000..b22ae82
--- /dev/null
+++ b/tests/src/com/android/server/telecom/tests/AnalyticsTests.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.telecom.tests;
+
+import android.content.Context;
+import android.telecom.Connection;
+import android.telecom.DisconnectCause;
+import android.telecom.InCallService;
+import android.telecom.Log;
+import android.telecom.ParcelableCallAnalytics;
+import android.telecom.TelecomAnalytics;
+import android.telecom.TelecomManager;
+import android.telecom.VideoCallImpl;
+import android.telecom.VideoProfile;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Base64;
+
+import com.android.internal.util.IndentingPrintWriter;
+import com.android.server.telecom.Analytics;
+import com.android.server.telecom.LogUtils;
+import com.android.server.telecom.TelecomLogClass;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+
+public class AnalyticsTests extends TelecomSystemTest {
+ @MediumTest
+ public void testAnalyticsSingleCall() throws Exception {
+ IdPair testCall = startAndMakeActiveIncomingCall(
+ "650-555-1212",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+
+ Map<String, Analytics.CallInfoImpl> analyticsMap = Analytics.cloneData();
+
+ assertTrue(analyticsMap.containsKey(testCall.mCallId));
+
+ Analytics.CallInfoImpl callAnalytics = analyticsMap.get(testCall.mCallId);
+ assertTrue(callAnalytics.startTime > 0);
+ assertEquals(0, callAnalytics.endTime);
+ assertEquals(Analytics.INCOMING_DIRECTION, callAnalytics.callDirection);
+ assertFalse(callAnalytics.isInterrupted);
+ assertNull(callAnalytics.callTerminationReason);
+ assertEquals(mConnectionServiceComponentNameA.flattenToShortString(),
+ callAnalytics.connectionService);
+
+ mConnectionServiceFixtureA.
+ sendSetDisconnected(testCall.mConnectionId, DisconnectCause.ERROR);
+
+ analyticsMap = Analytics.cloneData();
+ callAnalytics = analyticsMap.get(testCall.mCallId);
+ assertTrue(callAnalytics.endTime > 0);
+ assertNotNull(callAnalytics.callTerminationReason);
+ assertEquals(DisconnectCause.ERROR, callAnalytics.callTerminationReason.getCode());
+
+ StringWriter sr = new StringWriter();
+ IndentingPrintWriter ip = new IndentingPrintWriter(sr, " ");
+ Analytics.dump(ip);
+ String dumpResult = sr.toString();
+ String[] expectedFields = {"startTime", "endTime", "direction", "isAdditionalCall",
+ "isInterrupted", "callTechnologies", "callTerminationReason", "connectionService"};
+ for (String field : expectedFields) {
+ assertTrue(dumpResult.contains(field));
+ }
+ }
+
+ @MediumTest
+ public void testAnalyticsDumping() throws Exception {
+ Analytics.reset();
+ IdPair testCall = startAndMakeActiveIncomingCall(
+ "650-555-1212",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+
+ mConnectionServiceFixtureA.
+ sendSetDisconnected(testCall.mConnectionId, DisconnectCause.ERROR);
+ Analytics.CallInfoImpl expectedAnalytics = Analytics.cloneData().get(testCall.mCallId);
+
+ TelecomManager tm = (TelecomManager) mSpyContext.getSystemService(Context.TELECOM_SERVICE);
+ List<ParcelableCallAnalytics> analyticsList = tm.dumpAnalytics().getCallAnalytics();
+
+ assertEquals(1, analyticsList.size());
+ ParcelableCallAnalytics pCA = analyticsList.get(0);
+
+ assertTrue(Math.abs(expectedAnalytics.startTime - pCA.getStartTimeMillis()) <
+ ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
+ assertEquals(0, pCA.getStartTimeMillis() % ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
+ assertTrue(Math.abs((expectedAnalytics.endTime - expectedAnalytics.startTime) -
+ pCA.getCallDurationMillis()) < ParcelableCallAnalytics.MILLIS_IN_1_SECOND);
+ assertEquals(0, pCA.getCallDurationMillis() % ParcelableCallAnalytics.MILLIS_IN_1_SECOND);
+
+ assertEquals(expectedAnalytics.callDirection, pCA.getCallType());
+ assertEquals(expectedAnalytics.isAdditionalCall, pCA.isAdditionalCall());
+ assertEquals(expectedAnalytics.isInterrupted, pCA.isInterrupted());
+ assertEquals(expectedAnalytics.callTechnologies, pCA.getCallTechnologies());
+ assertEquals(expectedAnalytics.callTerminationReason.getCode(),
+ pCA.getCallTerminationCode());
+ assertEquals(expectedAnalytics.connectionService, pCA.getConnectionService());
+ List<ParcelableCallAnalytics.AnalyticsEvent> analyticsEvents = pCA.analyticsEvents();
+ Set<Integer> capturedEvents = new HashSet<>();
+ for (ParcelableCallAnalytics.AnalyticsEvent e : analyticsEvents) {
+ capturedEvents.add(e.getEventName());
+ assertIsRoundedToOneSigFig(e.getTimeSinceLastEvent());
+ }
+ assertTrue(capturedEvents.contains(ParcelableCallAnalytics.AnalyticsEvent.SET_ACTIVE));
+ assertTrue(capturedEvents.contains(
+ ParcelableCallAnalytics.AnalyticsEvent.FILTERING_INITIATED));
+ }
+
+ @MediumTest
+ public void testAnalyticsTwoCalls() throws Exception {
+ IdPair testCall1 = startAndMakeActiveIncomingCall(
+ "650-555-1212",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+ IdPair testCall2 = startAndMakeActiveOutgoingCall(
+ "650-555-1213",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+
+ Map<String, Analytics.CallInfoImpl> analyticsMap = Analytics.cloneData();
+ assertTrue(analyticsMap.containsKey(testCall1.mCallId));
+ assertTrue(analyticsMap.containsKey(testCall2.mCallId));
+
+ Analytics.CallInfoImpl callAnalytics1 = analyticsMap.get(testCall1.mCallId);
+ Analytics.CallInfoImpl callAnalytics2 = analyticsMap.get(testCall2.mCallId);
+ assertTrue(callAnalytics1.startTime > 0);
+ assertTrue(callAnalytics2.startTime > 0);
+ assertEquals(0, callAnalytics1.endTime);
+ assertEquals(0, callAnalytics2.endTime);
+
+ assertEquals(Analytics.INCOMING_DIRECTION, callAnalytics1.callDirection);
+ assertEquals(Analytics.OUTGOING_DIRECTION, callAnalytics2.callDirection);
+
+ assertTrue(callAnalytics1.isInterrupted);
+ assertTrue(callAnalytics2.isAdditionalCall);
+
+ assertNull(callAnalytics1.callTerminationReason);
+ assertNull(callAnalytics2.callTerminationReason);
+
+ assertEquals(mConnectionServiceComponentNameA.flattenToShortString(),
+ callAnalytics1.connectionService);
+ assertEquals(mConnectionServiceComponentNameA.flattenToShortString(),
+ callAnalytics1.connectionService);
+
+ mConnectionServiceFixtureA.
+ sendSetDisconnected(testCall2.mConnectionId, DisconnectCause.REMOTE);
+ mConnectionServiceFixtureA.
+ sendSetDisconnected(testCall1.mConnectionId, DisconnectCause.ERROR);
+
+ analyticsMap = Analytics.cloneData();
+ callAnalytics1 = analyticsMap.get(testCall1.mCallId);
+ callAnalytics2 = analyticsMap.get(testCall2.mCallId);
+ assertTrue(callAnalytics1.endTime > 0);
+ assertTrue(callAnalytics2.endTime > 0);
+ assertNotNull(callAnalytics1.callTerminationReason);
+ assertNotNull(callAnalytics2.callTerminationReason);
+ assertEquals(DisconnectCause.ERROR, callAnalytics1.callTerminationReason.getCode());
+ assertEquals(DisconnectCause.REMOTE, callAnalytics2.callTerminationReason.getCode());
+ }
+
+ @MediumTest
+ public void testAnalyticsVideo() throws Exception {
+ Analytics.reset();
+ IdPair callIds = startAndMakeActiveOutgoingCall(
+ "650-555-1212",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+
+ CountDownLatch counter = new CountDownLatch(1);
+ InCallService.VideoCall.Callback callback = mock(InCallService.VideoCall.Callback.class);
+
+ doAnswer(invocation -> {
+ counter.countDown();
+ return null;
+ }).when(callback)
+ .onSessionModifyResponseReceived(anyInt(), any(VideoProfile.class),
+ any(VideoProfile.class));
+
+ mConnectionServiceFixtureA.sendSetVideoProvider(
+ mConnectionServiceFixtureA.mLatestConnectionId);
+ InCallService.VideoCall videoCall =
+ mInCallServiceFixtureX.getCall(callIds.mCallId).getVideoCallImpl();
+ videoCall.registerCallback(callback);
+ ((VideoCallImpl) videoCall).setVideoState(VideoProfile.STATE_BIDIRECTIONAL);
+
+ videoCall.sendSessionModifyRequest(new VideoProfile(VideoProfile.STATE_RX_ENABLED));
+ counter.await(10000, TimeUnit.MILLISECONDS);
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ Analytics.dumpToEncodedProto(pw, new String[]{});
+ TelecomLogClass.TelecomLog analyticsProto =
+ TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));
+
+ assertEquals(1, analyticsProto.callLogs.length);
+ TelecomLogClass.VideoEvent[] videoEvents = analyticsProto.callLogs[0].videoEvents;
+ assertEquals(2, videoEvents.length);
+
+ assertEquals(Analytics.SEND_LOCAL_SESSION_MODIFY_REQUEST, videoEvents[0].getEventName());
+ assertEquals(VideoProfile.STATE_RX_ENABLED, videoEvents[0].getVideoState());
+ assertEquals(-1, videoEvents[0].getTimeSinceLastEventMillis());
+
+ assertEquals(Analytics.RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE,
+ videoEvents[1].getEventName());
+ assertEquals(VideoProfile.STATE_RX_ENABLED, videoEvents[1].getVideoState());
+ assertIsRoundedToOneSigFig(videoEvents[1].getTimeSinceLastEventMillis());
+ }
+
+ @SmallTest
+ public void testAnalyticsRounding() {
+ long[] testVals = {0, -1, -10, -100, -57836, 1, 10, 100, 1000, 458457};
+ long[] expected = {0, -1, -10, -100, -60000, 1, 10, 100, 1000, 500000};
+ for (int i = 0; i < testVals.length; i++) {
+ assertEquals(expected[i], Analytics.roundToOneSigFig(testVals[i]));
+ }
+ }
+
+ @SmallTest
+ public void testAnalyticsLogSessionTiming() throws Exception {
+ long minTime = 50;
+ Log.startSession(LogUtils.Sessions.CSW_ADD_CONFERENCE_CALL);
+ Thread.sleep(minTime);
+ Log.endSession();
+ TelecomManager tm = (TelecomManager) mSpyContext.getSystemService(Context.TELECOM_SERVICE);
+ List<TelecomAnalytics.SessionTiming> sessions = tm.dumpAnalytics().getSessionTimings();
+ sessions.stream()
+ .filter(s -> LogUtils.Sessions.CSW_ADD_CONFERENCE_CALL.equals(
+ Analytics.sSessionIdToLogSession.get(s.getKey())))
+ .forEach(s -> assertTrue(s.getTime() >= minTime));
+ }
+
+ @MediumTest
+ public void testAnalyticsDumpToProto() throws Exception {
+ Analytics.reset();
+ IdPair testCall = startAndMakeActiveIncomingCall(
+ "650-555-1212",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+
+ mConnectionServiceFixtureA.
+ sendSetDisconnected(testCall.mConnectionId, DisconnectCause.ERROR);
+ Analytics.CallInfoImpl expectedAnalytics = Analytics.cloneData().get(testCall.mCallId);
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ Analytics.dumpToEncodedProto(pw, new String[]{});
+ TelecomLogClass.TelecomLog analyticsProto =
+ TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));
+
+ assertEquals(1, analyticsProto.callLogs.length);
+ TelecomLogClass.CallLog callLog = analyticsProto.callLogs[0];
+
+ assertTrue(Math.abs(expectedAnalytics.startTime - callLog.getStartTime5Min()) <
+ ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
+ assertEquals(0, callLog.getStartTime5Min() % ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
+ assertTrue(Math.abs((expectedAnalytics.endTime - expectedAnalytics.startTime) -
+ callLog.getCallDurationMillis()) < ParcelableCallAnalytics.MILLIS_IN_1_SECOND);
+ assertEquals(0,
+ callLog.getCallDurationMillis() % ParcelableCallAnalytics.MILLIS_IN_1_SECOND);
+
+ assertEquals(expectedAnalytics.callDirection, callLog.getType());
+ assertEquals(expectedAnalytics.isAdditionalCall, callLog.getIsAdditionalCall());
+ assertEquals(expectedAnalytics.isInterrupted, callLog.getIsInterrupted());
+ assertEquals(expectedAnalytics.callTechnologies, callLog.getCallTechnologies());
+ assertEquals(expectedAnalytics.callTerminationReason.getCode(),
+ callLog.getCallTerminationCode());
+ assertEquals(expectedAnalytics.connectionService, callLog.connectionService[0]);
+ TelecomLogClass.Event[] analyticsEvents = callLog.callEvents;
+ Set<Integer> capturedEvents = new HashSet<>();
+ for (TelecomLogClass.Event e : analyticsEvents) {
+ capturedEvents.add(e.getEventName());
+ assertIsRoundedToOneSigFig(e.getTimeSinceLastEventMillis());
+ }
+ assertTrue(capturedEvents.contains(ParcelableCallAnalytics.AnalyticsEvent.SET_ACTIVE));
+ assertTrue(capturedEvents.contains(
+ ParcelableCallAnalytics.AnalyticsEvent.FILTERING_INITIATED));
+ }
+
+ @MediumTest
+ public void testAnalyticsConnectionProperties() throws Exception {
+ Analytics.reset();
+ IdPair testCall = startAndMakeActiveIncomingCall(
+ "650-555-1212",
+ mPhoneAccountA0.getAccountHandle(),
+ mConnectionServiceFixtureA);
+
+ int properties1 = Connection.PROPERTY_IS_DOWNGRADED_CONFERENCE
+ | Connection.PROPERTY_WIFI
+ | Connection.PROPERTY_EMERGENCY_CALLBACK_MODE;
+ int properties2 = Connection.PROPERTY_HIGH_DEF_AUDIO
+ | Connection.PROPERTY_WIFI;
+ int expectedProperties = properties1 | properties2;
+
+ mConnectionServiceFixtureA.mConnectionById.get(testCall.mConnectionId).properties =
+ properties1;
+ mConnectionServiceFixtureA.sendSetConnectionProperties(testCall.mConnectionId);
+ mConnectionServiceFixtureA.mConnectionById.get(testCall.mConnectionId).properties =
+ properties2;
+ mConnectionServiceFixtureA.sendSetConnectionProperties(testCall.mConnectionId);
+
+ mConnectionServiceFixtureA.
+ sendSetDisconnected(testCall.mConnectionId, DisconnectCause.ERROR);
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ Analytics.dumpToEncodedProto(pw, new String[]{});
+ TelecomLogClass.TelecomLog analyticsProto =
+ TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));
+
+ assertEquals(expectedProperties,
+ analyticsProto.callLogs[0].getConnectionProperties() & expectedProperties);
+ }
+
+ private void assertIsRoundedToOneSigFig(long x) {
+ assertEquals(x, Analytics.roundToOneSigFig(x));
+ }
+}
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index 92ec515..c44185c 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -27,7 +27,6 @@
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.IContentProvider;
import android.media.AudioManager;
@@ -44,28 +43,21 @@
import android.telecom.DisconnectCause;
import android.telecom.Log;
import android.telecom.ParcelableCall;
-import android.telecom.ParcelableCallAnalytics;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
import com.android.internal.telecom.IInCallAdapter;
import com.android.internal.telephony.CallerInfo;
-import com.android.internal.util.IndentingPrintWriter;
-import com.android.server.telecom.Analytics;
import com.google.common.base.Predicate;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
-import java.io.StringWriter;
-import java.util.List;
-import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
@@ -73,13 +65,6 @@
import org.mockito.ArgumentCaptor;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-
/**
* Performs various basic call tests in Telecom.
*/
@@ -690,131 +675,6 @@
assert (bundleArgumentCaptor.getValue().containsKey(TEST_BUNDLE_KEY));
}
- @MediumTest
- public void testAnalyticsSingleCall() throws Exception {
- IdPair testCall = startAndMakeActiveIncomingCall(
- "650-555-1212",
- mPhoneAccountA0.getAccountHandle(),
- mConnectionServiceFixtureA);
- Map<String, Analytics.CallInfoImpl> analyticsMap = Analytics.cloneData();
-
- assertTrue(analyticsMap.containsKey(testCall.mCallId));
-
- Analytics.CallInfoImpl callAnalytics = analyticsMap.get(testCall.mCallId);
- assertTrue(callAnalytics.startTime > 0);
- assertEquals(0, callAnalytics.endTime);
- assertEquals(Analytics.INCOMING_DIRECTION, callAnalytics.callDirection);
- assertFalse(callAnalytics.isInterrupted);
- assertNull(callAnalytics.callTerminationReason);
- assertEquals(mConnectionServiceComponentNameA.flattenToShortString(),
- callAnalytics.connectionService);
-
- mConnectionServiceFixtureA.
- sendSetDisconnected(testCall.mConnectionId, DisconnectCause.ERROR);
-
- analyticsMap = Analytics.cloneData();
- callAnalytics = analyticsMap.get(testCall.mCallId);
- assertTrue(callAnalytics.endTime > 0);
- assertNotNull(callAnalytics.callTerminationReason);
- assertEquals(DisconnectCause.ERROR, callAnalytics.callTerminationReason.getCode());
-
- StringWriter sr = new StringWriter();
- IndentingPrintWriter ip = new IndentingPrintWriter(sr, " ");
- Analytics.dump(ip);
- String dumpResult = sr.toString();
- String[] expectedFields = {"startTime", "endTime", "direction", "isAdditionalCall",
- "isInterrupted", "callTechnologies", "callTerminationReason", "connectionService"};
- for (String field : expectedFields) {
- assertTrue(dumpResult.contains(field));
- }
- }
-
- @SmallTest
- public void testAnalyticsDumping() throws Exception {
- Analytics.reset();
- IdPair testCall = startAndMakeActiveIncomingCall(
- "650-555-1212",
- mPhoneAccountA0.getAccountHandle(),
- mConnectionServiceFixtureA);
-
- mConnectionServiceFixtureA.
- sendSetDisconnected(testCall.mConnectionId, DisconnectCause.ERROR);
- Analytics.CallInfoImpl expectedAnalytics = Analytics.cloneData().get(testCall.mCallId);
-
- TelecomManager tm = (TelecomManager) mSpyContext.getSystemService(Context.TELECOM_SERVICE);
- List<ParcelableCallAnalytics> analyticsList = tm.dumpAnalytics();
-
- assertEquals(1, analyticsList.size());
- ParcelableCallAnalytics pCA = analyticsList.get(0);
-
- assertTrue(Math.abs(expectedAnalytics.startTime - pCA.getStartTimeMillis()) <
- ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
- assertEquals(0, pCA.getStartTimeMillis() % ParcelableCallAnalytics.MILLIS_IN_5_MINUTES);
- assertTrue(Math.abs((expectedAnalytics.endTime - expectedAnalytics.startTime) -
- pCA.getCallDurationMillis()) < ParcelableCallAnalytics.MILLIS_IN_1_SECOND);
- assertEquals(0, pCA.getCallDurationMillis() % ParcelableCallAnalytics.MILLIS_IN_1_SECOND);
-
- assertEquals(expectedAnalytics.callDirection, pCA.getCallType());
- assertEquals(expectedAnalytics.isAdditionalCall, pCA.isAdditionalCall());
- assertEquals(expectedAnalytics.isInterrupted, pCA.isInterrupted());
- assertEquals(expectedAnalytics.callTechnologies, pCA.getCallTechnologies());
- assertEquals(expectedAnalytics.callTerminationReason.getCode(),
- pCA.getCallTerminationCode());
- assertEquals(expectedAnalytics.connectionService, pCA.getConnectionService());
- }
-
- @MediumTest
- public void testAnalyticsTwoCalls() throws Exception {
- IdPair testCall1 = startAndMakeActiveIncomingCall(
- "650-555-1212",
- mPhoneAccountA0.getAccountHandle(),
- mConnectionServiceFixtureA);
- IdPair testCall2 = startAndMakeActiveOutgoingCall(
- "650-555-1213",
- mPhoneAccountA0.getAccountHandle(),
- mConnectionServiceFixtureA);
-
- Map<String, Analytics.CallInfoImpl> analyticsMap = Analytics.cloneData();
- assertTrue(analyticsMap.containsKey(testCall1.mCallId));
- assertTrue(analyticsMap.containsKey(testCall2.mCallId));
-
- Analytics.CallInfoImpl callAnalytics1 = analyticsMap.get(testCall1.mCallId);
- Analytics.CallInfoImpl callAnalytics2 = analyticsMap.get(testCall2.mCallId);
- assertTrue(callAnalytics1.startTime > 0);
- assertTrue(callAnalytics2.startTime > 0);
- assertEquals(0, callAnalytics1.endTime);
- assertEquals(0, callAnalytics2.endTime);
-
- assertEquals(Analytics.INCOMING_DIRECTION, callAnalytics1.callDirection);
- assertEquals(Analytics.OUTGOING_DIRECTION, callAnalytics2.callDirection);
-
- assertTrue(callAnalytics1.isInterrupted);
- assertTrue(callAnalytics2.isAdditionalCall);
-
- assertNull(callAnalytics1.callTerminationReason);
- assertNull(callAnalytics2.callTerminationReason);
-
- assertEquals(mConnectionServiceComponentNameA.flattenToShortString(),
- callAnalytics1.connectionService);
- assertEquals(mConnectionServiceComponentNameA.flattenToShortString(),
- callAnalytics1.connectionService);
-
- mConnectionServiceFixtureA.
- sendSetDisconnected(testCall2.mConnectionId, DisconnectCause.REMOTE);
- mConnectionServiceFixtureA.
- sendSetDisconnected(testCall1.mConnectionId, DisconnectCause.ERROR);
-
- analyticsMap = Analytics.cloneData();
- callAnalytics1 = analyticsMap.get(testCall1.mCallId);
- callAnalytics2 = analyticsMap.get(testCall2.mCallId);
- assertTrue(callAnalytics1.endTime > 0);
- assertTrue(callAnalytics2.endTime > 0);
- assertNotNull(callAnalytics1.callTerminationReason);
- assertNotNull(callAnalytics2.callTerminationReason);
- assertEquals(DisconnectCause.ERROR, callAnalytics1.callTerminationReason.getCode());
- assertEquals(DisconnectCause.REMOTE, callAnalytics2.callTerminationReason.getCode());
- }
-
private void blockNumber(String phoneNumber) throws Exception {
blockNumberWithAnswer(phoneNumber, new Answer<Bundle>() {
@Override
@@ -849,6 +709,44 @@
}
/**
+ * Tests to make sure that the Call.Details.PROPERTY_HAS_CDMA_VOICE_PRIVACY property is set on a
+ * Call that is based on a Connection with the Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY
+ * property set.
+ */
+ @MediumTest
+ public void testCdmaEnhancedPrivacyVoiceCall() throws Exception {
+ mConnectionServiceFixtureA.mConnectionServiceDelegate.mProperties =
+ Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY;
+
+ IdPair ids = startAndMakeActiveOutgoingCall("650-555-1212",
+ mPhoneAccountA0.getAccountHandle(), mConnectionServiceFixtureA);
+ assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureX.getCall(ids.mCallId).getState());
+
+ assertTrue(Call.Details.hasProperty(
+ mInCallServiceFixtureX.getCall(ids.mCallId).getProperties(),
+ Call.Details.PROPERTY_HAS_CDMA_VOICE_PRIVACY));
+ }
+
+ /**
+ * Tests to make sure that Call.Details.PROPERTY_HAS_CDMA_VOICE_PRIVACY is dropped
+ * when the Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY property is removed from the Connection.
+ */
+ @MediumTest
+ public void testDropCdmaEnhancedPrivacyVoiceCall() throws Exception {
+ mConnectionServiceFixtureA.mConnectionServiceDelegate.mProperties =
+ Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY;
+
+ IdPair ids = startAndMakeActiveOutgoingCall("650-555-1212",
+ mPhoneAccountA0.getAccountHandle(), mConnectionServiceFixtureA);
+ assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureX.getCall(ids.mCallId).getState());
+ mConnectionServiceFixtureA.mLatestConnection.setConnectionProperties(0);
+
+ assertFalse(Call.Details.hasProperty(
+ mInCallServiceFixtureX.getCall(ids.mCallId).getProperties(),
+ Call.Details.PROPERTY_HAS_CDMA_VOICE_PRIVACY));
+ }
+
+ /**
* Tests the {@link Call#pullExternalCall()} API. Ensures that an external call which is
* pullable can be pulled.
*
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
index f9502dd..38ea10e 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
@@ -18,6 +18,7 @@
import android.media.AudioManager;
import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.SmallTest;
import com.android.server.telecom.CallAudioManager;
import com.android.server.telecom.CallAudioModeStateMachine;
@@ -32,6 +33,7 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
public class CallAudioModeStateMachineTest extends StateMachineTestBase<CallAudioModeStateMachine> {
private static class ModeTestParameters extends TestParameters {
@@ -100,6 +102,37 @@
parametrizedTestStateMachine(testCases);
}
+ @SmallTest
+ public void testNoFocusWhenRingerSilenced() throws Throwable {
+ CallAudioModeStateMachine sm = new CallAudioModeStateMachine(mAudioManager);
+ sm.setCallAudioManager(mCallAudioManager);
+ sm.sendMessage(CallAudioModeStateMachine.ABANDON_FOCUS_FOR_TESTING);
+ waitForStateMachineActionCompletion(sm, CallAudioModeStateMachine.RUN_RUNNABLE);
+
+ resetMocks();
+ when(mCallAudioManager.startRinging()).thenReturn(false);
+
+ sm.sendMessage(CallAudioModeStateMachine.NEW_RINGING_CALL,
+ new CallAudioModeStateMachine.MessageArgs(
+ false, // hasActiveOrDialingCalls
+ true, // hasRingingCalls
+ false, // hasHoldingCalls
+ false, // isTonePlaying
+ false, // foregroundCallIsVoip
+ null // session
+ ));
+ waitForStateMachineActionCompletion(sm, CallAudioModeStateMachine.RUN_RUNNABLE);
+
+ assertEquals(CallAudioModeStateMachine.RING_STATE_NAME, sm.getCurrentStateName());
+
+ verify(mAudioManager, never()).requestAudioFocusForCall(anyInt(), anyInt());
+ verify(mAudioManager, never()).setMode(anyInt());
+
+ verify(mCallAudioManager, never()).stopRinging();
+
+ verify(mCallAudioManager).stopCallWaiting();
+ }
+
private List<ModeTestParameters> generateTestCases() {
List<ModeTestParameters> result = new ArrayList<>();
result.add(new ModeTestParameters(
@@ -516,6 +549,7 @@
waitForStateMachineActionCompletion(sm, CallAudioModeStateMachine.RUN_RUNNABLE);
resetMocks();
+ when(mCallAudioManager.startRinging()).thenReturn(true);
sm.sendMessage(params.messageType, params.externalState);
waitForStateMachineActionCompletion(sm, CallAudioModeStateMachine.RUN_RUNNABLE);
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
index 4e5fe69..dddf9e6 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
@@ -16,6 +16,7 @@
package com.android.server.telecom.tests;
+import android.app.NotificationManager;
import android.content.Context;
import android.media.AudioManager;
import android.media.IAudioService;
@@ -31,6 +32,7 @@
import com.android.server.telecom.CallsManager;
import com.android.server.telecom.ConnectionServiceWrapper;
import com.android.server.telecom.CallAudioManager;
+import com.android.server.telecom.InterruptionFilterProxy;
import com.android.server.telecom.StatusBarNotifier;
import com.android.server.telecom.TelecomSystem;
import com.android.server.telecom.WiredHeadsetManager;
@@ -43,11 +45,16 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.same;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.timeout;
@@ -65,27 +72,37 @@
static class RoutingTestParameters extends TestParameters {
public String name;
public int initialRoute;
+ public int initialNotificationFilter;
public int availableRoutes; // may excl. speakerphone, because that's always available
public int speakerInteraction; // one of NONE, ON, or OFF
public int bluetoothInteraction; // one of NONE, ON, or OFF
public int action;
public int expectedRoute;
public int expectedAvailableRoutes; // also may exclude the speakerphone.
+ public int expectedNotificationFilter; // expected end notification filter.
+ public boolean isNotificationChangeExpected; // indicates whether we expect the notification
+ // filter to change during the process of the
+ // test.
public boolean doesDeviceSupportEarpiece; // set to false in the case of Wear devices
public boolean shouldRunWithFocus;
- public RoutingTestParameters(String name, int initialRoute, int availableRoutes, int
- speakerInteraction, int bluetoothInteraction, int action, int expectedRoute, int
- expectedAvailableRoutes, boolean doesDeviceSupportEarpiece,
+ public RoutingTestParameters(String name, int initialRoute,
+ int initialNotificationFilter, int availableRoutes, int speakerInteraction,
+ int bluetoothInteraction, int action, int expectedRoute,
+ int expectedAvailableRoutes, int expectedNotificationFilter,
+ boolean isNotificationChangeExpected, boolean doesDeviceSupportEarpiece,
boolean shouldRunWithFocus) {
this.name = name;
this.initialRoute = initialRoute;
+ this.initialNotificationFilter = initialNotificationFilter;
this.availableRoutes = availableRoutes;
this.speakerInteraction = speakerInteraction;
this.bluetoothInteraction = bluetoothInteraction;
this.action = action;
this.expectedRoute = expectedRoute;
this.expectedAvailableRoutes = expectedAvailableRoutes;
+ this.expectedNotificationFilter = expectedNotificationFilter;
+ this.isNotificationChangeExpected = isNotificationChangeExpected;
this.doesDeviceSupportEarpiece = doesDeviceSupportEarpiece;
this.shouldRunWithFocus = shouldRunWithFocus;
}
@@ -95,12 +112,15 @@
return "RoutingTestParameters{" +
"name='" + name + '\'' +
", initialRoute=" + initialRoute +
+ ", initialNotificationFilter=" + initialNotificationFilter +
", availableRoutes=" + availableRoutes +
", speakerInteraction=" + speakerInteraction +
", bluetoothInteraction=" + bluetoothInteraction +
", action=" + action +
", expectedRoute=" + expectedRoute +
", expectedAvailableRoutes=" + expectedAvailableRoutes +
+ ", expectedNotificationFilter= " + expectedNotificationFilter +
+ ", isNotificationChangeExpected=" + isNotificationChangeExpected +
", doesDeviceSupportEarpiece=" + doesDeviceSupportEarpiece +
", shouldRunWithFocus=" + shouldRunWithFocus +
'}';
@@ -114,6 +134,7 @@
@Mock WiredHeadsetManager mockWiredHeadsetManager;
@Mock StatusBarNotifier mockStatusBarNotifier;
@Mock Call fakeCall;
+ @Mock InterruptionFilterProxy mMockInterruptionFilterProxy;
private CallAudioManager.AudioServiceFactory mAudioServiceFactory;
private static final int TEST_TIMEOUT = 500;
@@ -138,10 +159,29 @@
when(mockCallsManager.getLock()).thenReturn(mLock);
when(fakeCall.getConnectionService()).thenReturn(mockConnectionServiceWrapper);
when(fakeCall.isAlive()).thenReturn(true);
+ setupInterruptionFilterMocks();
+
doNothing().when(mockConnectionServiceWrapper).onCallAudioStateChanged(any(Call.class),
any(CallAudioState.class));
}
+ private void setupInterruptionFilterMocks() {
+ // These mock implementations keep track of when the caller sets the current notification
+ // filter, and ensures the same value is returned via getCurrentInterruptionFilter.
+ final int objId = Objects.hashCode(mMockInterruptionFilterProxy);
+ when(mMockInterruptionFilterProxy.getCurrentInterruptionFilter()).thenReturn(
+ NotificationManager.INTERRUPTION_FILTER_ALL);
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock i) {
+ int requestedFilter = (int) i.getArguments()[0];
+ when(mMockInterruptionFilterProxy.getCurrentInterruptionFilter()).thenReturn(
+ requestedFilter);
+ return null;
+ }
+ }).when(mMockInterruptionFilterProxy).setInterruptionFilter(anyInt());
+ }
+
@LargeTest
public void testStateMachineTransitionsWithFocus() throws Throwable {
List<RoutingTestParameters> paramList = generateTransitionTests(true);
@@ -163,6 +203,7 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
true);
when(mockBluetoothManager.isBluetoothAudioConnectedOrPending()).thenReturn(false);
@@ -203,11 +244,13 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
true);
when(mockBluetoothManager.isBluetoothAudioConnectedOrPending()).thenReturn(false);
when(mockBluetoothManager.isBluetoothAvailable()).thenReturn(true);
when(mockAudioManager.isSpeakerphoneOn()).thenReturn(true);
+
CallAudioState initState = new CallAudioState(false, CallAudioState.ROUTE_BLUETOOTH,
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH);
stateMachine.initialize(initState);
@@ -222,15 +265,16 @@
waitForStateMachineActionCompletion(stateMachine, CallAudioRouteStateMachine.RUN_RUNNABLE);
verifyNewSystemCallAudioState(initState, expectedEndState);
+ // Expecting to end up in earpiece, so we expect notifications to be filtered.
+ assertEquals(NotificationManager.INTERRUPTION_FILTER_ALARMS,
+ mMockInterruptionFilterProxy.getCurrentInterruptionFilter());
resetMocks();
-
stateMachine.sendMessageWithSessionInfo(
CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH);
stateMachine.sendMessageWithSessionInfo(
CallAudioRouteStateMachine.CONNECT_BLUETOOTH);
waitForStateMachineActionCompletion(stateMachine, CallAudioRouteStateMachine.RUN_RUNNABLE);
-
assertEquals(expectedEndState, stateMachine.getCurrentCallAudioState());
}
@@ -243,11 +287,13 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
true);
when(mockBluetoothManager.isBluetoothAudioConnectedOrPending()).thenReturn(false);
when(mockBluetoothManager.isBluetoothAvailable()).thenReturn(true);
when(mockAudioManager.isSpeakerphoneOn()).thenReturn(false);
+
CallAudioState initState = new CallAudioState(false, CallAudioState.ROUTE_BLUETOOTH,
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH);
stateMachine.initialize(initState);
@@ -257,6 +303,9 @@
waitForStateMachineActionCompletion(stateMachine, CallAudioRouteStateMachine.RUN_RUNNABLE);
verify(mockBluetoothManager, never()).connectBluetoothAudio();
+ // Shouldn't change interruption filter when in bluetooth route.
+ assertEquals(NotificationManager.INTERRUPTION_FILTER_ALL,
+ mMockInterruptionFilterProxy.getCurrentInterruptionFilter());
stateMachine.sendMessageWithSessionInfo(CallAudioRouteStateMachine.SWITCH_FOCUS,
CallAudioRouteStateMachine.ACTIVE_FOCUS);
@@ -273,6 +322,7 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
true);
when(mockBluetoothManager.isBluetoothAudioConnectedOrPending()).thenReturn(false);
@@ -287,7 +337,6 @@
when(mockBluetoothManager.isBluetoothAvailable()).thenReturn(true);
stateMachine.sendMessageWithSessionInfo(CallAudioRouteStateMachine.CONNECT_BLUETOOTH);
waitForStateMachineActionCompletion(stateMachine, CallAudioRouteStateMachine.RUN_RUNNABLE);
-
verify(mockBluetoothManager, never()).connectBluetoothAudio();
CallAudioState expectedEndState = new CallAudioState(false,
CallAudioState.ROUTE_BLUETOOTH,
@@ -373,6 +422,7 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
doesDeviceSupportEarpiece);
stateMachine.initialize();
assertEquals(expectedState, stateMachine.getCurrentCallAudioState());
@@ -383,12 +433,15 @@
params.add(new RoutingTestParameters(
"Connect headset during earpiece", // name
CallAudioState.ROUTE_EARPIECE, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE, // availableRoutes
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.CONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_WIRED_HEADSET, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -396,12 +449,15 @@
params.add(new RoutingTestParameters(
"Connect headset during bluetooth", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
NONE, // speakerInteraction
OFF, // bluetoothInteraction
CallAudioRouteStateMachine.CONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_WIRED_HEADSET, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // expectedAvai
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -409,12 +465,15 @@
params.add(new RoutingTestParameters(
"Connect headset during speakerphone", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE, // availableRoutes
OFF, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.CONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_WIRED_HEADSET, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -422,12 +481,15 @@
params.add(new RoutingTestParameters(
"Disconnect headset during headset", // name
CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_EARPIECE, // expectedRoute
CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALARMS, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -435,12 +497,15 @@
params.add(new RoutingTestParameters(
"Disconnect headset during headset with bluetooth available", // name
CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_EARPIECE, // expectedRoute
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALARMS, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -448,12 +513,15 @@
params.add(new RoutingTestParameters(
"Disconnect headset during bluetooth", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -461,12 +529,15 @@
params.add(new RoutingTestParameters(
"Disconnect headset during speakerphone", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -474,12 +545,15 @@
params.add(new RoutingTestParameters(
"Disconnect headset during speakerphone with bluetooth available", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -487,12 +561,15 @@
params.add(new RoutingTestParameters(
"Connect bluetooth during earpiece", // name
CallAudioState.ROUTE_EARPIECE, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE, // availableRoutes
NONE, // speakerInteraction
ON, // bluetoothInteraction
CallAudioRouteStateMachine.CONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_BLUETOOTH | CallAudioState.ROUTE_EARPIECE, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -500,12 +577,15 @@
params.add(new RoutingTestParameters(
"Connect bluetooth during wired headset", // name
CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
NONE, // speakerInteraction
ON, // bluetoothInteraction
CallAudioRouteStateMachine.CONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_BLUETOOTH | CallAudioState.ROUTE_WIRED_HEADSET, // expectedAvai
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -513,12 +593,15 @@
params.add(new RoutingTestParameters(
"Connect bluetooth during speakerphone", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE, // availableRoutes
OFF, // speakerInteraction
ON, // bluetoothInteraction
CallAudioRouteStateMachine.CONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_BLUETOOTH | CallAudioState.ROUTE_EARPIECE, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -526,12 +609,31 @@
params.add(new RoutingTestParameters(
"Disconnect bluetooth during bluetooth without headset in", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
NONE, // speakerInteraction
OFF, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_EARPIECE, // expectedRoute
CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALARMS, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
+ true, // doesDeviceSupportEarpiece
+ shouldRunWithFocus
+ ));
+
+ params.add(new RoutingTestParameters(
+ "Disconnect bluetooth during bluetooth without headset in, priority mode ", // name
+ CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_PRIORITY, // initialNotificationFilter
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
+ NONE, // speakerInteraction
+ OFF, // bluetoothInteraction
+ CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
+ CallAudioState.ROUTE_EARPIECE, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_PRIORITY, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -539,12 +641,15 @@
params.add(new RoutingTestParameters(
"Disconnect bluetooth during bluetooth with headset in", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
NONE, // speakerInteraction
OFF, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_WIRED_HEADSET, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -552,12 +657,15 @@
params.add(new RoutingTestParameters(
"Disconnect bluetooth during speakerphone", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -565,12 +673,15 @@
params.add(new RoutingTestParameters(
"Disconnect bluetooth during earpiece", // name
CallAudioState.ROUTE_EARPIECE, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
CallAudioState.ROUTE_EARPIECE, // expectedRoute
CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALARMS, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -578,12 +689,15 @@
params.add(new RoutingTestParameters(
"Switch to speakerphone from earpiece", // name
CallAudioState.ROUTE_EARPIECE, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE, // availableRoutes
ON, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_SPEAKER, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -591,12 +705,15 @@
params.add(new RoutingTestParameters(
"Switch to speakerphone from headset", // name
CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
ON, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_SPEAKER, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -604,12 +721,15 @@
params.add(new RoutingTestParameters(
"Switch to speakerphone from bluetooth", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
ON, // speakerInteraction
OFF, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_SPEAKER, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // expectedAvai
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -617,12 +737,15 @@
params.add(new RoutingTestParameters(
"Switch to earpiece from bluetooth", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
NONE, // speakerInteraction
OFF, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_EARPIECE, // action
CallAudioState.ROUTE_EARPIECE, // expectedRoute
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALARMS, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -630,12 +753,47 @@
params.add(new RoutingTestParameters(
"Switch to earpiece from speakerphone", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE, // availableRoutes
OFF, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_EARPIECE, // action
CallAudioState.ROUTE_EARPIECE, // expectedRoute
CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALARMS, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
+ true, // doesDeviceSupportEarpiece
+ shouldRunWithFocus
+ ));
+
+ params.add(new RoutingTestParameters(
+ "Switch to earpiece from speakerphone, priority notifications", // name
+ CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_PRIORITY, // initialNotificationFilter
+ CallAudioState.ROUTE_EARPIECE, // availableRoutes
+ OFF, // speakerInteraction
+ NONE, // bluetoothInteraction
+ CallAudioRouteStateMachine.SWITCH_EARPIECE, // action
+ CallAudioState.ROUTE_EARPIECE, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_PRIORITY, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
+ true, // doesDeviceSupportEarpiece
+ shouldRunWithFocus
+ ));
+
+ params.add(new RoutingTestParameters(
+ "Switch to earpiece from speakerphone, silent mode", // name
+ CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_NONE, // initialNotificationFilter
+ CallAudioState.ROUTE_EARPIECE, // availableRoutes
+ OFF, // speakerInteraction
+ NONE, // bluetoothInteraction
+ CallAudioRouteStateMachine.SWITCH_EARPIECE, // action
+ CallAudioState.ROUTE_EARPIECE, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_NONE, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -643,12 +801,15 @@
params.add(new RoutingTestParameters(
"Switch to bluetooth from speakerphone", // name
CallAudioState.ROUTE_SPEAKER, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
OFF, // speakerInteraction
ON, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_BLUETOOTH, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -656,12 +817,15 @@
params.add(new RoutingTestParameters(
"Switch to bluetooth from earpiece", // name
CallAudioState.ROUTE_EARPIECE, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
NONE, // speakerInteraction
ON, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_BLUETOOTH, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailable
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ true, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -669,12 +833,15 @@
params.add(new RoutingTestParameters(
"Switch to bluetooth from wired headset", // name
CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // availableRou
NONE, // speakerInteraction
ON, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_BLUETOOTH, // action
CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
CallAudioState.ROUTE_WIRED_HEADSET | CallAudioState.ROUTE_BLUETOOTH, // expectedAvai
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
true, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -682,12 +849,15 @@
params.add(new RoutingTestParameters(
"Switch from bluetooth to wired/earpiece when neither are available", // name
CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
ON, // speakerInteraction
OFF, // bluetoothInteraction
CallAudioRouteStateMachine.SWITCH_BASELINE_ROUTE, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_BLUETOOTH, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
false, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -695,12 +865,15 @@
params.add(new RoutingTestParameters(
"Disconnect wired headset when device does not support earpiece", // name
CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
ON, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
CallAudioState.ROUTE_SPEAKER, // expectedRoute
CallAudioState.ROUTE_SPEAKER, // expectedAvailableRoutes
+ NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
+ false, // isNotificationChangeExpected
false, // doesDeviceSupportEarpiece
shouldRunWithFocus
));
@@ -721,6 +894,8 @@
private void runParametrizedTestCaseWithFocus(final RoutingTestParameters params)
throws Throwable {
resetMocks();
+ when(mMockInterruptionFilterProxy.getCurrentInterruptionFilter()).thenReturn(
+ params.initialNotificationFilter);
// Construct a fresh state machine on every case
final CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
@@ -730,6 +905,7 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
params.doesDeviceSupportEarpiece);
// Set up bluetooth and speakerphone state
@@ -738,13 +914,14 @@
when(mockBluetoothManager.isBluetoothAvailable()).thenReturn(
(params.availableRoutes & CallAudioState.ROUTE_BLUETOOTH) != 0
|| (params.expectedAvailableRoutes & CallAudioState.ROUTE_BLUETOOTH) != 0);
- when(mockAudioManager.isSpeakerphoneOn()).thenReturn(
- params.initialRoute == CallAudioState.ROUTE_SPEAKER);
+ doReturn(params.initialRoute == CallAudioState.ROUTE_SPEAKER).when(mockAudioManager).
+ isSpeakerphoneOn();
// Set the initial CallAudioState object
final CallAudioState initState = new CallAudioState(false,
params.initialRoute, (params.availableRoutes | CallAudioState.ROUTE_SPEAKER));
stateMachine.initialize(initState);
+
// Make the state machine have focus so that we actually do something
stateMachine.sendMessageWithSessionInfo(CallAudioRouteStateMachine.SWITCH_FOCUS,
CallAudioRouteStateMachine.ACTIVE_FOCUS);
@@ -752,6 +929,22 @@
waitForStateMachineActionCompletion(stateMachine, CallAudioRouteStateMachine.RUN_RUNNABLE);
+ // Capture the changes made to the interruption filter and verify that the last change
+ // made to it matches the expected interruption filter.
+ if (params.isNotificationChangeExpected) {
+ ArgumentCaptor<Integer> interruptionCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(mMockInterruptionFilterProxy, timeout(TEST_TIMEOUT).atLeastOnce())
+ .setInterruptionFilter(interruptionCaptor.capture());
+ List<Integer> interruptionFilterValues = interruptionCaptor.getAllValues();
+
+ int lastChange = interruptionFilterValues.get(interruptionFilterValues.size() - 1)
+ .intValue();
+ assertEquals(params.expectedNotificationFilter, lastChange);
+ } else {
+ Thread.sleep(TEST_TIMEOUT);
+ verify(mMockInterruptionFilterProxy, never()).setInterruptionFilter(anyInt());
+ }
+
stateMachine.quitStateMachine();
// Verify interactions with the speakerphone and bluetooth systems
@@ -797,6 +990,7 @@
mockWiredHeadsetManager,
mockStatusBarNotifier,
mAudioServiceFactory,
+ mMockInterruptionFilterProxy,
params.doesDeviceSupportEarpiece);
// Set up bluetooth and speakerphone state
@@ -857,7 +1051,9 @@
private void resetMocks() {
reset(mockAudioManager, mockBluetoothManager, mockCallsManager,
- mockConnectionServiceWrapper);
+ mockConnectionServiceWrapper, mMockInterruptionFilterProxy);
+ mMockInterruptionFilterProxy = mock(InterruptionFilterProxy.class);
+ setupInterruptionFilterMocks();
when(mockCallsManager.getForegroundCall()).thenReturn(fakeCall);
when(mockCallsManager.getLock()).thenReturn(mLock);
doNothing().when(mockConnectionServiceWrapper).onCallAudioStateChanged(any(Call.class),
diff --git a/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java b/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
index 7304ec1..590304c 100644
--- a/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
@@ -31,6 +31,7 @@
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.os.UserManager;
+import android.platform.test.annotations.Postsubmit;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.telecom.DisconnectCause;
@@ -423,6 +424,7 @@
}
@MediumTest
+ @Postsubmit
public void testLogCallDirectionOutgoingWithMultiUserCapability() {
when(mMockPhoneAccountRegistrar.getPhoneAccountUnchecked(any(PhoneAccountHandle.class)))
.thenReturn(makeFakePhoneAccount(mOtherUserAccountHandle,
@@ -516,6 +518,7 @@
}
@MediumTest
+ @Postsubmit
public void testLogCallDirectionOutgoingFromManagedProfile() {
when(mMockPhoneAccountRegistrar.getPhoneAccountUnchecked(any(PhoneAccountHandle.class)))
.thenReturn(makeFakePhoneAccount(mManagedProfileAccountHandle, 0));
diff --git a/tests/src/com/android/server/telecom/tests/CallerInfoLookupHelperTest.java b/tests/src/com/android/server/telecom/tests/CallerInfoLookupHelperTest.java
index a7602ce..2ae717d 100644
--- a/tests/src/com/android/server/telecom/tests/CallerInfoLookupHelperTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallerInfoLookupHelperTest.java
@@ -21,6 +21,7 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.test.suitebuilder.annotation.SmallTest;
import android.telecom.Logging.Session;
import com.android.internal.telephony.CallerInfo;
@@ -43,6 +44,7 @@
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -93,6 +95,16 @@
}
}
+ @SmallTest
+ public void testLookupWithEmptyHandle() {
+ CallerInfoLookupHelper.OnQueryCompleteListener listener = mock(
+ CallerInfoLookupHelper.OnQueryCompleteListener.class);
+ mCallerInfoLookupHelper.startLookup(Uri.EMPTY, listener);
+
+ verify(listener).onCallerInfoQueryComplete(eq(Uri.EMPTY), isNull(CallerInfo.class));
+ verifyProperCleanup();
+ }
+
public void testSimpleLookup() {
CallerInfoLookupHelper.OnQueryCompleteListener listener = mock(
CallerInfoLookupHelper.OnQueryCompleteListener.class);
diff --git a/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java b/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java
index 887d635..8d40966 100644
--- a/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java
+++ b/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java
@@ -103,24 +103,43 @@
@Override
public Connection onCreateOutgoingConnection(
PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
- mLatestConnection = new FakeConnection(request.getVideoState(), request.getAddress());
- return mLatestConnection;
+ FakeConnection fakeConnection = new FakeConnection(request.getVideoState(),
+ request.getAddress());
+ mLatestConnection = fakeConnection;
+ if (mCapabilities != NOT_SPECIFIED) {
+ fakeConnection.setConnectionCapabilities(mCapabilities);
+ }
+ if (mProperties != NOT_SPECIFIED) {
+ fakeConnection.setConnectionProperties(mProperties);
+ }
+ return fakeConnection;
}
@Override
public void onConference(Connection cxn1, Connection cxn2) {
- // Usually, this is implemented by something in Telephony, which does a bunch of radio
- // work to conference the two connections together. Here we just short-cut that and
- // declare them conferenced.
- Conference fakeConference = new FakeConference();
- fakeConference.addConnection(cxn1);
- fakeConference.addConnection(cxn2);
- mLatestConference = fakeConference;
- addConference(fakeConference);
+ if (((FakeConnection) cxn1).getIsConferenceCreated()) {
+ // Usually, this is implemented by something in Telephony, which does a bunch of
+ // radio work to conference the two connections together. Here we just short-cut
+ // that and declare them conferenced.
+ Conference fakeConference = new FakeConference();
+ fakeConference.addConnection(cxn1);
+ fakeConference.addConnection(cxn2);
+ mLatestConference = fakeConference;
+ addConference(fakeConference);
+ } else {
+ try {
+ sendSetConferenceMergeFailed(cxn1.getTelecomCallId());
+ } catch (Exception e) {
+ Log.w(this, "Exception on sendSetConferenceMergeFailed: " + e.getMessage());
+ }
+ }
}
}
public class FakeConnection extends Connection {
+ // Set to false if you wish the Conference merge to fail.
+ boolean mIsConferenceCreated = true;
+
public FakeConnection(int videoState, Uri address) {
super();
int capabilities = getConnectionCapabilities();
@@ -137,6 +156,14 @@
public void onExtrasChanged(Bundle extras) {
mExtrasLock.countDown();
}
+
+ public boolean getIsConferenceCreated() {
+ return mIsConferenceCreated;
+ }
+
+ public void setIsConferenceCreated(boolean isConferenceCreated) {
+ mIsConferenceCreated = isConferenceCreated;
+ }
}
public class FakeConference extends Conference {
@@ -205,6 +232,7 @@
c.videoState = request.getVideoState();
c.mockVideoProvider = new MockVideoProvider();
c.videoProvider = c.mockVideoProvider.getInterface();
+ c.isConferenceCreated = true;
mConnectionById.put(id, c);
mConnectionServiceDelegateAdapter.createConnection(connectionManagerPhoneAccount,
id, request, isIncoming, isUnknown, null /*Session.Info*/);
@@ -329,6 +357,7 @@
int videoState;
boolean isVoipAudioMode;
Bundle extras;
+ boolean isConferenceCreated;
}
public class ConferenceInfo {
@@ -418,6 +447,11 @@
}
}
+ public void sendSetConnectionProperties(String id) throws Exception {
+ for (IConnectionServiceAdapter a : mConnectionServiceAdapters) {
+ a.setConnectionProperties(id, mConnectionById.get(id).properties, null /*Session.Info*/);
+ }
+ }
public void sendSetIsConferenced(String id) throws Exception {
for (IConnectionServiceAdapter a : mConnectionServiceAdapters) {
a.setIsConferenced(id, mConnectionById.get(id).conferenceId, null /*Session.Info*/);
@@ -537,6 +571,12 @@
}
}
+ public void sendSetConferenceMergeFailed(String id) throws Exception {
+ for (IConnectionServiceAdapter a : mConnectionServiceAdapters) {
+ a.setConferenceMergeFailed(id, null /*Session.Info*/);
+ }
+ }
+
/**
* Waits until the {@link Connection#onExtrasChanged(Bundle)} API has been called on a
* {@link Connection} or {@link Conference}.
diff --git a/tests/src/com/android/server/telecom/tests/DirectToVoicemailCallFilterTest.java b/tests/src/com/android/server/telecom/tests/DirectToVoicemailCallFilterTest.java
index ac74604..2ebb6fc 100644
--- a/tests/src/com/android/server/telecom/tests/DirectToVoicemailCallFilterTest.java
+++ b/tests/src/com/android/server/telecom/tests/DirectToVoicemailCallFilterTest.java
@@ -42,7 +42,6 @@
public void setUp() throws Exception {
super.setUp();
- when(mCall.getHandle()).thenReturn(TEST_HANDLE);
}
@SmallTest
@@ -79,13 +78,32 @@
));
}
+ @SmallTest
+ public void testNullResponseFromLookupHelper() {
+ CallerInfoLookupHelper.OnQueryCompleteListener queryListener = verifyLookupStart(null);
+
+ queryListener.onCallerInfoQueryComplete(null, null);
+ verify(mCallback).onCallFilteringComplete(mCall,
+ new CallFilteringResult(
+ true, // shouldAllowCall
+ false, // shouldReject
+ true, // shouldAddToCallLog
+ true // shouldShowNotification
+ ));
+ }
+
private CallerInfoLookupHelper.OnQueryCompleteListener verifyLookupStart() {
+ return verifyLookupStart(TEST_HANDLE);
+ }
+
+ private CallerInfoLookupHelper.OnQueryCompleteListener verifyLookupStart(Uri handle) {
+ when(mCall.getHandle()).thenReturn(handle);
DirectToVoicemailCallFilter filter =
new DirectToVoicemailCallFilter(mCallerInfoLookupHelper);
filter.startFilterLookup(mCall, mCallback);
ArgumentCaptor<CallerInfoLookupHelper.OnQueryCompleteListener> captor =
ArgumentCaptor.forClass(CallerInfoLookupHelper.OnQueryCompleteListener.class);
- verify(mCallerInfoLookupHelper).startLookup(eq(TEST_HANDLE), captor.capture());
+ verify(mCallerInfoLookupHelper).startLookup(eq(handle), captor.capture());
return captor.getValue();
}
}
diff --git a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
index e86e4ae..de4d453 100644
--- a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
+++ b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
@@ -18,6 +18,7 @@
import android.Manifest;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
@@ -28,8 +29,8 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.UserHandle;
-import android.telecom.ConnectionService;
import android.telecom.InCallService;
+import android.telecom.ParcelableCall;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.test.mock.MockContext;
@@ -38,6 +39,7 @@
import com.android.internal.telecom.IInCallAdapter;
import com.android.internal.telecom.IInCallService;
+import com.android.server.telecom.Analytics;
import com.android.server.telecom.BluetoothHeadsetProxy;
import com.android.server.telecom.Call;
import com.android.server.telecom.CallsManager;
@@ -47,6 +49,7 @@
import com.android.server.telecom.SystemStateProvider;
import com.android.server.telecom.TelecomServiceImpl.DefaultDialerManagerAdapter;
import com.android.server.telecom.TelecomSystem;
+import com.android.server.telecom.Timeouts;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
@@ -54,17 +57,14 @@
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
+import java.util.Collections;
import java.util.LinkedList;
import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyChar;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
-import static org.mockito.Matchers.isNull;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -83,6 +83,7 @@
@Mock Resources mMockResources;
@Mock MockContext mMockContext;
@Mock DefaultDialerManagerAdapter mMockDefaultDialerAdapter;
+ @Mock Timeouts.Adapter mTimeoutsAdapter;
private static final int CURRENT_USER_ID = 900973;
private static final String DEF_PKG = "defpkg";
@@ -100,11 +101,12 @@
public void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this);
+ when(mMockCall.getAnalytics()).thenReturn(new Analytics.CallInfo());
doReturn(mMockResources).when(mMockContext).getResources();
doReturn(SYS_PKG).when(mMockResources).getString(R.string.ui_default_package);
doReturn(SYS_CLASS).when(mMockResources).getString(R.string.incall_default_class);
mInCallController = new InCallController(mMockContext, mLock, mMockCallsManager,
- mMockSystemStateProvider, mMockDefaultDialerAdapter);
+ mMockSystemStateProvider, mMockDefaultDialerAdapter, mTimeoutsAdapter);
}
@Override
@@ -118,11 +120,9 @@
when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
when(mMockCallsManager.hasEmergencyCall()).thenReturn(false);
when(mMockCall.isIncoming()).thenReturn(true);
+ when(mMockCall.isExternalCall()).thenReturn(false);
- Intent queryIntent = new Intent(InCallService.SERVICE_INTERFACE);
- when(mMockPackageManager.queryIntentServicesAsUser(
- queryIntent, PackageManager.GET_META_DATA, CURRENT_USER_ID))
- .thenReturn(new LinkedList<ResolveInfo>());
+ setupMockPackageManager(false /* default */, true /* system */, false /* external calls */);
mInCallController.bindToServices(mMockCall);
ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -150,11 +150,10 @@
when(mMockCall.isIncoming()).thenReturn(false);
when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
when(mMockCall.getIntentExtras()).thenReturn(callExtras);
+ when(mMockCall.isExternalCall()).thenReturn(false);
Intent queryIntent = new Intent(InCallService.SERVICE_INTERFACE);
- when(mMockPackageManager.queryIntentServicesAsUser(
- queryIntent, PackageManager.GET_META_DATA, CURRENT_USER_ID))
- .thenReturn(new LinkedList<ResolveInfo>());
+ setupMockPackageManager(false /* default */, true /* system */, false /* external calls */);
mInCallController.bindToServices(mMockCall);
ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -185,36 +184,18 @@
when(mMockCall.isIncoming()).thenReturn(false);
when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
when(mMockCall.getIntentExtras()).thenReturn(callExtras);
+ when(mMockCall.isExternalCall()).thenReturn(false);
when(mMockDefaultDialerAdapter.getDefaultDialerApplication(mMockContext, CURRENT_USER_ID))
.thenReturn(DEF_PKG);
when(mMockContext.bindServiceAsUser(any(Intent.class), any(ServiceConnection.class),
anyInt(), eq(UserHandle.CURRENT))).thenReturn(true);
- Intent queryIntent = new Intent(InCallService.SERVICE_INTERFACE);
- when(mMockPackageManager.queryIntentServicesAsUser(
- any(Intent.class), eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID)))
- .thenReturn(new LinkedList<ResolveInfo>() {{
- add(new ResolveInfo() {{
- serviceInfo = new ServiceInfo();
- serviceInfo.packageName = DEF_PKG;
- serviceInfo.name = DEF_CLASS;
- serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
- serviceInfo.metaData = new Bundle();
- serviceInfo.metaData.putBoolean(
- TelecomManager.METADATA_IN_CALL_SERVICE_UI, true);
- }});
- add(new ResolveInfo() {{
- serviceInfo = new ServiceInfo();
- serviceInfo.packageName = SYS_PKG;
- serviceInfo.name = SYS_CLASS;
- serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
- }});
- }});
+ setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
mInCallController.bindToServices(mMockCall);
// Query for the different InCallServices
ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockPackageManager, times(3)).queryIntentServicesAsUser(
+ verify(mMockPackageManager, times(4)).queryIntentServicesAsUser(
queryIntentCaptor.capture(),
eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
@@ -253,37 +234,20 @@
when(mMockCall.isIncoming()).thenReturn(false);
when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
when(mMockCall.getIntentExtras()).thenReturn(callExtras);
+ when(mMockCall.isExternalCall()).thenReturn(false);
when(mMockDefaultDialerAdapter.getDefaultDialerApplication(mMockContext, CURRENT_USER_ID))
.thenReturn(DEF_PKG);
when(mMockContext.bindServiceAsUser(any(Intent.class), any(ServiceConnection.class),
eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE),
eq(UserHandle.CURRENT))).thenReturn(true);
- Intent queryIntent = new Intent(InCallService.SERVICE_INTERFACE);
- when(mMockPackageManager.queryIntentServicesAsUser(
- any(Intent.class), eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID)))
- .thenReturn(new LinkedList<ResolveInfo>() {{
- add(new ResolveInfo() {{
- serviceInfo = new ServiceInfo();
- serviceInfo.packageName = DEF_PKG;
- serviceInfo.name = DEF_CLASS;
- serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
- serviceInfo.metaData = new Bundle();
- serviceInfo.metaData.putBoolean(
- TelecomManager.METADATA_IN_CALL_SERVICE_UI, true);
- }});
- add(new ResolveInfo() {{
- serviceInfo = new ServiceInfo();
- serviceInfo.packageName = SYS_PKG;
- serviceInfo.name = SYS_CLASS;
- serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
- }});
- }});
+ setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
+
mInCallController.bindToServices(mMockCall);
// Query for the different InCallServices
ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockPackageManager, times(3)).queryIntentServicesAsUser(
+ verify(mMockPackageManager, times(4)).queryIntentServicesAsUser(
queryIntentCaptor.capture(),
eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
@@ -319,40 +283,26 @@
when(mMockCallsManager.getCurrentUserHandle()).thenReturn(mUserHandle);
when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
when(mMockCallsManager.hasEmergencyCall()).thenReturn(false);
+ when(mMockCallsManager.getCalls()).thenReturn(Collections.singletonList(mMockCall));
+ when(mMockCallsManager.getAudioState()).thenReturn(null);
+ when(mMockCallsManager.canAddCall()).thenReturn(false);
when(mMockCall.isIncoming()).thenReturn(false);
when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
when(mMockCall.getIntentExtras()).thenReturn(callExtras);
+ when(mMockCall.isExternalCall()).thenReturn(false);
+ when(mMockCall.getConferenceableCalls()).thenReturn(Collections.emptyList());
when(mMockDefaultDialerAdapter.getDefaultDialerApplication(mMockContext, CURRENT_USER_ID))
.thenReturn(DEF_PKG);
when(mMockContext.bindServiceAsUser(
any(Intent.class), any(ServiceConnection.class), anyInt(), any(UserHandle.class)))
.thenReturn(true);
- Intent queryIntent = new Intent(InCallService.SERVICE_INTERFACE);
- when(mMockPackageManager.queryIntentServicesAsUser(
- any(Intent.class), eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID)))
- .thenReturn(new LinkedList<ResolveInfo>() {{
- add(new ResolveInfo() {{
- serviceInfo = new ServiceInfo();
- serviceInfo.packageName = DEF_PKG;
- serviceInfo.name = DEF_CLASS;
- serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
- serviceInfo.metaData = new Bundle();
- serviceInfo.metaData.putBoolean(
- TelecomManager.METADATA_IN_CALL_SERVICE_UI, true);
- }});
- add(new ResolveInfo() {{
- serviceInfo = new ServiceInfo();
- serviceInfo.packageName = SYS_PKG;
- serviceInfo.name = SYS_CLASS;
- serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
- }});
- }});
+ setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
mInCallController.bindToServices(mMockCall);
// Query for the different InCallServices
ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockPackageManager, times(3)).queryIntentServicesAsUser(
+ verify(mMockPackageManager, times(4)).queryIntentServicesAsUser(
queryIntentCaptor.capture(),
eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
@@ -408,4 +358,164 @@
assertEquals(SYS_PKG, bindIntent.getComponent().getPackageName());
assertEquals(SYS_CLASS, bindIntent.getComponent().getClassName());
}
+
+ /**
+ * Ensures that the {@link InCallController} will bind to an {@link InCallService} which
+ * supports external calls.
+ */
+ @MediumTest
+ public void testBindToService_IncludeExternal() throws Exception {
+ setupMocks(true /* isExternalCall */);
+ setupMockPackageManager(true /* default */, true /* system */, true /* external calls */);
+ mInCallController.bindToServices(mMockCall);
+
+ // Query for the different InCallServices
+ ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mMockPackageManager, times(4)).queryIntentServicesAsUser(
+ queryIntentCaptor.capture(),
+ eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
+
+ // Verify call for default dialer InCallService
+ assertEquals(DEF_PKG, queryIntentCaptor.getAllValues().get(0).getPackage());
+ // Verify call for car-mode InCallService
+ assertEquals(null, queryIntentCaptor.getAllValues().get(1).getPackage());
+ // Verify call for non-UI InCallServices
+ assertEquals(null, queryIntentCaptor.getAllValues().get(2).getPackage());
+
+ ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mMockContext, times(1)).bindServiceAsUser(
+ bindIntentCaptor.capture(),
+ any(ServiceConnection.class),
+ eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE),
+ eq(UserHandle.CURRENT));
+
+ Intent bindIntent = bindIntentCaptor.getValue();
+ assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
+ assertEquals(DEF_PKG, bindIntent.getComponent().getPackageName());
+ assertEquals(DEF_CLASS, bindIntent.getComponent().getClassName());
+ }
+
+ /**
+ * Make sure that if a call goes away before the in-call service finishes binding and another
+ * call gets connected soon after, the new call will still be sent to the in-call service.
+ */
+ @MediumTest
+ public void testUnbindDueToCallDisconnect() throws Exception {
+ when(mMockCallsManager.getCurrentUserHandle()).thenReturn(mUserHandle);
+ when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
+ when(mMockCallsManager.hasEmergencyCall()).thenReturn(false);
+ when(mMockCall.isIncoming()).thenReturn(true);
+ when(mMockCall.isExternalCall()).thenReturn(false);
+ when(mMockDefaultDialerAdapter.getDefaultDialerApplication(mMockContext, CURRENT_USER_ID))
+ .thenReturn(DEF_PKG);
+ when(mMockContext.bindServiceAsUser(
+ any(Intent.class), any(ServiceConnection.class), anyInt(), any(UserHandle.class)))
+ .thenReturn(true);
+ when(mTimeoutsAdapter.getCallRemoveUnbindInCallServicesDelay(any(ContentResolver.class)))
+ .thenReturn(500L);
+
+ when(mMockCallsManager.getCalls()).thenReturn(Collections.singletonList(mMockCall));
+ setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
+ mInCallController.bindToServices(mMockCall);
+
+ ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
+ ArgumentCaptor<ServiceConnection> serviceConnectionCaptor =
+ ArgumentCaptor.forClass(ServiceConnection.class);
+ verify(mMockContext, times(1)).bindServiceAsUser(
+ bindIntentCaptor.capture(),
+ serviceConnectionCaptor.capture(),
+ eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE),
+ eq(UserHandle.CURRENT));
+
+ // Pretend that the call has gone away.
+ when(mMockCallsManager.getCalls()).thenReturn(Collections.emptyList());
+ mInCallController.onCallRemoved(mMockCall);
+
+ // Start the connection, make sure we don't unbind, and make sure that we don't send
+ // anything to the in-call service yet.
+ ServiceConnection serviceConnection = serviceConnectionCaptor.getValue();
+ ComponentName defDialerComponentName = new ComponentName(DEF_PKG, DEF_CLASS);
+ IBinder mockBinder = mock(IBinder.class);
+ IInCallService mockInCallService = mock(IInCallService.class);
+ when(mockBinder.queryLocalInterface(anyString())).thenReturn(mockInCallService);
+
+ serviceConnection.onServiceConnected(defDialerComponentName, mockBinder);
+ verify(mockInCallService).setInCallAdapter(any(IInCallAdapter.class));
+ verify(mMockContext, never()).unbindService(serviceConnection);
+ verify(mockInCallService, never()).addCall(any(ParcelableCall.class));
+
+ // Now, we add in the call again and make sure that it's sent to the InCallService.
+ when(mMockCallsManager.getCalls()).thenReturn(Collections.singletonList(mMockCall));
+ mInCallController.onCallAdded(mMockCall);
+ verify(mockInCallService).addCall(any(ParcelableCall.class));
+ }
+
+ private void setupMocks(boolean isExternalCall) {
+ when(mMockCallsManager.getCurrentUserHandle()).thenReturn(mUserHandle);
+ when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
+ when(mMockCallsManager.hasEmergencyCall()).thenReturn(false);
+ when(mMockCall.isIncoming()).thenReturn(false);
+ when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
+ when(mMockDefaultDialerAdapter.getDefaultDialerApplication(mMockContext, CURRENT_USER_ID))
+ .thenReturn(DEF_PKG);
+ when(mMockContext.bindServiceAsUser(any(Intent.class), any(ServiceConnection.class),
+ anyInt(), eq(UserHandle.CURRENT))).thenReturn(true);
+ when(mMockCall.isExternalCall()).thenReturn(isExternalCall);
+ }
+
+ private ResolveInfo getDefResolveInfo(final boolean includeExternalCalls) {
+ return new ResolveInfo() {{
+ serviceInfo = new ServiceInfo();
+ serviceInfo.packageName = DEF_PKG;
+ serviceInfo.name = DEF_CLASS;
+ serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
+ serviceInfo.metaData = new Bundle();
+ serviceInfo.metaData.putBoolean(
+ TelecomManager.METADATA_IN_CALL_SERVICE_UI, true);
+ if (includeExternalCalls) {
+ serviceInfo.metaData.putBoolean(
+ TelecomManager.METADATA_INCLUDE_EXTERNAL_CALLS, true);
+ }
+ }};
+ }
+
+ private ResolveInfo getSysResolveinfo() {
+ return new ResolveInfo() {{
+ serviceInfo = new ServiceInfo();
+ serviceInfo.packageName = SYS_PKG;
+ serviceInfo.name = SYS_CLASS;
+ serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
+ }};
+ }
+
+ private void setupMockPackageManager(final boolean useDefaultDialer,
+ final boolean useSystemDialer, final boolean includeExternalCalls) {
+
+ doAnswer(new Answer() {
+ @Override
+ public Object answer(InvocationOnMock invocation) throws Throwable {
+ Object[] args = invocation.getArguments();
+ Intent intent = (Intent) args[0];
+ String packageName = intent.getPackage();
+ ComponentName componentName = intent.getComponent();
+ if (componentName != null) {
+ packageName = componentName.getPackageName();
+ }
+ LinkedList<ResolveInfo> resolveInfo = new LinkedList<ResolveInfo>();
+ if (!TextUtils.isEmpty(packageName)) {
+ if ((TextUtils.isEmpty(packageName) || packageName.equals(DEF_PKG)) &&
+ useDefaultDialer) {
+ resolveInfo.add(getDefResolveInfo(includeExternalCalls));
+ }
+
+ if ((TextUtils.isEmpty(packageName) || packageName.equals(SYS_PKG)) &&
+ useSystemDialer) {
+ resolveInfo.add(getSysResolveinfo());
+ }
+ }
+ return resolveInfo;
+ }
+ }).when(mMockPackageManager).queryIntentServicesAsUser(
+ any(Intent.class), eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
+ }
}
diff --git a/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java b/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
index 12e7280..2663356 100644
--- a/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
@@ -43,6 +43,7 @@
import com.android.server.telecom.Constants;
import com.android.server.telecom.MissedCallNotifier;
import com.android.server.telecom.PhoneAccountRegistrar;
+import com.android.server.telecom.PhoneNumberUtilsAdapterImpl;
import com.android.server.telecom.TelecomBroadcastIntentProcessor;
import com.android.server.telecom.TelecomSystem;
import com.android.server.telecom.components.TelecomBroadcastReceiver;
diff --git a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
index a7d98db..54613d4 100644
--- a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
+++ b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
@@ -38,6 +38,7 @@
import com.android.server.telecom.NewOutgoingCallIntentBroadcaster;
import com.android.server.telecom.PhoneNumberUtilsAdapter;
import com.android.server.telecom.PhoneNumberUtilsAdapterImpl;
+import com.android.server.telecom.TelecomSystem;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
@@ -77,6 +78,7 @@
mContext = mComponentContextFixture.getTestDouble().getApplicationContext();
mPhoneNumberUtilsAdapterSpy = spy(new PhoneNumberUtilsAdapterImpl());
when(mCall.getInitiatingUser()).thenReturn(UserHandle.CURRENT);
+ when(mCallsManager.getLock()).thenReturn(new TelecomSystem.SyncRoot() { });
}
@SmallTest
diff --git a/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java b/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java
index e50fe10..7b5b836 100644
--- a/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java
+++ b/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java
@@ -171,8 +171,7 @@
public void testAccounts() throws Exception {
int i = 0;
- mComponentContextFixture.addConnectionService(
- makeQuickConnectionServiceComponentName(),
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
Mockito.mock(IConnectionService.class));
registerAndEnableAccount(makeQuickAccountBuilder("id" + i, i++)
@@ -205,8 +204,7 @@
@MediumTest
public void testDefaultOutgoing() throws Exception {
- mComponentContextFixture.addConnectionService(
- makeQuickConnectionServiceComponentName(),
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
Mockito.mock(IConnectionService.class));
// By default, there is no default outgoing account (nothing has been registered)
@@ -253,6 +251,229 @@
}
@MediumTest
+ public void testReplacePhoneAccountByGroup() throws Exception {
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
+ Mockito.mock(IConnectionService.class));
+
+ // By default, there is no default outgoing account (nothing has been registered)
+ assertNull(
+ mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(PhoneAccount.SCHEME_TEL));
+
+ // Register one tel: account
+ PhoneAccountHandle telAccount1 = makeQuickAccountHandle("tel_acct1");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount1, "tel_acct1")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ mRegistrar.setUserSelectedOutgoingPhoneAccount(telAccount1, Process.myUserHandle());
+ PhoneAccountHandle defaultAccount =
+ mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(PhoneAccount.SCHEME_TEL);
+ assertEquals(telAccount1, defaultAccount);
+
+ // Add call capable SIP account, make sure tel: doesn't change
+ PhoneAccountHandle sipAccount = makeQuickAccountHandle("sip_acct");
+ registerAndEnableAccount(new PhoneAccount.Builder(sipAccount, "sip_acct")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .build());
+ defaultAccount = mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(
+ PhoneAccount.SCHEME_TEL);
+ assertEquals(telAccount1, defaultAccount);
+
+ // Replace tel: account with another in the same Group
+ PhoneAccountHandle telAccount2 = makeQuickAccountHandle("tel_acct2");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount2, "tel_acct2")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ defaultAccount = mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(
+ PhoneAccount.SCHEME_TEL);
+ assertEquals(telAccount2, defaultAccount);
+ assertNull(mRegistrar.getPhoneAccountUnchecked(telAccount1));
+ }
+
+ @MediumTest
+ public void testAddSameDefault() throws Exception {
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
+ Mockito.mock(IConnectionService.class));
+
+ // By default, there is no default outgoing account (nothing has been registered)
+ assertNull(
+ mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(PhoneAccount.SCHEME_TEL));
+
+ // Register one tel: account
+ PhoneAccountHandle telAccount1 = makeQuickAccountHandle("tel_acct1");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount1, "tel_acct1")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ mRegistrar.setUserSelectedOutgoingPhoneAccount(telAccount1, Process.myUserHandle());
+ PhoneAccountHandle defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertEquals(telAccount1, defaultAccount);
+ mRegistrar.unregisterPhoneAccount(telAccount1);
+
+ // Register Emergency Account and unregister
+ PhoneAccountHandle emerAccount = makeQuickAccountHandle("emer_acct");
+ registerAndEnableAccount(new PhoneAccount.Builder(emerAccount, "emer_acct")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .build());
+ defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertNull(defaultAccount);
+ mRegistrar.unregisterPhoneAccount(emerAccount);
+
+ // Re-register the same account and make sure the default is in place
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount1, "tel_acct1")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertEquals(telAccount1, defaultAccount);
+ }
+
+ @MediumTest
+ public void testAddSameGroup() throws Exception {
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
+ Mockito.mock(IConnectionService.class));
+
+ // By default, there is no default outgoing account (nothing has been registered)
+ assertNull(
+ mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(PhoneAccount.SCHEME_TEL));
+
+ // Register one tel: account
+ PhoneAccountHandle telAccount1 = makeQuickAccountHandle("tel_acct1");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount1, "tel_acct1")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ mRegistrar.setUserSelectedOutgoingPhoneAccount(telAccount1, Process.myUserHandle());
+ PhoneAccountHandle defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertEquals(telAccount1, defaultAccount);
+ mRegistrar.unregisterPhoneAccount(telAccount1);
+
+ // Register Emergency Account and unregister
+ PhoneAccountHandle emerAccount = makeQuickAccountHandle("emer_acct");
+ registerAndEnableAccount(new PhoneAccount.Builder(emerAccount, "emer_acct")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .build());
+ defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertNull(defaultAccount);
+ mRegistrar.unregisterPhoneAccount(emerAccount);
+
+ // Re-register a new account with the same group
+ PhoneAccountHandle telAccount2 = makeQuickAccountHandle("tel_acct2");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount2, "tel_acct2")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertEquals(telAccount2, defaultAccount);
+ }
+
+ @MediumTest
+ public void testAddSameGroupButDifferentComponent() throws Exception {
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
+ Mockito.mock(IConnectionService.class));
+
+ // By default, there is no default outgoing account (nothing has been registered)
+ assertNull(mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(
+ PhoneAccount.SCHEME_TEL));
+
+ // Register one tel: account
+ PhoneAccountHandle telAccount1 = makeQuickAccountHandle("tel_acct1");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount1, "tel_acct1")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ mRegistrar.setUserSelectedOutgoingPhoneAccount(telAccount1, Process.myUserHandle());
+ PhoneAccountHandle defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertEquals(telAccount1, defaultAccount);
+ assertNotNull(mRegistrar.getPhoneAccountUnchecked(telAccount1));
+
+ // Register a new account with the same group, but different Component, so don't replace
+ // Default
+ PhoneAccountHandle telAccount2 = makeQuickAccountHandle(
+ new ComponentName("other1", "other2"), "tel_acct2");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount2, "tel_acct2")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ assertNotNull(mRegistrar.getPhoneAccountUnchecked(telAccount2));
+
+ defaultAccount =
+ mRegistrar.getUserSelectedOutgoingPhoneAccount(Process.myUserHandle());
+ assertEquals(telAccount1, defaultAccount);
+ }
+
+ @MediumTest
+ public void testAddSameGroupButDifferentComponent2() throws Exception {
+ mComponentContextFixture.addConnectionService(makeQuickConnectionServiceComponentName(),
+ Mockito.mock(IConnectionService.class));
+
+ // By default, there is no default outgoing account (nothing has been registered)
+ assertNull(mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(
+ PhoneAccount.SCHEME_TEL));
+
+ // Register first tel: account
+ PhoneAccountHandle telAccount1 = makeQuickAccountHandle(
+ new ComponentName("other1", "other2"), "tel_acct1");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount1, "tel_acct1")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+ assertNotNull(mRegistrar.getPhoneAccountUnchecked(telAccount1));
+ mRegistrar.setUserSelectedOutgoingPhoneAccount(telAccount1, Process.myUserHandle());
+
+ // Register second account with the same group, but a second Component, so don't replace
+ // Default
+ PhoneAccountHandle telAccount2 = makeQuickAccountHandle("tel_acct2");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount2, "tel_acct2")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+
+ PhoneAccountHandle defaultAccount =
+ mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(PhoneAccount.SCHEME_TEL);
+ assertEquals(telAccount1, defaultAccount);
+
+ // Register third account with the second component name, but same group id
+ PhoneAccountHandle telAccount3 = makeQuickAccountHandle("tel_acct3");
+ registerAndEnableAccount(new PhoneAccount.Builder(telAccount3, "tel_acct3")
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
+ .addSupportedUriScheme(PhoneAccount.SCHEME_TEL)
+ .setGroupId("testGroup")
+ .build());
+
+ // Make sure that the default account is still the original PhoneAccount and that the
+ // second PhoneAccount with the second ComponentName was replaced by the third PhoneAccount
+ defaultAccount =
+ mRegistrar.getOutgoingPhoneAccountForSchemeOfCurrentUser(PhoneAccount.SCHEME_TEL);
+ assertEquals(telAccount1, defaultAccount);
+
+ assertNotNull(mRegistrar.getPhoneAccountUnchecked(telAccount1));
+ assertNull(mRegistrar.getPhoneAccountUnchecked(telAccount2));
+ assertNotNull(mRegistrar.getPhoneAccountUnchecked(telAccount3));
+ }
+
+ @MediumTest
public void testPhoneAccountParceling() throws Exception {
PhoneAccountHandle handle = makeQuickAccountHandle("foo");
roundTripPhoneAccount(new PhoneAccount.Builder(handle, null).build());
@@ -268,6 +489,7 @@
.setShortDescription("short description")
.setSubscriptionAddress(Uri.parse("tel:2345678"))
.setSupportedUriSchemes(Arrays.asList("tel", "sip"))
+ .setGroupId("testGroup")
.build());
roundTripPhoneAccount(
new PhoneAccount.Builder(handle, "foo")
@@ -281,6 +503,7 @@
.setShortDescription("short description")
.setSubscriptionAddress(Uri.parse("tel:2345678"))
.setSupportedUriSchemes(Arrays.asList("tel", "sip"))
+ .setGroupId("testGroup")
.build());
}
@@ -291,10 +514,11 @@
}
private static PhoneAccountHandle makeQuickAccountHandle(String id) {
- return new PhoneAccountHandle(
- makeQuickConnectionServiceComponentName(),
- id,
- Process.myUserHandle());
+ return makeQuickAccountHandle(makeQuickConnectionServiceComponentName(), id);
+ }
+
+ private static PhoneAccountHandle makeQuickAccountHandle(ComponentName name, String id) {
+ return new PhoneAccountHandle(name, id, Process.myUserHandle());
}
private PhoneAccount.Builder makeQuickAccountBuilder(String id, int idx) {
@@ -457,7 +681,8 @@
new ComponentName("pkg0", "cls0"), "id0");
UserHandle userHandle = phoneAccountHandle.getUserHandle();
s.defaultOutgoingAccountHandles
- .put(userHandle, new DefaultPhoneAccountHandle(userHandle, phoneAccountHandle));
+ .put(userHandle, new DefaultPhoneAccountHandle(userHandle, phoneAccountHandle,
+ "testGroup"));
return s;
}
}
diff --git a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
index d4fd8e3..af7f0b5 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
@@ -33,6 +33,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -61,6 +62,8 @@
import com.android.server.telecom.AsyncRingtonePlayer;
import com.android.server.telecom.BluetoothPhoneServiceImpl;
import com.android.server.telecom.CallAudioManager;
+import com.android.server.telecom.CallAudioRouteStateMachine;
+import com.android.server.telecom.CallerInfoAsyncQueryFactory;
import com.android.server.telecom.CallerInfoLookupHelper;
import com.android.server.telecom.CallsManager;
import com.android.server.telecom.CallsManagerListenerBase;
@@ -68,6 +71,7 @@
import com.android.server.telecom.HeadsetMediaButtonFactory;
import com.android.server.telecom.InCallWakeLockController;
import com.android.server.telecom.InCallWakeLockControllerFactory;
+import com.android.server.telecom.InterruptionFilterProxy;
import com.android.server.telecom.MissedCallNotifier;
import com.android.server.telecom.PhoneAccountRegistrar;
import com.android.server.telecom.PhoneNumberUtilsAdapter;
@@ -76,6 +80,7 @@
import com.android.server.telecom.ProximitySensorManagerFactory;
import com.android.server.telecom.TelecomSystem;
import com.android.server.telecom.Timeouts;
+import com.android.server.telecom.callfiltering.AsyncBlockCheckFilter;
import com.android.server.telecom.components.UserCallIntentProcessor;
import com.android.server.telecom.ui.MissedCallNotifierImpl.MissedCallNotifierImplFactory;
@@ -88,6 +93,8 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
/**
* Implements mocks and functionality required to implement telecom system tests.
@@ -161,11 +168,25 @@
}
}
PhoneNumberUtilsAdapter mPhoneNumberUtilsAdapter = new EmergencyNumberUtilsAdapter();
+
+ public static class MockInterruptionFilterProxy implements InterruptionFilterProxy {
+ private int mInterruptionFilter = NotificationManager.INTERRUPTION_FILTER_ALL;
+ @Override
+ public void setInterruptionFilter(int interruptionFilter) {
+ mInterruptionFilter = interruptionFilter;
+ }
+
+ @Override
+ public int getCurrentInterruptionFilter() {
+ return mInterruptionFilter;
+ }
+ }
@Mock HeadsetMediaButton mHeadsetMediaButton;
@Mock ProximitySensorManager mProximitySensorManager;
@Mock InCallWakeLockController mInCallWakeLockController;
@Mock BluetoothPhoneServiceImpl mBluetoothPhoneServiceImpl;
@Mock AsyncRingtonePlayer mAsyncRingtonePlayer;
+ @Mock InterruptionFilterProxy mInterruptionFilterProxy;
final ComponentName mInCallServiceComponentNameX =
new ComponentName(
@@ -209,7 +230,8 @@
.addSupportedUriScheme("tel")
.setCapabilities(
PhoneAccount.CAPABILITY_CALL_PROVIDER |
- PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)
+ PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION |
+ PhoneAccount.CAPABILITY_VIDEO_CALLING)
.build();
final PhoneAccount mPhoneAccountB0 =
PhoneAccount.builder(
@@ -220,7 +242,8 @@
.addSupportedUriScheme("tel")
.setCapabilities(
PhoneAccount.CAPABILITY_CALL_PROVIDER |
- PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)
+ PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION |
+ PhoneAccount.CAPABILITY_VIDEO_CALLING)
.build();
final PhoneAccount mPhoneAccountE0 =
PhoneAccount.builder(
@@ -374,7 +397,8 @@
},
mTimeoutsAdapter,
mAsyncRingtonePlayer,
- mPhoneNumberUtilsAdapter);
+ mPhoneNumberUtilsAdapter,
+ mInterruptionFilterProxy);
mComponentContextFixture.setTelecomManager(new TelecomManager(
mComponentContextFixture.getTestDouble(),
diff --git a/tests/src/com/android/server/telecom/tests/VideoCallTests.java b/tests/src/com/android/server/telecom/tests/VideoCallTests.java
index adef66b..4764e92 100644
--- a/tests/src/com/android/server/telecom/tests/VideoCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/VideoCallTests.java
@@ -21,6 +21,7 @@
import android.os.RemoteException;
import android.telecom.CallAudioState;
import android.telecom.VideoProfile;
+import android.test.suitebuilder.annotation.MediumTest;
import com.android.server.telecom.CallAudioModeStateMachine;
import com.android.server.telecom.CallAudioRouteStateMachine;
@@ -41,6 +42,7 @@
* Tests to ensure an incoming video-call is automatically routed to the speakerphone when
* the call is answered and neither a wired headset nor bluetooth headset are connected.
*/
+ @MediumTest
public void testAutoSpeakerphoneIncomingBidirectional() throws Exception {
// Start an incoming video call.
IdPair ids = startAndMakeActiveIncomingCall("650-555-1212",
@@ -56,6 +58,7 @@
* always answer incoming video calls as bi-directional. It is, however, possible for a third
* party dialer to answer an incoming video call a a one-way video call.
*/
+ @MediumTest
public void testAutoSpeakerphoneIncomingReceiveOnly() throws Exception {
// Start an incoming video call.
IdPair ids = startAndMakeActiveIncomingCall("650-555-1212",
@@ -69,6 +72,7 @@
* Tests audio routing for an outgoing video call made with bidirectional video. Expect to be
* in speaker mode.
*/
+ @MediumTest
public void testAutoSpeakerphoneOutgoingBidirectional() throws Exception {
// Start an incoming video call.
IdPair ids = startAndMakeActiveOutgoingCall("650-555-1212",
@@ -83,6 +87,7 @@
* in speaker mode. Note: The default UI does not support making one-way video calls, but the
* APIs do and a third party incall UI could choose to support that.
*/
+ @MediumTest
public void testAutoSpeakerphoneOutgoingTransmitOnly() throws Exception {
// Start an incoming video call.
IdPair ids = startAndMakeActiveOutgoingCall("650-555-1212",
@@ -97,6 +102,7 @@
* in speaker mode. Note: The default UI does not support making one-way video calls, but the
* APIs do and a third party incall UI could choose to support that.
*/
+ @MediumTest
public void testNoAutoSpeakerphoneOnOutgoing() throws Exception {
// Start an incoming video call.
IdPair ids = startAndMakeActiveOutgoingCall("650-555-1212",
@@ -109,6 +115,7 @@
/**
* Tests to ensure an incoming audio-only call is routed to the earpiece.
*/
+ @MediumTest
public void testNoAutoSpeakerphoneOnIncoming() throws Exception {
// Start an incoming video call.
diff --git a/tests/src/com/android/server/telecom/tests/VideoProviderTest.java b/tests/src/com/android/server/telecom/tests/VideoProviderTest.java
index 44cdae0..cca6446 100644
--- a/tests/src/com/android/server/telecom/tests/VideoProviderTest.java
+++ b/tests/src/com/android/server/telecom/tests/VideoProviderTest.java
@@ -33,6 +33,7 @@
import android.telecom.VideoCallImpl;
import android.telecom.VideoProfile;
import android.telecom.VideoProfile.CameraCapabilities;
+import android.test.suitebuilder.annotation.MediumTest;
import android.view.Surface;
import com.google.common.base.Predicate;
@@ -114,6 +115,7 @@
* and {@link VideoCall.Callback#onCameraCapabilitiesChanged(CameraCapabilities)}
* APIS.
*/
+ @MediumTest
public void testCameraChange() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)
@@ -147,6 +149,7 @@
* Tests the {@link VideoCall#setPreviewSurface(Surface)} and
* {@link VideoProvider#onSetPreviewSurface(Surface)} APIs.
*/
+ @MediumTest
public void testSetPreviewSurface() throws Exception {
final Surface surface = new Surface(new SurfaceTexture(1));
mVideoCall.setPreviewSurface(surface);
@@ -172,6 +175,7 @@
* Tests the {@link VideoCall#setDisplaySurface(Surface)} and
* {@link VideoProvider#onSetDisplaySurface(Surface)} APIs.
*/
+ @MediumTest
public void testSetDisplaySurface() throws Exception {
final Surface surface = new Surface(new SurfaceTexture(1));
mVideoCall.setDisplaySurface(surface);
@@ -197,6 +201,7 @@
* Tests the {@link VideoCall#setDeviceOrientation(int)} and
* {@link VideoProvider#onSetDeviceOrientation(int)} APIs.
*/
+ @MediumTest
public void testSetDeviceOrientation() throws Exception {
mVideoCall.setDeviceOrientation(ORIENTATION_0);
@@ -220,6 +225,7 @@
/**
* Tests the {@link VideoCall#setZoom(float)} and {@link VideoProvider#onSetZoom(float)} APIs.
*/
+ @MediumTest
public void testSetZoom() throws Exception {
mVideoCall.setZoom(ZOOM_LEVEL);
@@ -241,6 +247,7 @@
* Emulates a scenario where an InCallService sends a request to upgrade to video, which the
* peer accepts as-is.
*/
+ @MediumTest
public void testSessionModifyRequest() throws Exception {
VideoProfile requestProfile = new VideoProfile(VideoProfile.STATE_BIDIRECTIONAL);
@@ -278,6 +285,7 @@
* Tests the {@link VideoCall#sendSessionModifyResponse(VideoProfile)},
* and {@link VideoProvider#onSendSessionModifyResponse(VideoProfile)} APIs.
*/
+ @MediumTest
public void testSessionModifyResponse() throws Exception {
VideoProfile sessionModifyResponse = new VideoProfile(VideoProfile.STATE_TX_ENABLED);
@@ -298,6 +306,7 @@
* {@link VideoProvider#onRequestCameraCapabilities()} ()}, and
* {@link VideoCall.Callback#onCameraCapabilitiesChanged(CameraCapabilities)} APIs.
*/
+ @MediumTest
public void testRequestCameraCapabilities() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)
@@ -315,6 +324,7 @@
* Tests the {@link VideoCall#setPauseImage(Uri)}, and
* {@link VideoProvider#onSetPauseImage(Uri)} APIs.
*/
+ @MediumTest
public void testSetPauseImage() throws Exception {
final Uri testUri = Uri.fromParts("file", "test.jpg", null);
mVideoCall.setPauseImage(testUri);
@@ -333,6 +343,7 @@
* {@link VideoProvider#onRequestConnectionDataUsage()}, and
* {@link VideoCall.Callback#onCallDataUsageChanged(long)} APIs.
*/
+ @MediumTest
public void testRequestDataUsage() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)
@@ -350,6 +361,7 @@
* Tests the {@link VideoProvider#receiveSessionModifyRequest(VideoProfile)},
* {@link VideoCall.Callback#onSessionModifyRequestReceived(VideoProfile)} APIs.
*/
+ @MediumTest
public void testReceiveSessionModifyRequest() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)
@@ -372,6 +384,7 @@
* Tests the {@link VideoProvider#handleCallSessionEvent(int)}, and
* {@link VideoCall.Callback#onCallSessionEvent(int)} APIs.
*/
+ @MediumTest
public void testSessionEvent() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)
@@ -390,6 +403,7 @@
* Tests the {@link VideoProvider#changePeerDimensions(int, int)} and
* {@link VideoCall.Callback#onPeerDimensionsChanged(int, int)} APIs.
*/
+ @MediumTest
public void testPeerDimensionChange() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)
@@ -409,6 +423,7 @@
* Tests the {@link VideoProvider#changeVideoQuality(int)} and
* {@link VideoCall.Callback#onVideoQualityChanged(int)} APIs.
*/
+ @MediumTest
public void testVideoQualityChange() throws Exception {
// Wait until the callback has been received before performing verification.
doAnswer(mVerification).when(mVideoCallCallback)