am febc9b5e: Merge "Ripple tint is now color" into lmp-preview-dev

* commit 'febc9b5e5e29d3b08f13f72f05bc950e207ebb63':
  Ripple tint is now color
diff --git a/res/anim/slide_out.xml b/res/anim/slide_out.xml
deleted file mode 100644
index 88687f4..0000000
--- a/res/anim/slide_out.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?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.
--->
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@interpolator/ease_out_interpolator"
-    android:duration="@integer/dialpad_slide_out_duration"
-    android:fromYDelta="0"
-    android:toYDelta="80%p" />
\ No newline at end of file
diff --git a/res/drawable-hdpi/ic_arrow_back_24dp.png b/res/drawable-hdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index 86cb894..0000000
--- a/res/drawable-hdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_close_dk.png b/res/drawable-hdpi/ic_close_dk.png
deleted file mode 100644
index f5e378f..0000000
--- a/res/drawable-hdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_arrow_back_24dp.png b/res/drawable-mdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index dc81cd1..0000000
--- a/res/drawable-mdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_close_dk.png b/res/drawable-mdpi/ic_close_dk.png
deleted file mode 100644
index 13f68ee..0000000
--- a/res/drawable-mdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_arrow_back_24dp.png b/res/drawable-xhdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index 4f4fbaa..0000000
--- a/res/drawable-xhdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_close_dk.png b/res/drawable-xhdpi/ic_close_dk.png
deleted file mode 100644
index 4f965fe..0000000
--- a/res/drawable-xhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_arrow_back_24dp.png b/res/drawable-xxhdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index 46e90f7..0000000
--- a/res/drawable-xxhdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_close_dk.png b/res/drawable-xxhdpi/ic_close_dk.png
deleted file mode 100644
index 2472da8..0000000
--- a/res/drawable-xxhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_back_arrow.xml b/res/drawable/ic_back_arrow.xml
deleted file mode 100644
index 68a875d..0000000
--- a/res/drawable/ic_back_arrow.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?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
-  -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_arrow_back_24dp"
-        android:autoMirrored="true"
-        android:tint="@color/actionbar_icon_color" />
\ No newline at end of file
diff --git a/res/anim/slide_in.xml b/res/drawable/shadow_fade_left.xml
similarity index 66%
rename from res/anim/slide_in.xml
rename to res/drawable/shadow_fade_left.xml
index 4463f2f..cb87cf5 100644
--- a/res/anim/slide_in.xml
+++ b/res/drawable/shadow_fade_left.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
+<!-- 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.
@@ -13,8 +13,12 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@interpolator/ease_in_interpolator"
-    android:duration="@integer/dialpad_slide_in_duration"
-    android:fromYDelta="67%p"
-    android:toYDelta="0" />
\ No newline at end of file
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle" >
+    <gradient
+        android:type="linear"
+        android:startColor="@null"
+        android:endColor="#1a000000"
+        android:angle="0"/>
+</shape>
diff --git a/res/layout-land/dialpad_fragment.xml b/res/layout-land/dialpad_fragment.xml
new file mode 100644
index 0000000..aac0daf
--- /dev/null
+++ b/res/layout-land/dialpad_fragment.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<view class="com.android.dialer.dialpad.DialpadFragment$DialpadSlidingLinearLayout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal"
+    >
+    <!-- spacer view -->
+    <View
+        android:id="@+id/spacer"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:background="#00000000" />
+    <!-- Dialpad shadow -->
+    <View
+        android:layout_width="@dimen/shadow_length"
+        android:layout_height="match_parent"
+        android:background="@drawable/shadow_fade_left" />
+    <include layout="@layout/dialpad_view"
+         android:layout_height="match_parent"
+         android:layout_width="0dp"
+         android:layout_weight="1" />
+    <!-- "Dialpad chooser" UI, shown only when the user brings up the
+             Dialer while a call is already in progress.
+             When this UI is visible, the other Dialer elements
+             (the textfield/button and the dialpad) are hidden. -->
+    <ListView android:id="@+id/dialpadChooser"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/background_dialer_light"
+            android:visibility="gone" />
+</view>
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index 53f6b8d..9ca30a8 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -13,35 +13,68 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:ex="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/call_detail"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:visibility="gone"
->
-    <!--
-      The list view is under everything.
-      It contains a first header element which is hidden under the controls UI.
-      When scrolling, the controls move up until the name bar hits the top.
-      -->
-    <ListView
-        android:id="@+id/history"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-    />
+    android:layout_height="match_parent">
 
-    <!-- All the controls which are part of the pinned header are in this layout. -->
-    <RelativeLayout
-        android:id="@+id/controls"
+    <LinearLayout
+        android:id="@+id/call_detail"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:orientation="vertical"
+        android:background="@color/background_dialer_list_items"
         android:layout_alignParentStart="true"
         android:layout_alignParentTop="true"
     >
+        <!-- Caller information "card" -->
+        <LinearLayout
+            android:id="@+id/caller_information"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingStart="@dimen/call_detail_horizontal_margin"
+            android:paddingTop="@dimen/call_detail_top_margin"
+            android:paddingBottom="@dimen/call_detail_bottom_margin"
+            android:baselineAligned="false"
+            android:orientation="horizontal"
+            android:gravity="center_vertical"
+            android:translationZ="@dimen/call_detail_translation_z"
+            android:focusable="true"
+            android:background="@color/background_dialer_white">
+
+            <QuickContactBadge
+                android:id="@+id/quick_contact_photo"
+                android:layout_width="@dimen/contact_photo_size"
+                android:layout_height="@dimen/contact_photo_size"
+                android:layout_alignParentStart="true"
+                android:focusable="true"
+                />
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:gravity="center_vertical"
+                android:layout_marginStart="@dimen/call_detail_horizontal_margin"
+                >
+                <TextView
+                    android:id="@+id/caller_name"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textColor="?attr/call_log_primary_text_color"
+                    android:textSize="@dimen/call_log_primary_text_size"
+                    android:singleLine="true"
+                    />
+                <TextView
+                    android:id="@+id/caller_number"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textColor="?attr/call_log_secondary_text_color"
+                    android:textSize="@dimen/call_log_secondary_text_size"
+                    android:singleLine="true"
+                    />
+            </LinearLayout>
+        </LinearLayout>
+
         <FrameLayout
             android:id="@+id/voicemail_status"
             android:layout_width="match_parent"
@@ -49,157 +82,33 @@
             android:layout_alignParentStart="true"
             android:layout_alignParentTop="true"
             android:visibility="gone"
-        >
+            >
             <include layout="@layout/call_log_voicemail_status"/>
         </FrameLayout>
-
-        <view
-            class="com.android.contacts.common.widget.ProportionalLayout"
-            android:id="@+id/contact_background_sizer"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentStart="true"
-            android:layout_below="@id/voicemail_status"
-            ex:ratio="0.5"
-            ex:direction="widthToHeight"
-        >
-            <ImageView
-                android:id="@+id/contact_background"
-                android:layout_width="match_parent"
-                android:layout_height="0dip"
-                android:adjustViewBounds="true"
-                android:scaleType="centerCrop"
-            />
-        </view>
-
-        <LinearLayout
-            android:id="@+id/separator"
-            android:layout_width="match_parent"
-            android:layout_height="1dip"
-            android:background="@color/background_dialer_light"
-            android:layout_below="@+id/contact_background_sizer"
-        />
-        <View
-            android:id="@+id/photo_text_bar"
-            android:layout_width="match_parent"
-            android:layout_height="42dip"
-            android:background="#7F000000"
-            android:layout_alignParentStart="true"
-            android:layout_alignBottom="@id/contact_background_sizer"
-        />
-        <ImageView
-            android:id="@+id/main_action"
-            android:layout_width="wrap_content"
-            android:layout_height="0dip"
-            android:scaleType="center"
-            android:layout_alignEnd="@id/photo_text_bar"
-            android:layout_alignBottom="@id/photo_text_bar"
-            android:layout_alignTop="@id/photo_text_bar"
-            android:layout_marginEnd="@dimen/call_log_outer_margin"
-        />
-        <TextView
-            android:id="@+id/header_text"
-            android:layout_width="wrap_content"
-            android:layout_height="0dip"
-            android:layout_alignStart="@id/photo_text_bar"
-            android:layout_toLeftOf="@id/main_action"
-            android:layout_alignTop="@id/photo_text_bar"
-            android:layout_alignBottom="@id/photo_text_bar"
-            android:layout_marginEnd="@dimen/call_log_inner_margin"
-            android:layout_marginStart="@dimen/call_detail_contact_name_margin"
-            android:gravity="center_vertical"
-            android:textColor="?attr/call_log_header_color"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:singleLine="true"
-        />
-        <ImageButton
-            android:id="@+id/main_action_push_layer"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_alignStart="@id/contact_background_sizer"
-            android:layout_alignTop="@id/contact_background_sizer"
-            android:layout_alignEnd="@id/contact_background_sizer"
-            android:layout_alignBottom="@id/contact_background_sizer"
-            android:background="?android:attr/selectableItemBackground"
-        />
         <LinearLayout
             android:id="@+id/voicemail_container"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_below="@id/separator"
-            android:paddingBottom="@dimen/call_detail_button_spacing">
+            android:orientation="horizontal"
+            android:paddingBottom="@dimen/call_detail_button_spacing"
+            android:visibility="gone"
+            >
             <!-- The voicemail fragment will be put here. -->
         </LinearLayout>
-        <FrameLayout
-            android:id="@+id/call_and_sms"
+
+        <!--
+          The list view is under everything.
+          It contains a first header element which is hidden under the controls UI.
+          When scrolling, the controls move up until the name bar hits the top.
+          -->
+        <ListView
+            android:id="@+id/history"
             android:layout_width="match_parent"
-            android:layout_height="@dimen/call_log_list_item_height"
-            android:layout_marginBottom="@dimen/call_detail_button_spacing"
-            android:layout_below="@id/voicemail_container"
-            android:gravity="center_vertical"
-            android:background="@color/background_dialer_list_items"
-        >
+            android:layout_height="fill_parent"
+        />
 
-            <LinearLayout
-                android:id="@+id/call_and_sms_main_action"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:orientation="horizontal"
-                android:focusable="true"
-                android:background="?android:attr/selectableItemBackground"
-                >
 
-                <LinearLayout
-                    android:layout_width="0dip"
-                    android:layout_height="match_parent"
-                    android:layout_weight="1"
-                    android:paddingStart="@dimen/call_log_indent_margin"
-                    android:orientation="vertical"
-                    android:gravity="center_vertical"
-                >
-
-                    <TextView android:id="@+id/call_and_sms_text"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:paddingEnd="@dimen/call_log_icon_margin"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:textColor="?attr/call_log_primary_text_color"
-                        android:singleLine="true"
-                        android:ellipsize="end"
-                    />
-
-                    <TextView android:id="@+id/call_and_sms_label"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:paddingEnd="@dimen/call_log_icon_margin"
-                        android:textAppearance="?android:attr/textAppearanceSmall"
-                        android:textColor="?attr/call_log_primary_text_color"
-                        android:textAllCaps="true"
-                        android:singleLine="true"
-                        android:ellipsize="end"
-                    />
-                </LinearLayout>
-
-                <View android:id="@+id/call_and_sms_divider"
-                    android:layout_width="1px"
-                    android:layout_height="32dip"
-                    android:background="@color/background_dialer_light"
-                    android:layout_gravity="center_vertical"
-                />
-
-                <ImageView android:id="@+id/call_and_sms_icon"
-                    android:layout_width="@color/call_log_voicemail_highlight_color"
-                    android:layout_height="match_parent"
-                    android:paddingStart="@dimen/call_log_inner_margin"
-                    android:paddingEnd="@dimen/call_log_outer_margin"
-                    android:gravity="center"
-                    android:scaleType="centerInside"
-                    android:focusable="true"
-                    android:background="?android:attr/selectableItemBackground"
-                />
-            </LinearLayout>
-        </FrameLayout>
-    </RelativeLayout>
+    </LinearLayout>
     <!--
          Used to hide the UI when playing a voicemail and the proximity sensor
          is detecting something near the screen.
@@ -208,10 +117,10 @@
         android:id="@+id/blank"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
         android:background="@android:color/black"
         android:visibility="gone"
         android:clickable="true"
-    />
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true"
+        />
 </RelativeLayout>
diff --git a/res/layout/call_detail_history_header.xml b/res/layout/call_detail_history_header.xml
index 40f943b..b4b63fb 100644
--- a/res/layout/call_detail_history_header.xml
+++ b/res/layout/call_detail_history_header.xml
@@ -14,48 +14,16 @@
      limitations under the License.
 -->
 
-<!-- This layout is supposed to match the content of the controls in call_detail.xml  -->
-<LinearLayout
+<TextView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:ex="http://schemas.android.com/apk/res-auto"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <!-- Contact photo. -->
-    <view
-        class="com.android.contacts.common.widget.ProportionalLayout"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentStart="true"
-        android:layout_below="@id/voicemail_status"
-        ex:ratio="0.5"
-        ex:direction="widthToHeight"
-    >
-        <!-- Proportional layout requires a view in it. -->
-        <View
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-        />
-    </view>
-    <!-- Separator line -->
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="1dip"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingTop="@dimen/call_detail_header_top_margin"
+    android:paddingStart="@dimen/call_detail_horizontal_margin"
+    android:textColor="?attr/call_log_secondary_text_color"
+    android:textSize="@dimen/call_log_secondary_text_size"
+    android:fontFamily="sans-serif-medium"
+    android:singleLine="true"
+    android:text="@string/call_detail_list_header"
     />
