diff --git a/InCallUI/proguard.flags b/InCallUI/proguard.flags
index bc88143..4e8310c 100644
--- a/InCallUI/proguard.flags
+++ b/InCallUI/proguard.flags
@@ -6,3 +6,9 @@
 -keepclasseswithmembers class com.android.incallui.AnimationUtils$CrossFadeDrawable {
     *** setCrossFadeAlpha(...);
 }
+
+# Any class or method annotated with NeededForTesting or NeededForReflection.
+-keepclassmembers class * {
+@com.android.contacts.common.test.NeededForTesting *;
+@com.android.incallui.NeededForReflection *;
+}
diff --git a/InCallUI/res/anim/slide_in.xml b/InCallUI/res/anim/slide_in.xml
new file mode 100644
index 0000000..c8372ce
--- /dev/null
+++ b/InCallUI/res/anim/slide_in.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<objectAnimator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:anim/decelerate_interpolator"
+    android:valueFrom="0.67"
+    android:valueTo="0"
+    android:valueType="floatType"
+    android:propertyName="yFraction"
+    android:duration="200" />
\ No newline at end of file
diff --git a/InCallUI/res/anim/slide_out.xml b/InCallUI/res/anim/slide_out.xml
new file mode 100644
index 0000000..2861db2
--- /dev/null
+++ b/InCallUI/res/anim/slide_out.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<objectAnimator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:anim/decelerate_interpolator"
+    android:valueFrom="0"
+    android:valueTo="0.67"
+    android:valueType="floatType"
+    android:propertyName="yFraction"
+    android:duration="200" />
\ No newline at end of file
diff --git a/InCallUI/res/drawable/dialpad_key_colors.xml b/InCallUI/res/drawable/dialpad_key_colors.xml
new file mode 100644
index 0000000..27b4d4f
--- /dev/null
+++ b/InCallUI/res/drawable/dialpad_key_colors.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_pressed="true"
+        android:drawable="@color/background_dialpad_pressed" />
+    <item android:drawable="@color/background_dialpad" />
+</selector>
diff --git a/InCallUI/res/layout/dialpad.xml b/InCallUI/res/layout/dialpad.xml
new file mode 100644
index 0000000..d537e62
--- /dev/null
+++ b/InCallUI/res/layout/dialpad.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<TableLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/dialpad"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_horizontal"
+    android:paddingLeft="@dimen/dialpad_horizontal_padding"
+    android:paddingRight="@dimen/dialpad_horizontal_padding"
+    android:background="@color/background_dialpad"
+    android:stretchColumns="*"
+    android:layoutDirection="ltr" >
+
+    <TableRow>
+        <include layout="@layout/dialpad_key" android:id="@+id/one"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/two"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/three"/>
+    </TableRow>
+
+    <TableRow>
+        <include layout="@layout/dialpad_key" android:id="@+id/four"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/five"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/six"/>
+    </TableRow>
+
+    <TableRow>
+        <include layout="@layout/dialpad_key" android:id="@+id/seven"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/eight"/>
+        <include layout="@layout/dialpad_key" android:id="@+id/nine"/>
+    </TableRow>
+
+    <TableRow>
+        <com.android.dialer.dialpad.DialpadKeyButton
+            android:id="@+id/star"
+            style="@style/DialpadKeyButtonStyle">
+            <LinearLayout
+                style="@style/DialpadKeyInternalLayoutStyle">
+                <TextView
+                    android:id="@id/dialpad_key_number"
+                    style="@style/DialpadKeyStarPoundStyle" />
+                <View
+                    android:layout_height="match_parent"
+                    android:layout_width="@dimen/dialpad_key_letters_width" />
+            </LinearLayout>
+        </com.android.dialer.dialpad.DialpadKeyButton>
+        <include layout="@layout/dialpad_key" android:id="@+id/zero"/>
+        <com.android.dialer.dialpad.DialpadKeyButton
+            android:id="@+id/pound"
+            style="@style/DialpadKeyButtonStyle">
+            <LinearLayout
+                style="@style/DialpadKeyInternalLayoutStyle">
+                <TextView
+                    android:id="@id/dialpad_key_number"
+                    style="@style/DialpadKeyStarPoundStyle" />
+                <View
+                    android:layout_height="match_parent"
+                    android:layout_width="@dimen/dialpad_key_letters_width" />
+            </LinearLayout>
+        </com.android.dialer.dialpad.DialpadKeyButton>
+    </TableRow>
+</TableLayout>
diff --git a/InCallUI/res/layout/dialpad_key.xml b/InCallUI/res/layout/dialpad_key.xml
new file mode 100644
index 0000000..180074d
--- /dev/null
+++ b/InCallUI/res/layout/dialpad_key.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/DialpadKeyButtonStyle">
+
+    <LinearLayout style="@style/DialpadKeyInternalLayoutStyle">
+
+        <!-- Note in the referenced styles that we assign hard widths to these components
+             because we want them to line up vertically when we arrange them in an MxN grid -->
+
+        <TextView
+            android:id="@+id/dialpad_key_number"
+            style="@style/DialpadKeyNumberStyle" />
+
+        <TextView
+            android:id="@+id/dialpad_key_letters"
+            style="@style/DialpadKeyLettersStyle" />
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
index fe84010..7240cb1 100644
--- a/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
+++ b/InCallUI/res/layout/dtmf_twelve_key_dialer_view.xml
@@ -14,9 +14,7 @@
      limitations under the License.
 -->
 
