merge in KQS81M
diff --git a/InCallUI/res/drawable-hdpi/business_unknown.png b/InCallUI/res/drawable-hdpi/business_unknown.png
new file mode 100644
index 0000000..b369939
--- /dev/null
+++ b/InCallUI/res/drawable-hdpi/business_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-hdpi/list_pressed_holo_dark.9.png b/InCallUI/res/drawable-hdpi/list_pressed_holo_dark.9.png
index 3c52029..596accb 100644
--- a/InCallUI/res/drawable-hdpi/list_pressed_holo_dark.9.png
+++ b/InCallUI/res/drawable-hdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/InCallUI/res/drawable-hdpi/picture_unknown.png b/InCallUI/res/drawable-hdpi/picture_unknown.png
index ba46da1..26d2be1 100644
--- a/InCallUI/res/drawable-hdpi/picture_unknown.png
+++ b/InCallUI/res/drawable-hdpi/picture_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/business_unknown.png b/InCallUI/res/drawable-mdpi/business_unknown.png
new file mode 100644
index 0000000..eac97a9
--- /dev/null
+++ b/InCallUI/res/drawable-mdpi/business_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/list_pressed_holo_dark.9.png b/InCallUI/res/drawable-mdpi/list_pressed_holo_dark.9.png
index c231328..fd0e8d7 100644
--- a/InCallUI/res/drawable-mdpi/list_pressed_holo_dark.9.png
+++ b/InCallUI/res/drawable-mdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/picture_unknown.png b/InCallUI/res/drawable-mdpi/picture_unknown.png
index 995df75..1ee333c 100644
--- a/InCallUI/res/drawable-mdpi/picture_unknown.png
+++ b/InCallUI/res/drawable-mdpi/picture_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/business_unknown.png b/InCallUI/res/drawable-xhdpi/business_unknown.png
new file mode 100644
index 0000000..aa84456
--- /dev/null
+++ b/InCallUI/res/drawable-xhdpi/business_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/list_pressed_holo_dark.9.png b/InCallUI/res/drawable-xhdpi/list_pressed_holo_dark.9.png
index 4f85510..29037a0 100644
--- a/InCallUI/res/drawable-xhdpi/list_pressed_holo_dark.9.png
+++ b/InCallUI/res/drawable-xhdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/picture_unknown.png b/InCallUI/res/drawable-xhdpi/picture_unknown.png
index b4bd366..db74fd9 100644
--- a/InCallUI/res/drawable-xhdpi/picture_unknown.png
+++ b/InCallUI/res/drawable-xhdpi/picture_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/business_unknown.png b/InCallUI/res/drawable-xxhdpi/business_unknown.png
new file mode 100644
index 0000000..6273bb3
--- /dev/null
+++ b/InCallUI/res/drawable-xxhdpi/business_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/list_pressed_holo_dark.9.png b/InCallUI/res/drawable-xxhdpi/list_pressed_holo_dark.9.png
index e751a60..d4952ea 100644
--- a/InCallUI/res/drawable-xxhdpi/list_pressed_holo_dark.9.png
+++ b/InCallUI/res/drawable-xxhdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/picture_unknown.png b/InCallUI/res/drawable-xxhdpi/picture_unknown.png
index 4127593..38bec2c 100644
--- a/InCallUI/res/drawable-xxhdpi/picture_unknown.png
+++ b/InCallUI/res/drawable-xxhdpi/picture_unknown.png
Binary files differ
diff --git a/InCallUI/res/drawable/dialpad_background.xml b/InCallUI/res/drawable/dialpad_background.xml
deleted file mode 100644
index 0e31f5e..0000000
--- a/InCallUI/res/drawable/dialpad_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/dial_background_texture"
- android:tileMode="repeat" />
diff --git a/InCallUI/res/drawable/dialpad_background_opaque.xml b/InCallUI/res/drawable/dialpad_background_opaque.xml
deleted file mode 100644
index d8792f2..0000000
--- a/InCallUI/res/drawable/dialpad_background_opaque.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<!-- Opaque version of dialpad_background.xml. -->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
- <!-- An opaque black layer underneath. -->
- <item android:drawable="@android:color/black" />
-
- <!-- ...and the "dial_background_texture" tiled on top. -->
- <item>
- <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/dial_background_texture"
- android:tileMode="repeat" />
- </item>
-
-</layer-list>
diff --git a/InCallUI/res/layout/answer_fragment.xml b/InCallUI/res/layout/answer_fragment.xml
index 4f31e3f..ee2b076 100644
--- a/InCallUI/res/layout/answer_fragment.xml
+++ b/InCallUI/res/layout/answer_fragment.xml
@@ -24,6 +24,7 @@
android:layout_height="wrap_content"
android:focusable="true"
android:layout_centerHorizontal="true"
+ android:gravity="center"
android:background="@android:color/black"
android:visibility="gone"
diff --git a/InCallUI/res/layout/call_button_fragment.xml b/InCallUI/res/layout/call_button_fragment.xml
index 06de6d9..420d2aa 100644
--- a/InCallUI/res/layout/call_button_fragment.xml
+++ b/InCallUI/res/layout/call_button_fragment.xml
@@ -51,6 +51,7 @@
<ImageButton android:id="@+id/endButton"
style="@style/InCallEndButton"
android:layout_width="match_parent"
+ android:layout_marginTop="2dp"
android:src="@drawable/ic_in_call_phone_hangup"
android:background="@drawable/end_call_background"
android:contentDescription="@string/onscreenEndCallText"/>
@@ -65,6 +66,7 @@
android:layout_height="wrap_content"
android:paddingStart="@dimen/button_cluster_side_padding"
android:paddingEnd="@dimen/button_cluster_side_padding"
+ android:background="@color/button_background"
>
<!-- This row has either 4 or 5 buttons, depending on
diff --git a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
index c4fecf3..fe84010 100644
--- a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
+++ b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
@@ -60,7 +60,7 @@
android:paddingStart="5dip"
android:paddingEnd="5dip"
android:paddingBottom="10dip"
- android:background="@drawable/dialpad_background"
+ android:background="@color/dialpad_background"
android:layoutDirection="ltr">
<TableRow
diff --git a/InCallUI/res/layout/extra_button_row.xml b/InCallUI/res/layout/extra_button_row.xml
index a1600e8..ade3e4e 100644
--- a/InCallUI/res/layout/extra_button_row.xml
+++ b/InCallUI/res/layout/extra_button_row.xml
@@ -18,7 +18,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/dialpad_background_opaque">
+ android:background="@color/button_background">
<!-- The buttons here have a text label floating off to the side
(which is necessary because these buttons are used only in
a few rare states, and the meaning of the icon might not be
diff --git a/InCallUI/res/layout/primary_call_info.xml b/InCallUI/res/layout/primary_call_info.xml
index f67c04a..0d37a73 100644
--- a/InCallUI/res/layout/primary_call_info.xml
+++ b/InCallUI/res/layout/primary_call_info.xml
@@ -38,77 +38,81 @@
android:orientation="vertical">
<!-- "Call Banner" for primary call, the foregound or ringing call.
- The "call banner" is a block of info about a single call,
- including the contact name, phone number, call time counter,
- and other status info. This info is shown as a "banner"
- overlaid across the top of contact photo. -->
- <GridLayout android:id="@+id/primary_call_banner"
- style="@style/PrimaryCallInfoPrimaryCallBanner"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="@dimen/call_banner_height"
- android:background="@color/incall_call_banner_background"
- android:paddingStart="@dimen/call_banner_side_padding"
- android:paddingEnd="@dimen/call_banner_side_padding"
- android:paddingTop="@dimen/call_banner_top_bottom_padding"
- android:paddingBottom="@dimen/call_banner_top_bottom_padding">
+ The "call banner" is a block of info about a single call,
+ including the contact name, phone number, call time counter,
+ and other status info. This info is shown as a "banner"
+ overlaid across the top of contact photo. -->
+ <RelativeLayout android:id="@+id/primary_call_banner"
+ style="@style/PrimaryCallInfoPrimaryCallBanner"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/call_banner_height"
+ android:paddingStart="@dimen/call_banner_side_padding"
+ android:paddingEnd="@dimen/call_banner_side_padding"
+ android:paddingTop="@dimen/call_banner_top_bottom_padding"
+ android:paddingBottom="@dimen/call_banner_top_bottom_padding"
+ android:background="@color/incall_call_banner_background">
<!-- Name (or the phone number, if we don't have a name to display). -->
<TextView android:id="@+id/name"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/incall_call_banner_text_color"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:layout_column="0"
- android:layout_row="0"
- android:layout_columnSpan="2"
- android:layout_gravity="fill"/>
+ android:layout_alignParentTop="true"
+ android:layout_alignParentStart="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@dimen/call_banner_name_number_right_padding"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/incall_call_banner_text_color"
+ android:singleLine="true"
+ android:textAlignment="viewStart"/>
<!-- Label (like "Mobile" or "Work", if present) and phone number, side by side -->
- <TextView android:id="@+id/phoneNumber"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/incall_call_banner_text_color"
- android:singleLine="true"
- android:textDirection="ltr"
- android:layout_column="0"
- android:layout_row="1"
- android:layout_gravity="fill"/>
+ <LinearLayout android:id="@+id/labelAndNumber"
+ android:layout_below="@id/name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@dimen/call_banner_name_number_right_padding"
+ android:orientation="horizontal">
+ <TextView android:id="@+id/phoneNumber"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="@color/incall_call_banner_text_color"
+ android:singleLine="true"
+ android:textDirection="ltr" />
+ <TextView android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="@color/incall_call_banner_text_color"
+ android:textAllCaps="true"
+ android:singleLine="true"
+ android:layout_marginStart="6dp" />
+ </LinearLayout>
- <TextView android:id="@+id/label"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/incall_call_banner_text_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:paddingStart="6dp"
- android:layout_column="1"
- android:layout_row="1"
- android:layout_gravity="fill"/>
+ <!-- Elapsed time indication for a call in progress. -->
+ <TextView android:id="@+id/elapsedTime"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/incall_call_banner_text_color"
+ android:singleLine="true"
+ android:visibility="invisible" />
<!-- Call type indication: a special label and/or branding
for certain kinds of calls (like "Internet call" for a SIP call.) -->
<TextView android:id="@+id/callTypeLabel"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/incall_callTypeSip"
- android:maxLines="1"
- android:layout_column="0"
- android:layout_row="2"
- android:layout_columnSpan="2"
- android:ellipsize="end"
- android:layout_gravity="fill"/>
+ android:layout_below="@id/labelAndNumber"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="@color/incall_call_banner_text_color"
+ android:maxLines="1"
+ android:ellipsize="end" />
- <!-- Elapsed time indication for a call in progress. -->
- <TextView android:id="@+id/elapsedTime"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/incall_call_banner_text_color"
- android:singleLine="true"
- android:visibility="invisible"
- android:layout_column="2"
- android:layout_row="0"
- android:layout_rowSpan="3"
- android:layout_gravity="fill"
- android:gravity="end|center_vertical"/>
- </GridLayout>
- <!-- End of call_banner -->
+ </RelativeLayout> <!-- End of call_banner -->
+
<LinearLayout android:id="@+id/supplementary_info_container"
style="@style/PrimaryCallInfoSupplementaryInfoContainer"
diff --git a/InCallUI/res/layout/secondary_call_info.xml b/InCallUI/res/layout/secondary_call_info.xml
index 97bc0bf..787dc59 100644
--- a/InCallUI/res/layout/secondary_call_info.xml
+++ b/InCallUI/res/layout/secondary_call_info.xml
@@ -43,18 +43,19 @@
android:layout_width="match_parent"
android:layout_height="@dimen/call_banner_height"
android:paddingStart="@dimen/call_banner_side_padding"
- android:paddingEnd="@dimen/call_banner_side_padding"
+ android:paddingEnd="@dimen/secondary_call_banner_right_padding"
android:paddingTop="@dimen/call_banner_top_bottom_padding"
android:paddingBottom="@dimen/call_banner_top_bottom_padding"
android:background="@color/incall_call_banner_background">
<!-- Name (or the phone number, if we don't have a name to display). -->
<TextView android:id="@+id/secondaryCallName"
style="@style/SecondaryCallInfoSecondaryCallName"
- android:layout_gravity="top|start"
+ android:layout_gravity="bottom|start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/incall_call_banner_text_color"
+ android:ellipsize="marquee"
android:singleLine="true"/>
</FrameLayout>
@@ -63,7 +64,7 @@
style="@style/SecondaryCallInfoSecondaryCallStatus"
android:layout_width="wrap_content"
android:layout_height="@dimen/call_banner_height"
- android:gravity="top|end"
+ android:gravity="bottom|end"
android:layout_gravity="end"
android:paddingStart="@dimen/call_banner_side_padding"
android:paddingEnd="@dimen/call_banner_side_padding"
diff --git a/InCallUI/res/values-af/strings.xml b/InCallUI/res/values-af/strings.xml
index 4cf802b..3a423c8 100644
--- a/InCallUI/res/values-af/strings.xml
+++ b/InCallUI/res/values-af/strings.xml
@@ -589,6 +589,10 @@
<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>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Skryf jou eie..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Vinnige antwoorde"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Redigeer vinnige antwoorde"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-am/strings.xml b/InCallUI/res/values-am/strings.xml
index 236feb5..9c63e82 100644
--- a/InCallUI/res/values-am/strings.xml
+++ b/InCallUI/res/values-am/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"የእራስዎን ይጻፉ..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-ar/strings.xml b/InCallUI/res/values-ar/strings.xml
index 3627fcd..b69714b 100644
--- a/InCallUI/res/values-ar/strings.xml
+++ b/InCallUI/res/values-ar/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"اكتب ردك..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-be/strings.xml b/InCallUI/res/values-be/strings.xml
index b1e691c..d41b780 100644
--- a/InCallUI/res/values-be/strings.xml
+++ b/InCallUI/res/values-be/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Напiшыце сваё..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-bg/strings.xml b/InCallUI/res/values-bg/strings.xml
index 49116b5..3477f92 100644
--- a/InCallUI/res/values-bg/strings.xml
+++ b/InCallUI/res/values-bg/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Напишете свой собствен..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-ca/strings.xml b/InCallUI/res/values-ca/strings.xml
index f7a3c38..638fb32 100644
--- a/InCallUI/res/values-ca/strings.xml
+++ b/InCallUI/res/values-ca/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Et truco més tard."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ara no puc parlar. Truques després?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Escriu la teva…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Respostes ràpides"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Edita les respostes ràpides"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-cs/strings.xml b/InCallUI/res/values-cs/strings.xml
index 85f4f42..2fe3141 100644
--- a/InCallUI/res/values-cs/strings.xml
+++ b/InCallUI/res/values-cs/strings.xml
@@ -585,6 +585,10 @@
<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, volejte jindy."</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Napsat vlastní odpověď..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-da/strings.xml b/InCallUI/res/values-da/strings.xml
index abba97d..a12972a 100644
--- a/InCallUI/res/values-da/strings.xml
+++ b/InCallUI/res/values-da/strings.xml
@@ -68,7 +68,7 @@
<string name="labelCDMAMore" msgid="1630676740428229339">"Indstillinger for CDMA-opkald"</string>
<string name="apn_settings" msgid="9043423184895642077">"Navn på adgangspunkt"</string>
<string name="settings_label" msgid="3876743539816984008">"Indstillinger for netværk"</string>
- <string name="voicemail" msgid="8693759337917898954">"Voicemail"</string>
+ <string name="voicemail" msgid="8693759337917898954">"Telefonsvarer"</string>
<string name="voicemail_abbreviated" msgid="2215592488517217448">"VM:"</string>
<string name="networks" msgid="8873030692174541976">"Netværksudbydere"</string>
<string name="call_settings" msgid="6112441768261754562">"Indstillinger for opkald"</string>
@@ -131,7 +131,7 @@
<string name="fw_change_failed" msgid="5298103228470214665">"Telefonsvarernummeret kunne ikke ændres.\nKontakt dit mobilselskab, hvis problemet vedbliver."</string>
<string name="fw_get_in_vm_failed" msgid="8862896836093833973">"De aktuelle indstillinger til viderestillingsnummer kunne ikke hentes og gemmes.\nVil du skifte til den nye udbyder alligevel?"</string>
<string name="no_change" msgid="3186040086622435212">"Der blev ikke foretaget nogen ændringer."</string>
- <string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Vælg voicemail-tjeneste"</string>
+ <string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Vælg telefonsvarertjeneste"</string>
<string name="voicemail_default" msgid="5902099213882352338">"Min udbyder"</string>
<string name="mobile_networks" msgid="5540397602919106177">"Indstillinger for mobilnetværk"</string>
<string name="label_available" msgid="1181658289009300430">"Tilgængelige netværk"</string>
@@ -407,8 +407,8 @@
<string name="notification_ongoing_call" msgid="7068688957273482989">"Igangværende opkald"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Ventende"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Indgående opkald"</string>
- <string name="notification_voicemail_title" msgid="8933468752045550523">"Ny voicemail"</string>
- <string name="notification_voicemail_title_count" msgid="4366360747660929916">"Ny voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
+ <string name="notification_voicemail_title" msgid="8933468752045550523">"Ny telefonsvarerbesked"</string>
+ <string name="notification_voicemail_title_count" msgid="4366360747660929916">"Nye telefonsvarerbeskeder (<xliff:g id="COUNT">%d</xliff:g>)"</string>
<string name="notification_voicemail_text_format" msgid="4447323569453981685">"Ring til <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
<string name="notification_voicemail_no_vm_number" msgid="760963466895609716">"Voicemailnummeret er ukendt"</string>
<string name="notification_network_selection_title" msgid="4224455487793492772">"Ingen dækning"</string>
@@ -591,6 +591,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Jeg ringer til dig senere."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kan ikke tale nu. Ringer du senere?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Skriv dit eget..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Hurtige svar"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Rediger hurtige svar"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-de/strings.xml b/InCallUI/res/values-de/strings.xml
index c3776aa..ece9de5 100644
--- a/InCallUI/res/values-de/strings.xml
+++ b/InCallUI/res/values-de/strings.xml
@@ -589,6 +589,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ich rufe später zurück."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kann jetzt nicht sprechen. Später?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Eigene Antwort schreiben..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Kurzantworten"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Kurzantworten bearbeiten"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-el/strings.xml b/InCallUI/res/values-el/strings.xml
index ed22979..127702a 100644
--- a/InCallUI/res/values-el/strings.xml
+++ b/InCallUI/res/values-el/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Συντάξτε τη δική σας…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-en-rGB/strings.xml b/InCallUI/res/values-en-rGB/strings.xml
index 55abb56..1b0de27 100644
--- a/InCallUI/res/values-en-rGB/strings.xml
+++ b/InCallUI/res/values-en-rGB/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"I\'ll call you later."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Can\'t talk now. Call me later?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Write your own..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Quick responses"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Edit quick responses"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-en-rIN/strings.xml b/InCallUI/res/values-en-rIN/strings.xml
index 55abb56..1b0de27 100644
--- a/InCallUI/res/values-en-rIN/strings.xml
+++ b/InCallUI/res/values-en-rIN/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"I\'ll call you later."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Can\'t talk now. Call me later?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Write your own..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Quick responses"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Edit quick responses"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-es-rUS/strings.xml b/InCallUI/res/values-es-rUS/strings.xml
index b3c162f..4bf82cf 100644
--- a/InCallUI/res/values-es-rUS/strings.xml
+++ b/InCallUI/res/values-es-rUS/strings.xml
@@ -86,7 +86,7 @@
<string name="sum_cw_enabled" msgid="8083061901633671397">"Durante una llamada, notificarme sobre las llamadas entrantes"</string>
<string name="sum_cw_disabled" msgid="3648693907300104575">"Durante una llamada, notificarme sobre las llamadas entrantes"</string>
<string name="call_forwarding_settings" msgid="3378927671091537173">"Configuración de reenvío de llamadas"</string>
- <string name="labelCF" msgid="2574386948026924737">"Reenvío de llamada"</string>
+ <string name="labelCF" msgid="2574386948026924737">"Desvío de llamadas"</string>
<string name="labelCFU" msgid="8147177368148660600">"Reenviar siempre"</string>
<string name="messageCFU" msgid="3560082430662923687">"Usar siempre este número"</string>
<string name="sum_cfu_enabled_indicator" msgid="4014187342724130197">"Reenviar todas las llamadas"</string>
@@ -369,7 +369,7 @@
<string name="pin_changed" msgid="4365538014588501049">"El PIN de la tarjeta SIM se modificó correctamente."</string>
<string name="puk_requested" msgid="3898394204193202803">"Contraseña incorrecta. La tarjeta SIM está bloqueada. Se solicitó PUK2."</string>
<string name="enter_pin2_text" msgid="8339444124477720345">"PIN2"</string>
- <string name="oldPin2Label" msgid="8559146795026261502">"Reenviar cuando está ocupado"</string>
+ <string name="oldPin2Label" msgid="8559146795026261502">"PIN2 viejo"</string>
<string name="newPin2Label" msgid="4573956902204349054">"PIN2 nuevo"</string>
<string name="confirmPin2Label" msgid="8100319484454787708">"Confirmar PIN2 nuevo"</string>
<string name="badPuk2" msgid="4851734468010000418">"El PUK2 que ingresaste es incorrecto. Vuelve a intentarlo."</string>
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Te llamo más tarde."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"No puedo hablar ahora. ¿Me llamas más tarde?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Escribe tu propia respuesta..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-es/strings.xml b/InCallUI/res/values-es/strings.xml
index 381d577..66577a9 100644
--- a/InCallUI/res/values-es/strings.xml
+++ b/InCallUI/res/values-es/strings.xml
@@ -589,6 +589,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Te llamo más tarde."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"No puedo hablar. Llámame luego."</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Escribe tu propia respuesta..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-et-rEE/strings.xml b/InCallUI/res/values-et-rEE/strings.xml
index 8c44da7..4f03b6d 100644
--- a/InCallUI/res/values-et-rEE/strings.xml
+++ b/InCallUI/res/values-et-rEE/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Helistan sulle hiljem."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ei saa rääkida. Helistad hiljem?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Kirjutage ise …"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Kiirvastused"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Kiirvastuste muutmine"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-fa/strings.xml b/InCallUI/res/values-fa/strings.xml
index f80f6eb..71d6c84 100644
--- a/InCallUI/res/values-fa/strings.xml
+++ b/InCallUI/res/values-fa/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"نوشتن پاسخ خود…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-fi/strings.xml b/InCallUI/res/values-fi/strings.xml
index d900183..dfa12b1 100644
--- a/InCallUI/res/values-fi/strings.xml
+++ b/InCallUI/res/values-fi/strings.xml
@@ -589,6 +589,10 @@
<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 puhua nyt. Soita myöhemmin?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Kirjoita oma…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Pikavastaukset"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Muokkaa pikavastausta"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-fr-rCA/strings.xml b/InCallUI/res/values-fr-rCA/strings.xml
index 79c41c9..e18ec6d 100644
--- a/InCallUI/res/values-fr-rCA/strings.xml
+++ b/InCallUI/res/values-fr-rCA/strings.xml
@@ -589,6 +589,10 @@
<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_custom_message" msgid="6158880869935281078">"Réponse personnalisée..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"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>
diff --git a/InCallUI/res/values-fr/strings.xml b/InCallUI/res/values-fr/strings.xml
index b3dd8c8..06c1320 100644
--- a/InCallUI/res/values-fr/strings.xml
+++ b/InCallUI/res/values-fr/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Réponse personnalisée..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Réponses rapides"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Modifier les réponses rapides"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-hi/strings.xml b/InCallUI/res/values-hi/strings.xml
index 110a201..48fefe4 100644
--- a/InCallUI/res/values-hi/strings.xml
+++ b/InCallUI/res/values-hi/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"अपना स्वयं का लिखें..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-hr/strings.xml b/InCallUI/res/values-hr/strings.xml
index 6ee1cbe..d87d49e 100644
--- a/InCallUI/res/values-hr/strings.xml
+++ b/InCallUI/res/values-hr/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Zvat ću vas kasnije."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Sada ne mogu razgovarati. Nazovite me kasnije?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Napišite odgovor..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Brzi odgovori"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Uređivanje brzih odgovora"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-hu/strings.xml b/InCallUI/res/values-hu/strings.xml
index 07790e2..79e9c92 100644
--- a/InCallUI/res/values-hu/strings.xml
+++ b/InCallUI/res/values-hu/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Saját válasz írása..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-hy-rAM/strings.xml b/InCallUI/res/values-hy-rAM/strings.xml
index 8cae8d9..172bd83 100644
--- a/InCallUI/res/values-hy-rAM/strings.xml
+++ b/InCallUI/res/values-hy-rAM/strings.xml
@@ -581,7 +581,7 @@
<string name="no_internet_available_title" msgid="3327109242858406165">"Ինտերնետ կապ չկա"</string>
<string name="no_wifi_available_title" msgid="747881033089378758">"Wi-Fi կապ չկա"</string>
<string name="no_internet_available" msgid="7877142631803238549">"Ինտերնետային զանգի կատարման համար նախ ստուգեք ձեր ինտերնետ կապը:"</string>
- <string name="no_wifi_available" msgid="1225073547318465713">"Ինտերնետային զանգերի համար դուք պետք է միացված լինեք Wi-Fi ցանցին (օգտագործեք Անլար & Ցանցային կարգավորումները):"</string>
+ <string name="no_wifi_available" msgid="1225073547318465713">"Ինտերնետային զանգերի համար դուք պետք է միացված լինեք Wi-Fi ցանցին (օգտագործեք Անլար կապ և Ցանցեր կարգավորումները):"</string>
<string name="no_voip" msgid="8901474054537199865">"Ինտերնետային զանգերը չեն սպասարկվում"</string>
<string name="sip_system_decide" msgid="368030746310423471">"Ավտոմատ"</string>
<string name="sip_always_send_keepalive" msgid="8192080724632877132">"Միշտ ուղարկել"</string>
@@ -591,6 +591,10 @@
<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_custom_message" msgid="6158880869935281078">"Գրեք ձեր սեփականը..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-in/strings.xml b/InCallUI/res/values-in/strings.xml
index c87bee3..0136b35 100644
--- a/InCallUI/res/values-in/strings.xml
+++ b/InCallUI/res/values-in/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Nanti saya telepon balik."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Tak bisa bicara skrg. Tlp lg nanti?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Tulis respons Anda sendiri…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Tanggapan cepat"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Edit tanggapan cepat"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-it/strings.xml b/InCallUI/res/values-it/strings.xml
index 5e2b144..85875b6 100644
--- a/InCallUI/res/values-it/strings.xml
+++ b/InCallUI/res/values-it/strings.xml
@@ -589,6 +589,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ti chiamo dopo."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Non posso parlare ora. Mi chiami dopo?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Scrivi risposta personale..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Risposte rapide"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Modifica risposte rapide"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-iw/strings.xml b/InCallUI/res/values-iw/strings.xml
index 89060a8..c55a1c1 100644
--- a/InCallUI/res/values-iw/strings.xml
+++ b/InCallUI/res/values-iw/strings.xml
@@ -115,7 +115,7 @@
<string name="reverting_settings" msgid="4752151682666912828">"מאחזר הגדרות הקודמות…"</string>
<string name="response_error" msgid="6674110501330139405">"תגובה לא צפויה מהרשת."</string>
<string name="exception_error" msgid="7027667130619518211">"שגיאת רשת או שגיאה של כרטיס SIM."</string>
- <string name="fdn_check_failure" msgid="18200614306525434">"הגדרת מספרי החיוג הקבועים של יישום הטלפון שלך מופעלת. כתוצאה מכך, חלק מהתכונות הקשורות לשיחות לא פועלות."</string>
+ <string name="fdn_check_failure" msgid="18200614306525434">"הגדרת מספרי החיוג הקבועים של אפליקציית הטלפון שלך מופעלת. כתוצאה מכך, חלק מהתכונות הקשורות לשיחות לא פועלות."</string>
<string name="radio_off_error" msgid="2304459933248513376">"הפעל את הרדיו לפני ההצגה של הגדרות אלה."</string>
<string name="close_dialog" msgid="2365884406356986917">"אישור"</string>
<string name="enable" msgid="1059008390636773574">"הפעל"</string>
@@ -487,8 +487,8 @@
<item quantity="other" msgid="3122217344579273583">"אין חיבור נתונים במשך <xliff:g id="COUNT">%s</xliff:g> דקות"</item>
</plurals>
<plurals name="alert_dialog_exit_ecm">
- <item quantity="one" msgid="8060210887681426682">"הטלפון יהיה במצב התקשרות חזרה בחירום למשך דקה <xliff:g id="COUNT">%s</xliff:g>. במצב זה לא ניתן להשתמש ביישומים המשתמשים בחיבור נתונים. האם אתה רוצה לצאת כעת?"</item>
- <item quantity="other" msgid="8617116564023933114">"הטלפון יהיה במצב התקשרות חזרה בחירום למשך <xliff:g id="COUNT">%s</xliff:g> דקות. במצב זה לא ניתן להשתמש ביישומים המשתמשים בחיבור נתונים. האם אתה רוצה לצאת כעת?"</item>
+ <item quantity="one" msgid="8060210887681426682">"הטלפון יהיה במצב התקשרות חזרה בחירום למשך דקה <xliff:g id="COUNT">%s</xliff:g>. במצב זה לא ניתן להשתמש באפליקציות המשתמשות בחיבור נתונים. האם אתה רוצה לצאת כעת?"</item>
+ <item quantity="other" msgid="8617116564023933114">"הטלפון יהיה במצב התקשרות חזרה בחירום למשך <xliff:g id="COUNT">%s</xliff:g> דקות. במצב זה לא ניתן להשתמש באפליקציות המשתמשים בחיבור נתונים. האם אתה רוצה לצאת כעת?"</item>
</plurals>
<plurals name="alert_dialog_not_avaialble_in_ecm">
<item quantity="one" msgid="2585506997024726599">"הפעולה שנבחרה אינה זמינה במצב התקשרות חזרה בחירום. הטלפון יהיה במצב זה במשך <xliff:g id="COUNT">%s</xliff:g> דקות. האם אתה רוצה לצאת כעת?"</item>
@@ -549,7 +549,7 @@
<string name="registration_status_failed_try_later" msgid="5214474354451220581">"הרשמת החשבון נכשלה: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); יתבצע ניסיון חוזר מאוחר יותר"</string>
<string name="registration_status_invalid_credentials" msgid="4908446367559341757">"רישום החשבון נכשל: שם המשתמש או הסיסמה שגויים."</string>
<string name="registration_status_server_unreachable" msgid="5733421582468991276">"רישום החשבון נכשל: בדוק את שם השרת."</string>
- <string name="third_party_account_summary" msgid="2532526738862533028">"היישום <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> משתמש כרגע בחשבון זה."</string>
+ <string name="third_party_account_summary" msgid="2532526738862533028">"האפליקציה <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> משתמש כרגע בחשבון זה."</string>
<string name="sip_edit_title" msgid="489288416435014385">"פרטי חשבון SIP"</string>
<string name="sip_edit_new_title" msgid="3659149255856520385">"פרטי חשבון SIP"</string>
<string name="domain_address_title" msgid="9071787581316160480">"שרת"</string>
@@ -585,11 +585,15 @@
<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_custom_message" msgid="6158880869935281078">"כתוב אחת משלך..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"תגובות מהירות"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ערוך תגובות מהירות"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"תגובה מהירה"</string>
- <string name="respond_via_sms_menu_reset_default_activity" msgid="1461742052902053466">"אפס את היישום המוגדר כברירת מחדל"</string>
+ <string name="respond_via_sms_menu_reset_default_activity" msgid="1461742052902053466">"אפס את האפליקציה המוגדר כברירת מחדל"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"הודעה נשלחה אל <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="description_image_button_one" msgid="5502718871331943463">"אחת"</string>
<string name="description_image_button_two" msgid="4903738528222924522">"שתיים"</string>
diff --git a/InCallUI/res/values-ja/strings.xml b/InCallUI/res/values-ja/strings.xml
index 9e16a39..a7db5d6 100644
--- a/InCallUI/res/values-ja/strings.xml
+++ b/InCallUI/res/values-ja/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"カスタム返信を作成..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-ka-rGE/strings.xml b/InCallUI/res/values-ka-rGE/strings.xml
index a049ba6..658180d 100644
--- a/InCallUI/res/values-ka-rGE/strings.xml
+++ b/InCallUI/res/values-ka-rGE/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"ჩაწერეთ საკუთარი..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-km-rKH/strings.xml b/InCallUI/res/values-km-rKH/strings.xml
index cea0a6c..39b4ea2 100644
--- a/InCallUI/res/values-km-rKH/strings.xml
+++ b/InCallUI/res/values-km-rKH/strings.xml
@@ -350,7 +350,7 @@
<string name="simContacts_emptyLoading" msgid="2203331234764498011">"កំពុងអានពីស៊ីមកាត…"</string>
<string name="simContacts_empty" msgid="5270660846489561932">"គ្មានទំនាក់ទំនងនៅលើស៊ីមកាតរបស់អ្នកទេ។"</string>
<string name="simContacts_title" msgid="1861472842524839921">"ជ្រើសទំនាក់ទំនងដើម្បីនាំចូល"</string>
- <string name="simContacts_airplaneMode" msgid="1846161429087789936">"ដើម្បីនាំចូលទំនាក់ទំនងពីស៊ីមកាត ដំបូងបិទរបៀបពេលជិះយន្តហោះ។"</string>
+ <string name="simContacts_airplaneMode" msgid="1846161429087789936">"ដើម្បីនាំចូលទំនាក់ទំនងពីស៊ីមកាត ដំបូងត្រូវបិទរបៀបពេលជិះយន្តហោះ។"</string>
<string name="enable_pin" msgid="5422767284133234860">"បិទ/បើកកូដ PIN ស៊ីមកាត"</string>
<string name="change_pin" msgid="9174186126330785343">"ប្ដូរកូដ PIN ស៊ីមកាត"</string>
<string name="enter_pin_text" msgid="8532615714751931951">"កូដ PIN ស៊ីមកាត៖"</string>
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"សរសេរផ្ទាល់ខ្លួនរបស់អ្នក"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-ko/strings.xml b/InCallUI/res/values-ko/strings.xml
index 3eb6214..cc795b8 100644
--- a/InCallUI/res/values-ko/strings.xml
+++ b/InCallUI/res/values-ko/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"나만의 응답 작성…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-lo-rLA/strings.xml b/InCallUI/res/values-lo-rLA/strings.xml
index 4cd2961..b09ab35 100644
--- a/InCallUI/res/values-lo-rLA/strings.xml
+++ b/InCallUI/res/values-lo-rLA/strings.xml
@@ -66,7 +66,7 @@
<string name="unlock_success" msgid="6770085622238180152">"ການປົດລັອກເຄືອຂ່າຍບໍ່ສຳເລັດ."</string>
<string name="labelGSMMore" msgid="5930842194056092106">"ການຕັ້ງຄ່າການໂທ GSM"</string>
<string name="labelCDMAMore" msgid="1630676740428229339">"ການຕັ້ງຄ່າໂທ CDMA"</string>
- <string name="apn_settings" msgid="9043423184895642077">"ຊື່ຂອງຈຸດການເຂົ້າເຖິງ"</string>
+ <string name="apn_settings" msgid="9043423184895642077">"ຊື່ຂອງຈຸດການເຂົ້າເຖິງ (APN)"</string>
<string name="settings_label" msgid="3876743539816984008">"ການຕັ້ງຄ່າເຄືອຂ່າຍ"</string>
<string name="voicemail" msgid="8693759337917898954">"ຂໍ້ຄວາມສຽງ"</string>
<string name="voicemail_abbreviated" msgid="2215592488517217448">"VM:"</string>
@@ -180,7 +180,7 @@
<item msgid="1524224863879435516">"GSM ເທົ່ານັ້ນ"</item>
<item msgid="3817924849415716259">"ຕ້ອງການ GSM/WCDMA"</item>
</string-array>
- <string name="data_enabled" msgid="5972538663568715366">"ເປີດໃຊ້ຂໍ້ມູນແລ້ວ"</string>
+ <string name="data_enabled" msgid="5972538663568715366">"ເປີດໃຊ້ເດຕາ"</string>
<string name="data_enable_summary" msgid="5022018967714633874">"ເປີດໃຊ້ການເຂົ້າເຖິງຂໍ້ມູນຜ່ານເຄືອຂ່າຍມືຖື"</string>
<string name="roaming" msgid="8871412572928323707">"ການໂຣມມິງຂໍ້ມູນ"</string>
<string name="roaming_enable" msgid="7331106985174381987">"ເຊື່ອມຕໍ່ບໍລິການຂໍ້ມູນເມື່ອໂຣມມິງ"</string>
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"ຂຽນຂໍ້ຄວາມຂອງທ່ານເອງ..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-lt/strings.xml b/InCallUI/res/values-lt/strings.xml
index eaee183..d73194b 100644
--- a/InCallUI/res/values-lt/strings.xml
+++ b/InCallUI/res/values-lt/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Paskambinsiu vėliau."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Dabar negaliu kalb. Pask. vėliau."</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Sukurkite patys..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Greiti atsakai"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Redaguoti greitus atsakus"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-lv/strings.xml b/InCallUI/res/values-lv/strings.xml
index cd36e8a..9e316ac 100644
--- a/InCallUI/res/values-lv/strings.xml
+++ b/InCallUI/res/values-lv/strings.xml
@@ -587,6 +587,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Piezvanīšu vēlāk."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nevaru runāt. Vai piezvanīsi vēlāk?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Rakstīt savu…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Ātrās atbildes"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Ātro atbilžu rediģēšana"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-mn-rMN/strings.xml b/InCallUI/res/values-mn-rMN/strings.xml
index a3b4a75..26f3eeb 100644
--- a/InCallUI/res/values-mn-rMN/strings.xml
+++ b/InCallUI/res/values-mn-rMN/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Өөрийн гэснийг бичээрэй..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-ms-rMY/strings.xml b/InCallUI/res/values-ms-rMY/strings.xml
index ba61a2c..2813fb3 100644
--- a/InCallUI/res/values-ms-rMY/strings.xml
+++ b/InCallUI/res/values-ms-rMY/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Saya akan hubungi awak kemudian."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Tdk blh berckp skg. Tel saya nanti?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Tulis sendiri…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Respons pantas"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Edit respons pantas"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-nb/strings.xml b/InCallUI/res/values-nb/strings.xml
index 2a574fc..f7f7be0 100644
--- a/InCallUI/res/values-nb/strings.xml
+++ b/InCallUI/res/values-nb/strings.xml
@@ -591,6 +591,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Jeg ringer deg senere."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ikke nå. Ringer du meg senere?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Skriv ditt eget"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Hurtigsvar"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Rediger hurtigsvar"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-nl/strings.xml b/InCallUI/res/values-nl/strings.xml
index e8d0efa..8e557f7 100644
--- a/InCallUI/res/values-nl/strings.xml
+++ b/InCallUI/res/values-nl/strings.xml
@@ -585,6 +585,10 @@
<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 me later."</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Eigen reactie opstellen..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-pl/strings.xml b/InCallUI/res/values-pl/strings.xml
index 461439f..b0da245 100644
--- a/InCallUI/res/values-pl/strings.xml
+++ b/InCallUI/res/values-pl/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Zadzwonię do Ciebie później."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nie mogę rozmawiać. Zadzwonisz później?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Napisz własną..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Szybkie odpowiedzi"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Edytuj szybkie odpowiedzi"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-pt-rPT/strings.xml b/InCallUI/res/values-pt-rPT/strings.xml
index e183fa9..9ac0ac6 100644
--- a/InCallUI/res/values-pt-rPT/strings.xml
+++ b/InCallUI/res/values-pt-rPT/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Telefono-lhe mais tarde."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Pode telefonar-me mais tarde?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Escrever a sua própria..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Respostas rápidas"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Editar respostas rápidas"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-pt/strings.xml b/InCallUI/res/values-pt/strings.xml
index 01e88c3..09057a4 100644
--- a/InCallUI/res/values-pt/strings.xml
+++ b/InCallUI/res/values-pt/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Eu te ligo mais tarde."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Não posso falar agora. Liga depois, por favor?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Escreva sua resposta..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Respostas rápidas"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Editar respostas rápidas"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-ro/strings.xml b/InCallUI/res/values-ro/strings.xml
index d2acb06..0fb3911 100644
--- a/InCallUI/res/values-ro/strings.xml
+++ b/InCallUI/res/values-ro/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Scrieți propriul răspuns…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-ru/strings.xml b/InCallUI/res/values-ru/strings.xml
index 6594d42..7897e54 100644
--- a/InCallUI/res/values-ru/strings.xml
+++ b/InCallUI/res/values-ru/strings.xml
@@ -587,6 +587,10 @@
<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_custom_message" msgid="6158880869935281078">"Ваш ответ…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-sk/strings.xml b/InCallUI/res/values-sk/strings.xml
index c8f8b90..27a994f 100644
--- a/InCallUI/res/values-sk/strings.xml
+++ b/InCallUI/res/values-sk/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Zavolám neskôr."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Teraz nemôžem, zavolajte inokedy."</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Napísať vlastnú..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Rýchle odpovede"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Upraviť rýchle odpovede"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-sl/strings.xml b/InCallUI/res/values-sl/strings.xml
index 8aec816..7079213 100644
--- a/InCallUI/res/values-sl/strings.xml
+++ b/InCallUI/res/values-sl/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Napišite svoje besedilo …"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-sr/strings.xml b/InCallUI/res/values-sr/strings.xml
index 1edd80c..67b4677 100644
--- a/InCallUI/res/values-sr/strings.xml
+++ b/InCallUI/res/values-sr/strings.xml
@@ -129,7 +129,7 @@
<string name="vm_changed" msgid="380744030726254139">"Промењен је број говорне поште."</string>
<string name="vm_change_failed" msgid="3352934863246208918">"Није могуће променити број говорне поште.\nКонтактирајте мобилног оператера ако се овај проблем настави."</string>
<string name="fw_change_failed" msgid="5298103228470214665">"Није могуће променити број за преусмеравање.\nКонтактирајте мобилног оператера ако се овај проблем настави."</string>
- <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"Није било могуће преузети и сачувати тренутна подешавања броја за прослеђивање.\nЖелите ли да ипак пређете на новог добављача?"</string>
+ <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"Није могуће преузети и сачувати тренутна подешавања броја за прослеђивање.\nЖелите ли да ипак пређете на новог добављача?"</string>
<string name="no_change" msgid="3186040086622435212">"Нису начињене промене."</string>
<string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Одаберите услугу говорне поште"</string>
<string name="voicemail_default" msgid="5902099213882352338">" Мој мобилни оператер"</string>
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Напишите сами…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-sv/strings.xml b/InCallUI/res/values-sv/strings.xml
index 3539477..1910e1e 100644
--- a/InCallUI/res/values-sv/strings.xml
+++ b/InCallUI/res/values-sv/strings.xml
@@ -591,6 +591,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Jag ringer dig senare."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kan inte prata nu. Ring senare!"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Skriv ett eget svar ..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Snabbsvar"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Redigera snabbsvar"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-sw/strings.xml b/InCallUI/res/values-sw/strings.xml
index 392bace..931c08d 100644
--- a/InCallUI/res/values-sw/strings.xml
+++ b/InCallUI/res/values-sw/strings.xml
@@ -48,7 +48,7 @@
<string name="audio_mode_earpiece" msgid="4156527186373869107">"Kipaza sauti cha kichwani"</string>
<string name="audio_mode_wired_headset" msgid="1465350758489175975">"Viskizi vya maskio pasiwaya"</string>
<string name="audio_mode_bluetooth" msgid="3047641300848211128">"Bluetooth"</string>
- <string name="wait_prompt_str" msgid="7601815427707856238">"Tuma toni zinazofuata? \n"</string>
+ <string name="wait_prompt_str" msgid="7601815427707856238">"Ungependa kutuma toni zifuatazo? \n"</string>
<string name="pause_prompt_str" msgid="1789964702154314806">"Inatuma toni\n"</string>
<string name="send_button" msgid="4106860097497818751">"Tuma"</string>
<string name="pause_prompt_yes" msgid="3564467212025151797">"Ndiyo"</string>
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Andika yako binafsi..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Majibu ya haraka"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Hariri majibu ya haraka"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-th/strings.xml b/InCallUI/res/values-th/strings.xml
index 7f902f2..fc8e9bf 100644
--- a/InCallUI/res/values-th/strings.xml
+++ b/InCallUI/res/values-th/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"เขียนคำตอบของคุณเอง..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-tl/strings.xml b/InCallUI/res/values-tl/strings.xml
index fc74466..b03f75b 100644
--- a/InCallUI/res/values-tl/strings.xml
+++ b/InCallUI/res/values-tl/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Sumulat ng sarili mong tugon…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Mga mabilisang tugon"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"I-edit ang mga mabilisang tugon"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-tr/strings.xml b/InCallUI/res/values-tr/strings.xml
index 5f0398f..da790d2 100644
--- a/InCallUI/res/values-tr/strings.xml
+++ b/InCallUI/res/values-tr/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Seni daha sonra ararım."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Şimdi konuşamam. Daha sonra arar mısın?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Kendi yanıtınızı oluşturun…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Hızlı yanıtlar"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Hızlı yanıtları düzenle"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-uk/strings.xml b/InCallUI/res/values-uk/strings.xml
index 596df5d..9b00439 100644
--- a/InCallUI/res/values-uk/strings.xml
+++ b/InCallUI/res/values-uk/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"Напишіть власну відповідь..."</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-vi/strings.xml b/InCallUI/res/values-vi/strings.xml
index 656bf09..ce6b8af 100644
--- a/InCallUI/res/values-vi/strings.xml
+++ b/InCallUI/res/values-vi/strings.xml
@@ -585,6 +585,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Tôi sẽ gọi lại sau."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Giờ tôi ko thể nói chuyện. Gọi sau nhé?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Viết trả lời của riêng bạn…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Trả lời nhanh"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Chỉnh sửa trả lời nhanh"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values-zh-rCN/strings.xml b/InCallUI/res/values-zh-rCN/strings.xml
index 5b8a938..674e7ad 100644
--- a/InCallUI/res/values-zh-rCN/strings.xml
+++ b/InCallUI/res/values-zh-rCN/strings.xml
@@ -585,6 +585,10 @@
<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_custom_message" msgid="6158880869935281078">"自行撰写回复…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-zh-rHK/strings.xml b/InCallUI/res/values-zh-rHK/strings.xml
index b353680..de26ecc 100644
--- a/InCallUI/res/values-zh-rHK/strings.xml
+++ b/InCallUI/res/values-zh-rHK/strings.xml
@@ -591,6 +591,10 @@
<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_custom_message" msgid="6158880869935281078">"自行撰寫回覆…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-zh-rTW/strings.xml b/InCallUI/res/values-zh-rTW/strings.xml
index 6940a3a..702d0ef 100644
--- a/InCallUI/res/values-zh-rTW/strings.xml
+++ b/InCallUI/res/values-zh-rTW/strings.xml
@@ -591,6 +591,10 @@
<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_custom_message" msgid="6158880869935281078">"自行撰寫回應…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<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>
diff --git a/InCallUI/res/values-zu/strings.xml b/InCallUI/res/values-zu/strings.xml
index e204e89..2959d4e 100644
--- a/InCallUI/res/values-zu/strings.xml
+++ b/InCallUI/res/values-zu/strings.xml
@@ -589,6 +589,10 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ngizokushayela ucingo emva kwesikhathi"</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Angikwazi ukukhuluma okwamanje. Ngicela uphinde ungishayele ucingo kamuva?"</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Bhala okwakho…"</string>
+ <!-- no translation found for custom_message_cancel (7516406059429609296) -->
+ <skip />
+ <!-- no translation found for custom_message_send (5795754217085747742) -->
+ <skip />
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Izimpendulo ezisheshayo"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Hlela izimpendulo ezisheshayo"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
diff --git a/InCallUI/res/values/colors.xml b/InCallUI/res/values/colors.xml
index 9d149a4..6080e91 100644
--- a/InCallUI/res/values/colors.xml
+++ b/InCallUI/res/values/colors.xml
@@ -42,5 +42,11 @@
<drawable name="end_call_pressed_state">#ff4e4e</drawable>
<!-- Used when the End Call button is disabled -->
- <drawable name="end_call_disabled_state">#00000000</drawable>
+ <drawable name="end_call_disabled_state">#303030</drawable>
+
+ <!-- Dialpad background -->
+ <color name="dialpad_background">#000000</color>
+
+ <!-- Button background -->
+ <color name="button_background">#000000</color>
</resources>
diff --git a/InCallUI/res/values/dimens.xml b/InCallUI/res/values/dimens.xml
index 1d94971..204657b 100644
--- a/InCallUI/res/values/dimens.xml
+++ b/InCallUI/res/values/dimens.xml
@@ -28,6 +28,8 @@
<!-- Padding at the left and right edges of the "call banner". -->
<dimen name="call_banner_side_padding">24dp</dimen>
+ <!-- Padding at the right edges of the secondary call banner. -->
+ <dimen name="secondary_call_banner_right_padding">100dp</dimen>
<!-- Padding at the top and bottom edges of the "call banner". -->
<dimen name="call_banner_top_bottom_padding">16dp</dimen>
diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml
index e7049e5..7c588b3 100755
--- a/InCallUI/res/values/strings.xml
+++ b/InCallUI/res/values/strings.xml
@@ -1280,6 +1280,10 @@
<string name="respond_via_sms_canned_response_4">Can\'t talk now. Call me later?</string>
<!-- "Respond via SMS" option that lets you compose a custom response. [CHAR LIMIT=30] -->
<string name="respond_via_sms_custom_message">Write your own...</string>
+ <!-- "Custom Message" Cancel alert dialog button -->
+ <string name="custom_message_cancel">Cancel</string>
+ <!-- "Custom Message" Send alert dialog button -->
+ <string name="custom_message_send">Send</string>
<!-- Title of settings screen for managing the "Respond via SMS" feature. [CHAR LIMIT=30] -->
<string name="respond_via_sms_setting_title">Quick responses</string>
diff --git a/InCallUI/src/com/android/incallui/AnswerFragment.java b/InCallUI/src/com/android/incallui/AnswerFragment.java
index 324d522..1b249f2 100644
--- a/InCallUI/src/com/android/incallui/AnswerFragment.java
+++ b/InCallUI/src/com/android/incallui/AnswerFragment.java
@@ -18,12 +18,18 @@
import android.app.AlertDialog;
import android.app.Dialog;
+import android.content.DialogInterface;
import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
import android.widget.ListView;
import com.google.common.base.Preconditions;
@@ -45,6 +51,11 @@
*/
private Dialog mCannedResponsePopup = null;
+ /**
+ * The popup showing a text field for users to type in their custom message.
+ */
+ private AlertDialog mCustomMessagePopup = null;
+
private ArrayAdapter<String> mTextResponsesAdapter = null;
private GlowPadWrapper mGlowpad;
@@ -106,12 +117,7 @@
}
@Override
- public boolean isMessageDialogueShowing() {
- return mCannedResponsePopup != null && mCannedResponsePopup.isShowing();
- }
-
- @Override
- public void showMessageDialogue() {
+ public void showMessageDialog() {
final ListView lv = new ListView(getActivity());
Preconditions.checkNotNull(mTextResponsesAdapter);
@@ -124,22 +130,117 @@
mCannedResponsePopup.show();
}
+ private boolean isCannedResponsePopupShowing() {
+ if (mCannedResponsePopup != null) {
+ return mCannedResponsePopup.isShowing();
+ }
+ return false;
+ }
+
+ private boolean isCustomMessagePopupShowing() {
+ if (mCustomMessagePopup != null) {
+ return mCustomMessagePopup.isShowing();
+ }
+ return false;
+ }
+
/**
- * Dismiss currently visible popups.
+ * Dismiss the canned response list popup.
*
* This is safe to call even if the popup is already dismissed, and even if you never called
* showRespondViaSmsPopup() in the first place.
*/
- @Override
- public void dismissPopup() {
+ private void dismissCannedResponsePopup() {
if (mCannedResponsePopup != null) {
mCannedResponsePopup.dismiss(); // safe even if already dismissed
mCannedResponsePopup = null;
}
}
+ /**
+ * Dismiss the custom compose message popup.
+ */
+ private void dismissCustomMessagePopup() {
+ if (mCustomMessagePopup != null) {
+ mCustomMessagePopup.dismiss();
+ mCustomMessagePopup = null;
+ }
+ }
+
+ public void dismissPendingDialogues() {
+ if (isCannedResponsePopupShowing()) {
+ dismissCannedResponsePopup();
+ }
+
+ if (isCustomMessagePopupShowing()) {
+ dismissCustomMessagePopup();
+ }
+ }
+
+ public boolean hasPendingDialogs() {
+ return !(mCannedResponsePopup == null && mCustomMessagePopup == null);
+ }
+
+ /**
+ * Shows the custom message entry dialog.
+ */
+ public void showCustomMessageDialog() {
+ // Create an alert dialog containing an EditText
+ final EditText et = new EditText(getActivity());
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setCancelable(
+ true).setView(et)
+ .setPositiveButton(R.string.custom_message_send,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // The order is arranged in a way that the popup will be destroyed when the
+ // InCallActivity is about to finish.
+ final String textMessage = et.getText().toString().trim();
+ dismissCustomMessagePopup();
+ getPresenter().rejectCallWithMessage(textMessage);
+ }
+ })
+ .setNegativeButton(R.string.custom_message_cancel,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dismissCustomMessagePopup();
+ getPresenter().onDismissDialog();
+ }
+ })
+ .setTitle(R.string.respond_via_sms_custom_message);
+ mCustomMessagePopup = builder.create();
+
+ // Enable/disable the send button based on whether there is a message in the EditText
+ et.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ final Button sendButton = mCustomMessagePopup.getButton(
+ DialogInterface.BUTTON_POSITIVE);
+ sendButton.setEnabled(s != null && s.toString().trim().length() != 0);
+ }
+ });
+
+ // Keyboard up, show the dialog
+ mCustomMessagePopup.getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ mCustomMessagePopup.show();
+
+ // Send button starts out disabled
+ final Button sendButton = mCustomMessagePopup.getButton(DialogInterface.BUTTON_POSITIVE);
+ sendButton.setEnabled(false);
+ }
+
@Override
- public void configureMessageDialogue(ArrayList<String> textResponses) {
+ public void configureMessageDialog(ArrayList<String> textResponses) {
final ArrayList<String> textResponsesForDisplay = new ArrayList<String>(textResponses);
textResponsesForDisplay.add(getResources().getString(
@@ -178,12 +279,13 @@
Log.d(this, "RespondViaSmsItemClickListener.onItemClick(" + position + ")...");
final String message = (String) parent.getItemAtPosition(position);
Log.v(this, "- message: '" + message + "'");
+ dismissCannedResponsePopup();
// The "Custom" choice is a special case.
// (For now, it's guaranteed to be the last item.)
if (position == (parent.getCount() - 1)) {
- // Take the user to the standard SMS compose UI.
- getPresenter().rejectCallWithMessage(null);
+ // Show the custom message dialog
+ showCustomMessageDialog();
} else {
getPresenter().rejectCallWithMessage(message);
}
diff --git a/InCallUI/src/com/android/incallui/AnswerPresenter.java b/InCallUI/src/com/android/incallui/AnswerPresenter.java
index e820929..bfe8405 100644
--- a/InCallUI/src/com/android/incallui/AnswerPresenter.java
+++ b/InCallUI/src/com/android/incallui/AnswerPresenter.java
@@ -29,6 +29,7 @@
private static final String TAG = AnswerPresenter.class.getSimpleName();
private int mCallId = Call.INVALID_CALL_ID;
+ private Call mCall = null;
@Override
public void onUiReady(AnswerUi ui) {
@@ -64,6 +65,11 @@
}
@Override
+ public void onDisconnect(Call call) {
+ // no-op
+ }
+
+ @Override
public void onIncomingCall(Call call) {
// TODO: Ui is being destroyed when the fragment detaches. Need clean up step to stop
// getting updates here.
@@ -77,6 +83,7 @@
private void processIncomingCall(Call call) {
mCallId = call.getCallId();
+ mCall = call;
// Listen for call updates for the current call.
CallList.getInstance().addCallUpdateListener(mCallId, this);
@@ -88,7 +95,7 @@
if (call.can(Call.Capabilities.RESPOND_VIA_TEXT) && textMsgs != null) {
getUi().showTextButton(true);
- getUi().configureMessageDialogue(textMsgs);
+ getUi().configureMessageDialog(textMsgs);
} else {
getUi().showTextButton(false);
}
@@ -103,6 +110,9 @@
CallList.getInstance().removeCallUpdateListener(mCallId, this);
getUi().showAnswerUi(false);
+
+ // mCallId will hold the state of the call. We don't clear the mCall variable here as
+ // it may be useful for sending text messages after phone disconnects.
mCallId = Call.INVALID_CALL_ID;
}
}
@@ -118,35 +128,33 @@
}
public void onDecline() {
- if (mCallId == Call.INVALID_CALL_ID) {
- return;
- }
-
Log.d(this, "onDecline " + mCallId);
- CallCommandClient.getInstance().rejectCall(mCallId, false, null);
+ CallCommandClient.getInstance().rejectCall(mCall, false, null);
}
public void onText() {
if (getUi() != null) {
- getUi().showMessageDialogue();
+ getUi().showMessageDialog();
}
}
public void rejectCallWithMessage(String message) {
Log.d(this, "sendTextToDefaultActivity()...");
- if (getUi() != null) {
- getUi().dismissPopup();
- }
- CallCommandClient.getInstance().rejectCall(mCallId, true, message);
+
+ CallCommandClient.getInstance().rejectCall(mCall, true, message);
+
+ onDismissDialog();
+ }
+
+ public void onDismissDialog() {
+ InCallPresenter.getInstance().onDismissDialog();
}
interface AnswerUi extends Ui {
public void showAnswerUi(boolean show);
public void showTextButton(boolean show);
- public boolean isMessageDialogueShowing();
- public void showMessageDialogue();
- public void dismissPopup();
- public void configureMessageDialogue(ArrayList<String> textResponses);
+ public void showMessageDialog();
+ public void configureMessageDialog(ArrayList<String> textResponses);
}
}
diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java
index a508312..b0fdda1 100644
--- a/InCallUI/src/com/android/incallui/CallButtonFragment.java
+++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java
@@ -103,6 +103,10 @@
}
});
+ // make the hit target smaller for the end button so that is creates a deadzone
+ // along the inside perimeter of the button.
+ mEndCallButton.setOnTouchListener(new SmallerHitTargetTouchListener());
+
mMuteButton = (ToggleButton) parent.findViewById(R.id.muteButton);
mMuteButton.setOnClickListener(new OnClickListener() {
@Override
@@ -185,12 +189,23 @@
}
@Override
- public void setVisible(boolean on) {
- if (on) {
- getView().setVisibility(View.VISIBLE);
- } else {
- getView().setVisibility(View.INVISIBLE);
+ public void setEnabled(boolean isEnabled) {
+ View view = getView();
+ if (view.getVisibility() != View.VISIBLE) {
+ view.setVisibility(View.VISIBLE);
}
+
+ // The main end-call button spanning across the screen.
+ mEndCallButton.setEnabled(isEnabled);
+
+ // The smaller buttons laid out horizontally just below the end-call button.
+ mMuteButton.setEnabled(isEnabled);
+ mAudioButton.setEnabled(isEnabled);
+ mHoldButton.setEnabled(isEnabled);
+ mShowDialpadButton.setEnabled(isEnabled);
+ mMergeButton.setEnabled(isEnabled);
+ mAddCallButton.setEnabled(isEnabled);
+ mSwapButton.setEnabled(isEnabled);
}
@Override
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index 4de129d..3642630 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -19,6 +19,7 @@
import com.android.incallui.AudioModeProvider.AudioModeListener;
import com.android.incallui.InCallPresenter.InCallState;
import com.android.incallui.InCallPresenter.InCallStateListener;
+import com.android.incallui.InCallPresenter.IncomingCallListener;
import com.android.services.telephony.common.AudioMode;
import com.android.services.telephony.common.Call;
import com.android.services.telephony.common.Call.Capabilities;
@@ -29,13 +30,16 @@
* Logic for call buttons.
*/
public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButtonUi>
- implements InCallStateListener, AudioModeListener {
+ implements InCallStateListener, AudioModeListener, IncomingCallListener {
private Call mCall;
private ProximitySensor mProximitySensor;
private boolean mAutomaticallyMuted = false;
private boolean mPreviousMuteState = false;
+ private boolean mShowGenericMerge = false;
+ private boolean mShowManageConference = false;
+
private InCallState mPreviousState = null;
public CallButtonPresenter() {
@@ -50,6 +54,7 @@
// register for call state changes last
InCallPresenter.getInstance().addListener(this);
+ InCallPresenter.getInstance().addIncomingCallListener(this);
}
@Override
@@ -58,6 +63,7 @@
InCallPresenter.getInstance().removeListener(this);
AudioModeProvider.getInstance().removeListener(this);
+ InCallPresenter.getInstance().removeIncomingCallListener(this);
mProximitySensor = null;
}
@@ -77,16 +83,23 @@
&& mCall != null && PhoneNumberUtils.isVoiceMailNumber(mCall.getNumber())) {
getUi().displayDialpad(true);
}
+ } else if (state == InCallState.INCOMING) {
+ getUi().displayDialpad(false);
+ mCall = null;
} else {
mCall = null;
}
-
updateUi(state, mCall);
mPreviousState = state;
}
@Override
+ public void onIncomingCall(InCallState state, Call call) {
+ onStateChange(state, CallList.getInstance());
+ }
+
+ @Override
public void onAudioMode(int mode) {
if (getUi() != null) {
getUi().setAudio(mode);
@@ -198,6 +211,8 @@
Log.v(this, "Show dialpad " + String.valueOf(checked));
getUi().displayDialpad(checked);
mProximitySensor.onDialpadVisible(checked);
+
+ updateExtraButtonRow();
}
private void updateUi(InCallState state, Call call) {
@@ -206,14 +221,14 @@
return;
}
- final boolean isVisible = state.isConnectingOrConnected() &&
+ final boolean isEnabled = state.isConnectingOrConnected() &&
!state.isIncoming() && call != null;
- ui.setVisible(isVisible);
+ ui.setEnabled(isEnabled);
Log.d(this, "Updating call UI for call: ", call);
- if (isVisible) {
+ if (isEnabled) {
Log.v(this, "Show hold ", call.can(Capabilities.SUPPORT_HOLD));
Log.v(this, "Enable hold", call.can(Capabilities.HOLD));
Log.v(this, "Show merge ", call.can(Capabilities.MERGE_CALLS));
@@ -225,7 +240,7 @@
final boolean canAdd = call.can(Capabilities.ADD_CALL);
final boolean isGenericConference = call.can(Capabilities.GENERIC_CONFERENCE);
- final boolean showGenericMerge = isGenericConference && canMerge;
+
final boolean showMerge = !isGenericConference && canMerge;
if (showMerge) {
@@ -282,22 +297,28 @@
// - "Manage conference" (used only on GSM devices)
// - "Merge" button (used only on CDMA devices)
- final boolean showManageConference = (call.isConferenceCall() && !isGenericConference);
- final boolean showExtraButtonRow = (showGenericMerge || showManageConference) &&
- !getUi().isDialpadVisible();
+ mShowGenericMerge = isGenericConference && canMerge;
+ mShowManageConference = (call.isConferenceCall() && !isGenericConference);
- Log.i(this, "isGeneric: " + isGenericConference);
- Log.i(this, "showManageConference : " + showManageConference);
- Log.i(this, "showGenericMerge: " + showGenericMerge);
- if (showExtraButtonRow) {
- if (showGenericMerge) {
- getUi().showGenericMergeButton();
- } else if (showManageConference) {
- getUi().showManageConferenceCallButton();
- }
- } else {
- getUi().hideExtraRow();
+ updateExtraButtonRow();
+ }
+ }
+
+ private void updateExtraButtonRow() {
+ final boolean showExtraButtonRow = (mShowGenericMerge || mShowManageConference) &&
+ !getUi().isDialpadVisible();
+
+ Log.d(this, "isGeneric: " + mShowGenericMerge);
+ Log.d(this, "mShowManageConference : " + mShowManageConference);
+ Log.d(this, "mShowGenericMerge: " + mShowGenericMerge);
+ if (showExtraButtonRow) {
+ if (mShowGenericMerge) {
+ getUi().showGenericMergeButton();
+ } else if (mShowManageConference) {
+ getUi().showManageConferenceCallButton();
}
+ } else {
+ getUi().hideExtraRow();
}
}
@@ -314,7 +335,7 @@
}
public interface CallButtonUi extends Ui {
- void setVisible(boolean on);
+ void setEnabled(boolean on);
void setMute(boolean on);
void enableMute(boolean enabled);
void setHold(boolean on);
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 49ee786..0d26b82 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -29,11 +29,14 @@
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewStub;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.services.telephony.common.Call;
+import java.util.List;
+
/**
* Fragment for call card.
*/
@@ -75,6 +78,12 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ }
+
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
final CallList calls = CallList.getInstance();
final Call call = calls.getFirstCall();
@@ -231,15 +240,15 @@
// States other than disconnected not yet supported
callStateLabel = getCallStateLabelFromState(state, cause);
- Log.v(this, "setCallState ", callStateLabel);
- Log.v(this, "DisconnectCause ", cause);
- Log.v(this, "bluetooth on ", bluetoothOn);
+ Log.v(this, "setCallState " + callStateLabel);
+ Log.v(this, "DisconnectCause " + cause);
+ Log.v(this, "bluetooth on " + bluetoothOn);
Log.v(this, "gateway " + gatewayLabel + gatewayNumber);
// There are cases where we totally skip the animation, in which case remove the transition
// animation here and restore it afterwards.
- final boolean skipAnimation = (state == Call.State.DIALING
- || state == Call.State.DISCONNECTED);
+ final boolean skipAnimation = (Call.State.isDialing(state)
+ || state == Call.State.DISCONNECTED || state == Call.State.DISCONNECTING);
LayoutTransition transition = null;
if (skipAnimation) {
transition = mSupplementaryInfoContainer.getLayoutTransition();
@@ -364,22 +373,21 @@
} else if (Call.State.ONHOLD == state) {
callStateLabel = context.getString(R.string.card_title_on_hold);
-
} else if (Call.State.DIALING == state) {
callStateLabel = context.getString(R.string.card_title_dialing);
-
+ } else if (Call.State.REDIALING == state) {
+ callStateLabel = context.getString(R.string.card_title_redialing);
} else if (Call.State.INCOMING == state || Call.State.CALL_WAITING == state) {
callStateLabel = context.getString(R.string.card_title_incoming_call);
- // TODO(klp): Add a disconnecting state
- //} else if (Call.State.DISCONNECTING) {
- // While in the DISCONNECTING state we display a "Hanging up"
- // message in order to make the UI feel more responsive. (In
- // GSM it's normal to see a delay of a couple of seconds while
- // negotiating the disconnect with the network, so the "Hanging
- // up" state at least lets the user know that we're doing
- // something. This state is currently not used with CDMA.)
- //callStateLabel = context.getString(R.string.card_title_hanging_up);
+ } else if (Call.State.DISCONNECTING == state) {
+ // While in the DISCONNECTING state we display a "Hanging up"
+ // message in order to make the UI feel more responsive. (In
+ // GSM it's normal to see a delay of a couple of seconds while
+ // negotiating the disconnect with the network, so the "Hanging
+ // up" state at least lets the user know that we're doing
+ // something. This state is currently not used with CDMA.)
+ callStateLabel = context.getString(R.string.card_title_hanging_up);
} else if (Call.State.DISCONNECTED == state) {
callStateLabel = getCallFailedString(cause);
@@ -487,6 +495,33 @@
getPresenter().secondaryPhotoClicked();
}
});
+ mSecondaryPhotoOverlay.setOnTouchListener(new SmallerHitTargetTouchListener());
+ }
+ }
+
+ public void dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
+ dispatchPopulateAccessibilityEvent(event, mPrimaryName);
+ dispatchPopulateAccessibilityEvent(event, mPhoneNumber);
+ return;
+ }
+ dispatchPopulateAccessibilityEvent(event, mCallStateLabel);
+ dispatchPopulateAccessibilityEvent(event, mPrimaryName);
+ dispatchPopulateAccessibilityEvent(event, mPhoneNumber);
+ dispatchPopulateAccessibilityEvent(event, mCallTypeLabel);
+ dispatchPopulateAccessibilityEvent(event, mSecondaryCallName);
+
+ return;
+ }
+
+ private void dispatchPopulateAccessibilityEvent(AccessibilityEvent event, View view) {
+ if (view == null) return;
+ final List<CharSequence> eventText = event.getText();
+ int size = eventText.size();
+ view.dispatchPopulateAccessibilityEvent(event);
+ // if no text added write null to keep relative position
+ if (size == eventText.size()) {
+ eventText.add(null);
}
}
}
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 1830f05..949d718 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -261,6 +261,9 @@
if (entry.name != null) {
Log.d(TAG, "Contact found: " + entry);
}
+ if (entry.personUri != null) {
+ CallerInfoUtils.sendViewNotification(mContext, entry.personUri);
+ }
}
@Override
@@ -318,6 +321,10 @@
// to let user know quickly what call has disconnected. Disconnected
// calls are very short lived.
if (!skipDisconnected) {
+ retval = callList.getDisconnectingCall();
+ if (retval != null && retval != ignore) {
+ return retval;
+ }
retval = callList.getDisconnectedCall();
if (retval != null && retval != ignore) {
return retval;
@@ -417,7 +424,7 @@
if (mPrimary == null) {
return false;
}
- return (mPrimary.getState() == Call.State.DIALING &&
+ return (Call.State.isDialing(mPrimary.getState()) &&
!TextUtils.isEmpty(mPrimary.getGatewayNumber()) &&
!TextUtils.isEmpty(mPrimary.getGatewayPackage()));
}
diff --git a/InCallUI/src/com/android/incallui/CallCommandClient.java b/InCallUI/src/com/android/incallui/CallCommandClient.java
index cb49dca..52d2100 100644
--- a/InCallUI/src/com/android/incallui/CallCommandClient.java
+++ b/InCallUI/src/com/android/incallui/CallCommandClient.java
@@ -18,8 +18,10 @@
import android.os.RemoteException;
+
import com.android.services.telephony.common.AudioMode;
import com.android.services.telephony.common.ICallCommandService;
+import com.android.services.telephony.common.Call;
/**
* Main interface for phone related commands.
@@ -57,14 +59,15 @@
}
}
- public void rejectCall(int callId, boolean rejectWithMessage, String message) {
- Log.i(this, "rejectCall: " + callId + ", with rejectMessage? " + rejectWithMessage);
+ public void rejectCall(Call call, boolean rejectWithMessage, String message) {
+ Log.i(this, "rejectCall: " + call.getCallId() +
+ ", with rejectMessage? " + rejectWithMessage);
if (mCommandService == null) {
Log.e(this, "Cannot reject call; CallCommandService == null");
return;
}
try {
- mCommandService.rejectCall(callId, rejectWithMessage, message);
+ mCommandService.rejectCall(call, rejectWithMessage, message);
} catch (RemoteException e) {
Log.e(this, "Error rejecting call.", e);
}
@@ -227,4 +230,17 @@
}
}
+ public void setSystemBarNavigationEnabled(boolean enable) {
+ if (mCommandService == null) {
+ Log.e(this, "Cannot setSystemBarNavigationEnabled(); CallCommandService == null");
+ return;
+ }
+ try {
+ Log.v(this, "setSystemBarNavigationEnabled() enabled = " + enable);
+ mCommandService.setSystemBarNavigationEnabled(enable);
+ } catch (RemoteException e) {
+ Log.d(this, "Error on setSystemBarNavigationEnabled().");
+ }
+ }
+
}
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java
index 8249fd4..ba123b0 100644
--- a/InCallUI/src/com/android/incallui/CallList.java
+++ b/InCallUI/src/com/android/incallui/CallList.java
@@ -83,10 +83,15 @@
public void onDisconnect(Call call) {
Log.d(this, "onDisconnect: ", call);
- updateCallInMap(call);
+ boolean updated = updateCallInMap(call);
- notifyCallUpdateListeners(call);
- notifyListenersOfChange();
+ if (updated) {
+ // notify those listening for changes on this specific change
+ notifyCallUpdateListeners(call);
+
+ // notify those listening for all disconnects
+ notifyListenersOfDisconnect(call);
+ }
}
/**
@@ -187,7 +192,11 @@
}
public Call getOutgoingCall() {
- return getFirstCallWithState(Call.State.DIALING);
+ Call call = getFirstCallWithState(Call.State.DIALING);
+ if (call == null) {
+ call = getFirstCallWithState(Call.State.REDIALING);
+ }
+ return call;
}
public Call getActiveCall() {
@@ -202,6 +211,10 @@
return getFirstCallWithState(Call.State.DISCONNECTED);
}
+ public Call getDisconnectingCall() {
+ return getFirstCallWithState(Call.State.DISCONNECTING);
+ }
+
public Call getSecondBackgroundCall() {
return getCallWithState(Call.State.ONHOLD, 1);
}
@@ -223,16 +236,20 @@
return call;
}
-
public Call getFirstCall() {
- // TODO: should we switch to a simple list and pull the first one?
Call result = getIncomingCall();
if (result == null) {
- result = getFirstCallWithState(Call.State.DIALING);
+ result = getOutgoingCall();
}
if (result == null) {
result = getFirstCallWithState(Call.State.ACTIVE);
}
+ if (result == null) {
+ result = getDisconnectingCall();
+ }
+ if (result == null) {
+ result = getDisconnectedCall();
+ }
return result;
}
@@ -310,13 +327,24 @@
}
}
- private void updateCallInMap(Call call) {
+ private void notifyListenersOfDisconnect(Call call) {
+ for (Listener listener : mListeners) {
+ listener.onDisconnect(call);
+ }
+ }
+
+ /**
+ * Updates the call entry in the local map.
+ * @return false if no call previously existed and no call was added, otherwise true.
+ */
+ private boolean updateCallInMap(Call call) {
Preconditions.checkNotNull(call);
+ boolean updated = false;
+
final Integer id = new Integer(call.getCallId());
if (call.getState() == Call.State.DISCONNECTED) {
-
// update existing (but do not add!!) disconnected calls
if (mCallMap.containsKey(id)) {
@@ -328,12 +356,17 @@
mHandler.sendMessageDelayed(msg, getDelayForDisconnect(call));
mCallMap.put(id, call);
+ updated = true;
}
} else if (!isCallDead(call)) {
mCallMap.put(id, call);
+ updated = true;
} else if (mCallMap.containsKey(id)) {
mCallMap.remove(id);
+ updated = true;
}
+
+ return updated;
}
private int getDelayForDisconnect(Call call) {
@@ -413,8 +446,28 @@
* to the call list.
*/
public interface Listener {
- public void onCallListChange(CallList callList);
+ /**
+ * Called when a new incoming call comes in.
+ * This is the only method that gets called for incoming calls. Listeners
+ * that want to perform an action on incoming call should respond in this method
+ * because {@link #onCallListChange} does not automatically get called for
+ * incoming calls.
+ */
public void onIncomingCall(Call call);
+
+ /**
+ * Called anytime there are changes to the call list. The change can be switching call
+ * states, updating information, etc. This method will NOT be called for new incoming
+ * calls and for calls that switch to disconnected state. Listeners must add actions
+ * to those method implementations if they want to deal with those actions.
+ */
+ public void onCallListChange(CallList callList);
+
+ /**
+ * Called when a call switches to the disconnected state. This is the only method
+ * that will get called upon disconnection.
+ */
+ public void onDisconnect(Call call);
}
public interface CallUpdateListener {
diff --git a/InCallUI/src/com/android/incallui/CallerInfoUtils.java b/InCallUI/src/com/android/incallui/CallerInfoUtils.java
index e282d50..3d2c5c4 100644
--- a/InCallUI/src/com/android/incallui/CallerInfoUtils.java
+++ b/InCallUI/src/com/android/incallui/CallerInfoUtils.java
@@ -1,6 +1,8 @@
package com.android.incallui;
import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
import android.text.TextUtils;
import com.android.services.telephony.common.Call;
@@ -9,7 +11,7 @@
import java.util.Arrays;
/**
- * TODO: Insert description here. (generated by yorkelee)
+ * Utility methods for contact and caller info related functionality
*/
public class CallerInfoUtils {
@@ -18,6 +20,12 @@
/** Define for not a special CNAP string */
private static final int CNAP_SPECIAL_CASE_NO = -1;
+ private static final String VIEW_NOTIFICATION_ACTION =
+ "com.android.contacts.VIEW_NOTIFICATION";
+ private static final String VIEW_NOTIFICATION_PACKAGE = "com.android.contacts";
+ private static final String VIEW_NOTIFICATION_CLASS =
+ "com.android.contacts.ViewNotificationService";
+
public CallerInfoUtils() {
}
@@ -153,7 +161,7 @@
return "";
}
- // Todo (klp): Figure out an equivalent for VDBG
+ // Todo: Figure out an equivalent for VDBG
if (false) {
// When VDBG is true we emit PII.
return number;
@@ -172,4 +180,14 @@
}
return builder.toString();
}
+
+ /**
+ * Send a notification that that we are viewing a particular contact, so that the high-res
+ * photo is downloaded by the sync adapter.
+ */
+ public static void sendViewNotification(Context context, Uri contactUri) {
+ final Intent intent = new Intent(VIEW_NOTIFICATION_ACTION, contactUri);
+ intent.setClassName(VIEW_NOTIFICATION_PACKAGE, VIEW_NOTIFICATION_CLASS);
+ context.startService(intent);
+ }
}
diff --git a/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java b/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java
index 041614d..1ba88cb 100644
--- a/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java
+++ b/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java
@@ -21,6 +21,7 @@
import com.android.incallui.ContactInfoCache.ContactCacheEntry;
import com.android.incallui.InCallPresenter.InCallState;
import com.android.incallui.InCallPresenter.InCallStateListener;
+import com.android.services.telephony.common.Call;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSortedSet;
@@ -57,11 +58,15 @@
public void onStateChange(InCallState state, CallList callList) {
if (getUi().isFragmentVisible()) {
Log.v(this, "onStateChange" + state);
- if (state == InCallState.INCALL && callList.getActiveOrBackgroundCall() != null &&
- callList.getActiveOrBackgroundCall().isConferenceCall()) {
- Log.v(this, "Number of existing calls is " +
- String.valueOf(callList.getActiveCall().getChildCallIds().size()));
- update(callList);
+ if (state == InCallState.INCALL) {
+ final Call call = callList.getActiveOrBackgroundCall();
+ if (call != null && call.isConferenceCall()) {
+ Log.v(this, "Number of existing calls is " +
+ String.valueOf(call.getChildCallIds().size()));
+ update(callList);
+ } else {
+ getUi().setVisible(false);
+ }
} else {
getUi().setVisible(false);
}
diff --git a/InCallUI/src/com/android/incallui/ContactInfoCache.java b/InCallUI/src/com/android/incallui/ContactInfoCache.java
index 6c05650..4b482cb 100644
--- a/InCallUI/src/com/android/incallui/ContactInfoCache.java
+++ b/InCallUI/src/com/android/incallui/ContactInfoCache.java
@@ -234,6 +234,12 @@
entry.location = oldEntry.location;
}
+ // If no image and it's a business, switch to using the default business avatar.
+ if (info.getImageUrl() == null && info.isBusiness()) {
+ Log.d(TAG, "Business has no image. Using default.");
+ entry.photo = mContext.getResources().getDrawable(R.drawable.business_unknown);
+ }
+
// Add the contact info to the cache.
mInfoMap.put(mCallId, entry);
sendInfoNotifications(mCallId, entry);
@@ -330,12 +336,6 @@
photo = context.getResources().getDrawable(R.drawable.picture_unknown);
} else {
cce.personUri = personUri;
-
- // If the image load is too slow, we show a default avatar icon afterward.
- // If it is fast enough, this message will be canceled on onImageLoadComplete().
- // TODO (klp): Figure out if this handler is still needed.
- // mHandler.removeMessages(MESSAGE_SHOW_UNKNOWN_PHOTO);
- // mHandler.sendEmptyMessageDelayed(MESSAGE_SHOW_UNKNOWN_PHOTO, MESSAGE_DELAY);
}
}
diff --git a/InCallUI/src/com/android/incallui/DialpadFragment.java b/InCallUI/src/com/android/incallui/DialpadFragment.java
index 428750d..5087561 100644
--- a/InCallUI/src/com/android/incallui/DialpadFragment.java
+++ b/InCallUI/src/com/android/incallui/DialpadFragment.java
@@ -18,6 +18,8 @@
import android.content.Context;
import android.os.Bundle;
+import android.text.Editable;
+import android.text.method.DialerKeyListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -58,6 +60,198 @@
mDisplayMap.put(R.id.star, '*');
}
+ // KeyListener used with the "dialpad digits" EditText widget.
+ private DTMFKeyListener mDialerKeyListener;
+
+ /**
+ * Our own key listener, specialized for dealing with DTMF codes.
+ * 1. Ignore the backspace since it is irrelevant.
+ * 2. Allow ONLY valid DTMF characters to generate a tone and be
+ * sent as a DTMF code.
+ * 3. All other remaining characters are handled by the superclass.
+ *
+ * This code is purely here to handle events from the hardware keyboard
+ * while the DTMF dialpad is up.
+ */
+ private class DTMFKeyListener extends DialerKeyListener {
+
+ private DTMFKeyListener() {
+ super();
+ }
+
+ /**
+ * Overriden to return correct DTMF-dialable characters.
+ */
+ @Override
+ protected char[] getAcceptedChars(){
+ return DTMF_CHARACTERS;
+ }
+
+ /** special key listener ignores backspace. */
+ @Override
+ public boolean backspace(View view, Editable content, int keyCode,
+ KeyEvent event) {
+ return false;
+ }
+
+ /**
+ * Return true if the keyCode is an accepted modifier key for the
+ * dialer (ALT or SHIFT).
+ */
+ private boolean isAcceptableModifierKey(int keyCode) {
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_ALT_LEFT:
+ case KeyEvent.KEYCODE_ALT_RIGHT:
+ case KeyEvent.KEYCODE_SHIFT_LEFT:
+ case KeyEvent.KEYCODE_SHIFT_RIGHT:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Overriden so that with each valid button press, we start sending
+ * a dtmf code and play a local dtmf tone.
+ */
+ @Override
+ public boolean onKeyDown(View view, Editable content,
+ int keyCode, KeyEvent event) {
+ // if (DBG) log("DTMFKeyListener.onKeyDown, keyCode " + keyCode + ", view " + view);
+
+ // find the character
+ char c = (char) lookup(event, content);
+
+ // if not a long press, and parent onKeyDown accepts the input
+ if (event.getRepeatCount() == 0 && super.onKeyDown(view, content, keyCode, event)) {
+
+ boolean keyOK = ok(getAcceptedChars(), c);
+
+ // if the character is a valid dtmf code, start playing the tone and send the
+ // code.
+ if (keyOK) {
+ Log.d(this, "DTMFKeyListener reading '" + c + "' from input.");
+ getPresenter().processDtmf(c);
+ } else {
+ Log.d(this, "DTMFKeyListener rejecting '" + c + "' from input.");
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Overriden so that with each valid button up, we stop sending
+ * a dtmf code and the dtmf tone.
+ */
+ @Override
+ public boolean onKeyUp(View view, Editable content,
+ int keyCode, KeyEvent event) {
+ // if (DBG) log("DTMFKeyListener.onKeyUp, keyCode " + keyCode + ", view " + view);
+
+ super.onKeyUp(view, content, keyCode, event);
+
+ // find the character
+ char c = (char) lookup(event, content);
+
+ boolean keyOK = ok(getAcceptedChars(), c);
+
+ if (keyOK) {
+ Log.d(this, "Stopping the tone for '" + c + "'");
+ getPresenter().stopTone();
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Handle individual keydown events when we DO NOT have an Editable handy.
+ */
+ public boolean onKeyDown(KeyEvent event) {
+ char c = lookup(event);
+ Log.d(this, "DTMFKeyListener.onKeyDown: event '" + c + "'");
+
+ // if not a long press, and parent onKeyDown accepts the input
+ if (event.getRepeatCount() == 0 && c != 0) {
+ // if the character is a valid dtmf code, start playing the tone and send the
+ // code.
+ if (ok(getAcceptedChars(), c)) {
+ Log.d(this, "DTMFKeyListener reading '" + c + "' from input.");
+ getPresenter().processDtmf(c);
+ return true;
+ } else {
+ Log.d(this, "DTMFKeyListener rejecting '" + c + "' from input.");
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Handle individual keyup events.
+ *
+ * @param event is the event we are trying to stop. If this is null,
+ * then we just force-stop the last tone without checking if the event
+ * is an acceptable dialer event.
+ */
+ public boolean onKeyUp(KeyEvent event) {
+ if (event == null) {
+ //the below piece of code sends stopDTMF event unnecessarily even when a null event
+ //is received, hence commenting it.
+ /*if (DBG) log("Stopping the last played tone.");
+ stopTone();*/
+ return true;
+ }
+
+ char c = lookup(event);
+ Log.d(this, "DTMFKeyListener.onKeyUp: event '" + c + "'");
+
+ // TODO: stopTone does not take in character input, we may want to
+ // consider checking for this ourselves.
+ if (ok(getAcceptedChars(), c)) {
+ Log.d(this, "Stopping the tone for '" + c + "'");
+ getPresenter().stopTone();
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Find the Dialer Key mapped to this event.
+ *
+ * @return The char value of the input event, otherwise
+ * 0 if no matching character was found.
+ */
+ private char lookup(KeyEvent event) {
+ // This code is similar to {@link DialerKeyListener#lookup(KeyEvent, Spannable) lookup}
+ int meta = event.getMetaState();
+ int number = event.getNumber();
+
+ if (!((meta & (KeyEvent.META_ALT_ON | KeyEvent.META_SHIFT_ON)) == 0) || (number == 0)) {
+ int match = event.getMatch(getAcceptedChars(), meta);
+ number = (match != 0) ? match : number;
+ }
+
+ return (char) number;
+ }
+
+ /**
+ * Check to see if the keyEvent is dialable.
+ */
+ boolean isKeyEventAcceptable (KeyEvent event) {
+ return (ok(getAcceptedChars(), lookup(event)));
+ }
+
+ /**
+ * Overrides the characters used in {@link DialerKeyListener#CHARACTERS}
+ * These are the valid dtmf characters.
+ */
+ public final char[] DTMF_CHARACTERS = new char[] {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*'
+ };
+ }
+
@Override
public void onClick(View v) {
Log.d(this, "onClick");
@@ -180,6 +374,8 @@
com.android.incallui.R.layout.dtmf_twelve_key_dialer_view, container, false);
mDtmfDialerField = (EditText) parent.findViewById(R.id.dtmfDialerField);
if (mDtmfDialerField != null) {
+ mDialerKeyListener = new DTMFKeyListener();
+ mDtmfDialerField.setKeyListener(mDialerKeyListener);
// remove the long-press context menus that support
// the edit (copy / paste / select) functions.
mDtmfDialerField.setLongClickable(false);
@@ -190,6 +386,12 @@
}
@Override
+ public void onDestroyView() {
+ mDialerKeyListener = null;
+ super.onDestroyView();
+ }
+
+ @Override
public void setVisible(boolean on) {
if (on) {
getView().setVisibility(View.VISIBLE);
@@ -215,6 +417,30 @@
}
/**
+ * Called externally (from InCallScreen) to play a DTMF Tone.
+ */
+ /* package */ boolean onDialerKeyDown(KeyEvent event) {
+ Log.d(this, "Notifying dtmf key down.");
+ if (mDialerKeyListener != null) {
+ return mDialerKeyListener.onKeyDown(event);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Called externally (from InCallScreen) to cancel the last DTMF Tone played.
+ */
+ public boolean onDialerKeyUp(KeyEvent event) {
+ Log.d(this, "Notifying dtmf key up.");
+ if (mDialerKeyListener != null) {
+ return mDialerKeyListener.onKeyUp(event);
+ } else {
+ return false;
+ }
+ }
+
+ /**
* setup the keys on the dialer activity, using the keymaps.
*/
private void setupKeypad(View parent) {
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 15e48c5..ac21d52 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -20,6 +20,10 @@
import com.android.services.telephony.common.Call.State;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
@@ -27,6 +31,7 @@
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;
/**
@@ -36,12 +41,15 @@
public static final String SHOW_DIALPAD_EXTRA = "InCallActivity.show_dialpad";
+ private static final int INVALID_RES_ID = -1;
+
private CallButtonFragment mCallButtonFragment;
private CallCardFragment mCallCardFragment;
private AnswerFragment mAnswerFragment;
private DialpadFragment mDialpadFragment;
private ConferenceManagerFragment mConferenceManagerFragment;
private boolean mIsForegroundActivity;
+ private AlertDialog mDialog;
/** Use to pass 'showDialpad' from {@link #onNewIntent} to {@link #onResume} */
private boolean mShowDialpadRequested;
@@ -82,7 +90,7 @@
@Override
protected void onResume() {
- Log.d(this, "onResume()...");
+ Log.i(this, "onResume()...");
super.onResume();
mIsForegroundActivity = true;
@@ -102,6 +110,9 @@
super.onPause();
mIsForegroundActivity = false;
+
+ mDialpadFragment.onDialerKeyUp(null);
+
InCallPresenter.getInstance().onUiShowing(false);
}
@@ -127,6 +138,9 @@
return mIsForegroundActivity;
}
+ private boolean hasPendingErrorDialog() {
+ return mDialog != null;
+ }
/**
* Dismisses the in-call screen.
*
@@ -144,8 +158,12 @@
*/
@Override
public void finish() {
- Log.d(this, "finish()...");
- super.finish();
+ Log.i(this, "finish(). Dialog showing: " + (mDialog != null));
+
+ // skip finish if we are still showing a dialog.
+ if (!hasPendingErrorDialog() && !mAnswerFragment.hasPendingDialogs()) {
+ super.finish();
+ }
}
@Override
@@ -171,7 +189,6 @@
@Override
public void onBackPressed() {
- // TODO(klp): implement fully
Log.d(this, "onBackPressed()...");
// BACK is also used to exit out of any "special modes" of the
@@ -190,10 +207,25 @@
}
@Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ // push input to the dialer.
+ if ((mDialpadFragment.isVisible()) && (mDialpadFragment.onDialerKeyUp(event))){
+ return true;
+ } else if (keyCode == KeyEvent.KEYCODE_CALL) {
+ // Always consume CALL to be sure the PhoneWindow won't do anything with it
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
+ @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_CALL:
- // TODO(klp): handle call key
+ boolean handled = InCallPresenter.getInstance().handleCallKey();
+ if (!handled) {
+ Log.w(this, "InCallActivity should always handle KEYCODE_CALL in onKeyDown");
+ }
// Always consume CALL to be sure the PhoneWindow won't do anything with it
return true;
@@ -212,11 +244,12 @@
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_VOLUME_MUTE:
- // Not sure if needed. If so, silence ringer.
+ // Ringer silencing handled by PhoneWindowManager.
break;
case KeyEvent.KEYCODE_MUTE:
- toast("mute");
+ // toggle mute
+ CallCommandClient.getInstance().mute(!AudioModeProvider.getInstance().getMute());
return true;
// Various testing/debugging features, enabled ONLY when VERBOSE == true.
@@ -231,14 +264,37 @@
}
break;
case KeyEvent.KEYCODE_EQUALS:
- // TODO(klp): Dump phone state?
+ // TODO: Dump phone state?
break;
}
- // TODO(klp) Adds hardware keyboard support
+ if (event.getRepeatCount() == 0 && handleDialerKeyDown(keyCode, event)) {
+ return true;
+ }
+
return super.onKeyDown(keyCode, event);
}
+ private boolean handleDialerKeyDown(int keyCode, KeyEvent event) {
+ Log.v(this, "handleDialerKeyDown: keyCode " + keyCode + ", event " + event + "...");
+
+ // As soon as the user starts typing valid dialable keys on the
+ // keyboard (presumably to type DTMF tones) we start passing the
+ // key events to the DTMFDialer's onDialerKeyDown.
+ if (mDialpadFragment.isVisible()) {
+ return mDialpadFragment.onDialerKeyDown(event);
+
+ // TODO: If the dialpad isn't currently visible, maybe
+ // consider automatically bringing it up right now?
+ // (Just to make sure the user sees the digits widget...)
+ // But this probably isn't too critical since it's awkward to
+ // use the hard keyboard while in-call in the first place,
+ // especially now that the in-call UI is portrait-only...
+ }
+
+ return false;
+ }
+
@Override
public void onConfigurationChanged(Configuration config) {
InCallPresenter.getInstance().getProximitySensor().onConfigurationChanged(config);
@@ -317,6 +373,14 @@
toast.show();
}
+ /**
+ * Simulates a user click to hide the dialpad. This will update the UI to show the call card,
+ * update the checked state of the dialpad button, and update the proximity sensor state.
+ */
+ public void hideDialpadForDisconnect() {
+ mCallButtonFragment.displayDialpad(false);
+ }
+
public void displayDialpad(boolean showDialpad) {
if (showDialpad) {
mDialpadFragment.setVisible(true);
@@ -341,4 +405,81 @@
final PostCharDialogFragment fragment = new PostCharDialogFragment(callId, chars);
fragment.show(getFragmentManager(), "postCharWait");
}
+
+ @Override
+ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ if (mCallCardFragment != null) {
+ mCallCardFragment.dispatchPopulateAccessibilityEvent(event);
+ }
+ return super.dispatchPopulateAccessibilityEvent(event);
+ }
+
+ public void maybeShowErrorDialogOnDisconnect(Call.DisconnectCause cause) {
+ Log.d(this, "maybeShowErrorDialogOnDisconnect");
+
+ if (!isFinishing()) {
+ final int resId = getResIdForDisconnectCause(cause);
+ if (resId != INVALID_RES_ID) {
+ showErrorDialog(resId);
+ }
+ }
+ }
+
+ public void dismissPendingDialogs() {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ mDialog = null;
+ }
+ mAnswerFragment.dismissPendingDialogues();
+ }
+
+ /**
+ * Utility function to bring up a generic "error" dialog.
+ */
+ private void showErrorDialog(int resId) {
+ final CharSequence msg = getResources().getText(resId);
+ Log.i(this, "Show Dialog: " + msg);
+
+ dismissPendingDialogs();
+
+ mDialog = new AlertDialog.Builder(this)
+ .setMessage(msg)
+ .setPositiveButton(R.string.ok, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ onDialogDismissed();
+ }})
+ .setOnCancelListener(new OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ onDialogDismissed();
+ }})
+ .create();
+
+ mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+ mDialog.show();
+ }
+
+ private int getResIdForDisconnectCause(Call.DisconnectCause cause) {
+ int resId = INVALID_RES_ID;
+
+ if (cause == Call.DisconnectCause.CALL_BARRED) {
+ resId = R.string.callFailed_cb_enabled;
+ } else if (cause == Call.DisconnectCause.FDN_BLOCKED) {
+ resId = R.string.callFailed_fdn_only;
+ } else if (cause == Call.DisconnectCause.CS_RESTRICTED) {
+ resId = R.string.callFailed_dsac_restricted;
+ } else if (cause == Call.DisconnectCause.CS_RESTRICTED_EMERGENCY) {
+ resId = R.string.callFailed_dsac_restricted_emergency;
+ } else if (cause == Call.DisconnectCause.CS_RESTRICTED_NORMAL) {
+ resId = R.string.callFailed_dsac_restricted_normal;
+ }
+
+ return resId;
+ }
+
+ private void onDialogDismissed() {
+ mDialog = null;
+ InCallPresenter.getInstance().onDismissDialog();
+ }
}
diff --git a/InCallUI/src/com/android/incallui/InCallApp.java b/InCallUI/src/com/android/incallui/InCallApp.java
index 02f07b8..dcc7848 100644
--- a/InCallUI/src/com/android/incallui/InCallApp.java
+++ b/InCallUI/src/com/android/incallui/InCallApp.java
@@ -44,7 +44,6 @@
@Override
public void onConfigurationChanged(Configuration newConfig) {
- // TODO(klp): See what configuration changes we need for klp
super.onConfigurationChanged(newConfig);
}
@@ -58,7 +57,7 @@
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
- Log.v(this, "Broadcast from Notification: ", action);
+ Log.i(this, "Broadcast from Notification: " + action);
if (action.equals(ACTION_HANG_UP_ONGOING_CALL)) {
// TODO: Commands of this nature should exist in the CallList or a
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 7678372..1b9f60c 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -23,6 +23,7 @@
import android.content.Intent;
import com.android.services.telephony.common.Call;
+import com.android.services.telephony.common.Call.Capabilities;
import com.google.common.collect.Lists;
import java.util.ArrayList;
@@ -118,6 +119,15 @@
attemptCleanup();
}
+ private void attemptFinishActivity() {
+ final boolean doFinish = (mInCallActivity != null && isActivityStarted());
+ Log.i(this, "Hide in call UI: " + doFinish);
+
+ if (doFinish) {
+ mInCallActivity.finish();
+ }
+ }
+
/**
* Called when the UI begins or ends. Starts the callstate callbacks if the UI just began.
* Attempts to tear down everything if the UI just ended. See #tearDown for more insight on
@@ -127,16 +137,6 @@
boolean updateListeners = false;
if (inCallActivity != null) {
- // When the UI comes up, we need to first check the state of the Service.
- // If the service is not attached, that means that a call probably connected and
- // then immediately disconnected before the UI was able to come up. A disconnected
- // service means we dont have calls, so start tearing down the UI instead.
- if (mServiceConnected == false) {
- inCallActivity.finish();
- attemptCleanup();
- return;
- }
-
if (mInCallActivity == null) {
updateListeners = true;
Log.i(this, "UI Initialized");
@@ -149,6 +149,24 @@
}
mInCallActivity = inCallActivity;
+
+ // By the time the UI finally comes up, the call may already be disconnected.
+ // If that's the case, we may need to show an error dialog.
+ if (mCallList != null && mCallList.getDisconnectedCall() != null) {
+ maybeShowErrorDialogOnDisconnect(mCallList.getDisconnectedCall());
+ }
+
+ // When the UI comes up, we need to first check the in-call state.
+ // If we are showing NO_CALLS, that means that a call probably connected and
+ // then immediately disconnected before the UI was able to come up.
+ // If we dont have any calls, start tearing down the UI instead.
+ // NOTE: This code relies on {@link #mInCallActivity} being set so we run it after
+ // it has been set.
+ if (mInCallState == InCallState.NO_CALLS) {
+ Log.i(this, "UI Intialized, but no calls left. shut down.");
+ attemptFinishActivity();
+ return;
+ }
} else {
Log.i(this, "UI Destroyed)");
updateListeners = true;
@@ -183,6 +201,12 @@
InCallState newState = getPotentialStateFromCallList(callList);
newState = startOrFinishUi(newState);
+ // Renable notification shade and soft navigation buttons, if we are no longer in the
+ // incoming call screen
+ if (!newState.isIncoming()) {
+ CallCommandClient.getInstance().setSystemBarNavigationEnabled(true);
+ }
+
// Set the new state before announcing it to the world
Log.i(this, "Phone switching state: " + mInCallState + " -> " + newState);
mInCallState = newState;
@@ -206,12 +230,30 @@
Log.i(this, "Phone switching state: " + mInCallState + " -> " + newState);
mInCallState = newState;
+ // Disable notification shade and soft navigation buttons
+ if (newState.isIncoming()) {
+ CallCommandClient.getInstance().setSystemBarNavigationEnabled(false);
+ }
+
for (IncomingCallListener listener : mIncomingCallListeners) {
listener.onIncomingCall(mInCallState, call);
}
}
/**
+ * Called when a call becomes disconnected. Called everytime an existing call
+ * changes from being connected (incoming/outgoing/active) to disconnected.
+ */
+ @Override
+ public void onDisconnect(Call call) {
+ hideDialpadForDisconnect();
+ maybeShowErrorDialogOnDisconnect(call);
+
+ // We need to do the run the same code as onCallListChange.
+ onCallListChange(CallList.getInstance());
+ }
+
+ /**
* Given the call list, return the state in which the in-call screen should be.
*/
public static InCallState getPotentialStateFromCallList(CallList callList) {
@@ -223,7 +265,8 @@
newState = InCallState.OUTGOING;
} else if (callList.getActiveCall() != null ||
callList.getBackgroundCall() != null ||
- callList.getDisconnectedCall() != null) {
+ callList.getDisconnectedCall() != null ||
+ callList.getDisconnectingCall() != null) {
newState = InCallState.INCALL;
}
@@ -266,6 +309,12 @@
* Hangs up any active or outgoing calls.
*/
public void hangUpOngoingCall() {
+ // By the time we receive this intent, we could be shut down and call list
+ // could be null. Bail in those cases.
+ if (mCallList == null) {
+ return;
+ }
+
Call call = mCallList.getOutgoingCall();
if (call == null) {
call = mCallList.getActiveOrBackgroundCall();
@@ -336,6 +385,117 @@
}
/**
+ * Handles the green CALL key while in-call.
+ * @return true if we consumed the event.
+ */
+ public boolean handleCallKey() {
+ Log.v(this, "handleCallKey");
+
+ // The green CALL button means either "Answer", "Unhold", or
+ // "Swap calls", or can be a no-op, depending on the current state
+ // of the Phone.
+
+ /**
+ * INCOMING CALL
+ */
+ final CallList calls = CallList.getInstance();
+ final Call incomingCall = calls.getIncomingCall();
+ Log.v(this, "incomingCall: " + incomingCall);
+
+ // (1) Attempt to answer a call
+ if (incomingCall != null) {
+ CallCommandClient.getInstance().answerCall(incomingCall.getCallId());
+ return true;
+ }
+
+ /**
+ * ACTIVE CALL
+ */
+ final Call activeCall = calls.getActiveCall();
+ if (activeCall != null) {
+ // TODO: This logic is repeated from CallButtonPresenter.java. We should
+ // consolidate this logic.
+ final boolean isGeneric = activeCall.can(Capabilities.GENERIC_CONFERENCE);
+ final boolean canMerge = activeCall.can(Capabilities.MERGE_CALLS);
+ final boolean canSwap = activeCall.can(Capabilities.SWAP_CALLS);
+
+ Log.v(this, "activeCall: " + activeCall + ", isGeneric: " + isGeneric + ", canMerge: " +
+ canMerge + ", canSwap: " + canSwap);
+
+ // (2) Attempt actions on Generic conference calls
+ if (activeCall.isConferenceCall() && isGeneric) {
+ if (canMerge) {
+ CallCommandClient.getInstance().merge();
+ return true;
+ } else if (canSwap) {
+ CallCommandClient.getInstance().swap();
+ return true;
+ }
+ }
+
+ // (3) Swap calls
+ if (canSwap) {
+ CallCommandClient.getInstance().swap();
+ return true;
+ }
+ }
+
+ /**
+ * BACKGROUND CALL
+ */
+ final Call heldCall = calls.getBackgroundCall();
+ if (heldCall != null) {
+ // We have a hold call so presumeable it will always support HOLD...but
+ // there is no harm in double checking.
+ final boolean canHold = heldCall.can(Capabilities.HOLD);
+
+ Log.v(this, "heldCall: " + heldCall + ", canHold: " + canHold);
+
+ // (4) unhold call
+ if (heldCall.getState() == Call.State.ONHOLD && canHold) {
+ CallCommandClient.getInstance().hold(heldCall.getCallId(), false);
+ return true;
+ }
+ }
+
+ // Always consume hard keys
+ return true;
+ }
+
+ /**
+ * A dialog could have prevented in-call screen from being previously finished.
+ * This function checks to see if there should be any UI left and if not attempts
+ * to tear down the UI.
+ */
+ public void onDismissDialog() {
+ Log.i(this, "Dialog dismissed");
+ if (mInCallState == InCallState.NO_CALLS) {
+ attemptFinishActivity();
+ attemptCleanup();
+ }
+ }
+
+ /**
+ * For some disconnected causes, we show a dialog. This calls into the activity to show
+ * the dialog if appropriate for the call.
+ */
+ private void maybeShowErrorDialogOnDisconnect(Call call) {
+ // For newly disconnected calls, we may want to show a dialog on specific error conditions
+ if (isActivityStarted() && call.getState() == Call.State.DISCONNECTED) {
+ mInCallActivity.maybeShowErrorDialogOnDisconnect(call.getDisconnectCause());
+ }
+ }
+
+ /**
+ * Hides the dialpad. Called when a call is disconnected (Requires hiding dialpad).
+ */
+ private void hideDialpadForDisconnect() {
+ if (isActivityStarted()) {
+ mInCallActivity.hideDialpadForDisconnect();
+ }
+ }
+
+ /**
* When the state of in-call changes, this is the first method to get called. It determines if
* the UI needs to be started or finished depending on the new state and does it.
*/
@@ -402,27 +562,49 @@
showInCall(false);
} else if (startStartupSequence) {
Log.i(this, "Start Full Screen in call UI");
- mStatusBarNotifier.updateNotificationAndLaunchIncomingCallUi(newState, mCallList);
- } else if (newState == InCallState.NO_CALLS) {
- Log.i(this, "Hide in call UI");
- // The new state is the no calls state. Tear everything down.
- if (mInCallActivity != null) {
- if (isActivityStarted()) {
- mInCallActivity.finish();
- }
+ // We're about the bring up the in-call UI for an incoming call. If we still have
+ // dialogs up, we need to clear them out before showing incoming screen.
+ if (isActivityStarted()) {
+ mInCallActivity.dismissPendingDialogs();
}
+ startUi(newState);
+ } else if (newState == InCallState.NO_CALLS) {
+ // The new state is the no calls state. Tear everything down.
+ attemptFinishActivity();
}
return newState;
}
+ private void startUi(InCallState inCallState) {
+ final Call incomingCall = mCallList.getIncomingCall();
+ final boolean isCallWaiting = (incomingCall != null &&
+ incomingCall.getState() == Call.State.CALL_WAITING);
+
+ // If the screen is off, we need to make sure it gets turned on for incoming calls.
+ // This normally works just fine thanks to FLAG_TURN_SCREEN_ON but that only works
+ // when the activity is first created. Therefore, to ensure the screen is turned on
+ // for the call waiting case, we finish() the current activity and start a new one.
+ // There should be no jank from this since the screen is already off and will remain so
+ // until our new activity is up.
+ if (mProximitySensor.isScreenReallyOff() && isCallWaiting) {
+ if (isActivityStarted()) {
+ mInCallActivity.finish();
+ }
+ mInCallActivity = null;
+ }
+
+ mStatusBarNotifier.updateNotificationAndLaunchIncomingCallUi(inCallState, mCallList);
+ }
+
/**
* Checks to see if both the UI is gone and the service is disconnected. If so, tear it all
* down.
*/
private void attemptCleanup() {
- boolean shouldCleanup = (mInCallActivity == null && !mServiceConnected);
+ boolean shouldCleanup = (mInCallActivity == null && !mServiceConnected &&
+ mInCallState == InCallState.NO_CALLS);
Log.i(this, "attemptCleanup? " + shouldCleanup);
if (shouldCleanup) {
diff --git a/InCallUI/src/com/android/incallui/ProximitySensor.java b/InCallUI/src/com/android/incallui/ProximitySensor.java
index 5895c29..5776b56 100644
--- a/InCallUI/src/com/android/incallui/ProximitySensor.java
+++ b/InCallUI/src/com/android/incallui/ProximitySensor.java
@@ -154,11 +154,20 @@
}
/**
+ * TODO: There is no way to determine if a screen is off due to proximity or if it is
+ * legitimately off, but if ever we can do that in the future, it would be useful here.
+ * Until then, this function will simply return true of the screen is off.
+ */
+ public boolean isScreenReallyOff() {
+ return !mPowerManager.isScreenOn();
+ }
+
+ /**
* @return true if this device supports the "proximity sensor
* auto-lock" feature while in-call (see updateProximitySensorMode()).
*/
private boolean proximitySensorModeEnabled() {
- // TODO(klp): Do we disable notification's expanded view when app is in foreground and
+ // TODO: Do we disable notification's expanded view when app is in foreground and
// proximity sensor is on? Is it even possible to do this any more?
return (mProximityWakeLock != null);
}
@@ -216,8 +225,9 @@
.add("keybrd", mIsHardKeyboardOpen ? 1 : 0)
.add("dpad", mDialpadVisible ? 1 : 0)
.add("offhook", mIsPhoneOffhook ? 1 : 0)
- .add("aud", audioMode)
- .add("hor", horizontal ? 1 : 0).toString());
+ .add("hor", horizontal ? 1 : 0)
+ .add("ui", mUiShowing ? 1 : 0)
+ .add("aud", AudioMode.toString(audioMode)).toString());
if (mIsPhoneOffhook && !screenOnImmediately) {
final String logStr = "turning on proximity sensor: ";
diff --git a/InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java b/InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java
new file mode 100644
index 0000000..83feaf5
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2012 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.incallui;
+
+import android.view.MotionEvent;
+import android.view.View;
+
+/**
+ * OnTouchListener used to shrink the "hit target" of some onscreen buttons.
+ *
+ * We do this for a few specific buttons which are vulnerable to
+ * "false touches" because either (1) they're near the edge of the
+ * screen and might be unintentionally touched while holding the
+ * device in your hand, (2) they're in the upper corners and might
+ * be touched by the user's ear before the prox sensor has a chance to
+ * kick in, or (3) they are close to other buttons.
+ */
+public class SmallerHitTargetTouchListener implements View.OnTouchListener {
+ private static final String TAG = "SmallerHitTargetTouchListener";
+
+ /**
+ * Edge dimensions where a touch does not register an action (in DIP).
+ */
+ private static final int HIT_TARGET_EDGE_IGNORE_DP_X = 30;
+ private static final int HIT_TARGET_EDGE_IGNORE_DP_Y = 10;
+ private static final int HIT_TARGET_MIN_SIZE_DP_X = HIT_TARGET_EDGE_IGNORE_DP_X * 3;
+ private static final int HIT_TARGET_MIN_SIZE_DP_Y = HIT_TARGET_EDGE_IGNORE_DP_Y * 3;
+
+ // True if the most recent DOWN event was a "hit".
+ boolean mDownEventHit;
+
+ /**
+ * Called when a touch event is dispatched to a view. This allows listeners to
+ * get a chance to respond before the target view.
+ *
+ * @return True if the listener has consumed the event, false otherwise.
+ * (In other words, we return true when the touch is *outside*
+ * the "smaller hit target", which will prevent the actual
+ * button from handling these events.)
+ */
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ // if (DBG) log("SmallerHitTargetTouchListener: " + v + ", event " + event);
+
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ // Note that event.getX() and event.getY() are already
+ // translated into the View's coordinates. (In other words,
+ // "0,0" is a touch on the upper-left-most corner of the view.)
+ final int touchX = (int) event.getX();
+ final int touchY = (int) event.getY();
+
+ final int viewWidth = v.getWidth();
+ final int viewHeight = v.getHeight();
+
+ final float pixelDensity = v.getResources().getDisplayMetrics().density;
+ final int targetMinSizeX = (int) (HIT_TARGET_MIN_SIZE_DP_X * pixelDensity);
+ final int targetMinSizeY = (int) (HIT_TARGET_MIN_SIZE_DP_Y * pixelDensity);
+
+ int edgeIgnoreX = (int) (HIT_TARGET_EDGE_IGNORE_DP_X * pixelDensity);
+ int edgeIgnoreY = (int) (HIT_TARGET_EDGE_IGNORE_DP_Y * pixelDensity);
+
+ // If we are dealing with smaller buttons where the dead zone defined by
+ // HIT_TARGET_EDGE_IGNORE_DP_[X|Y] is too large.
+ if (viewWidth < targetMinSizeX || viewHeight < targetMinSizeY) {
+ // This really should not happen given our two use cases (as of this writing)
+ // in the call edge button and secondary calling card. However, we leave
+ // this is as a precautionary measure.
+ Log.w(TAG, "onTouch: view is too small for SmallerHitTargetTouchListener");
+ edgeIgnoreX = 0;
+ edgeIgnoreY = 0;
+ }
+
+ final int minTouchX = edgeIgnoreX;
+ final int maxTouchX = viewWidth - edgeIgnoreX;
+ final int minTouchY = edgeIgnoreY;
+ final int maxTouchY = viewHeight - edgeIgnoreY;
+
+ if (touchX < minTouchX || touchX > maxTouchX ||
+ touchY < minTouchY || touchY > maxTouchY) {
+ // Missed!
+ // if (DBG) log(" -> MISSED!");
+ mDownEventHit = false;
+ return true; // Consume this event; don't let the button see it
+ } else {
+ // Hit!
+ // if (DBG) log(" -> HIT!");
+ mDownEventHit = true;
+ return false; // Let this event through to the actual button
+ }
+ } else {
+ // This is a MOVE, UP or CANCEL event.
+ //
+ // We only do the "smaller hit target" check on DOWN events.
+ // For the subsequent MOVE/UP/CANCEL events, we let them
+ // through to the actual button IFF the previous DOWN event
+ // got through to the actual button (i.e. it was a "hit".)
+ return !mDownEventHit;
+ }
+ }
+}
diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
index b2593f9..1690c54 100644
--- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java
+++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
@@ -205,7 +205,7 @@
// back. However, it can happen much later. Before we continue, we need to make sure that
// the call being passed in is still the one we want to show in the notification.
final Call call = getCallToShow(CallList.getInstance());
- if (call.getCallId() != originalCall.getCallId()) {
+ if (call == null || call.getCallId() != originalCall.getCallId()) {
return;
}
@@ -251,8 +251,8 @@
// Add hang up option for any active calls (active | onhold), outgoing calls (dialing).
if (state == Call.State.ACTIVE ||
- state == Call.State.DIALING ||
- state == Call.State.ONHOLD) {
+ state == Call.State.ONHOLD ||
+ Call.State.isDialing(state)) {
addHangupAction(builder);
}
@@ -329,15 +329,24 @@
* Gets a large icon from the contact info object to display in the notification.
*/
private Bitmap getLargeIconToDisplay(ContactCacheEntry contactInfo, boolean isConference) {
+ Bitmap largeIcon = null;
if (isConference) {
- return BitmapFactory.decodeResource(mContext.getResources(),
+ largeIcon = BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.picture_conference);
}
if (contactInfo.photo != null && (contactInfo.photo instanceof BitmapDrawable)) {
- return ((BitmapDrawable) contactInfo.photo).getBitmap();
+ largeIcon = ((BitmapDrawable) contactInfo.photo).getBitmap();
}
- return null;
+ if (largeIcon != null) {
+ final int height = (int) mContext.getResources().getDimension(
+ android.R.dimen.notification_large_icon_height);
+ final int width = (int) mContext.getResources().getDimension(
+ android.R.dimen.notification_large_icon_width);
+ largeIcon = Bitmap.createScaledBitmap(largeIcon, width, height, false);
+ }
+
+ return largeIcon;
}
/**
@@ -370,7 +379,7 @@
} else if (call.getState() == Call.State.ONHOLD) {
resId = R.string.notification_on_hold;
- } else if (call.getState() == Call.State.DIALING) {
+ } else if (Call.State.isDialing(call.getState())) {
resId = R.string.notification_dialing;
}
diff --git a/InCallUI/src/com/android/incallui/service/PhoneNumberService.java b/InCallUI/src/com/android/incallui/service/PhoneNumberService.java
index 942bf42..24303cd 100644
--- a/InCallUI/src/com/android/incallui/service/PhoneNumberService.java
+++ b/InCallUI/src/com/android/incallui/service/PhoneNumberService.java
@@ -67,5 +67,6 @@
public String getPhoneLabel();
public String getNormalizedNumber();
public String getImageUrl();
+ public boolean isBusiness();
}
}
diff --git a/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java b/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java
index 3fc978a..a346ba5 100644
--- a/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java
+++ b/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java
@@ -48,7 +48,7 @@
/**
* This is a copy of com.android.internal.widget.multiwaveview.GlowPadView with minor changes
* to remove dependencies on private api's.
- *
+ *
* Incoporated the scaling functionality.
*
* A re-usable widget containing a center, outer ring and wave animation.
@@ -1114,9 +1114,9 @@
final float placementWidth = getRingWidth();
final float placementHeight = getRingHeight();
float newWaveCenterX = mHorizontalInset
- + Math.max(width, mMaxTargetWidth + placementWidth) / 2;
+ + (mMaxTargetWidth + placementWidth) / 2;
float newWaveCenterY = mVerticalInset
- + Math.max(height, + mMaxTargetHeight + placementHeight) / 2;
+ + (mMaxTargetHeight + placementHeight) / 2;
if (mInitialLayout) {
stopAndHideWaveAnimation();