-    <!-- Voicemail controls -->
-    <!-- TODO: Make the height be based on a constant. -->
-    <View
-        android:id="@+id/header_voicemail_container"
-        android:layout_width="match_parent"
-        android:layout_height="140dip"
-        android:layout_marginBottom="@dimen/call_detail_button_spacing"
-    />
-    <!-- Call and SMS -->
-    <View
-        android:id="@+id/header_call_and_sms_container"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/call_log_list_item_height"
-    />
-
-</LinearLayout>
diff --git a/res/layout/call_detail_history_item.xml b/res/layout/call_detail_history_item.xml
index 5b3fff7..cc06d21 100644
--- a/res/layout/call_detail_history_item.xml
+++ b/res/layout/call_detail_history_item.xml
@@ -18,10 +18,9 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:minHeight="@dimen/call_log_list_item_height"
     android:paddingTop="@dimen/call_log_inner_margin"
     android:paddingBottom="@dimen/call_log_inner_margin"
-    android:paddingStart="@dimen/call_log_indent_margin"
+    android:paddingStart="@dimen/call_detail_horizontal_margin"
     android:paddingEnd="@dimen/call_log_outer_margin"
     android:orientation="vertical"
     android:background="@color/background_dialer_list_items"
@@ -43,22 +42,22 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="@dimen/call_log_icon_margin"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="?attr/call_log_secondary_text_color"
+            android:textColor="?attr/call_log_primary_text_color"
+            android:textSize="@dimen/call_log_primary_text_size"
         />
     </LinearLayout>
     <TextView
         android:id="@+id/date"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceSmall"
         android:textColor="?attr/call_log_secondary_text_color"
+        android:textSize="@dimen/call_log_secondary_text_size"
     />
     <TextView
         android:id="@+id/duration"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceSmall"
         android:textColor="?attr/call_log_secondary_text_color"
+        android:textSize="@dimen/call_log_secondary_text_size"
     />
 </LinearLayout>
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 411af70..3748967 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -64,8 +64,8 @@
             android:nextFocusLeft="@+id/quick_contact_photo" >
             <QuickContactBadge
                 android:id="@+id/quick_contact_photo"
-                android:layout_width="@dimen/call_log_list_contact_photo_size"
-                android:layout_height="@dimen/call_log_list_contact_photo_size"
+                android:layout_width="@dimen/contact_photo_size"
+                android:layout_height="@dimen/contact_photo_size"
                 android:nextFocusRight="@id/primary_action_view"
                 android:layout_alignParentStart="true"
                 android:focusable="true"
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index b2312ad..01bbecc 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -28,7 +28,7 @@
     <!-- Dialpad shadow -->
     <View
         android:layout_width="match_parent"
-        android:layout_height="10dp"
+        android:layout_height="@dimen/shadow_length"
         android:background="@drawable/shadow_fade_up" />
     <include layout="@layout/dialpad_view" />
     <!-- "Dialpad chooser" UI, shown only when the user brings up the
diff --git a/res/layout/playback_layout.xml b/res/layout/playback_layout.xml
index 01ed2e9..aa3ab47 100644
--- a/res/layout/playback_layout.xml
+++ b/res/layout/playback_layout.xml
@@ -18,7 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="@color/background_dialer_light"
+    android:background="@color/background_dialer_list_items"
 >
     <!-- Mute, playback, trash buttons. -->
     <LinearLayout
@@ -33,7 +33,6 @@
             android:layout_height="58dip"
             android:layout_marginEnd="@dimen/call_detail_button_spacing"
             android:layout_weight="1"
-            android:background="@color/background_dialer_list_items"
         >
             <ImageButton
                 android:id="@+id/playback_start_stop"
@@ -41,6 +40,7 @@
                 android:layout_height="match_parent"
                 android:background="?android:attr/selectableItemBackground"
                 android:src="@drawable/ic_hold_pause"
+                android:contentDescription="@string/voicemail_play_start_pause"
             />
         </LinearLayout>
         <LinearLayout
@@ -64,7 +64,6 @@
         android:layout_height="80dip"
         android:layout_below="@id/buttons_linear_layout"
         android:layout_marginTop="@dimen/call_detail_button_spacing"
-        android:background="@color/background_dialer_list_items"
     >
         <!-- SeekBar left-right margin decreased from redlines 72dip by 8dip to account for
              half thumb width (thumb is 16dip).
@@ -117,6 +116,7 @@
             android:paddingTop="29dip"
             android:layout_alignParentStart="true"
             android:layout_centerVertical="true"
+            android:contentDescription="@string/voicemail_play_slower"
         />
         <ImageButton
             android:id="@+id/rate_increase_button"
@@ -128,11 +128,11 @@
             android:paddingTop="29dip"
             android:layout_alignParentEnd="true"
             android:layout_centerVertical="true"
+            android:contentDescription="@string/voicemail_play_faster"
         />
         <View
             android:layout_width="match_parent"
             android:layout_height="2dp"
-            android:background="@color/background_dialer_light"
             android:layout_alignParentBottom="true"/>
     </RelativeLayout>
 </RelativeLayout>
diff --git a/res/layout/search_edittext.xml b/res/layout/search_edittext.xml
index a07bfb8..0308d51 100644
--- a/res/layout/search_edittext.xml
+++ b/res/layout/search_edittext.xml
@@ -45,7 +45,6 @@
                 android:layout_marginLeft="@dimen/search_box_collapsed_text_margin_left"
                 android:textSize="@dimen/search_collapsed_text_size"
                 android:fontFamily="@string/search_font_family"
-                android:textColor="@color/searchbox_text_color"
                 android:textColorHint="@color/searchbox_hint_text_color"
                 android:gravity="center_vertical"
                 android:hint="@string/dialer_hint_find_contact" />
@@ -76,46 +75,6 @@
 
     </LinearLayout>
 
-    <LinearLayout
-        android:id="@+id/search_box_expanded"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="horizontal"
-        android:gravity="center_vertical"
-        android:visibility="gone" >
+    <include layout="@layout/search_bar_expanded" />
 
-        <ImageButton
-            android:id="@+id/search_back_button"
-            android:layout_width="@dimen/search_box_icon_size"
-            android:layout_height="@dimen/search_box_icon_size"
-            android:layout_marginLeft="8dp"
-            android:src="@drawable/ic_back_arrow"
-            android:background="?android:attr/selectableItemBackground"
-            android:contentDescription="@string/action_menu_overflow_description"
-            android:tint="@color/actionbar_background_color" />
-
-        <EditText
-            android:id="@+id/search_view"
-            android:layout_width="0dp"
-            android:layout_height="@dimen/action_bar_height"
-            android:layout_weight="1"
-            android:layout_marginLeft="@dimen/search_box_expanded_text_margin_left"
-            android:textSize="@dimen/search_expanded_text_size"
-            android:fontFamily="@string/search_font_family"
-            android:textColor="@color/searchbox_text_color"
-            android:inputType="textFilter" />
-
-        <ImageView
-            android:id="@+id/search_close_button"
-            android:layout_height="@dimen/search_box_icon_size"
-            android:layout_width="@dimen/search_box_icon_size"
-            android:layout_marginRight="8dp"
-            android:src="@drawable/ic_close_dk"
-            android:clickable="true"
-            android:background="?android:attr/selectableItemBackground"
-            android:contentDescription="@string/description_clear_search"
-            android:tint="@color/searchbox_icon_tint" />
-
-    </LinearLayout>
-
-</view>
\ No newline at end of file
+</view>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 405524f..e2b4e19 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> oproepe."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Stuur teksboodskap aan <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Ongeluisterde stemboodskap"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Vee soektog uit"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Begin stemsoektog"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Onbekend"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 93b1413..7e89343 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ጥሪዎች።"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"የፅሁፍ መልዕክት ወደ <xliff:g id="NAME">%1$s</xliff:g> ላክ"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"ያልተሰማ የድምፅመልዕክት"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"ፍለጋን አጽዳ"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"በድምፅ ፍለጋ ይጀምሩ"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"ደውል<xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ያልታወቀ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index e86b11c..1dbe5f8 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> من المكالمات."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"إرسال رسالة نصية إلى <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"البريد الصوتي غير المسموع"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"محو البحث"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"بدء البحث الصوتي"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"الاتصال بالرقم <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"غير معروف"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 3e4ce4e..a171d55 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> обаждания."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Изпращане на SMS до <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непрослушана гласова поща"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Изчистване на търсенето"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Стартиране на гласово търсене"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Обаждане на <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Неизвестен"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 1e72d99..09bcbae 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> trucades"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Envia un missatge de text a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Missatge de veu no escoltat"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Esborra la cerca"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Inicia la cerca per veu"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Truca al <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconegut"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 09e06e1..5d5a88f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Počet hovorů: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Odeslat textovou zprávu kontaktu <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nevyslechnutá hlasová zpráva"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Vymazat vyhledávání"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Spustit hlasové vyhledávání"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Zavolat na číslo <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Neznámé"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 518ed86..b1e34a4 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> opkald."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Send sms til <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Uaflyttet besked på telefonsvareren"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Ryd søgning"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Start stemmesøgning"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ring til <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Ukendte"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 596b144..75e85e2 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> Anrufe"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"SMS an <xliff:g id="NAME">%1$s</xliff:g> senden"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nicht abgehörte Mailbox-Nachricht"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Suche zurücksetzen"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Sprachsuche starten"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> wählen"</string>
     <string name="unknown" msgid="740067747858270469">"Unbekannt"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index e787936..bd81888 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> κλήσεις."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Αποστολή μηνύματος κειμένου στον χρήστη <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Μηνύματα αυτόματου τηλεφωνητή που δεν έχετε ακούσει"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Διαγραφή αναζητήσεων"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Έναρξη φωνητικής αναζήτησης"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Κλήση του αριθμού <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Άγνωστος"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2bcbd79..537f211 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> calls."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Send text message to <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Unheard voicemail"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Start voice search"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Unknown"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2bcbd79..537f211 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> calls."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Send text message to <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Unheard voicemail"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Start voice search"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Unknown"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 7365c4b..e374370 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> llamadas"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensaje de texto a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Buzón de voz no escuchado"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Borrar la búsqueda"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar búsqueda por voz"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Llamar al <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconocido"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index c1259b6..2fab950 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> llamadas."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensaje de texto a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mensaje de voz sin oír"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Borrar la búsqueda"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar búsqueda por voz"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Llamar a <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconocidos"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index bc93a64..00a2caa 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> kõnet."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Saada tekstsõnum kontaktile <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Kuulamata kõnepostisõnum"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Otsingu kustutamine"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Häälotsingu alustamine"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Helistage: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tundmatu"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 5a59b6f..3cef835 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> تماس."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"ارسال پیام متنی به <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"پست صوتی شنیده نشده"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"پاک کردن جستجو"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"شروع جستجوی صوتی"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"تماس با <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ناشناس"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3207f05..225752d 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> puhelua."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Lähetä tekstiviesti: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Kuuntelematon vastaajaviesti"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Tyhjennä haku"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Aloita puhehaku"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Soita <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tuntematon"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 3e0a4f5..11064fe 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> appels."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Envoyer un SMS à <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nouveau message vocal"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Effacer les termes de recherche"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Démarrer la recherche vocale"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Inconnu"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 0425ce1..6d79bee 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> appels"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Envoyer un SMS à <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nouveau message vocal"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Effacer la recherche"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Démarrer la recherche vocale"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Inconnu"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 2e140bb..c2c0c4d 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> कॉल."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> को पाठ संदेश भेजें"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"नहीं सुना गया ध्वनिमेल"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"खोज साफ़ करें"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"बोलकर खोजें शुरु करें"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> पर कॉल करें"</string>
     <string name="unknown" msgid="740067747858270469">"अज्ञात"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 5c2c4e3..63cd451 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Broj poziva: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Slanje tekstualne poruke: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nepreslušana govorna pošta"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Brisanje pretraživanja"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Pokretanje glasovnog pretraživanja"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Nazovite <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nepoznato"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index dfb986f..f4f6234 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> hívás"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"SMS küldése neki: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nem lejátszott hangüzenet"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Keresés törlése"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Hangalapú keresés indítása"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Hívás: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Ismeretlen"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 23afd39..7dd3085 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> զանգ:"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Ուղարկել տեքստային հաղորդագրություն <xliff:g id="NAME">%1$s</xliff:g>-ին"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Չլսված ձայնային փոստ"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Մաքրել որոնման դաշտը"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Սկսկեք ձայնային որոնումը"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>-ին"</string>
     <string name="unknown" msgid="740067747858270469">"Անհայտ"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 0135e69..9b3ddad 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> panggilan."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Kirim SMS ke <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Pesan suara yang belum didengar"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Hapus penelusuran"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Memulai penelusuran suara"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 88e3473..c3957bc 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> chiamate."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Invia messaggio di testo a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Messaggio vocale non ascoltato"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Cancella ricerca"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Avvia la ricerca vocale"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Chiama <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Sconosciuto"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index e11dea5..9e42c55 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> שיחות."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"שלח הודעת טקסט אל <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"דואר קולי שעדיין לא נשמע"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"נקה חיפוש"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"התחל חיפוש קולי"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"התקשר אל <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"לא ידוע"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 2215cd3..ad56cab 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"通話回数は<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>回。"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g>にテキストメッセージを送信"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未再生のボイスメール"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"検索をクリア"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"音声検索を開始"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>に発信"</string>
     <string name="unknown" msgid="740067747858270469">"通知不可能"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index da91ab1..8e09b26 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ზარი."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"ტესქტური შეტყობინების გაგზავნა <xliff:g id="NAME">%1$s</xliff:g>-ისთვის"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"მოსასმენი ხმოვანი ფოსტა"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"ძიების გასუფთავება"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"ხმოვანი ძიების დაწყება"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"დარეკვა <xliff:g id="NUMBER">%s</xliff:g>-ზე"</string>
     <string name="unknown" msgid="740067747858270469">"უცნობი"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index acebb5d..8b3ebd2 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"ការ​ហៅ <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ។"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"ផ្ញើ​រ​សារ​អត្ថបទ​ទៅ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"សារ​ជា​សំឡេង​ដែល​មិន​បាន​ឮ"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"សម្អាត​ការ​ស្វែងរក"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"ចាប់ផ្ដើម​ស្វែងរក​ជា​សំឡេង"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"ហៅ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"មិន​ស្គាល់"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 2b7ca7d..f065d74 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"통화 횟수: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>번"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g>님에게 문자 메시지 보내기"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"듣지 않은 음성사서함"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"검색창 지우기"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"음성 검색 시작"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>에 전화"</string>
     <string name="unknown" msgid="740067747858270469">"알 수 없음"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index ec47874..1ba8a65 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ການໂທ."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"ສົ່ງຂໍ້ຄວາມຫາ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"ຂໍ້ຄວາມສຽງທີ່ຍັງບໍ່ໄດ້ຟັງ"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"ລຶບ​ການ​ຊອກ​ຫາ"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"ເລີ່ມການຊອກຫາດ້ວຍສຽງ"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"ໂທ​ຫາ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ບໍ່ຮູ້ຈັກ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index ef58e8b..687ec7e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Skambučių: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Siųsti teksto pranešimą <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Neklausytas balso pašto pranešimas"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Išvalyti paiešką"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Pradėti paiešką balsu"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Skambinti <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nežinomas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 1228c1a..9c06067 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> zvani."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Sūtīt īsziņu šim: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nenoklausīti balss pasta ziņojumi"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Notīrīt meklēšanas lauku"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Sākt meklēšanu ar balsi"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Zvaniet: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nezināms"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index a7a6852..3da000e 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> дуудлага."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> руу зурвас илгээх"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Сонсоогүй дуут шуудан"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Хайлтыг цэвэрлэх"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Дуун хайлтыг эхлүүлэх"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> руу залгах"</string>
     <string name="unknown" msgid="740067747858270469">"Тодорхойгүй"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 9ac1ded..a6fdc61 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> panggilan."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Hantar mesej teks kepada <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mel suara belum didengar"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Kosongkan carian"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Mulakan carian suara"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index d361a04..4ae10fa 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> samtaler."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Send tekstmelding til <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Ikke avspilt talepost"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Slett søk"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Start talesøk"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Ukjent"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index fdd65fd..86203c0 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> telefoongesprekken."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Sms verzenden naar <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Niet-beluisterde voicemail"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Zoekopdracht wissen"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Gesproken zoekopdracht"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Onbekend"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index f0850df..f36a94c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Połączenia: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Wyślij SMS do: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nieodsłuchana poczta głosowa"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Wyczyść wyszukiwanie"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Wyszukiwanie głosowe"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Zadzwoń: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nieznane"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index edc736f..377c83a 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> chamadas."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensagem de texto para <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mensagem de correio de voz ainda não ouvida"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar pesquisa por voz"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Telefonar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconhecido"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 4cfd902..739aef4 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> chamadas."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensagem de texto para <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nova mensagem de voz"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar pesquisa por voz"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ligar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconhecido"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 2389cc4..16c1db1 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -171,8 +171,6 @@
     <skip />
     <!-- no translation found for description_call_log_unheard_voicemail (118101684236996786) -->
     <skip />