-<!-- The grid of buttons used in the onscreen DTMF dialpad;
-     see dtmf_twelve_key_dialer_view.xml. -->
-<LinearLayout
+<view class="com.android.incallui.DialpadFragment$DialpadSlidingLinearLayout"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/dtmf_twelve_key_dialer_view"
     android:layout_width="match_parent"
@@ -24,99 +22,50 @@
     android:orientation="vertical"
     android:layout_marginTop="1dip" >
 
-    <!-- Display of the digits you've typed so far.
-         This widget appears completely non-interactive to the user: you
-         can't edit or "hit backspace" since these are DTMF tones you've
-         already sent over the network.  But it's still an EditText rather
-         than a TextView because it needs to receive key events from a
-         hard keyboard, if present (see mDialerKeyListener). -->
-    <EditText
-        android:id="@+id/dtmfDialerField"
+    <View
+        android:id="@+id/dialpad_spacer"
         android:layout_width="match_parent"
-        android:layout_height="32dp"
-        android:layout_marginTop="10dp"
-        android:layout_marginBottom="5dp"
-        android:layout_marginStart="32dp"
-        android:layout_marginEnd="32dp"
-        android:paddingEnd="16dp"
-        android:paddingStart="16dp"
-        android:singleLine="true"
-        android:scrollHorizontally="true"
-        android:textSize="24sp"
-        android:gravity="center"
-        android:freezesText="true"
-        android:background="@null"
-        android:textColor="@color/dtmf_dialer_display_text"
-        android:focusableInTouchMode="false"
-        android:clickable="false"/>
+        android:layout_height="0dp"
+        android:layout_weight="1"/>
 
-    <TableLayout
-        android:id="@+id/dialpad"
+    <view class="com.android.incallui.DialpadFragment$HoverIgnoringLinearLayout"
+        android:orientation="vertical"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_weight="@integer/dialpad_layout_weight_dialpad"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginTop="@dimen/dialpad_vertical_margin"
-        android:paddingStart="5dip"
-        android:paddingEnd="5dip"
-        android:paddingBottom="10dip"
-        android:background="@color/dialpad_background"
-        android:layoutDirection="ltr">
+        android:layout_height="wrap_content"
+        android:background="@color/background_dialpad">
 
-        <TableRow
-             android:layout_height="0px"
-             android:layout_weight="1">
-            <ImageButton android:id="@+id/one" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_1_no_vm_wht"
-                android:contentDescription="@string/description_image_button_one" />
-            <ImageButton android:id="@+id/two" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_2_wht"
-                android:contentDescription="@string/description_image_button_two" />
-            <ImageButton android:id="@+id/three" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_3_wht"
-                android:contentDescription="@string/description_image_button_three" />
-        </TableRow>
+        <View
+            android:layout_height="@dimen/translucent_shadow_height"
+            android:layout_width="match_parent"
+            android:background="@color/translucent_shadow" />
 
