Merge "Introduce better animation for incoming-call widget"
[android/platform/packages/apps/Phone.git] / res / layout / incall_touch_ui.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- Copyright (C) 2009 The Android Open Source Project
3
4      Licensed under the Apache License, Version 2.0 (the "License");
5      you may not use this file except in compliance with the License.
6      You may obtain a copy of the License at
7
8           http://www.apache.org/licenses/LICENSE-2.0
9
10      Unless required by applicable law or agreed to in writing, software
11      distributed under the License is distributed on an "AS IS" BASIS,
12      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13      See the License for the specific language governing permissions and
14      limitations under the License.
15 -->
16
17 <!-- In-call onscreen touch UI elements, used on some platforms.
18
19      This layout is a fullscreen overlay, drawn on top of the
20      non-touch-sensitive parts of the in-call UI (i.e. the call card).
21
22      The top-level View here is a InCallTouchUi (FrameLayout) with 2 children:
23        (1) inCallControls: the widgets visible while a regular call (or calls) is in progress
24        (2) incomingCallWidget: the UI displayed while an incoming call is ringing
25      In usual cases, one of these is visible at any given moment.
26      One exception is when incomingCallWidget is fading-out. At that moment, we show
27      inCallControls beneath incomingCallWidget for smoother transition.
28      -->
29 <com.android.phone.InCallTouchUi xmlns:android="http://schemas.android.com/apk/res/android"
30     xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android"
31     android:layout_width="match_parent"
32     android:layout_height="match_parent"
33     >
34
35     <!--
36         (1) inCallControls: the widgets visible while a regular call
37         (or calls) is in progress
38     -->
39     <RelativeLayout android:id="@+id/inCallControls"
40                     android:layout_width="match_parent"
41                     android:layout_height="match_parent"
42                     android:visibility="gone"
43                     >
44         <!-- DTMF dialpad shown in the upper part of the screen
45              (above the main cluster of buttons.) -->
46         <ViewStub android:id="@+id/dtmf_twelve_key_dialer_stub"
47                   android:layout="@layout/dtmf_twelve_key_dialer_view"
48                   android:layout_width="match_parent"
49                   android:layout_height="match_parent"
50                   android:layout_above="@+id/bottomButtons"
51                   android:layout_marginBottom="@dimen/dialpad_vertical_margin" />
52
53         <!-- Main cluster of onscreen buttons on the lower part of the screen. -->
54         <LinearLayout android:id="@+id/bottomButtons"
55                       android:orientation="vertical"
56                       android:layout_width="match_parent"
57                       android:layout_height="wrap_content"
58                       android:layout_alignParentBottom="true">
59
60             <!-- Row 1, the "extra button row": A couple of relatively rare
61                  buttons used only in certain call states.
62                  Most of the time this whole row is GONE.
63                  For now, at least, there's only ever one button visible here
64                  at a time, so this can be a simple FrameLayout. -->
65             <ViewStub android:id="@+id/extraButtonRow"
66                       android:layout="@layout/extra_button_row"
67                       android:layout_width="match_parent"
68                       android:layout_height="wrap_content"
69                       android:paddingLeft="@dimen/button_cluster_side_padding"
70                       android:paddingRight="@dimen/button_cluster_side_padding" />
71
72             <!-- Row 2: The "End call" button. -->
73             <ImageButton android:id="@+id/endButton"
74                 style="@style/InCallEndButton"
75                 android:layout_width="match_parent"
76                 android:src="@drawable/ic_end_call"
77                 android:background="@drawable/end_call_background"
78                 android:contentDescription="@string/onscreenEndCallText" />
79
80             <!-- Row 3: The main batch of in-call buttons:
81                     Dialpad / Audio mode / Mute / Hold / Add call
82                  Visible in all states except while an incoming call is
83                  ringing. -->
84             <LinearLayout
85                 android:orientation="horizontal"
86                 android:layout_width="match_parent"
87                 android:layout_height="wrap_content"
88                 android:background="@drawable/dialpad_background"
89                 android:paddingLeft="@dimen/button_cluster_side_padding"
90                 android:paddingRight="@dimen/button_cluster_side_padding"
91                 >
92
93                 <!-- This row has either 4 or 5 buttons, depending on
94                      whether the device supports "Hold" (i.e. 4 buttons on
95                      CDMA devices, 5 buttons on GSM devices.)  The buttons
96                      are interspersed with 'layout_weight="1"' placeholder
97                      views so that they'll be spaced evenly in both cases.
98
99                      But note there are a couple of *pairs* of buttons that share a
100                      single "slot", namely Hold/Swap and Add/Merge.  For these, the
101                      code in InCallTouchUi is responsible for making sure that at any
102                      point exactly one of the pair is VISIBLE and the other is
103                      GONE. -->
104
105                 <!-- Separator between left padding and 1st button -->
106                 <View style="@style/VerticalSeparator" />
107
108                 <!-- "Dialpad" -->
109                 <!-- This is a "compound button": it has checked and unchecked states. -->
110                 <ToggleButton android:id="@+id/dialpadButton"
111                     style="@style/InCallCompoundButton"
112                     android:background="@drawable/btn_compound_dialpad"
113                     android:contentDescription="@string/onscreenShowDialpadText"
114                     />
115
116                 <!-- Separator between 1st and 2nd button -->
117                 <View style="@style/VerticalSeparator" />
118
119                 <!-- "Audio mode" -->
120                 <!-- This is a multi-mode button that can behave either like a
121                      simple "compound button" with two states *or* like an
122                      action button that brings up a popup menu; see
123                      btn_compound_audio.xml and InCallTouchUi.updateAudioButton()
124                      for the full details. -->
125                 <ToggleButton android:id="@+id/audioButton"
126                     style="@style/InCallCompoundButton"
127                     android:background="@drawable/btn_compound_audio"
128                     android:contentDescription="@string/onscreenAudioText"
129                     />
130
131                 <!-- Separator between 2nd and 3rd button -->
132                 <View style="@style/VerticalSeparator" />
133
134                 <!-- "Mute" -->
135                 <!-- This is a "compound button": it has checked and unchecked states. -->
136                 <ToggleButton android:id="@+id/muteButton"
137                     style="@style/InCallCompoundButton"
138                     android:background="@drawable/btn_compound_mute"
139                     android:contentDescription="@string/onscreenMuteText"
140                     />
141
142                 <!-- Separator between 3rd and 4th button -->
143                 <View style="@style/VerticalSeparator" />
144
145                 <!-- This slot is either "Hold" or "Swap", depending on
146                      the state of the call.   One or the other of these
147                      must always be set to GONE. -->
148                 <!-- "Hold" -->
149                 <!-- This is a "compound button": it has checked and unchecked states. -->
150                 <ToggleButton android:id="@+id/holdButton"
151                     style="@style/InCallCompoundButton"
152                     android:background="@drawable/btn_compound_hold"
153                     android:contentDescription="@string/onscreenHoldText"
154                     />
155                 <!-- "Swap" (or "Manage calls" in some CDMA states) -->
156                 <ImageButton android:id="@+id/swapButton"
157                     style="@style/InCallButton"
158                     android:src="@drawable/ic_incall_switch_holo_dark"
159                     android:contentDescription="@string/onscreenSwapCallsText"
160                     />
161
162                 <!-- Separator between 4th and 5th button (if 5th exists) -->
163                 <View android:id="@+id/holdSwapSpacer"
164                       style="@style/VerticalSeparator" />
165
166                 <!-- This slot is either "Add" or "Merge", depending on
167                      the state of the call.  One or the other of these
168                      must always be set to GONE. -->
169                 <!-- "Add Call" -->
170                 <ImageButton android:id="@+id/addButton"
171                     style="@style/InCallButton"
172                     android:src="@drawable/ic_add_contact_holo_dark"
173                     android:contentDescription="@string/onscreenAddCallText"
174                     />
175                 <!-- "Merge calls" -->
176                 <!-- This button is used only on GSM devices, where we know
177                      that "Add" and "Merge" are never available at the same time.
178                      The "Merge" button for CDMA devices is "cdmaMergeButton" above. -->
179                 <ImageButton android:id="@+id/mergeButton"
180                     style="@style/InCallButton"
181                     android:src="@drawable/ic_merge_holo_dark"
182                     android:contentDescription="@string/onscreenMergeCallsText"
183                     />
184
185                 <!-- Separator between 4th (or 5th) button and right padding -->
186                 <View style="@style/VerticalSeparator" />
187
188             </LinearLayout>
189
190         </LinearLayout>
191
192     </RelativeLayout>
193
194     <!--
195         (2) incomingCallWidget: the UI displayed while an incoming call is ringing.
196             See InCallTouchUi.showIncomingCallWidget().
197
198             Layout notes:
199             - Use an opaque black background since we need to cover up
200               a bit of the bottom of the contact photo
201             - The verticalOffset value gets us a little extra space above
202               the topmost "Respond by SMS" icon
203             - The negative layout_marginBottom shifts us slightly downward;
204               we're already aligned with the bottom of the screen, but we
205               don't have an icon in the downward direction so the whole
206               bottom area of this widget is just wasted space.
207     -->
208     <com.android.internal.widget.multiwaveview.MultiWaveView
209         android:id="@+id/incomingCallWidget"
210         android:layout_width="match_parent"
211         android:layout_height="wrap_content"
212         android:layout_gravity="center|bottom"
213         android:layout_marginBottom="-46dp"
214         android:background="@android:color/black"
215         android:visibility="gone"
216
217         prvandroid:targetDrawables="@array/incoming_call_widget_3way_targets"
218         prvandroid:targetDescriptions="@array/incoming_call_widget_3way_target_descriptions"
219         prvandroid:directionDescriptions="@array/incoming_call_widget_3way_direction_descriptions"
220         prvandroid:handleDrawable="@drawable/ic_in_call_touch_handle"
221         prvandroid:waveDrawable="@*android:drawable/ic_lockscreen_outerring"
222         prvandroid:outerRadius="@*android:dimen/multiwaveview_target_placement_radius"
223         prvandroid:snapMargin="@*android:dimen/multiwaveview_snap_margin"
224         prvandroid:hitRadius="@*android:dimen/multiwaveview_hit_radius"
225         prvandroid:vibrationDuration="20"
226         prvandroid:leftChevronDrawable="@*android:drawable/ic_lockscreen_chevron_left"
227         prvandroid:rightChevronDrawable="@*android:drawable/ic_lockscreen_chevron_right"
228         prvandroid:feedbackCount="3"
229         prvandroid:horizontalOffset="0dip"
230         prvandroid:verticalOffset="20dip"
231         />
232
233 </com.android.phone.InCallTouchUi>