-    <!-- no translation found for description_clear_search (688023606766232904) -->
-    <skip />
     <!-- no translation found for description_start_voice_search (520539488194946012) -->
     <skip />
     <!-- no translation found for menu_callNumber (997146291983360266) -->
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 80aa848..481ede9 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> (de) apeluri."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Trimiteţi un mesaj text către <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mesaje vocale neascultate"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Ștergeți căutarea"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Începeţi căutarea vocală"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Apelaţi <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Necunoscut"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 621ff68..a148ea3 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Вызовов: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Отправить текстовое сообщение: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непрослушанные сообщения голосовой почты"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Очистить условия поиска"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Начать голосовой поиск"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Позвонить: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Неизвестно"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 8561765..4b1069f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Počet volaní: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Poslať textovú správu kontaktu <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nevypočutá hlasová správa"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Vymazať vyhľadávanie"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Spustenie hlasového vyhľadávania"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Volať <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Neznáme"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 045e5e0..593ef37 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Št. klicev: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Pošlji SMS osebi <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Neodprta glasovna pošta"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Počisti iskalno polje"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Začni glasovno iskanje"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Pokliči <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Neznano"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 8506e9f..f931dc2 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> позива."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Слање текстуалне поруке контакту <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непреслушана говорна пошта"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Брисање претраге"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Покретање гласовне претраге"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Позови <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Непознато"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index a83b9fd..5b16468 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> samtal."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Skicka SMS till <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Ej hört röstmeddelande"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Rensa sökning"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Starta röstsökning"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Okänd"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index c1ee838..c4b0bf9 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Simu <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Tuma ujumbe wa maandishi kwa <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Barua sauti ambayo haijasikizwa"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Futa utafutaji"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Anza kutafuta kwa kutamka"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Piga simu <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Haijulikani"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index b390dfa..32fa732 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> สาย"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"ส่งข้อความไปที่ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"ข้อความเสียงที่ยังไม่ได้ฟัง"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"ล้างการค้นหา"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"เริ่มต้นการค้นหาด้วยเสียง"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"โทร <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ไม่ทราบ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 7a6c482..9994142 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> (na) tawag."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Ipadala ang text message kay <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Hindi pa naririnig na voicemail"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"I-clear ang paghahanap"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Simulan ang paghahanap gamit ang boses"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Tumawag sa <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Di-kilala"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index d66bd73..15a013c 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> çağrı."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Şu kişiye kısa mesaj gönder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Dinlenilmemiş sesli mesaj"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Aramayı temizle"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Sesli arama başlat"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Çağrı yap: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Bilinmiyor"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0b6ee7d..d65411a 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"Викликів: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Надіслати текстове повідомлення: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непрослухана голосова пошта"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Очистити поле пошуку"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Розпочати голосовий пошук"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Телефонувати <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Невідомий"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index d00e7c3..920bdba 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> cuộc gọi."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Gửi tin nhắn văn bản tới <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Thư thoại chưa nghe"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Xóa tìm kiếm"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Bắt đầu tìm kiếm bằng giọng nói"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Gọi <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Không xác định"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 58f19eb..0050026 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>次通话。"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"向<xliff:g id="NAME">%1$s</xliff:g>发送短信"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未收听的语音邮件"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"清除搜索内容"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"开始语音搜索"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"拨打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"未知"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 6bac571..94fcef2 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> 次通話次數。"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"發短訊給<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未聽取的語音留言"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"清除搜尋"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"開始語音搜尋"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"未知"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 33aaedd..ab9d506 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"通話 <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> 次。"</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"傳送簡訊給<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未聽取的語音留言"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"清除搜尋"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"開始進行語音搜尋"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"不明"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 9e8b16c..9d7ad7d 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -115,7 +115,6 @@
     <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> amakholi."</string>
     <string name="description_send_text_message" msgid="7803126439934046891">"Hambisa umyalezo ku <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"I-imeyli yezwi engazwakalanga"</string>
-    <string name="description_clear_search" msgid="688023606766232904">"Sula usesho"</string>
     <string name="description_start_voice_search" msgid="520539488194946012">"Qalisa ukusesha ngezwi"</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Shayela <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Akwaziwa"</string>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
index 05b8e21..7863060 100644
--- a/res/values/animation_constants.xml
+++ b/res/values/animation_constants.xml
@@ -16,8 +16,6 @@
   -->
 <resources>
     <integer name="fade_duration">300</integer>
-    <integer name="dialpad_slide_in_duration">532</integer>
-    <integer name="dialpad_slide_out_duration">257</integer>
 
     <!-- Swipe constants -->
     <integer name="swipe_escape_velocity">100</integer>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 9264e30..05381a5 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -39,6 +39,8 @@
     <!-- Standard color for selected items. -->
     <color name="item_selected">#660099cc</color>
 
+    <!-- White background for dialer -->
+    <color name="background_dialer_white">#ffffff</color>
     <!-- Background color of new dialer activity -->
     <color name="background_dialer_light">#f6f6f6</color>
     <!-- Background color of dialer list items (contacts, call log entries) -->
@@ -47,18 +49,9 @@
     <color name="search_shortcut_background_color">#b6b6b6</color>
     <color name="search_shortcut_icon_color">#f8f8f8</color>
 
-    <!-- Dark variant of the action bar color. -->
-    <color name="actionbar_background_color_dark">#008aa1</color>
-
     <!-- Color of the 1dp divider that separates favorites -->
     <color name="favorite_contacts_separator_color">#d0d0d0</color>
 
-    <!-- Background color of the search box -->
-    <color name="searchbox_background_color">#ffffff</color>
-    <!-- Text color of the search box text as entered by user  -->
-    <color name="searchbox_text_color">#000000</color>
-    <!-- Text color of the search box hint text  -->
-    <color name="searchbox_hint_text_color">#a4a4a4</color>
     <color name="searchbox_icon_tint">#a4a4a4</color>
 
     <!-- Color of the contact name in favorite tiles -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 53292e1..4b955c6 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -15,7 +15,6 @@
   ~ limitations under the License
 -->
 <resources>