-        <TableRow
-             android:layout_height="0px"
-             android:layout_weight="1">
-            <ImageButton android:id="@+id/four" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_4_wht"
-                android:contentDescription="@string/description_image_button_four" />
-            <ImageButton android:id="@+id/five" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_5_wht"
-                android:contentDescription="@string/description_image_button_five" />
-            <ImageButton android:id="@+id/six" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_6_wht"
-                android:contentDescription="@string/description_image_button_six" />
-        </TableRow>
+        <!-- Display of the digits you've typed so far.
+             This widget appears completely non-interactive to the user: you
+             can't edit or "hit backspace" since these are DTMF tones you've
+             already sent over the network.  But it's still an EditText rather
+             than a TextView because it needs to receive key events from a
+             hard keyboard, if present (see mDialerKeyListener). -->
+        <EditText
+            android:id="@+id/dtmfDialerField"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dialpad_digits_height"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="5dp"
+            android:layout_marginStart="32dp"
+            android:layout_marginEnd="32dp"
+            android:paddingEnd="16dp"
+            android:paddingStart="16dp"
+            android:singleLine="true"
+            android:scrollHorizontally="true"
+            android:gravity="center"
+            android:freezesText="true"
+            android:background="@color/background_dialpad"
+            android:fontFamily="sans-serif-light"
+            android:textSize="@dimen/dialpad_digits_text_size"
+            android:textColor="@color/dialpad_digits_text_color"
+            android:focusableInTouchMode="false"
+            android:clickable="false"/>
 
-        <TableRow
-             android:layout_height="0px"
-             android:layout_weight="1">
-            <ImageButton android:id="@+id/seven" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_7_wht"
-                android:contentDescription="@string/description_image_button_seven" />
-            <ImageButton android:id="@+id/eight" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_8_wht"
-                android:contentDescription="@string/description_image_button_eight" />
-            <ImageButton android:id="@+id/nine" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_9_wht"
-                android:contentDescription="@string/description_image_button_nine" />
-        </TableRow>
-
-        <TableRow
-             android:layout_height="0px"
-             android:layout_weight="1">
-            <ImageButton android:id="@+id/star" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_star_wht"
-                android:contentDescription="@string/description_image_button_star" />
-            <ImageButton android:id="@+id/zero" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_0_no_plus_wht"
-                android:contentDescription="@string/description_image_button_zero" />
-            <ImageButton android:id="@+id/pound" style="@style/DialpadButtonStyle"
-                android:src="@drawable/dial_num_pound_wht"
-                android:contentDescription="@string/description_image_button_pound" />
-        </TableRow>
-    </TableLayout>
-</LinearLayout>
+        <include layout="@layout/dialpad"/>
+    </view>
+</view>
diff --git a/InCallUI/res/values/colors.xml b/InCallUI/res/values/colors.xml
index 6080e91..ca53f27 100644
--- a/InCallUI/res/values/colors.xml
+++ b/InCallUI/res/values/colors.xml
@@ -23,9 +23,6 @@
     <color name="incall_secondary_info_background">#8033b5e5</color> <!-- semitransparent blueish grey -->
     <color name="incall_call_banner_text_color">#FFFFFF</color> <!-- white -->
 
-    <!-- DTMF Dialer -->
-    <color name="dtmf_dialer_display_text">#FFFFFF</color> <!-- white -->
-
     <!-- Color of the theme of the People app -->
     <color name="people_app_theme_color">#33B5E5</color>
 
@@ -44,9 +41,24 @@
     <!-- Used when the End Call button is disabled -->
     <drawable name="end_call_disabled_state">#303030</drawable>
 
-    <!-- Dialpad background -->
-    <color name="dialpad_background">#000000</color>
+    <!-- Color of dialpad digits -->
+    <color name="dialpad_digits_text_color">#000000</color>
+
+    <!-- Background color of dialpad -->
+    <color name="background_dialpad">#ffffff</color>
+
+    <!-- Pressed color of dialpad buttons -->
+    <color name="background_dialpad_pressed">#ececec</color>
 
     <!-- Button background -->
     <color name="button_background">#000000</color>
