Blanket copy of PhoneApp to services/Telephony.

First phase of splitting out InCallUI from PhoneApp.

Change-Id: I237341c4ff00e96c677caa4580b251ef3432931b
diff --git a/res/layout/incall_touch_ui.xml b/res/layout/incall_touch_ui.xml
new file mode 100644
index 0000000..5d3ea27
--- /dev/null
+++ b/res/layout/incall_touch_ui.xml
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<!-- In-call onscreen touch UI elements, used on some platforms.
+
+     This layout is a fullscreen overlay, drawn on top of the
+     non-touch-sensitive parts of the in-call UI (i.e. the call card).
+
+     The top-level View here is a InCallTouchUi (FrameLayout) with 2 children:
+       (1) inCallControls: the widgets visible while a regular call (or calls) is in progress
+       (2) incomingCallWidget: the UI displayed while an incoming call is ringing
+     In usual cases, one of these is visible at any given moment.
+     One exception is when incomingCallWidget is fading-out. At that moment, we show
+     inCallControls beneath incomingCallWidget for smoother transition.
+     -->
+<com.android.phone.InCallTouchUi xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/inCallTouchUi"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    >
+
+    <!--
+        (1) inCallControls: the widgets visible while a regular call
+        (or calls) is in progress
+    -->
+    <RelativeLayout android:id="@+id/inCallControls"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:visibility="gone"
+                    >
+        <!-- DTMF dialpad shown in the upper part of the screen
+             (above the main cluster of buttons.) -->
+        <ViewStub android:id="@+id/dtmf_twelve_key_dialer_stub"
+                  android:layout="@layout/dtmf_twelve_key_dialer_view"
+                  android:layout_width="match_parent"
+                  android:layout_height="match_parent"
+                  android:layout_above="@+id/bottomButtons"
+                  android:layout_marginBottom="@dimen/dialpad_vertical_margin" />
+
+        <!-- Main cluster of onscreen buttons on the lower part of the screen. -->
+        <LinearLayout android:id="@+id/bottomButtons"
+                      android:orientation="vertical"
+                      android:layout_width="match_parent"
+                      android:layout_height="wrap_content"
+                      android:layout_alignParentBottom="true">
+
+            <!-- Row 1, the "extra button row": A couple of relatively rare
+                 buttons used only in certain call states.
+                 Most of the time this whole row is GONE.
+                 For now, at least, there's only ever one button visible here
+                 at a time, so this can be a simple FrameLayout. -->
+            <ViewStub android:id="@+id/extraButtonRow"
+                      android:layout="@layout/extra_button_row"
+                      android:layout_width="match_parent"
+                      android:layout_height="wrap_content" />
+
+            <!-- Row 2: The "End call" button. -->
+            <ImageButton android:id="@+id/endButton"
+                style="@style/InCallEndButton"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_dial_end_call"
+                android:background="@drawable/end_call_background"
+                android:contentDescription="@string/onscreenEndCallText" />
+
+            <!-- Row 3: The main batch of in-call buttons:
+                    Dialpad / Audio mode / Mute / Hold / Add call
+                 Visible in all states except while an incoming call is
+                 ringing. -->
+            <LinearLayout
+                android:orientation="horizontal"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/dialpad_background"
+                android:paddingStart="@dimen/button_cluster_side_padding"
+                android:paddingEnd="@dimen/button_cluster_side_padding"
+                >
+
+                <!-- This row has either 4 or 5 buttons, depending on
+                     whether the device supports "Hold" (i.e. 4 buttons on
+                     CDMA devices, 5 buttons on GSM devices.)  The buttons
+                     are interspersed with 'layout_weight="1"' placeholder
+                     views so that they'll be spaced evenly in both cases.
+
+                     But note there are a couple of *pairs* of buttons that share a
+                     single "slot", namely Hold/Swap and Add/Merge.  For these, the
+                     code in InCallTouchUi is responsible for making sure that at any
+                     point exactly one of the pair is VISIBLE and the other is
+                     GONE. -->
+
+                <!-- Separator between left padding and 1st button -->
+                <View style="@style/VerticalSeparator" />
+
+                <!-- "Dialpad" -->
+                <!-- This is a "compound button": it has checked and unchecked states. -->
+                <ToggleButton android:id="@+id/dialpadButton"
+                    style="@style/InCallCompoundButton"
+                    android:background="@drawable/btn_compound_dialpad"
+                    android:contentDescription="@string/onscreenShowDialpadText"
+                    />
+
+                <!-- Separator between 1st and 2nd button -->
+                <View style="@style/VerticalSeparator" />
+
+                <!-- "Audio mode" -->
+                <!-- This is a multi-mode button that can behave either like a
+                     simple "compound button" with two states *or* like an
+                     action button that brings up a popup menu; see
+                     btn_compound_audio.xml and InCallTouchUi.updateAudioButton()
+                     for the full details. -->
+                <ToggleButton android:id="@+id/audioButton"
+                    style="@style/InCallCompoundButton"
+                    android:background="@drawable/btn_compound_audio"
+                    android:contentDescription="@string/onscreenAudioText"
+                    />
+
+                <!-- Separator between 2nd and 3rd button -->
+                <View style="@style/VerticalSeparator" />
+
+                <!-- "Mute" -->
+                <!-- This is a "compound button": it has checked and unchecked states. -->
+                <ToggleButton android:id="@+id/muteButton"
+                    style="@style/InCallCompoundButton"
+                    android:background="@drawable/btn_compound_mute"
+                    android:contentDescription="@string/onscreenMuteText"
+                    />
+
+                <!-- Separator between 3rd and 4th button -->
+                <View style="@style/VerticalSeparator" />
+
+                <!-- This slot is either "Hold" or "Swap", depending on
+                     the state of the call.   One or the other of these
+                     must always be set to GONE. -->
+                <!-- "Hold" -->
+                <!-- This is a "compound button": it has checked and unchecked states. -->
+                <ToggleButton android:id="@+id/holdButton"
+                    style="@style/InCallCompoundButton"
+                    android:background="@drawable/btn_compound_hold"
+                    android:contentDescription="@string/onscreenHoldText"
+                    />
+                <!-- "Swap" (or "Manage calls" in some CDMA states) -->
+                <ImageButton android:id="@+id/swapButton"
+                    style="@style/InCallButton"
+                    android:src="@drawable/ic_incall_switch_holo_dark"
+                    android:contentDescription="@string/onscreenSwapCallsText"
+                    />
+
+                <!-- Separator between 4th and 5th button (if 5th exists) -->
+                <View android:id="@+id/holdSwapSpacer"
+                      style="@style/VerticalSeparator" />
+
+                <!-- This slot is either "Add" or "Merge", depending on
+                     the state of the call.  One or the other of these
+                     must always be set to GONE. -->
+                <!-- "Add Call" -->
+                <ImageButton android:id="@+id/addButton"
+                    style="@style/InCallButton"
+                    android:src="@drawable/ic_add_contact_holo_dark"
+                    android:contentDescription="@string/onscreenAddCallText"
+                    />
+                <!-- "Merge calls" -->
+                <!-- This button is used only on GSM devices, where we know
+                     that "Add" and "Merge" are never available at the same time.
+                     The "Merge" button for CDMA devices is "cdmaMergeButton" above. -->
+                <ImageButton android:id="@+id/mergeButton"
+                    style="@style/InCallButton"
+                    android:src="@drawable/ic_merge_holo_dark"
+                    android:contentDescription="@string/onscreenMergeCallsText"
+                    />
+
+                <!-- Separator between 5th and 6th button (if 6th exists) -->
+                <View android:id="@+id/videoCallSpacer"
+                    style="@style/VerticalSeparator" />
+
+                <!-- This button is use for converting an ongoing call into a video call. -->
+                <ImageButton android:id="@+id/videoCallButton"
+                    style="@style/InCallButton"
+                    android:src="@drawable/ic_videocall_holo_dark"
+                    android:contentDescription="@string/onscreenVideoCallText"
+                    />
+
+                <!-- Separator between 4th (or 5th) button and right padding -->
+                <View style="@style/VerticalSeparator" />
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+    </RelativeLayout>
+
+    <!--
+        (2) incomingCallWidget: the UI displayed while an incoming call is ringing.
+            See InCallTouchUi.showIncomingCallWidget().
+
+            Layout notes:
+            - Use an opaque black background since we need to cover up
+              a bit of the bottom of the contact photo
+            - The verticalOffset value gets us a little extra space above
+              the topmost "Respond by SMS" icon
+            - The negative layout_marginBottom shifts us slightly downward;
+              we're already aligned with the bottom of the screen, but we
+              don't have an icon in the downward direction so the whole
+              bottom area of this widget is just wasted space.
+    -->
+    <com.android.internal.widget.multiwaveview.GlowPadView
+        android:id="@+id/incomingCallWidget"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center|bottom"
+        android:layout_marginTop="20dip"
+        android:layout_marginBottom="-46dp"
+        android:background="@android:color/black"
+        android:visibility="gone"
+        android:gravity="top"
+
+        prvandroid:targetDrawables="@array/incoming_call_widget_3way_targets"
+        prvandroid:targetDescriptions="@array/incoming_call_widget_3way_target_descriptions"
+        prvandroid:directionDescriptions="@array/incoming_call_widget_3way_direction_descriptions"
+        prvandroid:handleDrawable="@drawable/ic_in_call_touch_handle"
+        prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
+        prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius"
+        prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"
+        prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin"
+        prvandroid:vibrationDuration="20"
+        prvandroid:feedbackCount="1"
+        prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
+        prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
+        />
+
+</com.android.phone.InCallTouchUi>