-
     <!--
           Drag to remove view (in dp because it is used in conjunction with a statically
           sized icon
@@ -32,18 +31,19 @@
     <dimen name="call_log_indent_margin">24dip</dimen>
     <dimen name="call_log_name_margin_bottom">2dp</dimen>
     <dimen name="call_log_list_item_height">56dip</dimen>
-    <dimen name="call_log_list_contact_photo_size">40dip</dimen>
-    <dimen name="call_detail_contact_name_margin">24dip</dimen>
+
+    <!-- Size of contact photos in the call log and call details. -->
+    <dimen name="contact_photo_size">40dp</dimen>
     <dimen name="call_detail_button_spacing">2dip</dimen>
+    <dimen name="call_detail_horizontal_margin">16dp</dimen>
+    <dimen name="call_detail_top_margin">36dp</dimen>
+    <dimen name="call_detail_bottom_margin">32dp</dimen>
+    <dimen name="call_detail_header_top_margin">24dp</dimen>
+    <dimen name="call_detail_translation_z">0.5dp</dimen>
 
     <!-- Match call_button_height to Phone's dimens/in_call_end_button_height -->
     <dimen name="call_button_height">74dp</dimen>
 
-    <!-- Right margin of the floating action button -->
-    <dimen name="floating_action_button_margin_right">16dp</dimen>
-    <!-- Bottom margin of the floating action button -->
-    <dimen name="floating_action_button_margin_bottom">16dp</dimen>
-    <dimen name="floating_action_button_dialpad_margin_bottom">12dp</dimen>
 
     <!-- Dimensions for speed dial tiles -->
     <dimen name="contact_tile_divider_width">1dp</dimen>
@@ -141,4 +141,7 @@
 
     <!-- Size of icon for contacts number shortcuts -->
     <dimen name="search_shortcut_radius">40dp</dimen>
+
+    <!-- Length of dialpad's shadows in dialer. -->
+    <dimen name="shadow_length">10dp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0cf4e25..6d9c77a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -460,9 +460,6 @@
     -->
     <string name="description_call_log_unheard_voicemail">Unheard voicemail</string>
 
-    <!--  String describing the icon used to clear the search field -->
-    <string name="description_clear_search">Clear search</string>
-
     <!-- String describing the icon used to start a voice search -->
     <string name="description_start_voice_search">Start voice search</string>
 
@@ -635,10 +632,6 @@
          Do not translate. -->
     <string name="favorites_menu_all_contacts_font_family">sans-serif</string>
 
-    <!-- The font-family to use for the text inside the searchbox.
-         Do not translate. -->
-    <string name="search_font_family">sans-serif</string>
-
     <!-- Button text for the "call back" button displayed underneath an entry in the call log.
          Tapping causes a call to be placed to the caller represented by the call log entry.
          [CHAR LIMIT=30] -->
@@ -694,11 +687,56 @@
          [CHAR LIMIT=NONE] -->
     <string name="toast_entry_removed">Call log entry deleted.</string>
 
+    <!-- String used as a header in the call log above calls which occurred today.
+         [CHAR LIMIT=65] -->
+    <string name="call_log_header_today">Today</string>
+
+    <!-- String used as a header in the call log above calls which occurred yesterday.
+         [CHAR LIMIT=65] -->
+    <string name="call_log_header_yesterday">Yesterday</string>
+
     <!-- String used as a header in the call log above calls which occurred last week.
          [CHAR LIMIT=65] -->
     <string name="call_log_header_last_week">Last week</string>
 
-    <!-- String used as a header in the call log above calls which ocurred more than a week ago.
+    <!-- String used as a header in the call log above calls which occurred more than a week ago.
          [CHAR LIMIT=65] -->
     <string name="call_log_header_other">Other</string>
+
+    <!-- String a header on the call details screen.  Appears above the list calls to or from a
+         particular number.
+         [CHAR LIMIT=65] -->
+    <string name="call_detail_list_header">Call List</string>
+
+    <!-- String describing the "speaker on" button on the playback control used to listen to a
+         voicemail message.  When speaker is on, playback of the voicemail will occur through the
+         phone speaker.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="voicemail_speaker_on">Turn speaker on.</string>
+
+    <!-- String describing the "speaker off" button on the playback control used to listen to a
+         voicemail message.  When speaker is off, playback of the voicemail will occur through the
+         phone earpiece.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="voicemail_speaker_off">Turn speaker off.</string>
+
+    <!-- String describing the "play faster" button in the playback control used to listen to a
+         voicemail message.  Speeds up playback of the voicemail message.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="voicemail_play_faster">Play faster.</string>
+
+    <!-- String describing the "play slower" button in the playback control used to listen to a
+         voicemail message.  Slows down playback of the voicemail message.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="voicemail_play_slower">Play slower.</string>
+
+    <!-- String describing the "play/pause" button in the playback control used to listen to a
+         voicemail message.  Starts playback or pauses ongoing playback.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="voicemail_play_start_pause">Start or pause playback.</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 65b0f30..d6f2023 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -27,8 +27,6 @@
         <!--  Drawable for the back button -->
         <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
         <item name="android:windowContentOverlay">@null</item>
-        <!--  Searchbox Style -->
-        <item name="android:editTextStyle">@style/DialtactsSearchboxStyle</item>
         <item name="android:listViewStyle">@style/ListViewStyle</item>
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
@@ -148,11 +146,6 @@
         <item name="android:overScrollMode">always</item>
     </style>
 
-    <style name="DialtactsSearchboxStyle" parent="@android:style/Widget.EditText">
-        <item name="android:background">@null</item>
-        <item name="android:textColorHint">@color/searchbox_text_color</item>
-    </style>
-
     <style name="DismissButtonStyle">
         <item name="android:paddingLeft">@dimen/dismiss_button_padding_start</item>
         <item name="android:paddingRight">@dimen/dismiss_button_padding_end</item>
diff --git a/src/com/android/dialer/BackScrollManager.java b/src/com/android/dialer/BackScrollManager.java
deleted file mode 100644
index 5728702..0000000
--- a/src/com/android/dialer/BackScrollManager.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer;
-
-import android.view.View;
-import android.widget.AbsListView;
-import android.widget.ListView;
-
-/**
- * Handles scrolling back of a list tied to a header.
- * <p>
- * This is used to implement a header that scrolls up with the content of a list to be partially
- * obscured.
- */
-public class BackScrollManager {
-    /** Defines the header to be scrolled. */
-    public interface ScrollableHeader {
-        /** Sets the offset by which to scroll. */
-        public void setOffset(int offset);
-        /** Gets the maximum offset that should be applied to the header. */
-        public int getMaximumScrollableHeaderOffset();
-    }
-
-    private final ScrollableHeader mHeader;
-    private final ListView mListView;
-
-    private final AbsListView.OnScrollListener mScrollListener =
-            new AbsListView.OnScrollListener() {
-                @Override
-                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
-                        int totalItemCount) {
-                    if (firstVisibleItem != 0) {
-                        // The first item is not shown, the header should be pinned at the top.
-                        mHeader.setOffset(mHeader.getMaximumScrollableHeaderOffset());
-                        return;
-                    }
-
-                    View firstVisibleItemView = view.getChildAt(firstVisibleItem);
-                    if (firstVisibleItemView == null) {
-                        return;
-                    }
-                    // We scroll the header up, but at most pin it to the top of the screen.
-                    int offset = Math.min(
-                            (int) -view.getChildAt(firstVisibleItem).getY(),
-                            mHeader.getMaximumScrollableHeaderOffset());
-                    mHeader.setOffset(offset);
-                }
-
-                @Override
-                public void onScrollStateChanged(AbsListView view, int scrollState) {
-                    // Nothing to do here.
-                }
-            };
-
-    /**
-     * Creates a new instance of a {@link BackScrollManager} that connected the header and the list
-     * view.
-     */
-    public static void bind(ScrollableHeader header, ListView listView) {
-        BackScrollManager backScrollManager = new BackScrollManager(header, listView);
-        backScrollManager.bind();
-    }
-
-    private BackScrollManager(ScrollableHeader header, ListView listView) {
-        mHeader = header;
-        mListView = listView;
-    }
-
-    private void bind() {
-        mListView.setOnScrollListener(mScrollListener);
-        // We disable the scroll bar because it would otherwise be incorrect because of the hidden
-        // header.
-        mListView.setVerticalScrollBarEnabled(false);
-    }
-}
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index decfe9b..695f8aa 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -17,53 +17,37 @@
 package com.android.dialer;
 
 import android.app.Activity;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ActivityNotFoundException;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
-import android.content.Loader;
 import android.content.res.Resources;
 import android.database.Cursor;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.provider.CallLog;
-import android.provider.ContactsContract;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.Intents.Insert;
 import android.provider.VoicemailContract.Voicemails;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
-import android.view.ActionMode;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.ImageButton;
-import android.widget.ImageView;
 import android.widget.ListView;
+import android.widget.QuickContactBadge;
 import android.widget.TextView;
 import android.widget.Toast;
 
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ClipboardUtils;
 import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.util.PhoneNumberHelper;
-import com.android.contacts.common.util.UriUtils;
-import com.android.dialer.BackScrollManager.ScrollableHeader;
 import com.android.dialer.calllog.CallDetailHistoryAdapter;
 import com.android.dialer.calllog.CallTypeHelper;
 import com.android.dialer.calllog.ContactInfo;
@@ -119,12 +103,9 @@
 
     private CallTypeHelper mCallTypeHelper;
     private PhoneNumberDisplayHelper mPhoneNumberHelper;
-    private PhoneCallDetailsHelper mPhoneCallDetailsHelper;
-    private TextView mHeaderTextView;
-    private View mHeaderOverlayView;
-    private ImageView mMainActionView;
-    private ImageButton mMainActionPushLayerView;
-    private ImageView mContactBackgroundView;
+    private QuickContactBadge mQuickContactBadge;
+    private TextView mCallerName;
+    private TextView mCallerNumber;
     private AsyncTaskExecutor mAsyncTaskExecutor;
     private ContactInfoHelper mContactInfoHelper;
 
@@ -154,15 +135,6 @@
     private ProximitySensorManager mProximitySensorManager;
     private final ProximitySensorListener mProximitySensorListener = new ProximitySensorListener();
 
-    /**
-     * The action mode used when the phone number is selected.  This will be non-null only when the
-     * phone number is selected.
-     */
-    private ActionMode mPhoneNumberActionMode;
-
-    private CharSequence mPhoneNumberLabelToCopy;
-    private CharSequence mPhoneNumberToCopy;
-
     /** Listener to changes in the proximity sensor state. */
     private class ProximitySensorListener implements ProximitySensorManager.Listener {
         /** Used to show a blank view and hide the action bar. */
@@ -232,69 +204,6 @@
     static final int GEOCODED_LOCATION_COLUMN_INDEX = 5;
     static final int NUMBER_PRESENTATION_COLUMN_INDEX = 6;
 
-    private final View.OnClickListener mPrimaryActionListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View view) {
-            if (finishPhoneNumerSelectedActionModeIfShown()) {
-                return;
-            }
-            DialerUtils.startActivityWithErrorToast(CallDetailActivity.this,
-                    ((ViewEntry) view.getTag()).primaryIntent);
-        }
-    };
-
-    private final View.OnClickListener mSecondaryActionListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View view) {
-            if (finishPhoneNumerSelectedActionModeIfShown()) {
-                return;
-            }
-            DialerUtils.startActivityWithErrorToast(CallDetailActivity.this,
-                    ((ViewEntry) view.getTag()).secondaryIntent);
-        }
-    };
-
-    private final View.OnLongClickListener mPrimaryLongClickListener =
-            new View.OnLongClickListener() {
-        @Override
-        public boolean onLongClick(View v) {
-            if (finishPhoneNumerSelectedActionModeIfShown()) {
-                return true;
-            }
-            startPhoneNumberSelectedActionMode(v);
-            return true;
-        }
-    };
-
-    private final LoaderCallbacks<Contact> mLoaderCallbacks = new LoaderCallbacks<Contact>() {
-        @Override
-        public void onLoaderReset(Loader<Contact> loader) {
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Contact> loader, Contact data) {
-            final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-            intent.setType(Contacts.CONTENT_ITEM_TYPE);
-            if (data.getDisplayNameSource() >= DisplayNameSources.ORGANIZATION) {
-                intent.putExtra(Insert.NAME, data.getDisplayName());
-            }
-            intent.putExtra(Insert.DATA, data.getContentValues());
-            bindContactPhotoAction(intent, R.drawable.ic_add_contact_holo_dark,
-                    getString(R.string.description_add_contact));
-        }
-
-        @Override
-        public Loader<Contact> onCreateLoader(int id, Bundle args) {
-            final Uri contactUri = args.getParcelable(BUNDLE_CONTACT_URI_EXTRA);
-            if (contactUri == null) {
-                Log.wtf(TAG, "No contact lookup uri provided.");
-            }
-            return new ContactLoader(CallDetailActivity.this, contactUri,
-                    false /* loadGroupMetaData */, false /* loadInvitableAccountTypes */,
-                    false /* postViewNotification */, true /* computeFormattedPhoneNumber */);
-        }
-    };
-
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -307,18 +216,15 @@
 
         mCallTypeHelper = new CallTypeHelper(getResources());
         mPhoneNumberHelper = new PhoneNumberDisplayHelper(mResources);
-        mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(mResources, mCallTypeHelper,
-                new PhoneNumberUtilsWrapper());
         mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
         mAsyncQueryHandler = new CallDetailActivityQueryHandler(this);
-        mHeaderTextView = (TextView) findViewById(R.id.header_text);
-        mHeaderOverlayView = findViewById(R.id.photo_text_bar);
         mStatusMessageView = findViewById(R.id.voicemail_status);
         mStatusMessageText = (TextView) findViewById(R.id.voicemail_status_message);
         mStatusMessageAction = (TextView) findViewById(R.id.voicemail_status_action);
-        mMainActionView = (ImageView) findViewById(R.id.main_action);
-        mMainActionPushLayerView = (ImageButton) findViewById(R.id.main_action_push_layer);
-        mContactBackgroundView = (ImageView) findViewById(R.id.contact_background);
+        mQuickContactBadge = (QuickContactBadge) findViewById(R.id.quick_contact_photo);
+        mQuickContactBadge.setOverlay(null);
+        mCallerName = (TextView) findViewById(R.id.caller_name);
+        mCallerNumber = (TextView) findViewById(R.id.caller_number);
         mDefaultCountryIso = GeoUtil.getCurrentCountryIso(this);
         mContactPhotoManager = ContactPhotoManager.getInstance(this);
         mProximitySensorManager = new ProximitySensorManager(this, mProximitySensorListener);