+
+    <!-- Background color of action bars -->
+    <color name="actionbar_background_color">#3B77E7</color>
+
+    <!-- Secondary color of dialpad text (used for the letters corresponding to each digit -->
+    <color name="dialpad_secondary_text_color">#8b8b8b</color>
+
+    <!-- Translucent shadow color -->
+    <color name="translucent_shadow">#33999999</color>
 </resources>
diff --git a/InCallUI/res/values/dimens.xml b/InCallUI/res/values/dimens.xml
index ebfb934..9bde442 100644
--- a/InCallUI/res/values/dimens.xml
+++ b/InCallUI/res/values/dimens.xml
@@ -71,7 +71,8 @@
     <!-- Dimensions for Emergency Dialer and dialpad inside the in-call screen -->
     <dimen name="dialpad_horizontal_margin">4dp</dimen>
     <dimen name="dialpad_vertical_margin">2dp</dimen>
-    <dimen name="dialpad_digits_text_size">35sp</dimen>
+    <dimen name="dialpad_digits_text_size">36sp</dimen>
+    <dimen name="dialpad_digits_height">47dp</dimen>
 
     <!-- Just used in landscape mode -->
     <dimen name="emergency_dialer_digits_height">0px</dimen>
@@ -116,4 +117,17 @@
     <dimen name="glowpadview_margin_bottom">-48dip</dimen>
     <dimen name="glowpadview_margin_right">0dip</dimen>
 
+    <!-- Text dimensions for dialpad keys -->
+    <dimen name="dialpad_key_numbers_size">40sp</dimen>
+    <dimen name="dialpad_key_letters_size">13sp</dimen>
+    <dimen name="dialpad_key_star_pound_size">26sp</dimen>
+    <dimen name="dialpad_key_numbers_width">30dp</dimen>
+    <dimen name="dialpad_key_letters_width">50dp</dimen>
+    <dimen name="dialpad_key_height">56dp</dimen>
+    <dimen name="dialpad_key_plus_size">18sp</dimen>
+    <dimen name="dialpad_number_to_letters_padding">11dp</dimen>
+    <dimen name="dialpad_horizontal_padding">5dp</dimen>
+
+    <!-- Height of translucent shadow effect -->
+    <dimen name="translucent_shadow_height">2dp</dimen>
 </resources>
diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml
index 513cd91..0469171 100644
--- a/InCallUI/res/values/strings.xml
+++ b/InCallUI/res/values/strings.xml
@@ -517,4 +517,54 @@
 
     <!-- This can be used in any application wanting to disable the text "Emergency number" -->
     <string name="emergency_call_dialog_number_for_display">Emergency number</string>
+
+    <!-- The digit to be displayed on the 0 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_0_number">0</string>
+    <!-- The digit to be displayed on the 1 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_1_number">1</string>
+    <!-- The digit to be displayed on the 2 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_2_number">2</string>
+    <!-- The digit to be displayed on the 3 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_3_number">3</string>
+    <!-- The digit to be displayed on the 4 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_4_number">4</string>
+    <!-- The digit to be displayed on the 5 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_5_number">5</string>
+    <!-- The digit to be displayed on the 6 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_6_number">6</string>
+    <!-- The digit to be displayed on the 7 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_7_number">7</string>
+    <!-- The digit to be displayed on the 8 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_8_number">8</string>
+    <!-- The digit to be displayed on the 9 key of the dialpad [CHAR LIMIT=1]-->
+    <string name="dialpad_9_number">9</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_star_number">*</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_pound_number">#</string>
+
+    <!--  Do not translate. -->
+    <string name="dialpad_0_letters">+</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_1_letters"></string>
+    <!--  Do not translate. -->
+    <string name="dialpad_2_letters">ABC</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_3_letters">DEF</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_4_letters">GHI</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_5_letters">JKL</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_6_letters">MNO</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_7_letters">PQRS</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_8_letters">TUV</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_9_letters">WXYZ</string>
+    <!--  Do not translate. -->
+    <string name="dialpad_star_letters"></string>
+    <!--  Do not translate. -->
+    <string name="dialpad_pound_letters"></string>
 </resources>
diff --git a/InCallUI/res/values/styles.xml b/InCallUI/res/values/styles.xml
index 91090b8..1b15d29 100644
--- a/InCallUI/res/values/styles.xml
+++ b/InCallUI/res/values/styles.xml
@@ -131,21 +131,46 @@
         <item name="android:windowAnimationStyle">@style/InCallAnimationStyle</item>
     </style>
 
-    <style name="DialpadButtonStyle">
-        <item name="android:layout_width">0dip</item>
-        <item name="android:layout_height">match_parent</item>
-        <item name="android:layout_weight">1</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-        <item name="android:soundEffectsEnabled">false</item>
+    <style name="DialpadKeyNumberStyle">
+        <item name="android:textColor">@color/actionbar_background_color</item>
+        <item name="android:textSize">@dimen/dialpad_key_numbers_size</item>
+        <item name="android:fontFamily">sans-serif-light</item>
+        <item name="android:layout_width">@dimen/dialpad_key_numbers_width</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
     </style>
 
-    <style name="DialtactsDigitsTextAppearance">
-        <item name="android:maxLines">1</item>
-        <item name="android:textSize">@dimen/dialpad_digits_text_size</item>
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-        <item name="android:freezesText">true</item>
-        <item name="android:editable">true</item>
-        <item name="android:cursorVisible">false</item>
+    <style name="DialpadKeyStarPoundStyle">
+        <item name="android:textColor">@color/dialpad_secondary_text_color</item>
+        <item name="android:textSize">@dimen/dialpad_key_star_pound_size</item>
+        <item name="android:fontFamily">sans-serif-light</item>
+        <item name="android:layout_width">@dimen/dialpad_key_numbers_width</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
+    </style>
+
+    <style name="DialpadKeyLettersStyle">
+        <item name="android:textColor">@color/dialpad_secondary_text_color</item>
+        <item name="android:textSize">@dimen/dialpad_key_letters_size</item>
+        <item name="android:fontFamily">sans-serif-light</item>
+        <item name="android:layout_width">@dimen/dialpad_key_letters_width</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:paddingLeft">@dimen/dialpad_number_to_letters_padding</item>
+    </style>
+
+    <style name="DialpadKeyButtonStyle">
+        <item name="android:soundEffectsEnabled">false</item>
+        <item name="android:clickable">true</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">@dimen/dialpad_key_height</item>
+        <item name="android:background">@drawable/dialpad_key_colors</item>
+        <item name="android:focusable">true</item>
+    </style>
+
+    <style name="DialpadKeyInternalLayoutStyle">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_gravity">center</item>
     </style>
 
     <style name="PrimaryCallInfoPrimaryCallBanner">
diff --git a/InCallUI/src/com/android/incallui/DialpadFragment.java b/InCallUI/src/com/android/incallui/DialpadFragment.java
index 5087561..c6ec742 100644
--- a/InCallUI/src/com/android/incallui/DialpadFragment.java
+++ b/InCallUI/src/com/android/incallui/DialpadFragment.java
@@ -17,16 +17,22 @@
 package com.android.incallui;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.method.DialerKeyListener;
+import android.util.AttributeSet;
 import android.view.KeyEvent;
 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.TableRow;
+import android.widget.TextView;
 
 import java.util.HashMap;
 
@@ -37,6 +43,79 @@
         implements DialpadPresenter.DialpadUi, View.OnTouchListener, View.OnKeyListener,
         View.OnHoverListener, View.OnClickListener {
 
+    private static final float DIALPAD_SLIDE_FRACTION = 0.67f;
+
+    /**
+     * LinearLayout with getter and setter methods for the translationY property using floats,
+     * for animation purposes.
+     */
+    public static class DialpadSlidingLinearLayout extends LinearLayout {
+
+        public DialpadSlidingLinearLayout(Context context) {
+            super(context);
+        }
+
+        public DialpadSlidingLinearLayout(Context context, AttributeSet attrs) {
+            super(context, attrs);
+        }
+
+        public DialpadSlidingLinearLayout(Context context, AttributeSet attrs, int defStyle) {
+            super(context, attrs, defStyle);
+        }
+
+        public float getYFraction() {
+            final int height = getHeight();
+            if (height == 0) return 0;
+            return getTranslationY() / height;
+        }
+
+        public void setYFraction(float yFraction) {
+            setTranslationY(yFraction * getHeight());
+        }
+    }
+
+    /**
+     * 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 class DismissListener implements View.OnClickListener, View.OnLongClickListener {
+
+        @Override
+        public void onClick(View view) {
+            dismiss();
+        }
+
+        @Override
+        public boolean onLongClick(View view) {
+            dismiss();
+            return true;
+        }
+
+        private void dismiss() {
+            ((InCallActivity) getActivity()).getCallButtonFragment().displayDialpad(false);
+        }
+    }
+
     private EditText mDtmfDialerField;
 
     /** Hash Map to map a view id to a character*/
@@ -382,6 +461,34 @@
 
             setupKeypad(parent);
         }
+
+        final DismissListener dl = new DismissListener();
+        final View spacer = parent.findViewById(R.id.dialpad_spacer);
+        spacer.setOnClickListener(dl);
+        spacer.setOnLongClickListener(dl);
+
+        final ViewTreeObserver vto = parent.getViewTreeObserver();
+        // Adjust the translation of the DialpadFragment in a preDrawListener instead of in
+        // DialtactsActivity, because at the point in time when the DialpadFragment is added,
+        // its views have not been laid out yet.
+        final ViewTreeObserver.OnPreDrawListener
+                preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
+            @Override
+            public boolean onPreDraw() {
+                if (isHidden()) return true;
+                if (parent.getTranslationY() == 0) {
+                    ((DialpadSlidingLinearLayout) parent)
+                            .setYFraction(DIALPAD_SLIDE_FRACTION);
+                }
+                final ViewTreeObserver vto = parent.getViewTreeObserver();
+                vto.removeOnPreDrawListener(this);
+                return true;
+            }
+
+        };
+
+        vto.addOnPreDrawListener(preDrawListener);
+
         return parent;
     }
 
