summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--InCallUI/res/drawable-mdpi/ic_sound_off_speakerphone_holo_dark.pngbin996 -> 0 bytes
-rw-r--r--InCallUI/res/drawable-mdpi/ic_sound_speakerphone_holo_dark.pngbin1246 -> 0 bytes
-rw-r--r--InCallUI/res/drawable-xhdpi/ic_sound_off_speakerphone_holo_dark.pngbin1983 -> 0 bytes
-rw-r--r--InCallUI/res/drawable-xhdpi/ic_sound_speakerphone_holo_dark.pngbin2780 -> 0 bytes
-rw-r--r--InCallUI/res/drawable-xxhdpi/ic_sound_off_speakerphone_holo_dark.pngbin3549 -> 0 bytes
-rw-r--r--InCallUI/res/drawable-xxhdpi/ic_sound_speakerphone_holo_dark.pngbin4759 -> 0 bytes
-rw-r--r--InCallUI/res/layout-land/call_card_fragment.xml (renamed from InCallUI/res/layout-land/call_card_content.xml)28
-rw-r--r--InCallUI/res/layout/answer_fragment.xml7
-rw-r--r--InCallUI/res/layout/call_button_fragment.xml3
-rw-r--r--InCallUI/res/layout/call_card_fragment.xml (renamed from InCallUI/res/layout/call_card_content.xml)25
-rw-r--r--InCallUI/res/layout/conference_manager_fragment.xml4
-rw-r--r--InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml8
-rw-r--r--InCallUI/res/layout/incall_screen.xml17
-rw-r--r--InCallUI/res/layout/primary_call_info.xml9
-rw-r--r--InCallUI/res/values-af/strings.xml2
-rw-r--r--InCallUI/res/values-am/strings.xml14
-rw-r--r--InCallUI/res/values-ar/strings.xml2
-rw-r--r--InCallUI/res/values-az-rAZ/strings.xml25
-rw-r--r--InCallUI/res/values-bg/strings.xml2
-rw-r--r--InCallUI/res/values-bn-rBD/strings.xml2
-rw-r--r--InCallUI/res/values-ca/strings.xml2
-rw-r--r--InCallUI/res/values-cs/strings.xml4
-rw-r--r--InCallUI/res/values-da/strings.xml2
-rw-r--r--InCallUI/res/values-de/strings.xml2
-rw-r--r--InCallUI/res/values-el/strings.xml2
-rw-r--r--InCallUI/res/values-en-rAU/strings.xml153
-rw-r--r--InCallUI/res/values-en-rGB/strings.xml2
-rw-r--r--InCallUI/res/values-en-rIN/strings.xml2
-rw-r--r--InCallUI/res/values-es-rUS/strings.xml2
-rw-r--r--InCallUI/res/values-es/strings.xml2
-rw-r--r--InCallUI/res/values-et-rEE/strings.xml2
-rw-r--r--InCallUI/res/values-eu-rES/strings.xml2
-rw-r--r--InCallUI/res/values-fa/strings.xml2
-rw-r--r--InCallUI/res/values-fi/strings.xml2
-rw-r--r--InCallUI/res/values-fr-rCA/strings.xml2
-rw-r--r--InCallUI/res/values-fr/strings.xml2
-rw-r--r--InCallUI/res/values-gl-rES/strings.xml2
-rw-r--r--InCallUI/res/values-hi/strings.xml2
-rw-r--r--InCallUI/res/values-hr/strings.xml2
-rw-r--r--InCallUI/res/values-hu/strings.xml2
-rw-r--r--InCallUI/res/values-hy-rAM/strings.xml2
-rw-r--r--InCallUI/res/values-in/strings.xml2
-rw-r--r--InCallUI/res/values-is-rIS/strings.xml2
-rw-r--r--InCallUI/res/values-it/strings.xml2
-rw-r--r--InCallUI/res/values-iw/strings.xml2
-rw-r--r--InCallUI/res/values-ja/strings.xml2
-rw-r--r--InCallUI/res/values-ka-rGE/strings.xml2
-rw-r--r--InCallUI/res/values-kk-rKZ/strings.xml2
-rw-r--r--InCallUI/res/values-km-rKH/strings.xml2
-rw-r--r--InCallUI/res/values-kn-rIN/strings.xml2
-rw-r--r--InCallUI/res/values-ko/strings.xml2
-rw-r--r--InCallUI/res/values-ky-rKG/strings.xml2
-rw-r--r--InCallUI/res/values-lo-rLA/strings.xml2
-rw-r--r--InCallUI/res/values-lt/strings.xml2
-rw-r--r--InCallUI/res/values-lv/strings.xml2
-rw-r--r--InCallUI/res/values-mk-rMK/strings.xml2
-rw-r--r--InCallUI/res/values-ml-rIN/strings.xml2
-rw-r--r--InCallUI/res/values-mn-rMN/strings.xml2
-rw-r--r--InCallUI/res/values-mr-rIN/strings.xml2
-rw-r--r--InCallUI/res/values-ms-rMY/strings.xml2
-rw-r--r--InCallUI/res/values-my-rMM/strings.xml2
-rw-r--r--InCallUI/res/values-nb/strings.xml2
-rw-r--r--InCallUI/res/values-ne-rNP/strings.xml4
-rw-r--r--InCallUI/res/values-nl/strings.xml4
-rw-r--r--InCallUI/res/values-pl/strings.xml2
-rw-r--r--InCallUI/res/values-pt-rPT/strings.xml2
-rw-r--r--InCallUI/res/values-pt/strings.xml2
-rw-r--r--InCallUI/res/values-ro/strings.xml2
-rw-r--r--InCallUI/res/values-ru/strings.xml2
-rw-r--r--InCallUI/res/values-si-rLK/strings.xml2
-rw-r--r--InCallUI/res/values-sk/strings.xml2
-rw-r--r--InCallUI/res/values-sl/strings.xml2
-rw-r--r--InCallUI/res/values-sr/strings.xml2
-rw-r--r--InCallUI/res/values-sv/strings.xml2
-rw-r--r--InCallUI/res/values-sw/strings.xml2
-rw-r--r--InCallUI/res/values-ta-rIN/strings.xml2
-rw-r--r--InCallUI/res/values-te-rIN/strings.xml2
-rw-r--r--InCallUI/res/values-th/strings.xml4
-rw-r--r--InCallUI/res/values-tl/strings.xml2
-rw-r--r--InCallUI/res/values-tr/strings.xml2
-rw-r--r--InCallUI/res/values-uk/strings.xml2
-rw-r--r--InCallUI/res/values-ur-rPK/strings.xml2
-rw-r--r--InCallUI/res/values-uz-rUZ/strings.xml2
-rw-r--r--InCallUI/res/values-vi/strings.xml2
-rw-r--r--InCallUI/res/values-zh-rCN/strings.xml2
-rw-r--r--InCallUI/res/values-zh-rHK/strings.xml2
-rw-r--r--InCallUI/res/values-zh-rTW/strings.xml4
-rw-r--r--InCallUI/res/values-zu/strings.xml2
-rw-r--r--InCallUI/res/values/ids.xml1
-rw-r--r--InCallUI/res/values/styles.xml43
-rw-r--r--InCallUI/src/com/android/incallui/AccelerometerListener.java5
-rw-r--r--InCallUI/src/com/android/incallui/AnswerFragment.java12
-rw-r--r--InCallUI/src/com/android/incallui/AnswerPresenter.java109
-rw-r--r--InCallUI/src/com/android/incallui/AudioModeProvider.java2
-rw-r--r--InCallUI/src/com/android/incallui/BaseFragment.java13
-rw-r--r--InCallUI/src/com/android/incallui/Call.java48
-rw-r--r--InCallUI/src/com/android/incallui/CallButtonFragment.java6
-rw-r--r--InCallUI/src/com/android/incallui/CallCardFragment.java106
-rw-r--r--InCallUI/src/com/android/incallui/CallCardPresenter.java9
-rw-r--r--InCallUI/src/com/android/incallui/CircularRevealActivity.java169
-rw-r--r--InCallUI/src/com/android/incallui/CircularRevealFragment.java164
-rw-r--r--InCallUI/src/com/android/incallui/ConferenceManagerFragment.java32
-rw-r--r--InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java1
-rw-r--r--InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java2
-rw-r--r--InCallUI/src/com/android/incallui/DialpadFragment.java33
-rw-r--r--InCallUI/src/com/android/incallui/FragmentDisplayManager.java23
-rw-r--r--InCallUI/src/com/android/incallui/InCallActivity.java268
-rw-r--r--InCallUI/src/com/android/incallui/InCallPresenter.java230
-rw-r--r--InCallUI/src/com/android/incallui/InCallServiceImpl.java9
-rw-r--r--InCallUI/src/com/android/incallui/InCallUIMaterialColorMapUtils.java4
-rw-r--r--InCallUI/src/com/android/incallui/InCallVideoCallListener.java6
-rw-r--r--InCallUI/src/com/android/incallui/PostCharDialogFragment.java1
-rw-r--r--InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java114
-rw-r--r--InCallUI/src/com/android/incallui/StatusBarNotifier.java3
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallFragment.java58
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallPresenter.java14
-rw-r--r--InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java2
-rw-r--r--InCallUI/src/com/android/incallui/widget/multiwaveview/PointCloud.java15
-rw-r--r--InCallUI/tests/src/com/android/incallui/CallerInfoUtilsTest.java29
-rw-r--r--InCallUI/tests/src/com/android/incallui/InCallPresenterTest.java213
120 files changed, 1305 insertions, 884 deletions
diff --git a/InCallUI/res/drawable-mdpi/ic_sound_off_speakerphone_holo_dark.png b/InCallUI/res/drawable-mdpi/ic_sound_off_speakerphone_holo_dark.png
deleted file mode 100644
index adaff6052..000000000
--- a/InCallUI/res/drawable-mdpi/ic_sound_off_speakerphone_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/ic_sound_speakerphone_holo_dark.png b/InCallUI/res/drawable-mdpi/ic_sound_speakerphone_holo_dark.png
deleted file mode 100644
index 2b9600b7f..000000000
--- a/InCallUI/res/drawable-mdpi/ic_sound_speakerphone_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/ic_sound_off_speakerphone_holo_dark.png b/InCallUI/res/drawable-xhdpi/ic_sound_off_speakerphone_holo_dark.png
deleted file mode 100644
index 98a449fde..000000000
--- a/InCallUI/res/drawable-xhdpi/ic_sound_off_speakerphone_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/ic_sound_speakerphone_holo_dark.png b/InCallUI/res/drawable-xhdpi/ic_sound_speakerphone_holo_dark.png
deleted file mode 100644
index 71aad9759..000000000
--- a/InCallUI/res/drawable-xhdpi/ic_sound_speakerphone_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/ic_sound_off_speakerphone_holo_dark.png b/InCallUI/res/drawable-xxhdpi/ic_sound_off_speakerphone_holo_dark.png
deleted file mode 100644
index caf36e02a..000000000
--- a/InCallUI/res/drawable-xxhdpi/ic_sound_off_speakerphone_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/ic_sound_speakerphone_holo_dark.png b/InCallUI/res/drawable-xxhdpi/ic_sound_speakerphone_holo_dark.png
deleted file mode 100644
index e6e974f8b..000000000
--- a/InCallUI/res/drawable-xxhdpi/ic_sound_speakerphone_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/layout-land/call_card_content.xml b/InCallUI/res/layout-land/call_card_fragment.xml
index 496b6b399..aa04840c1 100644
--- a/InCallUI/res/layout-land/call_card_content.xml
+++ b/InCallUI/res/layout-land/call_card_fragment.xml
@@ -18,7 +18,9 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent" >
+ android:layout_height="match_parent"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentStart="true" >
<LinearLayout
android:id="@+id/primary_call_info_container"
@@ -37,7 +39,7 @@
<fragment android:name="com.android.incallui.CallButtonFragment"
android:id="@+id/callButtonFragment"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
@@ -66,6 +68,14 @@
android:background="@android:color/white"
android:src="@drawable/img_no_image_automirrored" />
+ <fragment android:name="com.android.incallui.VideoCallFragment"
+ android:id="@+id/videoCallFragment"
+ android:layout_alignParentTop="true"
+ android:layout_gravity="top|center_horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone" />
+
<include layout="@layout/manage_conference_call_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -91,25 +101,15 @@
android:indeterminate="true" />
</FrameLayout>
- <!-- Placeholder for the dialpad which is replaced with the dialpad fragment when shown. -->
+ <!-- Placeholder for various fragments that are added dynamically underneath the caller info. -->
<FrameLayout
- android:id="@+id/dialpadFragmentContainer"
+ android:id="@+id/answer_and_dialpad_container"
android:layout_toEndOf="@id/primary_call_info_container"
android:layout_gravity="end|center_vertical"
android:layout_alignParentEnd="true"
android:layout_width="match_parent"
android:layout_height="match_parent" />
- <fragment android:name="com.android.incallui.AnswerFragment"
- android:id="@+id/answerFragment"
- android:layout_toEndOf="@id/primary_call_info_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="start"
- android:layout_gravity="end|center_vertical"
- android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
- android:visibility="gone" />
-
<FrameLayout
android:id="@+id/floating_end_call_action_button_container"
android:layout_width="@dimen/end_call_floating_action_button_diameter"
diff --git a/InCallUI/res/layout/answer_fragment.xml b/InCallUI/res/layout/answer_fragment.xml
index 7026dd13c..ec6ef30ac 100644
--- a/InCallUI/res/layout/answer_fragment.xml
+++ b/InCallUI/res/layout/answer_fragment.xml
@@ -15,18 +15,17 @@
~ limitations under the License
-->
-<!-- TODO(klp): move out to separate file -->
<com.android.incallui.GlowPadWrapper
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dc="http://schemas.android.com/apk/res-auto"
android:id="@+id/glow_pad_view"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:focusable="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:background="@color/glowpad_background_color"
- android:visibility="gone"
+ android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
dc:targetDrawables="@array/incoming_call_widget_audio_with_sms_targets"
dc:targetDescriptions="@array/incoming_call_widget_audio_with_sms_target_descriptions"
diff --git a/InCallUI/res/layout/call_button_fragment.xml b/InCallUI/res/layout/call_button_fragment.xml
index e8feca68a..18906dda2 100644
--- a/InCallUI/res/layout/call_button_fragment.xml
+++ b/InCallUI/res/layout/call_button_fragment.xml
@@ -38,8 +38,7 @@
android:background="@color/button_background_color"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:animateLayoutChanges="true"
- android:visibility="invisible" >
+ android:animateLayoutChanges="true" >
<LinearLayout
android:orientation="horizontal"
diff --git a/InCallUI/res/layout/call_card_content.xml b/InCallUI/res/layout/call_card_fragment.xml
index 7a42586ea..17906f730 100644
--- a/InCallUI/res/layout/call_card_content.xml
+++ b/InCallUI/res/layout/call_card_fragment.xml
@@ -18,7 +18,9 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentStart="true">
<!-- The main content of the CallCard is either one or two "call info"
blocks, depending on whether one or two lines are in use.
@@ -98,9 +100,17 @@
android:layout_height="wrap_content"
android:layout_alignTop="@id/photo" />
- <!-- Placeholder for the dialpad which is replaced with the dialpad fragment when shown. -->
+ <fragment android:name="com.android.incallui.VideoCallFragment"
+ android:layout_alignParentStart="true"
+ android:layout_gravity="start|center_vertical"
+ android:id="@+id/videoCallFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone" />
+
+ <!-- Placeholder for various fragments that are added dynamically underneath the caller info. -->
<FrameLayout
- android:id="@+id/dialpadFragmentContainer"
+ android:id="@+id/answer_and_dialpad_container"
android:layout_below="@id/primary_call_info_container"
android:layout_gravity="bottom|center_horizontal"
android:layout_alignParentBottom="true"
@@ -108,15 +118,6 @@
android:layout_height="match_parent"
android:elevation="@dimen/dialpad_elevation" />
- <fragment android:name="com.android.incallui.AnswerFragment"
- android:id="@+id/answerFragment"
- android:layout_below="@id/primary_call_info_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="bottom|center_horizontal"
- android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
- android:visibility="gone" />
-
<FrameLayout
android:id="@+id/floating_end_call_action_button_container"
android:layout_width="@dimen/end_call_floating_action_button_diameter"
diff --git a/InCallUI/res/layout/conference_manager_fragment.xml b/InCallUI/res/layout/conference_manager_fragment.xml
index 8e55ad762..7350bee14 100644
--- a/InCallUI/res/layout/conference_manager_fragment.xml
+++ b/InCallUI/res/layout/conference_manager_fragment.xml
@@ -22,9 +22,7 @@
android:background="@color/conference_call_manager_background_color"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="@dimen/conference_call_manager_padding_top"
- android:visibility="gone">
-
+ android:paddingTop="@dimen/conference_call_manager_padding_top" >
<!-- List of conference participants. -->
<ListView
android:id="@+id/participantList"
diff --git a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
index efd698286..b567dbbf2 100644
--- a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
+++ b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
@@ -20,11 +20,5 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
-
- <view class="com.android.incallui.DialpadFragment$HoverIgnoringLinearLayout"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <include layout="@layout/dialpad_view"/>
- </view>
+ <include layout="@layout/dialpad_view"/>
</view>
diff --git a/InCallUI/res/layout/incall_screen.xml b/InCallUI/res/layout/incall_screen.xml
index 9f7569574..d46778c1c 100644
--- a/InCallUI/res/layout/incall_screen.xml
+++ b/InCallUI/res/layout/incall_screen.xml
@@ -19,21 +19,4 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main" >
-
- <fragment android:name="com.android.incallui.CallCardFragment"
- android:id="@+id/callCardFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true" />
-
- <fragment android:name="com.android.incallui.ConferenceManagerFragment"
- android:id="@+id/conferenceManagerFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- android:layout_alignParentEnd="true" />
-
</FrameLayout>
diff --git a/InCallUI/res/layout/primary_call_info.xml b/InCallUI/res/layout/primary_call_info.xml
index 8f0c0e24d..9f92b07e7 100644
--- a/InCallUI/res/layout/primary_call_info.xml
+++ b/InCallUI/res/layout/primary_call_info.xml
@@ -117,7 +117,8 @@
android:textColor="@color/incall_call_banner_subtext_color"
android:textSize="@dimen/call_label_text_size"
android:singleLine="true"
- android:textDirection="ltr" />
+ android:textDirection="ltr"
+ android:visibility="gone" />
<TextView android:id="@+id/phoneNumber"
android:layout_width="match_parent"
@@ -126,7 +127,8 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/incall_call_banner_subtext_color"
android:textSize="@dimen/call_label_text_size"
- android:singleLine="true" />
+ android:singleLine="true"
+ android:visibility="gone" />
</LinearLayout>
@@ -152,6 +154,7 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/incall_call_banner_text_color"
android:maxLines="1"
- android:ellipsize="end" />
+ android:ellipsize="end"
+ android:visibility="gone" />
</LinearLayout> <!-- End of call_banner -->
diff --git a/InCallUI/res/values-af/strings.xml b/InCallUI/res/values-af/strings.xml
index fc27060fd..5d798f630 100644
--- a/InCallUI/res/values-af/strings.xml
+++ b/InCallUI/res/values-af/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> gemiste oproepe"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Gemiste oproep van <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Oproep aan die gang"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Voortdurende Wi-Fi-oproep"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Hou aan"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Inkomende oproep"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Inkomende Wi-Fi-oproep"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Inkomende video-oproep"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Inkomende videoversoek"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nuwe stemboodskap"</string>
diff --git a/InCallUI/res/values-am/strings.xml b/InCallUI/res/values-am/strings.xml
index 982a65f15..42e482f79 100644
--- a/InCallUI/res/values-am/strings.xml
+++ b/InCallUI/res/values-am/strings.xml
@@ -45,9 +45,9 @@
<string name="card_title_hanging_up" msgid="3999101620995182450">"በመዝጋት ላይ"</string>
<string name="card_title_in_call" msgid="6346543933068225205">"ጥሪ ላይ"</string>
<string name="card_title_my_phone_number" msgid="112428362494434191">"ቁጥሬ<xliff:g id="MY_PHONE_NUMBER">%s</xliff:g> ነው"</string>
- <string name="card_title_video_call_connecting" msgid="297586766381973954">"ቪዲዮ በማገናኘት ላይ"</string>
+ <string name="card_title_video_call_connecting" msgid="297586766381973954">"ቪድዮ በማገናኘት ላይ"</string>
<string name="card_title_video_call" msgid="5898636679563320218">"የቪዲዮ ጥሪ"</string>
- <string name="card_title_video_call_requesting" msgid="4587504939739340937">"ቪዲዮ በመጠየቅ ላይ"</string>
+ <string name="card_title_video_call_requesting" msgid="4587504939739340937">"ቪድዮ በመጠየቅ ላይ"</string>
<string name="card_title_video_call_error" msgid="9000555878389539225">"የቪዲዮ ጥሪን ማገናኘት አልተቻለም"</string>
<string name="card_title_callback_number" msgid="7307938207564217293">"የእርስዎ የመልሶ መደወያ ቁጥር\n <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
<string name="card_title_callback_number_emergency" msgid="8634765419223426754">"የእርስዎ የድንገተኛ አደጋ መልሶ መደወያ ቁጥር\n <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ያመለጡ ጥሪዎች"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"ከ<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> ያመለጠ ጥሪ"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"እየተካሄደ ያለ ጥሪ"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"በሂደት ላይ ያለ የWi-Fi ጥሪ"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"ያዝናቆይ"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ገቢ ጥሪ"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"ገቢ የWi-Fi ጥሪ"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ገቢ የቪዲዮ ጥሪ"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"ገቢ የቪዲዮ ጥያቄ"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"አዲስ የድምፅ መልዕክት"</string>
@@ -69,10 +71,10 @@
<string name="notification_network_selection_text" msgid="2607085729661923269">"የተመረጠ አውታረመረብ(<xliff:g id="OPERATOR_NAME">%s</xliff:g>) የለም"</string>
<string name="notification_action_answer" msgid="6700362365135365143">"መልስ"</string>
<string name="notification_action_end_call" msgid="6069460915123531620">"ዝጋ"</string>
- <string name="notification_action_answer_video" msgid="7809271910870211729">"ቪዲዮ"</string>
+ <string name="notification_action_answer_video" msgid="7809271910870211729">"ቪድዮ"</string>
<string name="notification_action_answer_voice" msgid="1770796916369437773">"ድምፅ"</string>
<string name="notification_action_accept" msgid="2898609801209468429">"ተቀበል"</string>
- <string name="notification_action_dismiss" msgid="2679969397930852858">"ያጥፉ"</string>
+ <string name="notification_action_dismiss" msgid="2679969397930852858">"አሰናብት"</string>
<string name="notification_missedCall_call_back" msgid="2684890353590890187">"መልሰህ ደውል"</string>
<string name="notification_missedCall_message" msgid="3049928912736917988">"መልዕክት"</string>
<string name="incall_error_power_off" msgid="6550191216405193368">"ለመደወል፣ መጀመሪያየአውሮፕላኑን ሁነታ አጥፋ።"</string>
@@ -113,7 +115,7 @@
<string name="onscreenVideoCallText" msgid="4800924186056115442">"የቪዲዮ ጥሪ"</string>
<string name="onscreenChangeToVoiceText" msgid="5311407863653867937">"ወደ ድምጽ ጥሪ ይለውጡ"</string>
<string name="onscreenSwitchCameraText" msgid="5324543493442787798">"ካሜራ ቀይር"</string>
- <string name="onscreenPauseVideoText" msgid="5663965924921429203">"ቪዲዮ ለአፍታ አቁም"</string>
+ <string name="onscreenPauseVideoText" msgid="5663965924921429203">"ቪድዮ ለአፍታ አቁም"</string>
<string name="onscreenOverflowText" msgid="2702376562345723132">"ተጨማሪ አማራጮች"</string>
<string name="voicemail_provider" msgid="5135942703327136909">"አገልግሎት"</string>
<string name="voicemail_settings" msgid="72448049107749316">"አዋቅር"</string>
@@ -130,7 +132,7 @@
<string name="description_target_answer" msgid="7205604197797472471">"መልስ"</string>
<string name="description_target_send_sms" msgid="2098326025587950144">"SMS ላክ"</string>
<string name="description_target_decline" msgid="4789834364389731957">"አትቀበል"</string>
- <string name="description_target_answer_video_call" msgid="3495965588512395026">"እንደ ቪዲዮ ጥሪ ይመልሱ"</string>
+ <string name="description_target_answer_video_call" msgid="3495965588512395026">"እንደ ቪድዮ ጥሪ ይመልሱ"</string>
<string name="description_target_answer_audio_call" msgid="8396296303320994450">"እንደ ድምጽ ጥሪ ይመልሱ"</string>
<string name="description_target_accept_upgrade_to_video_request" msgid="2894072808324604062">"የቪዲዮ ጥያቄ ተቀበል"</string>
<string name="description_target_decline_upgrade_to_video_request" msgid="4093888612888538776">"የቪዲዮ ጥያቄ አትቀበል"</string>
diff --git a/InCallUI/res/values-ar/strings.xml b/InCallUI/res/values-ar/strings.xml
index 36e5e1986..ce04dc85f 100644
--- a/InCallUI/res/values-ar/strings.xml
+++ b/InCallUI/res/values-ar/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> من المكالمات الفائتة"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"مكالمة فائتة من <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"مكالمة حالية"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"‏اتصال جارٍ عبر Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"معلقة"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"مكالمة واردة"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"‏اتصال وارد عبر Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"مكالمة فيديو واردة"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"طلب فيديو وارد"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"بريد صوتي جديد"</string>
diff --git a/InCallUI/res/values-az-rAZ/strings.xml b/InCallUI/res/values-az-rAZ/strings.xml
index 5f8946b3a..1690af845 100644
--- a/InCallUI/res/values-az-rAZ/strings.xml
+++ b/InCallUI/res/values-az-rAZ/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<!--
~ Copyright (C) 2013 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
@@ -121,33 +121,10 @@
<string name="contactPhoto" msgid="4713193418046639466">"kontakt fotosu"</string>
<string name="goPrivate" msgid="865837794424530980">"şəxsi rejimə keçin"</string>
<string name="selectContact" msgid="781975788478987237">"kontakt seçin"</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"İndi danışmaq olmur. Nə olub?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Özüm zəng edəcəm."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Özüm sonra zəng edəcəm."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"İndi danışa bilmirəm. Sonra zəng edin."</string>
<string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Özünüzünkünü yazın"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Tez cavablar"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Tez cavablara düzəliş edin"</string>
- <string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
- <string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Tez cavab"</string>
- <string name="respond_via_sms_menu_reset_default_activity" msgid="1461742052902053466">"Defolt tətbiqləri sıfırla"</string>
- <string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mesaj <xliff:g id="PHONE_NUMBER">%s</xliff:g> nömrəsinə göndərildi."</string>
- <string name="description_image_button_one" msgid="5502718871331943463">"bir"</string>
- <string name="description_image_button_two" msgid="4903738528222924522">"iki"</string>
- <string name="description_image_button_three" msgid="5570985408463782329">"üç"</string>
- <string name="description_image_button_four" msgid="1697520001239289074">"dörd"</string>
- <string name="description_image_button_five" msgid="3450276493026943454">"beş"</string>
- <string name="description_image_button_six" msgid="2070376172268675300">"altı"</string>
- <string name="description_image_button_seven" msgid="1757351311199993371">"yeddi"</string>
- <string name="description_image_button_eight" msgid="4734693919020613227">"səkkiz"</string>
- <string name="description_image_button_nine" msgid="5568534122590597040">"doqquz"</string>
- <string name="description_image_button_star" msgid="1976280813017254462">"ulduz"</string>
- <string name="description_image_button_zero" msgid="4211255756866893605">"sıfır"</string>
- <string name="description_image_button_pound" msgid="1716041284529917866">"funt"</string>
<string name="description_dial_button" msgid="7459705245418435351">"Yığ"</string>
<string name="description_delete_button" msgid="4015842181592283903">"geri düyməsi"</string>
- <string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Spikerfon aktivdir."</string>
- <string name="accessibility_call_muted" msgid="2776111226185342220">"Səssiz zəng edin."</string>
<string name="description_target_answer" msgid="7205604197797472471">"Cavab"</string>
<string name="description_target_send_sms" msgid="2098326025587950144">"SMS göndər"</string>
<string name="description_target_decline" msgid="4789834364389731957">"Rədd et"</string>
diff --git a/InCallUI/res/values-bg/strings.xml b/InCallUI/res/values-bg/strings.xml
index 208a27b30..aafc57423 100644
--- a/InCallUI/res/values-bg/strings.xml
+++ b/InCallUI/res/values-bg/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> пропуснати обаждания"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Пропуснато обаждане от <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Текущо обаждане"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Текущо обаждане през Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Задържане на обаждането"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Входящо обаждане"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Входящо обаждане през Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Входящо видеообаждане"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Входяща заявка за видеовръзка"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Нова гласова поща"</string>
diff --git a/InCallUI/res/values-bn-rBD/strings.xml b/InCallUI/res/values-bn-rBD/strings.xml
index c7fce65aa..4d7fa57b8 100644
--- a/InCallUI/res/values-bn-rBD/strings.xml
+++ b/InCallUI/res/values-bn-rBD/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>টি মিসড কল"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> এর থেকে মিসড কল"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"চালু থাকা কল"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"চলমান Wi-Fi কল"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"সাময়িকভাবে স্থগিত রাখা হয়েছে"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ইনকামিং কল"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"আগত Wi-Fi কল"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ইনকামিং ভিডিও কল"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"আগত ভিডিও অনুরোধ"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"নতুন ভয়েসমেল"</string>
diff --git a/InCallUI/res/values-ca/strings.xml b/InCallUI/res/values-ca/strings.xml
index 7058a3754..443fc96f5 100644
--- a/InCallUI/res/values-ca/strings.xml
+++ b/InCallUI/res/values-ca/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> trucades perdudes"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Trucada perduda de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Trucada en procés"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Trucada Wi-Fi en curs"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"En espera"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Trucada entrant"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Trucada Wi-Fi entrant"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Videotrucada entrant"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Sol·licitud de vídeo entrant"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Correu de veu nou"</string>
diff --git a/InCallUI/res/values-cs/strings.xml b/InCallUI/res/values-cs/strings.xml
index 57135e186..4dfbce8c5 100644
--- a/InCallUI/res/values-cs/strings.xml
+++ b/InCallUI/res/values-cs/strings.xml
@@ -42,7 +42,7 @@
<string name="card_title_incoming_call" msgid="7364539451234646909">"Příchozí hovor"</string>
<string name="card_title_call_ended" msgid="5544730338889702298">"Hovor ukončen"</string>
<string name="card_title_on_hold" msgid="821463117892339942">"Přidržený hovor"</string>
- <string name="card_title_hanging_up" msgid="3999101620995182450">"Zavěšování"</string>
+ <string name="card_title_hanging_up" msgid="3999101620995182450">"Ukončování hovoru"</string>
<string name="card_title_in_call" msgid="6346543933068225205">"Probíhá hovor"</string>
<string name="card_title_my_phone_number" msgid="112428362494434191">"Moje číslo je <xliff:g id="MY_PHONE_NUMBER">%s</xliff:g>"</string>
<string name="card_title_video_call_connecting" msgid="297586766381973954">"Navazování spojení pro video"</string>
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"Zmeškané hovory: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>."</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Zmeškaný hovor od volajícího <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>."</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Probíhající hovor"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Probíhající volání přes Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Přidržený hovor"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Příchozí hovor"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Příchozí volání přes Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Příchozí videohovor"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Příchozí žádost o videohovor"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nová hlasová zpráva"</string>
diff --git a/InCallUI/res/values-da/strings.xml b/InCallUI/res/values-da/strings.xml
index bf7c62f9b..dc6fea772 100644
--- a/InCallUI/res/values-da/strings.xml
+++ b/InCallUI/res/values-da/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ubesvarede opkald"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Ubesvarede opkald fra <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Igangværende opkald"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Igangværende opkald via Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Ventende"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Indgående opkald"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Indgående opkald via Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Indgående videoopkald"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Indgående videoanmodning"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Ny telefonsvarerbesked"</string>
diff --git a/InCallUI/res/values-de/strings.xml b/InCallUI/res/values-de/strings.xml
index 8d4f04410..7349e5c69 100644
--- a/InCallUI/res/values-de/strings.xml
+++ b/InCallUI/res/values-de/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> entgangene Anrufe"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Entgangener Anruf von <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Aktueller Anruf"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Aktiver WLAN-Anruf"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Gehaltener Anruf"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Eingehender Anruf"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Eingehender WLAN-Anruf"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Eingehender Videoanruf"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Eingehende Videoanfrage"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Neue Nachricht"</string>
diff --git a/InCallUI/res/values-el/strings.xml b/InCallUI/res/values-el/strings.xml
index e668ddf93..a236fa58c 100644
--- a/InCallUI/res/values-el/strings.xml
+++ b/InCallUI/res/values-el/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> αναπάντητες κλήσεις"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Αναπάντητη κλήση από <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Κλήση σε εξέλιξη"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Κλήση Wi-Fi σε εξέλιξη"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Σε αναμονή"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Εισερχόμενη κλήση"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Εισερχόμενη κλήση μέσω Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Εισερχόμενη βιντεοκλήση"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Αίτημα εισερχόμενου βίντεο"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Νέο μήνυμα στον αυτόματο τηλεφωνητή"</string>
diff --git a/InCallUI/res/values-en-rAU/strings.xml b/InCallUI/res/values-en-rAU/strings.xml
new file mode 100644
index 000000000..e68ff2fb4
--- /dev/null
+++ b/InCallUI/res/values-en-rAU/strings.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2013 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="phoneAppLabel" product="default" msgid="906161039445636857">"Phone"</string>
+ <string name="onHold" msgid="9035493194749959955">"On hold"</string>
+ <string name="unknown" msgid="6878797917991465859">"Unknown"</string>
+ <string name="private_num" msgid="6713286113000232309">"Private number"</string>
+ <string name="payphone" msgid="4793877574636445118">"Payphone"</string>
+ <string name="confCall" msgid="1904840547188336828">"Conference call"</string>
+ <string name="call_lost" msgid="6183862117003999578">"Call dropped"</string>
+ <string name="audio_mode_speaker" msgid="27649582100085266">"Speaker"</string>
+ <string name="audio_mode_earpiece" msgid="4156527186373869107">"Handset earpiece"</string>
+ <string name="audio_mode_wired_headset" msgid="1465350758489175975">"Wired headset"</string>
+ <string name="audio_mode_bluetooth" msgid="3047641300848211128">"Bluetooth"</string>
+ <string name="wait_prompt_str" msgid="7601815427707856238">"Send the following tones?\n"</string>
+ <string name="pause_prompt_str" msgid="1789964702154314806">"Sending tones\n"</string>
+ <string name="send_button" msgid="4106860097497818751">"Send"</string>
+ <string name="pause_prompt_yes" msgid="3564467212025151797">"Yes"</string>
+ <string name="pause_prompt_no" msgid="6686238803236884877">"No"</string>
+ <string name="wild_prompt_str" msgid="5543521676355533577">"Replace wild character with"</string>
+ <string name="caller_manage_header" msgid="3231519674734638786">"Conference call <xliff:g id="CONF_CALL_TIME">%s</xliff:g>"</string>
+ <string name="voicemail_settings_number_label" msgid="8524164258691887790">"Voicemail number"</string>
+ <string name="card_title_dialing" msgid="5769417478498348054">"Dialling"</string>
+ <string name="card_title_redialing" msgid="8253487008234167266">"Redialling"</string>
+ <string name="card_title_conf_call" msgid="1162980346189744501">"Conference call"</string>
+ <string name="card_title_incoming_call" msgid="7364539451234646909">"Incoming call"</string>
+ <string name="card_title_call_ended" msgid="5544730338889702298">"Call ended"</string>
+ <string name="card_title_on_hold" msgid="821463117892339942">"On hold"</string>
+ <string name="card_title_hanging_up" msgid="3999101620995182450">"Hanging up"</string>
+ <string name="card_title_in_call" msgid="6346543933068225205">"In call"</string>
+ <string name="card_title_my_phone_number" msgid="112428362494434191">"My number is <xliff:g id="MY_PHONE_NUMBER">%s</xliff:g>"</string>
+ <string name="card_title_video_call_connecting" msgid="297586766381973954">"Connecting video"</string>
+ <string name="card_title_video_call" msgid="5898636679563320218">"Video call"</string>
+ <string name="card_title_video_call_requesting" msgid="4587504939739340937">"Requesting video"</string>
+ <string name="card_title_video_call_error" msgid="9000555878389539225">"Can\'t connect video call"</string>
+ <string name="card_title_callback_number" msgid="7307938207564217293">"Your callback number\n <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
+ <string name="card_title_callback_number_emergency" msgid="8634765419223426754">"Your emergency callback number\n <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
+ <string name="notification_dialing" msgid="2107666444937350731">"Dialling"</string>
+ <string name="notification_missedCallTitle" msgid="7554385905572364535">"Missed call"</string>
+ <string name="notification_missedCallsTitle" msgid="1361677948941502522">"Missed calls"</string>
+ <string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> missed calls"</string>
+ <string name="notification_missedCallTicker" msgid="504686252427747209">"Missed call from <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
+ <string name="notification_ongoing_call" msgid="7068688957273482989">"On-going call"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ongoing Wi-Fi call"</string>
+ <string name="notification_on_hold" msgid="3480694969511790465">"On hold"</string>
+ <string name="notification_incoming_call" msgid="2820429205043529642">"Incoming call"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Incoming Wi-Fi call"</string>
+ <string name="notification_incoming_video_call" msgid="7356836933934464805">"Incoming video call"</string>
+ <string name="notification_requesting_video_call" msgid="1405576812892369451">"Incoming video request"</string>
+ <string name="notification_voicemail_title" msgid="8933468752045550523">"New voicemail"</string>
+ <string name="notification_voicemail_title_count" msgid="4366360747660929916">"New voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
+ <string name="notification_voicemail_text_format" msgid="4447323569453981685">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="760963466895609716">"Voicemail number unknown"</string>
+ <string name="notification_network_selection_title" msgid="4224455487793492772">"No service"</string>
+ <string name="notification_network_selection_text" msgid="2607085729661923269">"Selected network (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) unavailable"</string>
+ <string name="notification_action_answer" msgid="6700362365135365143">"Answer"</string>
+ <string name="notification_action_end_call" msgid="6069460915123531620">"Hang up"</string>
+ <string name="notification_action_answer_video" msgid="7809271910870211729">"In-stream video"</string>
+ <string name="notification_action_answer_voice" msgid="1770796916369437773">"Voice"</string>
+ <string name="notification_action_accept" msgid="2898609801209468429">"Accept"</string>
+ <string name="notification_action_dismiss" msgid="2679969397930852858">"Dismiss"</string>
+ <string name="notification_missedCall_call_back" msgid="2684890353590890187">"Call back"</string>
+ <string name="notification_missedCall_message" msgid="3049928912736917988">"Message"</string>
+ <string name="incall_error_power_off" msgid="6550191216405193368">"To place a call, first turn off Aeroplane mode."</string>
+ <string name="incall_error_emergency_only" msgid="4678640422710818317">"Not registered on network."</string>
+ <string name="incall_error_out_of_service" msgid="4100065333878929223">"Mobile network not available."</string>
+ <string name="incall_error_no_phone_number_supplied" msgid="1150414018684246528">"To place a call, enter a valid number."</string>
+ <string name="incall_error_call_failed" msgid="6302746943230078197">"Can\'t call."</string>
+ <string name="incall_status_dialed_mmi" msgid="3672498861336189563">"Starting MMI sequence…"</string>
+ <string name="incall_error_supp_service_unknown" msgid="323435289607131929">"Service not supported."</string>
+ <string name="incall_error_supp_service_switch" msgid="5237002176899962862">"Can\'t switch calls."</string>
+ <string name="incall_error_supp_service_separate" msgid="7224393405134545246">"Can\'t separate call."</string>
+ <string name="incall_error_supp_service_transfer" msgid="7235952238189391438">"Can\'t transfer."</string>
+ <string name="incall_error_supp_service_conference" msgid="7010354362202271726">"Can\'t conference."</string>
+ <string name="incall_error_supp_service_reject" msgid="8998568661508655638">"Can\'t reject call."</string>
+ <string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Can\'t release call(s)."</string>
+ <string name="incall_call_type_label_sip" msgid="4931428719494190371">"SIP call"</string>
+ <string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Emergency call"</string>
+ <string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Turning on radio…"</string>
+ <string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"No service. Trying again…"</string>
+ <string name="dial_emergency_error" msgid="1509085166367420355">"Can\'t call. <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> is not an emergency number."</string>
+ <string name="dial_emergency_empty_error" msgid="9130194953830414638">"Can\'t call. Dial an emergency number."</string>
+ <string name="dialerKeyboardHintText" msgid="9192914825413747792">"Use keyboard to dial"</string>
+ <string name="overflowHoldMenuItemText" msgid="7382457697092158039">"Hold call"</string>
+ <string name="overflowResumeMenuItemText" msgid="8826360006222366843">"Resume call"</string>
+ <string name="overflowAddMenuItemText" msgid="5605615101930811453">"Add call"</string>
+ <string name="overflowMergeMenuItemText" msgid="6305762210377655389">"Merge calls"</string>
+ <string name="overflowSwapMenuItemText" msgid="6603717809137071603">"Swap calls"</string>
+ <string name="onscreenHoldText" msgid="2285258239691145872">"Hold"</string>
+ <string name="onscreenEndCallText" msgid="4403855834875398585">"End"</string>
+ <string name="onscreenShowDialpadText" msgid="8561805492659639893">"Dial pad"</string>
+ <string name="onscreenMuteText" msgid="5011369181754261374">"Mute"</string>
+ <string name="onscreenAddCallText" msgid="5140385634712287403">"Add call"</string>
+ <string name="onscreenMergeCallsText" msgid="6640195098064538950">"Merge calls"</string>
+ <string name="onscreenSwapCallsText" msgid="1602990689244030047">"Swap"</string>
+ <string name="onscreenManageCallsText" msgid="5473231160123254154">"Manage calls"</string>
+ <string name="onscreenManageConferenceText" msgid="6801708317570467407">"Manage conference call"</string>
+ <string name="onscreenAudioText" msgid="1710087112800041743">"Audio"</string>
+ <string name="onscreenVideoCallText" msgid="4800924186056115442">"Video call"</string>
+ <string name="onscreenChangeToVoiceText" msgid="5311407863653867937">"Change to voice call"</string>
+ <string name="onscreenSwitchCameraText" msgid="5324543493442787798">"Switch camera"</string>
+ <string name="onscreenPauseVideoText" msgid="5663965924921429203">"Pause video"</string>
+ <string name="onscreenOverflowText" msgid="2702376562345723132">"More options"</string>
+ <string name="voicemail_provider" msgid="5135942703327136909">"Service"</string>
+ <string name="voicemail_settings" msgid="72448049107749316">"Setup"</string>
+ <string name="voicemail_number_not_set" msgid="6724904736891087856">"&lt;Not set&gt;"</string>
+ <string name="other_settings" msgid="3672912580359716394">"Other call settings"</string>
+ <string name="calling_via_template" msgid="4839419581866928142">"Calling via <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
+ <string name="incoming_via_template" msgid="1696993226115570960">"Incoming via <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
+ <string name="contactPhoto" msgid="4713193418046639466">"contact photo"</string>
+ <string name="goPrivate" msgid="865837794424530980">"go private"</string>
+ <string name="selectContact" msgid="781975788478987237">"select contact"</string>
+ <string name="respond_via_sms_custom_message" msgid="6158880869935281078">"Write your own..."</string>
+ <string name="custom_message_cancel" msgid="7516406059429609296">"Cancel"</string>
+ <string name="custom_message_send" msgid="5795754217085747742">"Send"</string>
+ <string name="description_target_answer" msgid="7205604197797472471">"Answer"</string>
+ <string name="description_target_send_sms" msgid="2098326025587950144">"Send SMS"</string>
+ <string name="description_target_decline" msgid="4789834364389731957">"Decline"</string>
+ <string name="description_target_answer_video_call" msgid="3495965588512395026">"Answer as video call"</string>
+ <string name="description_target_answer_audio_call" msgid="8396296303320994450">"Answer as audio call"</string>
+ <string name="description_target_accept_upgrade_to_video_request" msgid="2894072808324604062">"Accept video request"</string>
+ <string name="description_target_decline_upgrade_to_video_request" msgid="4093888612888538776">"Decline video request"</string>
+ <string name="description_direction_up" msgid="4441409581444516690">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_left" msgid="7129873384376533287">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_right" msgid="2122584234531957308">"Slide right for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_down" msgid="4317245625565166742">"Slide down for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Vibrate"</string>
+ <string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Vibrate"</string>
+ <string name="voicemail_notification_ringtone_title" msgid="2609519527849101590">"Sound"</string>
+ <string name="default_notification_description" msgid="78174796906240970">"Default sound (<xliff:g id="DEFAULT_SOUND_TITLE">%1$s</xliff:g>)"</string>
+ <string name="ringtone_title" msgid="6374978286202084684">"Phone ringtone"</string>
+ <string name="vibrate_on_ring_title" msgid="9197564612065258960">"Vibrate when ringing"</string>
+ <string name="dial_pad_autocomplete" msgid="7683489952557536398">"Dialpad auto-complete"</string>
+ <string name="preference_category_ringtone" msgid="5197960752529332721">"Ringtone &amp; Vibrate"</string>
+ <string name="manageConferenceLabel" msgid="4691922394301969053">"Manage conference call"</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="8373041754188879871">"Emergency number"</string>
+</resources>
diff --git a/InCallUI/res/values-en-rGB/strings.xml b/InCallUI/res/values-en-rGB/strings.xml
index 3cc0c31b5..e68ff2fb4 100644
--- a/InCallUI/res/values-en-rGB/strings.xml
+++ b/InCallUI/res/values-en-rGB/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> missed calls"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Missed call from <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"On-going call"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ongoing Wi-Fi call"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"On hold"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Incoming call"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Incoming Wi-Fi call"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Incoming video call"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Incoming video request"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"New voicemail"</string>
diff --git a/InCallUI/res/values-en-rIN/strings.xml b/InCallUI/res/values-en-rIN/strings.xml
index 3cc0c31b5..e68ff2fb4 100644
--- a/InCallUI/res/values-en-rIN/strings.xml
+++ b/InCallUI/res/values-en-rIN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> missed calls"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Missed call from <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"On-going call"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ongoing Wi-Fi call"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"On hold"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Incoming call"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Incoming Wi-Fi call"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Incoming video call"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Incoming video request"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"New voicemail"</string>
diff --git a/InCallUI/res/values-es-rUS/strings.xml b/InCallUI/res/values-es-rUS/strings.xml
index 7fcd85d75..f13b65741 100644
--- a/InCallUI/res/values-es-rUS/strings.xml
+++ b/InCallUI/res/values-es-rUS/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> llamadas perdidas"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Se perdieron las llamadas de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Llamada en curso"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Llamada por Wi-Fi en curso"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"En espera"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Llamada entrante"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Llamada por Wi-Fi entrante"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Videollamada entrante"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Solicitud de videollamada entrante"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Correo de voz nuevo"</string>
diff --git a/InCallUI/res/values-es/strings.xml b/InCallUI/res/values-es/strings.xml
index 70f0beaa3..0a5ef90de 100644
--- a/InCallUI/res/values-es/strings.xml
+++ b/InCallUI/res/values-es/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> llamadas perdidas"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Llamada perdida de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Llamada en curso"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Llamada Wi-Fi en curso"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"En espera"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Llamada entrante"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Llamada Wi-Fi entrante"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Videollamada entrante"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Solicitud de videollamada entrante"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nuevo mensaje de voz"</string>
diff --git a/InCallUI/res/values-et-rEE/strings.xml b/InCallUI/res/values-et-rEE/strings.xml
index 64dcc175a..cea6a3198 100644
--- a/InCallUI/res/values-et-rEE/strings.xml
+++ b/InCallUI/res/values-et-rEE/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> vastamata kõnet"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Vastamata kõne helistajalt <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Käimasolev kõne"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Pooleliolev WiFi-kõne"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Ootel"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Sissetulev kõne"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Sissetulev WiFi-kõne"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Sissetulev videokõne"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Sissetulev videotaotlus"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Uus kõnepost"</string>
diff --git a/InCallUI/res/values-eu-rES/strings.xml b/InCallUI/res/values-eu-rES/strings.xml
index 525d60749..be58bb6c7 100644
--- a/InCallUI/res/values-eu-rES/strings.xml
+++ b/InCallUI/res/values-eu-rES/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> dei galdu"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Deitzaile honen dei galdua: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Abian den deia"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Wi-Fi deia abian"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Zain"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Sarrerako deia"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Sarrerako Wi-Fi deia"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Sarrerako bideo-deia"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Sarrerako bideo-eskaera"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Ahots-mezu berria"</string>
diff --git a/InCallUI/res/values-fa/strings.xml b/InCallUI/res/values-fa/strings.xml
index c3529dc52..dbd82e514 100644
--- a/InCallUI/res/values-fa/strings.xml
+++ b/InCallUI/res/values-fa/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> تماس بی پاسخ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"تماس بی پاسخ از <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"تماس جاری"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"‏تماس از طریق Wi-Fi در حال انجام است"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"در انتظار"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"تماس ورودی"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"‏تماس Wi-Fi ورودی"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"تماس ویدیویی ورودی"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"درخواست تماس ویدیویی ورودی"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"پست صوتی جدید"</string>
diff --git a/InCallUI/res/values-fi/strings.xml b/InCallUI/res/values-fi/strings.xml
index 2bef85284..6e8915f19 100644
--- a/InCallUI/res/values-fi/strings.xml
+++ b/InCallUI/res/values-fi/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> vastaamatonta puhelua"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Vastaamatta jäänyt puhelu numerosta <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Käynnissä oleva puhelu"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Käynnissä oleva Wi-Fi-puhelu"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Pidossa"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Uusi puhelu"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Saapuva Wi-Fi-puhelu"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Saapuva videopuhelu"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Saapuva videopyyntö"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Uusia viestejä vastaajassa"</string>
diff --git a/InCallUI/res/values-fr-rCA/strings.xml b/InCallUI/res/values-fr-rCA/strings.xml
index 083d5bb50..434589f4a 100644
--- a/InCallUI/res/values-fr-rCA/strings.xml
+++ b/InCallUI/res/values-fr-rCA/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> appels manqués"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Appel manqué de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Appel en cours"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Appel Wi-Fi en cours"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"En attente"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Appel entrant"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Appel Wi-Fi entrant"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Appel vidéo entrant"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Demande de vidéo reçue"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nouveau message vocal"</string>
diff --git a/InCallUI/res/values-fr/strings.xml b/InCallUI/res/values-fr/strings.xml
index 1b17782e9..2114dcdfc 100644
--- a/InCallUI/res/values-fr/strings.xml
+++ b/InCallUI/res/values-fr/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> appels manqués"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Appel manqué de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Appel en cours"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Appel Wi-Fi en cours"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"En attente"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Appel entrant"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Appel Wi-Fi entrant"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Appel vidéo entrant"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Demande de vidéo reçue"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nouveau message vocal"</string>
diff --git a/InCallUI/res/values-gl-rES/strings.xml b/InCallUI/res/values-gl-rES/strings.xml
index 80dae5bad..671e5f10a 100644
--- a/InCallUI/res/values-gl-rES/strings.xml
+++ b/InCallUI/res/values-gl-rES/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> chamadas perdidas"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Chamada perdida de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Chamada en curso"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Chamada wifi saínte"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"En espera"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Chamada entrante"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Chamada wifi entrante"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Videochamada entrante"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Solicitude de vídeo entrante"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Novo correo de voz"</string>
diff --git a/InCallUI/res/values-hi/strings.xml b/InCallUI/res/values-hi/strings.xml
index 47ac317df..d36d2d6a2 100644
--- a/InCallUI/res/values-hi/strings.xml
+++ b/InCallUI/res/values-hi/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> छूटी कॉल"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> की कॉल छूटी"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"चल रही कॉल"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"चल रहा वाई-फ़ाई कॉल"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"होल्ड पर"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"इनकमिंग कॉल"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"इनकमिंग वाई-फ़ाई कॉल"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"इनकमिंग वीडियो कॉल"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"इनकमिंग वीडियो अनुरोध"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"नया वॉयस मेल"</string>
diff --git a/InCallUI/res/values-hr/strings.xml b/InCallUI/res/values-hr/strings.xml
index 35d96a2da..5d82bd573 100644
--- a/InCallUI/res/values-hr/strings.xml
+++ b/InCallUI/res/values-hr/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"Broj propuštenih poziva: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Propušten poziv kontakta <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Poziv u tijeku"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Wi-Fi poziv u tijeku"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Na čekanju"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Dolazni poziv"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Dolazni Wi-Fi poziv"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Dolazni videopoziv"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Dolazni zahtjev za videopoziv"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nova govorna pošta"</string>
diff --git a/InCallUI/res/values-hu/strings.xml b/InCallUI/res/values-hu/strings.xml
index 67be5aa0a..39aa05ae1 100644
--- a/InCallUI/res/values-hu/strings.xml
+++ b/InCallUI/res/values-hu/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> nem fogadott hívás"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Nem fogadott hívás: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Hívás folyamatban"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Folyamatban lévő Wi-Fi-hívás"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Tartásban"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Bejövő hívás"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Beérkező Wi-Fi-hívás"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Bejövő videohívás"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Bejövő videokérés"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Új hangposta"</string>
diff --git a/InCallUI/res/values-hy-rAM/strings.xml b/InCallUI/res/values-hy-rAM/strings.xml
index 301bd1e61..411539b10 100644
--- a/InCallUI/res/values-hy-rAM/strings.xml
+++ b/InCallUI/res/values-hy-rAM/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> բաց թողնված զանգ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Բաց թողնված զանգ <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>-ից"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Ընթացիկ զանգը"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ընթացիկ զանգ Wi-Fi-ի միջոցով"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Սպասում"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Մուտքային զանգ"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Մուտքային զանգ Wi-Fi-ի միջոցով"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Մուտքային տեսազանգ"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Մուտքային տեսազանգի հայցում"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Նոր ձայնային հաղորդագրություն"</string>
diff --git a/InCallUI/res/values-in/strings.xml b/InCallUI/res/values-in/strings.xml
index a5819c683..778c52e48 100644
--- a/InCallUI/res/values-in/strings.xml
+++ b/InCallUI/res/values-in/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> panggilan tak terjawab"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Panggilan tak terjawab dari <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Panggilan yang sedang berlangsung"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Panggilan Wi-Fi keluar"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Ditangguhkan"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Panggilan masuk"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Panggilan Wi-Fi masuk"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Video call masuk"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Permintaan video masuk"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Kotak pesan baru"</string>
diff --git a/InCallUI/res/values-is-rIS/strings.xml b/InCallUI/res/values-is-rIS/strings.xml
index ed262ab92..ce81e74e4 100644
--- a/InCallUI/res/values-is-rIS/strings.xml
+++ b/InCallUI/res/values-is-rIS/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ósvöruð símtöl"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Ósvarað símtal frá <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Samtal í gangi"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Wi-Fi símtal stendur yfir"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Í bið"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Símtal berst"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Wi-Fi símtal berst"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Myndsímtal berst"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Myndbeiðni berst"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Ný skilaboð í talhólfinu"</string>
diff --git a/InCallUI/res/values-it/strings.xml b/InCallUI/res/values-it/strings.xml
index 0cca18e27..650c29d5d 100644
--- a/InCallUI/res/values-it/strings.xml
+++ b/InCallUI/res/values-it/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> chiamate senza risposta"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Chiamata senza risposta da <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Chiamata in corso"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Chiamata Wi-Fi in corso"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"In attesa"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Chiamata ricevuta"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Chiamata Wi-Fi in arrivo"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Videochiamata in arrivo"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Richiesta video in arrivo"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nuovo msg vocale"</string>
diff --git a/InCallUI/res/values-iw/strings.xml b/InCallUI/res/values-iw/strings.xml
index 5a6350ac0..846163e38 100644
--- a/InCallUI/res/values-iw/strings.xml
+++ b/InCallUI/res/values-iw/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> שיחות שלא נענו"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"שיחה שלא נענתה מאת <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"שיחה פעילה"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"‏שיחת Wi-Fi מתבצעת"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"בהמתנה"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"שיחה נכנסת"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"‏שיחת Wi-Fi נכנסת"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"שיחת וידאו נכנסת"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"בקשת וידאו נכנסת"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"דואר קולי חדש"</string>
diff --git a/InCallUI/res/values-ja/strings.xml b/InCallUI/res/values-ja/strings.xml
index 2c32df514..cff626d3c 100644
--- a/InCallUI/res/values-ja/strings.xml
+++ b/InCallUI/res/values-ja/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"不在着信<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>件"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>さんからの不在着信"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"通話中"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Wi-Fi通話を発信中"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"保留中"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"通話着信"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Wi-Fi通話が着信中"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ビデオハングアウト着信"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"ビデオハングアウトリクエスト着信"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"新しいボイスメール"</string>
diff --git a/InCallUI/res/values-ka-rGE/strings.xml b/InCallUI/res/values-ka-rGE/strings.xml
index 5355539f2..988b2d0cf 100644
--- a/InCallUI/res/values-ka-rGE/strings.xml
+++ b/InCallUI/res/values-ka-rGE/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> გამოტოვებული ზარები"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"გამოტოვებული ზარი <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>-ისგან"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"მიმდინარე ზარი"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"მიმდინარე Wi-Fi ზარი"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"შეყოვნების რეჟიმში"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"შემომავალი ზარი"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"შემომავალი Wi-Fi ზარი"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"შემომავალი ვიდეოზარი"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"შემომავალი ვიდეოს მოთხოვნა"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"ახალი ხმოვანი ფოსტა"</string>
diff --git a/InCallUI/res/values-kk-rKZ/strings.xml b/InCallUI/res/values-kk-rKZ/strings.xml
index 72ac63208..664ce9332 100644
--- a/InCallUI/res/values-kk-rKZ/strings.xml
+++ b/InCallUI/res/values-kk-rKZ/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> қабылданбаған қоңыраулар"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> қоңырауы қабылданбаған"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Ағымдағы қоңырау"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ағымдық Wi-Fi қоңырауы"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Күтуде"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Келген қоңырау"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Кіріс Wi-Fi қоңырауы"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Кіріс бейне қоңырау"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Кіріс бейне сұрау"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Жаңа дауыс хабары"</string>
diff --git a/InCallUI/res/values-km-rKH/strings.xml b/InCallUI/res/values-km-rKH/strings.xml
index cf371ad38..72db0163b 100644
--- a/InCallUI/res/values-km-rKH/strings.xml
+++ b/InCallUI/res/values-km-rKH/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ខកខាន​ការ​​ទទួល"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"ខកខាន​ទទួល​ពី <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"កំពុង​បន្ត​ការ​ហៅ"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"ការហៅតាម Wi-Fi កំពុងបន្ត"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"រង់ចាំ"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ការ​ហៅ​ចូល"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"មានការហៅចូលមកតាម Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ការ​ហៅចូលជា​វីដេអូ​"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"សំណើ​ការ​ហៅ​ជា​វីដេអូ​ចូល"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"សារ​ជា​សំឡេង​ថ្មី"</string>
diff --git a/InCallUI/res/values-kn-rIN/strings.xml b/InCallUI/res/values-kn-rIN/strings.xml
index 27d3aea97..69e55db9b 100644
--- a/InCallUI/res/values-kn-rIN/strings.xml
+++ b/InCallUI/res/values-kn-rIN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ತಪ್ಪಿದ ಕರೆಗಳು"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> ಅವರಿಂದ ಮಿಸ್ಡ್‌ ಕಾಲ್‌"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಕರೆ"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"ಚಾಲ್ತಿಯಲ್ಲಿರುವ ವೈ-ಫೈ ಕರೆ"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"ತಡೆಹಿಡಿಯಲಾಗಿದೆ"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ಒಳಬರುವ ಕರೆ"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"ಒಳಬರುವ ವೈ-ಫೈ ಕರೆ"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ಒಳಬರುವ ವೀಡಿಯೊ ಕರೆ"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"ಒಳಬರುವ ವೀಡಿಯೊ ವಿನಂತಿ"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"ಹೊಸ ಧ್ವನಿಮೇಲ್‌"</string>
diff --git a/InCallUI/res/values-ko/strings.xml b/InCallUI/res/values-ko/strings.xml
index 9e0b18f2e..46eb46974 100644
--- a/InCallUI/res/values-ko/strings.xml
+++ b/InCallUI/res/values-ko/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"부재중 통화 <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>통"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>의 부재중 전화"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"현재 통화"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Wi-Fi 발신 전화"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"대기 중"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"수신 전화"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Wi-Fi 수신 전화"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"수신 화상 통화"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"수신 동영상 요청"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"새 음성사서함"</string>
diff --git a/InCallUI/res/values-ky-rKG/strings.xml b/InCallUI/res/values-ky-rKG/strings.xml
index 1a6fdd14c..bae92cb1c 100644
--- a/InCallUI/res/values-ky-rKG/strings.xml
+++ b/InCallUI/res/values-ky-rKG/strings.xml
@@ -83,10 +83,12 @@
<!-- no translation found for notification_missedCallTicker (504686252427747209) -->
<skip />
<string name="notification_ongoing_call" msgid="7068688957273482989">"Учурдагы чалуу"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Аткаруудагы Wi-Fi чалуу"</string>
<!-- no translation found for notification_on_hold (3480694969511790465) -->
<skip />
<!-- no translation found for notification_incoming_call (2820429205043529642) -->
<skip />
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Кирүүчү Wi-Fi чалуу"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Келип жаткан видео чалуу"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Келип жаткан видео сурамы"</string>
<!-- no translation found for notification_voicemail_title (8933468752045550523) -->
diff --git a/InCallUI/res/values-lo-rLA/strings.xml b/InCallUI/res/values-lo-rLA/strings.xml
index b316bef2c..0a7a0e124 100644
--- a/InCallUI/res/values-lo-rLA/strings.xml
+++ b/InCallUI/res/values-lo-rLA/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ສາຍບໍ່ໄດ້ຮັບ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"ສາຍທີ່ບໍ່ໄດ້ຮັບຈາກ <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"ສາຍທີ່ກຳລັງໂທອອກ"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"ການ​ໂທ Wi​-Fi ທີ່ດໍາເນີນຢູ່"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"ພັກສາຍຊົ່ວຄາວ"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ສາຍໂທເຂົ້າ"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"ສາຍໂທເຂົ້າ Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ສາຍ​ວິດີໂອ​ເຂົ້າ"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"​ຄຳ​ຮ້ອງ​ຂໍ​ວິ​ດີ​ໂອ​ເຂົ້າ​ມາ"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"ຂໍ້ຄວາມສຽງໃໝ່"</string>
diff --git a/InCallUI/res/values-lt/strings.xml b/InCallUI/res/values-lt/strings.xml
index 1e2596019..d62d832b0 100644
--- a/InCallUI/res/values-lt/strings.xml
+++ b/InCallUI/res/values-lt/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> praleisti (-ų) skambučiai (-ų)"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"praleistas skambutis nuo <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Vykstantis pokalbis"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Vykstantis „Wi-Fi“ skambutis"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Sulaikyta"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Skambina"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Gaunamasis „Wi-Fi“ skambutis"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Gaunamas vaizdo skambutis"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Gaunama vaizdo skambučio užklausa"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Naujas balso pašto pranešimas"</string>
diff --git a/InCallUI/res/values-lv/strings.xml b/InCallUI/res/values-lv/strings.xml
index 01719241d..f41909093 100644
--- a/InCallUI/res/values-lv/strings.xml
+++ b/InCallUI/res/values-lv/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> neatbildēts(-i) zvans(-i)"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Neatbildēts zvans no: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Pašreizējā saruna"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Notiekošs Wi-Fi zvans"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Aizturēts"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Ienākošs zvans"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Ienākošs Wi-Fi zvans"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Ienākošs videozvans"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Ienākošs video pieprasījums"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Jauns balss pasts"</string>
diff --git a/InCallUI/res/values-mk-rMK/strings.xml b/InCallUI/res/values-mk-rMK/strings.xml
index 6081ac9f8..1a8ba271d 100644
--- a/InCallUI/res/values-mk-rMK/strings.xml
+++ b/InCallUI/res/values-mk-rMK/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> пропуштени повици"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Пропуштен повик од <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Тековен повик"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Појдовен повик преку Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"На чекање"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Дојдовен повик"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Дојдовен повик преку Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Дојдовен видеоповик"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Дојдовно побарување за видео"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Нова говорна пошта"</string>
diff --git a/InCallUI/res/values-ml-rIN/strings.xml b/InCallUI/res/values-ml-rIN/strings.xml
index 18ab1f4da..26a0a4c6a 100644
--- a/InCallUI/res/values-ml-rIN/strings.xml
+++ b/InCallUI/res/values-ml-rIN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> മിസ്‌ഡ് കോളുകൾ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> എന്നതിൽ നിന്നുള്ള മിസ്‌ഡ് കോൾ"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"കോൾ സജീവമാണ്"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"ഓൺഗോയിംഗ് Wi-Fi കോൾ"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"ഹോള്‍ഡിലാണ്"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ഇന്‍കമിംഗ് കോള്‍"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"ഇൻകമിംഗ് Wi-Fi കോൾ"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ഇൻകമിംഗ് വീഡിയോ കോൾ"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"ഇൻകമിംഗ് വീഡിയോ അഭ്യർത്ഥന"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"പുതിയ വോയ്‌സ്‌മെയിൽ"</string>
diff --git a/InCallUI/res/values-mn-rMN/strings.xml b/InCallUI/res/values-mn-rMN/strings.xml
index c4646d08f..79d025028 100644
--- a/InCallUI/res/values-mn-rMN/strings.xml
+++ b/InCallUI/res/values-mn-rMN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> аваагүй дуудлага"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>-н аваагүй дуудлага"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Хийгдэж буй дуудлага"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ярьж буй Wi-Fi дуудлага"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Хүлээлгэнд"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Ирж буй дуудлага"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Орж ирсэн Wi-Fi дуудлага"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Ирж буй видео дуудлага"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Ирж буй видео хүсэлт"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Шинэ дуут шуудан"</string>
diff --git a/InCallUI/res/values-mr-rIN/strings.xml b/InCallUI/res/values-mr-rIN/strings.xml
index b4dbeef0f..d3319f21e 100644
--- a/InCallUI/res/values-mr-rIN/strings.xml
+++ b/InCallUI/res/values-mr-rIN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> सुटलेले कॉल"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> कडील सुटलेला कॉल"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"सुरू असलेला कॉल"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"सुरु असलेला वाय-फाय कॉल"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"होल्ड वर"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"येणारा कॉल"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"येणारा वाय-फाय कॉल"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"येणारा व्हिडिओ कॉल"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"येणारी व्हिडिओ विनंती"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"नवीन व्हॉइसमेल"</string>
diff --git a/InCallUI/res/values-ms-rMY/strings.xml b/InCallUI/res/values-ms-rMY/strings.xml
index 3bbc8364a..c0ef2328a 100644
--- a/InCallUI/res/values-ms-rMY/strings.xml
+++ b/InCallUI/res/values-ms-rMY/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> panggilan tidak dijawab"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Panggilan tidak dijawab daripada <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Panggilan sedang berjalan"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Panggilan Wi-Fi sedang berlangsung"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Ditunda"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Panggilan masuk"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Panggilan Wi-Fi masuk"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Panggilan video masuk"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Permintaan video masuk"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Mel suara baru"</string>
diff --git a/InCallUI/res/values-my-rMM/strings.xml b/InCallUI/res/values-my-rMM/strings.xml
index a9cde2e7b..6582ea52d 100644
--- a/InCallUI/res/values-my-rMM/strings.xml
+++ b/InCallUI/res/values-my-rMM/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> လွဲသွားသော ဖုန်းခေါ်မှုများ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> က ဖုန်းခေါ်မှုကို မကိုင်မိပါ"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"ဆက်သွားနေသော ဖုန်းခေါ်မှု"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"ခေါ်နေဆဲ ဝိုင်ဖိုင်ခေါ်ဆိုမှု"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"ခဏ ကိုင်ထားစဉ်"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"အဝင်ခေါ်ဆိုမှု"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"ဝင်လာသော ဝိုင်ဖိုင်ခေါ်ဆိုမှု"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ဝင်လာသည့် ဗီဒီယို ခေါ်ဆိုမှု"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"အသံ ခေါ်ဆိုမှုအဖြစ် တောင်းဆိုမှု"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"အသံမေးလ်အသစ်"</string>
diff --git a/InCallUI/res/values-nb/strings.xml b/InCallUI/res/values-nb/strings.xml
index 6604a530c..26e118f20 100644
--- a/InCallUI/res/values-nb/strings.xml
+++ b/InCallUI/res/values-nb/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> tapte anrop"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Tapt anrop fra <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Pågående samtale"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Pågående Wi-Fi-anrop"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Parkert"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Innkommende samtale"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Innkommende anrop via Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Innkommende videoanrop"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Innkommende videoforespørsel"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nye beskjeder på telefonsvarer"</string>
diff --git a/InCallUI/res/values-ne-rNP/strings.xml b/InCallUI/res/values-ne-rNP/strings.xml
index 5acaad9a4..ad45bdd46 100644
--- a/InCallUI/res/values-ne-rNP/strings.xml
+++ b/InCallUI/res/values-ne-rNP/strings.xml
@@ -27,7 +27,7 @@
<string name="audio_mode_speaker" msgid="27649582100085266">"स्पिकर"</string>
<string name="audio_mode_earpiece" msgid="4156527186373869107">"ह्यान्डसेट इयरपिस"</string>
<string name="audio_mode_wired_headset" msgid="1465350758489175975">"तारसहितको हेडसेट"</string>
- <string name="audio_mode_bluetooth" msgid="3047641300848211128">"ब्लुटुथ"</string>
+ <string name="audio_mode_bluetooth" msgid="3047641300848211128">"ब्लुटूथ"</string>
<string name="wait_prompt_str" msgid="7601815427707856238">"निम्न टोनहरू पठाउने? \n"</string>
<string name="pause_prompt_str" msgid="1789964702154314806">"टोनहरू \n पठाउँदै"</string>
<string name="send_button" msgid="4106860097497818751">"पठाउनुहोस्"</string>
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> छुटेका कलहरू"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>बाट छुटेका कल"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"चलिरहेको कल"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"चालु रहेको WI-Fi कल"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"होल्डमा"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"आगमन कल"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"आगमन Wi-Fi कल"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"आगमन भिडियो कल"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"आगमन भिडियो अनुरोध"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"नयाँ भ्वाइस मेल"</string>
diff --git a/InCallUI/res/values-nl/strings.xml b/InCallUI/res/values-nl/strings.xml
index 9b32a0373..91c881e5e 100644
--- a/InCallUI/res/values-nl/strings.xml
+++ b/InCallUI/res/values-nl/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> gemiste oproepen"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Gemiste oproep van <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Actieve oproep"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Actieve wifi-oproep"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"In de wacht"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Inkomende oproep"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Inkomende wifi-oproep"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Binnenkomend videogesprek"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Binnenkomend videoverzoek"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nieuwe voicemail"</string>
@@ -75,7 +77,7 @@
<string name="notification_action_dismiss" msgid="2679969397930852858">"Sluiten"</string>
<string name="notification_missedCall_call_back" msgid="2684890353590890187">"Terugbellen"</string>
<string name="notification_missedCall_message" msgid="3049928912736917988">"Bericht"</string>
- <string name="incall_error_power_off" msgid="6550191216405193368">"Als u wilt bellen, moet u eerst de Vliegmodus uitschakelen."</string>
+ <string name="incall_error_power_off" msgid="6550191216405193368">"Als u wilt bellen, moet u eerst de Vliegtuigmodus uitschakelen."</string>
<string name="incall_error_emergency_only" msgid="4678640422710818317">"Niet geregistreerd op netwerk."</string>
<string name="incall_error_out_of_service" msgid="4100065333878929223">"Mobiel netwerk niet beschikbaar."</string>
<string name="incall_error_no_phone_number_supplied" msgid="1150414018684246528">"Als u wilt bellen, moet u een geldig nummer invoeren."</string>
diff --git a/InCallUI/res/values-pl/strings.xml b/InCallUI/res/values-pl/strings.xml
index 8f0835b55..c7e7f8701 100644
--- a/InCallUI/res/values-pl/strings.xml
+++ b/InCallUI/res/values-pl/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> nieodebranych połączeń"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Nieodebrane połączenie z <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Trwa połączenie"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Trwające połączenie przez Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Oczekujące"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Połączenie przychodzące"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Przychodzące połączenie przez Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Przychodząca rozmowa wideo"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Przychodzące żądanie wideo"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nowa poczta głosowa"</string>
diff --git a/InCallUI/res/values-pt-rPT/strings.xml b/InCallUI/res/values-pt-rPT/strings.xml
index 7821436a3..824ea7113 100644
--- a/InCallUI/res/values-pt-rPT/strings.xml
+++ b/InCallUI/res/values-pt-rPT/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> chamadas não atendidas"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Chamada não atendida de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Chamada em curso"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Chamada Wi-Fi em curso"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Em espera"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Chamada recebida"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Chamada Wi-Fi recebida"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"A receber videochamada"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Pedido de vídeo recebido"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Novo correio de voz"</string>
diff --git a/InCallUI/res/values-pt/strings.xml b/InCallUI/res/values-pt/strings.xml
index df32188b1..3eb7234f3 100644
--- a/InCallUI/res/values-pt/strings.xml
+++ b/InCallUI/res/values-pt/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> chamadas perdidas"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Chamada perdida de <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Chamada em andamento"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Chamada Wi-Fi em andamento"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Em espera"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Recebendo chamada"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Chamada Wi-Fi recebida"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Recebendo vídeo chamada"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Recebendo solicitação de vídeo"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Novo correio de voz"</string>
diff --git a/InCallUI/res/values-ro/strings.xml b/InCallUI/res/values-ro/strings.xml
index 20516263d..ee9f02f9e 100644
--- a/InCallUI/res/values-ro/strings.xml
+++ b/InCallUI/res/values-ro/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> (de) apeluri nepreluate"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Apel nepreluat de la <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Apel în desfăşurare"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Apel Wi-Fi în desfășurare"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"În aşteptare"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Apel de intrare"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Apel prin Wi-Fi primit"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Apel video primit"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Solicitare de trecere la apel video"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Mesaj vocal nou"</string>
diff --git a/InCallUI/res/values-ru/strings.xml b/InCallUI/res/values-ru/strings.xml
index e0e072464..ea7b99653 100644
--- a/InCallUI/res/values-ru/strings.xml
+++ b/InCallUI/res/values-ru/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"Пропущенных вызовов: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Пропущенные вызовы от абонента <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Текущий вызов"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Текущий Wi-Fi-звонок"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"На удержании"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Входящий вызов"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Входящий Wi-Fi-звонок"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Входящий видеовызов"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Входящий видеовызов"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Новое сообщение голосовой почты"</string>
diff --git a/InCallUI/res/values-si-rLK/strings.xml b/InCallUI/res/values-si-rLK/strings.xml
index e440b7c75..99ce93648 100644
--- a/InCallUI/res/values-si-rLK/strings.xml
+++ b/InCallUI/res/values-si-rLK/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"මඟ හැරුණු ඇමතුම් <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> වෙතින් මඟ හැරුණු ඇමතුම්"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"කරගෙනය යන ඇමතුම"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"දැනට ක්‍රියාත්මක Wi-Fi ඇමතුම"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"රඳවා ගනිමින්"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"එන ඇමතුම"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"පැමිණෙන Wi-Fi ඇමතුම"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"පැමිණෙන වීඩියෝ ඇමතුම"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"පැමිණෙන වීඩියෝ ඉල්ලීම"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"නව හඬතැපෑල"</string>
diff --git a/InCallUI/res/values-sk/strings.xml b/InCallUI/res/values-sk/strings.xml
index b6b3c3e3c..393a14d7a 100644
--- a/InCallUI/res/values-sk/strings.xml
+++ b/InCallUI/res/values-sk/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"Zmeškané hovory: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>."</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Zmeškaný hovor od volajúceho <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Prebiehajúci hovor"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Odchádzajúci hovor prostredníctvom siete Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Podržaný hovor"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Prichádzajúci hovor"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Prichádzajúci hovor prostredníctvom siete Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Prichádzajúci videohovor"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Prichádzajúca žiadosť o video"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nová hlasová správa"</string>
diff --git a/InCallUI/res/values-sl/strings.xml b/InCallUI/res/values-sl/strings.xml
index c59ec6fc8..35d999df2 100644
--- a/InCallUI/res/values-sl/strings.xml
+++ b/InCallUI/res/values-sl/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> neodgovorjenih klicev"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Neodgovorjeni klic od <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Aktivni klic"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Odhodni klic prek Wi-Fi-ja"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Zadržano"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Dohodni klic"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Dohodni klic prek Wi-Fi-ja"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Dohodni videoklic"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Dohodna zahteva za video"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nova glasovna pošta"</string>
diff --git a/InCallUI/res/values-sr/strings.xml b/InCallUI/res/values-sr/strings.xml
index d25ce6004..0f0fb5307 100644
--- a/InCallUI/res/values-sr/strings.xml
+++ b/InCallUI/res/values-sr/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"Број пропуштених позива: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Пропуштен позив од: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Актуелни позив"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Текући Wi-Fi позив"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"На чекању"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Долазни позив"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Долазни Wi-Fi позив"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Долазни видео позив"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Захтев за долазни видео позив"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Нова говорна пошта"</string>
diff --git a/InCallUI/res/values-sv/strings.xml b/InCallUI/res/values-sv/strings.xml
index f0244767e..8b59eb5b2 100644
--- a/InCallUI/res/values-sv/strings.xml
+++ b/InCallUI/res/values-sv/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> missade samtal"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Missat samtal från <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Pågående samtal"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Pågående Wi-Fi-samtal"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Parkerat"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Inkommande samtal"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Inkommande Wi-Fi-samtal"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Inkommande videosamtal"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Inkommande begäran om videosamtal"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Nytt röstmeddelande"</string>
diff --git a/InCallUI/res/values-sw/strings.xml b/InCallUI/res/values-sw/strings.xml
index e3f3cc880..d14b4fef1 100644
--- a/InCallUI/res/values-sw/strings.xml
+++ b/InCallUI/res/values-sw/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> simu ambazo hazijajibiwa"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Simu isiyojibiwa kutoka <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Simu inayoendelea"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Simu ya Wi-Fi inayoendelea"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Inangoja"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Simu inayoingia"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Simu ya Wi-Fi inayoingia"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Hangout ya Video inayoingia"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Ombi linaloingia la video"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Ujumbe mpya wa sauti"</string>
diff --git a/InCallUI/res/values-ta-rIN/strings.xml b/InCallUI/res/values-ta-rIN/strings.xml
index c1e17bf0b..670e410ed 100644
--- a/InCallUI/res/values-ta-rIN/strings.xml
+++ b/InCallUI/res/values-ta-rIN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> தவறிய அழைப்புகள்"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> இடமிருந்து தவறிய அழைப்பு"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"செயலில் இருக்கும் அழைப்பு"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"வெளிச்செல்லும் வைஃபை அழைப்பு"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"காத்திருப்பில்"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"உள்வரும் அழைப்பு"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"உள்வரும் வைஃபை அழைப்பு"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"உள்வரும் வீடியோ அழைப்பு"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"உள்வரும் வீடியோ கோரிக்கை"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"புதிய குரலஞ்சல்"</string>
diff --git a/InCallUI/res/values-te-rIN/strings.xml b/InCallUI/res/values-te-rIN/strings.xml
index dc26f434d..3ae848d57 100644
--- a/InCallUI/res/values-te-rIN/strings.xml
+++ b/InCallUI/res/values-te-rIN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> సమాధానం ఇవ్వని కాల్‌లు"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> నుండి సమాధానం ఇవ్వని కాల్"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"కాల్ కొనసాగుతోంది"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Wi-Fi కాల్ కొనసాగుతోంది"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"హోల్డ్‌లో ఉంది"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"ఇన్‌కమింగ్ కాల్"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Wi-Fi కాల్ వస్తోంది"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"ఇన్‌కమింగ్ వీడియో కాల్"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"ఇన్‌కమింగ్ వీడియో అభ్యర్థన"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"కొత్త వాయిస్ మెయిల్"</string>
diff --git a/InCallUI/res/values-th/strings.xml b/InCallUI/res/values-th/strings.xml
index 1709dc4b5..452e6075c 100644
--- a/InCallUI/res/values-th/strings.xml
+++ b/InCallUI/res/values-th/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> สายที่ไม่ได้รับ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"สายที่ไม่ได้รับจาก <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"โทรต่อเนื่อง"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"กำลังโทรผ่าน Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"พักสาย"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"สายเรียกเข้า"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"สายโทรเข้าผ่าน Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"แฮงเอาท์วิดีโอเรียกเข้า"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"คำขอโทรเข้าเป็นวิดีโอ"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"ข้อความเสียงใหม่"</string>
@@ -66,7 +68,7 @@
<string name="notification_voicemail_text_format" msgid="4447323569453981685">"หมุนหมายเลข <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
<string name="notification_voicemail_no_vm_number" msgid="760963466895609716">"ไม่ทราบหมายเลขข้อความเสียง"</string>
<string name="notification_network_selection_title" msgid="4224455487793492772">"ไม่มีบริการ"</string>
- <string name="notification_network_selection_text" msgid="2607085729661923269">"เครือข่ายที่เลือกไว้ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ใช้งานไม่ได้"</string>
+ <string name="notification_network_selection_text" msgid="2607085729661923269">"เครือข่ายที่เลือกไว้ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ไม่พร้อมใช้งาน"</string>
<string name="notification_action_answer" msgid="6700362365135365143">"ตอบ"</string>
<string name="notification_action_end_call" msgid="6069460915123531620">"วางสาย"</string>
<string name="notification_action_answer_video" msgid="7809271910870211729">"วิดีโอ"</string>
diff --git a/InCallUI/res/values-tl/strings.xml b/InCallUI/res/values-tl/strings.xml
index cf2efed2e..f6db3ee0b 100644
--- a/InCallUI/res/values-tl/strings.xml
+++ b/InCallUI/res/values-tl/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> (na) hindi nasagot na tawag"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Hindi nasagot na tawag mula kay <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Kasalukuyang tawag"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Isinasagawang tawag sa Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Naka-hold"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Papasok na tawag"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Papasok na tawag sa Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Papasok na video call"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Papasok na kahilingan ng video"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Bagong voicemail"</string>
diff --git a/InCallUI/res/values-tr/strings.xml b/InCallUI/res/values-tr/strings.xml
index 2782092bc..a8e6f70ab 100644
--- a/InCallUI/res/values-tr/strings.xml
+++ b/InCallUI/res/values-tr/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> cevapsız çağrı"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Cevapsız çağrı: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Devam eden çağrılar"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Giden kablosuz çağrı"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Beklemede"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Gelen çağrı"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Gelen kablosuz çağrı"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Gelen video görüşmesi isteği"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Gelen video isteği"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Yeni sesli mesaj"</string>
diff --git a/InCallUI/res/values-uk/strings.xml b/InCallUI/res/values-uk/strings.xml
index d05fc424d..16f40cceb 100644
--- a/InCallUI/res/values-uk/strings.xml
+++ b/InCallUI/res/values-uk/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"Пропущ. дзвінк: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Пропущ. виклик від <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Поточний виклик"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Активний дзвінок через Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Очікує"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Вхідний дзвінок"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Вхідний дзвінок через Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Вхідний відеодзвінок"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Запит на вхідний відеодзвінок"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Нова голос. пошта"</string>
diff --git a/InCallUI/res/values-ur-rPK/strings.xml b/InCallUI/res/values-ur-rPK/strings.xml
index 2f84bd383..024468948 100644
--- a/InCallUI/res/values-ur-rPK/strings.xml
+++ b/InCallUI/res/values-ur-rPK/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> چھوٹی ہوئی کالیں"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> کی جانب سے چھوٹی ہوئی کال"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"جاری کال"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"‏Wi-Fi کال جاری ہے"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"ہولڈ پر"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"آنے والی کال"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"‏Wi-Fi کال آ رہی ہے"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"اِن کمنگ ویڈیو کال"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"اِن کمنگ ویڈیو درخواست"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"نیا صوتی میل"</string>
diff --git a/InCallUI/res/values-uz-rUZ/strings.xml b/InCallUI/res/values-uz-rUZ/strings.xml
index bece8a9a9..b1cd89ef2 100644
--- a/InCallUI/res/values-uz-rUZ/strings.xml
+++ b/InCallUI/res/values-uz-rUZ/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> ta javobsiz qo‘ng‘iroq"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>dan javobsiz qo‘ng‘iroq"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Joriy qo‘ng‘iroq"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Chiquvchi Wi-Fi qo‘ng‘irog‘i"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Kutmoqda"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Kiruvchi qo‘ng‘iroq"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Kiruvchi Wi-Fi qo‘ng‘irog‘i"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Kiruvchi videoqo‘ng‘iroq"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Kiruvchi video so\'rovi"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Yangi ovozli xabar"</string>
diff --git a/InCallUI/res/values-vi/strings.xml b/InCallUI/res/values-vi/strings.xml
index 7e7a694ee..0aed27d0d 100644
--- a/InCallUI/res/values-vi/strings.xml
+++ b/InCallUI/res/values-vi/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> cuộc gọi nhỡ"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Cuộc gọi nhỡ từ <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Cuộc gọi đang thực hiện"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Cuộc gọi đang diễn ra qua Wi-Fi"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Đang chờ"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Cuộc gọi đến"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Cuộc gọi đến qua Wi-Fi"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Cuộc gọi điện video đến"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Yêu cầu video đến"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Thư thoại mới"</string>
diff --git a/InCallUI/res/values-zh-rCN/strings.xml b/InCallUI/res/values-zh-rCN/strings.xml
index be2ac76e5..28a838764 100644
--- a/InCallUI/res/values-zh-rCN/strings.xml
+++ b/InCallUI/res/values-zh-rCN/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> 个未接电话"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"来自<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>的未接电话"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"当前通话"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"正在进行 WLAN 通话"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"保持"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"来电"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"WLAN 来电"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"有视频通话来电"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"收到视频通话邀请"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"新语音邮件"</string>
diff --git a/InCallUI/res/values-zh-rHK/strings.xml b/InCallUI/res/values-zh-rHK/strings.xml
index b067eee04..19909cb74 100644
--- a/InCallUI/res/values-zh-rHK/strings.xml
+++ b/InCallUI/res/values-zh-rHK/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> 未接電話"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>打來的未接來電"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"通話中"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"正在進行 Wi-Fi 通話"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"保留通話"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"來電"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Wi-Fi 來電"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"視像通話來電"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"收到視像要求"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"新留言"</string>
diff --git a/InCallUI/res/values-zh-rTW/strings.xml b/InCallUI/res/values-zh-rTW/strings.xml
index 724fd9140..294b08dff 100644
--- a/InCallUI/res/values-zh-rTW/strings.xml
+++ b/InCallUI/res/values-zh-rTW/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> 通未接來電"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"來自 <xliff:g id="MISSED_CALL_FROM">%s</xliff:g> 的未接來電"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"通話中"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"撥出的 Wi-Fi 電話"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"通話保留"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"來電"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"撥入的 Wi-Fi 電話"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"視訊通話來電"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"收到視訊要求"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"新留言"</string>
@@ -72,7 +74,7 @@
<string name="notification_action_answer_video" msgid="7809271910870211729">"視訊"</string>
<string name="notification_action_answer_voice" msgid="1770796916369437773">"語音"</string>
<string name="notification_action_accept" msgid="2898609801209468429">"接受"</string>
- <string name="notification_action_dismiss" msgid="2679969397930852858">"關閉"</string>
+ <string name="notification_action_dismiss" msgid="2679969397930852858">"拒絶"</string>
<string name="notification_missedCall_call_back" msgid="2684890353590890187">"回撥"</string>
<string name="notification_missedCall_message" msgid="3049928912736917988">"簡訊"</string>
<string name="incall_error_power_off" msgid="6550191216405193368">"撥號前,請先關閉飛航模式。"</string>
diff --git a/InCallUI/res/values-zu/strings.xml b/InCallUI/res/values-zu/strings.xml
index 370d84ce0..7c25cddd7 100644
--- a/InCallUI/res/values-zu/strings.xml
+++ b/InCallUI/res/values-zu/strings.xml
@@ -57,8 +57,10 @@
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> amakholi akulahlekele"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Uphuthelwe ikholi ephuma ku-<xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
<string name="notification_ongoing_call" msgid="7068688957273482989">"Ikholi eqhubekayo"</string>
+ <string name="notification_ongoing_call_wifi" msgid="8521553590606569379">"Ikholi ye-Wi-Fi eqhubekayo"</string>
<string name="notification_on_hold" msgid="3480694969511790465">"Ibambile"</string>
<string name="notification_incoming_call" msgid="2820429205043529642">"Ikholi engenayo"</string>
+ <string name="notification_incoming_call_wifi" msgid="9210706506594546627">"Ikholi ye-Wi-Fi engenayo"</string>
<string name="notification_incoming_video_call" msgid="7356836933934464805">"Ikholi yevidiyo engenayo"</string>
<string name="notification_requesting_video_call" msgid="1405576812892369451">"Isicelo sevidiyo engenayo"</string>
<string name="notification_voicemail_title" msgid="8933468752045550523">"Umlayezo wezwi omusha"</string>
diff --git a/InCallUI/res/values/ids.xml b/InCallUI/res/values/ids.xml
index c6ad2099c..accb8fb73 100644
--- a/InCallUI/res/values/ids.xml
+++ b/InCallUI/res/values/ids.xml
@@ -16,4 +16,5 @@
<resources>
<item type="id" name="fadeState" />
+ <item type="id" name="view_tag_callcard_actual_height" />
</resources>
diff --git a/InCallUI/res/values/styles.xml b/InCallUI/res/values/styles.xml
index e16d72cb4..11d636261 100644
--- a/InCallUI/res/values/styles.xml
+++ b/InCallUI/res/values/styles.xml
@@ -70,43 +70,12 @@
<item name="android:textOff">@null</item>
</style>
- <style name="InCallAnimationStyle" parent="@android:style/Animation.Activity">
- <!-- Suppress task-to-task animation happening during the transition from
- OutgoingCallBroadcaster (and SipOptionHandler) to InCallActivity.
- The transition unexpectedly happens during the transition (inside the phone task),
- because InCallActivity is using android:launchMode="singleInstance".
-
- - taskOpenEnterAnimation/taskOpenExitAnimation is used for the first time
- InCallActivity instance is created.
-
- - taskToFrontEnterAnimation/taskToFrontExitAnimation is used when InCallActivity
- is already available.
- (Note that InCallActivity won't be destroyed once it is created)
-
- TODO: try removing the flag instead -->
- <item name="android:taskOpenEnterAnimation">@null</item>
- <item name="android:taskOpenExitAnimation">@anim/activity_open_exit</item>
- <item name="android:taskToFrontEnterAnimation">@anim/activity_open_enter</item>
- <item name="android:taskToFrontExitAnimation">@anim/activity_open_exit</item>
- </style>
-
- <style name="OutgoingCallAnimationStyle" parent="@android:style/Animation.Activity">
- <item name="android:taskOpenEnterAnimation">@null</item>
- <item name="android:taskOpenExitAnimation">@null</item>
- <item name="android:activityOpenEnterAnimation">@null</item>
- <item name="android:activityOpenExitAnimation">@null</item>
- <item name="android:activityCloseEnterAnimation">@null</item>
- <item name="android:activityCloseExitAnimation">@null</item>
- <item name="android:taskToFrontEnterAnimation">@null</item>
- <item name="android:taskToFrontExitAnimation">@null</item>
- </style>
-
<!-- Theme for the InCallActivity activity. Should have a transparent background for the
circular reveal animation for a new outgoing call to work correctly. We don't just use
Theme.Black.NoTitleBar directly, since we want any popups or dialogs from the
InCallActivity to have the correct Material style. -->
<style name="Theme.InCallScreen" parent="@android:style/Theme.Material.Light">
- <item name="android:windowAnimationStyle">@style/InCallAnimationStyle</item>
+ <item name="android:windowAnimationStyle">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
@@ -116,15 +85,7 @@
<item name="android:popupMenuStyle">@style/InCallPopupMenuStyle</item>
<item name="android:actionBarStyle">@style/InCallActionBarStyle</item>
<item name="android:buttonStyleToggle">@style/InCallCompoundButton</item>
- </style>
-
- <style name="Theme.CircularRevealAnimation" parent="@android:style/Theme.Material.Light">
- <item name="android:windowIsTranslucent">true</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:colorPrimaryDark">@color/dialer_theme_color_dark</item>
- <item name="android:windowBackground">@android:color/transparent</item>
- <item name="android:windowAnimationStyle">@null</item>
+ <item name="android:alertDialogTheme">@android:style/Theme.Material.Light.Dialog.Alert</item>
</style>
<style name="InCallPopupMenuStyle" parent="@android:style/Theme.Material.Light">
diff --git a/InCallUI/src/com/android/incallui/AccelerometerListener.java b/InCallUI/src/com/android/incallui/AccelerometerListener.java
index 1a7077866..ca8e7d0a4 100644
--- a/InCallUI/src/com/android/incallui/AccelerometerListener.java
+++ b/InCallUI/src/com/android/incallui/AccelerometerListener.java
@@ -120,7 +120,7 @@ public final class AccelerometerListener {
if (x == 0.0 || y == 0.0 || z == 0.0) return;
// magnitude of the acceleration vector projected onto XY plane
- final double xy = Math.sqrt(x*x + y*y);
+ final double xy = Math.hypot(x, y);
// compute the vertical angle
double angle = Math.atan2(xy, z);
// convert to degrees
@@ -131,16 +131,19 @@ public final class AccelerometerListener {
}
SensorEventListener mSensorListener = new SensorEventListener() {
+ @Override
public void onSensorChanged(SensorEvent event) {
onSensorEvent(event.values[0], event.values[1], event.values[2]);
}
+ @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// ignore
}
};
Handler mHandler = new Handler() {
+ @Override
public void handleMessage(Message msg) {
switch (msg.what) {
case ORIENTATION_CHANGED:
diff --git a/InCallUI/src/com/android/incallui/AnswerFragment.java b/InCallUI/src/com/android/incallui/AnswerFragment.java
index 29747dabd..8cbce10c6 100644
--- a/InCallUI/src/com/android/incallui/AnswerFragment.java
+++ b/InCallUI/src/com/android/incallui/AnswerFragment.java
@@ -76,7 +76,7 @@ public class AnswerFragment extends BaseFragment<AnswerPresenter, AnswerPresente
@Override
public AnswerPresenter createPresenter() {
- return new AnswerPresenter();
+ return InCallPresenter.getInstance().getAnswerPresenter();
}
@Override
@@ -108,11 +108,9 @@ public class AnswerFragment extends BaseFragment<AnswerPresenter, AnswerPresente
}
@Override
- public void showAnswerUi(boolean show) {
- getView().setVisibility(show ? View.VISIBLE : View.GONE);
-
- Log.d(this, "Show answer UI: " + show);
- if (show) {
+ public void onShowAnswerUi(boolean shown) {
+ Log.d(this, "Show answer UI: " + shown);
+ if (shown) {
mGlowpad.startPing();
} else {
mGlowpad.stopPing();
@@ -247,7 +245,7 @@ public class AnswerFragment extends BaseFragment<AnswerPresenter, AnswerPresente
}
}
- public void dismissPendingDialogues() {
+ public void dismissPendingDialogs() {
if (isCannedResponsePopupShowing()) {
dismissCannedResponsePopup();
}
diff --git a/InCallUI/src/com/android/incallui/AnswerPresenter.java b/InCallUI/src/com/android/incallui/AnswerPresenter.java
index e579d643a..cc95e0190 100644
--- a/InCallUI/src/com/android/incallui/AnswerPresenter.java
+++ b/InCallUI/src/com/android/incallui/AnswerPresenter.java
@@ -17,15 +17,23 @@
package com.android.incallui;
import android.content.Context;
-import android.telecom.TelecomManager;
+
+import com.android.incallui.InCallPresenter.InCallState;
import java.util.List;
/**
- * Presenter for the Incoming call widget.
+ * Presenter for the Incoming call widget. The {@link AnswerPresenter} handles the logic during
+ * incoming calls. It is also in charge of responding to incoming calls, so there needs to be
+ * an instance alive so that it can receive onIncomingCall callbacks.
+ *
+ * An instance of {@link AnswerPresenter} is created by InCallPresenter at startup, registers
+ * for callbacks via InCallPresenter, and shows/hides the {@link AnswerFragment} via IncallActivity.
+ *
*/
public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
- implements CallList.CallUpdateListener, CallList.Listener {
+ implements CallList.CallUpdateListener, InCallPresenter.InCallUiListener,
+ InCallPresenter.IncomingCallListener {
private static final String TAG = AnswerPresenter.class.getSimpleName();
@@ -34,57 +42,33 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
private boolean mHasTextMessages = false;
@Override
- public void onUiReady(AnswerUi ui) {
- super.onUiReady(ui);
-
- final CallList calls = CallList.getInstance();
- Call call;
- call = calls.getIncomingCall();
- if (call != null) {
- processIncomingCall(call);
- }
- call = calls.getVideoUpgradeRequestCall();
- if (call != null) {
- processVideoUpgradeRequestCall(call);
- }
-
- // Listen for incoming calls.
- calls.addListener(this);
- }
-
- @Override
- public void onUiUnready(AnswerUi ui) {
- super.onUiUnready(ui);
-
- CallList.getInstance().removeListener(this);
-
- // This is necessary because the activity can be destroyed while an incoming call exists.
- // This happens when back button is pressed while incoming call is still being shown.
- if (mCallId != null) {
- CallList.getInstance().removeCallUpdateListener(mCallId, this);
+ public void onUiShowing(boolean showing) {
+ if (showing) {
+ final CallList calls = CallList.getInstance();
+ Call call;
+ call = calls.getIncomingCall();
+ if (call != null) {
+ processIncomingCall(call);
+ }
+ call = calls.getVideoUpgradeRequestCall();
+ if (call != null) {
+ processVideoUpgradeRequestCall(call);
+ }
+ } else {
+ // This is necessary because the activity can be destroyed while an incoming call exists.
+ // This happens when back button is pressed while incoming call is still being shown.
+ if (mCallId != null) {
+ CallList.getInstance().removeCallUpdateListener(mCallId, this);
+ }
}
}
@Override
- public void onCallListChange(CallList callList) {
- // no-op
- }
-
- @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.
+ public void onIncomingCall(InCallState oldState, InCallState newState, Call call) {
Log.d(this, "onIncomingCall: " + this);
- if (getUi() != null) {
- if (!call.getId().equals(mCallId)) {
- // A new call is coming in.
- processIncomingCall(call);
- }
+ if (!call.getId().equals(mCallId)) {
+ // A new call is coming in.
+ processIncomingCall(call);
}
}
@@ -96,9 +80,20 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
CallList.getInstance().addCallUpdateListener(mCallId, this);
Log.d(TAG, "Showing incoming for call id: " + mCallId + " " + this);
- final List<String> textMsgs = CallList.getInstance().getTextResponses(call.getId());
- getUi().showAnswerUi(true);
- configureAnswerTargetsForSms(call, textMsgs);
+ if (showAnswerUi(true)) {
+ final List<String> textMsgs = CallList.getInstance().getTextResponses(call.getId());
+ configureAnswerTargetsForSms(call, textMsgs);
+ }
+ }
+
+ private boolean showAnswerUi(boolean show) {
+ final InCallActivity activity = InCallPresenter.getInstance().getActivity();
+ if (activity != null) {
+ activity.showAnswerFragment(show);
+ return true;
+ } else {
+ return false;
+ }
}
private void processVideoUpgradeRequestCall(Call call) {
@@ -107,7 +102,7 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
// Listen for call updates for the current call.
CallList.getInstance().addCallUpdateListener(mCallId, this);
- getUi().showAnswerUi(true);
+ showAnswerUi(true);
getUi().showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_UPGRADE_REQUEST);
}
@@ -119,7 +114,7 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
// Stop listening for updates.
CallList.getInstance().removeCallUpdateListener(mCallId, this);
- getUi().showAnswerUi(false);
+ 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.
@@ -175,6 +170,10 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
}
private void configureAnswerTargetsForSms(Call call, List<String> textMsgs) {
+ if (getUi() == null) {
+ return;
+ }
+
final Context context = getUi().getContext();
mHasTextMessages = textMsgs != null;
@@ -199,7 +198,7 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
}
interface AnswerUi extends Ui {
- public void showAnswerUi(boolean show);
+ public void onShowAnswerUi(boolean shown);
public void showTargets(int targetSet);
public void showMessageDialog();
public void configureMessageDialog(List<String> textResponses);
diff --git a/InCallUI/src/com/android/incallui/AudioModeProvider.java b/InCallUI/src/com/android/incallui/AudioModeProvider.java
index c823fda3c..a26766126 100644
--- a/InCallUI/src/com/android/incallui/AudioModeProvider.java
+++ b/InCallUI/src/com/android/incallui/AudioModeProvider.java
@@ -26,7 +26,7 @@ import java.util.List;
/**
* Proxy class for getting and setting the audio mode.
*/
-/* package */ class AudioModeProvider implements InCallPhoneListener {
+public class AudioModeProvider implements InCallPhoneListener {
static final int AUDIO_MODE_INVALID = 0;
diff --git a/InCallUI/src/com/android/incallui/BaseFragment.java b/InCallUI/src/com/android/incallui/BaseFragment.java
index 1ef3b1513..037c2455f 100644
--- a/InCallUI/src/com/android/incallui/BaseFragment.java
+++ b/InCallUI/src/com/android/incallui/BaseFragment.java
@@ -16,6 +16,7 @@
package com.android.incallui;
+import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
@@ -24,6 +25,8 @@ import android.os.Bundle;
*/
public abstract class BaseFragment<T extends Presenter<U>, U extends Ui> extends Fragment {
+ private static final String KEY_FRAGMENT_HIDDEN = "key_fragment_hidden";
+
private T mPresenter;
abstract T createPresenter();
@@ -54,6 +57,9 @@ public abstract class BaseFragment<T extends Presenter<U>, U extends Ui> extends
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mPresenter.onRestoreInstanceState(savedInstanceState);
+ if (savedInstanceState.getBoolean(KEY_FRAGMENT_HIDDEN)) {
+ getFragmentManager().beginTransaction().hide(this).commit();
+ }
}
}
@@ -67,5 +73,12 @@ public abstract class BaseFragment<T extends Presenter<U>, U extends Ui> extends
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mPresenter.onSaveInstanceState(outState);
+ outState.putBoolean(KEY_FRAGMENT_HIDDEN, isHidden());
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ ((FragmentDisplayManager) activity).onFragmentAttached(this);
}
}
diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java
index fd06e53b3..9a5228f7e 100644
--- a/InCallUI/src/com/android/incallui/Call.java
+++ b/InCallUI/src/com/android/incallui/Call.java
@@ -17,9 +17,11 @@
package com.android.incallui;
import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.testing.NeededForTesting;
import android.content.Context;
import android.net.Uri;
+import android.os.Bundle;
import android.telecom.CallProperties;
import android.telecom.DisconnectCause;
import android.telecom.GatewayInfo;
@@ -34,7 +36,8 @@ import java.util.Locale;
/**
* Describes a single call and its state.
*/
-public final class Call {
+@NeededForTesting
+public class Call {
/* Defines different states of this call */
public static class State {
public static final int INVALID = 0;
@@ -178,7 +181,7 @@ public final class Call {
}
};
- private final android.telecom.Call mTelecommCall;
+ private android.telecom.Call mTelecommCall;
private final String mId;
private int mState = State.INVALID;
private DisconnectCause mDisconnectCause;
@@ -187,6 +190,16 @@ public final class Call {
private InCallVideoCallListener mVideoCallListener;
+ /**
+ * Used only to create mock calls for testing
+ */
+ @NeededForTesting
+ Call(int state) {
+ mTelecommCall = null;
+ mId = ID_PREFIX + Integer.toString(sIdCounter++);
+ setState(state);
+ }
+
public Call(android.telecom.Call telecommCall) {
mTelecommCall = telecommCall;
mId = ID_PREFIX + Integer.toString(sIdCounter++);
@@ -258,6 +271,9 @@ public final class Call {
}
public String getNumber() {
+ if (mTelecommCall == null) {
+ return null;
+ }
if (mTelecommCall.getDetails().getGatewayInfo() != null) {
return mTelecommCall.getDetails().getGatewayInfo()
.getOriginalAddress().getSchemeSpecificPart();
@@ -266,11 +282,11 @@ public final class Call {
}
public Uri getHandle() {
- return mTelecommCall.getDetails().getHandle();
+ return mTelecommCall == null ? null : mTelecommCall.getDetails().getHandle();
}
public int getState() {
- if (mTelecommCall.getParent() != null) {
+ if (mTelecommCall != null && mTelecommCall.getParent() != null) {
return State.CONFERENCED;
} else {
return mState;
@@ -282,15 +298,21 @@ public final class Call {
}
public int getNumberPresentation() {
- return getTelecommCall().getDetails().getHandlePresentation();
+ return mTelecommCall == null ? null : mTelecommCall.getDetails().getHandlePresentation();
}
public int getCnapNamePresentation() {
- return getTelecommCall().getDetails().getCallerDisplayNamePresentation();
+ return mTelecommCall == null ? null
+ : mTelecommCall.getDetails().getCallerDisplayNamePresentation();
}
public String getCnapName() {
- return getTelecommCall().getDetails().getCallerDisplayName();
+ return mTelecommCall == null ? null
+ : getTelecommCall().getDetails().getCallerDisplayName();
+ }
+
+ public Bundle getExtras() {
+ return mTelecommCall == null ? null : mTelecommCall.getDetails().getExtras();
}
/** Returns call disconnect cause, defined by {@link DisconnectCause}. */
@@ -343,15 +365,15 @@ public final class Call {
}
public GatewayInfo getGatewayInfo() {
- return mTelecommCall.getDetails().getGatewayInfo();
+ return mTelecommCall == null ? null : mTelecommCall.getDetails().getGatewayInfo();
}
public PhoneAccountHandle getAccountHandle() {
- return mTelecommCall.getDetails().getAccountHandle();
+ return mTelecommCall == null ? null : mTelecommCall.getDetails().getAccountHandle();
}
public VideoCall getVideoCall() {
- return mTelecommCall.getVideoCall();
+ return mTelecommCall == null ? null : mTelecommCall.getVideoCall();
}
public List<String> getChildCallIds() {
@@ -405,6 +427,12 @@ public final class Call {
@Override
public String toString() {
+ if (mTelecommCall == null) {
+ // This should happen only in testing since otherwise we would never have a null
+ // Telecom call.
+ return String.valueOf(mId);
+ }
+
return String.format(Locale.US, "[%s, %s, %s, children:%s, parent:%s, conferenceable:%s, " +
"videoState:%d]",
mId,
diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java
index b2d109a6a..78956cbb9 100644
--- a/InCallUI/src/com/android/incallui/CallButtonFragment.java
+++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java
@@ -312,10 +312,6 @@ public class CallButtonFragment
@Override
public void setEnabled(boolean isEnabled) {
mIsEnabled = isEnabled;
- View view = getView();
- if (view.getVisibility() != View.VISIBLE) {
- view.setVisibility(View.VISIBLE);
- }
mAudioButton.setEnabled(isEnabled);
mChangeToVoiceButton.setEnabled(isEnabled);
@@ -773,7 +769,7 @@ public class CallButtonFragment
public void displayDialpad(boolean value, boolean animate) {
mShowDialpadButton.setSelected(value);
if (getActivity() != null && getActivity() instanceof InCallActivity) {
- ((InCallActivity) getActivity()).displayDialpad(value, animate);
+ ((InCallActivity) getActivity()).showDialpadFragment(value, animate);
}
}
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 6550eecdc..94e4ef161 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -24,20 +24,18 @@ import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
-import android.graphics.Point;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.os.Trace;
import android.telecom.DisconnectCause;
import android.telecom.VideoProfile;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.text.format.DateUtils;
-import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnLayoutChangeListener;
-import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
import android.view.ViewTreeObserver;
@@ -51,7 +49,6 @@ import android.widget.TextView;
import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.incallui.service.PhoneNumberService;
import com.android.phone.common.animation.AnimUtils;
import java.util.List;
@@ -61,9 +58,9 @@ import java.util.List;
*/
public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPresenter.CallCardUi>
implements CallCardPresenter.CallCardUi {
+ private static final String TAG = "CallCardFragment";
private AnimatorSet mAnimatorSet;
- private int mRevealAnimationDuration;
private int mShrinkAnimationDuration;
private int mFabNormalDiameter;
private int mFabSmallDiameter;
@@ -109,9 +106,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
private ImageButton mFloatingActionButton;
private int mFloatingActionButtonVerticalOffset;
- // Cached DisplayMetrics density.
- private float mDensity;
-
private float mTranslationOffset;
private Animation mPulseAnimation;
@@ -133,7 +127,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mRevealAnimationDuration = getResources().getInteger(R.integer.reveal_animation_duration);
mShrinkAnimationDuration = getResources().getInteger(R.integer.shrink_animation_duration);
mVideoAnimationDuration = getResources().getInteger(R.integer.video_animation_duration);
mFloatingActionButtonVerticalOffset = getResources().getDimensionPixelOffset(
@@ -144,7 +137,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
R.dimen.end_call_floating_action_button_small_diameter);
}
-
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -157,13 +149,12 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- super.onCreateView(inflater, container, savedInstanceState);
-
- mDensity = getResources().getDisplayMetrics().density;
+ Trace.beginSection(TAG + " onCreate");
mTranslationOffset =
getResources().getDimensionPixelSize(R.dimen.call_card_anim_translate_y_offset);
-
- return inflater.inflate(R.layout.call_card_content, container, false);
+ final View view = inflater.inflate(R.layout.call_card_fragment, container, false);
+ Trace.endSection();
+ return view;
}
@Override
@@ -226,12 +217,15 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
@Override
public void onClick(View v) {
InCallActivity activity = (InCallActivity) getActivity();
- activity.showConferenceCallManager(true);
+ activity.showConferenceFragment(true);
}
});
mPrimaryName.setElegantTextHeight(false);
mCallStateLabel.setElegantTextHeight(false);
+
+ final LayoutTransition transition = mPrimaryCallInfo.getLayoutTransition();
+ transition.enableTransitionType(LayoutTransition.CHANGING);
}
@Override
@@ -370,7 +364,17 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
if (mIsLandscape) {
return getView().getWidth() - mPrimaryCallCardContainer.getWidth();
} else {
- return getView().getHeight() - mPrimaryCallCardContainer.getHeight();
+ final int callCardHeight;
+ // Retrieve the actual height of the call card, independent of whether or not the
+ // outgoing call animation is in progress. The animation does not run in landscape mode
+ // so this only needs to be done for portrait.
+ if (mPrimaryCallCardContainer.getTag(R.id.view_tag_callcard_actual_height) != null) {
+ callCardHeight = (int) mPrimaryCallCardContainer.getTag(
+ R.id.view_tag_callcard_actual_height);
+ } else {
+ callCardHeight = mPrimaryCallCardContainer.getHeight();
+ }
+ return getView().getHeight() - callCardHeight;
}
}
@@ -380,7 +384,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
mPrimaryName.setText(null);
} else {
mPrimaryName.setText(nameIsNumber
- ? PhoneNumberUtils.ttsSpanAsPhoneNumber(name)
+ ? PhoneNumberUtils.getPhoneTtsSpannable(name)
: name);
// Set direction of the name field
@@ -406,7 +410,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
mPhoneNumber.setText(null);
mPhoneNumber.setVisibility(View.GONE);
} else {
- mPhoneNumber.setText(PhoneNumberUtils.ttsSpanAsPhoneNumber(number));
+ mPhoneNumber.setText(PhoneNumberUtils.getPhoneTtsSpannable(number));
mPhoneNumber.setVisibility(View.VISIBLE);
mPhoneNumber.setTextDirection(View.TEXT_DIRECTION_LTR);
}
@@ -427,7 +431,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
public void setPrimary(String number, String name, boolean nameIsNumber, String label,
Drawable photo, boolean isSipCall) {
Log.d(this, "Setting primary call");
-
// set the name field.
setPrimaryName(name, nameIsNumber);
@@ -464,7 +467,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
mSecondaryCallConferenceCallIcon.setVisibility(isConference ? View.VISIBLE : View.GONE);
mSecondaryCallName.setText(nameIsNumber
- ? PhoneNumberUtils.ttsSpanAsPhoneNumber(name)
+ ? PhoneNumberUtils.getPhoneTtsSpannable(name)
: name);
if (hasProvider) {
mSecondaryCallProviderLabel.setText(providerLabel);
@@ -852,13 +855,14 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
}
}
- public void animateForNewOutgoingCall(final Point touchPoint,
- final boolean showCircularReveal) {
+ @Override
+ public void animateForNewOutgoingCall() {
final ViewGroup parent = (ViewGroup) mPrimaryCallCardContainer.getParent();
final ViewTreeObserver observer = getView().getViewTreeObserver();
- mPrimaryCallInfo.getLayoutTransition().disableTransitionType(LayoutTransition.CHANGING);
+ final LayoutTransition transition = mPrimaryCallInfo.getLayoutTransition();
+ transition.disableTransitionType(LayoutTransition.CHANGING);
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
@@ -872,25 +876,29 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
final LayoutIgnoringListener listener = new LayoutIgnoringListener();
mPrimaryCallCardContainer.addOnLayoutChangeListener(listener);
- // Prepare the state of views before the circular reveal animation
+ // Prepare the state of views before the slide animation
final int originalHeight = mPrimaryCallCardContainer.getHeight();
+ mPrimaryCallCardContainer.setTag(R.id.view_tag_callcard_actual_height,
+ originalHeight);
mPrimaryCallCardContainer.setBottom(parent.getHeight());
// Set up FAB.
mFloatingActionButtonContainer.setVisibility(View.GONE);
mFloatingActionButtonController.setScreenWidth(parent.getWidth());
+
mCallButtonsContainer.setAlpha(0);
mCallStateLabel.setAlpha(0);
mPrimaryName.setAlpha(0);
mCallTypeLabel.setAlpha(0);
mCallNumberAndLabel.setAlpha(0);
- final Animator animator = getOutgoingCallAnimator(touchPoint,
- parent.getHeight(), originalHeight, showCircularReveal);
+ final Animator animator = getShrinkAnimator(parent.getHeight(), originalHeight);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
+ mPrimaryCallCardContainer.setTag(R.id.view_tag_callcard_actual_height,
+ null);
setViewStatePostAnimation(listener);
}
});
@@ -899,7 +907,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
});
}
- public void onDialpadVisiblityChange(boolean isShown) {
+ public void onDialpadVisibilityChange(boolean isShown) {
mIsDialpadShowing = isShown;
updateFabPosition();
}
@@ -969,7 +977,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
}
observer.removeOnGlobalLayoutListener(this);
- onDialpadVisiblityChange(mIsDialpadShowing);
+ onDialpadVisibilityChange(mIsDialpadShowing);
}
});
}
@@ -1000,41 +1008,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
return shrinkAnimator;
}
- private Animator getRevealAnimator(Point touchPoint) {
- final Activity activity = getActivity();
- final View view = activity.getWindow().getDecorView();
- final Display display = activity.getWindowManager().getDefaultDisplay();
- final Point size = new Point();
- display.getSize(size);
-
- int startX = size.x / 2;
- int startY = size.y / 2;
- if (touchPoint != null) {
- startX = touchPoint.x;
- startY = touchPoint.y;
- }
-
- final Animator valueAnimator = ViewAnimationUtils.createCircularReveal(view,
- startX, startY, 0, Math.max(size.x, size.y));
- valueAnimator.setDuration(mRevealAnimationDuration);
- return valueAnimator;
- }
-
- private Animator getOutgoingCallAnimator(Point touchPoint, int startHeight, int endHeight,
- boolean showCircularReveal) {
-
- final Animator shrinkAnimator = getShrinkAnimator(startHeight, endHeight);
-
- if (!showCircularReveal) {
- return shrinkAnimator;
- }
-
- final Animator revealAnimator = getRevealAnimator(touchPoint);
- final AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.playSequentially(revealAnimator, shrinkAnimator);
- return animatorSet;
- }
-
private void assignTranslateAnimation(View view, int offset) {
view.setTranslationY(mTranslationOffset * offset);
view.animate().translationY(0).alpha(1).withLayer()
@@ -1055,7 +1028,10 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
setViewStatePostAnimation(mCallStateIcon);
mPrimaryCallCardContainer.removeOnLayoutChangeListener(layoutChangeListener);
- mPrimaryCallInfo.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
+
+ final LayoutTransition transition = mPrimaryCallInfo.getLayoutTransition();
+ transition.enableTransitionType(LayoutTransition.CHANGING);
+
mFloatingActionButtonController.scaleIn(AnimUtils.NO_DELAY);
}
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 3a4c46a60..59263270d 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -17,6 +17,8 @@
package com.android.incallui;
import android.Manifest;
+import android.app.Activity;
+import android.app.FragmentManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -35,6 +37,7 @@ import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import com.android.incallui.CircularRevealFragment.OnCircularRevealCompleteListener;
import com.android.incallui.ContactInfoCache.ContactCacheEntry;
import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
@@ -119,6 +122,8 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
updateContactEntry(null, true);
}
}
+
+ onStateChange(null, InCallPresenter.getInstance().getInCallState(), CallList.getInstance());
}
@Override
@@ -677,9 +682,10 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
}
Log.i(this, "Disconnecting call: " + mPrimary);
+ final String callId = mPrimary.getId();
mPrimary.setState(Call.State.DISCONNECTING);
CallList.getInstance().onUpdate(mPrimary);
- TelecomAdapter.getInstance().disconnectCall(mPrimary.getId());
+ TelecomAdapter.getInstance().disconnectCall(callId);
}
private String getNumberFromHandle(Uri handle) {
@@ -749,5 +755,6 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
void showHdAudioIndicator(boolean visible);
void showManageConferenceCallButton(boolean visible);
boolean isManageConferenceVisible();
+ void animateForNewOutgoingCall();
}
}
diff --git a/InCallUI/src/com/android/incallui/CircularRevealActivity.java b/InCallUI/src/com/android/incallui/CircularRevealActivity.java
deleted file mode 100644
index 7a9b7ccbf..000000000
--- a/InCallUI/src/com/android/incallui/CircularRevealActivity.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2014 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.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.graphics.Outline;
-import android.graphics.Point;
-import android.os.Bundle;
-import android.support.v4.content.LocalBroadcastManager;
-import android.view.Display;
-import android.view.View;
-import android.view.ViewAnimationUtils;
-import android.view.ViewOutlineProvider;
-import android.view.ViewTreeObserver;
-import android.view.ViewTreeObserver.OnPreDrawListener;
-
-import com.android.contacts.common.interactions.TouchPointManager;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-
-/**
- * Lightweight activity used to display a circular reveal while InCallActivity is starting up.
- * A BroadcastReceiver is used to listen to broadcasts from a LocalBroadcastManager to finish
- * the activity at suitable times.
- */
-public class CircularRevealActivity extends Activity {
- private static final int REVEAL_DURATION = 333;
- public static final String EXTRA_THEME_COLORS = "extra_theme_colors";
- public static final String ACTION_CLEAR_DISPLAY = "action_clear_display";
-
- final BroadcastReceiver mClearDisplayReceiver = new BroadcastReceiver( ) {
- @Override
- public void onReceive(Context context, Intent intent) {
- clearDisplay();
- }
- };
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- overridePendingTransition(0, 0);
- setContentView(R.layout.outgoing_call_animation);
- final Point touchPoint = getIntent().getParcelableExtra(TouchPointManager.TOUCH_POINT);
- final MaterialPalette palette = getIntent().getParcelableExtra(EXTRA_THEME_COLORS);
- setupDecorView(touchPoint, palette);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- if (!InCallPresenter.getInstance().isServiceBound()) {
- clearDisplay();
- }
- final IntentFilter filter = new IntentFilter();
- filter.addAction(ACTION_CLEAR_DISPLAY);
- LocalBroadcastManager.getInstance(this).registerReceiver(mClearDisplayReceiver, filter);
- }
-
- @Override
- protected void onStop() {
- LocalBroadcastManager.getInstance(this).unregisterReceiver(mClearDisplayReceiver);
- super.onStop();
- }
-
- private void setupDecorView(final Point touchPoint, MaterialPalette palette) {
- final View view = getWindow().getDecorView();
-
- // The circle starts from an initial size of 0 so clip it such that it is invisible. When
- // the animation later starts, this clip will be clobbered by the circular reveal clip.
- // See ViewAnimationUtils.createCircularReveal.
- view.setOutlineProvider(new ViewOutlineProvider() {
- @Override
- public void getOutline(View view, Outline outline) {
- // Using (0, 0, 0, 0) will not work since the outline will simply be treated as
- // an empty outline.
- outline.setOval(-1, -1, 0, 0);
- }
- });
- view.setClipToOutline(true);
-
- if (palette != null) {
- view.findViewById(R.id.outgoing_call_animation_circle).setBackgroundColor(
- palette.mPrimaryColor);
- getWindow().setStatusBarColor(palette.mSecondaryColor);
- }
-
- view.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- final ViewTreeObserver vto = view.getViewTreeObserver();
- if (vto.isAlive()) {
- vto.removeOnPreDrawListener(this);
- }
- final Animator animator = getRevealAnimator(touchPoint);
- // Since this animator is a RenderNodeAnimator (native animator), add an arbitary
- // start delay to force the onAnimationStart callback to happen later on the UI
- // thread. Otherwise it would happen right away inside animator.start()
- animator.setStartDelay(5);
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(Animator animation) {
- InCallPresenter.getInstance().onCircularRevealStarted(
- CircularRevealActivity.this);
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- view.setClipToOutline(false);
- super.onAnimationEnd(animation);
- }
- });
- animator.start();
- return false;
- }
- });
- }
-
- private void clearDisplay() {
- getWindow().getDecorView().setVisibility(View.INVISIBLE);
- finish();
- }
-
- @Override
- public void onBackPressed() {
- return;
- }
-
- public static void sendClearDisplayBroadcast(Context context) {
- LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(ACTION_CLEAR_DISPLAY));
- }
-
- private Animator getRevealAnimator(Point touchPoint) {
- final View view = getWindow().getDecorView();
- final Display display = getWindowManager().getDefaultDisplay();
- final Point size = new Point();
- display.getSize(size);
-
- int startX = size.x / 2;
- int startY = size.y / 2;
- if (touchPoint != null) {
- startX = touchPoint.x;
- startY = touchPoint.y;
- }
-
- final Animator valueAnimator = ViewAnimationUtils.createCircularReveal(view,
- startX, startY, 0, Math.max(size.x, size.y));
- valueAnimator.setDuration(REVEAL_DURATION);
- return valueAnimator;
- }
-}
diff --git a/InCallUI/src/com/android/incallui/CircularRevealFragment.java b/InCallUI/src/com/android/incallui/CircularRevealFragment.java
new file mode 100644
index 000000000..f8cc424fe
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/CircularRevealFragment.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2014 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.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.graphics.Outline;
+import android.graphics.Point;
+import android.os.Bundle;
+import android.view.Display;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewAnimationUtils;
+import android.view.ViewGroup;
+import android.view.ViewOutlineProvider;
+import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnPreDrawListener;
+
+import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
+
+public class CircularRevealFragment extends Fragment {
+ static final String TAG = "CircularRevealFragment";
+
+ private Point mTouchPoint;
+ private OnCircularRevealCompleteListener mListener;
+ private boolean mAnimationStarted;
+
+ interface OnCircularRevealCompleteListener {
+ public void onCircularRevealComplete(FragmentManager fm);
+ }
+
+ public static void startCircularReveal(FragmentManager fm, Point touchPoint,
+ OnCircularRevealCompleteListener listener) {
+ if (fm.findFragmentByTag(TAG) == null) {
+ fm.beginTransaction().add(R.id.main,
+ new CircularRevealFragment(touchPoint, listener), TAG)
+ .commitAllowingStateLoss();
+ } else {
+ Log.w(TAG, "An instance of CircularRevealFragment already exists");
+ }
+ }
+
+ public static void endCircularReveal(FragmentManager fm) {
+ final Fragment fragment = fm.findFragmentByTag(TAG);
+ if (fragment != null) {
+ fm.beginTransaction().remove(fragment).commitAllowingStateLoss();
+ }
+ }
+
+ /**
+ * Empty constructor used only by the {@link FragmentManager}.
+ */
+ public CircularRevealFragment() {}
+
+ public CircularRevealFragment(Point touchPoint, OnCircularRevealCompleteListener listener) {
+ mTouchPoint = touchPoint;
+ mListener = listener;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (!mAnimationStarted) {
+ // Only run the animation once for each instance of the fragment
+ startOutgoingAnimation(InCallPresenter.getInstance().getThemeColors());
+ }
+ mAnimationStarted = true;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.outgoing_call_animation, container, false);
+ }
+
+ public void startOutgoingAnimation(MaterialPalette palette) {
+ final Activity activity = getActivity();
+ if (activity == null) {
+ Log.w(this, "Asked to do outgoing call animation when not attached");
+ return;
+ }
+
+ final View view = activity.getWindow().getDecorView();
+
+ // The circle starts from an initial size of 0 so clip it such that it is invisible.
+ // Otherwise the first frame is drawn with a fully opaque screen which causes jank. When
+ // the animation later starts, this clip will be clobbered by the circular reveal clip.
+ // See ViewAnimationUtils.createCircularReveal.
+ view.setOutlineProvider(new ViewOutlineProvider() {
+ @Override
+ public void getOutline(View view, Outline outline) {
+ // Using (0, 0, 0, 0) will not work since the outline will simply be treated as
+ // an empty outline.
+ outline.setOval(-1, -1, 0, 0);
+ }
+ });
+ view.setClipToOutline(true);
+
+ if (palette != null) {
+ view.findViewById(R.id.outgoing_call_animation_circle).setBackgroundColor(
+ palette.mPrimaryColor);
+ activity.getWindow().setStatusBarColor(palette.mSecondaryColor);
+ }
+
+ view.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ final ViewTreeObserver vto = view.getViewTreeObserver();
+ if (vto.isAlive()) {
+ vto.removeOnPreDrawListener(this);
+ }
+ final Animator animator = getRevealAnimator(mTouchPoint);
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ view.setClipToOutline(false);
+ if (mListener != null) {
+ mListener.onCircularRevealComplete(getFragmentManager());
+ }
+ }
+ });
+ animator.start();
+ return false;
+ }
+ });
+ }
+
+ private Animator getRevealAnimator(Point touchPoint) {
+ final Activity activity = getActivity();
+ final View view = activity.getWindow().getDecorView();
+ final Display display = activity.getWindowManager().getDefaultDisplay();
+ final Point size = new Point();
+ display.getSize(size);
+
+ int startX = size.x / 2;
+ int startY = size.y / 2;
+ if (touchPoint != null) {
+ startX = touchPoint.x;
+ startY = touchPoint.y;
+ }
+
+ final Animator valueAnimator = ViewAnimationUtils.createCircularReveal(view,
+ startX, startY, 0, Math.max(size.x, size.y));
+ valueAnimator.setDuration(getResources().getInteger(R.integer.reveal_animation_duration));
+ return valueAnimator;
+ }
+}
diff --git a/InCallUI/src/com/android/incallui/ConferenceManagerFragment.java b/InCallUI/src/com/android/incallui/ConferenceManagerFragment.java
index 163954b2d..6b232c934 100644
--- a/InCallUI/src/com/android/incallui/ConferenceManagerFragment.java
+++ b/InCallUI/src/com/android/incallui/ConferenceManagerFragment.java
@@ -29,22 +29,25 @@ import com.android.contacts.common.ContactPhotoManager;
import java.util.List;
/**
- * Fragment for call control buttons
+ * Fragment that allows the user to manage a conference call.
*/
public class ConferenceManagerFragment
extends BaseFragment<ConferenceManagerPresenter,
ConferenceManagerPresenter.ConferenceManagerUi>
implements ConferenceManagerPresenter.ConferenceManagerUi {
+ private static final String KEY_IS_VISIBLE = "key_conference_is_visible";
+
private ListView mConferenceParticipantList;
private int mActionBarElevation;
private ContactPhotoManager mContactPhotoManager;
private LayoutInflater mInflater;
private ConferenceParticipantListAdapter mConferenceParticipantListAdapter;
+ private boolean mIsVisible;
+ private boolean mIsRecreating;
@Override
ConferenceManagerPresenter createPresenter() {
- // having a singleton instance.
return new ConferenceManagerPresenter();
}
@@ -56,6 +59,10 @@ public class ConferenceManagerFragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (savedInstanceState != null) {
+ mIsRecreating = true;
+ mIsVisible = savedInstanceState.getBoolean(KEY_IS_VISIBLE);
+ }
}
@Override
@@ -75,15 +82,23 @@ public class ConferenceManagerFragment
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public void onResume() {
+ super.onResume();
+ if (mIsRecreating) {
+ onVisibilityChanged(mIsVisible);
+ }
}
@Override
- public void setVisible(boolean on) {
- ActionBar actionBar = getActivity().getActionBar();
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putBoolean(KEY_IS_VISIBLE, mIsVisible);
+ super.onSaveInstanceState(outState);
+ }
- if (on) {
+ public void onVisibilityChanged(boolean isVisible) {
+ mIsVisible = isVisible;
+ ActionBar actionBar = getActivity().getActionBar();
+ if (isVisible) {
actionBar.setTitle(R.string.manageConferenceLabel);
actionBar.setElevation(mActionBarElevation);
actionBar.setHideOffset(0);
@@ -91,13 +106,10 @@ public class ConferenceManagerFragment
final CallList calls = CallList.getInstance();
getPresenter().init(getActivity(), calls);
- getView().setVisibility(View.VISIBLE);
// Request focus on the list of participants for accessibility purposes. This ensures
// that once the list of participants is shown, the first participant is announced.
mConferenceParticipantList.requestFocus();
} else {
- getView().setVisibility(View.GONE);
-
actionBar.setElevation(0);
actionBar.setHideOffset(actionBar.getHeight());
}
diff --git a/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java b/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java
index 86fc18ff3..6fb6e5dda 100644
--- a/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java
+++ b/InCallUI/src/com/android/incallui/ConferenceManagerPresenter.java
@@ -137,7 +137,6 @@ public class ConferenceManagerPresenter
}
public interface ConferenceManagerUi extends Ui {
- void setVisible(boolean on);
boolean isFragmentVisible();
void update(Context context, List<Call> participants, boolean parentCanSeparate);
void refreshCall(Call call);
diff --git a/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java b/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java
index 7825dc1ad..62c1214c7 100644
--- a/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java
+++ b/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java
@@ -418,7 +418,7 @@ public class ConferenceParticipantListAdapter extends BaseAdapter {
numberTypeTextView.setVisibility(View.GONE);
} else {
numberTextView.setVisibility(View.VISIBLE);
- numberTextView.setText(PhoneNumberUtils.ttsSpanAsPhoneNumber(callerNumber));
+ numberTextView.setText(PhoneNumberUtils.getPhoneTtsSpannable(callerNumber));
numberTypeTextView.setVisibility(View.VISIBLE);
numberTypeTextView.setText(callerNumberType);
}
diff --git a/InCallUI/src/com/android/incallui/DialpadFragment.java b/InCallUI/src/com/android/incallui/DialpadFragment.java
index da3f0cb74..5a02b8b0e 100644
--- a/InCallUI/src/com/android/incallui/DialpadFragment.java
+++ b/InCallUI/src/com/android/incallui/DialpadFragment.java
@@ -29,13 +29,11 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import com.android.phone.common.dialpad.DialpadKeyButton;
import com.android.phone.common.dialpad.DialpadView;
@@ -83,30 +81,6 @@ public class DialpadFragment extends BaseFragment<DialpadPresenter, DialpadPrese
}
}
- /**
- * LinearLayout that always returns true for onHoverEvent callbacks, to fix
- * problems with accessibility due to the dialpad overlaying other fragments.
- */
- public static class HoverIgnoringLinearLayout extends LinearLayout {
-
- public HoverIgnoringLinearLayout(Context context) {
- super(context);
- }
-
- public HoverIgnoringLinearLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public HoverIgnoringLinearLayout(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- public boolean onHoverEvent(MotionEvent event) {
- return true;
- }
- }
-
private EditText mDtmfDialerField;
/** Hash Map to map a view id to a character*/
@@ -445,11 +419,6 @@ public class DialpadFragment extends BaseFragment<DialpadPresenter, DialpadPrese
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-
- @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View parent = inflater.inflate(
@@ -514,7 +483,7 @@ public class DialpadFragment extends BaseFragment<DialpadPresenter, DialpadPrese
* @param text Text to set Dialpad EditText to.
*/
public void setDtmfText(String text) {
- mDtmfDialerField.setText(PhoneNumberUtils.ttsSpanAsPhoneNumber(text));
+ mDtmfDialerField.setText(PhoneNumberUtils.getPhoneTtsSpannable(text));
}
@Override
diff --git a/InCallUI/src/com/android/incallui/FragmentDisplayManager.java b/InCallUI/src/com/android/incallui/FragmentDisplayManager.java
new file mode 100644
index 000000000..045d999a0
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/FragmentDisplayManager.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2015 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.app.Fragment;
+
+interface FragmentDisplayManager {
+ public void onFragmentAttached(Fragment fragment);
+}
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index f75c33b23..5a572d583 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -18,7 +18,9 @@ package com.android.incallui;
import android.app.ActionBar;
import android.app.Activity;
+import android.app.ActivityManager;
import android.app.AlertDialog;
+import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
@@ -27,14 +29,11 @@ import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.res.Configuration;
-import android.content.res.Resources;
import android.graphics.Point;
-import android.net.Uri;
import android.os.Bundle;
+import android.os.Trace;
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.animation.Animation;
@@ -48,8 +47,6 @@ import android.view.accessibility.AccessibilityEvent;
import com.android.phone.common.animation.AnimUtils;
import com.android.phone.common.animation.AnimationListenerAdapter;
import com.android.contacts.common.interactions.TouchPointManager;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment;
import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.SelectPhoneAccountListener;
import com.android.incallui.Call.State;
@@ -59,14 +56,20 @@ import java.util.List;
import java.util.Locale;
/**
- * Phone app "in call" screen.
+ * Main activity that the user interacts with while in a live call.
*/
-public class InCallActivity extends Activity {
+public class InCallActivity extends Activity implements FragmentDisplayManager {
+
+ public static final String TAG = InCallActivity.class.getSimpleName();
public static final String SHOW_DIALPAD_EXTRA = "InCallActivity.show_dialpad";
public static final String DIALPAD_TEXT_EXTRA = "InCallActivity.dialpad_text";
public static final String NEW_OUTGOING_CALL_EXTRA = "InCallActivity.new_outgoing_call";
- public static final String SHOW_CIRCULAR_REVEAL_EXTRA = "InCallActivity.show_circular_reveal";
+
+ private static final String TAG_DIALPAD_FRAGMENT = "tag_dialpad_fragment";
+ private static final String TAG_CONFERENCE_FRAGMENT = "tag_conference_manager_fragment";
+ private static final String TAG_CALLCARD_FRAGMENT = "tag_callcard_fragment";
+ private static final String TAG_ANSWER_FRAGMENT = "tag_answer_fragment";
private CallButtonFragment mCallButtonFragment;
private CallCardFragment mCallCardFragment;
@@ -100,7 +103,7 @@ public class InCallActivity extends Activity {
AnimationListenerAdapter mSlideOutListener = new AnimationListenerAdapter() {
@Override
public void onAnimationEnd(Animation animation) {
- showDialpad(false);
+ showFragment(TAG_DIALPAD_FRAGMENT, false, true);
}
};
@@ -136,11 +139,8 @@ public class InCallActivity extends Activity {
// TODO(klp): Do we need to add this back when prox sensor is not available?
// lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
- // Inflate everything in incall_screen.xml and add it to the screen.
setContentView(R.layout.incall_screen);
- initializeInCall();
-
internalResolveIntent(getIntent());
mCurrentOrientation = getResources().getConfiguration().orientation;
@@ -179,6 +179,7 @@ public class InCallActivity extends Activity {
@Override
protected void onSaveInstanceState(Bundle out) {
+ // TODO: The dialpad fragment should handle this as part of its own state
out.putBoolean(SHOW_DIALPAD_EXTRA, mCallButtonFragment.isDialpadVisible());
if (mDialpadFragment != null) {
out.putString(DIALPAD_TEXT_EXTRA, mDialpadFragment.getDtmfText());
@@ -255,37 +256,45 @@ public class InCallActivity extends Activity {
}
/**
+ * When fragments have a parent fragment, onAttachFragment is not called on the parent
+ * activity. To fix this, register our own callback instead that is always called for
+ * all fragments.
+ *
+ * @see {@link BaseFragment#onAttach(Activity)}
+ */
+ @Override
+ public void onFragmentAttached(Fragment fragment) {
+ if (fragment instanceof DialpadFragment) {
+ mDialpadFragment = (DialpadFragment) fragment;
+ } else if (fragment instanceof AnswerFragment) {
+ mAnswerFragment = (AnswerFragment) fragment;
+ } else if (fragment instanceof CallCardFragment) {
+ mCallCardFragment = (CallCardFragment) fragment;
+ mChildFragmentManager = mCallCardFragment.getChildFragmentManager();
+ } else if (fragment instanceof ConferenceManagerFragment) {
+ mConferenceManagerFragment = (ConferenceManagerFragment) fragment;
+ } else if (fragment instanceof CallButtonFragment) {
+ mCallButtonFragment = (CallButtonFragment) fragment;
+ }
+ }
+
+ /**
* Returns true when theActivity is in foreground (between onResume and onPause).
*/
/* package */ boolean isForegroundActivity() {
return mIsForegroundActivity;
}
- private boolean hasPendingErrorDialog() {
- return mDialog != null;
+ private boolean hasPendingDialogs() {
+ return mDialog != null || (mAnswerFragment != null && mAnswerFragment.hasPendingDialogs());
}
- /**
- * Dismisses the in-call screen.
- *
- * We never *really* finish() the InCallActivity, since we don't want to get destroyed and then
- * have to be re-created from scratch for the next call. Instead, we just move ourselves to the
- * back of the activity stack.
- *
- * This also means that we'll no longer be reachable via the BACK button (since moveTaskToBack()
- * puts us behind the Home app, but the home app doesn't allow the BACK key to move you any
- * farther down in the history stack.)
- *
- * (Since the Phone app itself is never killed, this basically means that we'll keep a single
- * InCallActivity instance around for the entire uptime of the device. This noticeably improves
- * the UI responsiveness for incoming calls.)
- */
@Override
public void finish() {
Log.i(this, "finish(). Dialog showing: " + (mDialog != null));
// skip finish if we are still showing a dialog.
- if (!hasPendingErrorDialog() && !mAnswerFragment.hasPendingDialogs()) {
+ if (!hasPendingDialogs()) {
super.finish();
}
}
@@ -318,22 +327,23 @@ public class InCallActivity extends Activity {
// BACK is also used to exit out of any "special modes" of the
// in-call UI:
- if (!mConferenceManagerFragment.isVisible() && !mCallCardFragment.isVisible()) {
+ if ((mConferenceManagerFragment == null || !mConferenceManagerFragment.isVisible())
+ && !mCallCardFragment.isVisible()) {
return;
}
if (mDialpadFragment != null && mDialpadFragment.isVisible()) {
mCallButtonFragment.displayDialpad(false /* show */, true /* animate */);
return;
- } else if (mConferenceManagerFragment.isVisible()) {
- showConferenceCallManager(false);
+ } else if (mConferenceManagerFragment != null && mConferenceManagerFragment.isVisible()) {
+ showConferenceFragment(false);
return;
}
// Always disable the Back key while an incoming call is ringing
final Call call = CallList.getInstance().getIncomingCall();
if (call != null) {
- Log.d(this, "Consume Back press for an incoming call");
+ Log.i(this, "Consume Back press for an incoming call");
return;
}
@@ -429,13 +439,6 @@ public class InCallActivity extends Activity {
// key events to the DTMFDialer's onDialerKeyDown.
if (mDialpadFragment != null && 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;
@@ -465,10 +468,13 @@ public class InCallActivity extends Activity {
return mCallCardFragment;
}
+ public AnswerFragment getAnswerFragment() {
+ return mAnswerFragment;
+ }
+
private void internalResolveIntent(Intent intent) {
final String action = intent.getAction();
-
- if (action.equals(intent.ACTION_MAIN)) {
+ if (action.equals(Intent.ACTION_MAIN)) {
// This action is the normal way to bring up the in-call UI.
//
// But we do check here for one extra that can come along with the
@@ -485,6 +491,7 @@ public class InCallActivity extends Activity {
relaunchedFromDialer(showDialpad);
}
+ boolean newOutgoingCall = false;
if (intent.getBooleanExtra(NEW_OUTGOING_CALL_EXTRA, false)) {
intent.removeExtra(NEW_OUTGOING_CALL_EXTRA);
Call call = CallList.getInstance().getOutgoingCall();
@@ -512,12 +519,9 @@ public class InCallActivity extends Activity {
}
}
- // This is only true in the case where an outgoing call is initiated by tapping
- // on the "Select account dialog", in which case we skip the initial animation. In
- // most other cases the circular reveal is done by OutgoingCallAnimationActivity.
- final boolean showCircularReveal =
- intent.getBooleanExtra(SHOW_CIRCULAR_REVEAL_EXTRA, false);
- mCallCardFragment.animateForNewOutgoingCall(touchPoint, showCircularReveal);
+ // Start animation for new outgoing call
+ CircularRevealFragment.startCircularReveal(getFragmentManager(), touchPoint,
+ InCallPresenter.getInstance());
// InCallActivity is responsible for disconnecting a new outgoing call if there
// is no way of making it (i.e. no valid call capable accounts)
@@ -526,11 +530,12 @@ public class InCallActivity extends Activity {
}
dismissKeyguard(true);
+ newOutgoingCall = true;
}
Call pendingAccountSelectionCall = CallList.getInstance().getWaitingForAccountCall();
if (pendingAccountSelectionCall != null) {
- mCallCardFragment.setVisible(false);
+ showCallCardFragment(false);
Bundle extras = pendingAccountSelectionCall
.getTelecommCall().getDetails().getExtras();
@@ -558,8 +563,8 @@ public class InCallActivity extends Activity {
SelectPhoneAccountDialogFragment.showAccountDialog(getFragmentManager(),
R.string.select_phone_account_for_calls, true, phoneAccountHandles,
listener);
- } else {
- mCallCardFragment.setVisible(true);
+ } else if (!newOutgoingCall) {
+ showCallCardFragment(true);
}
return;
@@ -580,40 +585,6 @@ public class InCallActivity extends Activity {
}
}
- private void initializeInCall() {
- if (mCallCardFragment == null) {
- mCallCardFragment = (CallCardFragment) getFragmentManager()
- .findFragmentById(R.id.callCardFragment);
- }
-
- mChildFragmentManager = mCallCardFragment.getChildFragmentManager();
-
- if (mCallButtonFragment == null) {
- mCallButtonFragment = (CallButtonFragment) mChildFragmentManager
- .findFragmentById(R.id.callButtonFragment);
- mCallButtonFragment.getView().setVisibility(View.INVISIBLE);
- }
-
- if (mAnswerFragment == null) {
- mAnswerFragment = (AnswerFragment) mChildFragmentManager
- .findFragmentById(R.id.answerFragment);
- }
-
- if (mConferenceManagerFragment == null) {
- mConferenceManagerFragment = (ConferenceManagerFragment) getFragmentManager()
- .findFragmentById(R.id.conferenceManagerFragment);
- mConferenceManagerFragment.getView().setVisibility(View.INVISIBLE);
- }
- }
-
- /**
- * 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 /* show */, true /* animate */);
- }
-
public void dismissKeyguard(boolean dismiss) {
if (mDismissKeyguard == dismiss) {
return;
@@ -626,67 +597,134 @@ public class InCallActivity extends Activity {
}
}
- private void showDialpad(boolean showDialpad) {
- // If the dialpad is being shown and it has not already been loaded, replace the dialpad
- // placeholder with the actual fragment before continuing.
- if (mDialpadFragment == null && showDialpad) {
- final FragmentTransaction loadTransaction = mChildFragmentManager.beginTransaction();
- View fragmentContainer = findViewById(R.id.dialpadFragmentContainer);
- mDialpadFragment = new DialpadFragment();
- loadTransaction.replace(fragmentContainer.getId(), mDialpadFragment,
- DialpadFragment.class.getName());
- loadTransaction.commitAllowingStateLoss();
- mChildFragmentManager.executePendingTransactions();
+ private void showFragment(String tag, boolean show, boolean executeImmediately) {
+ Trace.beginSection("showFragment - " + tag);
+ final FragmentManager fm = getFragmentManagerForTag(tag);
+
+ if (fm == null) {
+ Log.w(TAG, "Fragment manager is null for : " + tag);
+ return;
}
- final FragmentTransaction ft = mChildFragmentManager.beginTransaction();
- if (showDialpad) {
- ft.show(mDialpadFragment);
+ Fragment fragment = fm.findFragmentByTag(tag);
+ if (!show && fragment == null) {
+ // Nothing to show, so bail early.
+ return;
+ }
+
+ final FragmentTransaction transaction = fm.beginTransaction();
+ if (show) {
+ if (fragment == null) {
+ fragment = createNewFragmentForTag(tag);
+ transaction.add(getContainerIdForFragment(tag), fragment, tag);
+ } else {
+ transaction.show(fragment);
+ }
} else {
- ft.hide(mDialpadFragment);
+ transaction.hide(fragment);
}
- ft.commitAllowingStateLoss();
+
+ transaction.commitAllowingStateLoss();
+ if (executeImmediately) {
+ fm.executePendingTransactions();
+ }
+ Trace.endSection();
}
- public void displayDialpad(boolean showDialpad, boolean animate) {
+ private Fragment createNewFragmentForTag(String tag) {
+ if (TAG_DIALPAD_FRAGMENT.equals(tag)) {
+ mDialpadFragment = new DialpadFragment();
+ return mDialpadFragment;
+ } else if (TAG_ANSWER_FRAGMENT.equals(tag)) {
+ mAnswerFragment = new AnswerFragment();
+ return mAnswerFragment;
+ } else if (TAG_CONFERENCE_FRAGMENT.equals(tag)) {
+ mConferenceManagerFragment = new ConferenceManagerFragment();
+ return mConferenceManagerFragment;
+ } else if (TAG_CALLCARD_FRAGMENT.equals(tag)) {
+ mCallCardFragment = new CallCardFragment();
+ return mCallCardFragment;
+ }
+ throw new IllegalStateException("Unexpected fragment: " + tag);
+ }
+
+ private FragmentManager getFragmentManagerForTag(String tag) {
+ if (TAG_DIALPAD_FRAGMENT.equals(tag)) {
+ return mChildFragmentManager;
+ } else if (TAG_ANSWER_FRAGMENT.equals(tag)) {
+ return mChildFragmentManager;
+ } else if (TAG_CONFERENCE_FRAGMENT.equals(tag)) {
+ return getFragmentManager();
+ } else if (TAG_CALLCARD_FRAGMENT.equals(tag)) {
+ return getFragmentManager();
+ }
+ throw new IllegalStateException("Unexpected fragment: " + tag);
+ }
+
+ private int getContainerIdForFragment(String tag) {
+ if (TAG_DIALPAD_FRAGMENT.equals(tag)) {
+ return R.id.answer_and_dialpad_container;
+ } else if (TAG_ANSWER_FRAGMENT.equals(tag)) {
+ return R.id.answer_and_dialpad_container;
+ } else if (TAG_CONFERENCE_FRAGMENT.equals(tag)) {
+ return R.id.main;
+ } else if (TAG_CALLCARD_FRAGMENT.equals(tag)) {
+ return R.id.main;
+ }
+ throw new IllegalStateException("Unexpected fragment: " + tag);
+ }
+
+ public void showDialpadFragment(boolean show, boolean animate) {
// If the dialpad is already visible, don't animate in. If it's gone, don't animate out.
- if ((showDialpad && isDialpadVisible()) || (!showDialpad && !isDialpadVisible())) {
+ if ((show && isDialpadVisible()) || (!show && !isDialpadVisible())) {
return;
}
// We don't do a FragmentTransaction on the hide case because it will be dealt with when
// the listener is fired after an animation finishes.
if (!animate) {
- showDialpad(showDialpad);
+ showFragment(TAG_DIALPAD_FRAGMENT, show, true);
} else {
- if (showDialpad) {
- showDialpad(true);
+ if (show) {
+ showFragment(TAG_DIALPAD_FRAGMENT, true, true);
mDialpadFragment.animateShowDialpad();
}
- mCallCardFragment.onDialpadVisiblityChange(showDialpad);
- mDialpadFragment.getView().startAnimation(showDialpad ? mSlideIn : mSlideOut);
+ mCallCardFragment.onDialpadVisibilityChange(show);
+ mDialpadFragment.getView().startAnimation(show ? mSlideIn : mSlideOut);
}
- InCallPresenter.getInstance().getProximitySensor().onDialpadVisible(showDialpad);
+ final ProximitySensor sensor = InCallPresenter.getInstance().getProximitySensor();
+ if (sensor != null) {
+ sensor.onDialpadVisible(show);
+ }
}
public boolean isDialpadVisible() {
return mDialpadFragment != null && mDialpadFragment.isVisible();
}
+ public void showCallCardFragment(boolean show) {
+ showFragment(TAG_CALLCARD_FRAGMENT, show, true);
+ }
+
/**
* Hides or shows the conference manager fragment.
*
* @param show {@code true} if the conference manager should be shown, {@code false} if it
* should be hidden.
*/
- public void showConferenceCallManager(boolean show) {
- mConferenceManagerFragment.setVisible(show);
+ public void showConferenceFragment(boolean show) {
+ showFragment(TAG_CONFERENCE_FRAGMENT, show, true);
+ mConferenceManagerFragment.onVisibilityChanged(show);
// Need to hide the call card fragment to ensure that accessibility service does not try to
// give focus to the call card when the conference manager is visible.
mCallCardFragment.getView().setVisibility(show ? View.GONE : View.VISIBLE);
}
+ public void showAnswerFragment(boolean show) {
+ showFragment(TAG_ANSWER_FRAGMENT, show, true);
+ }
+
public void showPostCharWaitDialog(String callId, String chars) {
if (isForegroundActivity()) {
final PostCharDialogFragment fragment = new PostCharDialogFragment(callId, chars);
@@ -725,7 +763,9 @@ public class InCallActivity extends Activity {
mDialog.dismiss();
mDialog = null;
}
- mAnswerFragment.dismissPendingDialogues();
+ if (mAnswerFragment != null) {
+ mAnswerFragment.dismissPendingDialogs();
+ }
}
/**
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 7c71d2c86..225b1a259 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -16,14 +16,13 @@
package com.android.incallui;
-import android.app.Activity;
+import android.app.FragmentManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Point;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Handler;
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccount;
import android.telecom.Phone;
@@ -38,6 +37,7 @@ import android.view.View;
import com.google.common.base.Preconditions;
import com.android.contacts.common.interactions.TouchPointManager;
+import com.android.contacts.common.testing.NeededForTesting;
import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import com.android.incalluibind.ObjectFactory;
@@ -57,7 +57,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
* that want to listen in on the in-call state changes.
* TODO: This class has become more of a state machine at this point. Consider renaming.
*/
-public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
+public class InCallPresenter implements CallList.Listener, InCallPhoneListener,
+ CircularRevealFragment.OnCircularRevealCompleteListener {
private static final String EXTRA_FIRST_TIME_SHOWN =
"com.android.incallui.intent.extra.FIRST_TIME_SHOWN";
@@ -96,6 +97,17 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
private boolean mServiceConnected = false;
private boolean mAccountSelectionCancelled = false;
private InCallCameraManager mInCallCameraManager = null;
+ private AnswerPresenter mAnswerPresenter = new AnswerPresenter();
+
+ /**
+ * Whether or not we are currently bound and waiting for Telecom to send us a new call.
+ */
+ private boolean mBoundAndWaitingForOutgoingCall;
+ /**
+ * If there is no actual call currently in the call list, this will be used as a fallback
+ * to determine the theme color for InCallUI.
+ */
+ private PhoneAccountHandle mPendingPhoneAccountHandle;
private final Phone.Listener mPhoneListener = new Phone.Listener() {
@Override
@@ -105,6 +117,9 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
}
@Override
public void onCallAdded(Phone phone, android.telecom.Call call) {
+ // Since a call has been added we are no longer waiting for Telecom to send us a
+ // call.
+ setBoundAndWaitingForOutgoingCall(false, null);
call.addListener(mCallListener);
}
@Override
@@ -123,8 +138,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
new android.telecom.Call.Listener() {
@Override
public void onPostDialWait(android.telecom.Call call, String remainingPostDialSequence) {
- onPostDialCharWait(
- CallList.getInstance().getCallByTelecommCall(call).getId(),
+ onPostDialCharWait(mCallList.getCallByTelecommCall(call).getId(),
remainingPostDialSequence);
}
@@ -132,7 +146,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
public void onDetailsChanged(android.telecom.Call call,
android.telecom.Call.Details details) {
for (InCallDetailsListener listener : mDetailsListeners) {
- listener.onDetailsChanged(CallList.getInstance().getCallByTelecommCall(call),
+ listener.onDetailsChanged(mCallList.getCallByTelecommCall(call),
details);
}
}
@@ -142,7 +156,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
android.telecom.Call call, List<android.telecom.Call> conferenceableCalls) {
Log.i(this, "onConferenceableCallsChanged: " + call);
for (InCallDetailsListener listener : mDetailsListeners) {
- listener.onDetailsChanged(CallList.getInstance().getCallByTelecommCall(call),
+ listener.onDetailsChanged(mCallList.getCallByTelecommCall(call),
call.getDetails());
}
}
@@ -156,20 +170,6 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
*/
private boolean mIsActivityPreviouslyStarted = false;
-
- /**
- * Whether or not to wait for the circular reveal animation to be started, to avoid stopping
- * the circular reveal animation activity before the animation is initiated.
- */
- private boolean mWaitForRevealAnimationStart = false;
-
- /**
- * Whether or not the CircularRevealAnimationActivity has started.
- */
- private boolean mCircularRevealActivityStarted = false;
-
- private boolean mShowDialpadOnStart = false;
-
/**
* Whether or not InCallService is bound to Telecom.
*/
@@ -177,8 +177,6 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
private Phone mPhone;
- private Handler mHandler = new Handler();
-
/** Display colors for the UI. Consists of a primary color and secondary (darker) color */
private MaterialPalette mThemeColors;
@@ -191,6 +189,11 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
return sInCallPresenter;
}
+ @NeededForTesting
+ static synchronized void setInstance(InCallPresenter inCallPresenter) {
+ sInCallPresenter = inCallPresenter;
+ }
+
@Override
public void setPhone(Phone phone) {
mPhone = phone;
@@ -211,7 +214,12 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
return mCallList;
}
- public void setUp(Context context, CallList callList, AudioModeProvider audioModeProvider) {
+ public void setUp(Context context,
+ CallList callList,
+ AudioModeProvider audioModeProvider,
+ StatusBarNotifier statusBarNotifier,
+ ContactInfoCache contactInfoCache,
+ ProximitySensor proximitySensor) {
if (mServiceConnected) {
Log.i(this, "New service connection replacing existing one.");
// retain the current resources, no need to create new ones.
@@ -224,14 +232,14 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
Preconditions.checkNotNull(context);
mContext = context;
- mContactInfoCache = ContactInfoCache.getInstance(context);
+ mContactInfoCache = contactInfoCache;
- mStatusBarNotifier = new StatusBarNotifier(context, mContactInfoCache);
+ mStatusBarNotifier = statusBarNotifier;
addListener(mStatusBarNotifier);
mAudioModeProvider = audioModeProvider;
- mProximitySensor = new ProximitySensor(context, mAudioModeProvider);
+ mProximitySensor = proximitySensor;
addListener(mProximitySensor);
mCallList = callList;
@@ -261,13 +269,6 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
}
private void attemptFinishActivity() {
- mWaitForRevealAnimationStart = false;
-
- Context context = mContext != null ? mContext : mInCallActivity;
- if (context != null) {
- CircularRevealActivity.sendClearDisplayBroadcast(context);
- }
-
final boolean doFinish = (mInCallActivity != null && isActivityStarted());
Log.i(this, "Hide in call UI: " + doFinish);
if (doFinish) {
@@ -443,11 +444,10 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
*/
@Override
public void onDisconnect(Call call) {
- hideDialpadForDisconnect();
maybeShowErrorDialogOnDisconnect(call);
// We need to do the run the same code as onCallListChange.
- onCallListChange(CallList.getInstance());
+ onCallListChange(mCallList);
if (isActivityStarted()) {
mInCallActivity.dismissKeyguard(false);
@@ -457,7 +457,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
/**
* Given the call list, return the state in which the in-call screen should be.
*/
- public static InCallState getPotentialStateFromCallList(CallList callList) {
+ public InCallState getPotentialStateFromCallList(CallList callList) {
InCallState newState = InCallState.NO_CALLS;
@@ -479,9 +479,41 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
newState = InCallState.INCALL;
}
+ if (newState == InCallState.NO_CALLS) {
+ if (mBoundAndWaitingForOutgoingCall) {
+ return InCallState.OUTGOING;
+ }
+ }
+
return newState;
}
+ public boolean isBoundAndWaitingForOutgoingCall() {
+ return mBoundAndWaitingForOutgoingCall;
+ }
+
+ public void setBoundAndWaitingForOutgoingCall(boolean isBound, PhoneAccountHandle handle) {
+ // NOTE: It is possible for there to be a race and have handle become null before
+ // the circular reveal starts. This should not cause any problems because CallCardFragment
+ // should fallback to the actual call in the CallList at that point in time to determine
+ // the theme color.
+ Log.i(this, "setBoundAndWaitingForOutgoingCall: " + isBound);
+ mBoundAndWaitingForOutgoingCall = isBound;
+ mPendingPhoneAccountHandle = handle;
+ if (isBound && mInCallState == InCallState.NO_CALLS) {
+ mInCallState = InCallState.OUTGOING;
+ }
+ }
+
+ @Override
+ public void onCircularRevealComplete(FragmentManager fm) {
+ if (mInCallActivity != null) {
+ mInCallActivity.showCallCardFragment(true);
+ mInCallActivity.getCallCardFragment().animateForNewOutgoingCall();
+ CircularRevealFragment.endCircularReveal(mInCallActivity.getFragmentManager());
+ }
+ }
+
public void addIncomingCallListener(IncomingCallListener listener) {
Preconditions.checkNotNull(listener);
mIncomingCallListeners.add(listener);
@@ -714,8 +746,6 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
if (showing) {
mIsActivityPreviouslyStarted = true;
- } else {
- CircularRevealActivity.sendClearDisplayBroadcast(mContext);
}
for (InCallUiListener listener : mInCallUiListeners) {
@@ -767,7 +797,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
/**
* INCOMING CALL
*/
- final CallList calls = CallList.getInstance();
+ final CallList calls = mCallList;
final Call incomingCall = calls.getIncomingCall();
Log.v(this, "incomingCall: " + incomingCall);
@@ -864,15 +894,6 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
}
/**
- * 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.
*/
@@ -910,8 +931,9 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
// [ AND NOW YOU'RE IN THE CALL. voila! ]
//
// Our app is started using a fullScreen notification. We need to do this whenever
- // we get an incoming call.
- final boolean startStartupSequence = (InCallState.INCOMING == newState);
+ // we get an incoming call. Depending on the current context of the device, either a
+ // incoming call HUN or the actual InCallActivity will be shown.
+ final boolean startIncomingCallSequence = (InCallState.INCOMING == newState);
// A dialog to show on top of the InCallUI to select a PhoneAccount
final boolean showAccountPicker = (InCallState.WAITING_FOR_ACCOUNT == newState);
@@ -944,7 +966,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
// machine. Telecom should also be the component responsible for disconnecting a call
// with no valid accounts.
showCallUi |= InCallState.PENDING_OUTGOING == newState && mainUiNotVisible
- && isCallWithNoValidAccounts(CallList.getInstance().getPendingOutgoingCall());
+ && isCallWithNoValidAccounts(mCallList.getPendingOutgoingCall());
// The only time that we have an instance of mInCallActivity and it isn't started is
// when it is being destroyed. In that case, lets avoid bringing up another instance of
@@ -959,7 +981,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
if (showCallUi || showAccountPicker) {
Log.i(this, "Start in call UI");
showInCall(false /* showDialpad */, !showAccountPicker /* newOutgoingCall */);
- } else if (startStartupSequence) {
+ } else if (startIncomingCallSequence) {
Log.i(this, "Start Full Screen in call UI");
// We're about the bring up the in-call UI for an incoming call. If we still have
@@ -993,7 +1015,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
*/
public static boolean isCallWithNoValidAccounts(Call call) {
if (call != null && !isEmergencyCall(call)) {
- Bundle extras = call.getTelecommCall().getDetails().getExtras();
+ Bundle extras = call.getExtras();
if (extras == null) {
extras = EMPTY_EXTRAS;
@@ -1125,41 +1147,8 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
}
public void showInCall(final boolean showDialpad, final boolean newOutgoingCall) {
- if (mCircularRevealActivityStarted) {
- mWaitForRevealAnimationStart = true;
- mShowDialpadOnStart = showDialpad;
- Log.i(this, "Waiting for circular reveal completion to show InCallActivity");
- } else {
- Log.i(this, "Showing InCallActivity immediately");
- mContext.startActivity(getInCallIntent(showDialpad, newOutgoingCall,
- newOutgoingCall /* showCircularReveal */));
- }
- }
-
- public void onCircularRevealStarted(final Activity activity) {
- mCircularRevealActivityStarted = false;
- if (mWaitForRevealAnimationStart) {
- mWaitForRevealAnimationStart = false;
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mContext == null) {
- Log.e(this, "Setup did not occur before showing the InCallActivity.");
- activity.finish();
- return;
- }
-
- Log.i(this, "Showing InCallActivity after circular reveal");
- final Intent intent =
- getInCallIntent(mShowDialpadOnStart, true, false, false);
- activity.startActivity(intent);
- mShowDialpadOnStart = false;
- }
- });
- } else if (!mServiceBound) {
- CircularRevealActivity.sendClearDisplayBroadcast(mContext);
- return;
- }
+ Log.i(this, "Showing InCallActivity");
+ mContext.startActivity(getInCallIntent(showDialpad, newOutgoingCall));
}
public void onServiceBind() {
@@ -1167,6 +1156,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
}
public void onServiceUnbind() {
+ InCallPresenter.getInstance().setBoundAndWaitingForOutgoingCall(false, null);
mServiceBound = false;
}
@@ -1191,43 +1181,26 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
final PhoneAccountHandle accountHandle =
intent.getParcelableExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);
- final MaterialPalette colors = getColorsFromPhoneAccountHandle(accountHandle);
final Point touchPoint = extras.getParcelable(TouchPointManager.TOUCH_POINT);
- mCircularRevealActivityStarted = true;
- mContext.startActivity(getAnimationIntent(touchPoint, colors));
- }
-
- private Intent getAnimationIntent(Point touchPoint, MaterialPalette palette) {
- final Intent intent = new Intent(mContext, CircularRevealActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
- intent.putExtra(TouchPointManager.TOUCH_POINT, touchPoint);
- intent.putExtra(CircularRevealActivity.EXTRA_THEME_COLORS, palette);
- return intent;
- }
+ InCallPresenter.getInstance().setBoundAndWaitingForOutgoingCall(true, accountHandle);
- public Intent getInCallIntent(boolean showDialpad, boolean newOutgoingCall,
- boolean showCircularReveal) {
- return getInCallIntent(showDialpad, newOutgoingCall, showCircularReveal, true);
+ final Intent incallIntent = getInCallIntent(false, true);
+ incallIntent.putExtra(TouchPointManager.TOUCH_POINT, touchPoint);
+ mContext.startActivity(incallIntent);
}
- public Intent getInCallIntent(boolean showDialpad, boolean newOutgoingCall,
- boolean showCircularReveal, boolean newTask) {
+ public Intent getInCallIntent(boolean showDialpad, boolean newOutgoingCall) {
final Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
- if (newTask) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
+ | Intent.FLAG_ACTIVITY_NO_USER_ACTION
+ | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(mContext, InCallActivity.class);
if (showDialpad) {
intent.putExtra(InCallActivity.SHOW_DIALPAD_EXTRA, true);
}
intent.putExtra(InCallActivity.NEW_OUTGOING_CALL_EXTRA, newOutgoingCall);
- intent.putExtra(InCallActivity.SHOW_CIRCULAR_REVEAL_EXTRA, showCircularReveal);
return intent;
}
@@ -1292,6 +1265,10 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
* and landscape. {@Code False} if the in-call UI should be locked in portrait.
*/
public void setInCallAllowsOrientationChange(boolean allowOrientationChange) {
+ if (mInCallActivity == null) {
+ return;
+ }
+
if (!allowOrientationChange) {
mInCallActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
} else {
@@ -1305,7 +1282,10 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
* @return The space beside the call card.
*/
public float getSpaceBesideCallCard() {
- return mInCallActivity.getCallCardFragment().getSpaceBesideCallCard();
+ if (mInCallActivity != null && mInCallActivity.getCallCardFragment() != null) {
+ return mInCallActivity.getCallCardFragment().getSpaceBesideCallCard();
+ }
+ return 0;
}
/**
@@ -1314,7 +1294,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
* @return True if the call card fragment is visible.
*/
public boolean getCallCardFragmentVisible() {
- if (mInCallActivity != null) {
+ if (mInCallActivity != null && mInCallActivity.getCallCardFragment() != null) {
return mInCallActivity.getCallCardFragment().isVisible();
}
return false;
@@ -1331,7 +1311,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
return;
}
- mInCallActivity.showConferenceCallManager(show);
+ mInCallActivity.showConferenceFragment(show);
}
/**
@@ -1348,7 +1328,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
*/
public void setThemeColors() {
// This method will set the background to default if the color is PhoneAccount.NO_COLOR.
- mThemeColors = getColorsFromCall(CallList.getInstance().getFirstCall());
+ mThemeColors = getColorsFromCall(mCallList.getFirstCall());
if (mInCallActivity == null) {
return;
@@ -1365,7 +1345,11 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
}
private MaterialPalette getColorsFromCall(Call call) {
- return getColorsFromPhoneAccountHandle(call == null ? null : call.getAccountHandle());
+ if (call == null) {
+ return getColorsFromPhoneAccountHandle(mPendingPhoneAccountHandle);
+ } else {
+ return getColorsFromPhoneAccountHandle(call.getAccountHandle());
+ }
}
private MaterialPalette getColorsFromPhoneAccountHandle(PhoneAccountHandle phoneAccountHandle) {
@@ -1397,10 +1381,20 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener {
return mTelecomManager;
}
+ InCallActivity getActivity() {
+ return mInCallActivity;
+ }
+
+ AnswerPresenter getAnswerPresenter() {
+ return mAnswerPresenter;
+ }
+
/**
* Private constructor. Must use getInstance() to get this singleton.
*/
private InCallPresenter() {
+ addIncomingCallListener(mAnswerPresenter);
+ addInCallUiListener(mAnswerPresenter);
}
/**
diff --git a/InCallUI/src/com/android/incallui/InCallServiceImpl.java b/InCallUI/src/com/android/incallui/InCallServiceImpl.java
index 17f4e174d..adb069784 100644
--- a/InCallUI/src/com/android/incallui/InCallServiceImpl.java
+++ b/InCallUI/src/com/android/incallui/InCallServiceImpl.java
@@ -16,6 +16,7 @@
package com.android.incallui;
+import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.telecom.InCallService;
@@ -53,10 +54,16 @@ public class InCallServiceImpl extends InCallService {
@Override
public IBinder onBind(Intent intent) {
+ final Context context = getApplicationContext();
+ final ContactInfoCache contactInfoCache = ContactInfoCache.getInstance(context);
InCallPresenter.getInstance().setUp(
getApplicationContext(),
CallList.getInstance(),
- AudioModeProvider.getInstance());
+ AudioModeProvider.getInstance(),
+ new StatusBarNotifier(context, contactInfoCache),
+ contactInfoCache,
+ new ProximitySensor(context, AudioModeProvider.getInstance())
+ );
InCallPresenter.getInstance().onServiceBind();
InCallPresenter.getInstance().maybeStartRevealAnimation(intent);
return super.onBind(intent);
diff --git a/InCallUI/src/com/android/incallui/InCallUIMaterialColorMapUtils.java b/InCallUI/src/com/android/incallui/InCallUIMaterialColorMapUtils.java
index 1f61070ed..d65580efe 100644
--- a/InCallUI/src/com/android/incallui/InCallUIMaterialColorMapUtils.java
+++ b/InCallUI/src/com/android/incallui/InCallUIMaterialColorMapUtils.java
@@ -45,8 +45,8 @@ public class InCallUIMaterialColorMapUtils extends MaterialColorMapUtils {
}
public static MaterialPalette getDefaultPrimaryAndSecondaryColors(Resources resources) {
- final int primaryColor = resources.getColor(R.color.dialer_theme_color);
- final int secondaryColor = resources.getColor(R.color.dialer_theme_color_dark);
+ final int primaryColor = resources.getColor(R.color.dialer_theme_color, null);
+ final int secondaryColor = resources.getColor(R.color.dialer_theme_color_dark, null);
return new MaterialPalette(primaryColor, secondaryColor);
}
} \ No newline at end of file
diff --git a/InCallUI/src/com/android/incallui/InCallVideoCallListener.java b/InCallUI/src/com/android/incallui/InCallVideoCallListener.java
index 245fc7316..4ba2bd993 100644
--- a/InCallUI/src/com/android/incallui/InCallVideoCallListener.java
+++ b/InCallUI/src/com/android/incallui/InCallVideoCallListener.java
@@ -135,7 +135,9 @@ public class InCallVideoCallListener extends VideoCall.Listener {
*/
@Override
public void onCameraCapabilitiesChanged(CameraCapabilities cameraCapabilities) {
- InCallVideoCallListenerNotifier.getInstance().cameraDimensionsChanged(
- mCall, cameraCapabilities.getWidth(), cameraCapabilities.getHeight());
+ if (cameraCapabilities != null) {
+ InCallVideoCallListenerNotifier.getInstance().cameraDimensionsChanged(
+ mCall, cameraCapabilities.getWidth(), cameraCapabilities.getHeight());
+ }
}
}
diff --git a/InCallUI/src/com/android/incallui/PostCharDialogFragment.java b/InCallUI/src/com/android/incallui/PostCharDialogFragment.java
index e1edbc75b..09b626a92 100644
--- a/InCallUI/src/com/android/incallui/PostCharDialogFragment.java
+++ b/InCallUI/src/com/android/incallui/PostCharDialogFragment.java
@@ -62,7 +62,6 @@ public class PostCharDialogFragment extends DialogFragment {
});
final AlertDialog dialog = builder.create();
- dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
return dialog;
}
diff --git a/InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java b/InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java
deleted file mode 100644
index 83feaf54a..000000000
--- a/InCallUI/src/com/android/incallui/SmallerHitTargetTouchListener.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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 006339ce1..c5a0b7f4c 100644
--- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java
+++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
@@ -641,8 +641,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener {
private PendingIntent createLaunchPendingIntent() {
final Intent intent = InCallPresenter.getInstance().getInCallIntent(
- false /* showDialpad */, false /* newOutgoingCall */,
- false /* showCircularReveal */);
+ false /* showDialpad */, false /* newOutgoingCall */);
// PendingIntent that can be used to launch the InCallActivity. The
// system fires off this intent if the user pulls down the windowshade
diff --git a/InCallUI/src/com/android/incallui/VideoCallFragment.java b/InCallUI/src/com/android/incallui/VideoCallFragment.java
index 7859a17bc..2b0ddd534 100644
--- a/InCallUI/src/com/android/incallui/VideoCallFragment.java
+++ b/InCallUI/src/com/android/incallui/VideoCallFragment.java
@@ -34,6 +34,8 @@ import android.view.ViewTreeObserver;
*/
public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
VideoCallPresenter.VideoCallUi> implements VideoCallPresenter.VideoCallUi {
+ private static final String TAG = VideoCallFragment.class.getSimpleName();
+ private static final boolean DEBUG = false;
/**
* Used to indicate that the surface dimensions are not set.
@@ -138,6 +140,14 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
* @param view The {@link TextureView}.
*/
public void recreateView(TextureView view) {
+ if (DEBUG) {
+ Log.i(TAG, "recreateView: " + view);
+ }
+
+ if (mTextureView == view) {
+ return;
+ }
+
mTextureView = view;
mTextureView.setSurfaceTextureListener(this);
mTextureView.setOnClickListener(this);
@@ -159,6 +169,9 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width,
int height) {
boolean surfaceCreated;
+ if (DEBUG) {
+ Log.i(TAG, "onSurfaceTextureAvailable: " + surfaceTexture);
+ }
// Where there is no saved {@link SurfaceTexture} available, use the newly created one.
// If a saved {@link SurfaceTexture} is available, we are re-creating after an
// orientation change.
@@ -330,33 +343,10 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
-
super.onCreateView(inflater, container, savedInstanceState);
final View view = inflater.inflate(R.layout.video_call_fragment, container, false);
- // Attempt to center the incoming video view, if it is in the layout.
- final ViewTreeObserver observer = view.getViewTreeObserver();
- observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- // Check if the layout includes the incoming video surface -- this will only be the
- // case for a video call.
- View displayVideo = view.findViewById(R.id.incomingVideo);
- if (displayVideo != null) {
- centerDisplayView(displayVideo);
- }
-
- mIsLayoutComplete = true;
-
- // Remove the listener so we don't continually re-layout.
- ViewTreeObserver observer = view.getViewTreeObserver();
- if (observer.isAlive()) {
- observer.removeOnGlobalLayoutListener(this);
- }
- }
- });
-
return view;
}
@@ -375,7 +365,6 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
// In a right-to-left locale, the space for the video view is to the left of the call card
// so we need to translate it in the -X direction.
final boolean isLayoutRtl = InCallPresenter.isRtl();
-
float spaceBesideCallCard = InCallPresenter.getInstance().getSpaceBesideCallCard();
if (mIsLandscape) {
float videoViewTranslation = displayVideo.getWidth() / 2
@@ -564,6 +553,27 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter,
sPreviewSurface.recreateView((TextureView) mVideoViews.findViewById(
R.id.previewVideo));
}
+
+ // Attempt to center the incoming video view, if it is in the layout.
+ final ViewTreeObserver observer = mVideoViews.getViewTreeObserver();
+ observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ // Check if the layout includes the incoming video surface -- this will only be the
+ // case for a video call.
+ View displayVideo = mVideoViews.findViewById(R.id.incomingVideo);
+ if (displayVideo != null) {
+ centerDisplayView(displayVideo);
+ }
+ mIsLayoutComplete = true;
+
+ // Remove the listener so we don't continually re-layout.
+ ViewTreeObserver observer = mVideoViews.getViewTreeObserver();
+ if (observer.isAlive()) {
+ observer.removeOnGlobalLayoutListener(this);
+ }
+ }
+ });
}
}
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index 38d7c9556..d63c6e8b1 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -62,6 +62,10 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
InCallDetailsListener, SurfaceChangeListener, VideoEventListener,
InCallVideoCallListenerNotifier.SessionModificationListener {
+ private static final String TAG = VideoCallPresenter.class.getSimpleName();
+
+ public static final boolean DEBUG = false;
+
/**
* Determines the device orientation (portrait/lanscape).
*/
@@ -213,6 +217,9 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
* @param surface The surface which was created.
*/
public void onSurfaceCreated(int surface) {
+ if (DEBUG) {
+ Log.i(TAG, "onSurfaceCreated: " + surface);
+ }
final VideoCallUi ui = getUi();
if (ui == null || mVideoCall == null) {
@@ -402,6 +409,9 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
* TODO(vt): Need to adjust size and orientation of preview surface here.
*/
private void enterVideoMode() {
+ if (DEBUG) {
+ Log.i(TAG, "enterVideoMode");
+ }
VideoCallUi ui = getUi();
if (ui == null) {
return;
@@ -424,7 +434,9 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
getInCallCameraManager();
mVideoCall.setCamera(cameraManager.getActiveCameraId());
mVideoCall.requestCameraCapabilities();
-
+ if (DEBUG) {
+ Log.i(TAG, "isDisplayVideoSurfacedCreated: " + ui.isDisplayVideoSurfaceCreated());
+ }
if (ui.isDisplayVideoSurfaceCreated()) {
mVideoCall.setDisplaySurface(ui.getDisplayVideoSurface());
}
diff --git a/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java b/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java
index fe008f3df..812e883c0 100644
--- a/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java
+++ b/InCallUI/src/com/android/incallui/widget/multiwaveview/GlowPadView.java
@@ -881,7 +881,7 @@ public class GlowPadView extends View {
// tx and ty are relative to wave center
float tx = eventX - mWaveCenterX;
float ty = eventY - mWaveCenterY;
- float touchRadius = (float) Math.sqrt(dist2(tx, ty));
+ float touchRadius = (float) Math.hypot(tx, ty);
final float scale = touchRadius > mOuterRadius ? mOuterRadius / touchRadius : 1.0f;
float limitX = tx * scale;
float limitY = ty * scale;
diff --git a/InCallUI/src/com/android/incallui/widget/multiwaveview/PointCloud.java b/InCallUI/src/com/android/incallui/widget/multiwaveview/PointCloud.java
index 77aac2bda..07a2cb964 100644
--- a/InCallUI/src/com/android/incallui/widget/multiwaveview/PointCloud.java
+++ b/InCallUI/src/com/android/incallui/widget/multiwaveview/PointCloud.java
@@ -20,7 +20,6 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
-import android.util.FloatMath;
import android.util.Log;
import java.util.ArrayList;
@@ -151,8 +150,8 @@ public class PointCloud {
float eta = PI/2.0f;
float dEta = 2.0f * PI / pointsInBand;
for (int i = 0; i < pointsInBand; i++) {
- float x = r * FloatMath.cos(eta);
- float y = r * FloatMath.sin(eta);
+ float x = r * (float) Math.cos(eta);
+ float y = r * (float) Math.sin(eta);
eta += dEta;
mPointCloud.add(new Point(x, y, r));
}
@@ -168,7 +167,7 @@ public class PointCloud {
}
private static float hypot(float x, float y) {
- return FloatMath.sqrt(x*x + y*y);
+ return (float) Math.hypot(x, y);
}
private static float max(float a, float b) {
@@ -181,8 +180,8 @@ public class PointCloud {
float glowAlpha = 0.0f;
if (glowDistance < glowManager.radius) {
- float cosf = FloatMath.cos(PI * 0.25f * glowDistance / glowManager.radius);
- glowAlpha = glowManager.alpha * max(0.0f, (float) Math.pow(cosf, 10.0f));
+ double cos = Math.cos(Math.PI * 0.25d * glowDistance / glowManager.radius);
+ glowAlpha = glowManager.alpha * max(0.0f, (float) Math.pow(cos, 10.0d));
}
// Compute contribution from Wave
@@ -190,8 +189,8 @@ public class PointCloud {
float distanceToWaveRing = (radius - waveManager.radius);
float waveAlpha = 0.0f;
if (distanceToWaveRing < waveManager.width * 0.5f && distanceToWaveRing < 0.0f) {
- float cosf = FloatMath.cos(PI * 0.25f * distanceToWaveRing / waveManager.width);
- waveAlpha = waveManager.alpha * max(0.0f, (float) Math.pow(cosf, 20.0f));
+ double cos = Math.cos(Math.PI * 0.25d * distanceToWaveRing / waveManager.width);
+ waveAlpha = waveManager.alpha * max(0.0f, (float) Math.pow(cos, 20.0d));
}
return (int) (max(glowAlpha, waveAlpha) * 255);
diff --git a/InCallUI/tests/src/com/android/incallui/CallerInfoUtilsTest.java b/InCallUI/tests/src/com/android/incallui/CallerInfoUtilsTest.java
new file mode 100644
index 000000000..5baabce1b
--- /dev/null
+++ b/InCallUI/tests/src/com/android/incallui/CallerInfoUtilsTest.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2015 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.test.AndroidTestCase;
+
+public class CallerInfoUtilsTest extends AndroidTestCase {
+ public void testToLogSafeNumber_email() {
+ assertEquals("xxx@xxx.xxx", CallerInfoUtils.toLogSafePhoneNumber("foo@foo.com"));
+ }
+
+ public void testToLogSafeNumber_phoneNumber() {
+ assertEquals("xxx-xxx-xxxx", CallerInfoUtils.toLogSafePhoneNumber("123-456-6789"));
+ }
+}
diff --git a/InCallUI/tests/src/com/android/incallui/InCallPresenterTest.java b/InCallUI/tests/src/com/android/incallui/InCallPresenterTest.java
new file mode 100644
index 000000000..55ab1e1dd
--- /dev/null
+++ b/InCallUI/tests/src/com/android/incallui/InCallPresenterTest.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2015 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 static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.telecom.PhoneAccountHandle;
+import android.test.InstrumentationTestCase;
+
+import com.android.incallui.InCallPresenter.InCallState;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+public class InCallPresenterTest extends InstrumentationTestCase {
+ private Call mIncomingCall;
+ private Call mActiveCall;
+ private Call mConnectingCall;
+ private Call mWaitingForAccountsCall;
+ private Call mDisconnectedCall;
+
+ @Mock private InCallActivity mInCallActivity;
+ @Mock private AudioModeProvider mAudioModeProvider;
+ @Mock private CallList mCallList;
+ @Mock private StatusBarNotifier mStatusBarNotifier;
+ @Mock private ContactInfoCache mContactInfoCache;
+ @Mock private ProximitySensor mProximitySensor;
+
+ InCallPresenter mInCallPresenter;
+ @Mock private Context mContext;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ System.setProperty("dexmaker.dexcache",
+ getInstrumentation().getTargetContext().getCacheDir().getPath());
+ MockitoAnnotations.initMocks(this);
+
+ mIncomingCall = getMockCall(Call.State.INCOMING);
+ mActiveCall = getMockCall(Call.State.ACTIVE);
+ mConnectingCall = getMockCall(Call.State.CONNECTING);
+ mWaitingForAccountsCall = getMockCall(Call.State.PRE_DIAL_WAIT, false);
+ mDisconnectedCall = getMockCall(Call.State.DISCONNECTED);
+
+ mInCallPresenter = InCallPresenter.getInstance();
+ mInCallPresenter.setUp(mContext, mCallList, mAudioModeProvider, mStatusBarNotifier,
+ mContactInfoCache, mProximitySensor);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ // The tear down method needs to run in the main thread since there is an explicit check
+ // inside TelecomAdapter.getInstance().
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mInCallPresenter.unsetActivity(mInCallActivity);
+ mInCallPresenter.tearDown();
+ InCallPresenter.setInstance(null);
+ }
+ });
+ }
+
+ public void testOnActivitySet_finishesActivityWhenNoCalls() {
+ mInCallPresenter.setActivity(mInCallActivity);
+
+ verify(mInCallActivity).finish();
+ }
+
+ public void testOnCallListChange_sendsNotificationWhenInCall() {
+ when(mCallList.getIncomingCall()).thenReturn(mIncomingCall);
+
+ mInCallPresenter.onCallListChange(mCallList);
+
+ verify(mStatusBarNotifier).updateNotification(InCallState.INCOMING, mCallList);
+ verifyInCallActivityNotStarted();
+ }
+
+ /**
+ * This behavior is required to ensure that the screen is turned on again by the restarting
+ * activity.
+ */
+ public void testOnCallListChange_handlesCallWaitingWhenScreenOffShouldRestartActivity() {
+ when(mCallList.getActiveCall()).thenReturn(mActiveCall);
+
+ mInCallPresenter.onCallListChange(mCallList);
+ mInCallPresenter.setActivity(mInCallActivity);
+
+ // Pretend that there is a call waiting and the screen is off
+ when(mInCallActivity.isDestroyed()).thenReturn(false);
+ when(mInCallActivity.isFinishing()).thenReturn(false);
+ when(mProximitySensor.isScreenReallyOff()).thenReturn(true);
+ when(mCallList.getIncomingCall()).thenReturn(mIncomingCall);
+
+ mInCallPresenter.onCallListChange(mCallList);
+ verify(mInCallActivity).finish();
+ }
+
+ /**
+ * Verifies that the PENDING_OUTGOING -> IN_CALL transition brings up InCallActivity so
+ * that it can display an error dialog.
+ */
+ public void testOnCallListChange_pendingOutgoingToInCallTransitionShowsUiForErrorDialog() {
+ when(mCallList.getPendingOutgoingCall()).thenReturn(mConnectingCall);
+
+ mInCallPresenter.onCallListChange(mCallList);
+
+ when(mCallList.getPendingOutgoingCall()).thenReturn(null);
+ when(mCallList.getActiveCall()).thenReturn(mActiveCall);
+
+ mInCallPresenter.onCallListChange(mCallList);
+
+ verify(mContext).startActivity(InCallPresenter.getInstance().getInCallIntent(false, false));
+ verifyIncomingCallNotificationNotSent();
+ }
+
+ /**
+ * Verifies that if there is a call in the PRE_DIAL_WAIT state, InCallActivity is displayed
+ * to display the account picker.
+ */
+ public void testOnCallListChange_noAccountProvidedForCallShowsUiForAccountPicker() {
+ when(mCallList.getWaitingForAccountCall()).thenReturn(mWaitingForAccountsCall);
+ mInCallPresenter.onCallListChange(mCallList);
+
+ verify(mContext).startActivity(InCallPresenter.getInstance().getInCallIntent(false, false));
+ verifyIncomingCallNotificationNotSent();
+ }
+
+ /**
+ * Verifies that for an expected call state change (e.g. NO_CALLS -> PENDING_OUTGOING),
+ * InCallActivity is not displayed.
+ */
+ public void testOnCallListChange_noCallsToPendingOutgoingDoesNotShowUi() {
+ when(mCallList.getPendingOutgoingCall()).thenReturn(mConnectingCall);
+ mInCallPresenter.onCallListChange(mCallList);
+
+ verifyInCallActivityNotStarted();
+ verifyIncomingCallNotificationNotSent();
+ }
+
+ public void testOnCallListChange_LastCallDisconnectedNoCallsLeftFinishesUi() {
+ when(mCallList.getDisconnectedCall()).thenReturn(mDisconnectedCall);
+ mInCallPresenter.onCallListChange(mCallList);
+
+ mInCallPresenter.setActivity(mInCallActivity);
+
+ verify(mInCallActivity, never()).finish();
+
+ // Last remaining disconnected call is removed from CallList, activity should shut down.
+ when(mCallList.getDisconnectedCall()).thenReturn(null);
+ mInCallPresenter.onCallListChange(mCallList);
+ verify(mInCallActivity).finish();
+ }
+
+
+ //TODO
+ public void testCircularReveal_startsCircularRevealForOutgoingCalls() {
+
+ }
+
+ public void testCircularReveal_waitTillCircularRevealSentBeforeShowingCallCard() {
+ }
+
+ public void testHangupOngoingCall_disconnectsCallCorrectly() {
+ }
+
+ public void testAnswerIncomingCall() {
+ }
+
+ public void testDeclineIncomingCall() {
+ }
+
+ private void verifyInCallActivityNotStarted() {
+ verify(mContext, never()).startActivity(Mockito.any(Intent.class));
+ }
+
+ private void verifyIncomingCallNotificationNotSent() {
+ verify(mStatusBarNotifier, never()).updateNotification(Mockito.any(InCallState.class),
+ Mockito.any(CallList.class));
+ }
+
+ private static Call getMockCall(int state) {
+ return getMockCall(state, true);
+ }
+
+ private static Call getMockCall(int state, boolean hasAccountHandle) {
+ final Call call = Mockito.mock(Call.class);
+ when(call.getState()).thenReturn(Integer.valueOf(state));
+ if (hasAccountHandle) {
+ when(call.getAccountHandle()).thenReturn(new PhoneAccountHandle(null, null));
+ }
+ return call;
+ }
+}