@@ -398,14 +304,15 @@
      * If both are available, the data on the intent takes precedence.
      */
     private Uri[] getCallLogEntryUris() {
-        Uri uri = getIntent().getData();
+        final Uri uri = getIntent().getData();
         if (uri != null) {
             // If there is a data on the intent, it takes precedence over the extra.
             return new Uri[]{ uri };
         }
-        long[] ids = getIntent().getLongArrayExtra(EXTRA_CALL_LOG_IDS);
-        Uri[] uris = new Uri[ids.length];
-        for (int index = 0; index < ids.length; ++index) {
+        final long[] ids = getIntent().getLongArrayExtra(EXTRA_CALL_LOG_IDS);
+        final int numIds = ids == null ? 0 : ids.length;
+        final Uri[] uris = new Uri[numIds];
+        for (int index = 0; index < numIds; ++index) {
             uris[index] = ContentUris.withAppendedId(Calls.CONTENT_URI_WITH_VOICEMAIL, ids[index]);
         }
         return uris;
@@ -474,9 +381,6 @@
                 final Uri contactUri = firstDetails.contactUri;
                 final Uri photoUri = firstDetails.photoUri;
 
-                // Set the details header, based on the first phone call.
-                mPhoneCallDetailsHelper.setCallDetailsHeader(mHeaderTextView, firstDetails);
-
                 // Cache the details about the phone number.
                 final boolean canPlaceCallsTo =
                     PhoneNumberUtilsWrapper.canPlaceCallsTo(mNumber, numberPresentation);
@@ -484,73 +388,7 @@
                 final boolean isVoicemailNumber = phoneUtils.isVoicemailNumber(mNumber);
                 final boolean isSipNumber = phoneUtils.isSipNumber(mNumber);
 
-                // Let user view contact details if they exist, otherwise add option to create new
-                // contact from this number.
-                final Intent mainActionIntent;
-                final int mainActionIcon;
-                final String mainActionDescription;
-
-                final CharSequence nameOrNumber;
-                if (!TextUtils.isEmpty(firstDetails.name)) {
-                    nameOrNumber = firstDetails.name;
-                } else {
-                    nameOrNumber = firstDetails.number;
-                }
-
-                boolean skipBind = false;
-
-                if (contactUri != null && !UriUtils.isEncodedContactUri(contactUri)) {
-                    mainActionIntent = new Intent(Intent.ACTION_VIEW, contactUri);
-                    // This will launch People's detail contact screen, so we probably want to
-                    // treat it as a separate People task.
-                    mainActionIntent.setFlags(
-                            Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                    mainActionIcon = R.drawable.ic_contacts_holo_dark;
-                    mainActionDescription =
-                            getString(R.string.description_view_contact, nameOrNumber);
-                } else if (UriUtils.isEncodedContactUri(contactUri)) {
-                    final Bundle bundle = new Bundle(1);
-                    bundle.putParcelable(BUNDLE_CONTACT_URI_EXTRA, contactUri);
-                    getLoaderManager().initLoader(LOADER_ID, bundle, mLoaderCallbacks);
-                    mainActionIntent = null;
-                    mainActionIcon = R.drawable.ic_add_contact_holo_dark;
-                    mainActionDescription = getString(R.string.description_add_contact);
-                    skipBind = true;
-                } else if (isVoicemailNumber) {
-                    mainActionIntent = null;
-                    mainActionIcon = 0;
-                    mainActionDescription = null;
-                } else if (isSipNumber) {
-                    // TODO: This item is currently disabled for SIP addresses, because
-                    // the Insert.PHONE extra only works correctly for PSTN numbers.
-                    //
-                    // To fix this for SIP addresses, we need to:
-                    // - define ContactsContract.Intents.Insert.SIP_ADDRESS, and use it here if
-                    //   the current number is a SIP address
-                    // - update the contacts UI code to handle Insert.SIP_ADDRESS by
-                    //   updating the SipAddress field
-                    // and then we can remove the "!isSipNumber" check above.
-                    mainActionIntent = null;
-                    mainActionIcon = 0;
-                    mainActionDescription = null;
-                } else if (canPlaceCallsTo) {
-                    mainActionIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-                    mainActionIntent.setType(Contacts.CONTENT_ITEM_TYPE);
-                    mainActionIntent.putExtra(Insert.PHONE, mNumber);
-                    mainActionIcon = R.drawable.ic_add_contact_holo_dark;
-                    mainActionDescription = getString(R.string.description_add_contact);
-                } else {
-                    // If we cannot call the number, when we probably cannot add it as a contact
-                    // either. This is usually the case of private, unknown, or payphone numbers.
-                    mainActionIntent = null;
-                    mainActionIcon = 0;
-                    mainActionDescription = null;
-                }
-
-                if (!skipBind) {
-                    bindContactPhotoAction(mainActionIntent, mainActionIcon,
-                            mainActionDescription);
-                }
+                final CharSequence callLocationOrType = getNumberTypeOrLocation(firstDetails);
 
                 final CharSequence displayNumber =
                         mPhoneNumberHelper.getDisplayNumber(
@@ -558,39 +396,18 @@
                                 firstDetails.numberPresentation,
                                 firstDetails.formattedNumber);
 
-                // This action allows to call the number that places the call.
-                if (canPlaceCallsTo) {
-                    ViewEntry entry = new ViewEntry(
-                            getString(R.string.menu_callNumber,
-                                    forceLeftToRight(displayNumber)),
-                                    CallUtil.getCallIntent(mNumber),
-                                    getString(R.string.description_call, nameOrNumber));
-
-                    // Only show a label if the number is shown and it is not a SIP address.
-                    if (!TextUtils.isEmpty(firstDetails.name)
-                            && !TextUtils.isEmpty(firstDetails.number)
-                            && !PhoneNumberHelper.isUriNumber(firstDetails.number.toString())) {
-                        entry.label = Phone.getTypeLabel(mResources, firstDetails.numberType,
-                                firstDetails.numberLabel);
-                    }
-
-                    // The secondary action allows to send an SMS to the number that placed the
-                    // call.
-                    if (phoneUtils.canSendSmsTo(mNumber, numberPresentation)) {
-                        entry.setSecondaryAction(
-                                R.drawable.ic_text_holo_light,
-                                new Intent(Intent.ACTION_SENDTO,
-                                           Uri.fromParts("sms", mNumber, null)),
-                                getString(R.string.description_send_text_message, nameOrNumber));
-                    }
-
-                    configureCallButton(entry);
-                    mPhoneNumberToCopy = displayNumber;
-                    mPhoneNumberLabelToCopy = entry.label;
+                if (!TextUtils.isEmpty(firstDetails.name)) {
+                    mCallerName.setText(firstDetails.name);
+                    mCallerNumber.setText(callLocationOrType + " " + displayNumber);
                 } else {
-                    disableCallButton();
-                    mPhoneNumberToCopy = null;
-                    mPhoneNumberLabelToCopy = null;
+                    mCallerName.setText(displayNumber);
+                    if (!TextUtils.isEmpty(callLocationOrType)) {
+                        mCallerNumber.setText(callLocationOrType);
+                        mCallerNumber.setVisibility(View.VISIBLE);
+                    } else {
+                        mCallerNumber.setVisibility(View.GONE);
+                    }
+
                 }
 
                 mHasEditNumberBeforeCallOption =
@@ -602,39 +419,10 @@
                 ListView historyList = (ListView) findViewById(R.id.history);
                 historyList.setAdapter(
                         new CallDetailHistoryAdapter(CallDetailActivity.this, mInflater,
-                                mCallTypeHelper, details, hasVoicemail(), canPlaceCallsTo,
-                                findViewById(R.id.controls)));
-                BackScrollManager.bind(
-                        new ScrollableHeader() {
-                            private View mControls = findViewById(R.id.controls);
-                            private View mPhoto = findViewById(R.id.contact_background_sizer);
-                            private View mHeader = findViewById(R.id.photo_text_bar);
-                        private View mSeparator = findViewById(R.id.separator);
+                                mCallTypeHelper, details));
 
-                            @Override
-                            public void setOffset(int offset) {
-                                mControls.setY(-offset);
-                            }
-
-                            @Override
-                            public int getMaximumScrollableHeaderOffset() {
-                                // We can scroll the photo out, but we should keep the header if
-                                // present.
-                                if (mHeader.getVisibility() == View.VISIBLE) {
-                                    return mPhoto.getHeight() - mHeader.getHeight();
-                                } else {
-                                    // If the header is not present, we should also scroll out the
-                                    // separator line.
-                                    return mPhoto.getHeight() + mSeparator.getHeight();
-                                }
-                            }
-                        },
-                        historyList);
-
-                final String displayNameForDefaultImage = TextUtils.isEmpty(firstDetails.name) ?
-                        displayNumber.toString() : firstDetails.name.toString();
-
-                final String lookupKey = ContactInfoHelper.getLookupKeyFromUri(contactUri);
+                String lookupKey = contactUri == null ? null
+                        : ContactInfoHelper.getLookupKeyFromUri(contactUri);
 
                 final boolean isBusiness = mContactInfoHelper.isBusiness(firstDetails.sourceType);
 
@@ -643,37 +431,39 @@
                         isBusiness ? ContactPhotoManager.TYPE_BUSINESS :
                         ContactPhotoManager.TYPE_DEFAULT;
 
-                loadContactPhotos(photoUri, displayNameForDefaultImage, lookupKey, contactType);
+                String nameForDefaultImage;
+                if (TextUtils.isEmpty(firstDetails.name)) {
+                    nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(firstDetails.number,
+                            firstDetails.numberPresentation,
+                            firstDetails.formattedNumber).toString();
+                } else {
+                    nameForDefaultImage = firstDetails.name.toString();
+                }
+
+                loadContactPhotos(
+                        contactUri, photoUri, nameForDefaultImage, lookupKey, contactType);
                 findViewById(R.id.call_detail).setVisibility(View.VISIBLE);
             }
+
+            /**
+             * Determines the location geocode text for a call, or the phone number type
+             * (if available).
+             *
+             * @param details The call details.
+             * @return The phone number type or location.
+             */
+            private CharSequence getNumberTypeOrLocation(PhoneCallDetails details) {
+                if (!TextUtils.isEmpty(details.name)) {
+                    return Phone.getTypeLabel(mResources, details.numberType,
+                            details.numberLabel);
+                } else {
+                    return details.geocode;
+                }
+            }
         }
         mAsyncTaskExecutor.submit(Tasks.UPDATE_PHONE_CALL_DETAILS, new UpdateContactDetailsTask());
     }
 
-    private void bindContactPhotoAction(final Intent actionIntent, int actionIcon,
-            String actionDescription) {
-        if (actionIntent == null) {
-            mMainActionView.setVisibility(View.INVISIBLE);
-            mMainActionPushLayerView.setVisibility(View.GONE);
-            mHeaderTextView.setVisibility(View.INVISIBLE);
-            mHeaderOverlayView.setVisibility(View.INVISIBLE);
-        } else {
-            mMainActionView.setVisibility(View.VISIBLE);
-            mMainActionView.setImageResource(actionIcon);
-            mMainActionPushLayerView.setVisibility(View.VISIBLE);
-            mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    DialerUtils.startActivityWithErrorToast(CallDetailActivity.this, actionIntent,
-                            R.string.add_contact_not_available);
-                }
-            });
-            mMainActionPushLayerView.setContentDescription(actionDescription);
-            mHeaderTextView.setVisibility(View.VISIBLE);
-            mHeaderOverlayView.setVisibility(View.VISIBLE);
-        }
-    }
-
     /** Return the phone call details for a given call log URI. */
     private PhoneCallDetails getPhoneCallDetailsForUri(Uri callUri) {
         ContentResolver resolver = getContentResolver();
@@ -742,12 +532,18 @@
     }
 
     /** Load the contact photos and places them in the corresponding views. */
-    private void loadContactPhotos(Uri photoUri, String displayName, String lookupKey,
-            int contactType) {
+    private void loadContactPhotos(Uri contactUri, Uri photoUri, String displayName,
+            String lookupKey, int contactType) {
+
         final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey,
-                contactType, false);
-        mContactPhotoManager.loadPhoto(mContactBackgroundView, photoUri,
-                mContactBackgroundView.getWidth(), true, false /* isCircular */, request);
+                contactType, true /* isCircular */);
+
+        mQuickContactBadge.assignContactUri(contactUri);
+        mQuickContactBadge.setContentDescription(
+                mResources.getString(R.string.description_contact_details, displayName));
+
+        mContactPhotoManager.loadDirectoryPhoto(mQuickContactBadge, photoUri,
+                false /* darkTheme */, true /* isCircular */, request);
     }
 
     static final class ViewEntry {
@@ -777,48 +573,6 @@
         }
     }
 
-    /** Disables the call button area, e.g., for private numbers. */
-    private void disableCallButton() {
-        findViewById(R.id.call_and_sms).setVisibility(View.GONE);
-    }
-
-    /** Configures the call button area using the given entry. */
-    private void configureCallButton(ViewEntry entry) {
-        View convertView = findViewById(R.id.call_and_sms);
-        convertView.setVisibility(View.VISIBLE);
-
-        ImageView icon = (ImageView) convertView.findViewById(R.id.call_and_sms_icon);
-        View divider = convertView.findViewById(R.id.call_and_sms_divider);
-        TextView text = (TextView) convertView.findViewById(R.id.call_and_sms_text);
-
-        View mainAction = convertView.findViewById(R.id.call_and_sms_main_action);
-        mainAction.setOnClickListener(mPrimaryActionListener);
-        mainAction.setTag(entry);
-        mainAction.setContentDescription(entry.primaryDescription);
-        mainAction.setOnLongClickListener(mPrimaryLongClickListener);
-
-        if (entry.secondaryIntent != null) {
-            icon.setOnClickListener(mSecondaryActionListener);
-            icon.setImageResource(entry.secondaryIcon);
-            icon.setVisibility(View.VISIBLE);
-            icon.setTag(entry);
-            icon.setContentDescription(entry.secondaryDescription);
-            divider.setVisibility(View.VISIBLE);
-        } else {
-            icon.setVisibility(View.GONE);
-            divider.setVisibility(View.GONE);
-        }
-        text.setText(entry.text);
-
-        TextView label = (TextView) convertView.findViewById(R.id.call_and_sms_label);
-        if (TextUtils.isEmpty(entry.label)) {
-            label.setVisibility(View.GONE);
-        } else {
-            label.setText(entry.label);
-            label.setVisibility(View.VISIBLE);
-        }
-    }
-
     protected void updateVoicemailStatusMessage(Cursor statusCursor) {
         if (statusCursor == null) {
             mStatusMessageView.setVisibility(View.GONE);
@@ -900,7 +654,8 @@
                     public void onPostExecute(Void result) {
                         finish();
                     }
-                });
+                }
+        );
     }
 
     public void onMenuEditNumberBeforeCall(MenuItem menuItem) {
@@ -916,20 +671,13 @@
                         getContentResolver().delete(voicemailUri, null, null);
                         return null;
                     }
+
                     @Override
                     public void onPostExecute(Void result) {
                         finish();
                     }