@@ -440,21 +547,43 @@
         }
     }
 
-    /**
-     * setup the keys on the dialer activity, using the keymaps.
-     */
-    private void setupKeypad(View parent) {
-        // for each view id listed in the displaymap
+    private void setupKeypad(View fragmentView) {
+        final int[] buttonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four,
+                R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.pound};
+
+        final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
+                R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
+                R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
+                R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
+                R.string.dialpad_pound_number};
+
+        final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
+                R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
+                R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
+                R.string.dialpad_8_letters, R.string.dialpad_9_letters,
+                R.string.dialpad_star_letters, R.string.dialpad_pound_letters};
+
+        final Resources resources = getResources();
+
         View button;
-        for (int viewId : mDisplayMap.keySet()) {
-            // locate the view
-            button = parent.findViewById(viewId);
-            // Setup the listeners for the buttons
+        TextView numberView;
+        TextView lettersView;
+
+        for (int i = 0; i < buttonIds.length; i++) {
+            button = fragmentView.findViewById(buttonIds[i]);
             button.setOnTouchListener(this);
             button.setClickable(true);
             button.setOnKeyListener(this);
             button.setOnHoverListener(this);
             button.setOnClickListener(this);
+            numberView = (TextView) button.findViewById(R.id.dialpad_key_number);
+            lettersView = (TextView) button.findViewById(R.id.dialpad_key_letters);
+            final String numberString = resources.getString(numberIds[i]);
+            numberView.setText(numberString);
+            button.setContentDescription(numberString);
+            if (lettersView != null) {
+                lettersView.setText(resources.getString(letterIds[i]));
+            }
         }
     }
 }
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 08a8f12..e99fc99 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -21,6 +21,7 @@
 
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.app.FragmentTransaction;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.DialogInterface.OnCancelListener;
@@ -308,6 +309,10 @@
         InCallPresenter.getInstance().getProximitySensor().onConfigurationChanged(config);
     }
 