-                });
-    }
-
-    /** Invoked when the user presses the home button in the action bar. */
-    private void onHomeSelected() {
-        Intent intent = new Intent(Intent.ACTION_VIEW, Calls.CONTENT_URI);
-        // This will open the call log even if the detail view has been opened directly.
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        startActivity(intent);
-        finish();
+                }
+        );
     }
 
     @Override
@@ -950,70 +698,10 @@
         mProximitySensorManager.disable(waitForFarState);
     }
 
-    /**
-     * If the phone number is selected, unselect it and return {@code true}.
-     * Otherwise, just {@code false}.
-     */
-    private boolean finishPhoneNumerSelectedActionModeIfShown() {
-        if (mPhoneNumberActionMode == null) return false;
-        mPhoneNumberActionMode.finish();
-        return true;
-    }
-
-    private void startPhoneNumberSelectedActionMode(View targetView) {
-        mPhoneNumberActionMode = startActionMode(new PhoneNumberActionModeCallback(targetView));
-    }
-
     private void closeSystemDialogs() {
         sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
     }
 
-    private class PhoneNumberActionModeCallback implements ActionMode.Callback {
-        private final View mTargetView;
-        private final Drawable mOriginalViewBackground;
-
-        public PhoneNumberActionModeCallback(View targetView) {
-            mTargetView = targetView;
-
-            // Highlight the phone number view.  Remember the old background, and put a new one.
-            mOriginalViewBackground = mTargetView.getBackground();
-            mTargetView.setBackgroundColor(getResources().getColor(R.color.item_selected));
-        }
-
-        @Override
-        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
-            if (TextUtils.isEmpty(mPhoneNumberToCopy)) return false;
-
-            getMenuInflater().inflate(R.menu.call_details_cab, menu);
-            return true;
-        }
-
-        @Override
-        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
-            return true;
-        }
-
-        @Override
-        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-            switch (item.getItemId()) {
-                case R.id.copy_phone_number:
-                    ClipboardUtils.copyText(CallDetailActivity.this, mPhoneNumberLabelToCopy,
-                            mPhoneNumberToCopy, true);
-                    mode.finish(); // Close the CAB
-                    return true;
-            }
-            return false;
-        }
-
-        @Override
-        public void onDestroyActionMode(ActionMode mode) {
-            mPhoneNumberActionMode = null;
-
-            // Restore the view background.
-            mTargetView.setBackground(mOriginalViewBackground);
-        }
-    }
-
     /** Returns the given text, forced to be left-to-right. */
     private static CharSequence forceLeftToRight(CharSequence text) {
         StringBuilder sb = new StringBuilder();
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index d4ba6a2..ad01b86 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -26,6 +26,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.net.Uri;
@@ -47,6 +48,7 @@
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewTreeObserver;
 import android.view.View.OnDragListener;
 import android.view.View.OnTouchListener;
 import android.view.animation.Animation;
@@ -66,6 +68,7 @@
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.common.util.ViewUtil;
+import com.android.contacts.common.widget.FloatingActionButtonController;
 import com.android.dialer.calllog.CallLogActivity;
 import com.android.dialer.database.DialerDatabaseHelper;
 import com.android.dialer.dialpad.DialpadFragment;
@@ -154,13 +157,30 @@
     private SmartDialSearchFragment mSmartDialSearchFragment;
 
     /**
+     * Animation that slides in.
+     */
+    private Animation mSlideIn;
+
+    /**
+     * Animation that slides out.
+     */
+    private Animation mSlideOut;
+
+    /**
+     * Listener for after slide out animation completes on dialer fragment.
+     */
+    AnimationListenerAdapter mSlideOutListener = new AnimationListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animation animation) {
+            commitDialpadFragmentHide();
+        }
+    };
+
+    /**
      * Fragment containing the speed dial list, recents list, and all contacts list.
      */
     private ListsFragment mListsFragment;
 
-    private View mFloatingActionButtonContainer;
-    private ImageButton mFloatingActionButton;
-
     private boolean mInDialpadSearch;
     private boolean mInRegularSearch;
     private boolean mClearSearchOnPause;
@@ -168,6 +188,11 @@
     private boolean mShowDialpadOnResume;
 
     /**
+     * Whether or not the device is in landscape orientation.
+     */
+    private boolean mIsLandscape;
+
+    /**
      * The position of the currently selected tab in the attached {@link ListsFragment}.
      */
     private int mCurrentTabPosition = 0;
@@ -197,9 +222,16 @@
     private DragDropController mDragDropController;
     private ActionBarController mActionBarController;
 
+    private String mDescriptionDialButtonStr;
+    private String mActionMenuDialpadButtonStr;
+    private ImageButton mFloatingActionButton;
+    private FloatingActionButtonController mFloatingActionButtonController;
+    /**
+     * Additional offset for FAB to be lowered when dialpad is open.
+     */
+    private int mFloatingActionButtonDialpadMarginBottomOffset;
+
     private int mActionBarHeight;
-    private int mFloatingActionButtonMarginBottom;
-    private int mFloatingActionButtonDialpadMarginBottom;
 
     private class OptionsPopupMenu extends PopupMenu {
         public OptionsPopupMenu(Context context, View anchor) {
@@ -312,10 +344,8 @@
 
         final Resources resources = getResources();
         mActionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height);
-        mFloatingActionButtonMarginBottom =
-                resources.getDimensionPixelOffset(R.dimen.floating_action_button_margin_bottom);
-        mFloatingActionButtonDialpadMarginBottom = resources.getDimensionPixelOffset(
-                R.dimen.floating_action_button_dialpad_margin_bottom);
+        mDescriptionDialButtonStr = resources.getString(R.string.description_dial_button);
+        mActionMenuDialpadButtonStr = resources.getString(R.string.action_menu_dialpad_button);
 
         setContentView(R.layout.dialtacts_activity);
         getWindow().setBackgroundDrawable(null);
@@ -347,6 +377,19 @@
             }
         });
 
+        mIsLandscape = getResources().getConfiguration().orientation
+                == Configuration.ORIENTATION_LANDSCAPE;
+        final View floatingActionButtonContainer = findViewById(
+                R.id.floating_action_button_container);
+        mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
+        int floatingActionButtonWidth = resources.getDimensionPixelSize(
+                R.dimen.floating_action_button_width);
+        mFloatingActionButton.setOnClickListener(this);
+        mFloatingActionButtonController = new FloatingActionButtonController(this,
+                floatingActionButtonContainer);
+        mFloatingActionButtonDialpadMarginBottomOffset = resources.getDimensionPixelOffset(
+                R.dimen.floating_action_button_dialpad_margin_bottom_offset);
+
         ImageButton optionsMenuButton =
                 (ImageButton) searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button);
         optionsMenuButton.setOnClickListener(this);
@@ -369,18 +412,34 @@
             mActionBarController.restoreInstanceState(savedInstanceState);
         }
 
+        mSlideIn = AnimationUtils.loadAnimation(this,
+                mIsLandscape ? R.anim.dialpad_slide_in_right : R.anim.dialpad_slide_in_bottom);
+        mSlideOut = AnimationUtils.loadAnimation(this,
+                mIsLandscape ? R.anim.dialpad_slide_out_right : R.anim.dialpad_slide_out_bottom);
+
+        mSlideOut.setAnimationListener(mSlideOutListener);
+
         parentLayout = (RelativeLayout) findViewById(R.id.dialtacts_mainlayout);
         parentLayout.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
         parentLayout.setOnDragListener(new LayoutOnDragListener());
+        floatingActionButtonContainer.getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        final ViewTreeObserver observer = floatingActionButtonContainer
+                                .getViewTreeObserver();
+                        if (!observer.isAlive()) {
+                            return;
+                        }
+                        observer.removeOnGlobalLayoutListener(this);
+                        int screenWidth = parentLayout.getWidth();
+                        mFloatingActionButtonController.setScreenWidth(screenWidth);
+                        updateFloatingActionButtonControllerAlignment(false /* animate */);
+                    }
+                });
 
         setupActivityOverlay();
 
-        mFloatingActionButtonContainer = findViewById(R.id.floating_action_button_container);
-        ViewUtil.setupFloatingActionButton(mFloatingActionButtonContainer, getResources());
-
-        mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
-        mFloatingActionButton.setOnClickListener(this);
-
         mDialerDatabaseHelper = DatabaseHelperManager.getDatabaseHelper(this);
         SmartDialPrefix.initializeNanpSettings(this);
     }
@@ -413,6 +472,7 @@
         mFirstLaunch = false;
         prepareVoiceSearchButton();
         mDialerDatabaseHelper.startSmartDialUpdateThread();
+        updateFloatingActionButtonControllerAlignment(false /* animate */);
     }
 
     @Override
@@ -583,10 +643,11 @@
      * Callback from child DialpadFragment when the dialpad is shown.
      */
     public void onDialpadShown() {
-        updateFloatingActionButton();
+        mFloatingActionButton.setImageResource(R.drawable.fab_ic_call);
+        mFloatingActionButton.setContentDescription(mDescriptionDialButtonStr);
+        updateFloatingActionButtonControllerAlignment(mDialpadFragment.getAnimate());
         if (mDialpadFragment.getAnimate()) {
-            Animation slideIn = AnimationUtils.loadAnimation(this, R.anim.slide_in);
-            mDialpadFragment.getView().startAnimation(slideIn);
+            mDialpadFragment.getView().startAnimation(mSlideIn);
         } else {
             mDialpadFragment.setYFraction(0);
         }
@@ -613,16 +674,12 @@
         mDialpadFragment.setAnimate(animate);
 
         updateSearchFragmentPosition();
-        updateFloatingActionButton();
+        mFloatingActionButton.setImageResource(R.drawable.fab_ic_dial);
+        mFloatingActionButton.setContentDescription(mActionMenuDialpadButtonStr);
+
+        updateFloatingActionButtonControllerAlignment(animate);
         if (animate) {
-            Animation slideOut = AnimationUtils.loadAnimation(this, R.anim.slide_out);
-            slideOut.setAnimationListener(new AnimationListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animation animation) {
-                    commitDialpadFragmentHide();
-                }
-            });
-            mDialpadFragment.getView().startAnimation(slideOut);
+            mDialpadFragment.getView().startAnimation(mSlideOut);
         } else {
             commitDialpadFragmentHide();
         }
@@ -954,7 +1011,7 @@
 
     @Override
     public void setFloatingActionButtonVisible(boolean visible) {
-        mFloatingActionButtonContainer.setVisibility(visible ? View.VISIBLE : View.GONE);
+        mFloatingActionButtonController.setVisible(visible);
     }
 
     private boolean phoneIsInUse() {
@@ -1051,15 +1108,22 @@
 
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-
+        // Only scroll the button when the first tab is selected. The button should scroll from
+        // the middle to right position only on the transition from the first tab to the second
+        // tab.
+        if (position == ListsFragment.TAB_INDEX_SPEED_DIAL && !mIsLandscape) {
+            mFloatingActionButtonController.onPageScrolled(positionOffset);
+        }
     }
 
     @Override
     public void onPageSelected(int position) {
         mCurrentTabPosition = position;
-        // If the dialpad is showing, the floating action button should always be middle aligned.
-        if (!mIsDialpadShown) {
-            alignFloatingActionButtonByTab(mCurrentTabPosition);
+        // Prevents jittery movement when clicking on tabs.
+        if (mCurrentTabPosition != ListsFragment.TAB_INDEX_SPEED_DIAL) {
+            mFloatingActionButtonController.manuallyTranslate(
+                    mFloatingActionButtonController.getTranslationXForAlignment(
+                            FloatingActionButtonController.ALIGN_RIGHT), 0);
         }
     }
 
@@ -1067,56 +1131,6 @@
     public void onPageScrollStateChanged(int state) {
     }
 
-    private void updateFloatingActionButton() {
-        if (mIsDialpadShown) {
-            mFloatingActionButton.setImageResource(R.drawable.fab_ic_call);
-            mFloatingActionButton.setContentDescription(
-                    getResources().getString(R.string.description_dial_button));
-            alignFloatingActionButtonMiddle();
-        } else {
-            mFloatingActionButton.setImageResource(R.drawable.fab_ic_dial);
-            mFloatingActionButton.setContentDescription(
-                    getResources().getString(R.string.action_menu_dialpad_button));
-            alignFloatingActionButtonByTab(mCurrentTabPosition);
-        }
-    }
-
-    private void alignFloatingActionButtonByTab(int position) {
-        if (position == ListsFragment.TAB_INDEX_SPEED_DIAL) {
-            alignFloatingActionButtonMiddle();
-        } else {
-            alignFloatingActionButtonRight();
-        }
-    }
-
-    private void alignFloatingActionButtonRight() {
-        final RelativeLayout.LayoutParams params =
-                (RelativeLayout.LayoutParams) mFloatingActionButtonContainer.getLayoutParams();
-        params.removeRule(RelativeLayout.CENTER_HORIZONTAL);
-        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
-        updateFloatingActionButtonMargin(params);
-        mFloatingActionButtonContainer.setLayoutParams(params);
-    }
-
-    private void alignFloatingActionButtonMiddle() {
-        final RelativeLayout.LayoutParams params =
-                (RelativeLayout.LayoutParams) mFloatingActionButtonContainer.getLayoutParams();
-        params.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
-        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
-        updateFloatingActionButtonMargin(params);
-        mFloatingActionButtonContainer.setLayoutParams(params);
-    }
-
-    private void updateFloatingActionButtonMargin(RelativeLayout.LayoutParams params) {
-        params.setMarginsRelative(
-                params.getMarginStart(),
-                params.topMargin,
-                params.getMarginEnd(),
-                mIsDialpadShown ?
-                        mFloatingActionButtonDialpadMarginBottom :
-                        mFloatingActionButtonMarginBottom);
-    }
-
     private TelephonyManager getTelephonyManager() {
         return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
     }
@@ -1144,4 +1158,29 @@
     public void setActionBarHideOffset(int hideOffset) {
         getActionBar().setHideOffset(hideOffset);
     }
+
+    /**
+     * Updates controller based on currently known information.
+     *
+     * @param animate Whether or not to animate the transition.
+     */
+    private void updateFloatingActionButtonControllerAlignment(boolean animate) {
+        int align;
+        if (mIsDialpadShown) {
+            align = mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_RIGHT
+                    : FloatingActionButtonController.ALIGN_MIDDLE;
+        } else {
+            if (!mIsLandscape) {
+                align = mCurrentTabPosition == ListsFragment.TAB_INDEX_SPEED_DIAL
+                        ? FloatingActionButtonController.ALIGN_MIDDLE
+                            : FloatingActionButtonController.ALIGN_RIGHT;
+            } else {
+                align = FloatingActionButtonController.ALIGN_RIGHT;
+            }
+        }
+        mFloatingActionButtonController.align(align,
+                0 /* offsetX */,
+                mIsDialpadShown ? mFloatingActionButtonDialpadMarginBottomOffset : 0 /* offsetY */,
+                animate);
+    }
 }
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index ab59972..2604bf0 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -28,13 +28,13 @@
 import android.view.View;
 import android.widget.TextView;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.util.PhoneNumberHelper;
 import com.android.dialer.calllog.CallTypeHelper;
 import com.android.dialer.calllog.ContactInfo;
 import com.android.dialer.calllog.PhoneNumberDisplayHelper;
 import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
-import com.google.android.collect.Lists;
+import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
index 8af3b82..67cadb1 100644
--- a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
@@ -41,34 +41,13 @@
     private final LayoutInflater mLayoutInflater;
     private final CallTypeHelper mCallTypeHelper;
     private final PhoneCallDetails[] mPhoneCallDetails;
-    /** Whether the voicemail controls are shown. */
-    private final boolean mShowVoicemail;
-    /** Whether the call and SMS controls are shown. */
-    private final boolean mShowCallAndSms;
-    /** The controls that are shown on top of the history list. */
-    private final View mControls;
-    /** The listener to changes of focus of the header. */
-    private View.OnFocusChangeListener mHeaderFocusChangeListener =
-            new View.OnFocusChangeListener() {
-        @Override
-        public void onFocusChange(View v, boolean hasFocus) {
-            // When the header is focused, focus the controls above it instead.
-            if (hasFocus) {
-                mControls.requestFocus();
-            }
-        }
-    };
 
     public CallDetailHistoryAdapter(Context context, LayoutInflater layoutInflater,
-            CallTypeHelper callTypeHelper, PhoneCallDetails[] phoneCallDetails,
-            boolean showVoicemail, boolean showCallAndSms, View controls) {
+            CallTypeHelper callTypeHelper, PhoneCallDetails[] phoneCallDetails) {
         mContext = context;
         mLayoutInflater = layoutInflater;
         mCallTypeHelper = callTypeHelper;
         mPhoneCallDetails = phoneCallDetails;
-        mShowVoicemail = showVoicemail;
-        mShowCallAndSms = showCallAndSms;
-        mControls = controls;
     }
 
     @Override
@@ -117,14 +96,6 @@
             final View header = convertView == null
                     ? mLayoutInflater.inflate(R.layout.call_detail_history_header, parent, false)
                     : convertView;
-            // Voicemail controls are only shown in the main UI if there is a voicemail.
-            View voicemailContainer = header.findViewById(R.id.header_voicemail_container);
-            voicemailContainer.setVisibility(mShowVoicemail ? View.VISIBLE : View.GONE);
-            // Call and SMS controls are only shown in the main UI if there is a known number.
-            View callAndSmsContainer = header.findViewById(R.id.header_call_and_sms_container);
-            callAndSmsContainer.setVisibility(mShowCallAndSms ? View.VISIBLE : View.GONE);
-            header.setFocusable(true);
-            header.setOnFocusChangeListener(mHeaderFocusChangeListener);
             return header;
         }
 
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 4ef1977..4b1aeab 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -122,12 +122,6 @@
     /** The size of the cache of contact info. */
     private static final int CONTACT_INFO_CACHE_SIZE = 100;
 
-    /** Localized string representing the word "Today". */
-    private final CharSequence mTodayLabel = DateUtils.getTodayString();
-
-    /** Localized string representing the word "Yesterday". */
-    private final CharSequence mYesterdayLabel = DateUtils.getYesterdayString();
-
     /** Constant used to indicate no row is expanded. */
     private static final long NONE_EXPANDED = -1;
 
@@ -1322,9 +1316,9 @@
      */
     private CharSequence getGroupDescription(int group) {
        if (group == CallLogGroupBuilder.DAY_GROUP_TODAY) {
-           return mTodayLabel;
+           return mContext.getResources().getString(R.string.call_log_header_today);
        } else if (group == CallLogGroupBuilder.DAY_GROUP_YESTERDAY) {
-           return mYesterdayLabel;
+           return mContext.getResources().getString(R.string.call_log_header_yesterday);
        } else if (group == CallLogGroupBuilder.DAY_GROUP_LAST_WEEK) {
            return mContext.getResources().getString(R.string.call_log_header_last_week);
        } else {
diff --git a/src/com/android/dialer/calllog/CallLogListItemViews.java b/src/com/android/dialer/calllog/CallLogListItemViews.java
index 762b8ff..ade720f 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViews.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViews.java
@@ -22,7 +22,7 @@
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.PhoneCallDetailsViews;
 import com.android.dialer.R;
 
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index 125ba6f..7c8afee 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -27,7 +27,7 @@
 import android.util.AttributeSet;
 import android.view.View;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.R;
 import com.google.common.collect.Lists;
 
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 9e2b8d0..d9dc735 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -94,11 +94,6 @@
         mHideDialpadDuration = res.getInteger(R.integer.dialpad_slide_out_duration);
 
         final View parentView = getView();
-        parentView.setPaddingRelative(
-                parentView.getPaddingStart(),
-                mActionBarHeight,
-                parentView.getPaddingEnd(),
-                parentView.getPaddingBottom());
 
         final ListView listView = getListView();
 
@@ -175,19 +170,26 @@
      */
     public void updatePosition(boolean animate) {
         // Use negative shadow height instead of 0 to account for the 9-patch's shadow.
-        int translationValue = mActivity.isDialpadShown() ? -mActionBarHeight : -mShadowHeight;
-
+        int startTranslationValue =
+                mActivity.isDialpadShown() ? mActionBarHeight - mShadowHeight: -mShadowHeight;
+        int endTranslationValue = 0;
+        // Prevents ListView from being translated down after a rotation when the ActionBar is up.
+        if (animate || mActivity.isActionBarShowing()) {
+            endTranslationValue =
+                    mActivity.isDialpadShown() ? 0 : mActionBarHeight -mShadowHeight;
+        }
         if (animate) {
             Interpolator interpolator =
                     mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
             int duration =
                     mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
+            getView().setTranslationY(startTranslationValue);
             getView().animate()
-                    .translationY(translationValue)
+                    .translationY(endTranslationValue)
                     .setInterpolator(interpolator)
                     .setDuration(duration);
         } else {
-            getView().setTranslationY(translationValue);
+            getView().setTranslationY(endTranslationValue);
         }
 
         // There is padding which should only be applied when the dialpad is not shown.
diff --git a/src/com/android/dialer/util/AsyncTaskExecutors.java b/src/com/android/dialer/util/AsyncTaskExecutors.java
index 322a435..a59af3e 100644
--- a/src/com/android/dialer/util/AsyncTaskExecutors.java
+++ b/src/com/android/dialer/util/AsyncTaskExecutors.java
@@ -19,7 +19,7 @@
 import android.os.AsyncTask;
 import android.os.Looper;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 import com.google.common.base.Preconditions;
 
 import java.util.concurrent.Executor;
diff --git a/src/com/android/dialer/util/ExpirableCache.java b/src/com/android/dialer/util/ExpirableCache.java
index 94ea6aa..00ebd16 100644
--- a/src/com/android/dialer/util/ExpirableCache.java
+++ b/src/com/android/dialer/util/ExpirableCache.java
@@ -18,7 +18,7 @@
 
 import android.util.LruCache;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
index 826dec0..33ae5c8 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
@@ -423,8 +423,14 @@
             getAudioManager().setSpeakerphoneOn(on);
             if (on) {
                 mPlaybackSpeakerphone.setImageResource(R.drawable.ic_speakerphone_on);
+                // Speaker is now on, tapping button will turn it off.
+                mPlaybackSpeakerphone.setContentDescription(
+                        mApplicationContext.getString(R.string.voicemail_speaker_off));
             } else {
                 mPlaybackSpeakerphone.setImageResource(R.drawable.ic_speakerphone_off);
+                // Speaker is now off, tapping button will turn it on.
+                mPlaybackSpeakerphone.setContentDescription(
+                        mApplicationContext.getString(R.string.voicemail_speaker_on));
             }
         }
 
diff --git a/src/com/android/dialer/widget/OverlappingPaneLayout.java b/src/com/android/dialer/widget/OverlappingPaneLayout.java
index b513cd2..0b11e88 100644
--- a/src/com/android/dialer/widget/OverlappingPaneLayout.java
+++ b/src/com/android/dialer/widget/OverlappingPaneLayout.java
@@ -982,6 +982,9 @@
 
         @Override
         public void onViewReleased(View releasedChild, float xvel, float yvel) {
+            if (releasedChild == null) {
+                return;
+            }
             final LayoutParams lp = (LayoutParams) releasedChild.getLayoutParams();
 
             int top = getPaddingTop() + lp.topMargin;
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index f3e355d..3dcbc4b 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -230,7 +230,9 @@
         mVoiceSearchButtonView.setVisibility(collapsedViewVisibility);
         mOverflowButtonView.setVisibility(collapsedViewVisibility);
         mBackButtonView.setVisibility(expandedViewVisibility);
-        mExpandedSearchBox.setVisibility(expandedViewVisibility);
+        // TODO: Prevents keyboard from jumping up in landscape mode after exiting the
+        // SearchFragment when the query string is empty. More elegant fix?
+        //mExpandedSearchBox.setVisibility(expandedViewVisibility);
         mClearButtonView.setVisibility(expandedViewVisibility);
     }
 
diff --git a/tests/res/layout/fill_call_log_test.xml b/tests/res/layout/fill_call_log_test.xml
index 704b9c6..6de9b91 100644
--- a/tests/res/layout/fill_call_log_test.xml
+++ b/tests/res/layout/fill_call_log_test.xml
@@ -20,7 +20,7 @@
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:gravity="center_horizontal"
+    android:gravity="left"
 >
     <TextView
         android:layout_width="match_parent"
@@ -53,4 +53,134 @@
         android:indeterminate="false"
         android:visibility="gone"
     />
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/add_custom_entry"
+        />
+    <RadioGroup
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <RadioButton
+            android:id="@+id/call_type_incoming"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/call_type_incoming" />
+        <RadioButton
+            android:id="@+id/call_type_missed"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/call_type_missed" />
+        <RadioButton
+            android:id="@+id/call_type_outgoing"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/call_type_outgoing" />
+    </RadioGroup>
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="left"
+        >
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/call_date"
+            />
+        <TextView
+            android:id="@+id/call_date"
+            android:paddingStart="16dp"
+            android:layout_width="120dp"
+            android:layout_height="wrap_content"
+            />
+        <Button
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/edit"
+            android:onClick="showDatePickerDialog" />
+    </LinearLayout>
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="left"
+        >
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/call_time"
+            />
+        <TextView
+            android:id="@+id/call_time"
+            android:paddingStart="16dp"
+            android:layout_width="120dp"
+            android:layout_height="wrap_content"
+            />
+        <Button
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/edit"
+            android:onClick="showTimePickerDialog" />
+    </LinearLayout>
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/call_presentation"
+        />
+    <RadioGroup
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <RadioButton
+            android:id="@+id/presentation_allowed"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/presentation_allowed"
+            android:textSize="9sp" />
+        <RadioButton
+            android:id="@+id/presentation_restricted"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/presentation_restricted"
+            android:textSize="9sp" />
+        <RadioButton
+            android:id="@+id/presentation_unknown"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/presentation_unknown"
+            android:textSize="9sp" />
+        <RadioButton
+            android:id="@+id/presentation_payphone"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/presentation_payphone"
+            android:textSize="9sp" />
+    </RadioGroup>
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="left"
+        >
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/number"
+            />
+        <EditText
+            android:id="@+id/phone_number"
+            android:layout_width="180dp"
+            android:layout_height="wrap_content"
+            android:inputType="phone"
+            />
+    </LinearLayout>
+    <Button
+        android:id="@+id/add_custom"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/addToCallLogButton"
+        android:onClick="addManualEntry"
+        />
 </LinearLayout>
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index ceba5ea..bdeb304 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -37,5 +37,17 @@
     <string name="numberOfCallLogEntries">Number of call log entries to add:</string>
     <string name="addedLogEntriesToast">Added %1$d call log entries.</string>
     <string name="noLogEntriesToast">No entries in the call log yet.  Need at least one record for the template.  Or use random numbers.</string>
-
+    <string name="add_custom_entry">Add custom call log entry:</string>
+    <string name="call_type_incoming">Incoming</string>
+    <string name="call_type_missed">Missed</string>
+    <string name="call_type_outgoing">Outgoing</string>
+    <string name="call_date">Call date</string>
+    <string name="call_time">Call time</string>
+    <string name="edit">Edit</string>
+    <string name="number">Number</string>
+    <string name="call_presentation">Presentation</string>
+    <string name="presentation_allowed">Allowed</string>
+    <string name="presentation_restricted">Restricted</string>
+    <string name="presentation_unknown">Unknown</string>
+    <string name="presentation_payphone">Payphone</string>
 </resources>
diff --git a/tests/src/com/android/dialer/CallDetailActivityTest.java b/tests/src/com/android/dialer/CallDetailActivityTest.java
index 1ad17c4..1e16fe4 100644
--- a/tests/src/com/android/dialer/CallDetailActivityTest.java
+++ b/tests/src/com/android/dialer/CallDetailActivityTest.java
@@ -219,7 +219,6 @@
         mFakeAsyncTaskExecutor.runTask(PREPARE_MEDIA_PLAYER);
         mTestUtils.clickButton(mActivityUnderTest, R.id.playback_speakerphone);
         mTestUtils.clickButton(mActivityUnderTest, R.id.playback_start_stop);
-        mTestUtils.clickButton(mActivityUnderTest, R.id.call_and_sms_main_action);
         Thread.sleep(2000);
         // TODO: Suppressed the test for now, because I'm looking for an easy way to say "the audio
         // is not playing at this point", and I can't find it without doing dirty things.
diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
index 30fd0e2..679335e 100644
--- a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
@@ -112,8 +112,6 @@
         setPhoneCallDetailsWithNumber("14125551212",
                 Calls.PRESENTATION_ALLOWED, "1-412-555-1212");
         assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday"));
-        assertTrue(mViews.callLocationAndDate.getText().toString().contains(
-                "<font color='#33b5e5'><b>Yesterday</b></font>"));
     }
 
     /** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */
diff --git a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
index 8225d13..f3679d4 100644
--- a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
@@ -68,7 +68,7 @@
         mCursor = new MatrixCursor(CallLogQuery._PROJECTION);
         mCursor.moveToFirst();
         // The views into which to store the data.
-        mView = new View(getContext());
+        mView = new CallLogListItemView(getContext());
         mView.setTag(CallLogListItemViews.createForTest(getContext()));
     }
 