+    public CallButtonFragment getCallButtonFragment() {
+        return mCallButtonFragment;
+    }
+
     private void internalResolveIntent(Intent intent) {
         final String action = intent.getAction();
 
@@ -365,7 +370,7 @@
         if (mDialpadFragment == null) {
             mDialpadFragment = (DialpadFragment) getFragmentManager()
                     .findFragmentById(R.id.dialpadFragment);
-            mDialpadFragment.getView().setVisibility(View.INVISIBLE);
+            getFragmentManager().beginTransaction().hide(mDialpadFragment).commit();
         }
 
         if (mConferenceManagerFragment == null) {
@@ -398,13 +403,15 @@
     }
 
     public void displayDialpad(boolean showDialpad) {
+        final FragmentTransaction ft = getFragmentManager().beginTransaction();
         if (showDialpad) {
-            mDialpadFragment.setVisible(true);
-            mCallCardFragment.setVisible(false);
+            ft.setCustomAnimations(R.anim.slide_in, 0);
+            ft.show(mDialpadFragment);
         } else {
-            mDialpadFragment.setVisible(false);
-            mCallCardFragment.setVisible(true);
+            ft.setCustomAnimations(0, R.anim.slide_out);
+            ft.hide(mDialpadFragment);
         }
+        ft.commit();
 
         InCallPresenter.getInstance().getProximitySensor().onDialpadVisible(showDialpad);
     }
diff --git a/InCallUI/src/com/android/incallui/NeededForReflection.java b/InCallUI/src/com/android/incallui/NeededForReflection.java
new file mode 100644
index 0000000..363a0a5
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/NeededForReflection.java
@@ -0,0 +1,30 @@
+/*
+ * 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 java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Denotes that the class, constructor, method or field is used for reflection and therefore cannot
+ * be removed by tools like ProGuard.
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target({ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.FIELD})
+public @interface NeededForReflection {}