diff --git a/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java b/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
index 2c0fe0e..964d8a2 100644
--- a/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
@@ -91,11 +91,6 @@
 
     private Random mRnd;
 
-    // References to the icons bitmaps used to build the list are stored in a
-    // map mIcons. The keys to retrieve the icons are:
-    // Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE and Calls.MISSED_TYPE.
-    private HashMap<Integer, Bitmap> mCallTypeIcons;
-
     // An item in the call list. All the methods performing checks use it.
     private CallLogListItemViews mItem;
     // The list of views representing the data in the DB. View are in
@@ -133,7 +128,6 @@
         mAdapter.stopRequestProcessing();
         mParentView = new FrameLayout(mActivity);
         mCursor = new MatrixCursor(CallLogQuery._PROJECTION);
-        buildIconMap();
     }
 
     /**
@@ -412,17 +406,6 @@
         return d.getBitmap();
     }
 
-    /**
-     * Fetch all the icons we need in tests from the contacts app and store them in a map.
-     */
-    private void buildIconMap() {
-        mCallTypeIcons = new HashMap<Integer, Bitmap>(3);
-
-        mCallTypeIcons.put(Calls.INCOMING_TYPE, getBitmap("ic_call_incoming_holo_dark"));
-        mCallTypeIcons.put(Calls.MISSED_TYPE, getBitmap("ic_call_missed_holo_dark"));
-        mCallTypeIcons.put(Calls.OUTGOING_TYPE, getBitmap("ic_call_outgoing_holo_dark"));
-    }
-
     //
     // HELPERS to build/update the call entries (views) from the DB.
     //
diff --git a/tests/src/com/android/dialer/database/SmartDialPrefixTest.java b/tests/src/com/android/dialer/database/SmartDialPrefixTest.java
index 558be26..9cb842e 100644
--- a/tests/src/com/android/dialer/database/SmartDialPrefixTest.java
+++ b/tests/src/com/android/dialer/database/SmartDialPrefixTest.java
@@ -21,6 +21,8 @@
 import android.test.suitebuilder.annotation.SmallTest;
 import android.test.suitebuilder.annotation.Suppress;
 import android.test.AndroidTestCase;
+import android.text.TextUtils;
+import android.util.Log;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
@@ -37,7 +39,7 @@
 
 /**
  * To run this test, use the command:
- * adb shell am instrument -w -e class com.android.dialer.dialpad.SmartDialPrefixTest /
+ * adb shell am instrument -w -e class com.android.dialer.database.SmartDialPrefixTest /
  * com.android.dialer.tests/android.test.InstrumentationTestRunner
  */
 @SmallTest
@@ -145,6 +147,12 @@
         assertNotNull(contactCursor);
         assertNotNull(nameCursor);
 
+        if (TextUtils.isEmpty(number)) {
+            // Add a dummy number, otherwise DialerDatabaseHelper simply ignores the entire
+            // row if the number is empty
+            number = "0";
+        }
+
         contactCursor.addRow(new Object[]{id, "", "", number, contactId, lookupKey, displayName,
                 photoId, lastTimeUsed, timesUsed, starred, isSuperPrimary, inVisibleGroup,
                 isPrimary});
@@ -292,7 +300,8 @@
         // 6543 doesn't match
         assertFalse(getLooseMatchesFromDb("6543").contains(martinjuniorharry));
 
-        assertEquals(7, mTestHelper.countPrefixTableRows(db));
+        // 7 actual rows, + 1 for the dummy number we added
+        assertEquals(8, mTestHelper.countPrefixTableRows(db));
     }
 
     public void testPutForInitialMatchesForLongTokenNames() {
diff --git a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
index b1b8e2f..3a1682e 100644
--- a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
+++ b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
@@ -17,7 +17,11 @@
 package com.android.dialer.tests.calllog;
 
 import android.app.Activity;
+import android.app.DatePickerDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.LoaderManager;
+import android.app.TimePickerDialog;
 import android.content.ContentProviderClient;
 import android.content.ContentValues;
 import android.content.CursorLoader;
@@ -27,16 +31,21 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.provider.CallLog.Calls;
+import android.text.format.DateFormat;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.CheckBox;
+import android.widget.DatePicker;
 import android.widget.ProgressBar;
+import android.widget.RadioButton;
 import android.widget.TextView;
+import android.widget.TimePicker;
 import android.widget.Toast;
 
 import com.android.dialer.tests.R;
 
+import java.util.Calendar;
 import java.util.Random;
 
 /**
@@ -56,6 +65,22 @@
     private Button mAddButton;
     private ProgressBar mProgressBar;
     private CheckBox mUseRandomNumbers;
+    private RadioButton mCallTypeIncoming;
+    private RadioButton mCallTypeMissed;
+    private RadioButton mCallTypeOutgoing;
+    private RadioButton mPresentationAllowed;
+    private RadioButton mPresentationRestricted;
+    private RadioButton mPresentationUnknown;
+    private RadioButton mPresentationPayphone;
+    private TextView mCallDate;
+    private TextView mCallTime;
+    private TextView mPhoneNumber;
+
+    private int mCallTimeHour;
+    private int mCallTimeMinute;
+    private int mCallDateYear;
+    private int mCallDateMonth;
+    private int mCallDateDay;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -88,6 +113,27 @@
                 mProgressBar.setVisibility(View.VISIBLE);
             }
         });
+
+        mCallTypeIncoming = (RadioButton) findViewById(R.id.call_type_incoming);
+        mCallTypeMissed = (RadioButton) findViewById(R.id.call_type_missed);
+        mCallTypeOutgoing = (RadioButton) findViewById(R.id.call_type_outgoing);
+        mPresentationAllowed = (RadioButton) findViewById(R.id.presentation_allowed);
+        mPresentationPayphone = (RadioButton) findViewById(R.id.presentation_payphone);
+        mPresentationUnknown = (RadioButton) findViewById(R.id.presentation_unknown);
+        mPresentationRestricted = (RadioButton) findViewById(R.id.presentation_restricted);
+        mCallTime = (TextView) findViewById(R.id.call_time);
+        mCallDate = (TextView) findViewById(R.id.call_date);
+        mPhoneNumber = (TextView) findViewById(R.id.phone_number);
+
+        // Use the current time as the default values for the picker
+        final Calendar c = Calendar.getInstance();
+        mCallTimeHour = c.get(Calendar.HOUR_OF_DAY);
+        mCallTimeMinute = c.get(Calendar.MINUTE);
+        mCallDateYear = c.get(Calendar.YEAR);
+        mCallDateMonth = c.get(Calendar.MONTH);
+        mCallDateDay = c.get(Calendar.DAY_OF_MONTH);
+        setDisplayDate();
+        setDisplayTime();
     }
 
     /**
@@ -306,4 +352,122 @@
     public void updateCount(Integer count) {
         mProgressBar.setProgress(count);
     }
+
+    /**
+     * Determines the call type for a manually entered call.
+     *
+     * @return Call type.
+     */
+    private int getManualCallType() {
+        if (mCallTypeIncoming.isChecked()) {
+            return Calls.INCOMING_TYPE;
+        } else if (mCallTypeOutgoing.isChecked()) {
+            return Calls.OUTGOING_TYPE;
+        } else {
+            return Calls.MISSED_TYPE;
+        }
+    }
+
+    /**
+     * Determines the presentation for a manually entered call.
+     *
+     * @return Presentation.
+     */
+    private int getManualPresentation() {
+        if (mPresentationAllowed.isChecked()) {
+            return Calls.PRESENTATION_ALLOWED;
+        } else if (mPresentationPayphone.isChecked()) {
+            return Calls.PRESENTATION_PAYPHONE;
+        } else if (mPresentationRestricted.isChecked()) {
+            return Calls.PRESENTATION_RESTRICTED;
+        } else {
+            return Calls.PRESENTATION_UNKNOWN;
+        }
+    }
+
+    /**
+     * Shows a time picker dialog, storing the results in the time field.
+     */
+    public void showTimePickerDialog(View v) {
+        DialogFragment newFragment = new TimePickerFragment();
+        newFragment.show(getFragmentManager(),"timePicker");
+    }
+
+    /**
+     * Helper class to display time picker and store the hour/minute.
+     */
+    public class TimePickerFragment extends DialogFragment
+            implements TimePickerDialog.OnTimeSetListener {
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            // Create a new instance of TimePickerDialog and return it
+            return new TimePickerDialog(getActivity(), this, mCallTimeHour, mCallTimeMinute,
+                    DateFormat.is24HourFormat(getActivity()));
+        }
+
+        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+            mCallTimeHour = hourOfDay;
+            mCallTimeMinute = minute;
+            setDisplayTime();
+        }
+    }
+
+    /**
+     * Sets the call time TextView to the current selected time.
+     */
+    private void setDisplayTime() {
+        mCallTime.setText(String.format("%02d:%02d", mCallTimeHour, mCallTimeMinute));
+    }
+
+    /**
+     * Sets the call date Textview to the current selected date
+     */
+    private void setDisplayDate() {
+        mCallDate.setText(String.format("%04d-%02d-%02d", mCallDateYear, mCallDateMonth,
+                mCallDateDay));
+    }
+
+    /**
+     * Shows a date picker dialog.
+     */
+    public void showDatePickerDialog(View v) {
+        DialogFragment newFragment = new DatePickerFragment();
+        newFragment.show(getFragmentManager(),"datePicker");
+    }
+
+    /**
+     * Helper class to show a date picker.
+     */
+    public class DatePickerFragment extends DialogFragment
+            implements DatePickerDialog.OnDateSetListener {
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            // Create a new instance of DatePickerDialog and return it
+            return new DatePickerDialog(getActivity(), this, mCallDateYear, mCallDateMonth,
+                    mCallDateDay);
+        }
+
+        public void onDateSet(DatePicker view, int year, int month, int day) {
+            mCallDateYear = year;
+            mCallDateMonth = month;
+            mCallDateDay = day;
+            setDisplayDate();
+        }
+    }
+
+    /**
+     * OnClick handler for the button that adds a manual call log entry to the call log.
+     *
+     * @param v Calling view.
+     */
+    public void addManualEntry(View v) {
+        Calendar dateTime = Calendar.getInstance();
+        dateTime.set(mCallDateYear, mCallDateMonth, mCallDateDay, mCallTimeHour, mCallTimeMinute);
+
+        Calls.addCall(null, this, mPhoneNumber.getText().toString(), getManualPresentation(),
+                getManualCallType(), dateTime.getTimeInMillis(), RNG.nextInt(60 * 60));
+
+    }
 }