am 65d74d19: am b3c6951e: Merge "Fix Dialer tests"

* commit '65d74d1987732bdc36def7b06f83bc5d2a66eb0f':
diff --git a/Android.mk b/Android.mk
index 838ddae..206f004 100644
--- a/Android.mk
+++ b/Android.mk
@@ -27,7 +27,6 @@
     android-support-v13 \
     android-support-v4 \
     android-ex-variablespeed \
-    google-common \
     libphonenumber \
     libgeocoding
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0f3285e..6879f3a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -15,7 +15,8 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.dialer">
+    package="com.android.dialer"
+    coreApp="true">
 
     <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
@@ -67,7 +68,7 @@
              dialpad screen. -->
         <activity android:name=".DialtactsActivity"
             android:label="@string/launcherDialer"
-            android:theme="@style/DialtactsTheme"
+            android:theme="@style/DialtactsActivityTheme"
             android:launchMode="singleTask"
             android:clearTaskOnLaunch="true"
             android:icon="@mipmap/ic_launcher_phone"
@@ -125,7 +126,7 @@
 
         <activity android:name="com.android.dialer.calllog.CallLogActivity"
             android:label="@string/call_log_activity_title"
-            android:theme="@style/DialtactsThemeWithActionBarOverlay"
+            android:theme="@style/DialtactsThemeWithoutActionBarOverlay"
             android:screenOrientation="portrait"
             android:icon="@mipmap/ic_launcher_phone">
             <intent-filter>
@@ -136,12 +137,6 @@
             </intent-filter>
         </activity>
 
-        <activity android:name="com.android.dialer.list.AllContactsActivity"
-            android:label="@string/show_all_contacts_title"
-            android:theme="@style/DialtactsThemeWithActionBarOverlay"
-            android:screenOrientation="portrait">
-        </activity>
-
         <activity android:name="com.android.dialer.CallDetailActivity"
                   android:label="@string/callDetailTitle"
                   android:theme="@style/CallDetailActivityTheme"
diff --git a/res/anim/slide_in.xml b/res/anim/slide_in.xml
index 31502a9..b2ebf7d 100644
--- a/res/anim/slide_in.xml
+++ b/res/anim/slide_in.xml
@@ -13,11 +13,10 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<objectAnimator
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@android:anim/decelerate_interpolator"
+<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:interpolator/fast_out_slow_in"
     android:valueFrom="0.67"
     android:valueTo="0"
     android:valueType="floatType"
     android:propertyName="yFraction"
-    android:duration="200" />
\ No newline at end of file
+    android:duration="666" />
\ No newline at end of file
diff --git a/res/anim/slide_out.xml b/res/anim/slide_out.xml
index e037009..d3b92e3 100644
--- a/res/anim/slide_out.xml
+++ b/res/anim/slide_out.xml
@@ -13,11 +13,10 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<objectAnimator
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@android:anim/decelerate_interpolator"
+<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:interpolator/fast_out_slow_in"
     android:valueFrom="0"
-    android:valueTo="0.67"
+    android:valueTo="0.8"
     android:valueType="floatType"
     android:propertyName="yFraction"
-    android:duration="200" />
\ No newline at end of file
+    android:duration="429" />
\ No newline at end of file
diff --git a/res/color/tab_text_color.xml b/res/color/tab_text_color.xml
new file mode 100644
index 0000000..5ef1fe3
--- /dev/null
+++ b/res/color/tab_text_color.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="@color/actionbar_text_color" android:state_selected="true"/>
+    <item android:color="@color/actionbar_unselected_text_color" />
+</selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/dialer_recent_card_bg.9.png b/res/drawable-hdpi/dialer_recent_card_bg.9.png
deleted file mode 100644
index 2bfdbcb..0000000
--- a/res/drawable-hdpi/dialer_recent_card_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/divider.9.png b/res/drawable-hdpi/divider.9.png
new file mode 100644
index 0000000..88e5d91
--- /dev/null
+++ b/res/drawable-hdpi/divider.9.png
Binary files differ
diff --git a/res/drawable-hdpi/fab_ic_call.png b/res/drawable-hdpi/fab_ic_call.png
new file mode 100644
index 0000000..548a391
--- /dev/null
+++ b/res/drawable-hdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-hdpi/fab_ic_dial.png b/res/drawable-hdpi/fab_ic_dial.png
new file mode 100644
index 0000000..a856632
--- /dev/null
+++ b/res/drawable-hdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-hdpi/fab_teal_background.png b/res/drawable-hdpi/fab_teal_background.png
new file mode 100644
index 0000000..88e8495
--- /dev/null
+++ b/res/drawable-hdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_back_arrow.png b/res/drawable-hdpi/ic_back_arrow.png
new file mode 100644
index 0000000..aad4f36
--- /dev/null
+++ b/res/drawable-hdpi/ic_back_arrow.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_arrow.png b/res/drawable-hdpi/ic_call_arrow.png
new file mode 100644
index 0000000..14a33e3
--- /dev/null
+++ b/res/drawable-hdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_incoming_holo_dark.png b/res/drawable-hdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 8351f48..0000000
--- a/res/drawable-hdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_missed_holo_dark.png b/res/drawable-hdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index 7c17c30..0000000
--- a/res/drawable-hdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_outgoing_holo_dark.png b/res/drawable-hdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 3b9e0f8..0000000
--- a/res/drawable-hdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_info.png b/res/drawable-hdpi/ic_contact_info.png
deleted file mode 100644
index 9c23000..0000000
--- a/res/drawable-hdpi/ic_contact_info.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_contacts_tiles.9.png b/res/drawable-hdpi/ic_contacts_tiles.9.png
new file mode 100644
index 0000000..572fdb8
--- /dev/null
+++ b/res/drawable-hdpi/ic_contacts_tiles.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_call.png b/res/drawable-hdpi/ic_dial_action_call.png
deleted file mode 100644
index ed08eb8..0000000
--- a/res/drawable-hdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_delete.png b/res/drawable-hdpi/ic_dial_action_delete.png
deleted file mode 100644
index 0bf8563..0000000
--- a/res/drawable-hdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_vm.png b/res/drawable-hdpi/ic_dial_action_vm.png
deleted file mode 100644
index f424304..0000000
--- a/res/drawable-hdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_dialpad_dk.png b/res/drawable-hdpi/ic_menu_dialpad_dk.png
deleted file mode 100644
index 55f5477..0000000
--- a/res/drawable-hdpi/ic_menu_dialpad_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_lt.png b/res/drawable-hdpi/ic_menu_overflow_lt.png
index 2561b8c..57db353 100644
--- a/res/drawable-hdpi/ic_menu_overflow_lt.png
+++ b/res/drawable-hdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_overflow_menu.png b/res/drawable-hdpi/ic_overflow_menu.png
new file mode 100644
index 0000000..0170057
--- /dev/null
+++ b/res/drawable-hdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_remove.png b/res/drawable-hdpi/ic_remove.png
new file mode 100644
index 0000000..1ee6adf
--- /dev/null
+++ b/res/drawable-hdpi/ic_remove.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_remove_highlight.png b/res/drawable-hdpi/ic_remove_highlight.png
new file mode 100644
index 0000000..435ee36
--- /dev/null
+++ b/res/drawable-hdpi/ic_remove_highlight.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_star.png b/res/drawable-hdpi/ic_star.png
new file mode 100644
index 0000000..62e1f8a
--- /dev/null
+++ b/res/drawable-hdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_star_marked_as_fav.png b/res/drawable-hdpi/ic_star_marked_as_fav.png
deleted file mode 100644
index 8a138c4..0000000
--- a/res/drawable-hdpi/ic_star_marked_as_fav.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-hdpi/ic_tile_for_recents_and_contact_tile.9.png
new file mode 100644
index 0000000..b5f50de
--- /dev/null
+++ b/res/drawable-hdpi/ic_tile_for_recents_and_contact_tile.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_voice_search.png b/res/drawable-hdpi/ic_voice_search.png
index 6caf4a4..9631d3e 100644
--- a/res/drawable-hdpi/ic_voice_search.png
+++ b/res/drawable-hdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-hdpi/overflow_thumbnail.png b/res/drawable-hdpi/overflow_thumbnail.png
new file mode 100644
index 0000000..57db353
--- /dev/null
+++ b/res/drawable-hdpi/overflow_thumbnail.png
Binary files differ
diff --git a/res/drawable-hdpi/search_bg.9.png b/res/drawable-hdpi/search_bg.9.png
new file mode 100644
index 0000000..81c47be
--- /dev/null
+++ b/res/drawable-hdpi/search_bg.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_dial_action_call.png b/res/drawable-ldrtl-hdpi/ic_dial_action_call.png
deleted file mode 100644
index 34c78ff..0000000
--- a/res/drawable-ldrtl-hdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_dial_action_call.png b/res/drawable-ldrtl-mdpi/ic_dial_action_call.png
deleted file mode 100644
index d1f00f1..0000000
--- a/res/drawable-ldrtl-mdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png b/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png
deleted file mode 100644
index e0d2688..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/dialer_recent_card_bg.9.png b/res/drawable-mdpi/dialer_recent_card_bg.9.png
deleted file mode 100644
index dff6a0b..0000000
--- a/res/drawable-mdpi/dialer_recent_card_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/divider.9.png b/res/drawable-mdpi/divider.9.png
new file mode 100644
index 0000000..88e5d91
--- /dev/null
+++ b/res/drawable-mdpi/divider.9.png
Binary files differ
diff --git a/res/drawable-mdpi/fab_ic_call.png b/res/drawable-mdpi/fab_ic_call.png
new file mode 100644
index 0000000..ff7b345
--- /dev/null
+++ b/res/drawable-mdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-mdpi/fab_ic_dial.png b/res/drawable-mdpi/fab_ic_dial.png
new file mode 100644
index 0000000..3a23245
--- /dev/null
+++ b/res/drawable-mdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-mdpi/fab_teal_background.png b/res/drawable-mdpi/fab_teal_background.png
new file mode 100644
index 0000000..3a37b27
--- /dev/null
+++ b/res/drawable-mdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_back_arrow.png b/res/drawable-mdpi/ic_back_arrow.png
new file mode 100644
index 0000000..56eb887
--- /dev/null
+++ b/res/drawable-mdpi/ic_back_arrow.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_arrow.png b/res/drawable-mdpi/ic_call_arrow.png
new file mode 100644
index 0000000..169cf29
--- /dev/null
+++ b/res/drawable-mdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_incoming_holo_dark.png b/res/drawable-mdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 8dcb350..0000000
--- a/res/drawable-mdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_missed_holo_dark.png b/res/drawable-mdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index af030cf..0000000
--- a/res/drawable-mdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_outgoing_holo_dark.png b/res/drawable-mdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 38a01b7..0000000
--- a/res/drawable-mdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_info.png b/res/drawable-mdpi/ic_contact_info.png
deleted file mode 100644
index 5d35ec5..0000000
--- a/res/drawable-mdpi/ic_contact_info.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_contacts_tiles.9.png b/res/drawable-mdpi/ic_contacts_tiles.9.png
new file mode 100644
index 0000000..343053a
--- /dev/null
+++ b/res/drawable-mdpi/ic_contacts_tiles.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_call.png b/res/drawable-mdpi/ic_dial_action_call.png
deleted file mode 100644
index 59a68f2..0000000
--- a/res/drawable-mdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_delete.png b/res/drawable-mdpi/ic_dial_action_delete.png
deleted file mode 100644
index 98341e9..0000000
--- a/res/drawable-mdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_vm.png b/res/drawable-mdpi/ic_dial_action_vm.png
deleted file mode 100644
index fbcf378..0000000
--- a/res/drawable-mdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_dialpad_lt.png b/res/drawable-mdpi/ic_menu_dialpad_lt.png
new file mode 100644
index 0000000..14674ed
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_dialpad_lt.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_overflow_lt.png b/res/drawable-mdpi/ic_menu_overflow_lt.png
index 7dc68c9..c699374 100644
--- a/res/drawable-mdpi/ic_menu_overflow_lt.png
+++ b/res/drawable-mdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_overflow_menu.png b/res/drawable-mdpi/ic_overflow_menu.png
new file mode 100644
index 0000000..0170057
--- /dev/null
+++ b/res/drawable-mdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_remove.png b/res/drawable-mdpi/ic_remove.png
new file mode 100644
index 0000000..2c134ea
--- /dev/null
+++ b/res/drawable-mdpi/ic_remove.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_remove_highlight.png b/res/drawable-mdpi/ic_remove_highlight.png
new file mode 100644
index 0000000..6a961cb
--- /dev/null
+++ b/res/drawable-mdpi/ic_remove_highlight.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_star.png b/res/drawable-mdpi/ic_star.png
new file mode 100644
index 0000000..d2af0ba
--- /dev/null
+++ b/res/drawable-mdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_star_marked_as_fav.png b/res/drawable-mdpi/ic_star_marked_as_fav.png
deleted file mode 100644
index ee1b5ec..0000000
--- a/res/drawable-mdpi/ic_star_marked_as_fav.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-mdpi/ic_tile_for_recents_and_contact_tile.9.png
new file mode 100644
index 0000000..e43b3ef
--- /dev/null
+++ b/res/drawable-mdpi/ic_tile_for_recents_and_contact_tile.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_voice_search.png b/res/drawable-mdpi/ic_voice_search.png
index e290f92..af58538 100644
--- a/res/drawable-mdpi/ic_voice_search.png
+++ b/res/drawable-mdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-mdpi/overflow_thumbnail.png b/res/drawable-mdpi/overflow_thumbnail.png
new file mode 100644
index 0000000..c699374
--- /dev/null
+++ b/res/drawable-mdpi/overflow_thumbnail.png
Binary files differ
diff --git a/res/drawable-mdpi/search_bg.9.png b/res/drawable-mdpi/search_bg.9.png
new file mode 100644
index 0000000..879aeaa
--- /dev/null
+++ b/res/drawable-mdpi/search_bg.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/dialer_recent_card_bg.9.png b/res/drawable-xhdpi/dialer_recent_card_bg.9.png
deleted file mode 100644
index 05d254d..0000000
--- a/res/drawable-xhdpi/dialer_recent_card_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/divider.9.png b/res/drawable-xhdpi/divider.9.png
new file mode 100644
index 0000000..88e5d91
--- /dev/null
+++ b/res/drawable-xhdpi/divider.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/fab_ic_call.png b/res/drawable-xhdpi/fab_ic_call.png
new file mode 100644
index 0000000..2bff65e
--- /dev/null
+++ b/res/drawable-xhdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-xhdpi/fab_ic_dial.png b/res/drawable-xhdpi/fab_ic_dial.png
new file mode 100644
index 0000000..3694017
--- /dev/null
+++ b/res/drawable-xhdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-xhdpi/fab_teal_background.png b/res/drawable-xhdpi/fab_teal_background.png
new file mode 100644
index 0000000..b2ed8cd
--- /dev/null
+++ b/res/drawable-xhdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_back_arrow.png b/res/drawable-xhdpi/ic_back_arrow.png
new file mode 100644
index 0000000..9d46e3d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_back_arrow.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_arrow.png b/res/drawable-xhdpi/ic_call_arrow.png
new file mode 100644
index 0000000..6f13660
--- /dev/null
+++ b/res/drawable-xhdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_incoming_holo_dark.png b/res/drawable-xhdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 8eb5f3d..0000000
--- a/res/drawable-xhdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_missed_holo_dark.png b/res/drawable-xhdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index 6d09a4e..0000000
--- a/res/drawable-xhdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_outgoing_holo_dark.png b/res/drawable-xhdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 6360504..0000000
--- a/res/drawable-xhdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_info.png b/res/drawable-xhdpi/ic_contact_info.png
deleted file mode 100644
index 88d367b..0000000
--- a/res/drawable-xhdpi/ic_contact_info.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contacts_tiles.9.png b/res/drawable-xhdpi/ic_contacts_tiles.9.png
new file mode 100644
index 0000000..5a56587
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contacts_tiles.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_call.png b/res/drawable-xhdpi/ic_dial_action_call.png
deleted file mode 100644
index 0bd9803..0000000
--- a/res/drawable-xhdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_delete.png b/res/drawable-xhdpi/ic_dial_action_delete.png
deleted file mode 100644
index 989e8b1..0000000
--- a/res/drawable-xhdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_vm.png b/res/drawable-xhdpi/ic_dial_action_vm.png
deleted file mode 100644
index 2919bbd..0000000
--- a/res/drawable-xhdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_dialpad_lt.png b/res/drawable-xhdpi/ic_menu_dialpad_lt.png
new file mode 100644
index 0000000..345cf1a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_dialpad_lt.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_lt.png b/res/drawable-xhdpi/ic_menu_overflow_lt.png
index 95e436c..e538b98 100644
--- a/res/drawable-xhdpi/ic_menu_overflow_lt.png
+++ b/res/drawable-xhdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_overflow_menu.png b/res/drawable-xhdpi/ic_overflow_menu.png
new file mode 100644
index 0000000..7773841
--- /dev/null
+++ b/res/drawable-xhdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_remove.png b/res/drawable-xhdpi/ic_remove.png
new file mode 100644
index 0000000..be81592
--- /dev/null
+++ b/res/drawable-xhdpi/ic_remove.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_remove_highlight.png b/res/drawable-xhdpi/ic_remove_highlight.png
new file mode 100644
index 0000000..57949e3
--- /dev/null
+++ b/res/drawable-xhdpi/ic_remove_highlight.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star.png b/res/drawable-xhdpi/ic_star.png
new file mode 100644
index 0000000..2071f42
--- /dev/null
+++ b/res/drawable-xhdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star_marked_as_fav.png b/res/drawable-xhdpi/ic_star_marked_as_fav.png
deleted file mode 100644
index 372747a..0000000
--- a/res/drawable-xhdpi/ic_star_marked_as_fav.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-xhdpi/ic_tile_for_recents_and_contact_tile.9.png
new file mode 100644
index 0000000..ebfe897
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tile_for_recents_and_contact_tile.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_search.png b/res/drawable-xhdpi/ic_voice_search.png
index 6147581..6e5d811 100644
--- a/res/drawable-xhdpi/ic_voice_search.png
+++ b/res/drawable-xhdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-xhdpi/overflow_thumbnail.png b/res/drawable-xhdpi/overflow_thumbnail.png
new file mode 100644
index 0000000..e538b98
--- /dev/null
+++ b/res/drawable-xhdpi/overflow_thumbnail.png
Binary files differ
diff --git a/res/drawable-xhdpi/search_bg.9.png b/res/drawable-xhdpi/search_bg.9.png
new file mode 100644
index 0000000..9d2d9ae
--- /dev/null
+++ b/res/drawable-xhdpi/search_bg.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/dialer_recent_card_bg.9.png b/res/drawable-xxhdpi/dialer_recent_card_bg.9.png
deleted file mode 100644
index 87d95f0..0000000
--- a/res/drawable-xxhdpi/dialer_recent_card_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/divider.9.png b/res/drawable-xxhdpi/divider.9.png
new file mode 100644
index 0000000..88e5d91
--- /dev/null
+++ b/res/drawable-xxhdpi/divider.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_ic_call.png b/res/drawable-xxhdpi/fab_ic_call.png
new file mode 100644
index 0000000..a756b95
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_ic_dial.png b/res/drawable-xxhdpi/fab_ic_dial.png
new file mode 100644
index 0000000..8f1f21e
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_teal_background.png b/res/drawable-xxhdpi/fab_teal_background.png
new file mode 100644
index 0000000..6bb4d20
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_back_arrow.png b/res/drawable-xxhdpi/ic_back_arrow.png
new file mode 100644
index 0000000..66b6e35
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_back_arrow.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_arrow.png b/res/drawable-xxhdpi/ic_call_arrow.png
new file mode 100644
index 0000000..0364ee0
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_incoming_holo_dark.png b/res/drawable-xxhdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 1276917..0000000
--- a/res/drawable-xxhdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_missed_holo_dark.png b/res/drawable-xxhdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index 8919fd3..0000000
--- a/res/drawable-xxhdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_outgoing_holo_dark.png b/res/drawable-xxhdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 192bbf6..0000000
--- a/res/drawable-xxhdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_contact_info.png b/res/drawable-xxhdpi/ic_contact_info.png
deleted file mode 100644
index e5d2939..0000000
--- a/res/drawable-xxhdpi/ic_contact_info.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_contacts_tiles.9.png b/res/drawable-xxhdpi/ic_contacts_tiles.9.png
new file mode 100644
index 0000000..4e6872d
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_contacts_tiles.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dial_action_call.png b/res/drawable-xxhdpi/ic_dial_action_call.png
deleted file mode 100644
index 12a5c07..0000000
--- a/res/drawable-xxhdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dial_action_delete.png b/res/drawable-xxhdpi/ic_dial_action_delete.png
deleted file mode 100644
index a7ff1b1..0000000
--- a/res/drawable-xxhdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dial_action_vm.png b/res/drawable-xxhdpi/ic_dial_action_vm.png
deleted file mode 100644
index acac8d8..0000000
--- a/res/drawable-xxhdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_dialpad_lt.png b/res/drawable-xxhdpi/ic_menu_dialpad_lt.png
new file mode 100644
index 0000000..45c1ab2
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_menu_dialpad_lt.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_overflow_lt.png b/res/drawable-xxhdpi/ic_menu_overflow_lt.png
index b9f0c3d..7f3f733 100644
--- a/res/drawable-xxhdpi/ic_menu_overflow_lt.png
+++ b/res/drawable-xxhdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_overflow_menu.png b/res/drawable-xxhdpi/ic_overflow_menu.png
new file mode 100644
index 0000000..7773841
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_remove.png b/res/drawable-xxhdpi/ic_remove.png
new file mode 100644
index 0000000..2722f23
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_remove.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_remove_highlight.png b/res/drawable-xxhdpi/ic_remove_highlight.png
new file mode 100644
index 0000000..23ee8f6
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_remove_highlight.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star.png b/res/drawable-xxhdpi/ic_star.png
new file mode 100644
index 0000000..f3c8304
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star_marked_as_fav.png b/res/drawable-xxhdpi/ic_star_marked_as_fav.png
deleted file mode 100644
index 3eeff4c..0000000
--- a/res/drawable-xxhdpi/ic_star_marked_as_fav.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-xxhdpi/ic_tile_for_recents_and_contact_tile.9.png
new file mode 100644
index 0000000..0a99cdb
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_tile_for_recents_and_contact_tile.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_voice_search.png b/res/drawable-xxhdpi/ic_voice_search.png
index 4c17d2b..4e72f69 100644
--- a/res/drawable-xxhdpi/ic_voice_search.png
+++ b/res/drawable-xxhdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-xxhdpi/overflow_thumbnail.png b/res/drawable-xxhdpi/overflow_thumbnail.png
new file mode 100644
index 0000000..7f3f733
--- /dev/null
+++ b/res/drawable-xxhdpi/overflow_thumbnail.png
Binary files differ
diff --git a/res/drawable-xxhdpi/search_bg.9.png b/res/drawable-xxhdpi/search_bg.9.png
new file mode 100644
index 0000000..2f4f4b6
--- /dev/null
+++ b/res/drawable-xxhdpi/search_bg.9.png
Binary files differ
diff --git a/res/drawable/action_bar_tab.xml b/res/drawable/action_bar_tab.xml
index 35df053..8a3ea7a 100644
--- a/res/drawable/action_bar_tab.xml
+++ b/res/drawable/action_bar_tab.xml
@@ -14,13 +14,25 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:drawable="@drawable/tab_selected_pressed" android:state_pressed="true" android:state_selected="true"/>
-    <item android:drawable="@drawable/tab_selected_focused" android:state_focused="true" android:state_selected="true"/>
-    <item android:drawable="@drawable/tab_selected" android:state_selected="true"/>
-    <item android:drawable="@drawable/tab_unselected_pressed" android:state_pressed="true"/>
-    <item android:drawable="@drawable/tab_unselected_focused" android:state_focused="true"/>
-
-</selector>
\ No newline at end of file
+<touch-feedback  xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="@color/tab_pressed_color">
+    <item>
+        <selector>
+            <item android:drawable="@drawable/tab_selected"
+                    android:state_focused="false"
+                    android:state_pressed="false"
+                    android:state_selected="true" />
+            <item android:drawable="@drawable/tab_selected_focused"
+                    android:state_focused="true"
+                    android:state_pressed="false"
+                    android:state_selected="true" />
+            <item android:drawable="@drawable/tab_unselected_focused"
+                    android:state_focused="true"
+                    android:state_pressed="false"
+                    android:state_selected="false" />
+            <item android:drawable="@drawable/tab_selected"
+                    android:state_selected="true" />
+            <item android:drawable="@color/tab_default_color" />
+        </selector>
+    </item>
+</touch-feedback>
\ No newline at end of file
diff --git a/res/drawable/action_button_background.xml b/res/drawable/action_button_background.xml
new file mode 100644
index 0000000..895bda1
--- /dev/null
+++ b/res/drawable/action_button_background.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+                android:tint="?android:attr/colorButtonPressed"
+                android:pinned="true">
+    <!-- Transparent background constrains the touch feedback ripple to the button, but also allows
+         touch feedback ripples in the parent to show under the button. -->
+    <item>
+        <shape android:shape="rectangle"  >
+            <solid android:color="@android:color/transparent" />
+        </shape>
+    </item>
+</touch-feedback>
diff --git a/res/drawable/background_all_contacts.xml b/res/drawable/background_all_contacts.xml
new file mode 100644
index 0000000..c14886a
--- /dev/null
+++ b/res/drawable/background_all_contacts.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="false">
+        <shape android:shape="rectangle" >
+            <solid android:color="@color/all_contacts_button_color" />
+        </shape>
+    </item>
+
+    <item android:state_pressed="true">
+        <shape android:shape="rectangle" >
+            <solid android:color="@color/all_contacts_button_pressed_color" />
+        </shape>
+    </item>
+</selector>
\ No newline at end of file
diff --git a/res/drawable/btn_call.xml b/res/drawable/btn_call.xml
deleted file mode 100644
index ae2f6c0..0000000
--- a/res/drawable/btn_call.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
--->
-
-<!-- Background resource for call button in the various dialpads.
-     Almost a copy from framework's item_background_holo_dark.xml, but has different pressed effect
-  -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_window_focused="false" android:drawable="@android:color/transparent" />
-
-    <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
-    <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
-    <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/list_selector_disabled_holo_dark" />
-    <item android:state_focused="true"                                                             android:drawable="@drawable/list_focused_holo" />
-    <item                                                                                          android:drawable="@android:color/transparent" />
-</selector>
diff --git a/res/drawable/call_history_actionbar_background.xml b/res/drawable/call_history_actionbar_background.xml
deleted file mode 100644
index f781f27..0000000
--- a/res/drawable/call_history_actionbar_background.xml
+++ /dev/null
@@ -1,27 +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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-    <item>
-        <shape android:shape="rectangle">
-            <solid android:color="#c6c6c6" />
-        </shape>
-    </item>
-    <item android:bottom="1dip">
-        <shape android:shape="rectangle">
-            <solid android:color="@color/actionbar_background_color" />
-        </shape>
-    </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_unselected_pressed.xml b/res/drawable/call_log_background.xml
similarity index 69%
rename from res/drawable/tab_unselected_pressed.xml
rename to res/drawable/call_log_background.xml
index 2362b65..92299f0 100644
--- a/res/drawable/tab_unselected_pressed.xml
+++ b/res/drawable/call_log_background.xml
@@ -1,6 +1,6 @@
 <?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.
@@ -14,13 +14,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#4dffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+                android:tint="?android:attr/colorButtonPressed"
+                android:pinned="false" />
diff --git a/res/drawable/tab_unselected_pressed.xml b/res/drawable/floating_action_button.xml
similarity index 68%
copy from res/drawable/tab_unselected_pressed.xml
copy to res/drawable/floating_action_button.xml
index 2362b65..ea95490 100644
--- a/res/drawable/tab_unselected_pressed.xml
+++ b/res/drawable/floating_action_button.xml
@@ -1,6 +1,6 @@
 <?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.
@@ -15,12 +15,8 @@
      limitations under the License.
 -->
 
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#4dffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="@color/dialer_accent_color"
+    android:pinned="true">
+    <item android:drawable="@drawable/fab_teal_background" />
+</touch-feedback>
diff --git a/res/drawable/ic_phone_plus_wifi.png b/res/drawable/ic_phone_plus_wifi.png
deleted file mode 100644
index 5cd75ab..0000000
--- a/res/drawable/ic_phone_plus_wifi.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_wifi_call.png b/res/drawable/ic_wifi_call.png
deleted file mode 100644
index 886cbd7..0000000
--- a/res/drawable/ic_wifi_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/tab_unselected_pressed.xml b/res/drawable/shadow_fade_up.xml
similarity index 66%
copy from res/drawable/tab_unselected_pressed.xml
copy to res/drawable/shadow_fade_up.xml
index 2362b65..e961c86 100644
--- a/res/drawable/tab_unselected_pressed.xml
+++ b/res/drawable/shadow_fade_up.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 The Android Open Source Project
+<!-- Copyright (C) 2012 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
@@ -15,12 +14,11 @@
      limitations under the License.
 -->
 
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#4dffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ 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="#1a000000"
+        android:endColor="@null"
+        android:angle="90"/>
+</shape>
\ No newline at end of file
diff --git a/res/drawable/tab_selected.xml b/res/drawable/tab_selected.xml
deleted file mode 100644
index 25d76fc..0000000
--- a/res/drawable/tab_selected.xml
+++ /dev/null
@@ -1,31 +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.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#7d7d7d" />
-        </shape>
-    </item>
-    <item android:bottom="6dp">
-        <shape android:shape="rectangle" >
-            <solid android:color="@color/actionbar_background_color" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_selected_focused.xml b/res/drawable/tab_selected_focused.xml
deleted file mode 100644
index 8efd7b3..0000000
--- a/res/drawable/tab_selected_focused.xml
+++ /dev/null
@@ -1,45 +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.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#7d7d7d" />
-        </shape>
-    </item>
-    <item android:bottom="6dp">
-        <shape android:shape="rectangle" >
-            <solid android:color="@color/actionbar_background_color" />
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#27ffffff" />
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#00000000" />
-
-            <stroke
-                android:width="2dp"
-                android:color="#27ffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_selected_pressed.xml b/res/drawable/tab_selected_pressed.xml
deleted file mode 100644
index a38344e..0000000
--- a/res/drawable/tab_selected_pressed.xml
+++ /dev/null
@@ -1,36 +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.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#7d7d7d" />
-        </shape>
-    </item>
-    <item android:bottom="6dp">
-        <shape android:shape="rectangle" >
-            <solid android:color="@color/actionbar_background_color" />
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#4dffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_unselected_focused.xml b/res/drawable/tab_unselected_focused.xml
deleted file mode 100644
index 2aceb63..0000000
--- a/res/drawable/tab_unselected_focused.xml
+++ /dev/null
@@ -1,35 +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.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#27ffffff" />
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#00000000" />
-
-            <stroke
-                android:width="2dp"
-                android:color="#27ffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
diff --git a/res/layout/all_contacts_activity.xml b/res/layout/all_contacts_activity.xml
index a913027..50cba1e 100644
--- a/res/layout/all_contacts_activity.xml
+++ b/res/layout/all_contacts_activity.xml
@@ -17,7 +17,6 @@
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:layout_marginTop="?android:attr/actionBarSize"
     android:id="@+id/all_contacts_frame">
     <fragment android:name="com.android.dialer.list.AllContactsFragment"
               android:id="@+id/all_contacts_fragment"
diff --git a/res/layout/call_log_activity.xml b/res/layout/call_log_activity.xml
index f9806e8..dfdf210 100644
--- a/res/layout/call_log_activity.xml
+++ b/res/layout/call_log_activity.xml
@@ -14,14 +14,22 @@
      limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:layout_marginTop="?android:attr/actionBarSize"
-    android:id="@+id/calllog_frame">
+    android:id="@+id/calllog_frame"
+    android:orientation="vertical">
+    <com.android.dialer.list.ViewPagerTabs
+        android:id="@+id/viewpager_header"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/tab_height"
+        android:textAllCaps="true"
+        android:orientation="horizontal"
+        android:layout_gravity="top"
+        style="@style/DialtactsActionBarTabTextStyle" />
     <android.support.v4.view.ViewPager
         android:id="@+id/call_log_pager"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginTop="?android:attr/actionBarSize" />
-</FrameLayout>
+        android:layout_height="0dp"
+        android:layout_weight="1"/>
+</LinearLayout>
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index e58e160..b4714a3 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -20,7 +20,8 @@
     android:layout_height="match_parent"
     android:orientation="vertical"
     android:divider="?android:attr/dividerHorizontal"
-    android:showDividers="end">
+    android:showDividers="end"
+    android:background="@color/background_dialer_list_items">
 
     <FrameLayout
         android:id="@+id/voicemail_status"
@@ -66,7 +67,7 @@
             android:fadingEdge="none"
             android:scrollbarStyle="outsideOverlay"
             android:divider="@null"
-        />
+            android:nestedScrollingEnabled="true" />
         <TextView android:id="@android:id/empty"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 1d368f6..6068bd8 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -21,7 +21,6 @@
     android:layout_height="wrap_content"
     android:id="@+id/call_log_list_item"
     android:orientation="vertical"
-    android:background="@drawable/bottom_border_background"
 >
     <!--
         This layout may represent either a call log item or one of the
@@ -34,19 +33,29 @@
         @id/call_log_item gone
     -->
 
+    <!-- Linear layout to separate the primary area containing the contact badge and caller
+         information and the secondary action (call details / play voicemail). -->
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:baselineAligned="false"
+        android:orientation="vertical"
+        android:gravity="center_vertical"
+        >
+
+        <!-- Primary area containing the contact badge and caller information -->
         <LinearLayout
             android:id="@+id/primary_action_view"
+            android:background="@drawable/call_log_background"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
             android:padding="@dimen/call_log_outer_margin"
             android:orientation="horizontal"
             android:gravity="center_vertical"
-            android:background="?android:attr/selectableItemBackground"
             android:focusable="true"
-            android:nextFocusRight="@+id/secondary_action_icon"
+            android:nextFocusRight="@+id/call_back_action"
             android:nextFocusLeft="@+id/quick_contact_photo"
-        >
+            >
             <QuickContactBadge
                 android:id="@+id/quick_contact_photo"
                 android:layout_width="@dimen/call_log_list_contact_photo_size"
@@ -54,7 +63,7 @@
                 android:nextFocusRight="@id/primary_action_view"
                 android:layout_alignParentStart="true"
                 android:focusable="true"
-            />
+                />
             <LinearLayout
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
@@ -62,38 +71,33 @@
                 android:orientation="vertical"
                 android:gravity="center_vertical"
                 android:layout_marginStart="@dimen/call_log_inner_margin"
-            >
+                >
                 <TextView
                     android:id="@+id/name"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginEnd="@dimen/call_log_icon_margin"
                     android:textColor="?attr/call_log_primary_text_color"
-                    android:textSize="16sp"
+                    android:textSize="@dimen/call_log_primary_text_size"
                     android:singleLine="true"
-                />
-                <LinearLayout
+                    />
+                <TextView
+                    android:id="@+id/voicemail_transcription"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:orientation="horizontal"
-                >
-                    <TextView
-                        android:id="@+id/label"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginEnd="@dimen/call_log_icon_margin"
-                        android:textColor="?attr/call_log_secondary_text_color"
-                        android:textSize="12sp"
-                        android:singleLine="true"
-                        android:ellipsize="marquee"
-                        />
-                    </LinearLayout>
+                    android:layout_marginEnd="@dimen/call_log_icon_margin"
+                    android:textColor="?attr/call_log_secondary_text_color"
+                    android:textSize="@dimen/call_log_secondary_text_size"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:visibility="gone"
+                    />
                 <LinearLayout
                     android:id="@+id/call_type"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:orientation="horizontal"
-                >
+                    >
                     <view
                         class="com.android.dialer.calllog.CallTypeIconsView"
                         android:id="@+id/call_type_icons"
@@ -101,33 +105,28 @@
                         android:layout_height="wrap_content"
                         android:layout_marginEnd="@dimen/call_log_icon_margin"
                         android:layout_gravity="center_vertical"
-                    />
+                        />
                     <TextView
-                        android:id="@+id/call_count_and_date"
+                        android:id="@+id/call_location_and_date"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginEnd="@dimen/call_log_icon_margin"
                         android:layout_gravity="center_vertical"
                         android:textColor="?attr/call_log_secondary_text_color"
-                        android:textSize="12sp"
+                        android:textSize="@dimen/call_log_secondary_text_size"
                         android:singleLine="true"
-                    />
+                        />
                 </LinearLayout>
             </LinearLayout>
-            <ImageButton
-                android:id="@+id/secondary_action_icon"
-                android:layout_width="@dimen/call_log_call_action_width"
-                android:layout_height="match_parent"
-                android:paddingStart="@dimen/call_log_inner_margin"
-                android:paddingTop="@dimen/call_log_inner_margin"
-                android:paddingBottom="@dimen/call_log_inner_margin"
-                android:paddingEnd="@dimen/call_log_inner_margin"
-                android:scaleType="center"
-                android:background="?android:attr/selectableItemBackground"
-                android:nextFocusLeft="@id/primary_action_view"
-            />
         </LinearLayout>
 
+        <!-- Viewstub with additional expandable actions for a call log entry -->
+        <ViewStub android:id="@+id/call_log_entry_actions_stub"
+                  android:inflatedId="@+id/call_log_entry_actions"
+                  android:layout="@layout/call_log_list_item_actions"
+                  android:layout_width="match_parent"
+                  android:layout_height="wrap_content"/>
+    </LinearLayout>
     <TextView
         android:id="@+id/call_log_header"
         style="@style/ContactListSeparatorTextViewStyle"
diff --git a/res/layout/call_log_list_item_actions.xml b/res/layout/call_log_list_item_actions.xml
new file mode 100644
index 0000000..eb4aea2
--- /dev/null
+++ b/res/layout/call_log_list_item_actions.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+             android:layout_width="match_parent"
+             android:layout_height="wrap_content"
+             android:id="@+id/call_log_action_container">
+    <LinearLayout
+        android:id="@+id/call_log_entry_actions_ll"
+        android:gravity="center_vertical"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/call_log_action_height"
+        android:orientation="horizontal"
+        android:paddingLeft="@dimen/call_log_actions_left_padding"
+        android:visibility="visible"
+        android:importantForAccessibility="1"
+        >
+        <TextView
+            android:id="@+id/call_back_action"
+            android:background="@drawable/action_button_background"
+            android:fontFamily="sans-serif-medium"
+            android:gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="@dimen/call_log_action_horizontal_padding"
+            android:paddingRight="@dimen/call_log_action_horizontal_padding"
+            android:text="@string/call_log_action_call_back"
+            android:textColor="@color/call_log_action_text"
+            android:textSize="@dimen/call_log_secondary_text_size"
+            android:nextFocusLeft="@+id/primary_action_view"
+            android:nextFocusRight="@+id/voicemail_action"
+            android:focusable="true"/>
+        <TextView
+            android:id="@+id/voicemail_action"
+            android:background="@drawable/action_button_background"
+            android:fontFamily="sans-serif-medium"
+            android:gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="@dimen/call_log_action_horizontal_padding"
+            android:paddingRight="@dimen/call_log_action_horizontal_padding"
+            android:text="@string/call_log_action_voicemail"
+            android:textColor="@color/call_log_action_text"
+            android:textSize="@dimen/call_log_secondary_text_size"
+            android:nextFocusLeft="@+id/call_back_action"
+            android:nextFocusRight="@+id/delete_action"
+            android:focusable="true"/>
+        <TextView
+            android:id="@+id/delete_action"
+            android:background="@drawable/action_button_background"
+            android:fontFamily="sans-serif-medium"
+            android:gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:paddingLeft="@dimen/call_log_action_horizontal_padding"
+            android:paddingRight="@dimen/call_log_action_horizontal_padding"
+            android:text="@string/call_log_action_delete"
+            android:textColor="@color/call_log_action_delete_text"
+            android:textSize="@dimen/call_log_secondary_text_size"
+            android:nextFocusLeft="@+id/voicemail_action"
+            android:nextFocusRight="@+id/primary_action_view"
+            android:focusable="true"/>
+    </LinearLayout>
+</FrameLayout>
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
deleted file mode 100644
index 4fc3e83..0000000
--- a/res/layout/dialpad.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 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.
--->
-
-<!-- Dialpad in the Phone app. -->
-<TableLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/dialpad"
-    android:layout_width="match_parent"
-    android:layout_height="0px"
-    android:layout_weight="@integer/dialpad_layout_weight_dialpad"
-    android:layout_gravity="center_horizontal"
-    android:layout_marginTop="@dimen/dialpad_vertical_margin"
-    android:paddingStart="5dip"
-    android:paddingEnd="5dip"
-    android:paddingBottom="10dip"
-    android:stretchColumns="0,1,2"
-    android:layoutDirection="ltr" >
-
-    <TableRow
-        android:layout_height="0px"
-        android:layout_weight="1">
-        <com.android.dialer.dialpad.DialpadKeyButton
-            xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/one"
-            style="@style/DialtactsDialpadButtonStyle"
-            android:clickable="true"
-            android:focusable="true" >
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center" >
-                <TextView
-                    android:id="@+id/dialpad_key_number"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:textColor="@color/dialpad_primary_text_color"
-                    android:textSize="@dimen/dialpad_key_numbers_size"
-                    android:fontFamily="sans-serif-light"/>
-                <ImageView
-                    android:id="@+id/dialpad_key_voicemail"
-                    android:layout_width="@dimen/dialpad_key_letters_width"
-                    android:layout_height="wrap_content"
-                    android:src="@drawable/ic_dial_action_vm"
-                    android:paddingLeft="11dp"
-                    android:scaleType="fitStart"
-                    android:baselineAlignBottom="true" />
-            </LinearLayout>
-        </com.android.dialer.dialpad.DialpadKeyButton>
-        <include layout="@layout/dialpad_key" android:id="@+id/two"/>
-        <include layout="@layout/dialpad_key" android:id="@+id/three"/>
-    </TableRow>
-
-    <TableRow
-        android:layout_height="0px"
-        android:layout_weight="1">
-        <include layout="@layout/dialpad_key" android:id="@+id/four"/>
-        <include layout="@layout/dialpad_key" android:id="@+id/five"/>
-        <include layout="@layout/dialpad_key" android:id="@+id/six"/>
-    </TableRow>
-
-    <TableRow
-        android:layout_height="0px"
-        android:layout_weight="1">
-        <include layout="@layout/dialpad_key" android:id="@+id/seven"/>
-        <include layout="@layout/dialpad_key" android:id="@+id/eight"/>
-        <include layout="@layout/dialpad_key" android:id="@+id/nine"/>
-    </TableRow>
-
-    <TableRow
-        android:layout_height="0px"
-        android:layout_weight="1">
-        <com.android.dialer.dialpad.DialpadKeyButton
-            xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/star"
-            style="@style/DialtactsDialpadButtonStyle"
-            android:clickable="true"
-            android:focusable="true" >
-            <TextView
-                android:id="@id/dialpad_key_number"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textColor="@color/dialpad_secondary_text_color"
-                android:textSize="@dimen/dialpad_key_special_characters_size"
-                android:fontFamily="sans-serif-light"
-                android:paddingRight="@dimen/dialpad_key_letters_width"
-                android:layout_gravity="center" />
-        </com.android.dialer.dialpad.DialpadKeyButton>
-        <include layout="@layout/dialpad_key" android:id="@+id/zero"/>
-        <com.android.dialer.dialpad.DialpadKeyButton
-            xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/pound"
-            style="@style/DialtactsDialpadButtonStyle"
-            android:clickable="true"
-            android:focusable="true" >
-            <TextView
-                android:id="@id/dialpad_key_number"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textColor="@color/dialpad_secondary_text_color"
-                android:textSize="@dimen/dialpad_key_special_characters_size"
-                android:fontFamily="sans-serif-light"
-                android:paddingRight="@dimen/dialpad_key_letters_width"
-                android:layout_gravity="center" />
-        </com.android.dialer.dialpad.DialpadKeyButton>
-    </TableRow>
-</TableLayout>
diff --git a/res/layout/dialpad_chooser_list_item.xml b/res/layout/dialpad_chooser_list_item.xml
index 5ba88ca..9a49036 100644
--- a/res/layout/dialpad_chooser_list_item.xml
+++ b/res/layout/dialpad_chooser_list_item.xml
@@ -27,7 +27,7 @@
 
     <TextView android:id="@+id/text"
         android:textAppearance="?android:attr/textAppearanceMedium"
-        android:textColor="@color/dialpad_text_color"
+        android:textColor="@color/dialpad_primary_text_color"
         android:layout_gravity="center_vertical"
         android:layout_width="0dip"
         android:layout_weight="1"
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index e673cea..b2312ad 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -16,113 +16,28 @@
 <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="match_parent"
+    android:layout_height="wrap_content"
     android:orientation="vertical" >
     <!-- spacer view -->
     <View
         android:id="@+id/spacer"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1" />
-    <view class="com.android.dialer.dialpad.DialpadFragment$HoverIgnoringLinearLayout"
-        android:id="@+id/top"
+        android:layout_weight="1"
+        android:background="#00000000" />
+    <!-- Dialpad shadow -->
+    <View
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="2"
-        android:orientation="vertical"
-        android:paddingStart="@dimen/dialpad_horizontal_margin"
-        android:paddingEnd="@dimen/dialpad_horizontal_margin"
-        android:layoutDirection="ltr"
-        android:background="@color/background_dialpad" >
-
-
-        <!-- Text field and possibly soft menu button above the keypad where
-             the digits are displayed. -->
-        <LinearLayout
-            android:id="@+id/digits_container"
-            android:layout_width="match_parent"
-            android:layout_height="0px"
-            android:layout_weight="@integer/dialpad_layout_weight_digits"
-            android:layout_marginTop="@dimen/dialpad_vertical_margin"
-            android:gravity="center" >
-
-            <com.android.dialer.dialpad.DigitsEditText
-                android:id="@+id/digits"
-                android:layout_width="0dip"
-                android:layout_weight="1"
-                android:layout_height="match_parent"
-                android:paddingLeft="10dp"
-                android:gravity="center"
-                android:scrollHorizontally="true"
-                android:singleLine="true"
-                android:textAppearance="@style/DialtactsDigitsTextAppearance"
-                android:textColor="@color/dialpad_text_color"
-                android:textCursorDrawable="@null"
-                android:fontFamily="sans-serif-light"
-                android:nextFocusRight="@+id/overflow_menu"
-                android:background="@android:color/transparent" />
-
-            <ImageButton
-                android:id="@+id/deleteButton"
-                android:layout_width="56dip"
-                android:layout_height="match_parent"
-                android:layout_gravity="center_vertical"
-                android:gravity="center"
-                android:state_enabled="false"
-                android:background="?android:attr/selectableItemBackground"
-                android:contentDescription="@string/description_delete_button"
-                android:src="@drawable/ic_dial_action_delete" />
-        </LinearLayout>
-
-        <!-- Keypad section -->
-        <include layout="@layout/dialpad" />
-
-        <View style="@style/DialpadHorizontalSeparator"/>
-
-        <LinearLayout
-            android:id="@+id/dialButtonContainer"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/fake_action_bar_height"
-            android:layout_gravity="center_horizontal"
-            android:background="@color/dialpad_primary_text_color"
-            android:layoutDirection="locale">
-            <ImageButton
-                android:id="@+id/call_history_on_dialpad_button"
-                android:layout_height="match_parent"
-                android:layout_width="@dimen/fake_menu_button_min_width"
-                android:layout_gravity="bottom|start"
-                android:background="@drawable/btn_call"
-                android:contentDescription="@string/action_menu_call_history_description"
-                android:src="@drawable/ic_menu_history_lt"/>
-            <ImageButton
-                android:id="@+id/dialButton"
-                android:layout_width="0dp"
-                android:layout_weight="1"
-                android:layout_height="match_parent"
-                android:layout_gravity="center"
-                android:state_enabled="false"
-                android:background="@drawable/btn_call"
-                android:contentDescription="@string/description_dial_button"
-                android:src="@drawable/ic_dial_action_call" />
-            <ImageButton
-                android:id="@+id/overflow_menu_on_dialpad"
-                android:layout_height="match_parent"
-                android:layout_width="@dimen/fake_menu_button_min_width"
-                android:layout_gravity="bottom|end"
-                android:background="@drawable/btn_call"
-                android:src="@drawable/ic_menu_overflow_lt"
-                android:contentDescription="@string/action_menu_overflow_description" />
-        </LinearLayout>
-
-        <!-- "Dialpad chooser" UI, shown only when the user brings up the
+        android:layout_height="10dp"
+        android:background="@drawable/shadow_fade_up" />
+    <include layout="@layout/dialpad_view" />
+    <!-- "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"
+    <ListView android:id="@+id/dialpadChooser"
             android:layout_width="match_parent"
-            android:layout_height="1dip"
-            android:layout_weight="1"
-        />
-
-    </view>
+            android:layout_height="wrap_content"
+            android:background="@color/background_dialer_light"
+            android:visibility="gone" />
 </view>
diff --git a/res/layout/dialpad_key.xml b/res/layout/dialpad_key.xml
deleted file mode 100644
index c104f8a..0000000
--- a/res/layout/dialpad_key.xml
+++ /dev/null
@@ -1,45 +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.
--->
-
-<!-- A layout representing a single key in the dialpad -->
-<com.android.dialer.dialpad.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/DialtactsDialpadButtonStyle"
-    android:clickable="true"
-    android:focusable="true" >
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center">
-      <TextView
-          android:id="@+id/dialpad_key_number"
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:textColor="@color/dialpad_primary_text_color"
-          android:textSize="@dimen/dialpad_key_numbers_size"
-          android:fontFamily="sans-serif-light"
-          />
-      <TextView
-          android:id="@+id/dialpad_key_letters"
-          android:layout_width="@dimen/dialpad_key_letters_width"
-          android:layout_height="wrap_content"
-          android:textColor="@color/dialpad_secondary_text_color"
-          android:textSize="@dimen/dialpad_key_letters_size"
-          android:paddingLeft="11dp"
-          android:fontFamily="sans-serif-light"
-          />
-    </LinearLayout>
-</com.android.dialer.dialpad.DialpadKeyButton>
\ No newline at end of file
diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml
index e2c3853..e0049b5 100644
--- a/res/layout/dialtacts_activity.xml
+++ b/res/layout/dialtacts_activity.xml
@@ -13,113 +13,98 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout
+<RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/dialtacts_mainlayout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:orientation="vertical"
     android:focusable="true"
     android:focusableInTouchMode="true"
     android:clipChildren="false"
-    android:id="@+id/dialtacts_container"
+    android:animateLayoutChanges="true"
+    android:background="@color/background_dialer_light"
     >
-    <!-- Overlapping dialpad fragment is inserted here -->
-    <LinearLayout
+    <RelativeLayout
+        android:id="@+id/dialtacts_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:clipChildren="false"
-        android:orientation="vertical" >
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:id="@+id/search_view_container"
-            android:orientation="vertical"
-            >
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:orientation="horizontal"
-                android:paddingLeft="16dp"
-                android:paddingRight="23dp"
-                android:background="@color/searchbox_background_color"
-                android:gravity="center_vertical">
-                <EditText
-                    android:id="@+id/search_view"
-                    android:layout_width="0dp"
-                    android:layout_height="56dp"
-                    android:layout_weight="1"
-                    android:textSize="@dimen/search_text_size"
-                    android:inputType="textFilter"/>
-                <ImageView
-                    android:id="@+id/search_close_button"
-                    android:layout_height="40dp"
-                    android:layout_width="40dp"
-                    android:padding="6dp"
-                    android:src="@drawable/ic_close_dk"
-                    android:clickable="true"
-                    android:background="?android:attr/selectableItemBackground"
-                    android:visibility="gone" />
-                <ImageView
-                    android:id="@+id/voice_search_button"
-                    android:layout_height="40dp"
-                    android:layout_width="40dp"
-                    android:padding="3dp"
-                    android:src="@drawable/ic_voice_search"
-                    android:clickable="true"
-                    android:contentDescription="@string/description_start_voice_search"
-                    android:background="?android:attr/selectableItemBackground" />
-            </LinearLayout>
-            <View
-                android:id="@+id/searchbox_divider"
-                android:layout_height="1dp"
-                android:layout_width="match_parent"
-                android:background="@color/background_dialer_light" />
-        </LinearLayout>
+        android:clipChildren="false">
+        <!-- The main contacts grid -->
         <FrameLayout
-            android:layout_height="0dp"
-            android:layout_weight="1"
+            android:layout_height="match_parent"
             android:layout_width="match_parent"
             android:id="@+id/dialtacts_frame"
-            android:clipChildren="false">
+            android:clipChildren="false"
+            >
         </FrameLayout>
-        <View
-            android:layout_height="2dp"
-            android:layout_width="match_parent"
-            android:background="#33999999"
-        />
+        <!-- Search entry box and remove view -->
         <FrameLayout
-            android:layout_height="@dimen/fake_action_bar_height"
             android:layout_width="match_parent"
-            android:id="@+id/fake_action_bar"
-            android:background="@color/actionbar_background_color">
-            <ImageButton
-                android:id="@+id/call_history_button"
-                android:layout_width="@dimen/fake_menu_button_min_width"
-                android:layout_height="match_parent"
-                android:layout_gravity="bottom|start"
-                android:background="?android:attr/selectableItemBackground"
-                android:contentDescription="@string/action_menu_call_history_description"
-                android:src="@drawable/ic_menu_history_dk"/>
-            <ImageButton
-                android:id="@+id/dialpad_button"
-                android:layout_width="@dimen/fake_menu_button_min_width"
-                android:layout_height="match_parent"
-                android:layout_gravity="bottom|center"
-                android:background="?android:attr/selectableItemBackground"
-                android:contentDescription="@string/action_menu_dialpad_button"
-                android:src="@drawable/ic_menu_dialpad_dk"/>
-            <ImageButton
-                 android:id="@+id/overflow_menu"
-                 android:layout_width="@dimen/fake_menu_button_min_width"
-                 android:layout_height="match_parent"
-                 android:layout_gravity="bottom|end"
-                 android:src="@drawable/ic_menu_overflow_dk"
-                 android:contentDescription="@string/action_menu_overflow_description"
-                 android:background="?android:attr/selectableItemBackground"/>
+            android:layout_height="wrap_content"
+            android:layout_alignParentTop="true"
+            android:id="@+id/search_and_remove_view_container"
+            android:visibility="gone"
+            >
         </FrameLayout>
-        <View
-            android:id="@+id/dialtacts_bottom_padding"
+    </RelativeLayout>
+    <com.android.dialer.list.RemoveView
+        android:layout_width="match_parent"
+        android:layout_height="56dp"
+        android:id="@+id/remove_view"
+        android:layout_alignParentTop="true"
+        >
+        <LinearLayout
+            android:id="@+id/remove_view_container"
+            android:layout_height="match_parent"
             android:layout_width="match_parent"
-            android:layout_height="?android:attr/actionBarSize"
-            android:visibility="gone" />
-    </LinearLayout>
-</FrameLayout>
+            android:gravity="center"
+            android:orientation="horizontal"
+            android:visibility="gone" >
+            <ImageView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/remove_view_icon"
+                android:src="@drawable/ic_remove"
+                android:contentDescription="@string/remove_contact"
+                />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/remove_view_text"
+                android:textSize="@dimen/remove_text_size"
+                android:textColor="@color/remove_text_color"
+                android:text="@string/remove_contact"
+                />
+        </LinearLayout>
+    </com.android.dialer.list.RemoveView >
+    <FrameLayout
+        android:id="@+id/floating_action_button_container"
+        android:layout_width="@dimen/floating_action_button_width"
+        android:layout_height="@dimen/floating_action_button_height"
+        android:layout_marginRight="@dimen/floating_action_button_margin_right"
+        android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+        android:layout_centerHorizontal="true"
+        android:layout_alignParentBottom="true">
+
+        <ImageButton
+            android:id="@+id/floating_action_button"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/floating_action_button"
+            android:contentDescription="@string/action_menu_dialpad_button"
+            android:src="@drawable/fab_ic_dial"/>
+
+    </FrameLayout>
+    <!-- Host container for the contact tile drag shadow -->
+    <FrameLayout
+        android:layout_height="match_parent"
+        android:layout_width="match_parent">
+        <ImageView
+            android:id="@+id/contact_tile_drag_shadow_overlay"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            android:importantForAccessibility="no" />
+    </FrameLayout>
+</RelativeLayout>
diff --git a/res/layout/lists_fragment.xml b/res/layout/lists_fragment.xml
new file mode 100644
index 0000000..d75095a
--- /dev/null
+++ b/res/layout/lists_fragment.xml
@@ -0,0 +1,51 @@
+<?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.
+-->
+
+<com.android.dialer.widget.OverlappingPaneLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:animateLayoutChanges="true"
+    android:id="@+id/lists_frame">
+    <ListView
+        android:id="@+id/shortcut_card_list"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="?android:attr/actionBarSize"
+        android:background="@color/actionbar_background_color"
+        android:clipToPadding="false"
+        android:fadingEdge="none"
+        android:divider="@null" />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+        <com.android.dialer.list.ViewPagerTabs
+            android:id="@+id/lists_pager_header"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/tab_height"
+            android:textAllCaps="true"
+            android:orientation="horizontal"
+            android:layout_gravity="top"
+            style="@style/DialtactsActionBarTabTextStyle" />
+        <android.support.v4.view.ViewPager
+            android:id="@+id/lists_pager"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1">
+        </android.support.v4.view.ViewPager>
+    </LinearLayout>
+</com.android.dialer.widget.OverlappingPaneLayout>
diff --git a/res/layout/phone_favorite_regular_row_view.xml b/res/layout/phone_favorite_regular_row_view.xml
deleted file mode 100644
index 012c9be..0000000
--- a/res/layout/phone_favorite_regular_row_view.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?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.
--->
-
-<!-- Layout parameters are set programmatically. -->
-<view
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/contact_tile"
-    class="com.android.dialer.list.PhoneFavoriteRegularRowView">
-
-    <RelativeLayout
-        android:id="@+id/contact_favorite_card"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:focusable="true">
-
-        <com.android.contacts.common.widget.LayoutSuppressingQuickContactBadge
-            android:id="@+id/contact_tile_quick"
-            android:layout_width="64dip"
-            android:layout_height="64dip"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentStart="true"
-            android:nextFocusRight="@id/contact_tile"
-            android:scaleType="centerCrop"
-            android:focusable="true" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginLeft="8dip"
-            android:layout_marginStart="8dip"
-            android:layout_toRightOf="@id/contact_tile_quick"
-            android:layout_toEndOf="@id/contact_tile_quick"
-            android:layout_centerVertical="true"
-            android:orientation="vertical">
-            <TextView
-                android:id="@id/contact_tile_name"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:textSize="16sp"
-                android:textColor="@color/dialtacts_primary_text_color"/>
-                android:singleLine="true"
-                android:fadingEdge="horizontal"
-                android:fadingEdgeLength="3dip"
-                android:ellipsize="marquee"
-                android:textAlignment="viewStart" />
-            <TextView
-                android:id="@+id/contact_tile_phone_type"
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:textSize="12sp"
-                android:ellipsize="marquee"
-                android:singleLine="true"
-                android:textColor="@color/dialtacts_secondary_text_color" />
-        </LinearLayout>
-        <ImageView
-            android:id="@+id/contact_favorite_star"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignRight="@id/contact_tile_quick"
-            android:layout_alignEnd="@id/contact_tile_quick"
-            android:layout_alignBottom="@id/contact_tile_quick"
-            android:layout_marginRight="7dip"
-            android:layout_marginEnd="7dip"
-            android:layout_marginBottom="7dip"
-            android:src="@drawable/ic_star_marked_as_fav"
-            android:visibility="gone" />
-
-    </RelativeLayout>
-
-    <LinearLayout
-        android:id="@+id/favorite_remove_dialogue"
-        android:orientation="horizontal"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        android:gravity="center_vertical"
-        android:alpha="0.0"
-        android:visibility="gone">
-
-        <TextView
-            android:id="@+id/favorite_remove_dialogue_text"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:paddingStart="@dimen/favorites_row_undo_text_side_padding"
-            android:paddingEnd="@dimen/favorites_row_undo_text_side_padding"
-            android:text="@string/favorite_hidden"
-            android:ellipsize="marquee"
-            android:fontFamily="sans-serif"
-            android:textSize="14sp"
-            android:textColor="@color/undo_dialogue_text_color"
-            android:singleLine="true"
-            android:gravity="center_vertical"
-            android:textDirection="ltr" />
-
-        <View
-            android:id="@+id/undo_separator"
-            android:layout_width="1dip"
-            android:layout_height="match_parent"
-            android:background="@color/undo_dialogue_text_color"
-            android:layout_marginTop="16dp"
-            android:layout_marginBottom="16dp" />
-
-        <LinearLayout
-            android:id="@+id/favorite_remove_undo_button"
-            android:orientation="vertical"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:clickable="true"
-            android:paddingStart="30dp"
-            android:paddingEnd="30dp"
-            android:background="?android:attr/selectableItemBackground"
-            android:gravity="center_vertical">
-
-            <ImageView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:src="@drawable/ic_fav_undo_dk"/>
-
-            <TextView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:fontFamily="sans-serif-light"
-                android:textSize="13sp"
-                android:ellipsize="marquee"
-                android:singleLine="true"
-                android:text="@string/favorite_hidden_undo"
-                android:textColor="@color/undo_dialogue_text_color"
-                android:textAlignment="center"/>
-        </LinearLayout>
-    </LinearLayout>
-</view>
diff --git a/res/layout/phone_favorite_tile_view.xml b/res/layout/phone_favorite_tile_view.xml
index 8806d39..01d855b 100644
--- a/res/layout/phone_favorite_tile_view.xml
+++ b/res/layout/phone_favorite_tile_view.xml
@@ -15,17 +15,16 @@
 -->
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:paddingBottom="1dip"
-    android:paddingRight="1dip"
-    android:paddingEnd="1dip"
     android:id="@+id/contact_tile"
-    class="com.android.dialer.list.PhoneFavoriteSquareTileView" >
+    class="com.android.dialer.list.PhoneFavoriteSquareTileView"
+    android:paddingEnd="@dimen/contact_tile_divider_width">
 
     <RelativeLayout
         android:id="@+id/contact_favorite_card"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:focusable="true">
+        android:focusable="true"
+        android:background="@drawable/ic_contacts_tiles" >
 
         <com.android.contacts.common.widget.LayoutSuppressingImageView
             android:id="@+id/contact_tile_image"
@@ -37,45 +36,56 @@
             android:id="@+id/shadow_overlay"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:background="@drawable/shadow_contact_photo"/>
+            android:background="@drawable/shadow_contact_photo" />
 
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:paddingLeft="8dp"
-            android:paddingRight="@dimen/contact_tile_info_button_height_and_width"
-            android:paddingStart="8dp"
-            android:paddingEnd="@dimen/contact_tile_info_button_height_and_width"
-            android:paddingBottom="4dp"
+            android:paddingLeft="@dimen/contact_tile_text_side_padding"
+            android:paddingRight="@dimen/contact_tile_text_side_padding"
+            android:paddingStart="@dimen/contact_tile_text_side_padding"
+            android:paddingEnd="@dimen/contact_tile_text_side_padding"
+            android:paddingBottom="@dimen/contact_tile_text_bottom_padding"
             android:layout_alignParentBottom="true"
             android:orientation="vertical" >
-            <TextView
-                android:id="@+id/contact_tile_name"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:textColor="@color/contact_tile_name_color"
-                android:fontFamily="sans-serif"
-                android:singleLine="true"
-                android:textSize="16sp"
-                android:fadingEdge="horizontal"
-                android:fadingEdgeLength="3dip"
-                android:ellipsize="marquee"
-                android:textAlignment="viewStart" />
-            <TextView
-                android:id="@+id/contact_tile_phone_type"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:textColor="@color/contact_tile_name_color"
-                android:fontFamily="sans-serif"
-                android:singleLine="true"
-                android:textSize="12sp"
-                android:paddingBottom="2dp"
-                android:fadingEdge="horizontal"
-                android:fadingEdgeLength="3dip"
-                android:ellipsize="marquee"
-                android:textAlignment="viewStart" />
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:gravity="center_vertical">
+                    <TextView
+                        android:id="@+id/contact_tile_name"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textColor="@color/contact_tile_name_color"
+                        android:fontFamily="sans-serif"
+                        android:singleLine="true"
+                        android:textSize="15sp"
+                        android:fadingEdge="horizontal"
+                        android:fadingEdgeLength="3dip"
+                        android:ellipsize="marquee"
+                        android:textAlignment="viewStart" />
+                    <ImageView
+                        android:id="@+id/contact_star_icon"
+                        android:layout_width="@dimen/favorites_star_icon_size"
+                        android:layout_height="@dimen/favorites_star_icon_size"
+                        android:layout_marginStart="3dp"
+                        android:src="@drawable/ic_star"
+                        android:visibility="gone" />
+                </LinearLayout>
+                <TextView
+                    android:id="@+id/contact_tile_phone_type"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical"
+                    android:textColor="@color/contact_tile_name_color"
+                    android:fontFamily="sans-serif"
+                    android:singleLine="true"
+                    android:textSize="11sp"
+                    android:fadingEdge="horizontal"
+                    android:fadingEdgeLength="3dip"
+                    android:ellipsize="marquee"
+                    android:textAlignment="viewStart" />
         </LinearLayout>
         <View
             android:id="@+id/contact_tile_push_state"
@@ -85,97 +95,23 @@
             android:nextFocusRight="@+id/contact_tile_secondary_button"
             android:background="?android:attr/selectableItemBackground" />
 
-        <ImageView
-            android:id="@+id/contact_favorite_star"
-            android:background="?android:attr/selectableItemBackground"
-            android:layout_height="@dimen/contact_tile_info_button_height_and_width"
-            android:layout_width="@dimen/contact_tile_info_button_height_and_width"
-            android:paddingLeft="8dp"
-            android:paddingRight="8dp"
-            android:paddingStart="8dp"
-            android:paddingEnd="8dp"
-            android:paddingTop="8dp"
-            android:paddingBottom="8dp"
-            android:layout_alignParentBottom="true"
-            android:layout_alignParentRight="true"
-            android:layout_alignParentEnd="true"
-            android:src="@drawable/ic_star_marked_as_fav"
-            android:scaleType="center"
-            android:visibility="gone" />
-
-
         <ImageButton
             android:id="@id/contact_tile_secondary_button"
-            android:src="@drawable/ic_contact_info"
+            android:src="@drawable/overflow_thumbnail"
             android:background="?android:attr/selectableItemBackground"
             android:layout_height="@dimen/contact_tile_info_button_height_and_width"
             android:layout_width="@dimen/contact_tile_info_button_height_and_width"
-            android:paddingLeft="8dp"
-            android:paddingRight="8dp"
-            android:paddingStart="8dp"
-            android:paddingEnd="8dp"
-            android:paddingTop="8dp"
-            android:paddingBottom="8dp"
-            android:layout_alignParentBottom="true"
+            android:paddingLeft="4dp"
+            android:paddingRight="4dp"
+            android:paddingStart="4dp"
+            android:paddingEnd="4dp"
+            android:paddingTop="4dp"
+            android:paddingBottom="4dp"
+            android:layout_alignParentTop="true"
             android:layout_alignParentRight="true"
             android:layout_alignParentEnd="true"
+            android:scaleType="center"
             android:contentDescription="@string/description_view_contact_detail" />
 
     </RelativeLayout>
-
-    <LinearLayout
-        android:id="@+id/favorite_remove_dialogue"
-        android:orientation="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        android:gravity="center_horizontal"
-        android:background="@color/background_dialer_light"
-        android:alpha="0.0"
-        android:visibility="gone">
-
-        <TextView
-            android:id="@+id/favorite_remove_dialogue_text"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/favorite_hidden"
-            android:ellipsize="marquee"
-            android:fontFamily="sans-serif"
-            android:textSize="14sp"
-            android:textColor="@color/undo_dialogue_text_color"
-            android:lines="2"
-            android:paddingTop="22dp"
-            android:textDirection="ltr"
-            android:textAlignment="center" />
-
-        <LinearLayout
-            android:id="@+id/favorite_remove_undo_button"
-            android:orientation="vertical"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_alignParentLeft="true"
-            android:background="?android:attr/selectableItemBackground"
-            android:clickable="true"
-            android:layout_weight="1"
-            android:layout_gravity="bottom">
-
-            <ImageView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:src="@drawable/ic_fav_undo_dk"/>
-
-            <TextView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:fontFamily="sans-serif"
-                android:textSize="13sp"
-                android:ellipsize="marquee"
-                android:singleLine="true"
-                android:text="@string/favorite_hidden_undo"
-                android:textColor="@color/undo_dialogue_text_color"
-                android:textAlignment="center"/>
-        </LinearLayout>
-
-    </LinearLayout>
 </view>
diff --git a/res/layout/phone_favorites_fragment.xml b/res/layout/phone_favorites_fragment.xml
index 363565a..0b657df 100644
--- a/res/layout/phone_favorites_fragment.xml
+++ b/res/layout/phone_favorites_fragment.xml
@@ -21,8 +21,7 @@
     android:layout_height="match_parent"
     android:divider="?android:attr/dividerHorizontal"
     android:showDividers="end"
-    android:clipChildren="false"
-    android:background="@color/background_dialer_light">
+    android:clipChildren="false">
 
     <FrameLayout
         android:id="@+id/contact_tile_frame"
@@ -30,22 +29,18 @@
         android:layout_height="match_parent"
         android:layout_alignParentTop="true"
         android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true">
-
+        android:paddingStart="@dimen/favorites_row_start_padding"
+        android:paddingEnd="@dimen/favorites_row_end_padding" >
         <com.android.dialer.list.PhoneFavoriteListView
             android:id="@+id/contact_tile_list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:paddingTop="@dimen/contact_tile_list_padding_top"
+            android:paddingTop="@dimen/favorites_row_top_padding"
+            android:numColumns="@integer/contact_tile_column_count_in_favorites"
             android:clipToPadding="false"
             android:fadingEdge="none"
-            android:divider="@null" />
-
-        <ImageView
-            android:id="@+id/contact_tile_drag_shadow_overlay"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:visibility="gone"/>
+            android:divider="@null"
+            android:nestedScrollingEnabled="true" />
     </FrameLayout>
 
     <include
@@ -58,5 +53,4 @@
         android:layout_alignParentBottom="true"
         layout="@layout/phone_no_favorites"
         android:visibility="gone"/>
-
 </RelativeLayout>
diff --git a/res/layout/phone_favorites_menu.xml b/res/layout/phone_favorites_menu.xml
new file mode 100644
index 0000000..0f7aa21
--- /dev/null
+++ b/res/layout/phone_favorites_menu.xml
@@ -0,0 +1,58 @@
+<?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
+  -->
+
+<!-- The phone favorites menu appears on the main dialer screen above the favorite callers area,
+     and provides access to the All Contacts list. This is 1dp tall as a temporary hack to hide
+     it because it is no longer being used. It should be removed from its parent adapter entirely
+     eventually. -->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:id="@+id/phone_favorites_menu"
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:paddingLeft="@dimen/favorites_menu_padding_horizontal"
+                android:paddingRight="@dimen/favorites_menu_padding_horizontal"
+                android:paddingTop="@dimen/favorites_menu_padding_top"
+                android:paddingBottom="@dimen/favorites_menu_padding_bottom"
+                android:background="@color/favorites_menu_background_color"
+        >
+    <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/favorites_menu_speed_dial_height"
+            android:fontFamily="@string/favorites_menu_speed_dial_font_family"
+            android:text="@string/favorites_menu_speed_dial"
+            android:textSize="@dimen/favorites_menu_speed_dial_text_size"
+            android:textColor="@color/speed_dial_text_color"
+            android:layout_alignParentLeft="true"
+            android:layout_centerVertical="true"
+            android:gravity="center"
+        />
+    <Button
+            android:id="@+id/all_contacts_button"
+            android:fontFamily="@string/favorites_menu_all_contacts_font_family"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/favorites_menu_all_contacts_height"
+            android:paddingLeft="@dimen/favorites_menu_padding_horizontal"
+            android:paddingRight="@dimen/favorites_menu_padding_horizontal"
+            android:text="@string/favorites_menu_all_contacts"
+            android:textSize="@dimen/favorites_menu_all_contacts_text_size"
+            android:background="@drawable/background_all_contacts"
+            android:textColor="@color/all_contacts_button_text_color"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:gravity="center"
+        />
+</RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/phone_no_favorites.xml b/res/layout/phone_no_favorites.xml
index 1a0079f..b95afd1 100644
--- a/res/layout/phone_no_favorites.xml
+++ b/res/layout/phone_no_favorites.xml
@@ -18,7 +18,6 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
     android:minHeight="?android:attr/listPreferredItemHeight">
 
     <include
@@ -33,23 +32,18 @@
     <LinearLayout
         android:id="@+id/nofavorite_frame"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
+        android:layout_height="wrap_content"
         android:orientation="vertical"
-        android:layout_gravity="center"
         android:gravity="center"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-        android:layout_above="@id/show_all_contact_button_in_nofav">
-
+        android:layout_centerInParent="true">
         <ImageView
             android:id="@+id/nofavorite_image"
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
             android:gravity="center_horizontal"
             android:src="@drawable/no_favorites_banner"
-            android:layout_marginBottom="14dp"/>
-
+            android:layout_marginBottom="14dp"
+            android:contentDescription="@string/no_favorites"/>
         <TextView
             android:id="@+id/title"
             android:layout_width="match_parent"
diff --git a/res/layout/recents_list_footer.xml b/res/layout/recents_list_footer.xml
new file mode 100644
index 0000000..48c0f36
--- /dev/null
+++ b/res/layout/recents_list_footer.xml
@@ -0,0 +1,31 @@
+<?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.
+-->
+
+<!-- Text field and possibly soft menu button above the keypad where
+     the digits are displayed. -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/recents_list_footer"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="20dp"
+    android:paddingBottom="20dp"
+    android:gravity="center"
+    android:textColor="@color/dialtacts_primary_text_color"
+    android:textSize="14sp"
+    android:text="@string/recents_footer_text"
+    android:background="?android:attr/selectableItemBackground" />
\ No newline at end of file
diff --git a/res/layout/search_edittext.xml b/res/layout/search_edittext.xml
new file mode 100644
index 0000000..236d2bf
--- /dev/null
+++ b/res/layout/search_edittext.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/search_view_container"
+    android:orientation="horizontal"
+    android:layout_marginTop="@dimen/search_top_margin"
+    android:layout_marginBottom="@dimen/search_bottom_margin"
+    android:layout_marginLeft="@dimen/search_margin_horizontal"
+    android:layout_marginRight="@dimen/search_margin_horizontal"
+    android:paddingLeft="@dimen/search_box_left_padding"
+    android:paddingRight="@dimen/search_box_right_padding"
+    android:background="@drawable/search_bg"
+    android:gravity="center_vertical"
+    >
+    <EditText
+        android:id="@+id/search_view"
+        android:layout_width="0dp"
+        android:layout_height="@dimen/search_box_icon_size"
+        android:layout_weight="1"
+        android:layout_marginLeft="@dimen/search_box_text_left_margin"
+        android:textSize="@dimen/search_text_size"
+        android:fontFamily="@string/search_font_family"
+        android:textColor="@color/searchbox_text_color"
+        android:textColorHint="@color/searchbox_hint_text_color"
+        android:hint="@string/dialer_hint_find_contact"
+        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:padding="6dp"
+        android:src="@drawable/ic_close_dk"
+        android:clickable="true"
+        android:background="?android:attr/selectableItemBackground"
+        android:contentDescription="@string/description_clear_search"
+        android:visibility="gone" />
+    <ImageView
+        android:id="@+id/voice_search_button"
+        android:layout_height="@dimen/search_box_icon_size"
+        android:layout_width="@dimen/search_box_icon_size"
+        android:padding="@dimen/search_box_icon_padding"
+        android:src="@drawable/ic_voice_search"
+        android:clickable="true"
+        android:contentDescription="@string/description_start_voice_search"
+        android:background="?android:attr/selectableItemBackground" />
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/show_all_contacts_fragment.xml b/res/layout/show_all_contacts_fragment.xml
index ddc99e8..6b89847 100644
--- a/res/layout/show_all_contacts_fragment.xml
+++ b/res/layout/show_all_contacts_fragment.xml
@@ -43,7 +43,8 @@
             android:layout_marginStart="?attr/contact_browser_list_padding_left"
             android:layout_marginEnd="?attr/contact_browser_list_padding_right"
             android:fastScrollEnabled="true"
-            android:fadingEdge="none"/>
+            android:fadingEdge="none"
+            android:nestedScrollingEnabled="true" />
     </FrameLayout>
 
 </LinearLayout>
diff --git a/res/layout/tile_interactions_teaser_view.xml b/res/layout/tile_interactions_teaser_view.xml
index 4104446..8204cb1 100644
--- a/res/layout/tile_interactions_teaser_view.xml
+++ b/res/layout/tile_interactions_teaser_view.xml
@@ -18,7 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/actionbar_background_color"
+    android:background="@color/background_dialer_list_items"
     android:paddingBottom="@dimen/favorites_row_bottom_padding"
     android:paddingTop="@dimen/favorites_row_top_padding">
 
diff --git a/res/layout/wifi_call_enable_completion.xml b/res/layout/wifi_call_enable_completion.xml
deleted file mode 100644
index dd63c3b..0000000
--- a/res/layout/wifi_call_enable_completion.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout
-        android:orientation="vertical"
-        android:id="@+id/call_log_list_item"
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-    <ImageView
-            android:layout_width="192dp"
-            android:layout_height="128dp"
-            android:paddingTop="32dp"
-            android:paddingBottom="32dp"
-            android:layout_gravity="center_horizontal"
-            android:src="@drawable/ic_phone_plus_wifi"/>
-
-    <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingLeft="64dp"
-            android:paddingRight="64dp"
-            android:textSize="12dp"
-            android:textColor="@color/dialtacts_secondary_text_color"
-            android:text="@string/wifi_setup_completed"/>
-
-    <LinearLayout
-            android:orientation="horizontal"
-            android:paddingTop="32dp"
-            android:paddingBottom="32dp"
-            android:layout_gravity="center_horizontal"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingRight="16dp"
-                android:textSize="12dp"
-                android:textAllCaps="true"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_setup_ok"/>
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingRight="16dp"
-                android:textSize="12dp"
-                android:textAllCaps="true"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_setup_settings_shortcut"/>
-
-    </LinearLayout>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/wifi_call_enable_settings.xml b/res/layout/wifi_call_enable_settings.xml
deleted file mode 100644
index 565cb01..0000000
--- a/res/layout/wifi_call_enable_settings.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout
-        android:orientation="vertical"
-        android:id="@+id/call_log_list_item"
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-    <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:padding="10dp"
-            android:textSize="16dp"
-            android:textColor="@color/foreground_wifi_highlight"
-            android:background="@color/background_wifi_highlight"
-            android:text="@string/wifi_when_connected_to_a_signal"/>
-
-    <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:background="@color/wifi_dark_wifi_highlight"/>
-
-    <LinearLayout
-            android:padding="10dp"
-            android:orientation="horizontal"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-
-        <!-- TODO(ihab): Do this layout without using layout_weight -->
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:textSize="16dp"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_always_use_wifi"/>
-
-        <RadioButton
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:id="@+id/wifi_always_use_wifi"/>
-
-    </LinearLayout>
-
-    <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginLeft="10dp"
-            android:layout_marginRight="10dp"
-            android:background="@color/wifi_list_separator"/>
-
-    <LinearLayout
-            android:padding="10dp"
-            android:orientation="horizontal"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-
-        <!-- TODO(ihab): Do this layout without using layout_weight -->
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:textSize="16dp"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_ask_use_wifi"/>
-
-        <RadioButton
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:id="@+id/wifi_ask_use_wifi"/>
-
-    </LinearLayout>
-
-    <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginLeft="10dp"
-            android:layout_marginRight="10dp"
-            android:background="@color/wifi_list_separator"/>
-
-    <LinearLayout
-            android:padding="10dp"
-            android:orientation="horizontal"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-
-        <!-- TODO(ihab): Do this layout without using layout_weight -->
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:textSize="16dp"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_never_use_wifi"/>
-
-        <RadioButton
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:checked="true"
-                android:id="@+id/wifi_never_use_wifi"/>
-
-    </LinearLayout>
-
-    <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:background="@color/wifi_list_separator"/>
-
-    <LinearLayout
-            android:padding="10dp"
-            android:orientation="horizontal"
-            android:gravity="end"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="16dp"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_next_setup_screen"/>
-
-        <ImageView
-                android:layout_width="32dp"
-                android:layout_height="32dp"
-                android:paddingStart="8dp"
-                android:src="@drawable/ic_wifi_call"/>
-
-    </LinearLayout>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/wifi_call_enable_teaser.xml b/res/layout/wifi_call_enable_teaser.xml
deleted file mode 100644
index fd70619..0000000
--- a/res/layout/wifi_call_enable_teaser.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout
-        android:orientation="horizontal"
-        android:id="@+id/call_log_list_item"
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-    <ImageView
-            android:layout_width="64dp"
-            android:layout_height="64dp"
-            android:padding="16dp"
-            android:src="@drawable/ic_wifi_call"
-            android:background="@color/background_wifi_highlight"/>
-
-    <LinearLayout
-        android:orientation="vertical"
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:gravity="center_vertical"
-        android:padding="8dp"
-        android:layout_height="match_parent">
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="16dp"
-                android:textColor="@color/dialtacts_primary_text_color"
-                android:text="@string/wifi_no_signal_no_problem"/>
-
-        <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="12dp"
-                android:textColor="@color/dialtacts_secondary_text_color"
-                android:text="@string/wifi_enable_google_wifi_calling"/>
-
-    </LinearLayout>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 0727dd5..c6b5dda 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -15,8 +15,8 @@
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
-        android:id="@+id/menu_add_contacts"
-        android:title="@string/recentCalls_addToContact"
+        android:id="@+id/menu_add_contact"
+        android:title="@string/add_contact"
         android:showAsAction="withText"
         android:orderInCategory="1" />
     <item
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 7e84818..17f4d9f 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -14,6 +14,11 @@
      limitations under the License.
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:id="@+id/menu_history"
+        android:icon="@drawable/ic_menu_history_lt"
+        android:title="@string/action_menu_call_history_description" />
     <item
         android:id="@+id/menu_import_export"
         android:title="@string/menu_import_export" />
@@ -24,9 +29,6 @@
         android:id="@+id/menu_add_contact"
         android:title="@string/menu_newContact"/>
     <item
-        android:id="@+id/menu_all_contacts"
-        android:title="@string/menu_allContacts"/>
-    <item
         android:id="@+id/menu_call_settings"
         android:title="@string/call_settings"
         android:orderInCategory="2" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 927136d..8804035 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ster"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"huts"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"stemboodskap"</string>
     <string name="description_search_button" msgid="3660807558587384889">"soek"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"bel"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"terugvee"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nommer om te skakel"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Oproepgeskiedenis"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Meer opsies"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Wys slegs misgeloop"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Wys net stemboodskappe"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Wys alle oproepe"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Voeg kontak by"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Voeg 2-sek.-pouse by"</string>
     <string name="add_wait" msgid="3360818652790319634">"Voeg wagtyd by"</string>
     <string name="call_settings" msgid="7666474782093693667">"Instellings"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Uitgaande oproep"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Gemiste oproep"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Stemboodskap"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Voeg kontak by"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Bekyk kontak <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Bel <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontakbesonderhede van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Oproepbesonderhede"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nuwe stemboodskap."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Onbekend"</string>
     <string name="voicemail" msgid="3851469869202611441">"Stemboodskap"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laai tans van SIM-kaart af…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM-kaartkontakte"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Heraktiveer die Mense-program om hierdie kenmerk te gebruik."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Stemsoektog is nie beskikbaar nie."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Kan nie \'n foonoproep maak nie want die Foon-program is gedeaktiveer."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Geen geïnstalleerde aktiwiteit beskikbaar om gekose handeling te hanteer nie."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Voer \'n naam of foonnommer in"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Alles"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Gemis"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Geen onlangs gemiste oproepe nie."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Geen onlangse stemposse nie."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Wys alle kontakte"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Wys net gunstelinge"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Geskiedenis"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Alles"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Gemis"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Stemboodskap"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Spoedbel"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Onlangse kontakte"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakte"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Alle kontakte"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Alle kontakte"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Verwyder uit gunstelinge"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Ontdoen"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Voeg by kontakte"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Bekyk volledige oproepgeskiedenis"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nuwe gemiste oproepe"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Gunstelinge en kontakte \nwat jy gereeld bel, sal hier wys.\nSo, begin bel."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tik prent om alle getalle te sien of druk en hou om te herorganiseer"</string>
-    <string name="description_dismiss" msgid="2146276780562549643">"Verwerp"</string>
+    <string name="description_dismiss" msgid="2146276780562549643">"Maak toe"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Verwyder"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Spoedbel"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE KONTAKTE"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"BEL TERUG"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"VEE UIT"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LUISTER"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Het oproep vanaf <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> gemis."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Het oproep vanaf <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> geantwoord."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Oproep na <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Bel <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> terug"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Luister na stemboodskap vanaf <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Vee oproeprekord-inskrywing vir <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> uit"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Oproeprekord-inskrywing is uitgevee."</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 9b38a74..58fa24a 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -26,12 +26,12 @@
     <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ከመደወል በፊት ቁጥር አርትዕ"</string>
     <string name="recentCalls_addToContact" msgid="1429899535546487008">"ወደ ዕውቂያዎች አክል"</string>
     <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ከጥሪ ማስታወሻ አስወግድ"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"የጥሪ ማስታወሻ አጥራ"</string>
+    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"የጥሪ ማስታወሻ አጽዳ"</string>
     <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"የድምፅ መልዕክት ሰርዝ"</string>
     <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"የድምፅ መልዕክት አጋራ"</string>
     <string name="recentCalls_empty" msgid="247053222448663107">"ምዝግብ ማስታወሻባዶ ነው..."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"የጥሪ ማስታወሻ አጥራ"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ሁሉም የጥሪ ማህደሮችህ ይሰረዛሉ፡፡"</string>
+    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"የጥሪ ማስታወሻ አጽዳ"</string>
+    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ሁሉም የጥሪ ማህደሮችዎ ይሰረዛሉ።"</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"የጥሪ ምዝግብ ማስታወሻ በማጥራት ላይ…"</string>
   <plurals name="notification_voicemail_title">
     <item quantity="one" msgid="1746619685488504230">"የድምፅ መልዕክት"</item>
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ኮከብ"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"ዜሮ"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"ፓውንድ"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"የድምፅ መልዕክት"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ፍለጋ"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"ደውል"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"የኋሊት ደምሳሽ"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"ቁጥር ለመደወል"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"የስልክ ጥሪ ታሪክ"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"ተጨማሪ አማራጮች"</string>
@@ -89,8 +87,9 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"ያመለጡትን ብቻ አሳይ"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"የድምፅ መልዕክቶች ብቻ አሳይ"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"ሁሉንም ጥሪዎች አሳይ"</string>
+    <string name="add_contact" msgid="8875804371377471164">"እውቂያ አክል"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2 ሴኮንድ ፋታ አክል"</string>
-    <string name="add_wait" msgid="3360818652790319634">"ጠብቅአክል"</string>
+    <string name="add_wait" msgid="3360818652790319634">"መጠበቅ አክል"</string>
     <string name="call_settings" msgid="7666474782093693667">"ቅንብሮች"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"አዲስ ዕውቅያ"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"ሁሉም ዕውቂያዎች"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ወጪ ጥሪ"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"ያመለጠ  ጥሪ"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"የድምፅ መልዕክት"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"እውቅያዎች አክል"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"ዕውቂያ <xliff:g id="NAME">%1$s</xliff:g> ዕይ"</string>
     <string name="description_call" msgid="3443678121983852666">"ጥሪ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> እውቂያ ዝርዝሮች"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"የጥሪ ዝርዝሮች"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"አዲስ የድምጽ መልዕክት።"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"ደውል<xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ያልታወቀ"</string>
     <string name="voicemail" msgid="3851469869202611441">"የድምፅ መልዕክት"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"ከSIM ካርድ ላይ በመጫን ላይ..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"የSIM ካርድ ዕውቂያዎች"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"ይህንን ባህሪ ለመጠቀም የሰዎች መተግበሪያውን ዳግም ያንቁት።"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"የድምጽ ፍለጋ አይገኝም።"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"የስልክ መተግበሪያው ስለተሰናከለ የስልክ ጥሪ ማድረግ አይቻልም።"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"የተመረጠውን ድርጊት ለማከናወን ምንም የተጫነ እንቅስቃሴ አይገኝም።"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"ስም ወይም ስልክ ቁጥር ይተይቡ"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ሁሉም"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"ያመለጡ"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"ምንም በቅርብ ጊዜ ያመለጡ ጥሪዎች የሉም።"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"ምንም የቅርብ ጊዜ የድምጽ መልዕክቶች የሉልም።"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"ሁሉንም ዕውቂያዎች አሳይ"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"ተወዳጆችን ብቻ አሳይ"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"ታሪክ"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"ሁሉም"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"ያመለጡ"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"የድምፅ መልዕክት"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"አቋራጭ መደወያ"</string>
+    <string name="tab_recents" msgid="929949073851377206">"የቅርብ ጊዜዎቹ"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"ዕውቂያዎች"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"ሁሉም እውቂያዎች"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ሁሉም እውቂያዎች"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"ከተወዳጆች ውስጥ ተወግዷል።"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"ቀልብስ"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"ለ<xliff:g id="NUMBER">%s</xliff:g> ደውል"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"ወደ ዕውቂያዎች አክል"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"ሙሉ የጥሪ ታሪኮችን ይመልከቱ"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> አዲስ ያልተመለሱ ጥሪዎች"</string>
     <string name="no_favorites" msgid="5212485868783382971">"ተወዳጆች እና አብዛኛውን ጊዜ\nየሚደውሉላቸው እውቂያዎች እዚህ ይታያሉ።\nስለዚህ መደወል ይጀምሩ።"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"ሁሉንም ቁጥሮች ለማየት ምስሉን መታ ያድርጉ ወይም ቅደም ተከተላቸውን ለማስተካከል ተጭነው ይያዙ"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"አሰናብት"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"አስወግድ"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"አቋራጭ መደወያ"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ሁሉም እውቂያዎች"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"መልሰህ ደውል"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ሰርዝ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"አዳምጥ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>፣ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>፣ <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ጥሪ አምልጠዎታል።"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>፣ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>፣ <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ጥሪ አንስተዋል።"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"ለ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>፣ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>፣ <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ይደውሉ።"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"ለ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> መልሰው ይደውሉ"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>ን የድምጽ መልዕክት ያዳምጡ"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> የጥሪ ምዝግብ ማስታወሻ ግቤት ይሰርዙ"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"የጥሪ ምዝግብ ማስታወሻ ግቤት ተሰርዟል።"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 9998c6f..cbabb89 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"نجمة"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"صفر"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"رنين"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"البريد الصوتي"</string>
     <string name="description_search_button" msgid="3660807558587384889">"بحث"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"طلب"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"الرقم الذي سيتم طلبه"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"سجل المكالمات"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"مزيد من الخيارات"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"عرض الفائت فقط"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"إظهار رسائل البريد الصوتي فقط"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"عرض جميع المكالمات"</string>
+    <string name="add_contact" msgid="8875804371377471164">"إضافة جهة اتصال"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"إضافة ثانيتين إيقاف مؤقت"</string>
     <string name="add_wait" msgid="3360818652790319634">"إضافة انتظار"</string>
     <string name="call_settings" msgid="7666474782093693667">"الإعدادات"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"مكالمة صادرة"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"مكالمة فائتة"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"البريد الصوتي"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"إضافة جهة اتصال"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"عرض جهة الاتصال <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"الاتصال بـ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"تفاصيل جهة الاتصال بـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"تفاصيل المكالمة"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"بريد صوتي جديد"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"الاتصال بالرقم <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"غير معروف"</string>
     <string name="voicemail" msgid="3851469869202611441">"البريد الصوتي"</string>
@@ -125,40 +127,50 @@
     <string name="dialerDialpadHintText" msgid="5824490365898349041">"طلب لإضافة مكالمة"</string>
     <string name="callDetailsDurationFormat" msgid="8157706382818184268">"عدد الدقائق:<xliff:g id="MINUTES">%s</xliff:g>، عددالثواني: <xliff:g id="SECONDS">%s</xliff:g>"</string>
     <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"لم يتم إرسال المكالمة"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة &gt; الإعدادات."</string>
+    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"‏لإعداد البريد الصوتي، انتقل إلى القائمة &gt; الإعدادات."</string>
     <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"للاتصال بالبريد الصوتي، يجب أولاً إيقاف وضع الطائرة."</string>
     <string name="contact_list_loading" msgid="5488620820563977329">"جارٍ التحميل..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"جارٍ التحميل من بطاقة SIM…"</string>
-    <string name="simContacts_title" msgid="27341688347689769">"بطاقة SIM وجهات الاتصال"</string>
+    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"‏جارٍ التحميل من بطاقة SIM…"</string>
+    <string name="simContacts_title" msgid="27341688347689769">"‏بطاقة SIM وجهات الاتصال"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"أعد تمكين تطبيق الأشخاص لاستخدام هذه الميزة."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"لا تتوفر إمكانية البحث الصوتي."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"يتعذر إجراء مكالمة هاتفية نظرًا لأنه تم تعطيل تطبيق الهاتف."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"لا يتوفر نشاط مثبَّت للتعامل مع الإجراء المحدد."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"أدخل اسمًا أو رقم هاتف"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"الكل"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"فائتة"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"لا توجد مكالمات فائتة حديثة."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"لا توجد رسائل بريد صوتي حديثة."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"عرض جميع جهات الاتصال"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"عرض المفضلة فقط"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"السجل"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"٠"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"١"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"٢"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"٣"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"٤"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"٥"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"٦"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"٧"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"٨"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"٩"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"الكل"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"فائتة"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"البريد الصوتي"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"الاتصال السريع"</string>
+    <string name="tab_recents" msgid="929949073851377206">"الحديثة"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"جهات الاتصال"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"جميع جهات الاتصال"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"جميع جهات الاتصال"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"تمت إزالة جهة الاتصال من المفضلة"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"تراجع"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"الاتصال بالرقم <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"إضافة إلى جهات الاتصال"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"عرض سجل المكالمات بالكامل"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> من المكالمات الجديدة الفائتة"</string>
     <string name="no_favorites" msgid="5212485868783382971">"جهات الاتصال المفضلة وجهات الاتصال التي\nتتصل غالبًا بها ستظهر هنا.\nلذا عليك البدء في الاتصال."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"انقر على الصورة للاطلاع على كل الأرقام أو اضغط مع الاستمرار لإعادة الترتيب"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"تجاهل"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"إزالة"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"الاتصال السريع"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"جميع جهات الاتصال"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"معاودة الاتصال"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"حذف"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"استماع"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"مكالمة فائتة من <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"الرد على مكالمة من <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"اتصال بـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"معاودة الاتصال بـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"استماع إلى بريد صوتي من <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"حذف إدخال سجل المكالمات لـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"تم حذف إدخال سجل المكالمات."</string>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
deleted file mode 100644
index d659839..0000000
--- a/res/values-be/strings.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"Тэлефон"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"Тэлефон"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"Тэлефон"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"Спіс"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"Адправiць тэкставае паведамленне"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"Выклікаць карыстальнiка <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Рэдагаваць нумар перад выклікам"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"Дадаць у кантакты"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Выдаліць са спісу выклікаў"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Ачысціць спіс выклікаў"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Выдаліць галасавое паведамленне"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Адправiць галасавое паведамленне"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"Спіс выклікаў пусты."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Ачысціць спіс выклікаў?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Усе вашы запісы выклікаў будуць выдалены."</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Выдаленне гiсторыi выклiкаў..."</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"Галас. пошта"</item>
-    <item quantity="other" msgid="5513481419205061254">"Галасавых паведамленняў: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Прайграць"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Новае паведамл. ад <xliff:g id="CALLER">%1$s</xliff:g>"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"Немагчыма прайгр. пав. галасавой пошты"</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"Запiс у буфер..."</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"Атрыманне галасавой пошты..."</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Немагчыма атрымаць галасавую пошту."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"Толькi выклiкі з галасавой поштай"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"Толькi ўваходныя выклiкi"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"Толькi выходныя выклiкi"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"Толькі прапушчаныя выклiкi"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Немагчыма падлучыцца да сервера галасавой пошты."</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Немагч. далучыцца да сервера гал. пошты. Нов. галас. павед. чак."</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Налада галасавой пошты."</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Аўдыё недаступнае."</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Стварыць"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Выкл. гал. пошту"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Самая нiзкая хуткасць"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"Нiзкая хуткасць"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"Звычайная хуткасць"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"Высокая хуткасць"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Максімальная хуткасць"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"( <xliff:g id="COUNT">%1$d</xliff:g> ) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"Выбар нумару"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"Выбар нумару"</string>
-    <string name="make_primary" msgid="5829291915305113983">"Запомніць гэты выбар"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"адзін"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"два"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"тры"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"чатыры"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"пяць"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"шэсць"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"сем"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"восем"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"дзевяць"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"зорка"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"Фунт"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"галасавая пошта"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"пошук"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"набор"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"нумар для набору"</string>
-    <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
-    <skip />
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"Дадатковыя параметры"</string>
-    <!-- no translation found for action_menu_dialpad_button (1425910318049008136) -->
-    <skip />
-    <string name="menu_copy" msgid="6108677035381940698">"Капіраваць"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Паказаць толькі выходныя"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"Паказаць толькі ўваходныя"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"Паказаць толькі прапушчаныя"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Паказаць толькі галас. пошту"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"Паказаць усе выклікі"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"Дадаць 2-секундную паўзу"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Дадаецца, чакайце"</string>
-    <string name="call_settings" msgid="7666474782093693667">"Налады"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"Новы кантакт"</string>
-    <!-- no translation found for menu_allContacts (6948308384034051670) -->
-    <skip />
-    <string name="callDetailTitle" msgid="5340227785196217938">"Падрабязнасці выкліку"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"Не атрымалася прачытаць падрабязнасці запытанага выкліка."</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Выкарыстанне тонавай клавіятуры"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Звярнуцца да бягучага выкліку"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Дадаць выклік"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"Уваходны выклік"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"Выходны выклік"</string>
-    <string name="type_missed" msgid="2720502601640509542">"Прапушчаны выклік"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"Галасавая пошта"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"Уваходныя выклікі"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"Прайграць паведамленне галасавой пошты"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Уваходныя выклікі"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Выходны выклік"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"Прапушчаныя выклікі"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"Галасавая пошта"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Дадаць кантакт"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"Прагледзець кантакт <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="description_call" msgid="3443678121983852666">"Выклік карыстальнiка <xliff:g id="NAME">%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>
-    <!-- no translation found for description_start_voice_search (520539488194946012) -->
-    <skip />
-    <!-- no translation found for call_log_empty_gecode (2019639420045039861) -->
-    <skip />
-    <string name="menu_callNumber" msgid="997146291983360266">"Выклікаць <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="unknown" msgid="740067747858270469">"Невядомы"</string>
-    <string name="voicemail" msgid="3851469869202611441">"Галасавая пошта"</string>
-    <string name="private_num" msgid="6374339738119166953">"Прыватны нумар"</string>
-    <string name="payphone" msgid="4864313342828942922">"Аплата тэлефона"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Выкарыстаць клавіятуру для набору нумара"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"НВыберыце, каб дадаць выклік"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> хв. <xliff:g id="SECONDS">%s</xliff:g> с."</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Выклік не зроблены"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Каб наладзіць галасавую пошту, націсніце \"Меню\" i перайдзiце ў налады."</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Каб зрабiць выклік галасавой пошты, спачатку адключыце рэжым палёту."</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"Загрузка..."</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Загрузка з SIM-карты..."</string>
-    <string name="simContacts_title" msgid="27341688347689769">"Кантакты SIM-карты"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"Каб выкарыстоўваць гэту функцыю, паўторна ўключыце прыкладанне \"Кантакты\"."</string>
-    <!-- no translation found for dialer_hint_find_contact (8798845521253672403) -->
-    <skip />
-    <!-- no translation found for call_log_all_title (3566738938889333307) -->
-    <skip />
-    <!-- no translation found for call_log_missed_title (4541142293870638971) -->
-    <skip />
-    <!-- no translation found for recentMissed_empty (5427113551557296665) -->
-    <skip />
-    <!-- no translation found for recentVoicemails_empty (5163114119598014048) -->
-    <skip />
-    <!-- no translation found for show_all_contacts (1732256558071778056) -->
-    <skip />
-    <!-- no translation found for show_favorites_only (5520072531022614595) -->
-    <skip />
-    <!-- no translation found for call_log_activity_title (4612824396355272023) -->
-    <skip />
-    <!-- no translation found for dialpad_0_number (8859392433961251108) -->
-    <skip />
-    <!-- no translation found for dialpad_1_number (6536740525419909212) -->
-    <skip />
-    <!-- no translation found for dialpad_2_number (4941546415280852148) -->
-    <skip />
-    <!-- no translation found for dialpad_3_number (6539414865185536881) -->
-    <skip />
-    <!-- no translation found for dialpad_4_number (979988372051042362) -->
-    <skip />
-    <!-- no translation found for dialpad_5_number (5492272478939926734) -->
-    <skip />
-    <!-- no translation found for dialpad_6_number (8044579516869379093) -->
-    <skip />
-    <!-- no translation found for dialpad_7_number (4175113016564167123) -->
-    <skip />
-    <!-- no translation found for dialpad_8_number (7949849563865941621) -->
-    <skip />
-    <!-- no translation found for dialpad_9_number (4377059952097526576) -->
-    <skip />
-    <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
-    <skip />
-    <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
-    <skip />
-    <!-- no translation found for favorite_hidden (5011234945140912047) -->
-    <skip />
-    <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
-    <skip />
-    <!-- no translation found for search_shortcut_call_number (7277194656832895870) -->
-    <skip />
-    <!-- no translation found for search_shortcut_add_to_contacts (1853716708655789069) -->
-    <skip />
-    <!-- no translation found for num_missed_calls (8081736535604293886) -->
-    <skip />
-    <!-- no translation found for no_favorites (5212485868783382971) -->
-    <skip />
-    <!-- no translation found for contact_tooltip (7817483485692282287) -->
-    <skip />
-    <!-- no translation found for description_dismiss (2146276780562549643) -->
-    <skip />
-</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 419a191..cff8c1d 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"звезда"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"нула"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"лира"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"гласова поща"</string>
     <string name="description_search_button" msgid="3660807558587384889">"търсене"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"набиране"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"назад"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"номер за набиране"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"История на обажданията"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Още опции"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Показване само на пропуснатите"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Показване само на гл. поща"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Показване на всички обаждания"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Добавяне на контакт"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Добавяне на 2-сек пауза"</string>
     <string name="add_wait" msgid="3360818652790319634">"Добавяне на изчакване"</string>
     <string name="call_settings" msgid="7666474782093693667">"Настройки"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Изходящо обаждане"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропуснато обаждане"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Гласова поща"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Добавяне на контакт"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Преглед на контактa <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Обаждане до <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Подробности за контакта за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Подробности за обаждането"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Нова гласова поща."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Обаждане на <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Неизвестен"</string>
     <string name="voicemail" msgid="3851469869202611441">"Гласова поща"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Зарежда се от SIM карта..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Контакти от SIM карта"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Активирайте отново приложението Хора, за да използвате тази функция."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Гласовото търсене не е налице."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Не може да се осъществи телефонно обаждане, защото приложението Телефон е деактивирано."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Няма инсталирано приложение за обработване на избраното действие."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Въведете име или тел. номер"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Всички"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуснати"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Няма скорошни пропуснати обаждания."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Няма скорошни гласови съобщения."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Показване на всички контакти"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Показване само на любимите"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"История"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Всички"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуснати"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Гл. поща"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Бързо набиране"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Скорошни"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Контакти"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Всички контакти"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Всички контакти"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Премахнато от любимите"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Отмяна"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Обаждане на <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Добавяне в контактите"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Преглед на цялата история на обажданията"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> нови пропуснати обаждания"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Любимите и контактите, на\nкоито се обаждате често, ще се показват тук.\nЗапочнете да извършвате обаждания."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Докоснете изображението, за да видите всички номера, или натиснете и задръжте, за да пренаредите"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Отхвърляне"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Премахване"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Бързо набиране"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ВСИЧКИ КОНТАКТИ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ОБРАТНО ОБАЖДАНЕ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ИЗТРИВАНЕ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ПРОСЛУШВАНЕ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропуснато обаждане от <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Отговорено обаждане от <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Обаждане до <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Обратно обаждане до <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Прослушване на гласовата поща от <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Изтриване на записа за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> от списъка с обажданията"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Записът е изтрит от списъка с обаждания."</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index bb658ad..82e1ccb 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"destaca"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"coixinet"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"correu de veu"</string>
     <string name="description_search_button" msgid="3660807558587384889">"cerca"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"marca"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"retrocés"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número que es marcarà"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de trucades"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Més opcions"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Mostra només trucades perdudes"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostra només missatges de veu"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Mostra totes les trucades"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Afegeix un contacte"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Afegeix una pausa de 2 segons"</string>
     <string name="add_wait" msgid="3360818652790319634">"Afegeix espera"</string>
     <string name="call_settings" msgid="7666474782093693667">"Configuració"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Trucada sortint"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Trucada perduda"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Missatge de veu"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Afegeix un contacte"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Visualitza el contacte <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Truca a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Dades de contacte de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detalls de la trucada"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Correu de veu nou"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Truca al <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconegut"</string>
     <string name="voicemail" msgid="3851469869202611441">"Correu de veu"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"S\'està carregant des de la targeta SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contactes de la targeta SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Torna a activar l\'aplicació Persones per utilitzar aquesta funció."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"La cerca per veu no està disponible."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"No es pot fer una trucada telefònica perquè s\'ha desactivat l\'aplicació de telèfon."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"No hi ha cap aplicació instal·lada disponible per gestionar l\'acció seleccionada."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Escriu un nom o un número de telèfon"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Totes"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdudes"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"No hi ha cap trucada perduda recent."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hi ha cap missatge de veu recent."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Mostra tots els contactes"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostra només els preferits"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Totes"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdudes"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Bústia veu"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Marcatge ràpid"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recents"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contactes"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Tots els contactes"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Tots els contactes"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Eliminat dels preferits"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Desfés"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Truca al <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Afegeix als contactes"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Consulta tot l\'historial de trucades"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> trucades perdudes noves"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Aquí es mostraran els preferits i els contactes\nals quals truques sovint.\nJa pots començar a trucar."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Toca la imatge per veure tots els números o bé mantén-la premuda per reorganitzar"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Omet"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Suprimeix"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Marcatge ràpid"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOTS ELS CONTACTES"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"TORNA LA TRUCADA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SUPRIMEIX"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ESCOLTA"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Trucada perduda de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Trucada resposta de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Trucada a: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Torna a trucar a: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Escolta el missatge a la bústia de veu de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Suprimeix l\'entrada del registre de trucades de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"S\'ha suprimit l\'entrada del registre de trucades."</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index ee643da..42fa820 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"hvězdička"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"hlasová schránka"</string>
     <string name="description_search_button" msgid="3660807558587384889">"vyhledat"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"vytáčení"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"číslo, které chcete vytočit"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historie volání"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Více možností"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Zobrazit pouze zmeškané"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Zobrazit pouze hlas. schránku"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Zobrazit všechny hovory"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Přidat kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Přidat pauzu 2 s"</string>
     <string name="add_wait" msgid="3360818652790319634">"Přidat čekání"</string>
     <string name="call_settings" msgid="7666474782093693667">"Nastavení"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odchozí hovor"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Zmeškaný hovor"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Hlasová schránka"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Přidat kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Zobrazit kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Volat kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Podrobnosti kontaktu pro <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Podrobnosti hovoru"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nová hlasová zpráva"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</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>
     <string name="voicemail" msgid="3851469869202611441">"Hlasová schránka"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Načítání ze SIM karty..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakty na SIM kartě"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Chcete-li použít tuto funkci, znovu povolte aplikaci Lidé."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Hlasové vyhledávání není k dispozici"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Telefonický hovor nelze uskutečnit, protože aplikace Telefon byla zakázána."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Není k dispozici žádná nainstalovaná aktivita, pomocí které by bylo možné vybranou akci provést."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Zadejte jméno nebo tel. číslo"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Všechny"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nemáte žádné nedávno zmeškané hovory."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nemáte žádné nedávné hlasové zprávy."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Zobrazit všechny kontakty"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Zobrazit pouze oblíbené"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historie"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Všechny"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Schránka"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Rychlá volba"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Poslední"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakty"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Všechny kontakty"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Všechny kontakty"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Odebráno z oblíbených"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Vrátit zpět"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Zavolat na číslo <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Přidat do kontaktů"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Zobrazení celé historie volání"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Nové zmeškané hovory: <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Zde se bude zobrazovat oblíbený obsah\na kontakty, kterým často voláte.\nStačí jen začít volat."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Zde se bude zobrazovat vaše oblíbené a často používané kontakty.\nStačí jen začít volat.\n"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Klepnutím na fotku zobrazíte všechna čísla a přidržením je můžete seřadit"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Zavřít"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Odstranit"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Rychlá volba"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VŠECHNY KONTAKTY"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"VOLAT ZPĚT"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SMAZAT"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSLOUCHAT"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Zmeškaný hovor od <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Přijatý hovor od <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Hovor s <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Zpětné volání <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Poslech hlasové schránky od <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Smazat ze seznamu hovorů záznam <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Záznam v seznamu hovorů byl smazán."</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 6bd3f72..1bcdf11 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"stjernemarker"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pund"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"telefonsvarer"</string>
     <string name="description_search_button" msgid="3660807558587384889">"søg"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"ring op"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nummer at ringe op"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Opkaldshistorik"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Flere valgmuligheder"</string>
@@ -89,8 +87,9 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Vis kun ubesvarede"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Vis kun telefonsvarerbeskeder"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Vis alle opkald"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Tilføj kontaktperson"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Tilføj pause på 2 sek."</string>
-    <string name="add_wait" msgid="3360818652790319634">"Tilføj Vent"</string>
+    <string name="add_wait" msgid="3360818652790319634">"Tilføj ventetid"</string>
     <string name="call_settings" msgid="7666474782093693667">"Indstillinger"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Ny kontaktperson"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"Alle kontaktpersoner"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Udgående opkald"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Ubesvaret opkald"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Telefonsvarer"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Tilføj kontaktperson"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Vis kontaktpersonen <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Ring til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontaktoplysninger for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Opkaldsdetaljer"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Ny talebesked."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ring til <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Ukendte"</string>
     <string name="voicemail" msgid="3851469869202611441">"Telefonsvarer"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Indlæser fra SIM-kort ..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Genaktiver applikationen Personer for at bruge denne funktion."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Stemmesøgning er ikke tilgængeligt."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Det er ikke muligt at foretage et telefonopkald, fordi applikationen Telefon er deaktiveret."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Der er ingen installerede apps til at håndtere den valgte handling."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Skriv navn eller telefonnummer"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Ubesvarede"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Ingen ubesvarede opkald."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ingen nye talebeskeder."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Vis alle kontaktpersoner"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Vis kun foretrukne"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historik"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Ubesvarede"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Talebesked"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Hurtigopkald"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Seneste"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktpersoner"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Alle kontaktpersoner"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Alle kontaktpersoner"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Fjernet fra favoritter"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Fortryd"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ring til <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Føj til kontaktpersoner"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Se komplet opkaldshistorik"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nye ubesvarede opkald"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Dine foretrukne og de kontaktpersoner, du\noftest ringer til, vises her.\nSå gå du bare i gang med at ringe."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Dine foretrukne og de kontaktpersoner,\ndu oftest ringer til, vises her.\nSå gå du bare i gang med at ringe."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tryk på billedet for at se alle telefonnumre, eller tryk på billedet, og hold det nede, for at omarrangere"</string>
-    <string name="description_dismiss" msgid="2146276780562549643">"Annullerer"</string>
+    <string name="description_dismiss" msgid="2146276780562549643">"Annuller"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Fjern"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Hurtigopkald"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE KONTAKTPERSONER"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RING TILBAGE"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SLET"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LYT"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Ubesvaret opkald fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Opkald besvaret fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Opkald til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Ring tilbage til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Lyt til indtalt besked fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Slet <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> fra opkaldslisten"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Navn eller nummer blev slettet fra opkaldslisten."</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index a50055b..2419010 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"Markierung"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"Pfund"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"Mailbox"</string>
     <string name="description_search_button" msgid="3660807558587384889">"Suchen"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"wählen"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Rücktaste"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"Zu wählende Nummer"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Anrufliste"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mehr Optionen"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Nur entgangene Anrufe anzeigen"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Nur Mailbox-Nachr. anzeigen"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Alle Anrufe anzeigen"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Kontakt hinzufügen"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2 Sekunden Pause hinzufügen"</string>
     <string name="add_wait" msgid="3360818652790319634">"Warten hinzufügen"</string>
     <string name="call_settings" msgid="7666474782093693667">"Einstellungen"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ausgehender Anruf"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Entgangener Anruf"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Mailbox-Nachricht"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Kontakt hinzufügen"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Kontakt <xliff:g id="NAME">%1$s</xliff:g> anzeigen"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> anrufen"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontaktdetails für <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Anrufdetails"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Neue Mailbox-Nachricht"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> wählen"</string>
     <string name="unknown" msgid="740067747858270469">"Unbekannt"</string>
     <string name="voicemail" msgid="3851469869202611441">"Mailbox"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ladevorgang von SIM-Karte läuft..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakte auf SIM-Karte"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Kontakte-App zur Verwendung dieser Funktion wieder aktivieren"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Die Sprachsuche ist nicht verfügbar."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Es kann kein Anruf getätigt werden, da die App \"Telefon\" deaktiviert wurde."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Zur Verarbeitung der ausgewählten Aktion ist keine installierte Aktivität verfügbar."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Namen/Telefonnummer eingeben"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Entgangen"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Keine entgangenen Anrufe"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Keine Mailbox-Nachrichten"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Alle Kontakte anzeigen"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Nur Favoriten anzeigen"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Verlauf"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Entgangen"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Mailbox-Nachrichten"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Kurzwahl"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Neueste"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakte"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Alle Kontakte"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Alle Kontakte"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Aus Favoriten entfernt"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Rückgängig machen"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> wählen"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Zu Kontakten hinzufügen"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Gesamte Anrufliste ansehen"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> neue verpasste Anrufe"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Sobald Sie Anrufe getätigt haben,\nwerden hier Favoriten und Kontakte angezeigt,\ndie Sie häufig anrufen."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Sobald Sie Anrufe getätigt haben,\nsehen Sie hier Favoriten und Kontakte,\ndie Sie häufig anrufen."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Auf Bild tippen, um alle Nummern zu sehen, oder berühren und halten, um Anordnung zu ändern"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ablehnen"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Entfernen"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Kurzwahl"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"Alle Kontakte"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"Zurückrufen"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"Löschen"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"Anhören"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Verpasster Anruf von <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Anruf von <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> angenommen"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Ausgehender Anruf an <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> zurückrufen"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Mailboxnachricht von <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> anhören"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Anruflisteneintrag für <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> löschen"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Anruflisteneintrag gelöscht"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 061612b..a6a1036 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -28,7 +28,7 @@
     <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Κατάργηση από το αρχείο καταγραφής κλήσεων"</string>
     <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Εκκαθάριση αρχείου καταγραφής κλήσεων"</string>
     <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Διαγραφή αυτόματου τηλεφωνητή"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Κοινή χρήση αυτόμ. τηλεφωνητή"</string>
+    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Κοινοποίηση αυτόμ. τηλεφωνητή"</string>
     <string name="recentCalls_empty" msgid="247053222448663107">"Το αρχείο καταγραφής κλήσεων είναι κενό."</string>
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Εκκαθάριση αρχείου;"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Όλα τα αρχεία κλήσεων θα διαγραφούν."</string>
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"αστέρι"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"μηδέν"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"σύμβολο δίεσης"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"αυτόματος τηλεφωνητής"</string>
     <string name="description_search_button" msgid="3660807558587384889">"αναζήτηση"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"κλήση"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"αριθμός για κλήση"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Ιστορικό κλήσεων"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Περισσότερες επιλογές"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Εμφάνιση μόνο αναπάντητων"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Εμφ. μόνο μην. αυτόμ. τηλεφων."</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Εμφάνιση όλων"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Προσθήκη επαφής"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Προσθήκη παύσης 2 δευτερολέπτων"</string>
     <string name="add_wait" msgid="3360818652790319634">"Προσθήκη αναμονής"</string>
     <string name="call_settings" msgid="7666474782093693667">"Ρυθμίσεις"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Εξερχόμενη κλήση"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Αναπάντητη κλήση"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Αυτόματος τηλεφωνητής"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Προσθήκη επαφής"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Προβολή επαφής <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Κλήση του χρήστη <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Στοιχεία επικοινωνίας του <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Λεπτομέρειες κλήσης"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Νέο μήνυμα στον αυτόματο τηλεφωνητή."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Κλήση του αριθμού <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Άγνωστος"</string>
     <string name="voicemail" msgid="3851469869202611441">"Αυτόματος τηλεφωνητής"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Φόρτωση από κάρτα SIM…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Επαφές στην κάρτα SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Ενεργοποιήστε ξανά την εφαρμογή People για να χρησιμοποιήσετε αυτήν τη λειτουργία."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Η φωνητική αναζήτηση δεν είναι διαθέσιμη."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Δεν είναι δυνατή η πραγματοποίηση τηλεφωνικής κλήσης επειδή η εφαρμογή \"Τηλέφωνο\" έχει απενεργοποιηθεί."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Δεν υπάρχει διαθέσιμη εγκατεστημένη δραστηριότητα για το χειρισμό της επιλεγμένης ενέργειας."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Εισαγάγετε όνομα ή τηλέφωνο"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Όλα"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Αναπάντητη"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Δεν υπάρχουν πρόσφατες αναπάντητες κλήσεις."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Δεν υπάρχουν πρόσφατα φωνητικά μηνύματα."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Εμφάνιση όλων των επαφών"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Εμφάνιση μόνο των αγαπημένων"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Ιστορικό"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Όλα"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Αναπάντητη"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Φωνητικό μήνυμα"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Ταχεία κλήση"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Πρόσφατα"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Επαφές"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Όλες οι επαφές"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Όλες οι επαφές"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Καταργήθηκε από τα αγαπημένα"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Αναίρεση"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Κλήση του αριθμού <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Προσθήκη στις επαφές"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Προβολή πλήρους ιστορικού κλήσεων"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> νέες αναπάντητες κλήσεις"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Οι αγαπημένες και οι επαφές που\nκαλείτε συχνά θα εμφανίζονται εδώ.\nΞεκινήστε τις κλήσεις."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Πατήστε την εικόνα για να δείτε όλους τους αριθμούς ή πατήστε παρατεταμένα για αναδιάταξη"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Παράβλεψη"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Κατάργηση"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Ταχεία κλήση"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ΟΛΕΣ ΟΙ ΕΠΑΦΕΣ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ΕΠΑΝΑΚΛΗΣΗ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ΔΙΑΓΡΑΦΗ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ΑΚΡΟΑΣΗ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Αναπάντητη κλήση από <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Ληφθείσα κλήση από <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Κλήση στον αριθμό <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Επανάκληση <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Ακρόαση μηνύματος αυτόματου τηλεφωνητή από το χρήστη <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Διαγραφή καταχώρισης αρχείου καταγραφής κλήσεων για τον αριθμό <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Το αρχείο καταγραφής κλήσεων διαγράφηκε."</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index b8d7c81..803ad8e 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"Star"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
     <string name="description_search_button" msgid="3660807558587384889">"search"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"number to dial"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Call History"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"More options"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Show missed only"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Show voicemails only"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Show all calls"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Add contact"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Add 2-sec pause"</string>
     <string name="add_wait" msgid="3360818652790319634">"Add wait"</string>
     <string name="call_settings" msgid="7666474782093693667">"Settings"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Outgoing call"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Missed call"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Add contact"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"View contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Call <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Call details"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"New voicemail."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Unknown"</string>
     <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Loading from SIM card…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM card contacts"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Re-enable the People application to use this feature."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Voice search is not available."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Cannot make a phone call because the Phone application has been disabled."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"No installed activity available to handle selected action."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Type a name or phone number"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"No recent missed calls."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"No recent voicemails."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Show all  contacts"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Show favourites only"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"History"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Speed Dial"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recents"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"All contacts"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"All contacts"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Removed from favourites"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Undo"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Add to contacts"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"View full call history"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> new missed calls"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Favourites &amp; contacts that you\ncall often will show here.\nSo, start calling."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tap image to see all numbers or press and hold to reorder"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Dismiss"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Remove"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Speed Dial"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALL CONTACTS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"CALL BACK"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"DELETE"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LISTEN"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Missed call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Answered call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Call to <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Call back <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Listen to voicemail from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Delete call log entry for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Call log entry deleted."</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index b8d7c81..803ad8e 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"Star"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
     <string name="description_search_button" msgid="3660807558587384889">"search"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"number to dial"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Call History"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"More options"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Show missed only"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Show voicemails only"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Show all calls"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Add contact"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Add 2-sec pause"</string>
     <string name="add_wait" msgid="3360818652790319634">"Add wait"</string>
     <string name="call_settings" msgid="7666474782093693667">"Settings"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Outgoing call"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Missed call"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Add contact"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"View contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Call <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Call details"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"New voicemail."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Unknown"</string>
     <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Loading from SIM card…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM card contacts"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Re-enable the People application to use this feature."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Voice search is not available."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Cannot make a phone call because the Phone application has been disabled."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"No installed activity available to handle selected action."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Type a name or phone number"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"No recent missed calls."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"No recent voicemails."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Show all  contacts"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Show favourites only"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"History"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Speed Dial"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recents"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"All contacts"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"All contacts"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Removed from favourites"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Undo"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Add to contacts"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"View full call history"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> new missed calls"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Favourites &amp; contacts that you\ncall often will show here.\nSo, start calling."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tap image to see all numbers or press and hold to reorder"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Dismiss"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Remove"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Speed Dial"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALL CONTACTS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"CALL BACK"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"DELETE"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LISTEN"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Missed call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Answered call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Call to <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Call back <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Listen to voicemail from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Delete call log entry for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Call log entry deleted."</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index cc5620b..9fa4ee0 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"estrella"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"cero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"buzón de voz"</string>
     <string name="description_search_button" msgid="3660807558587384889">"búsqueda"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"retroceso"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número para marcar"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de llamadas"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Más opciones"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar solo perdidas"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostrar solo mensajes de voz"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas las llamadas"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Agregar contacto"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Agregar pausa de 2 segundos"</string>
     <string name="add_wait" msgid="3360818652790319634">"Agregar espera"</string>
     <string name="call_settings" msgid="7666474782093693667">"Configuración"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Llamada saliente"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Llamada perdida"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Mensaje de voz"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Agregar contacto"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Ver contacto <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Llamar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Datos de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detalles de la llamada"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Buzón de voz nuevo"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Llamar al <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconocido"</string>
     <string name="voicemail" msgid="3851469869202611441">"Correo de voz"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Cargando desde tarjeta SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Vuelve a activar la aplicación Contactos para usar esta función."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"No está disponible la búsqueda por voz."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"No se pueden realizar llamadas porque se inhabilitó la aplicación Teléfono."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"No hay ninguna actividad instalada para procesar la acción seleccionada."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ingresa un nombre o teléfono."</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"No hay llamadas perdidas recientes."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hay mensajes del buzón de voz recientes."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos los contactos"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostrar solo favoritos"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Buzón voz"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Marcado rápido"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recientes"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contactos"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Todos los contactos"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Todos los contactos"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Eliminado de favoritos"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Deshacer"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Llamar al <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Agregar a contactos"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Ver historial de llamadas completo"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> llamadas perdidas nuevas"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Aquí se mostrarán los favoritos y los contactos\na los que llamas con frecuencia.\nYa puedes empezar a llamar."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Presiona la imagen para ver todos los números o mantenla presionada para cambiar el orden."</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Descartar"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Eliminar"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Marcado rápido"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS LOS CONTACTOS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"DEVOLVER LLAMADA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ELIMINAR"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ESCUCHAR"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Llamada perdida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Llamada respondida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Llamar a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Devolver llamada a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Escuchar buzón de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Eliminar entrada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> del registro de llamadas"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada del registro de llamada eliminada"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b2adb2f..acf13d1 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"estrella"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"cero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"buzón de voz"</string>
     <string name="description_search_button" msgid="3660807558587384889">"buscar"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"retroceder un espacio"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número que se va a marcar"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de llamadas"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Más opciones"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar solo llamadas perdidas"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Solo mensajes de voz"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas las llamadas"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Añadir contacto"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Añadir pausa de 2 segundos"</string>
     <string name="add_wait" msgid="3360818652790319634">"Añadir espera"</string>
     <string name="call_settings" msgid="7666474782093693667">"Ajustes"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Llamada saliente"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Llamada perdida"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Buzón de voz"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Añadir contacto"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Ver contacto <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Llamar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Información de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detalles de la llamada"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nuevo mensaje de voz."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Llamar a <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconocidos"</string>
     <string name="voicemail" msgid="3851469869202611441">"Buzón de voz"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Cargando desde tarjeta SIM…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Vuelve a habilitar la aplicación Contactos para usar esta función."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"La búsqueda por voz no está disponible."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"No se puede hacer llamadas porque se ha inhabilitado la aplicación Teléfono."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Ninguna actividad instalada puede procesar la acción seleccionada."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Escribe un nombre o teléfono"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"No hay llamadas perdidas recientes."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hay mensajes de voz recientes."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos los contactos"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostrar solo favoritos"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Mensaje de voz"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Marcación rápida"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recientes"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contactos"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Todos los contactos"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Todos los contactos"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Eliminado de favoritos"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Deshacer"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Llamar a <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Añadir a contactos"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Ver historial de llamadas completo"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> llamadas perdidas nuevas"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Los favoritos y contactos a los que\nllamas con frecuencia se mostrarán aquí.\nYa puedes llamar."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Los favoritos y contactos a los que\nllamas con frecuencia se mostrarán aquí.\n"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Toca la imagen para ver todos los números o mantenla pulsada para cambiar el orden"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ignorar"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Eliminar"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Marcación rápida"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS LOS CONTACTOS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"DEVOLVER LLAMADA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ELIMINAR"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ESCUCHAR"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Llamada perdida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Llamada respondida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Llamar a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Devolver llamada a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Escuchar el buzón de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Eliminar entrada del registro de llamadas de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada del registro de llamada eliminada."</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 8a37626..7d36838 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"tärn"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"nael"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"kõnepost"</string>
     <string name="description_search_button" msgid="3660807558587384889">"otsing"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"Helista"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"tagasilüke"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"number valimiseks"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Kõneajalugu"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Rohkem valikuid"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Kuva ainult vastamata"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Kuva ainult kõnepostisõnumeid"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Kuva kõik kõned"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Lisa kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Lisa 2-sekundiline paus"</string>
     <string name="add_wait" msgid="3360818652790319634">"Lisa ootama"</string>
     <string name="call_settings" msgid="7666474782093693667">"Seaded"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Väljuv kõne"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Vastamata kõne"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Kõnepost"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Lisa kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Kuva kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Helista: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> üksikasjad"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Kõne üksikasjad"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Uus kõnepost."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Helistage: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tundmatu"</string>
     <string name="voicemail" msgid="3851469869202611441">"Kõnepost"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laadimine SIM-kaardilt ..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM-kaardi kontaktid"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Funktsiooni kasutamiseks lubage uuesti rakendus Inimesed."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Häälotsing pole saadaval"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Helistada ei saa, sest telefonirakendus on keelatud."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Pole installitud ühtegi rakendust, mis suudaks käsitleda valitud tegevust."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Sisestage nimi/telefoninumber"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Kõik"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Vastamata"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Pole ühtegi hiljutist vastamata kõnet."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Pole ühtegi hiljutist kõnepostiteadet."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Kuva kõik kontaktid"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Kuva ainult lemmikud"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Ajalugu"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Kõik"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Vastamata"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Kõnepost"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Kiirvalimine"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Hiljutised"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktid"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Kõik kontaktid"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Kõik kontaktid"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Eemaldatud lemmikute hulgast"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Võta tagasi"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Helista <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Lisa kontaktidesse"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Kogu kõneajaloo vaatamine"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> uus/uut vastamata kõne(t)"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Siin kuvatakse lemmikud ja kontaktid,\nkellele sageli helistate.\nVõite hakata helistama."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Puudutage kujutist, et näha kõiki numbreid, või vajutage ja hoidke all ümberkorraldamiseks"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Loobu"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Eemalda"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Kiirvalimine"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"KÕIK KONTAKTID"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"HELISTA TAGASI"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"KUSTUTA"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"KUULA"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Vastamata kõne: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Vastatud kõne: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Helistamine: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Tagasi helistamine: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> kõneposti kuulamine"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> kõnelogi kande kustutamine"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Kõnelogi kanne on kustutatud."</string>
 </resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
deleted file mode 100644
index 60c967b..0000000
--- a/res/values-et/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"Dialer"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"Kõnelogi"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"Tekstsõnumi saatmine"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"Helista kasutajale <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Muuda enne helistamist numbrit"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"Lisa kontaktidesse"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Eemalda kõnelogist"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Kustuta kõnelogi"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Kustuta kõnepost"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Jaga kõneposti"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"Kõnelogi on tühi."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Kustutada kõnelogi?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Kõik teie kõnesalvestised kustutatakse."</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Kõnelogi kustutamine ..."</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"Kõnepost"</item>
-    <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> kõnepostisõnumit"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Esitamine"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Uus kõnepostisõnum kasutajalt <xliff:g id="CALLER">%1$s</xliff:g>"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"Kõnepostisõnumi esitamine ebaõnnestus."</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"Puhverdamine ..."</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"Kõneposti toomine ..."</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Kõneposti toomine ebaõnnestus."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"Ainult kõnepostiga kõned"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"Ainult sissetulevad kõned"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"Ainult väljuvad kõned"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"Ainult vastamata kõned"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Kõnepostiserveriga ei saa ühendust."</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Kõnepostiserveriga ei saa ühendust. Uued kõnepostisõnumid ootel."</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Seadistage oma kõnepost."</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Heli pole saadaval."</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Seadistamine"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Helista kõneposti"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Aeglaseim kiirus"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"Aeglane kiirus"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"Tavaline kiirus"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"Kiire kiirus"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Kiireim kiirus"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"Valige number"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"Valige number"</string>
-    <string name="make_primary" msgid="5829291915305113983">"Pea see valik meeles"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"üks"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"kaks"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"kolm"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"neli"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"viis"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"kuus"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"seitse"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"kaheksa"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"üheksa"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"tärn"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"nael"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"kõnepost"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"otsing"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"Helista"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"tagasilüke"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"number valimiseks"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Kõneajalugu"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"Rohkem valikuid"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"valimisklahvistik"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"Kopeeri"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Kuva ainult väljuvad"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"Kuva ainult sissetulevad"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"Kuva ainult vastamata"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Kuva ainult kõnepostisõnumeid"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"Kuva kõik kõned"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"Lisa 2-sekundiline paus"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Lisa ootama"</string>
-    <string name="call_settings" msgid="7666474782093693667">"Seaded"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"Uus kontakt"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"Kõne üksikasjad"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"Taotletud kõne üksikasju ei saa lugeda."</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Kasuta puutetooniga klahvistikku"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Tagasi käimasolevale kõnele"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Lisa kõne"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"Sissetulev kõne"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"Väljuv kõne"</string>
-    <string name="type_missed" msgid="2720502601640509542">"Vastamata kõne"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"Kõnepost"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"Sissetulevad kõned"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"Esita kõnepostisõnum"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Sissetulev kõne"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Väljuv kõne"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"Vastamata kõne"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"Kõnepost"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Lisa kontakt"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"Kuva kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="description_call" msgid="3443678121983852666">"Helista: <xliff:g id="NAME">%1$s</xliff:g>"</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_start_voice_search" msgid="520539488194946012">"Häälotsingu alustamine"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"Helistage: <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="unknown" msgid="740067747858270469">"Tundmatu"</string>
-    <string name="voicemail" msgid="3851469869202611441">"Kõnepost"</string>
-    <string name="private_num" msgid="6374339738119166953">"Varjatud number"</string>
-    <string name="payphone" msgid="4864313342828942922">"Telefoniautomaat"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Kasutage valimiseks klaviatuuri"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"Valige kõne lisamiseks"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Kõnet ei tehtud"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Kõneposti seadistamiseks minge valikusse Menüü &gt; Seaded."</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Kõneposti kuulamiseks lülitage lennurežiim välja."</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"Laadimine ..."</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laadimine SIM-kaardilt ..."</string>
-    <string name="simContacts_title" msgid="27341688347689769">"SIM-kaardi kontaktid"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"Funktsiooni kasutamiseks lubage uuesti rakendus Inimesed."</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Sisestage nimi või telefoninumber"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Kõik"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Vastamata"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"Pole ühtegi hiljutist vastamata kõnet."</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"Pole ühtegi hiljutist kõnepostiteadet."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Kuva kõik kontaktid"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"Kuva ainult lemmikud"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"Ajalugu"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"Kõik kontaktid"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Kõik kontaktid"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"Lemmikute hulgast eemaldatud"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"Võta tagasi"</string>
-</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index d7df7f6..e3659db 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ستاره"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"صفر"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"پوند"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"پست صوتی"</string>
     <string name="description_search_button" msgid="3660807558587384889">"جستجو"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"شماره گیری"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"شماره برای شماره گیری"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"سابقه تماس"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"گزینه‌های بیشتر"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"فقط نمایش بی‌پاسخ"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"فقط نمایش پست‌های صوتی"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"نمایش همه مکالمات"</string>
+    <string name="add_contact" msgid="8875804371377471164">"افزودن مخاطب"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"افزودن یک مکث ۲ ثانیه‌ای"</string>
     <string name="add_wait" msgid="3360818652790319634">"افزودن انتظار"</string>
     <string name="call_settings" msgid="7666474782093693667">"تنظیمات"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"تماس خروجی"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"تماس بی‌پاسخ"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"پست صوتی"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"افزودن مخاطب"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"مشاهده مخاطب <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"تماس با <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"جزئیات تماس برای <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"جزئیات تماس"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"پست صوتی جدید."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"تماس با <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ناشناس"</string>
     <string name="voicemail" msgid="3851469869202611441">"پست صوتی"</string>
@@ -125,7 +127,7 @@
     <string name="dialerDialpadHintText" msgid="5824490365898349041">"شماره گیری برای افزودن یک تماس"</string>
     <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه و <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
     <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"تماس ارسال نشد"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راه‌اندازی پست صوتی به منو &gt; تنظیمات بروید."</string>
+    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"‏برای راه‌اندازی پست صوتی به منو &gt; تنظیمات بروید."</string>
     <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"برای تماس با پست صوتی، ابتدا حالت هواپیما را غیرفعال کنید."</string>
     <string name="contact_list_loading" msgid="5488620820563977329">"در حال بارگیری..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"در حال بارگیری سیم کارت..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"مخاطبین سیم کارت"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"برای استفاده از این ویژگی، برنامه «افراد» را دوباره فعال کنید."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"جستجوی صدا در دسترس نیست."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"برقراری تماس تلفنی ممکن نیست، زیرا برنامه تلفن غیرفعال شده است."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"هیچ فعالیت نصب شده‌ای برای انجام اقدام انتخاب شده در دسترس نیست."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"نام یا  شماره تلفن را تایپ کنید"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"همه موارد"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"بی‌پاسخ"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"اخیراً هیچ تماس بی‌پاسخی نداشته‌اید."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"اخیراً هیچ پست صوتی نداشته‌اید."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"نمایش همه مخاطبین"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"فقط نمایش موارد دلخواه"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"سابقه"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"۰"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"۱"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"۲"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"۳"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"۴"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"۵"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"۶"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"۷"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"۸"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"۹"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"همه موارد"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"بی‌پاسخ"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"پست صوتی"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"شماره‌گیری سریع"</string>
+    <string name="tab_recents" msgid="929949073851377206">"موارد اخیر"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"مخاطبین"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"همه مخاطبین"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"همه مخاطبین"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"از موارد دلخواه حذف شد"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"لغو"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"تماس با <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"افزودن به مخاطبین"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"مشاهده سابقه تماس به صورت کامل"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> تماس‌ بی‌پاسخ جدید"</string>
     <string name="no_favorites" msgid="5212485868783382971">"موارد دلخواه و مخاطبینی که اغلب با\nآنها تماس می‌گیرید اینجا نشان داده می‌شوند.\nبنابراین شروع به تماس گرفتن کنید."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"برای مشاهده همه شماره‌ها روی تصویر ضربه بزنید یا برای مرتب‌سازی مجدد فشار دهید و نگه‌دارید"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"رد کردن"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"حذف"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"شماره‌گیری سریع"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"همه مخاطبین"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"تماس"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"حذف"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"گوش دادن"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"تماس‌ بی‌پاسخ از <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>،‏ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>،‏ <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"تماس‌ پاسخ‌داده شده از <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>،‏ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>،‏ <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"تماس‌ به <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>،‏ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>،‏ <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"تماس با <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"گوش دادن به پست صوتی از <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"حذف ورودی گزارش تماس مربوط به <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"ورودی گزارش تماس حذف شد."</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 5454be6..1d4e2b6 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"tähti"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nolla"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"punta"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"vastaaja"</string>
     <string name="description_search_button" msgid="3660807558587384889">"haku"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"soita"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"askelpalautin"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numero johon soitetaan"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Soittohistoria"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Lisää vaihtoehtoja"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Näytä vain vastaamattomat"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Näytä vain vastaajaviestit"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Näytä kaikki puhelut"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Lisää kontakti"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Lisää 2 sekunnin tauko"</string>
     <string name="add_wait" msgid="3360818652790319634">"Lisää tauko"</string>
     <string name="call_settings" msgid="7666474782093693667">"Asetukset"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Lähtevä puhelu"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Vastaamaton puhelu"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Vastaaja"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Lisää yhteystieto"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Näytä yhteystieto <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Soita: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Yhteystiedot: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Puhelun tiedot"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Uusi ääniviesti."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Soita <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tuntematon"</string>
     <string name="voicemail" msgid="3851469869202611441">"Vastaaja"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ladataan SIM-kortilta…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM-kortin yhteystiedot"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Ota Ihmiset-sovellus uudelleen käyttöön käyttääksesi tätä ominaisuutta."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Puhehaku ei ole käytettävissä."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Puhelua ei voi soittaa, koska Puhelin-sovellus on poistettu käytöstä."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Valitun toimen suoritusta varten ei ole asennettua toimintoa."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Kirjoita nimi tai puh.numero"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Kaikki"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Vastaamattomat"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Ei uusia vastaamattomia puheluita."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ei uusia viestejä vastaajassa."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Näytä kaikki yhteystiedot"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Näytä vain suosikit"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Kaikki"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Vastaamattomat"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Vastaaja"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Pikavalinta"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Viimeisimmät"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Yhteystiedot"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Kaikki yhteystiedot"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Kaikki yhteystiedot"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Poistettu suosikeista"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Kumoa"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Soita <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Lisää yhteystietoihin"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Näytä koko soittohistoria"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> uutta vastaamatonta puhelua"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Suosikit ja yhteyshenkilöt, joille\nsoitat usein, näkyvät tässä.\nAla siis soitella."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Napauta kuvaa nähdäksesi kaikki numerot tai järjestä uudelleen painamalla pitkään"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ohita"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Poista"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Pikavalinta"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"KAIKKI YHTEYSTIEDOT"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"SOITA TAKAISIN"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"POISTA"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"KUUNTELE"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Vastaamaton puhelu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Vastattu puhelu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Puhelu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Soita takaisin: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Kuuntele vastaajaviesti: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Poista puhelulokimerkintä: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Puhelulokimerkintä poistettiin."</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index ae100e7..b797056 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"étoile"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zéro"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"dièse"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"message vocal"</string>
     <string name="description_search_button" msgid="3660807558587384889">"rechercher"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"composer"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"retour arrière"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numéro à composer"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historique des appels"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Plus d\'options"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Afficher appels manqués uniq."</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Messages vocaux uniquement"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Afficher tous les appels"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Ajouter un contact"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Ajouter une pause de 2 s"</string>
     <string name="add_wait" msgid="3360818652790319634">"Ajouter Attendre"</string>
     <string name="call_settings" msgid="7666474782093693667">"Paramètres"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Appel sortant"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Appel manqué"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Messagerie vocale"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Ajouter un contact"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Afficher le contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Appeler <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Coordonnées de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Détails de l\'appel"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nouveau message vocal."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Inconnu"</string>
     <string name="voicemail" msgid="3851469869202611441">"Messagerie vocale"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Chargement depuis la carte SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Réactivez l\'application Contacts pour utiliser cette fonctionnalité."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"La recherche vocale n\'est pas accessible."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Impossible d\'effectuer un appel téléphonique, car l\'application Téléphone a été désactivée."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Aucune des applications installées ne peut effectuer l\'action sélectionnée."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Entrez un nom/no de téléphone"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Aucun appel manqué récent"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Aucun message vocal récent"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Afficher tous les contacts"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Afficher les contacts favoris uniquement"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historique"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Mess. voc."</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Composition rapide"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Récents"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Tous les contacts"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Tous les contacts"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Supprimé des favoris"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Annuler"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ajouter aux contacts"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Afficher tout l\'historique des appels"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nouveaux appels manqués"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Vos favoris et les contacts\nque vous appelez souvent sont\naffichés ici. Pourquoi ne pas les appeler?"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Touchez l\'image pour afficher tous les numéros, ou maintenez votre doigt sur l\'une d\'elles pour les réorganiser"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Fermer"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Supprimer"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Composition rapide"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOUS LES CONTACTS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RAPPELER"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SUPPRIMER"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ÉCOUTER"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Appel manqué de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> à <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Appel reçu de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> à <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Appel à <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> à <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Rappeler <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Écouter le message vocal de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Supprimer l\'entrée de journal d\'appel pour <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entrée du journal d\'appels supprimée."</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index bd54267..84814cd 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"étoile"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zéro"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"dièse"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"messagerie vocale"</string>
     <string name="description_search_button" msgid="3660807558587384889">"rechercher"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"composer"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"retour arrière"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numéro à composer"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historique des appels"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Plus d\'options"</string>
@@ -89,8 +87,9 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Afficher appels manqués uniq."</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Messages vocaux uniquement"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Afficher tous les appels"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Ajouter un contact"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Ajouter une pause de 2 s"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Ajouter Attente"</string>
+    <string name="add_wait" msgid="3360818652790319634">"Ajouter une attente"</string>
     <string name="call_settings" msgid="7666474782093693667">"Paramètres"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Nouveau contact"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"Tous les contacts"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Appel sortant"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Appel manqué"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Message vocal"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Ajouter un contact"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Afficher le contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Appeler <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Coordonnées associées à <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Détails de l\'appel"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nouveau message vocal"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Inconnu"</string>
     <string name="voicemail" msgid="3851469869202611441">"Messagerie vocale"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Chargement depuis la carte SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Réactivez l\'application Contacts pour utiliser cette fonctionnalité."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"La recherche vocale n\'est pas disponible."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Impossible d\'effectuer un appel téléphonique, car l\'application Téléphone a été désactivée."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Aucune application installée n\'est disponible pour effectuer l\'action sélectionnée."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Saisissez nom/numéro de tél."</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Aucun appel manqué récent"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Aucun message vocal récent"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Afficher tous les contacts"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Afficher les contacts ajoutés aux favoris uniquement"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historique"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Mess. vocale"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Numérotation abrégée"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Récents"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Tous les contacts"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Tous les contacts"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Supprimé des favoris."</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Annuler"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ajouter aux contacts"</string>
-    <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nouveaux appels manqués"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Les favoris et les contacts que\nvous appelez souvent s\'affichent ici.\nCommencez donc par passer des appels !"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Afficher tout l\'historique des appels"</string>
+    <string name="num_missed_calls" msgid="8081736535604293886">"Nouveaux appels manqués : <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Retrouvez ici vos favoris et\nles contacts que vous appelez souvent.\n"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Appuyer sur l\'image pour afficher tous les numéros ou appuyer de manière prolongée pour les réorganiser"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ignorer"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Supprimer"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Numérotation abrégée"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOUS LES CONTACTS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RAPPELER"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SUPPRIMER"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ÉCOUTER"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Appel manqué <xliff:g id="TIMEOFCALL">%3$s</xliff:g> (appelant : <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Appel reçu <xliff:g id="TIMEOFCALL">%3$s</xliff:g> (appelant :<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Appel émis <xliff:g id="TIMEOFCALL">%3$s</xliff:g> (destinataire : <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Rappeler le numéro ou le contact \"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>\""</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Écouter le message vocal laissé par le numéro ou le contact \"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>\""</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Supprimer l\'entrée du journal d\'appels pour <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"L\'entrée du journal d\'appels a bien été supprimée."</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f6d2a3d..4b0cd1f 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"तारा"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"शून्य"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"पाउंड"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ध्वनि मेल"</string>
     <string name="description_search_button" msgid="3660807558587384889">"खोजें"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"डायल करें"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"हटाएं"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"डायल करने के लिए नंबर"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"कॉल इतिहास"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"अधिक विकल्प"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"केवल छूटे हुए ही दिखाएं"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"केवल ध्‍वनि‍मेल दि‍खाएं"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"सभी कॉल दि‍खाएं"</string>
+    <string name="add_contact" msgid="8875804371377471164">"संपर्क जोड़ें"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2-सेकंड का विराम जोड़ें"</string>
     <string name="add_wait" msgid="3360818652790319634">"प्रतीक्षा का समय बढ़ाएं"</string>
     <string name="call_settings" msgid="7666474782093693667">"सेटिंग"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"आउटगोइंग कॉल"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"छूटी कॉल"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"ध्वनिमेल"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"संपर्क जोड़ें"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> संपर्क देखें"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> को कॉल करें"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> का संपर्क विवरण"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"कॉल विवरण"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"नया ध्वनि मेल."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> पर कॉल करें"</string>
     <string name="unknown" msgid="740067747858270469">"अज्ञात"</string>
     <string name="voicemail" msgid="3851469869202611441">"ध्वनिमेल"</string>
@@ -132,33 +134,43 @@
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"सिम कार्ड से लोड हो रहा है…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"सिम कार्ड के संपर्क"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग एप्स को पुन: सक्षम करें."</string>
+    <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग ऐप्स  को पुन: सक्षम करें."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"बोलकर खोजना उपलब्ध नहीं है."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"फ़ोन कॉल नहीं किया जा सकता क्योंकि फ़ोन एप्लिकेशन अक्षम कर दिया गया है."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"चयनित कार्यवाही का प्रबंधन करने के लिए इंस्टॉल की गई कोई भी गतिविधि उपलब्ध नहीं है."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"नाम या फ़ोन नंबर लिखें"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"सभी"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"छूटे हुए"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"हाल ही का कोई भी छूटा हुआ कॉल नहीं."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"हाल ही का कोई भी ध्वनिमेल नहीं."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"सभी संपर्क दिखाएं"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"केवल पसंदीदा दिखाएं"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"इतिहास"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"सभी"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"छूटे हुए"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"ध्वनिमेल"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"स्पीड डायल"</string>
+    <string name="tab_recents" msgid="929949073851377206">"हाल ही के"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"संपर्क"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"सभी संपर्क"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"सभी संपर्क"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"पसंदीदा से निकाल दिया गया"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"पूर्ववत करें"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> पर कॉल करें"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"संपर्कों में जोड़ें"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"पूर्ण काल ​​इतिहास देखें"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g>  छूटे हुए नए कॉल"</string>
     <string name="no_favorites" msgid="5212485868783382971">"पसंदीदा &amp; आपके द्वारा अक्सर कॉल किए जाने वाले पसंदीदा और संपर्क\nयहां दिखाए जाएंगे.\nतो, कॉल करना प्रारंभ करें."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"सभी नंबर देखने के लिए चित्र को टैप करें या पुनः क्रमित करने के लिए दबाए रखें"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"ख़ारिज करें"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"निकालें"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"स्पीड डायल"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"सभी संपर्क"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"वापस कॉल करें"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"हटाएं"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"सुनें"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"छूटे कॉल का विवरण: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"उत्तर दिए गए कॉल का विवरण: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"किए जाने वाले कॉल का विवरण: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"वापस कॉल करें: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> की ध्वनिमेल सुनें"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> की कॉल लॉग प्रविष्टि हटाएं"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"कॉल लॉग प्रविष्टि हटा दी गई."</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 0215959..96158c3 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"zvjezdica"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"funta"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"govorna pošta"</string>
     <string name="description_search_button" msgid="3660807558587384889">"pretraži"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"biraj"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"broj za pozivanje"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Povijest poziva"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Više opcija"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Prikaži samo propuštene"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Prikaži samo govorne pošte"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Prikaz svih poziva"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Dodaj kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj pauzu od 2 sek."</string>
     <string name="add_wait" msgid="3360818652790319634">"Dodaj čekanje"</string>
     <string name="call_settings" msgid="7666474782093693667">"Postavke"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odlazni poziv"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Propušteni poziv"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Govorna pošta"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Dodaj kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Prikaz kontakta <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Pozovi: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Pojedinosti o kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Pojedinosti poziva"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nova govorna pošta."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Nazovite <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nepoznato"</string>
     <string name="voicemail" msgid="3851469869202611441">"Govorna pošta"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Učitavanje sa SIM kartice..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakti SIM kartice"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Ponovo omogućite aplikaciju Osobe da biste upotrebljavali tu značajku."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Glasovno pretraživanje nije dostupno."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Telefoniranje nije moguće jer je aplikacija Telefon onemogućena."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nema instaliranih aplikacija za rukovanje odabranom radnjom."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Upišite ime ili tel. broj"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Sve"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Propušteni"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nema nedavnih propuštenih poziva"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nema nedavne govorne pošte"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Prikaži sve kontakte"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Prikaži samo favorite"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Povijest"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Sve"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Propušteni"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Gov. pošta"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Brzo biranje"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Najnoviji"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakti"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Svi kontakti"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Svi kontakti"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Uklonjeno iz favorita"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Poništi"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Nazovi <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Dodaj u kontakte"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Prikaz cijele povijesti poziva"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Broj novih propuštenih poziva: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Ovdje će se prikazivati favoriti\ni kontakti koje često zovete.\nZato počnite zvati."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Dodirnite sliku da biste vidjeli sve brojeve ili pritisnite i zadržite da biste promijenili poredak"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Odbaci"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Ukloni"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Brzo biranje"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"SVI KONTAKTI"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"POVRATNI POZIV"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"IZBRIŠI"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSLUŠAJTE"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Propušteni poziv kontakta <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Prihvaćeni poziv kontakta <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Upućeni poziv kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Uzvraćanje poziva kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Slušanje govorne pošte kontakta <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Brisanje unosa u zapisniku poziva za kontakt <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Unos zapisnika poziva izbrisan je."</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index d67cd4e..1a7bccb 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"csillag"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nulla"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"kettős kereszt"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"hangposta"</string>
     <string name="description_search_button" msgid="3660807558587384889">"keresés"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"tárcsázás"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"a tárcsázandó szám"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Hívási előzmények"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"További beállítások"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Csak a nem fogadottak"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Csak a hangüzenetek"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Összes hívás megjelenítése"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Névjegy hozzáadása"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2 mp-es szünet hozzáadása"</string>
     <string name="add_wait" msgid="3360818652790319634">"Várakozás hozzáadása"</string>
     <string name="call_settings" msgid="7666474782093693667">"Beállítások"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Kimenő hívás"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Nem fogadott hívás"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Hangüzenet"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Névjegy hozzáadása"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> névjegyének megtekintése"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> hívása"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> részletes adatai."</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Hívás adatai"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Új hangpostaüzenet."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</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>
     <string name="voicemail" msgid="3851469869202611441">"Hangposta"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Betöltés a SIM-kártyáról..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Névjegyek a SIM-kártyán"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"A funkció használatához aktiválja újra a Személyek alkalmazást."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"A hangalapú keresés nem érhető el."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Nem lehet telefonhívást kezdeményezni, mert a Telefon alkalmazást letiltották."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"A kijelölt művelet kezelésére nincs telepített alkalmazás."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Név vagy telefonszám megadása"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Összes"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Nem fogadott"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nincsenek újabb elmulasztott hívások."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nincsenek újabb hangpostaüzenetek."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Az összes névjegy megjelenítése"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Csak kedvencek megjelenítése"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Előzmények"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Összes"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Nem fogadott"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Hangposta"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Gyorshívó"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Legutóbbiak"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Címtár"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Összes névjegy"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Összes névjegy"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Eltávolítva a kedvencek közül"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Visszavonás"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Hívás: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Hozzáadás a névjegyekhez"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Teljes híváslista megtekintése"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> új nem fogadott hívás"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Itt a kedvencek és a gyakran hívott\nismerősök fognak megjelenni.\nEhhez előbb hívásokat kell indítania."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Koppintson a képre az összes szám megtekintéséhez, vagy tartsa lenyomva az átrendezéshez"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Elvetés"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Eltávolítás"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Gyorshívó"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ÖSSZES NÉVJEGY"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"VISSZAHÍVÁS"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"TÖRLÉS"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"MEGHALLGATÁS"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Nem fogadott hívás a következőtől: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Fogadott hívás a következőtől: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Kimenő hívás: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> visszahívása"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> hangpostaüzenetének meghallgatása"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> hívásnapló-bejegyzésének törlése"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Hívásnapló-bejegyzés törölve."</string>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 7385039..c9c8e45 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"աստղանշել"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"զրո"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"ֆունտ"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ձայնային փոստ"</string>
     <string name="description_search_button" msgid="3660807558587384889">"որոնել"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"համարարկել"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"հետշարժ"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"համարհավաքման հեռախոսահամարը"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Զանգերի պատմությունը"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Այլ ընտրանքներ"</string>
@@ -89,6 +87,8 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Ցույց տալ միայն բաց թողնվածները"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Ցուցադրել միայն ձայնային փոստերը"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Ցուցադրել բոլոր զանգերը"</string>
+    <!-- no translation found for add_contact (8875804371377471164) -->
+    <skip />
     <string name="add_2sec_pause" msgid="9214012315201040129">"Ավելացնել 2 վայրկյան դադար"</string>
     <string name="add_wait" msgid="3360818652790319634">"Ավելացնել սպասում"</string>
     <string name="call_settings" msgid="7666474782093693667">"Կարգավորումներ"</string>
@@ -109,13 +109,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ելքային զանգ"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Բաց թողնված զանգ"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Ձայնային փոստ"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Ավելացնել կոտակտ"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Դիտել <xliff:g id="NAME">%1$s</xliff:g> կոնտակտը"</string>
     <string name="description_call" msgid="3443678121983852666">"Զանգել <xliff:g id="NAME">%1$s</xliff:g>-ին"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ի կոնտակտային տվյալները"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Զանգի մանրամասները"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Նոր ձայնային հաղորդագրություն:"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>-ին"</string>
     <string name="unknown" msgid="740067747858270469">"Անհայտ"</string>
     <string name="voicemail" msgid="3851469869202611441">"Ձայնային փոստ"</string>
@@ -133,32 +136,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM քարտը բեռնվում է..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM քարտի կոնտակտները"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Կրկին միացրեք Մարդիկ ծրագիրը` այս հատկությունn օգտագործելու համար:"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Ձայնային որոնումն անհասանելի է:"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Հնարավոր չէ զանգահարել, քանի որ Հեռախոս հավելվածն անջատված է:"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Ընտրված գործողությունը կարգավորելու համար ոչ մի տեղադրված գործունեություն հասանելի չէ:"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Մուտքագրեք անունը կամ հեռախոսահամարը"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Բոլորը"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Բաց թողնված"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Նոր բաց թողնված զանգեր չկան:"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Նոր ձայնային հաղորդագրություններ չկան:"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Ցույց տալ բոլոր կոնտակտները"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Ցույց տալ միայն ընտրյալները"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Պատմություն"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Բոլորը"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Բաց թողնված"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Ձայնափոստ"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Արագ համարհավաքում"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Վերջինները"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Կոնտակտներ"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Բոլոր կոնտակտները"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Բոլոր կոնտակտները"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Հեռացված է ընտրյալներից"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Հետարկել"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ավելացնել կոնտակտներում"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Դիտել բոլոր զանգերի պատմությունը"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> նոր բաց թողնված զանգ"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Հաճախ կանչվող ընտրյալներ &amp; կոնտակտները\nկցուցադրվեն այստեղ:\nԿարող եք զանգել:"</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Հաճախ կանչվող ընտրյալները և կոնտակտները\nկցուցադրվեն այստեղ:\nԿարող եք զանգել:"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Հպեք նկարին՝ բոլոր համարները տեսնելու, կամ հպեք ու պահեք՝ վերադասավորելու համար:"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Անտեսել"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Հեռացնել"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Արագ համարահավաքում"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ԲՈԼՈՐ ԿՈՆՏԱԿՏՆԵՐԸ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ՀԵՏ ԶԱՆԳԵԼ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ՋՆՋԵԼ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ԼՍԵԼ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Բաց թողնված զանգ՝ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>:"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Ընդունված զանգ՝ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>:"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Կատարված զանգ՝ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>:"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Հետ զանգել <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ին"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Լսել ձայնային փոստը <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ից"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Ջնջել <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ը զանգերի մատյանի գրառումներից"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Զանգերի մատյանի գրառումը ջնջվեց:"</string>
 </resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
deleted file mode 100644
index c52b96f..0000000
--- a/res/values-hy/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"Համարհավաքիչ"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"Հեռախոս"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"Հեռախոս"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"Զանգերի գրանցամատյան"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"Ուղարկել տեքստային հաղորդագրություն"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"Զանգել <xliff:g id="NAME">%s</xliff:g>-ին"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Խմբագրել համարը զանգելուց առաջ"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"Ավելացնել կոնտակտներում"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Հեռացնել զանգերի գրանցամատյանից"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Մաքրել զանգերի գրանցամատյանը"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Ջնջել ձայնային փոստը"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Տարածել ձայնային փոստը"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"Զանգերի մատյանը դատարկ է:"</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Մաքրե՞լ զանգերի գրանցամատյանը"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Ձեր բոլոր զանգերի գրառումները կջնջվեն:"</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Զանգերի գրանցամատյանը մաքրվում է..."</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"Ձայնային փոստ"</item>
-    <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> ձայնային փոստ"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Նվագարկել"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Նոր ձայնային փոստ <xliff:g id="CALLER">%1$s</xliff:g>-ից"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"Հնարավոր չէ նվագարկել ձայնային փոստը:"</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"Պահնակավորում..."</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"Ձայնային փոստի ստացում..."</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Չհաջողվեց ստանալ ձայնային փոստը:"</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"Միայն ձայնային փոստով զանգերը"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"Միայն մուտքային զանգեր"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"Միայն ելքային զանգերը"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"Միայն բաց թողնված զանգերը"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Հնարավոր չէ կապ հաստատել ձայնային փոստի սերվերի հետ:"</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Հնարավոր չէ կապ հաստատել ձայնային փոստի սերվերի հետ: Նոր ձայնային փոստերը սպասում են:"</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Կարգավորեք ձեր ձայնային փոստը:"</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Ձայնանյութը հասանելի չէ:"</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Կարգավորել"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Միանալ ձայնային փոստին"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Ամենադանդաղ արագություն"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"Դանդաղ արագություն"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"Միջին արագություն"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"Արագ"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Շատ արագ"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"Ընտրել համարը"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"Ընտրել համարը"</string>
-    <string name="make_primary" msgid="5829291915305113983">"Հիշել այս ընտրությունը"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"մեկ"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"երկու"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"երեք"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"չորս"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"հինգ"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"վեց"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"յոթ"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"ութ"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"ինը"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"աստղանշել"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"զրո"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"ֆունտ"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ձայնային փոստ"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"որոնել"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"համարարկել"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"հետշարժ"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"համարհավաքման հեռախոսահամարը"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Զանգերի պատմությունը"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"Այլ ընտրանքներ"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"թվաշար"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"Պատճենել"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Ցույց տալ միայն ելքայինները"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"Ցույց տալ միայն մուտքայինները"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"Ցույց տալ միայն բաց թողնվածները"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Ցուցադրել միայն ձայնային փոստերը"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"Ցուցադրել բոլոր զանգերը"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"Ավելացնել 2 վայրկյան դադար"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Ավելացնել սպասում"</string>
-    <string name="call_settings" msgid="7666474782093693667">"Կարգավորումներ"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"Նոր կոնտակտ"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"Զանգի մանրամասները"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"Չհաջողվեց կարդալ հայցվող զանգի մանրամասները:"</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Օգտագործել հնչերանգներով ստեղնաշարը"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Վերադառնալ ընթացիկ զանգին"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Ավելացնել զանգ"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"Մուտքային զանգ"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"Ելքային զանգ"</string>
-    <string name="type_missed" msgid="2720502601640509542">"Բաց թողնված զանգ"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"Ձայնային փոստ"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"Մուտքային զանգեր"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"Նվագարկել ձայնային փոստը"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Մուտքային զանգ"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ելքային զանգ"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"Բաց թողնված զանգ"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"Ձայնային փոստ"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Ավելացնել կոտակտ"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"Դիտել <xliff:g id="NAME">%1$s</xliff:g> կոնտակտը"</string>
-    <string name="description_call" msgid="3443678121983852666">"Զանգել <xliff:g id="NAME">%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_start_voice_search" msgid="520539488194946012">"Սկսկեք ձայնային որոնումը"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>-ին"</string>
-    <string name="unknown" msgid="740067747858270469">"Անհայտ"</string>
-    <string name="voicemail" msgid="3851469869202611441">"Ձայնային փոստ"</string>
-    <string name="private_num" msgid="6374339738119166953">"Անձնական համարը"</string>
-    <string name="payphone" msgid="4864313342828942922">"Վճարել հեռախոսը"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Օգտագործել ստեղնաշարը` համարհավաքելու համար"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"Համարհավաքել՝ զանգելու համար"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> րոպ <xliff:g id="SECONDS">%s</xliff:g> վրկ"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Զանգը չի առաքվել"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Ձայնային փոստը կարգավորելու համար գնացեք Ցանկ &gt; Կարգավորումներ:"</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Ձայնային փոստին զանգելու համար նախ անջատեք թռիչքային ռեժիմը:"</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"Բեռնում..."</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM քարտը բեռնվում է..."</string>
-    <string name="simContacts_title" msgid="27341688347689769">"SIM քարտի կոնտակտները"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"Կրկին միացրեք Մարդիկ ծրագիրը` այս հատկությունn օգտագործելու համար:"</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Գրեք անունը կամ հեռախոսը"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Բոլորը"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Բաց թողնված"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"Նոր բաց թողնված զանգեր չկան:"</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"Նոր ձայնային հաղորդագրություններ չկան:"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Ցույց տալ բոլոր կոնտակտները"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"Ցույց տալ միայն ընտրյալները"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"Պատմություն"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"Բոլոր կոնտակտները"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Բոլոր կոնտակտները"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"Թաքցվեց ընտրյալներից"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"Հետարկել"</string>
-</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4012b78..be1316a 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"bintangi"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nol"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"kotak pesan"</string>
     <string name="description_search_button" msgid="3660807558587384889">"telusuri"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"panggil"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nomor untuk dipanggil"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Riwayat Panggilan"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Opsi lainnya"</string>
@@ -89,7 +87,8 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Tampilkan panggilan terlewat"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Tampilkan pesan suara saja"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Tampilkan semua panggilan"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"Tambahkan jeda 2-det"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Tambahkan kontak"</string>
+    <string name="add_2sec_pause" msgid="9214012315201040129">"Tambahkan jeda 2 dtk"</string>
     <string name="add_wait" msgid="3360818652790319634">"Tambahkan tunggu"</string>
     <string name="call_settings" msgid="7666474782093693667">"Setelan"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Kontak baru"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Panggilan keluar"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Panggilan tak terjawab"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Pesan suara"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Tambahkan kontak"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Lihat kontak <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Panggil <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Detail kontak untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detail panggilan"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Pesan suara baru."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
     <string name="voicemail" msgid="3851469869202611441">"Kotak Pesan"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Memuat dari kartu SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontak pada kartu SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Aktifkan kembali aplikasi Orang untuk menggunakan fitur ini."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Penelusuran suara tidak tersedia."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Tidak dapat melakukan panggilan telepon karena aplikasi Telepon telah dinonaktifkan."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Tidak ada aktivitas terpasang yang tersedia untuk menangani tindakan yang dipilih."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ketikkan nama/nomor ponsel"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"TakDijawab"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Tidak ada panggilan tak terjawab terbaru."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tidak ada pesan suara terbaru."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Tampilkan semua kontak"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Hanya tampilkan favorit"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Riwayat"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Tak Dijawab"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"PesanSuara"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Panggilan Cepat"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Terbaru"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontak"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Semua kontak"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Semua kontak"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Dihapus dari favorit"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Batalkan"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Telepon <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Tambahkan ke kontak"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Lihat riwayat panggilan telepon lengkap"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> panggilan tidak terjawab baru"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Favorit &amp; kontak yang\nsering Anda hubungi akan muncul di sini.\nJadi, mulailah menelepon."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Ketuk gambar untuk melihat semua nomor atau tekan terus untuk mengatur ulang"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Tutup"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Hapus"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Panggilan Cepat"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"SEMUA KONTAK"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"HUBUNGI KEMBALI"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"HAPUS"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"DENGAR"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Panggilan telepon tak terjawab dari <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Panggilan telepon terjawab dari <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Panggilan telepon ke <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Panggil kembali <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Dengarkan kotak pesan dari <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Hapus entri log panggilan telepon untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entri log panggilan telepon dihapus."</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 7ec52eb..d9d9e50 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"stella"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"sterlina"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"segreteria"</string>
     <string name="description_search_button" msgid="3660807558587384889">"cerca"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"componi"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numero da comporre"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Cronologia chiamate"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Altre opzioni"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Mostra solo senza risposta"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostra solo messaggi vocali"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Mostra tutte le chiamate"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Aggiungi contatto"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Aggiungi pausa 2 sec"</string>
     <string name="add_wait" msgid="3360818652790319634">"Aggiungi attesa"</string>
     <string name="call_settings" msgid="7666474782093693667">"Impostazioni"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Chiamata in uscita"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Chiamata senza risposta"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Messaggio vocale"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Aggiungi contatto"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Visualizza <xliff:g id="NAME">%1$s</xliff:g> contatto"</string>
     <string name="description_call" msgid="3443678121983852666">"Chiama <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Dettagli contatto <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Dettagli chiamata"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nuovo messaggio di segreteria."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Chiama <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Sconosciuto"</string>
     <string name="voicemail" msgid="3851469869202611441">"Segreteria"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Caricamento da SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contatti SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Riattiva l\'app Persone per utilizzare questa funzione."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"La ricerca vocale non è disponibile."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Impossibile effettuare una telefonata perché l\'applicazione Telefono è stata disattivata."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nessuna applicazione installata disponibile per gestire l\'azione selezionata."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Digita nome o numero telefono"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Tutti"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Perse"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nessuna chiamata persa recente."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nessun messaggio vocale recente."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Mostra tutti i contatti"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostra solo i preferiti"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Cronologia"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Tutti"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Perse"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Segreteria"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Chiamata rapida"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recenti"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contatti"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Tutti i contatti"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Tutti i contatti"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Rimosso dai preferiti"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Annulla"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Chiama <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Aggiungi ai contatti"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Visualizza cronologia completa delle chiamate"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nuove chiamate senza risposta"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Preferiti e contatti che\nchiami spesso verranno mostrati qui.\nInizia a chiamarli."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tocca l\'immagine per visualizzare tutti i numeri o tieni premuto per cambiare l\'ordine"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ignora"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Rimuovi"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Chiamata rapida"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TUTTI I CONTATTI"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RICHIAMA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ELIMINA"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ASCOLTA"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Chiamata senza risposta da <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Chiamata ricevuta da <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Chiamata a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Richiama <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Ascolta il messaggio vocale di: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Elimina la voce del registro chiamate relativa a: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Voce del registro chiamate eliminata."</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 90c2ed6..8b8c5f2 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"סמן בכוכב"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"אפס"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"סולמית"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"דואר קולי"</string>
     <string name="description_search_button" msgid="3660807558587384889">"חפש"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"חייג"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"מספר לחיוג"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"היסטוריית שיחות"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"אפשרויות נוספות"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"הצג רק שיחות שלא נענו"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"הצג הודעות דואר קולי בלבד"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"הצג את כל השיחות"</string>
+    <string name="add_contact" msgid="8875804371377471164">"הוסף איש קשר"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"הוסף השהיה של 2 שניות"</string>
     <string name="add_wait" msgid="3360818652790319634">"הוסף המתנה"</string>
     <string name="call_settings" msgid="7666474782093693667">"הגדרות"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"שיחה יוצאת"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"שיחה שלא נענתה"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"דואר קולי"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"הוסף איש קשר"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"הצג את איש הקשר <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"התקשר אל <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"פרטי יצירת קשר עבור <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"פרטי שיחה"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"דואר קולי חדש."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"התקשר אל <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"לא ידוע"</string>
     <string name="voicemail" msgid="3851469869202611441">"דואר קולי"</string>
@@ -125,40 +127,50 @@
     <string name="dialerDialpadHintText" msgid="5824490365898349041">"חייג כדי להוסיף שיחה"</string>
     <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> דקות <xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
     <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"השיחה לא נשלחה."</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' &gt; \'הגדרות\'."</string>
+    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"‏כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' &gt; \'הגדרות\'."</string>
     <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"כדי להתקשר לדואר קולי, ראשית כבה את מצב הטיסה."</string>
     <string name="contact_list_loading" msgid="5488620820563977329">"טוען..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"טוען מכרטיס SIM…"</string>
-    <string name="simContacts_title" msgid="27341688347689769">"אנשי קשר בכרטיס SIM"</string>
+    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"‏טוען מכרטיס SIM…"</string>
+    <string name="simContacts_title" msgid="27341688347689769">"‏אנשי קשר בכרטיס SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"הפעל מחדש את אפליקציית אנשי הקשר כדי להשתמש בתכונה זו."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"חיפוש קולי אינו זמין."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"לא ניתן לבצע שיחת טלפון מפני שאפליקציית הטלפון הושבתה."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"אין פעילות מותקנת הזמינה לטיפול בפעולה הנבחרת."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"הקלד שם או מספר טלפון"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"הכול"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"שיחה שלא נענתה"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"אין שיחות אחרונות שלא נענו."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"אין הודעות דואר קולי אחרונות."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"הצג את כל אנשי הקשר"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"הצג מועדפים בלבד"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"היסטוריה"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"הכול"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"שיחה שלא נענתה"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"דואר קולי"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"חיוג מהיר"</string>
+    <string name="tab_recents" msgid="929949073851377206">"אחרונים"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"אנשי קשר"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"כל אנשי הקשר"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"כל אנשי הקשר"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"הוסר מהמועדפים"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"בטל"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"התקשר אל <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"הוסף לאנשי הקשר"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"הצג את היסטוריית השיחות המלאה"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> שיחות חדשות שלא נענו"</string>
     <string name="no_favorites" msgid="5212485868783382971">"מועדפים ואנשי קשר שאתה\nיוצר איתם קשר בקביעות יופיעו כאן.\nאז תתחיל להתקשר."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"הקש על תמונה כדי לראות את כל המספרים, או לחץ והחזק כדי לשנות את הסדר"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"סגור"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"הסר"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"חיוג מהיר"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"כל אנשי הקשר"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"התקשר חזרה"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"מחק"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"האזן"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"שיחה שלא נענתה מאת <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"שיחה שנענתה מאת <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"התקשר אל <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"התקשר חזרה אל <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"האזן לדואר קולי מאת <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"מחק רשומה ביומן השיחות עבור <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"רשומת יומן שיחות נמחקה."</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index c6b0aca..f11fc21 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"スター"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"ポンド"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ボイスメール"</string>
     <string name="description_search_button" msgid="3660807558587384889">"検索"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"発信"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"発信番号"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"通話履歴"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"その他のオプション"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"不在着信のみを表示"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"ボイスメールのみ表示"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"すべての通話を表示"</string>
+    <string name="add_contact" msgid="8875804371377471164">"連絡先を追加"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2秒間の停止を追加"</string>
     <string name="add_wait" msgid="3360818652790319634">"待機を追加"</string>
     <string name="call_settings" msgid="7666474782093693667">"設定"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"発信"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"不在着信"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"ボイスメール"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"連絡先を追加"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g>の連絡先を表示"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g>に発信"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>の連絡先の詳細"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"通話の詳細"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"新着のボイスメール。"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>に発信"</string>
     <string name="unknown" msgid="740067747858270469">"通知不可能"</string>
     <string name="voicemail" msgid="3851469869202611441">"ボイスメール"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIMカードから読み取り中..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIMカードの連絡先"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"この機能を使用するには連絡帳アプリを再度有効にしてください。"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"音声検索は利用できません。"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"電話アプリが無効になっているため発信できません。"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"選択した操作を処理できるアクティビティがインストールされていません。"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"名前または電話番号を入力"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"すべて"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"不在着信"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"最近の不在着信はありません。"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近のボイスメールはありません。"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"すべての連絡先を表示"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"お気に入りのみを表示"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"履歴"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"すべて"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"不在着信"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"ボイスメール"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"クイックアクセス"</string>
+    <string name="tab_recents" msgid="929949073851377206">"最近"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"連絡先"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"すべての連絡先"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"すべての連絡先"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"お気に入りから削除されました"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"元に戻す"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g>に発信"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"連絡先に追加"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"通話履歴をすべて表示"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g>件の不在着信"</string>
     <string name="no_favorites" msgid="5212485868783382971">"ここにはお気に入りや\n頻繁に通話する\n連絡先が表示されます。"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"画像をタップするとすべての番号を表示でき、押し続けると並び替えることができます"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"閉じる"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"削除"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"クイックアクセス"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"すべての連絡先"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"コールバック"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"削除"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"再生"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>の<xliff:g id="TYPEORLOCATION">%2$s</xliff:g><xliff:g id="NAMEORNUMBER">%1$s</xliff:g>からの不在着信。"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>の<xliff:g id="TYPEORLOCATION">%2$s</xliff:g><xliff:g id="NAMEORNUMBER">%1$s</xliff:g>からの着信。"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>の<xliff:g id="TYPEORLOCATION">%2$s</xliff:g><xliff:g id="NAMEORNUMBER">%1$s</xliff:g>への発信。"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>にコールバック"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>からのボイスメールを再生"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>の通話履歴エントリを削除"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"通話履歴エントリを削除しました。"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index d42e470..5b5088a 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ვარსკვლავი"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"ნული"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"გირვანქა"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ხმოვანი ფოსტა"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ძიება"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"დარეკვა"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"უკუშლა"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"ასაკრეფი ნომერი"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"საუბრის ისტორია"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"სხვა პარამეტრები"</string>
@@ -89,6 +87,8 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"მხოლოდ გამოტოვებულის ჩვენება"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"მხოლოდ ხმოვანი ფოსტის ჩვენება"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"ყველა ზარის ჩვენება"</string>
+    <!-- no translation found for add_contact (8875804371377471164) -->
+    <skip />
     <string name="add_2sec_pause" msgid="9214012315201040129">"ორწამიანი პაუზის დამატება"</string>
     <string name="add_wait" msgid="3360818652790319634">"ლოდინის დამატება"</string>
     <string name="call_settings" msgid="7666474782093693667">"პარამეტრები"</string>
@@ -109,13 +109,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"გამავალი ზარი"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"გამოტოვებული ზარი"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"ხმოვანი ფოსტა"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"კონტაქტის დამატება"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"კონტაქტის <xliff:g id="NAME">%1$s</xliff:g> ნახვა"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g>-თან დარეკვა"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის კონტაქტის დეტალები"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"ზარის მონაცემები"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"ახალი ხმოვანი ფოსტა."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"დარეკვა <xliff:g id="NUMBER">%s</xliff:g>-ზე"</string>
     <string name="unknown" msgid="740067747858270469">"უცნობი"</string>
     <string name="voicemail" msgid="3851469869202611441">"ხმოვანი ფოსტა"</string>
@@ -133,32 +136,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"იტვირთება SIM ბარათიდან…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM ბარათის კონტაქტები"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"ამ ფუნქციის გამოსაყენებლად ხელახლა გააქტიურეთ აპლიკაცია „ხალხი“."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"ხმოვანი ძიება მიუწვდომელია."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"სატელეფონო ზარის განხორციელება ვერ ხერხდება, ვინაიდან ტელეფონის აპლიკაცია გაუქმებულია."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"არჩეული ქმედებისათვის ინსტალირებული აქტივობა არ არის."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"შეიყვანეთ სახელი, ან ტელეფონის ნომერი"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ყველა"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"გამოტოვებული"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"ბოლო დროის ზარები არ არის."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"ბოლო დროის ხმოვანი ფოსტა არ არის."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"ყველა კონტაქტის ჩვენება"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"მხოლოდ რჩეულების ჩვენება"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"ისტორია"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"ყველა"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"გამოტოვებული"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"ხმოვანი ფოსტა"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"სწრაფი აკრეფა"</string>
+    <string name="tab_recents" msgid="929949073851377206">"ბოლო"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"კონტაქტები"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"ყველა კონტაქტი"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ყველა კონტაქტი"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"წაიშალა რჩეულებიდან"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"დაბრუნება"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"დარეკვა <xliff:g id="NUMBER">%s</xliff:g>-ზე"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"კონტაქტებში დამატება"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"ზარების სრული ისტორიის ნახვა"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> ახალი გაცდენილი ზარი"</string>
     <string name="no_favorites" msgid="5212485868783382971">"რჩეულები და ხშირი კონაქტები\nაქ გამოჩნდება.\nასე რომ, დაიწყეთ რეკვა."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"შეეხეთ სურათს ყველა ნომრის სანახავად, ან შეეხეთ და დააყოვნეთ მიმდევრობის შესაცვლელად"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"დახურვა"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"ამოშლა"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"სწრაფი აკრეფა"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ყველა კონტაქტი"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"გადარეკვა"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"წაშლა"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"მოსმენა"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"გამოტოვებული ზარი <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ისგან, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"პასუხი <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის ზარზე, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"ზარი <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-თან, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ზე გადარეკვა"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის ხმოვანი ფოსტის მოსმენა"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის ზარის ჩანაწერის წაშლა"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"ზარის აღრიცხვის ჩანაწერის წაშლა."</string>
 </resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
deleted file mode 100644
index 4d6f74e..0000000
--- a/res/values-ka/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"დარეკვა"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"ტელეფონი"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"ტელეფონი"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"ზარების ჟურნალი"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"ტექსტური შეტყობინების გაგზავნა"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g>-თან დარეკვა"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ნომრის რედაქტირება დარეკვამდე"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"კონტაქტებში დამატება"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ზარების ჟურნალიდან ამოღება"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ზარების ჟურნალის წაშლა"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ხმოვანი ფოსტის წაშლა"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ხმოვანი ფოსტის გაზიარება"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"ზარების ჟურნალი ცარიელია."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"გსურთ ზარების ჟურნალის წაშლა?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ყველა თქვენი ზარის ჩანაწერი წაიშლება."</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"ზარების ჟურნალი იშლება…"</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"ხმოვანი ფოსტა"</item>
-    <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> ხმოვანი ფოსტა"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"დაკვრა"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"ახალი ხმოვანი ფოსტა <xliff:g id="CALLER">%1$s</xliff:g>-ისგან"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"ხმოვანი ფოსტის მოსმენა ვერ მოხერხდა."</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"ბუფერიზაცია…"</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"ხმოვანი ფოსტის მიღება…"</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"ხმოვანი ფოსტის მიღება ვერ მოხერხდა."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"მხოლოდ ზარები ხმოვანი ფოსტით"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"მხოლოდ შემომავალი ზარები"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"მხოლოდ გამავალი ზარები"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"მხოლოდ გამოტოვებული ზარები"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"ხმოვანი ფოსტის სერვერთან დაკავშირება შეუძლებელია."</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"ხმ. ფოსტის სერვერთან კავშირი არ არის. ახალი ხმ. ფოსტა იცდის."</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"თქვენი ხმოვანი ფოსტის პარამეტრების დაყენება."</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"აუდიო მიუწვდომელია."</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"კონფიგურაცია"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"ხმოვან ფოსტასთან დაკავშირება"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ყველაზე დაბალი სიჩქარე"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"დაბალი სიჩქარე"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"საშუალო სიჩქარე"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"დიდი სიჩქარე"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"უდიდესი სიჩქარე"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>-ში"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"ნომრის შერჩევა"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"ნომრის შერჩევა"</string>
-    <string name="make_primary" msgid="5829291915305113983">"დაიმახსოვრე ეს არჩევანი"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"ერთი"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"ორი"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"სამი"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"ოთხი"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"ხუთი"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"ექვსი"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"შვიდი"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"რვა"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"ცხრა"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"ვარსკვლავი"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"ნული"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"გირვანქა"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ხმოვანი ფოსტა"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"ძიება"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"დარეკვა"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"უკუშლა"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"ასაკრეფი ნომერი"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"საუბრის ისტორია"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"სხვა პარამეტრები"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ციფერბლატი"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"კოპირება"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"მხოლოდ გამავალის ჩვენება"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"მხოლოდ შემომავალის ჩვენება"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"მხოლოდ გამოტოვებულის ჩვენება"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"მხოლოდ ხმოვანი ფოსტის ჩვენება"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"ყველა ზარის ჩვენება"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"ორწამიანი პაუზის დამატება"</string>
-    <string name="add_wait" msgid="3360818652790319634">"ლოდინის დამატება"</string>
-    <string name="call_settings" msgid="7666474782093693667">"პარამეტრები"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"ახალი კონტაქტი"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"ზარის დეტალები"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"მოთხოვნილი ზარის დეტალების წაკითხვა ვერ მოხერხდა."</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ტონალური კლავიატურის გამოყენება"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"მიმდინარე ზარზე დაბრუნება"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"ზარის დამატება"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"შემომავალი ზარი"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"გამავალი ზარი"</string>
-    <string name="type_missed" msgid="2720502601640509542">"გამოტოვებული ზარი"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"ხმოვანი ფოსტა"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"შემომავალი ზარები"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"ხმოვანი ფოსტის ჩართვა"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"შემომავალი ზარი"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"გამავალი ზარი"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"გამოტოვებული ზარი"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"ხმოვანი ფოსტა"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"კონტაქტის დამატება"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"კონტაქტის <xliff:g id="NAME">%1$s</xliff:g> ნახვა"</string>
-    <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%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_start_voice_search" msgid="520539488194946012">"ხმოვანი ძიების დაწყება"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"დარეკვა <xliff:g id="NUMBER">%s</xliff:g>-ზე"</string>
-    <string name="unknown" msgid="740067747858270469">"უცნობი"</string>
-    <string name="voicemail" msgid="3851469869202611441">"ხმოვანი ფოსტა"</string>
-    <string name="private_num" msgid="6374339738119166953">"კერძო ნომერი"</string>
-    <string name="payphone" msgid="4864313342828942922">"საზოგადოებრივი ტელეფონი"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"კლავიატურის გამოყენება დასარეკად"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"დარეკეთ ზარის დასამატებლად"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> წთ <xliff:g id="SECONDS">%s</xliff:g> წმ"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ზარი ვერ განხორციელდა"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ხმოვანი ფოსტის დასაყენებლად გადადით მენიუს &gt; პარამეტრებზე."</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ხმოვან ფოსტასთან დასაკავშირებლად პირველ რიგში გამორთეთ თვითმფრინავის რეჟიმი."</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"იტვირთება…"</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"იტვირთება SIM ბარათიდან…"</string>
-    <string name="simContacts_title" msgid="27341688347689769">"SIM ბარათის კონტაქტები"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"ამ ფუნქციის გამოსაყენებლად ხელახლა გააქტიურეთ აპლიკაცია „ხალხი“."</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"შეიყვანეთ სახელი, ან ტელეფონი"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ყველა"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"გამოტოვებული"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"ბოლო დროის ზარები არ არის."</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"ბოლო დროის ხმოვანი ფოსტა არ არის."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"ყველა კონტაქტის ჩვენება"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"მხოლოდ რჩეულების ჩვენება"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"ისტორია"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"ყველა კონტაქტი"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ყველა კონტაქტი"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"დამალულია რჩეულებიდან"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"დაბრუნება"</string>
-</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index e0f890f..9f78231 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ផ្កាយ"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"សូន្យ"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"ផោន"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"សារ​ជា​សំឡេង"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ស្វែងរក"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"លេខ​ដែល​ត្រូវ​ហៅ"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"ប្រវត្តិ​ហៅ"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"ជម្រើស​បន្ថែម"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"បង្ហាញ​តែ​ការ​ខកខាន​ទទួល"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"បង្ហាញ​តែ​សារ​ជា​សំឡេង"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"បង្ហាញ​ការ​ហៅ​ទាំងអស់"</string>
+    <string name="add_contact" msgid="8875804371377471164">"បន្ថែម​ទំនាក់ទំនង"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"បន្ថែម​ការ​ផ្អាក ២វិ."</string>
     <string name="add_wait" msgid="3360818652790319634">"បញ្ចូល​ការ​រង់ចាំ"</string>
     <string name="call_settings" msgid="7666474782093693667">"ការ​កំណត់"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ការ​ហៅ​ចេញ"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"ខកខាន​ទទួល"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"សារ​ជា​សំឡេង"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"បន្ថែម​ទំនាក់ទំនង"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"មើល​ទំ​នាក់ទំនង <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"ហៅ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"ព័ត៌មាន​លម្អិត​ទំនាក់ទំនង​សម្រាប់ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"ព័ត៌មាន​លម្អិត​ការ​ហៅ"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"សារ​ជា​សំឡេង​ថ្មី។"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"ហៅ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"មិន​ស្គាល់"</string>
     <string name="voicemail" msgid="3851469869202611441">"សារ​ជា​សំឡេង"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"កំពុង​ផ្ទុក​ពី​ស៊ីម​កាត..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"ទំនាក់ទំនង​នៅ​ក្នុង​ស៊ីម​កាត"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"បើក​កម្មវិធី​ឡើងវិញ​ដើម្បី​ប្រើ​លក្ខណៈ​នេះ។"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"ការ​ស្វែងរក​ជា​សំឡេង​មិន​អាច​ប្រើ​បាន។"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"មិន​អាច​ហៅ​បាន​ទេ​ ព្រោះ​កម្មវិធី​ទូរស័ព្ទ​ត្រូវ​បាន​បិទ។"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"គ្មាន​សកម្មភាព​បាន​ដំឡើង​ ដើម្បី​គ្រប់គ្រង​សកម្មភាព​បាន​ជ្រើស។"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"សូម​បញ្ចូល​ឈ្មោះ ឬ​លេខទូរស័ព្ទ"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ទាំង​អស់"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"ខកខាន​ទទួល"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"មិន​មានការ​​ខកខាន​ទទួល​ថ្មី​ទេ។"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"គ្មាន​សារ​ជា​សំឡេង​ថ្មី​ទេ។"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"បង្ហាញ​ទំនាក់​ទំនង​ទាំងអស់"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"បង្ហាញ​តែ​​និយម​ប្រើ​ប៉ុណ្ណោះ"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"ប្រវត្តិ"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"ទាំង​អស់"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"ខកខាន​ទទួល"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"សារ​ជា​សំឡេង"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"ការ​ហៅ​រហ័ស"</string>
+    <string name="tab_recents" msgid="929949073851377206">"ថ្មីៗ"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"ទំនាក់ទំនង"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"ទំនាក់ទំនង​ទាំងអស់"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ទំនាក់ទំនង​ទាំងអស់"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"បាន​លុប​ចេញពី​ទំនាក់ទំនង​ដែល​និយម​ប្រើ"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"មិនធ្វើវិញ"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"ហៅ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"បន្ថែម​ទៅ​ទំនាក់ទំនង"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"មើលប្រវត្តិហៅពេញលេញ"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"ខកខាន​ទទួល​ថ្មី <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"ការ​និយម​ប្រើ &amp; ទំនាក់ទំនង​ដែល​អ្នក\nហៅ​ញឹកញាប់​នឹង​បង្ហាញ​នៅ​ទីនេះ។\nដូច្នេះ ចាប់ផ្ដើម​ហៅ។"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"ប៉ះ​រូបភាព ដើម្បី​មើល​លេខ​ទាំងអស់ ឬ​ចុច និង​សង្កត់​ដើម្បី​តម្រៀប​ឡើងវិញ"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"បដិសេធ"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"លុបចេញ"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"ការ​ហៅ​រហ័ស"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ទំនាក់ទំនង​ទាំងអស់"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ហៅ​ទៅវិញ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"លុប"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ស្ដាប់"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"ខកខាន​ទទួល​ពី <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ។"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"បាន​ឆ្លើយតប​ការ​ហៅ​ពី <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ។"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"ហៅ​ទៅ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ។"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"ហៅ​ទៅ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> វិញ"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"ស្ដាប់​សារ​ជា​សំឡេង​ពី <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"លុប​ធាតុ​កំណត់ហេតុ​ហៅ​​សម្រាប់ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"បាន​លុប​ធាតុ​កំណត់​ហេតុ​ហៅ។"</string>
 </resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
deleted file mode 100644
index e5a9cd4..0000000
--- a/res/values-km/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"អ្នក​ហៅ"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"ទូរស័ព្ទ"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"ទូរស័ព្ទ"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"បញ្ជី​ហៅ"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"ផ្ញើ​សារ​អត្ថបទ"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"ហៅ <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"កែ​លេខ​មុន​ពេល​ហៅ"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"បន្ថែម​ទៅ​ទំនាក់ទំនង"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"លុបចេញ​ពី​បញ្ជី​ហៅ"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"សម្អាត​បញ្ជី​ហៅ"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"លុប​សារ​ជា​សំឡេង"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ចែករំលែក​សារ​ជា​សំឡេង"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"បញ្ជី​ហៅ​គឺ​ទទេ។"</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"សម្អាត​បញ្ជី​ហៅ​?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"នឹង​លុប​កំណត់ត្រា​ហៅ​ទាំងអស់​របស់​អ្នក។"</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"កំពុង​សម្អាត​បញ្ជី​ហៅ..."</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"សារ​ជា​សំឡេង"</item>
-    <item quantity="other" msgid="5513481419205061254">"សារ​ជា​សំឡេង <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"ចាក់"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"សារ​ជា​សំឡេង​ថ្មី​ពី <xliff:g id="CALLER">%1$s</xliff:g>"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"មិន​អាច​ចាក់​សារ​ជា​សំឡេង។"</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"កំពុង​គណនា..."</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"កំពុង​ទៅ​យក​សារ​ជា​សំឡេង..."</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"មិន​អាច​ទៅ​យក​សារ​ជា​សំឡេង..."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"តែ​ការ​ហៅ​ជា​សារ​សំឡេង"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"តែ​ការ​ហៅ​ចូល"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"តែ​ការ​ហៅ​ចេញ​ប៉ុណ្ណោះ"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"តែ​លេខ​ខកខាន​ទទួល"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"មិន​អាច​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​មេ​សារ​ជា​សំឡេង។"</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"មិន​អាច​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​មេ​សារ​ជា​សំឡេង។ សារ​ជា​សំឡេង​ថ្មី​កំពុង​រង់ចាំ។"</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"រៀបចំ​សារ​ជា​សំឡេង​របស់​អ្នក។"</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"មិន​មាន​សំឡេង។"</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"រៀបចំ"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"ហៅ​ជា​សារ​សំឡេង"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ល្បឿន​យឺត​បំផុត"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"ល្បឿន​យឺត"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"ល្បឿន​ធម្មតា"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"ល្បឿន​លឿន"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"ល្បឿន​លឿន​បំផុត"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"ជ្រើស​លេខ"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"ជ្រើស​លេខ"</string>
-    <string name="make_primary" msgid="5829291915305113983">"ចងចាំ​ជម្រើស​នេះ"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"មួយ"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"ពីរ"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"បី"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"បួន"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"ប្រាំ"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"ប្រាំមួយ"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"ប្រាំពីរ"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"ប្រាំបី"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"ប្រាំបួន"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"ផ្កាយ"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"សូន្យ"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"ផោន"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"សារ​ជា​សំឡេង"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"ស្វែងរក"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"លេខ​ដែល​ត្រូវ​ហៅ"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"ប្រវត្តិ​ហៅ"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"ជម្រើស​បន្ថែម"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"បន្ទះ​លេខ"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"ចម្លង"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"បង្ហាញ​តែ​ការ​ហៅ​ចេញ"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"បង្ហាញ​តែ​ការ​ហៅ​ចូល"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"បង្ហាញ​តែ​ការ​ខកខាន​ទទួល"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"បង្ហាញ​តែ​សារ​ជា​សំឡេង"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"បង្ហាញ​ការ​ហៅ​ទាំងអស់"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"បន្ថែម​ការ​ផ្អាក ២វិ."</string>
-    <string name="add_wait" msgid="3360818652790319634">"បញ្ចូល​ការ​រង់ចាំ"</string>
-    <string name="call_settings" msgid="7666474782093693667">"ការ​កំណត់"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"ទំនាក់ទំនង​ថ្មី"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"ព័ត៌មាន​លម្អិត​នៃ​ការ​ហៅ"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"មិន​អាច​អាន​ព័ត៌មាន​លម្អិត​សម្រាប់​ការ​ហៅ​បាន​ស្នើ។"</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ប្រើ​សំឡេង​ប៉ះ​បន្ទះ​លេខ"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"កំពុង​ត្រឡប់​ទៅកាន់​ការ​ហៅ"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"បន្ថែម​ការ​ហៅ"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"ការ​ហៅ​ចូល"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"ការ​ហៅ​ចេញ"</string>
-    <string name="type_missed" msgid="2720502601640509542">"ខកខាន​ទទួល"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"សារ​ជា​សំឡេង"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"ការ​ហៅ​ចូល"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"ចាក់​សារ​ជា​សំឡេង"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"ការ​ហៅ​ចូល"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ការ​ហៅ​ចេញ"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"ខកខាន​ទទួល"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"សារ​ជា​សំឡេង"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"បន្ថែម​ទំនាក់ទំនង"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"មើល​ទំ​នាក់ទំនង <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="description_call" msgid="3443678121983852666">"ហៅ <xliff:g id="NAME">%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_start_voice_search" msgid="520539488194946012">"ចាប់ផ្ដើម​ស្វែងរក​ជា​សំឡេង"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"ហៅ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="unknown" msgid="740067747858270469">"មិន​ស្គាល់"</string>
-    <string name="voicemail" msgid="3851469869202611441">"សារ​ជា​សំឡេង"</string>
-    <string name="private_num" msgid="6374339738119166953">"លេខ​ឯកជន"</string>
-    <string name="payphone" msgid="4864313342828942922">"ទូរស័ព្ទ​ប្រើ​កាក់"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"ប្រើ​ក្ដារ​ចុច ​ដើម្បី​ចុច​លេខ"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"ចុច​ដើម្បី​បន្ថែម​ការ​ហៅ"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ការ​ហៅ​មិន​បាន​បញ្ជូន"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ដើម្បី​កំណត់​សារ​ជា​សំឡេង ចូល​ម៉ឺនុយ &gt; ការ​កំណត់។"</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ដើម្បី​ហៅ​សារ​ជា​សំឡេង ដំបូង​ត្រូវ​បិទ​របៀប​ពេល​ជិះ​យន្តហោះ។"</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"កំពុង​ផ្ទុក..."</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"កំពុង​ផ្ទុក​ពី​ស៊ីម​កាត..."</string>
-    <string name="simContacts_title" msgid="27341688347689769">"ទំនាក់ទំនង​នៅ​ក្នុង​ស៊ីម​កាត"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"បើក​កម្មវិធី​ឡើងវិញ​ដើម្បី​ប្រើ​លក្ខណៈ​នេះ។"</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"សូម​បញ្ចូល​ឈ្មោះ ឬ​ទូរស័ព្ទ"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ទាំង​អស់"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"ខកខាន​ទទួល"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"មិន​មានការ​​ខកខាន​ទទួល​ថ្មី​ទេ។"</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"គ្មាន​សារ​ជា​សំឡេង​ថ្មី​ទេ។"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"បង្ហាញ​ទំនាក់​ទំនង​ទាំងអស់"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"បង្ហាញ​តែ​​និយម​ប្រើ​ប៉ុណ្ណោះ"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"ប្រវត្តិ"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"ទំនាក់ទំនង​ទាំងអស់"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ទំនាក់ទំនង​ទាំងអស់"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"បាន​លាក់​ពី​ការ​និយម"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"មិនធ្វើវិញ"</string>
-</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index eed6a3b..d3c103e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"별"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"#"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"음성사서함"</string>
     <string name="description_search_button" msgid="3660807558587384889">"검색"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"전화걸기"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"백스페이스"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"전화를 걸 번호"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"통화 기록"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"옵션 더보기"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"부재중 전화만 표시"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"음성사서함만 표시"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"모든 통화 표시"</string>
+    <string name="add_contact" msgid="8875804371377471164">"연락처 추가"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2초 간 일시 정지 추가"</string>
     <string name="add_wait" msgid="3360818652790319634">"대기 시간 추가"</string>
     <string name="call_settings" msgid="7666474782093693667">"설정"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"발신 전화"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"부재중 전화"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"음성사서함"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"연락처 추가"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g>님의 연락처 보기"</string>
     <string name="description_call" msgid="3443678121983852666">"전화하기:<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>의 연락처 세부정보"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"통화 세부정보"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"새로운 음성사서함이 있습니다."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>에 전화"</string>
     <string name="unknown" msgid="740067747858270469">"알 수 없음"</string>
     <string name="voicemail" msgid="3851469869202611441">"음성사서함"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM 카드에서 로딩 중..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM 카드 주소록"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"이 기능을 사용하려면 주소록 애플리케이션을 사용하도록 다시 설정하세요."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"음성검색을 사용할 수 없습니다."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"전화 애플리케이션을 사용 중지했으므로 전화를 걸 수 없습니다."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"선택한 작업을 처리할 수 있는 애플리케이션이 설치되지 않았습니다."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"이름 또는 전화번호 입력"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"전체"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"부재중 전화"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"최근 부재중 전화가 없습니다."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"최근 음성사서함이 없습니다."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"모든 연락처 표시"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"즐겨찾는 연락처만 표시"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"기록"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"전체"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"부재중 전화"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"음성사서함"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"단축 다이얼"</string>
+    <string name="tab_recents" msgid="929949073851377206">"최근"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"주소록"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"전체 주소록"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"전체 주소록"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"즐겨찾기에서 삭제됨"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"실행취소"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g>에 전화"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"주소록에 추가"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"전체 통화 기록 조회"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"새로운 부재중 전화 <xliff:g id="NUMBER">%s</xliff:g>건"</string>
     <string name="no_favorites" msgid="5212485868783382971">"자주 전화하는 연락처가\n여기에 표시됩니다.\n전화해 보세요."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"이미지를 탭하여 모든 번호를 확인하거나 길게 눌러 재정렬합니다."</string>
     <string name="description_dismiss" msgid="2146276780562549643">"닫기"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"삭제"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"단축 다이얼"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"모든 연락처"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"전화 걸기"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"삭제"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"듣기"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"부재중 전화: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"수신 전화: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"발신 전화: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>에 전화 걸기"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> 음성사서함 듣기"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>의 통화 기록 항목 삭제"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"통화 기록 항목이 삭제되었습니다."</string>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 41e6525..07be5ba 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ຕິດດາວ"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"ສູນ"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"ພາວ"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ຂໍ້ຄວາມສຽງ"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ຊອກຫາ"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"ແປ້ນໂທ"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"ໝາຍເລກທີ່ຈະໂທ"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"ປະຫວັດການໂທ"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"ໂຕເລືອກເພີ່ມເຕີມ"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"ສະແດງສະເພາະສາຍບໍ່ໄດ້ຮັບ"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"ສະແດງສະເພາະຂໍ້ຄວາມສຽງ"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"ສະແດງການໂທທັງໝົດ"</string>
+    <string name="add_contact" msgid="8875804371377471164">"ເພີ່ມ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"ເພີ່ມການຂັ້ນເວລາ 2 ວິນາທີ"</string>
     <string name="add_wait" msgid="3360818652790319634">"ເພີ່ມການລໍຖ້າ"</string>
     <string name="call_settings" msgid="7666474782093693667">"ການຕັ້ງຄ່າ"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ສາຍໂທອອກ"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"ຂໍ້ຄວາມສຽງ"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"ເພີ່ມລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"ເບິ່ງລາຍຊື່ຜູ່ຕິດຕໍ່ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"ໂທຫາ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"ລາຍລະອຽດ​ລາຍຊື່​ຜູ່ຕິດຕໍ່​ສຳລັບ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"ລາຍລະອຽດ​ການໂທ"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"ຂໍ້ຄວາມ​ສຽງ​ໃໝ່."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"ໂທ​ຫາ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ບໍ່ຮູ້ຈັກ"</string>
     <string name="voicemail" msgid="3851469869202611441">"ຂໍ້ຄວາມສຽງ"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"ກຳລັງໂຫລດຈາກ SIM card..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"ລາຍຊື່ຜູ່ຕິດຕໍ່ SIM card"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"ເປີດການນຳໃຊ້ແອັບພລິເຄຊັນ People ຄືນ ເພື່ອໃຊ້ຄຸນສົມບັດນີ້."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"ບໍ່ສາມາດນຳໃຊ້ການຊອກຫາດ້ວຍສຽງໄດ້."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"ບໍ່​ສາ​ມາດ​ໂທ​ໄດ​້​ເນື່ອງ​ຈາກ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ໂທ​ລະ​ສັບ​ຖືກ​ປິດ​ການ​ນຳ​ໃຊ້​ໄວ້."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"​ບໍ່​ມີ​ຄຳ​ສັ່ງ​ທີ່​ຕິດ​ຕັ້ງ​ໄວ້​ທີ່​ໃຊ້​ຈັດ​ການ​ການ​ເຮັດ​ວຽກ​ທີ່​ເລືອກ​ໄດ້."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"ພິມຊື່ ຫຼເບີໂທລະສັບ"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ທັງໝົດ"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"ບໍ່ມີສາຍທີ່ບໍ່ໄດ້ຮັບຫຼ້າສຸດ."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"ບໍ່​ມີຂໍ້ຄວາມສຽງຫຼ້າສຸດ​."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"ສະແດງລາຍຊື່ທັງໝົດ"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"ສະ​ແດງ​ສະເພາະລາຍການທີ່ນິຍົມເທົ່ານັ້ນ"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"ປະຫວັດການໂທ"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"ທັງໝົດ"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"ຂໍ້ຄວາມສຽງ"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"​ໂທ​ດ່ວນ"</string>
+    <string name="tab_recents" msgid="929949073851377206">"ຫາ​ກໍ​ໃຊ້"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"ລຶບອອກຈາກລາຍການທີ່ມັກແລ້ວ"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"ຍົກເລີກ"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"ໂທ​ຫາ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"ເພີ່ມໃສ່ລາຍຊື່ຕິດຕໍ່"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"ເບິ່ງ​ປະ​ຫວັດ​ການ​ໂທ​ແບບເຕັມ"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> ສາຍທີ່ບໍ່ໄດ້ຮັບໃໝ່"</string>
     <string name="no_favorites" msgid="5212485868783382971">"ລາຍງານທີ່ມັກ &amp; ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ທ່ານ\nໂທຫາເລື້ອຍໆ ຈະປາກົດຢູ່ບ່ອນນີ້.\nສະນັ້ນ, ທ່ານສາມາດເລີ່ມໂທໄດ້."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"ແຕະຮູບ​ພາບ​ເພື່ອເບິ່ງຈໍານວນຮູບພາບທັງໝົດ ຫຼືແຕະຄ້າງໄວ້ເພື່ອຈັດຮຽງໃໝ່"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"ເຂົ້າໃຈແລ້ວ"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"​ລຶບ​ອອກ"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"​ໂທ​ດ່ວນ"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່​ທັງ​ໝົດ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ໂທ​ກັບ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ລຶບ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ຟັງ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"ສາຍ​ທີ່ບໍ່​ໄດ້​ຮັບ​ຈາກ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"ສາຍ​ທີ່​ໄດ້​ຮັບ​ຈາກ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"ໂທ​ຫາ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"ໂທ​ກັບ​ຫາ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"​ຟັງ​ຂໍ້​ຄວາມ​ສຽງ​ຈາກ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"ລຶບ​ບັນ​ທຶກ​ການ​ໂທ​​ຫາ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"​ລຶບ​ບັນ​ທຶກ​ການ​ໂທ​ແລ້ວ."</string>
 </resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
deleted file mode 100644
index a9310f7..0000000
--- a/res/values-lo/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"ແປ້ນໂທລະສັບ"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"ໂທລະສັບ"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"ໂທລະສັບ"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"ບັນທຶກການໂທ"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"ສົ່ງຂໍ້ຄວາມ"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"ໂທຫາ <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ແກ້ໄຂເບີກ່ອນໂທ"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ລຶບອອກຈາກບັນທຶກການໂທ"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ລຶບບັນທຶກການໂທ"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ລຶບຂໍ້ຄວາມສຽງ"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ແບ່ງປັນຂໍ້ຄວາມສຽງ"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"ບັນທຶກການໂທຫວ່າງເປົ່າ."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"ລຶບບັນທຶກການໂທ?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ບັນທຶກການໂທທັງໝົດຂອງທ່ານຈະຖືກລຶບອອກ."</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"ກຳລັງລຶກບັນທຶກການໂທ..."</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"ຂໍ້ຄວາມສຽງ"</item>
-    <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> ຂໍ້ຄວາມສຽງ"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"ຫຼິ້ນ"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"ບໍ່ມີຂໍ້ຄວາມສຽງຈາກ <xliff:g id="CALLER">%1$s</xliff:g>"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"ບໍ່ສາມາດເປີດຂໍ້ຄວາມສຽງໄດ້."</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"ກຳລັງດຶງຂໍ້ມູນມາກຽມ..."</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"ກຳລັງດຶງຂໍ້ຄວາມສຽງ..."</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"ບໍ່ສາມາດດຶງຂໍ້ຄວາມສຽງໄດ້."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"ເບີໂທຂໍ້ຄວາມສຽງເທົ່ານັ້ນ"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"ສາຍໂທເຂົ້າເທົ່ານັ້ນ"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"ເບີໂທອອກເທົ່ານັ້ນ"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"ສະເພາະສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາເຊີບເວີຂໍ້ຄວາມສຽງ."</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາເຊີບເວີຂໍ້ຄວາມສຽງໄດ້. ມີຂໍ້ຄວາມສຽງໃໝ່ກຳລັງລໍຖ້າ."</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"ຕັ້ງຄ່າຂໍ້ຄວາມສຽງຂອງທ່ານ"</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"ບໍ່ມີສຽງ."</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"ຕັ້ງຄ່າ"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"ໂທຫາເບີຂໍ້ຄວາມສຽງ"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ຊ້າທີ່ສຸດ"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"ຊ້າ"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"ປົກກະຕິ"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"ໄວ"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"ໄວທີ່ສຸດ"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"ເລືອກເບີໂທ"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"ເລືອກເບີໂທ"</string>
-    <string name="make_primary" msgid="5829291915305113983">"ຈື່ການເລືອກນີ້"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"ນຶ່ງ"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"ສອງ"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"ສາມ"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"ສີ່"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"ຫ້າ"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"ຫົກ"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"ເຈັດ"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"ແປດ"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"ເກົ້າ"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"ຕິດດາວ"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"ສູນ"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"ພາວ"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ຂໍ້ຄວາມສຽງ"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"ຊອກຫາ"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"ແປ້ນໂທ"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"ໝາຍເລກທີ່ຈະໂທ"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"ປະຫວັດການໂທ"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"ໂຕເລືອກເພີ່ມເຕີມ"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ປຸ່ມໂທລະສັບ"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"ສຳເນົາ"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"ສະແດງສະເພາະສາຍໂທອອກ"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"ສະແດງສະເພາະສາຍໂທເຂົ້າ"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"ສະແດງສະເພາະສາຍບໍ່ໄດ້ຮັບ"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"ສະແດງສະເພາະຂໍ້ຄວາມສຽງ"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"ສະແດງການໂທທັງໝົດ"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"ເພີ່ມການຂັ້ນເວລາ 2 ວິນາທີ"</string>
-    <string name="add_wait" msgid="3360818652790319634">"ເພີ່ມການລໍຖ້າ"</string>
-    <string name="call_settings" msgid="7666474782093693667">"ການຕັ້ງຄ່າ"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"ສ້າງລາຍຊື່ຜູ່ຕິດຕໍ່ໃໝ່"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"ລາຍລະອຽດການໂທ"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"ບໍ່ສາມາດອ່ານລາຍລະອຽດຂອງສາຍທີ່ຕ້ອງການໄດ້."</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ໃຊ້ປຸ່ມກົດສັນຍານສຽງ"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"ກັບໄປການໂທທີ່ກຳລັງດຳເນີນຢູ່"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"ເພີ່ມການໂທ"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"ສາຍໂທເຂົ້າ"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"ສາຍໂທອອກ"</string>
-    <string name="type_missed" msgid="2720502601640509542">"ສາຍບໍ່ໄດ້ຮັບ"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"ຂໍ້ຄວາມສຽງ"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"ສາຍໂທເຂົ້າ"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"ເປີດຂໍ້ຄວາມສຽງ"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"ສາຍໂທເຂົ້າ"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ສາຍໂທອອກ"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"ຂໍ້ຄວາມສຽງ"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"ເພີ່ມລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"ເບິ່ງລາຍຊື່ຜູ່ຕິດຕໍ່ <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="description_call" msgid="3443678121983852666">"ໂທຫາ <xliff:g id="NAME">%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_start_voice_search" msgid="520539488194946012">"ເລີ່ມການຊອກຫາດ້ວຍສຽງ"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"ໂທ​ຫາ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="unknown" msgid="740067747858270469">"ບໍ່ຮູ້ຈັກ"</string>
-    <string name="voicemail" msgid="3851469869202611441">"ຂໍ້ຄວາມສຽງ"</string>
-    <string name="private_num" msgid="6374339738119166953">"ເບີສ່ວນໂຕ"</string>
-    <string name="payphone" msgid="4864313342828942922">"ໂທລະສັບສາທາລະນະ"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"ໃຊ້ແປ້ນພິມເພື່ອກົດໂທ"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"ກົດໝາຍເລກເພື່ອເພີ່ມການໂທ"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> ນທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ສາຍບໍ່ໄດ້ສົ່ງ"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ເພື່ອຕັ້ງຄ່າຂໍ້ຄວາມສຽງ ໃຫ້ໄປທີ່ ເມນູ &gt; ການຕັ້ງຄ່າ."</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ເພື່ອໂທຫາເບີຂໍ້ຄວາມສຽງ ທ່ານຕ້ອງປິດໂໝດຢູ່ເທິງຍົນກ່ອນ."</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"ກຳລັງໂຫລດ..."</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"ກຳລັງໂຫລດຈາກ SIM card..."</string>
-    <string name="simContacts_title" msgid="27341688347689769">"ລາຍຊື່ຜູ່ຕິດຕໍ່ SIM card"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"ເປີດການນຳໃຊ້ແອັບພລິເຄຊັນ People ຄືນ ເພື່ອໃຊ້ຄຸນສົມບັດນີ້."</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"ພິມ​ຊື່ ​ຫຼື​ເບີໂທລະ​ສັບ"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ທັງໝົດ"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"ບໍ່ມີສາຍທີ່ບໍ່ໄດ້ຮັບຫຼ້າສຸດ."</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"ບໍ່​ມີຂໍ້ຄວາມສຽງຫຼ້າສຸດ​."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"ສະແດງລາຍຊື່ທັງໝົດ"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"ສະ​ແດງ​ສະເພາະລາຍການທີ່ນິຍົມເທົ່ານັ້ນ"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"ປະຫວັດການໂທ"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"ຖືກເຊື່ອງຈາກລາຍການທີ່ມັກແລ້ວ"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"ຍົກເລີກ"</string>
-</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f934435..90a531e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"žvaigždutė"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nulis"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"svaras"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"balso paštas"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ieškoti"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"rinkti numerį"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"naikinimo klavišas"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"renkamas numeris"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Skambučių istorija"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Daugiau parinkčių"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Rodyti tik praleistus"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Rodyti tik balso pšt. praneš."</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Rodyti visus skambučius"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Pridėti kontaktą"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Pridėti 2 sek. pauzę"</string>
     <string name="add_wait" msgid="3360818652790319634">"Pridėti laukimą"</string>
     <string name="call_settings" msgid="7666474782093693667">"Nustatymai"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Išsiunčiamasis skambutis"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Praleistas skambutis"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Balso paštas"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Pridėti kontaktą"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Žiūrėti kontaktą <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Skambinti <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Išsami kontaktinė informacija: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Išsami skambučio informacija"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Naujas balso pašto pranešimas."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Skambinti <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nežinomas"</string>
     <string name="voicemail" msgid="3851469869202611441">"Balso paštas"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Įkeliama iš SIM kortelės..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM kortelės adresatai"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Iš naujo įgalinti programą Žmonės, kad būtų galima naudoti šią funkciją."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Paieška balsu negalima."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Negalima skambinti telefonu, nes Telefono programa išjungta."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nepasiekiama jokia įdiegta veikla pasirinktam veiksmui atlikti."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Įveskite vardą arba tel. nr."</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Praleisti"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nėra neseniai praleistų skambučių."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nėra neseniai gauto balso pašto."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Rodyti visus kontaktus"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Rodyti tik mėgstamiausius"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Istorija"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Praleisti"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Balso paštas"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Spartusis rinkimas"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Naujausi"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktai"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Visi kontaktai"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Visi kontaktai"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Pašalintas iš adresyno"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Anuliuoti"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Skambinti numeriu <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Pridėti prie kontaktų"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Visos skambučių istorijos peržiūra"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Naujų praleistų skambučių: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Mėgstamiausieji ir kontaktai,\nkuriems dažnai skambinate, bus rodomi čia.\nTad pradėkite skambinti."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Palieskite vaizdą, kad pamatytumėte visus skaičius, arba paspauskite ir palaikykite, kad pakeistumėte tvarką"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Atsisakyti"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Pašalinti"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Spartusis rinkimas"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VISI KONTAKTAI"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ATSKAMBINTI"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"IŠTRINTI"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"KLAUSYTI"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Praleistas skambutis: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Atsakytas skambutis: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Atliktas skambutis: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Atskambinti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Klausyti balso pašto nuo <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Ištrinti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> skambučių žurnalo įrašą"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Skambučių žurnalo įrašas ištrintas."</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 197fcf9..6309952 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"zvaigznīte"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nulle"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"numura zīme"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"balss pasts"</string>
     <string name="description_search_button" msgid="3660807558587384889">"meklēt"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"sastādīt numuru"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"atpakaļatkāpe"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"sastādītais numurs"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Zvanu vēsture"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Vairāk opciju"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Rādīt tikai neatbildētos zvanus"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Rādīt tikai balss pasta ziņ."</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Rādīt visus zvanus"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Pievienot kontaktpersonu"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Pievienot 2 sekundes ilgu pauzi"</string>
     <string name="add_wait" msgid="3360818652790319634">"Pievienot gaidīšanu"</string>
     <string name="call_settings" msgid="7666474782093693667">"Iestatījumi"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Izejošs zvans"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Neatbildēts zvans"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Balss pasts"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Pievienot kontaktpersonu"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Skatīt kontaktpersonu <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Zvanīt šim: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontaktpersonas informācija: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Informācija par zvanu"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Jauns balss pasta ziņojums."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Zvaniet: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nezināms"</string>
     <string name="voicemail" msgid="3851469869202611441">"Balss pasts"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Notiek ielāde no SIM kartes..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontaktpersonas SIM kartē"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Lai izmantotu šo funkciju, atkārtoti iespējojiet lietojumprogrammu Personas."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Meklēšana ar balsi nav pieejama."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Nevar veikt tālruņa zvanu, jo lietojumprogramma Tālrunis tika atspējota."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nav instalēta neviena lietojumprogramma, kurā varētu apstrādāt atlasīto darbību."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ierakstiet vārdu vai tālr. nr."</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Neatb."</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nav nesenu neatbildēto zvanu."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nav nesenu balss pasta ziņojumu."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Rādīt visas kontaktpersonas"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Rādīt tikai izlasi"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Vēsture"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Neatb."</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Balss p."</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Ātrā izvēlne"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Pēdējie"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktpersonas"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Visas kontaktpersonas"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Visas kontaktpersonas"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Noņemts no izlases"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Atsaukt"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Zvaniet: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Pievienot kontaktpersonām"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Visas zvanu vēstures skatīšana"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Jauni neatbildēti zvani: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Šeit tiks rādīta izlase un kontaktpersonas,\nkurām bieži zvanāt.\nVarat sākt zvanīšanu."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Pieskarieties attēlam, lai skatītu visus tālruņa numurus, vai pieskarieties un turiet, lai mainītu secību."</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Noraidīt"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Noņemt"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Ātrā izvēlne"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VISAS KONTAKTPERSONAS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ATZVANĪT"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"DZĒST"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"KLAUSĪTIES"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Neatbildēts zvans no: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Atbildēts zvans no: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Izejošs zvans: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Atzvanīt: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Klausīties balss pasta ziņojumu no: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Dzēst zvanu žurnāla ierakstu par: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Zvanu žurnāla ieraksts ir izdzēsts."</string>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 18144a4..ee424fa 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"од"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"тэг"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"фунт"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"дуут шуудан"</string>
     <string name="description_search_button" msgid="3660807558587384889">"хайх"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"залгах"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Ухраах"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"залгах дугаар"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Дуудлагын түүх"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Нэмэлт сонголтууд"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Зөвхөн аваагүй дуудлагуудыг харуулах"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Зөвхөн дуут шуудангуудыг харуулах"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Бүх дуудлагыг харуулах"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Харилцагч нэмэх"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2-сек зогсолт нэмэх"</string>
     <string name="add_wait" msgid="3360818652790319634">"Хүлээлт нэмэх"</string>
     <string name="call_settings" msgid="7666474782093693667">"Тохиргоо"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Залгасан дуудлага"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Аваагүй дуудлага"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Дуут шуудан"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Харилцагч нэмэх"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> харилцагчийг харах"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> руу залгах"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н харилцагчийн мэдээлэл"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Дуудлагын мэдээлэл"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Шинэ дуут шуудан."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> руу залгах"</string>
     <string name="unknown" msgid="740067747858270469">"Тодорхойгүй"</string>
     <string name="voicemail" msgid="3851469869202611441">"Дуут шуудан"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM картаас уншиж байна…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM картны харилцагчид"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Тус функцийг ашиглахын тулд People аппликешнийг дахин идэвхжүүлнэ үү."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Дуун хайлтыг ашиглах боломжгүй."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Утас аппликешныг идэвхгүйжүүлсэн тул утасны дуудлага хийх боломжгүй."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Сонгосон үйлдлийг гүйцэтгэх боломжтой суулгагдсан апп байхгүй байна."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Нэр эсвэл дугаарыг бичнэ үү"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Бүгд"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Аваагүй"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Саяхны аваагүй дуудлага алга байна."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Саяхны дуут шуудан байхгүй байна."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Бүх харилцагчдыг харуулах"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Зөвхөн дуртайнуудыг харуулах"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Түүх"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Бүгд"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Аваагүй"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Дуут шуудан"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Шуурхай залгах"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Саяхных"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Харилцагчид"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Бүх харилцагчид"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Бүх харилцагчид"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Дуртай жагсаалтаас хасав"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Буцаах"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> руу залгах"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Харилцагчдад нэмэх"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Дуудлагын түүхийг бүхэлд нь харах"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> шинэ аваагүй дуудлага"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Таны дуртай &amp; \nбайнга залгадаг харилцагчид\nэнд харагдах болно."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Бүх тоог харахын тулд зургийг товших буюу дахин захиалахын тулд дараад барина уу"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Хаах"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Хасах"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Шуурхай залгах"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"БҮХ ХАРИЛЦАГЧИД"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"БУЦААЖ ЗАЛГАХ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"УСТГАХ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"СОНСОХ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н аваагүй дуудлага, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н авсан дуудлага, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> руу залгасан дуудлага, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> руу буцаж залгах"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н дуут шууданг сонсох"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н дуудлагын бүртгэлийг устгах"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Дуудлагын бүртгэл устгагдсан."</string>
 </resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
deleted file mode 100644
index 8294eaa..0000000
--- a/res/values-mn/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"Залгагч"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"Утас"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"Утас"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"Дуудлагын жагсаалт"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"Зурвас илгээх"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> руу залгах"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Дуудлага хийхийн өмнө дугаарыг засах"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"Харилцагчдад нэмэх"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Дуудлагын жагсаалтаас хасах"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Дуудлагын жагсаалтыг устгах"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Дуут шууданг устгах"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Дуут шууданг хуваалцах"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"Дуудлагын жагсаалт хоосон байна."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Дуудлагын жагсаалтыг устгах уу?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Таны бүх дуудлагын бичлэгүүд устах болно."</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Дуудлагын жагсаалтыг устгаж байна…"</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"Дуут шуудан"</item>
-    <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> Дуут шуудан"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Тоглуулах"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g>-с ирсэн шинэ дуут шуудан"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"Дуут шууданг тоглуулж чадсангүй."</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"Буферлэж байна…"</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"Дуут шууданг уншиж байна…"</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Дуут шууданг уншиж чадсангүй."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"Зөвхөн дуут шуудантай дуудлагуудыг"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"Зөвхөн ирсэн дуудлага"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"Зөвхөн залгасан дуудлагуудыг"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"Зөвхөн аваагүй дуудлагуудыг"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Дуут шуудангийн серверт холбогдож чадахгүй байна."</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Дуут шуудангийн серверт холбогдож чадахгүй байна. Шинэ дуут шуудангууд хүлээгдэж байна."</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Дуут шуудангаа тохируулна уу."</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Аудио байхгүй байна."</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Тохируулах"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Дуут шуудан руу залгах"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Хамгийн удаанаар"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"Удаанаар"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"Энгийн хурдаар"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"Хурданаар"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Хамгийн хурданаар"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"Дугаар сонгоно уу"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"Дугаар сонгоно уу"</string>
-    <string name="make_primary" msgid="5829291915305113983">"Энэ сонголтыг санах"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"нэг"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"хоёр"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"гурав"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"дөрөв"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"тав"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"зургаа"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"долоо"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"найм"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"ес"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"од"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"тэг"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"фунт"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"дуут шуудан"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"хайх"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"залгах"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Ухраах"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"залгах дугаар"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Дуудлагын түүх"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"Нэмэлт сонголтууд"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"дугаар цуглуулагч"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"Хуулах"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Зөвхөн залгасан дуудлагуудыг харуулах"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"Зөвхөн ирсэн дуудлагуудыг харуулах"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"Зөвхөн аваагүй дуудлагуудыг харуулах"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Зөвхөн дуут шуудангуудыг харуулах"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"Бүх дуудлагыг харуулах"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"2-сек зогсолт нэмэх"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Хүлээлт нэмэх"</string>
-    <string name="call_settings" msgid="7666474782093693667">"Тохиргоо"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"Шинэ харилцагч"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"Дуудлагын мэдээлэл"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"Хийсэн дуудлагын дэлгэрэнгүй мэдээллийг уншиж чадсангүй."</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Хүрэлтээр дуугардаг гар ашиглах"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Үргэлжилж буй дуудлага руу буцах"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Дуудлага нэмэх"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"Ирж буй дуудлага"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"Залгасан дуудлага"</string>
-    <string name="type_missed" msgid="2720502601640509542">"Аваагүй дуудлага"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"Дуут шуудан"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"Ирж буй дуудлага"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"Дуут шууданг тоглуулах"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Ирж буй дуудлага"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Залгасан дуудлага"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"Аваагүй дуудлага"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"Дуут шуудан"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Харилцагч нэмэх"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> харилцагчийг харах"</string>
-    <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%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_start_voice_search" msgid="520539488194946012">"Дуун хайлтыг эхлүүлэх"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> руу залгах"</string>
-    <string name="unknown" msgid="740067747858270469">"Тодорхойгүй"</string>
-    <string name="voicemail" msgid="3851469869202611441">"Дуут шуудан"</string>
-    <string name="private_num" msgid="6374339738119166953">"Нууцлагдсан дугаар"</string>
-    <string name="payphone" msgid="4864313342828942922">"Төлбөртэй утас"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Залгахдаа гар ашиглах"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"Дуудлага нэмэхийн тулд залгана уу"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> минут <xliff:g id="SECONDS">%s</xliff:g> секунд"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Дуудлага илгээгдсэнгүй"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Дуут шууданг тохируулахын тулд Цэс &gt; Тохиргоо руу очно уу."</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Дуут шуудан руу залгахын тулд юуны өмнө Нислэгийн төлвийг идэвхгүйжүүлнэ үү."</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"Ачааллаж байна..."</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM картаас уншиж байна…"</string>
-    <string name="simContacts_title" msgid="27341688347689769">"SIM картны харилцагчид"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"Тус функцийг ашиглахын тулд People аппликешнийг дахин идэвхжүүлнэ үү."</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Нэр эсхүл дугаарыг бичнэ үү"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Бүгд"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Аваагүй"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"Саяхны аваагүй дуудлага алга байна."</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"Саяхны дуут шуудан байхгүй байна."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Бүх харилцагчдыг харуулах"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"Зөвхөн дуртайнуудыг харуулах"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"Түүх"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"Бүх харилцагчид"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Бүх харилцагчид"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"Дуртай харилцагчдаас нууцалсан"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"Буцаах"</string>
-</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 20ee265..327920d 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"bintang"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"sifar"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"paun"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"mel suara"</string>
     <string name="description_search_button" msgid="3660807558587384889">"cari"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"dail"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"undur ruang"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nombor untuk didail"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Sejarah Panggilan"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Lagi pilihan"</string>
@@ -89,6 +87,8 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Tunjuk panggilan terlepas shj"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Tunjukkan mel suara sahaja"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Tunjukkan semua panggilan"</string>
+    <!-- no translation found for add_contact (8875804371377471164) -->
+    <skip />
     <string name="add_2sec_pause" msgid="9214012315201040129">"Tambah jeda 2 saat"</string>
     <string name="add_wait" msgid="3360818652790319634">"Tambah penungguan"</string>
     <string name="call_settings" msgid="7666474782093693667">"Tetapan"</string>
@@ -109,13 +109,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Panggilan keluar"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Panggilan tidak dijawab"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Mel suara"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Tambah kenalan"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Lihat kenalan <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Panggil <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Butiran hubungan untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Butiran panggilan"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Mel suara baharu."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
     <string name="voicemail" msgid="3851469869202611441">"Mel suara"</string>
@@ -133,32 +136,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Memuatkan dari kad SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kenalan kad SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Dayakan semula aplikasi Orang untuk menggunakan ciri ini."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Carian suara tidak tersedia."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Tidak boleh membuat panggilan telefon kerana aplikasi Telefon telah dilumpuhkan."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Tiada aktiviti yang dipasang tersedia untuk mengendalikan tindakan yang dipilih."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Taip nama atau nombor telefon"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Tidak dijawab"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Tiada panggilan tidak dijawab terbaru."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tiada mel suara terbaru."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Tunjukkan semua kenalan"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Tunjukkan kegemaran sahaja"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Sejarah"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Tidak dijawab"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Mel suara"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Dail Laju"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Terkini"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kenalan"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Semua kenalan"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Semua kenalan"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Dialih keluar daripada kegemaran"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Buat asal"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Tambahkan pada kenalan"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Lihat sejarah panggilan penuh"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> panggilan terlepas baharu"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Kegemaran &amp; kenalan yang\nkerap anda hubungi akan ditunjukkan di sini.\nJadi, mulalah membuat panggilan."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Ketik imej untuk melihat semua nombor atau tekan dan tahan imej untuk menyusun semula"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ketepikan"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Alih keluar"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Dail Laju"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"SEMUA KENALAN"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"PANGGIL BALIK"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"PADAM"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"DENGAR"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Panggilan yang tidak dijawab daripada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Panggilan yang dijawab daripada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Panggilan kepada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Panggil balik <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Dengar mel suara daripada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Padam entri log panggilan untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entri log panggilan dihapuskan."</string>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
deleted file mode 100644
index a7d42cb..0000000
--- a/res/values-ms/strings.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="applicationLabel" msgid="8490255569343340580">"Pendail"</string>
-    <string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
-    <string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
-    <string name="recentCallsIconLabel" msgid="1419116422359067949">"Log panggilan"</string>
-    <string name="menu_sendTextMessage" msgid="6937343460284499306">"Hantar mesej teks"</string>
-    <string name="recentCalls_callNumber" msgid="1756372533999226126">"Panggil <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edit nombor sebelum panggilan"</string>
-    <string name="recentCalls_addToContact" msgid="1429899535546487008">"Tambah ke kenalan"</string>
-    <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Alih keluar daripada log panggilan"</string>
-    <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Padam bersih log panggilan"</string>
-    <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Padamkan mel suara"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Kongsi mel suara"</string>
-    <string name="recentCalls_empty" msgid="247053222448663107">"Log panggilan kosong."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Padam bersih log panggilan?"</string>
-    <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Semua rekod panggilan anda akan dipadamkan."</string>
-    <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Memadam bersih log panggilan..."</string>
-  <plurals name="notification_voicemail_title">
-    <item quantity="one" msgid="1746619685488504230">"Mel suara"</item>
-    <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> Mel suara"</item>
-  </plurals>
-    <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Main"</string>
-    <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
-    <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Mel suara baru daripada <xliff:g id="CALLER">%1$s</xliff:g>"</string>
-    <string name="voicemail_playback_error" msgid="1811242131549854624">"Tidak dapat memainkan mel suara."</string>
-    <string name="voicemail_buffering" msgid="738287747618697097">"Menimbal…"</string>
-    <string name="voicemail_fetching_content" msgid="877911315738258780">"Sedang mendapatkan mel suara…"</string>
-    <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Tidak dapat mengambil mel suara."</string>
-    <string name="call_log_voicemail_header" msgid="3945407886667089173">"Panggilan dengan mel suara sahaja"</string>
-    <string name="call_log_incoming_header" msgid="2787722299753674684">"Panggilan masuk sahaja"</string>
-    <string name="call_log_outgoing_header" msgid="761009180766735769">"Panggilan keluar sahaja"</string>
-    <string name="call_log_missed_header" msgid="8017148056610855956">"Panggilan terlepas sahaja"</string>
-    <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Tidak boleh bersambung kepada pelayan mel suara."</string>
-    <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Tak boleh brsmbg kpd pelayan mel suara. Mel suara baru menunggu."</string>
-    <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Sediakan mel suara anda."</string>
-    <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Audio tidak tersedia."</string>
-    <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Menyediakan"</string>
-    <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Panggil mel suara"</string>
-    <string name="voicemail_speed_slowest" msgid="1733460666177707312">"kelajuan paling perlahan"</string>
-    <string name="voicemail_speed_slower" msgid="1508601287347216244">"Kelajuan perlahan"</string>
-    <string name="voicemail_speed_normal" msgid="9033988544627228892">"Kelajuan biasa"</string>
-    <string name="voicemail_speed_faster" msgid="2019965121475935488">"Kelajuan pantas"</string>
-    <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Kelajuan paling pantas"</string>
-    <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
-    <string name="sms_disambig_title" msgid="5846266399240630846">"Pilih nombor"</string>
-    <string name="call_disambig_title" msgid="4392886850104795739">"Pilih nombor"</string>
-    <string name="make_primary" msgid="5829291915305113983">"Ingat pilihan ini"</string>
-    <string name="description_image_button_one" msgid="1740638037139856139">"satu"</string>
-    <string name="description_image_button_two" msgid="5882638439003731308">"dua"</string>
-    <string name="description_image_button_three" msgid="8709731759376015180">"tiga"</string>
-    <string name="description_image_button_four" msgid="3530239685642246130">"empat"</string>
-    <string name="description_image_button_five" msgid="1182465427501188413">"lima"</string>
-    <string name="description_image_button_six" msgid="2093656269261415475">"enam"</string>
-    <string name="description_image_button_seven" msgid="2450357020447676481">"tujuh"</string>
-    <string name="description_image_button_eight" msgid="6969435115163287801">"lapan"</string>
-    <string name="description_image_button_nine" msgid="7857248695662558323">"sembilan"</string>
-    <string name="description_image_button_star" msgid="3365919907520767866">"bintang"</string>
-    <string name="description_image_button_zero" msgid="4133108949401820710">"sifar"</string>
-    <string name="description_image_button_pound" msgid="3039765597595889230">"paun"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"mel suara"</string>
-    <string name="description_search_button" msgid="3660807558587384889">"cari"</string>
-    <string name="description_dial_button" msgid="1274091017188142646">"dail"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"undur ruang"</string>
-    <string name="description_digits_edittext" msgid="8760207516497016437">"nombor untuk didail"</string>
-    <string name="action_menu_call_history_description" msgid="9018442816219748968">"Sejarah Panggilan"</string>
-    <string name="action_menu_overflow_description" msgid="2303272250613084574">"Lagi pilihan"</string>
-    <string name="action_menu_dialpad_button" msgid="1425910318049008136">"pad dail"</string>
-    <string name="menu_copy" msgid="6108677035381940698">"Salin"</string>
-    <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Tunjuk panggilan keluar shj"</string>
-    <string name="menu_show_incoming_only" msgid="7534206815238877417">"Tunjuk panggilan masuk shj"</string>
-    <string name="menu_show_missed_only" msgid="154473166059743996">"Tunjuk panggilan terlepas shj"</string>
-    <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Tunjukkan mel suara sahaja"</string>
-    <string name="menu_show_all_calls" msgid="7560347482073345885">"Tunjukkan semua panggilan"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"Tambah jeda 2 saat"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Tambah penungguan"</string>
-    <string name="call_settings" msgid="7666474782093693667">"Tetapan"</string>
-    <string name="menu_newContact" msgid="1209922412763274638">"Kenalan baru"</string>
-    <string name="callDetailTitle" msgid="5340227785196217938">"Butiran panggilan"</string>
-    <string name="toast_call_detail_error" msgid="7200975244804730096">"Tidak boleh membaca butiran untuk panggilan yang diminta."</string>
-    <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gunakan pad kekunci nada sentuh"</string>
-    <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Kembali ke panggilan yang sedang berlangsung"</string>
-    <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Tambah panggilan"</string>
-    <string name="type_incoming" msgid="6502076603836088532">"Panggilan masuk"</string>
-    <string name="type_outgoing" msgid="343108709599392641">"Panggilan keluar"</string>
-    <string name="type_missed" msgid="2720502601640509542">"Panggilan tidak dijawab"</string>
-    <string name="type_voicemail" msgid="5153139450668549908">"Mel suara"</string>
-    <string name="actionIncomingCall" msgid="6028930669817038600">"Panggilan masuk"</string>
-    <string name="description_call_log_play_button" msgid="651182125650429846">"Mainkan mel suara"</string>
-    <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Panggilan masuk"</string>
-    <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Panggilan keluar"</string>
-    <string name="description_call_log_missed_call" msgid="2242805209983708825">"Panggilan tidak dijawab"</string>
-    <string name="description_call_log_voicemail" msgid="4600798771975158948">"Mel suara"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Tambah kenalan"</string>
-    <string name="description_view_contact" msgid="5205669345700598415">"Lihat kenalan <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="description_call" msgid="3443678121983852666">"Panggil <xliff:g id="NAME">%1$s</xliff:g>"</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_start_voice_search" msgid="520539488194946012">"Mulakan carian suara"</string>
-    <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
-    <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
-    <string name="voicemail" msgid="3851469869202611441">"Mel suara"</string>
-    <string name="private_num" msgid="6374339738119166953">"Nombor peribadi"</string>
-    <string name="payphone" msgid="4864313342828942922">"Telefon awam"</string>
-    <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Gunakan papan kekunci untuk mendail"</string>
-    <string name="dialerDialpadHintText" msgid="5824490365898349041">"Dail untuk menambah panggilan"</string>
-    <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
-    <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Panggilan tidak dihantar"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Untuuk menyediakan mel suara, pergi ke Menu &gt; Tetapan."</string>
-    <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Untuk membuat panggilan ke mel suara, mula-mula matikan mod Pesawat."</string>
-    <string name="contact_list_loading" msgid="5488620820563977329">"Memuatkan…"</string>
-    <string name="imei" msgid="3045126336951684285">"IMEI"</string>
-    <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Memuatkan dari kad SIM..."</string>
-    <string name="simContacts_title" msgid="27341688347689769">"Kenalan kad SIM"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"Dayakan semula aplikasi Orang untuk menggunakan ciri ini."</string>
-    <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Taipkan nama atau telefon"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Tidak dijawab"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"Tiada panggilan tidak dijawab terbaru."</string>
-    <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tiada mel suara terbaru."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Tunjukkan semua kenalan"</string>
-    <string name="show_favorites_only" msgid="5520072531022614595">"Tunjukkan kegemaran sahaja"</string>
-    <string name="call_log_activity_title" msgid="4612824396355272023">"Sejarah"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
-    <string name="show_all_contacts_title" msgid="8395378484578221791">"Semua kenalan"</string>
-    <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Semua kenalan"</string>
-    <string name="favorite_hidden" msgid="4837366417440391323">"Disembunyikan daripada kegemaran"</string>
-    <string name="favorite_hidden_undo" msgid="2508998611039406474">"Buat asal"</string>
-</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index cdd18ec..6661d5f 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"stjerne"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"firkant"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"talepostkasse"</string>
     <string name="description_search_button" msgid="3660807558587384889">"søk"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"tilbaketast"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"ring til"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Anropslogg"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Flere alternativer"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Vis bare tapte"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Vis bare talemeldinger"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Vis alle samtaler"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Legg til kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Legg til pause på 2 sek."</string>
     <string name="add_wait" msgid="3360818652790319634">"Legg til Vent"</string>
     <string name="call_settings" msgid="7666474782093693667">"Innstillinger"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Utgående samtale"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Tapt anrop"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Talepostkasse"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Legg til kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Se kontakten <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Ring til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontaktinformasjon for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Samtaleinformasjon"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Ny talemelding."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Ukjent"</string>
     <string name="voicemail" msgid="3851469869202611441">"Telefonsvarer"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Henter fra SIM-kort…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Aktiver Personer-appen på nytt for å bruke denne funksjonen."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Talesøk er ikke tilgjengelig."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Kan ikke ringe fordi Telefon-appen er deaktivert."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Det er ingen installert aktivitet tilgjengelig for å håndtere den valgte handlingen."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Skriv inn et navn eller telefonnummer"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Ikke besvart"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Ingen nylige ubesvarte anrop"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ingen nylige talemeldinger"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Vis alle kontakter"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Vis bare favoritter"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Logg"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Ikke besvart"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Talemeldinger"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Hurtigoppringing"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Sist brukte"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakter"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Alle kontakter"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Alle kontakter"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Fjernet fra favoritter"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Angre"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Legg til i kontakter"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Se hele anropsloggen"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nye tapte anrop"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Favoritter og kontakter du \nringer ofte vises her.\n Ring i vei."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Trykk på bildet for å se alle telefonnumrene, eller trykk og hold inne for å endre rekkefølgen"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Fjern"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Fjern"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Hurtigoppringing"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE KONTAKTER"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RING TILBAKE"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SLETT"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LYTT"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Tapt anrop fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Besvart anrop fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Ring til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Ring tilbake til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Lytt til talepostkasse fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Slett oppføring i samtaleloggen for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Oppføringen i samtaleloggen slettet."</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c8c6bb9..7ffc8bb 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ster"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"hekje"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
     <string name="description_search_button" msgid="3660807558587384889">"zoeken"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"bellen"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nummer om te bellen"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Oproepgeschiedenis"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Meer opties"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Alleen gemist weergeven"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Alleen voicemails weergeven"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Alle oproepen weergeven"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Contact toevoegen"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Pauze van 2 seconden toevoegen"</string>
     <string name="add_wait" msgid="3360818652790319634">"Wachten toevoegen"</string>
     <string name="call_settings" msgid="7666474782093693667">"Instellingen"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Uitgaande oproep"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Gemiste oproep"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Contact toevoegen"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Contact <xliff:g id="NAME">%1$s</xliff:g> bekijken"</string>
     <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> bellen"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Contactgegevens voor <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Gespreksgegevens"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nieuwe voicemail."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Onbekend"</string>
     <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laden vanaf SIM-kaart..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contacten op SIM-kaart"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Schakel de app \'Personen\' opnieuw in om deze functie te gebruiken."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Gesproken zoekopdrachten zijn niet beschikbaar"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Kan niet bellen omdat de Telefoon-app is uitgeschakeld."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Geen geïnstalleerde activiteit beschikbaar om de geselecteerde actie te verwerken."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Typ een naam of telefoonnummer"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Gemist"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"Geen recente gemiste oproepen."</string>
+    <string name="recentMissed_empty" msgid="5427113551557296665">"Geen recente gemiste oproepen"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Geen recente voicemails."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Alle contacten weergeven"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Alleen favorieten weergeven"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Geschiedenis"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Gemist"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Snelkeuze"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recent"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contacten"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Alle contacten"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Alle contacten"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Verwijderd uit favorieten"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Ongedaan maken"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Toevoegen aan contacten"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Volledige oproepgeschiedenis bekijken"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nieuwe gemiste oproepen"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Favorieten en contacten die u\nvaak belt, worden hier weergegeven.\nDus begin met bellen."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Favorieten en contacten die u\nvaak belt, worden hier weergegeven.\n"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tik op de afbeelding om alle nummers te bekijken of raak deze lang aan om de volgorde van nummers te wijzigen"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Sluiten"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Verwijderen"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Snelkeuze"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE CONTACTEN"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"TERUGBELLEN"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"VERWIJDEREN"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LUISTEREN"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Gemiste oproep van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Beantwoorde oproep van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Oproep aan <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> terugbellen"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Voicemail beluisteren van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Vermelding in gesprekkenlijst verwijderen voor <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Vermelding in gesprekkenlijst verwijderd."</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 07ccb56..df8d718 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"gwiazdka"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"poczta głosowa"</string>
     <string name="description_search_button" msgid="3660807558587384889">"szukaj"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"wybierz numer"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numer do wybrania"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historia połączeń"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Więcej opcji"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Pokaż tylko nieodebrane"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Pokaż tylko pocztę głosową"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Pokaż wszystkie połączenia"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Dodaj kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj 2-sekundową pauzę"</string>
     <string name="add_wait" msgid="3360818652790319634">"Dodaj oczekiwanie"</string>
     <string name="call_settings" msgid="7666474782093693667">"Ustawienia"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Połączenie wychodzące"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Nieodebrane połączenie"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Poczta głosowa"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Dodaj kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Wyświetl kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Połącz z: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Szczegóły kontaktu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Szczegóły połączenia"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nowa poczta głosowa."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Zadzwoń: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Nieznane"</string>
     <string name="voicemail" msgid="3851469869202611441">"Poczta głosowa"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Wczytywanie z karty SIM…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakty z karty SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Aby korzystać z tej funkcji, włącz ponownie aplikację Kontakty."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Wyszukiwanie głosowe jest niedostępne."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Nie można zadzwonić, ponieważ aplikacja Telefon została wyłączona."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Brak zainstalowanej aplikacji wykonującej wybrane działanie."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Wpisz nazwisko/numer telefonu"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Wszystkie"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Nieodebrane"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Brak nowych nieodebranych połączeń."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Brak nowej poczty głosowej."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Pokaż wszystkie kontakty"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Pokaż tylko ulubione"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Wszystkie"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Nieodebrane"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Poczta gł."</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Szybkie wybieranie"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Niedawne"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakty"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Wszystkie kontakty"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Wszystkie kontakty"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Usunięto z ulubionych"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Cofnij"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Zadzwoń: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Dodaj do kontaktów"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Wyświetl pełną historię połączeń"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Nowe nieodebrane połączenia: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Tutaj będą widoczne Twoje\nulubione i najczęstsze kontakty.\nPora zacząć dzwonić."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Kliknij zdjęcie, by zobaczyć wszystkie numery, lub kliknij je i przytrzymaj, by zmienić kolejność"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Zamknij"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Usuń"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Szybkie wybieranie"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"WSZYSTKIE KONTAKTY"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ODDZWOŃ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"USUŃ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSŁUCHAJ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Nieodebrane połączenie od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Odebrane połączenie od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Połączenie wychodzące z: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Oddzwoń do: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Posłuchaj wiadomości głosowej od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Usuń wpis dziennika połączeń: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Wpis dziennika połączeń został usunięty."</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index fa7ae19..87f48e0 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -30,7 +30,7 @@
     <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Eliminar correio de voz"</string>
     <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Partilhar correio de voz"</string>
     <string name="recentCalls_empty" msgid="247053222448663107">"O registo de chamadas está vazio."</string>
-    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Limpar reg. de cham.?"</string>
+    <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Limpar registo de chamadas?"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Todos os registos de chamadas serão eliminados."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"A limpar registo de chamadas..."</string>
   <plurals name="notification_voicemail_title">
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"estrela"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"correio de voz"</string>
     <string name="description_search_button" msgid="3660807558587384889">"pesquisar"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"retrocesso"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número a marcar"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Histórico de Chamadas"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mais opções"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar apenas cham. n. atend."</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostrar apenas msgs corr. voz"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas as chamadas"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Adicionar contacto"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Adicionar pausa de 2 seg."</string>
     <string name="add_wait" msgid="3360818652790319634">"Adicionar espera"</string>
     <string name="call_settings" msgid="7666474782093693667">"Definições"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Chamada efetuada"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Chamada não atendida"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Correio de voz"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Adicionar contacto"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Ver o contacto <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Ligar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Detalhes de contacto para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detalhes da chamada"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Novo correio de voz."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Telefonar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconhecido"</string>
     <string name="voicemail" msgid="3851469869202611441">"Correio de voz"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"A carregar a partir do cartão SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contactos no cartão SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Reative a aplicação Pessoas para utilizar esta funcionalidade."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"A pesquisa por voz não está disponível."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Não é possível efetuar uma chamada porque a aplicação Telefone foi desativada."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Não existe qualquer atividade instalada disponível para processar a ação selecionada."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Introduzir nome ou n.º telef."</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Todos"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Não atendidas"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Não existem chamadas não atendidas recentes."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Não existe correio de voz recente."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos os contactos"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostrar apenas os favoritos"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Histórico"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Todos"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Não atendidas"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Corr. Voz"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Marcação rápida"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recentes"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contactos"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Todos os contactos"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Todos os contactos"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Removido dos favoritos"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Anular"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Telefonar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adicionar aos contactos"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Ver histórico de chamadas completo"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> chamadas não atendidas novas"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Os favoritos e os contactos para os quais\nliga frequentemente serão mostrados aqui,\n por isso, comece a ligar."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Toque na imagem para ver todos os números ou prima sem soltar para reordenar"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ignorar"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Remover"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Marcação rápida"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS OS CONTACTOS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"TELEFONAR DE VOLTA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ELIMINAR"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"OUVIR"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Chamada não atendida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Chamada atendida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Chamada para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Telefonar de volta para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Ouvir o correio de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Eliminar entrada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> do registo de chamadas"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada eliminada do registo de chamadas."</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index a2d0fea..e97721c 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"estrela"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"correio de voz"</string>
     <string name="description_search_button" msgid="3660807558587384889">"pesquisar"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"discar"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"número para discagem"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Histórico de chamadas"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mais opções"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar apenas perdidas"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Exibir apenas mensagens de voz"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas as chamadas"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Adicionar contato"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Adicionar pausa de 2 segundos"</string>
     <string name="add_wait" msgid="3360818652790319634">"Adicionar espera"</string>
     <string name="call_settings" msgid="7666474782093693667">"Configurações"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Chamada realizada"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Chamada perdida"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Mensagem de voz"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Adicionar contato"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Visualizar contato <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Ligar para <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Detalhes de contato para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detalhes da chamada"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nova mensagem de voz."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ligar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Desconhecido"</string>
     <string name="voicemail" msgid="3851469869202611441">"Correio de voz"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Carregando do cartão SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Contatos do cartão SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Reative o aplicativo Pessoas para usar este recurso."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"A pesquisa por voz não está disponível."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Não é possível fazer uma chamada porque o aplicativo Telefone foi desativado."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nenhuma atividade instalada disponível para a ação selecionada."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Digite um nome ou telefone"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Tudo"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nenhuma chamada perdida recente."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nenhuma mensagem de voz recente."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos os contatos"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mostrar somente favoritos"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Histórico"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Tudo"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Correio de voz"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Discagem rápida"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recentes"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Contatos"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Todos os contatos"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Todos os contatos"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Removido dos favoritos"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Desfazer"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ligar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adicionar aos contatos"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Ver todo o histórico de chamadas"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> novas chamadas perdidas"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Seus favoritos e os contatos\npara os quais você liga com mais frequência aparecerão aqui.\nComece a ligar!"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Toque na imagem para ver todos os números ou pressione e segure para reordenar"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Descartar"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Remover"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Discagem rápida"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS OS CONTATOS"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RETORNAR CHAMADA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"EXCLUIR"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"OUVIR"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Chamada perdida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Chamada atendida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Chamada para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Retornar chamada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Ouvir mensagem de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Excluir a entrada do registro de chamadas para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada do registro de chamadas excluída."</string>
 </resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index e1b7c63..b6cd048 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -104,11 +104,9 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"staila"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nulla"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"glivra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"Mailbox"</string>
     <!-- no translation found for description_search_button (3660807558587384889) -->
     <skip />
     <string name="description_dial_button" msgid="1274091017188142646">"cumponer"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"tasta da return"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numer da cumponer"</string>
     <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
     <skip />
@@ -129,6 +127,8 @@
     <skip />
     <!-- no translation found for menu_show_all_calls (7560347482073345885) -->
     <skip />
+    <!-- no translation found for add_contact (8875804371377471164) -->
+    <skip />
     <string name="add_2sec_pause" msgid="9214012315201040129">"Agiuntar ina pausa da 2 secundas"</string>
     <string name="add_wait" msgid="3360818652790319634">"Agiuntar Spetgar"</string>
     <!-- no translation found for call_settings (7666474782093693667) -->
@@ -157,19 +157,25 @@
     <skip />
     <!-- no translation found for description_call_log_voicemail (4600798771975158948) -->
     <skip />
-    <!-- no translation found for description_add_contact (3103414772502485851) -->
-    <skip />
     <!-- no translation found for description_view_contact (5205669345700598415) -->
     <skip />
     <!-- no translation found for description_call (3443678121983852666) -->
     <skip />
+    <!-- no translation found for description_contact_details (51229793651342809) -->
+    <skip />
+    <!-- no translation found for description_call_details (8936017517290240089) -->
+    <skip />
+    <!-- no translation found for description_new_voicemail (2133792360865517746) -->
+    <skip />
+    <!-- no translation found for description_num_calls (1601505153694540074) -->
+    <skip />
     <!-- no translation found for description_send_text_message (7803126439934046891) -->
     <skip />
     <!-- no translation found for description_call_log_unheard_voicemail (118101684236996786) -->
     <skip />
-    <!-- no translation found for description_start_voice_search (520539488194946012) -->
+    <!-- no translation found for description_clear_search (688023606766232904) -->
     <skip />
-    <!-- no translation found for call_log_empty_gecode (2019639420045039861) -->
+    <!-- no translation found for description_start_voice_search (520539488194946012) -->
     <skip />
     <!-- no translation found for menu_callNumber (997146291983360266) -->
     <skip />
@@ -193,41 +199,33 @@
     <string name="simContacts_title" msgid="27341688347689769">"Contacts sin la carta SIM"</string>
     <!-- no translation found for add_contact_not_available (1419207765446461366) -->
     <skip />
+    <!-- no translation found for voice_search_not_available (7580616740587850828) -->
+    <skip />
+    <!-- no translation found for call_not_available (8941576511946492225) -->
+    <skip />
+    <!-- no translation found for activity_not_available (8265265380537872585) -->
+    <skip />
     <!-- no translation found for dialer_hint_find_contact (8798845521253672403) -->
     <skip />
-    <!-- no translation found for call_log_all_title (3566738938889333307) -->
-    <skip />
-    <!-- no translation found for call_log_missed_title (4541142293870638971) -->
-    <skip />
     <!-- no translation found for recentMissed_empty (5427113551557296665) -->
     <skip />
     <!-- no translation found for recentVoicemails_empty (5163114119598014048) -->
     <skip />
-    <!-- no translation found for show_all_contacts (1732256558071778056) -->
-    <skip />
     <!-- no translation found for show_favorites_only (5520072531022614595) -->
     <skip />
     <!-- no translation found for call_log_activity_title (4612824396355272023) -->
     <skip />
-    <!-- no translation found for dialpad_0_number (8859392433961251108) -->
+    <!-- no translation found for call_log_all_title (3566738938889333307) -->
     <skip />
-    <!-- no translation found for dialpad_1_number (6536740525419909212) -->
+    <!-- no translation found for call_log_missed_title (4541142293870638971) -->
     <skip />
-    <!-- no translation found for dialpad_2_number (4941546415280852148) -->
+    <!-- no translation found for call_log_voicemail_title (940422274047025948) -->
     <skip />
-    <!-- no translation found for dialpad_3_number (6539414865185536881) -->
+    <!-- no translation found for tab_speed_dial (7807567599021643864) -->
     <skip />
-    <!-- no translation found for dialpad_4_number (979988372051042362) -->
+    <!-- no translation found for tab_recents (929949073851377206) -->
     <skip />
-    <!-- no translation found for dialpad_5_number (5492272478939926734) -->
-    <skip />
-    <!-- no translation found for dialpad_6_number (8044579516869379093) -->
-    <skip />
-    <!-- no translation found for dialpad_7_number (4175113016564167123) -->
-    <skip />
-    <!-- no translation found for dialpad_8_number (7949849563865941621) -->
-    <skip />
-    <!-- no translation found for dialpad_9_number (4377059952097526576) -->
+    <!-- no translation found for tab_all_contacts (1410922767166533690) -->
     <skip />
     <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
     <skip />
@@ -241,6 +239,8 @@
     <skip />
     <!-- no translation found for search_shortcut_add_to_contacts (1853716708655789069) -->
     <skip />
+    <!-- no translation found for recents_footer_text (7315554578957453359) -->
+    <skip />
     <!-- no translation found for num_missed_calls (8081736535604293886) -->
     <skip />
     <!-- no translation found for no_favorites (5212485868783382971) -->
@@ -249,4 +249,30 @@
     <skip />
     <!-- no translation found for description_dismiss (2146276780562549643) -->
     <skip />
+    <!-- no translation found for remove_contact (1080555335283662961) -->
+    <skip />
+    <!-- no translation found for favorites_menu_speed_dial (3832518092014707628) -->
+    <skip />
+    <!-- no translation found for favorites_menu_all_contacts (992506284449891186) -->
+    <skip />
+    <!-- no translation found for call_log_action_call_back (4944463006859852473) -->
+    <skip />
+    <!-- no translation found for call_log_action_delete (7371990297839987600) -->
+    <skip />
+    <!-- no translation found for call_log_action_voicemail (4978620572562925654) -->
+    <skip />
+    <!-- no translation found for description_incoming_missed_call (2610535352863246949) -->
+    <skip />
+    <!-- no translation found for description_incoming_answered_call (7206670204016969740) -->
+    <skip />
+    <!-- no translation found for description_outgoing_call (3964211633673659733) -->
+    <skip />
+    <!-- no translation found for description_call_back_action (3012837380108884260) -->
+    <skip />
+    <!-- no translation found for description_voicemail_action (8054891873788903063) -->
+    <skip />
+    <!-- no translation found for description_delete_action (7188614068459616450) -->
+    <skip />
+    <!-- no translation found for toast_entry_removed (3389119736202317999) -->
+    <skip />
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 53cc3ab..8da161f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"stea"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"clar"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"Mesaj vocal"</string>
     <string name="description_search_button" msgid="3660807558587384889">"căutare"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"apelaţi"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"tasta backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numărul de apelat"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Istoricul apelurilor"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Mai multe opţiuni"</string>
@@ -89,6 +87,8 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Numai apelurile nepreluate"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Afişaţi numai mesajele vocale"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Afişaţi toate apelurile"</string>
+    <!-- no translation found for add_contact (8875804371377471164) -->
+    <skip />
     <string name="add_2sec_pause" msgid="9214012315201040129">"Pauză 2 secunde"</string>
     <string name="add_wait" msgid="3360818652790319634">"Adăugaţi interval de aşteptare"</string>
     <string name="call_settings" msgid="7666474782093693667">"Setări"</string>
@@ -109,13 +109,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Apel de ieşire"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Apel nepreluat"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Mesaj vocal"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Adăugaţi o persoană în agendă"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Afişaţi persoana din agendă <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Apelaţi pe <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Detalii de contact pentru <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Detaliile apelului"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Mesaj vocal nou."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Apelaţi <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Necunoscut"</string>
     <string name="voicemail" msgid="3851469869202611441">"Mesagerie vocală"</string>
@@ -133,32 +136,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Se încarcă de pe cardul SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Persoanele din agendă de pe cardul SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Pentru a utiliza această funcție, reactivați aplicația Persoane."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Funcția Căutare vocală nu este disponibilă."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Nu se poate efectua un apel telefonic, deoarece aplicația Telefon a fost dezactivată."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nu este disponibilă nicio aplicație instalată pentru efectuarea acțiunii selectate."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Introd. nume sau nr. telefon"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Toate"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Nepreluate"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Nu există apeluri nepreluate recente."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nu există mesaje vocale recente."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Afișați toate persoanele de contact"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Afișați numai preferate"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Istoric"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Toate"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Nepreluate"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Mes. vocal"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Apelare rapidă"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Recente"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Agendă"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Toată agenda"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Toată agenda"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"S-a eliminat din preferate"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Anulați"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Apelați <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adăugați în Agendă"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Vedeți istoricul complet al apelurilor"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> (de) apeluri nepreluate noi"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Preferințele și persoanele din Agendă pe care \nle apelați frecvent vor fi afișate aici.\nÎncepeți să faceți apeluri."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Atingeți imaginea pentru a vedea toate numerele sau apăsați și țineți apăsat pentru a reordona"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Închideți"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Eliminați"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Apelare rapidă"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOATĂ AGENDA"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"SUNAȚI"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ȘTERGEȚI"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ASCULTAȚI"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Apel pierdut de la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Apel preluat de la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Sunați la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Sunați <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Ascultați mesajul vocal de la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Ștergeți intrarea din jurnalul de apeluri pentru <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Intrarea din jurnalul de apeluri a fost ștearsă."</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 5a9d84b..8944600 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"пометить"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"решетка"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"голосовая почта"</string>
     <string name="description_search_button" msgid="3660807558587384889">"поиск"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"набор номера"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"удаление последнего символа"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"набираемый номер"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"История вызовов"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Ещё"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Пропущенные"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Показать голосовые сообщения"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Все вызовы"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Добавить в контакты"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Добавить двухсекундную паузу"</string>
     <string name="add_wait" msgid="3360818652790319634">"Добавить паузу"</string>
     <string name="call_settings" msgid="7666474782093693667">"Настройки"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Исходящий вызов"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропущенный вызов"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Голосовая почта"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Добавить контакт"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Просмотреть данные: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Позвонить: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Сведения о контакте <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Сведения о вызове"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Новое голосовое сообщение."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Позвонить: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Неизвестно"</string>
     <string name="voicemail" msgid="3851469869202611441">"Голосовая почта"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Загрузка с SIM-карты…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Контакты на SIM-карте"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Чтобы использовать эту функцию, включите приложение \"Контакты\"."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Голосовой поиск недоступен"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Нельзя совершать телефонные звонки, поскольку приложение \"Телефон\" отключено."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"На устройстве нет приложения для этого действия."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Введите имя или номер телефона"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Все"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущенные"</string>
-    <string name="recentMissed_empty" msgid="5427113551557296665">"Нет пропущенных звонков"</string>
+    <string name="recentMissed_empty" msgid="5427113551557296665">"Нет пропущенных звонков."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Нет новых голосовых сообщений"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Все контакты"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Только часто используемые"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"История"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Все"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущенные"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Г. почта"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Быстрый набор"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Недавние"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Контакты"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Все контакты"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Все контакты"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Контакт удален из избранных"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Отмена"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Позвонить: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Добавить в контакты"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Посмотреть весь журнал звонков"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Пропущенных вызовов: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Здесь будут отображаться избранные элементы\nи контакты, которым вы звоните чаще всего.\nОбщайтесь с удовольствием."</string>
-    <string name="contact_tooltip" msgid="7817483485692282287">"Нажмите на фото, чтобы посмотреть все номера. Чтобы изменить порядок номеров, нажмите и удерживайте фото."</string>
+    <string name="contact_tooltip" msgid="7817483485692282287">"Нажмите на фото, чтобы посмотреть информацию о контакте. Чтобы переставить контакт в списке, нажмите на него и передвиньте на нужное место."</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Закрыть"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Удалить"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Быстрый набор"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ВСЕ КОНТАКТЫ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ВЫЗОВ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"УДАЛИТЬ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ПРОСЛУШАТЬ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропущен вызов от контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>. <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Принят вызов от контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>. <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Звонок контакту <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>. <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Перезвонить контакту <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>."</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Прослушать сообщение от контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>."</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Удалить запись для контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> из списка вызовов."</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Запись удалена"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 9a22313..8484e9c 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"označiť hviezdičkou"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"hlasová schránka"</string>
     <string name="description_search_button" msgid="3660807558587384889">"hľadať"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"vytáčanie"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"číslo, ktoré chcete vytočiť"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"História hovorov"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Ďalšie možnosti"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Zobraziť len zmeškané"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Zobraziť len hlasové správy"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Zobraziť všetky hovory"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Pridať kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Pridať dvojsekundovú pauzu"</string>
     <string name="add_wait" msgid="3360818652790319634">"Pridať čakanie"</string>
     <string name="call_settings" msgid="7666474782093693667">"Nastavenia"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odchádzajúci hovor"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Zmeškaný hovor"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Hlasová schránka"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Pridať kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Zobraziť kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Volať kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Podrobnosti kontaktu pre <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Podrobnosti hovoru"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nová hlasová správa."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Volať <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Neznáme"</string>
     <string name="voicemail" msgid="3851469869202611441">"Hlasová schránka"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Prebieha načítavanie z karty SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakty na karte SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Ak chcete použiť túto funkciu, znova povoľte aplikáciu Ľudia."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Hlasové vyhľadávanie nie je k dispozícii."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Nie je možné volať, pretože aplikácia Telefón bola deaktivovaná."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Nie je nainštalovaná žiadna aplikácia na spracovanie vybranej akcie."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Zadajte meno alebo tel. číslo"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Všetky"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Žiadne nedávne zmeškané hovory."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Žiadne nedávne hlasové správy."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Zobraziť všetky kontakty"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Zobraziť iba obľúbené"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"História"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Všetky"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Schránka"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Rýchla voľba"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Nedávne"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakty"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Všetky kontakty"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Všetky kontakty"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Odstránené z obľúbených"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Späť"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Volať na číslo <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Pridať do kontaktov"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Zobraziť úplnú históriu hovorov"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Počet nových zmeškaných hovorov: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Obľúbení ľudia a kontakty,\nktorým často voláte, sa zobrazia tu.\nZačnite teda volať."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Klepnutím na obrázok zobrazíte všetky čísla a pridržaním ich zoradíte"</string>
-    <string name="description_dismiss" msgid="2146276780562549643">"Zrušiť"</string>
+    <string name="description_dismiss" msgid="2146276780562549643">"Zatvoriť"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Odstrániť"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Rýchla voľba"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VŠETKY KONTAKTY"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ZAVOLAŤ SPÄŤ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ODSTRÁNIŤ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"POČÚVAŤ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Zmeškaný hovor od používateľa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Prijatý hovor od používateľa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Volať používateľovi <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Zavolať späť používateľovi <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Vypočuť si správu v hlasovej schránke od používateľa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Odstrániť záznam v denníku hovorov pre kontakt <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Záznam v denníku hovorov bol odstránený."</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 717ac9d..63bdf92 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"zvezdica"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"nič"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"glasovna pošta"</string>
     <string name="description_search_button" msgid="3660807558587384889">"iskanje"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"pokliči"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"vračalka"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"številka, ki bo poklicana"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Zgodovina klicev"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Več možnosti"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Pokaži samo neodgovorjene"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Pokaži samo spor. glasovne pošte"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Pokaži vse klice"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Dodaj stik"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj 2 sekundi premora"</string>
     <string name="add_wait" msgid="3360818652790319634">"Dodaj premor"</string>
     <string name="call_settings" msgid="7666474782093693667">"Nastavitve"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odhodni klic"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Neodgovorjeni klic"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Sporočila glasovne pošte"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Dodajanje stika"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Ogled stika <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Klicanje osebe <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Podrobnosti stika za <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Podrobnosti klica"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Novo sporočilo v odzivniku."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Pokliči <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Neznano"</string>
     <string name="voicemail" msgid="3851469869202611441">"Glasovna pošta"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Nalaganje s kartice SIM ..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Stiki na kartici SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Aplikaciji Osebe znova omogočite uporabo te funkcije."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Glasovno iskanje ni na voljo."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Ni mogoče opraviti telefonskega klica, ker je aplikacija Telefon onemogočena."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Na voljo ni nobene nameščene aplikacije za obdelavo izbranega dejanja."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Vnesite ime ali tel. številko"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Vsa"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Neodgovorjena"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Ni nedavnih neodgovorjenih klicev."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ni nedavnih sporočil v odzivniku."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Pokaži vse stike"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Pokaži samo priljubljene"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Zgodovina"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Vsa"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Neodgovorjena"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Odzivnik"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Hitro izbiranje"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Nedavni"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Stiki"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Vsi stiki"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Vsi stiki"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Odstranjeno iz priljubljenih"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Razveljavi"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Pokliči <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Dodaj med stike"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Prikaz celotne zgodovine klicev"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Št. novih zgrešenih klicev: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Priljubljeni stiki in stiki,\nki jih pogosto kličete, bodo prikazani tukaj.\nKar začnite klicati."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Dotaknite se slike, da prikažete vse številke, ali jo pritisnite in pridržite, da spremenite vrstni red"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Opusti"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Odstrani"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Hitro izbiranje"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VSI STIKI"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"POVRATNI KLIC"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"IZBRIŠI"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSLUŠAJ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Neodgovorjeni klic ob <xliff:g id="TIMEOFCALL">%3$s</xliff:g> od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Prejeti klic ob <xliff:g id="TIMEOFCALL">%3$s</xliff:g> od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Klic: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> ob <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Povratni klic: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Poslušajte sporočilo v odzivniku od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Izbriši vnos v dnevnik klicev za: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Vnos v dnevnik klicev je izbrisan."</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 4362484..8d6c91d 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"звездица"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"нула"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"фунта"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"говорна пошта"</string>
     <string name="description_search_button" msgid="3660807558587384889">"претражи"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"бирање"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"број за бирање"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Историја позива"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Још опција"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Прикажи само пропуштене"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Прикажи само говорне поруке"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Прикажи све позиве"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Додај контакт"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Додај паузу од 2 секунде"</string>
     <string name="add_wait" msgid="3360818652790319634">"Додај чекање"</string>
     <string name="call_settings" msgid="7666474782093693667">"Подешавања"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Одлазни позив"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропуштен позив"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Говорна пошта"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Додавање контакта"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Прикажи контакт <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Позови корисника <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Детаљи о контакту за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Детаљи позива"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Нова говорна порука."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Позови <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Непознато"</string>
     <string name="voicemail" msgid="3851469869202611441">"Говорна пошта"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Учитавање са SIM картице је у току…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Контакти на SIM картици"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Поново омогућите апликацију Људи да бисте користили ову функцију."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Гласовна претрага није доступна."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Није могуће упутити телефонски позив јер је апликација Телефон онемогућена."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Нема доступне инсталиране активности за руковање изабраном радњом."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Унесите име или број телефона"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Све"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуштени"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Нема недавно пропуштених позива."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Нема недавно примљене говорне поште."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Прикажи све контакте"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Прикажи само омиљене"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Историја"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Све"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуштени"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Говорна пошта"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Брзо позивање"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Недавни контакти"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Контакти"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Сви контакти"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Сви контакти"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Уклоњено је из омиљених"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Опозови"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Позови <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Додај у контакте"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Приказ пуне историје позива"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Нових пропуштених позива: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Овде ће се приказати омиљени и\nчесто позивани контакти.\nПа почните са позивањем."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Додирните слику да бисте видели све бројеве или притисните и задржите да бисте променили распоред"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Одбаци"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Уклони"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Брзо позивање"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"СВИ КОНТАКТИ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"УПУТИ ПОВРАТНИ ПОЗИВ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ИЗБРИШИ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ПУСТИ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропуштени позив од <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Примљени позив од <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Позив за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Упути повратни позив за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Пусти говорну пошту од <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Избриши унос у евиденцији позива за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Унос у евиденцији позива је избрисан."</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 757e2b5..314fea1 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"Stjärna"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"noll"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pund"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"röstbrevlåda"</string>
     <string name="description_search_button" msgid="3660807558587384889">"sök"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backsteg"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nummer att ringa"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Samtalshistorik"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Fler alternativ"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Visa endast missade samtal"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Visa bara röstmeddelanden"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Visa alla samtal"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Lägg till kontakt"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Lägg till en paus på 2 sek."</string>
     <string name="add_wait" msgid="3360818652790319634">"Lägg till väntetid"</string>
     <string name="call_settings" msgid="7666474782093693667">"Inställningar"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Utgående samtal"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Missat samtal"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Röstmeddelande"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Lägg till kontakt"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Visa kontakten <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Ring <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Kontaktuppgifter för <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Samtalsinfo"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Nytt meddelande i röstbrevlådan"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Okänd"</string>
     <string name="voicemail" msgid="3851469869202611441">"Röstbrevlåda"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Läser in från SIM-kort…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Kontakter från SIM-kort"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Aktivera appen Personer på nytt om du vill använda den här funktionen."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Röstsökning är inte tillgängligt."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Det går inte att ringa eftersom appen Telefon har inaktiverats."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Det finns ingen installerad app som är tillgänglig för att hantera den valda åtgärden."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ange ett namn eller telefonnummer"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Alla"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Missade"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Inga nya missade samtal."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Inga nya röstmeddelanden."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Visa alla kontakter"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Visa endast favoriter"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historik"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Alla"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Missade"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Röstbrevlåda"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Snabbval"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Senaste"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakter"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Alla kontakter"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Alla kontakter"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Borttagen från favoriter"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Ångra"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Lägg till i Kontakter"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Visa hela samtalshistoriken"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nya missade samtal"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Dina favoriter och kontakterna du\nofta ringer till visas här.\nSå det är bara att börja ringa."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tryck på bilden om du vill visa alla nummer eller tryck länge om du vill flytta den"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Avvisa"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Ta bort"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Snabbval"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLA KONTAKTER"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"RING UPP"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"TA BORT"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LYSSNA"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Missat samtal från <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Besvarat samtal från <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Ring till <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Ring upp <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Lyssna på ett röstmeddelande från <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Ta bort posten i samtalsloggen för <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Posten i samtalsloggen har tagits bort."</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index bbe0b73..4ed4a5f 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"nyota"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"sufuri"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"Pauni"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"Ujumbe wa sauti"</string>
     <string name="description_search_button" msgid="3660807558587384889">"tafuta"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"piga simu"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"futa"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"nambari ya kupiga"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historia ya Simu"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Chaguo zaidi"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Onyesha zilizokosa kupokewa pekee"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Onyesha barua za sauti pekee"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Onyesha simu zote"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Ongeza anwani"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Ongeza usitishaji wa sekunde 2"</string>
     <string name="add_wait" msgid="3360818652790319634">"Ongeza kusubiri"</string>
     <string name="call_settings" msgid="7666474782093693667">"Mipangilio"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Simu inayotoka"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Simu isiyojibiwa"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Barua za sauti"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Ongeza anwani"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Angalia anwani <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Piga <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Maelezo ya <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Maelezo ya simu"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Ujumbe mpya wa sauti."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Piga simu <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Haijulikani"</string>
     <string name="voicemail" msgid="3851469869202611441">"Ujumbe wa sauti"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Inapakia kutoka SIM kadi..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Anwani za SIM kadi"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Washa tena Programu ya watu ili itumie kipengele hiki."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Utafutaji kwa kutamka haupatikani."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Haiwezi kupiga simu kwa sababu programu ya Simu imezimwa."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Hakuna shughuli iliyosakinishwa imepatikana ya kushughulikia kitendo kilichochaguliwa."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Andika jina au nambari ya simu"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Zote"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Ambazo hazikupokewa"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Hakuna simu za hivi karibuni ambazo hazikupokewa."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Hakuna ujumbe wa sauti wa hivi karibuni."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Onyesha anwani zote"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Onyesha zinazopendwa tu"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Zote"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Ambazo hazikupokewa"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Ujumbe wa sauti"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Unaowasiliana nao zaidi"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Zilizotumika majuzi"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Walioalikwa"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Anwani zote"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Anwani zote"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Imeondolowa kwenye vipendwa"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Tendua"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Piga simu <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ongeza kwenye anwani"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Angalia historia kamili ya simu zilizopigwa"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Simu <xliff:g id="NUMBER">%s</xliff:g> za karibuni ambazo hazikujibiwa"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Vipendwa na nambari \n unazopiga mara nyingi zitaonekana hapa.\nKwa hivyo, anza kupiga."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Vipendwa na nambari \n unazopiga mara nyingi zitaonekana hapa.\nKwa hivyo, anza kupiga simu."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Gonga picha ili uone nambari zote au bonyeza na ushikilie ili upange upya"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Ondoa"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Ondoa"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Unaowasiliana nao zaidi"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ANWANI ZOTE"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"PIGA SIMU"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"FUTA"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"SIKILIZA"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Simu ambayo haikujibiwa kutoka kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Simu iliyopokelewa kutoka kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Simu kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Piga simu kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Sikiliza ujumbe wa sauti kutoka kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Futa rekodi ya simu ya <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Kumbukumbu ya simu imefutwa."</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index a423ab0..73b12bc 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -28,7 +28,7 @@
     <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ลบจากบันทึกการโทร"</string>
     <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ล้างบันทึกการโทร"</string>
     <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ลบข้อความเสียง"</string>
-    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"แบ่งปันข้อความเสียง"</string>
+    <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"แชร์ข้อความเสียง"</string>
     <string name="recentCalls_empty" msgid="247053222448663107">"บันทึกการโทรว่างเปล่า"</string>
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"ล้างบันทึกการโทร"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"บันทึกการโทรทั้งหมดของคุณจะถูกลบออก"</string>
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ติดดาว"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"ศูนย์"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"ปอนด์"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"ข้อความเสียง"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ค้นหา"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"หมุนหมายเลข"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"ย้อนกลับ"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"หมายเลขที่จะโทร"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"ประวัติการโทร"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"ตัวเลือกเพิ่มเติม"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"แสดงสายที่ไม่ได้รับเท่านั้น"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"แสดงเฉพาะข้อความเสียง"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"แสดงการโทรทั้งหมด"</string>
+    <string name="add_contact" msgid="8875804371377471164">"เพิ่มที่อยู่ติดต่อ"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"เพิ่มช่วงคั่น 2 วินาที"</string>
     <string name="add_wait" msgid="3360818652790319634">"เพิ่มการรอ"</string>
     <string name="call_settings" msgid="7666474782093693667">"การตั้งค่า"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"สายโทรออก"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"สายที่ไม่ได้รับ"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"ข้อความเสียง"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"เพิ่มรายชื่อติดต่อ"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"ดูรายชื่อติดต่อ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"โทรหา <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"รายละเอียดที่อยู่ติดต่อสำหรับ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"รายละเอียดการโทร"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"ข้อความเสียงใหม่"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"โทร <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"ไม่ทราบ"</string>
     <string name="voicemail" msgid="3851469869202611441">"ข้อความเสียง"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"กำลังโหลดจากซิมการ์ด…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"รายชื่อบนซิมการ์ด"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"เปิดใช้งานแอปพลิเคชัน People อีกครั้งเพื่อใช้คุณลักษณะนี้"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"ค้นหาด้วยเสียงไม่สามารถใช้งานได้"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"ไม่สามารถโทรศัพท์ได้เนื่องจากแอปพลิเคชันโทรศัพท์ถูกปิดใช้งาน"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"ไม่มีกิจกรรมที่ติดตั้งไว้ใช้จัดการการดำเนินการที่เลือก"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"พิมพ์ชื่อหรือหมายเลขโทรศัพท์"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"ทั้งหมด"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"ไม่ได้รับ"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"ไม่มีสายที่ไม่ได้รับล่าสุด"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"ไม่มีข้อความเสียงล่าสุด"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"แสดงรายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"แสดงเฉพาะรายชื่อที่ชื่นชอบ"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"ประวัติ"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"ทั้งหมด"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"ไม่ได้รับ"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"ข้อความเสียง"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"โทรด่วน"</string>
+    <string name="tab_recents" msgid="929949073851377206">"ล่าสุด"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"ที่อยู่ติดต่อ"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"ที่อยู่ติดต่อทั้งหมด"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"ที่อยู่ติดต่อทั้งหมด"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"นำออกจากรายการโปรด"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"เลิกทำ"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"โทร <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"เพิ่มในสมุดติดต่อ"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"ดูประวัติการโทรแบบเต็ม"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"สายที่ไม่ได้รับใหม่ <xliff:g id="NUMBER">%s</xliff:g> สาย"</string>
     <string name="no_favorites" msgid="5212485868783382971">"รายการโปรดและรายชื่อติดต่อที่คุณ\nโทรหาบ่อยจะแสดงที่นี่\n เริ่มโทรได้"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"แตะรูปภาพเพื่อดูหมายเลขทั้งหมด หรือกดค้างเพื่อจัดลำดับใหม่"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"ปิด"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"นำออก"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"เรียกใช้ฉับไว"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"รายชื่อติดต่อทั้งหมด"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"โทรกลับ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ลบ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"ฟัง"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"สายที่ไม่ได้รับจาก <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"สายที่ได้รับจาก <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"โทรไปยัง <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"โทรกลับ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"ฟังข้อความเสียงจาก <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"ลบรายการประวัติการโทรสำหรับ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"ลบรายการประวัติการโทรแล้ว"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 15f26ee..162487a 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"lagyan ng bituin"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
     <string name="description_search_button" msgid="3660807558587384889">"maghanap"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"mag-dial"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"numerong ida-dial"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Kasaysayan ng Tawag"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Higit pang mga pagpipilian"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Ipakita lang ang hindi nasagot"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Ipakita lamang ang mga voicemail"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Ipakita ang lahat ng tawag"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Magdagdag ng contact"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Magdagdag ng pag-pause na 2-seg"</string>
     <string name="add_wait" msgid="3360818652790319634">"Magdagdag ng paghihintay"</string>
     <string name="call_settings" msgid="7666474782093693667">"Mga Setting"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Papalabas na tawag"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Hindi nasagot na tawag"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Magdagdag ng contact"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Tingnan ang contact na si <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Tawagan si <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Mga detalye sa pakikipag-ugnayan para kay/sa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Mga detalye ng tawag"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Bagong voicemail."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</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>
     <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Naglo-load mula sa SIM card…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Mga contact sa SIM card"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Paganahing muli ang application ng Mga Tao upang magamit ang tampok na ito."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Hindi available ang paghahanap gamit ang boses."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Hindi makagawa ng tawag sa telepono dahil naka-disable ang application na Telepono."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Walang available na naka-install na aktibidad upang pangasiwaan ang napiling pagkilos."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"I-type pangalan o phone number"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Lahat"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Di nasagot"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Walang mga kamakailang hindi nasagot na tawag."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Walang mga kamakailang voicemail."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Ipakita ang lahat ng contact"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Mga paborito lang ang ipakita"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Kasaysayan"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Lahat"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Di nasagot"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Speed Dial"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Mga Kamakailan"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Mga Contact"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Lahat ng contact"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Lahat ng contact"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Inalis sa mga paborito"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"I-undo"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Tumawag sa <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Idagdag sa mga contact"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Tingnan ang buong kasaysayan ng tawag"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> (na) bagong hindi nasagot na tawag"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Lalabas dito ang mga paborito at contact na\nmadalas mong tinatawagan.\nKaya, simulan ang pagtawag."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Ipapakita dito ang mga paborito at contact na\nmadalas mong tinatawagan.\nKaya, simulan ang pagtawag."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"I-tap ang larawan upang makita ang lahat ng numero at pindutin nang matagal upang ayusing muli"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"I-dismiss"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Alisin"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Speed Dial"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"LAHAT NG CONTACT"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"TUMAWAG"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"TANGGALIN"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"MAKINIG"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Hindi nasagot na tawag mula sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Sumagot ng tawag mula sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Tumawag sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Tumawag sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Makinig sa voicemail mula sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Tanggalin ang entry sa log ng tawag para sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Tinanggal ang entry sa log ng tawag."</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 2e863c6..9e5944b 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"yıldız"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"sıfır"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"Sesli mesaj"</string>
     <string name="description_search_button" msgid="3660807558587384889">"ara"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"çevir"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"geri tuşu"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"çevrilecek numara"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Çağrı Geçmişi"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Diğer seçenekler"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Yalnızca cevapsızları göster"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Yalnızca sesli msajları göster"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Tüm çağrıları göster"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Kişi ekle"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"2 saniyelik duraklama ekle"</string>
     <string name="add_wait" msgid="3360818652790319634">"Bekleme ekle"</string>
     <string name="call_settings" msgid="7666474782093693667">"Ayarlar"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Giden çağrı"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Cevapsız çağrı"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Sesli mesaj"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Kişi ekle"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Kişiyi görüntüle: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Sesli arama yap: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> için kişi ayrıntıları"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Çağrı ayrıntıları"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Yeni sesli mesaj."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</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>
     <string name="voicemail" msgid="3851469869202611441">"Sesli Mesaj"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM karttan yükleniyor..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM kart kişileri"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Bu özelliği kullanmak için Kişiler uygulamasını yeniden etkinleştirin."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Sesli arama kullanılamıyor."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Telefon uygulaması devre dışı bırakıldığından telefon edilemiyor."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Seçilen işlemi gerçekleştirmek için kullanılabilir yüklü etkinlik yok."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ad veya telefon numarası yazın"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Tümü"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Cevapsız"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Yakın zamanda cevapsız çağrı yok."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Yakın zamanda bırakılan sesli mesaj yok."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Tüm kişileri göster"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Yalnızca favori kişileri göster"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Geçmiş"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Tümü"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Cevapsız"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Sesli Mesaj"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Hızlı Arama"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Son Kişiler"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Kişiler"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Tüm kişiler"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Tüm kişiler"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Favorilerden kaldırıldı"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Geri al"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Telefon et: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Kişilere ekle"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Tüm çağrı geçmişini görüntüle"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> yeni cevapsız çağrı"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Favoriler ve sık telefon ettiğiniz\nkişiler burada görüntülenir.\nTelefon etmeye başlayın."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tüm numaraları görmek için resme hafifçe vurun veya yeniden sıralamak için basılı tutun"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Kapat"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Kaldır"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Hızlı Arama"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TÜM KİŞİLER"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"GERİ ARA"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SİL"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"DİNLE"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Cevapsız çağrı: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Yanıtlanan çağrı: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Aranan numara: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Geri ara: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Şu numaradan gelen sesli mesajı dinle: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> için çağrı kaydı girişini sil"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Çağrı kaydı girişi silindi."</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 3252a49..483fdd5 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"зірочка"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"решітка"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"голос. пошта"</string>
     <string name="description_search_button" msgid="3660807558587384889">"пошук"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"дзвон."</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"видалити"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"номер для набору"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Історія викликів"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Інші варіанти"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Показувати лише пропущені"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Показувати лише голосову пошту"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Показувати всі виклики"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Додати контакта"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Дод. 2-сек. паузу"</string>
     <string name="add_wait" msgid="3360818652790319634">"Дод. очікув."</string>
     <string name="call_settings" msgid="7666474782093693667">"Налаштування"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Вихідний дзвінок"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропущений виклик"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Голосова пошта"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Додати контакт"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Переглянути контакт <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Дзвонити: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Відомості про контакт <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Деталі виклику"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Нова голосове повідомлення."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Телефонувати <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Невідомий"</string>
     <string name="voicemail" msgid="3851469869202611441">"Голос. пошта"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Завантаж. із SIM-карти…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Контакти SIM-карти"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Повторно ввімкніть програму Люди, щоб скористатися цією функцією."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Голосовий пошук недоступний."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Не вдається здійснити дзвінок, оскільки додаток Телефон вимкнено."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Неможливо обробити вибрану дію."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Введіть ім’я чи номер телефону"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Усі"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущені"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Немає нещодавніх пропущених викликів."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Немає нещодавніх повідомлень голосової пошти."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Показати всі контакти"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Показати лише вибрані"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Історія"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Усі"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущені"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Голос.пошта"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Швидкий набір"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Останні"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Контакти"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Усі контакти"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Усі контакти"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Вилучено з вибраного"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Відмінити"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Набрати <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Додати до контактів"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Переглянути всю історію дзвінків"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Нових пропущених дзвінків: <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Тут будуть відображатися вибрані контакти й контакти\n, яким ви часто телефонуєте.\nСпілкуйтеся із задоволенням."</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Тут будуть відображатися вибрані контакти,\n яким ви часто телефонуєте.\nСпілкуйтеся із задоволенням."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Торкніться зображення, щоб побачити всі номери, або натисніть і утримуйте, щоб змінити порядок"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Закрити"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Видалити"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Швидкий набір"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"УСІ КОНТАКТИ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"ТЕЛЕФОНУВАТИ"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"ВИДАЛИТИ"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"СЛУХАТИ"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропущений дзвінок: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Прийнятий дзвінок: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Дзвінок: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Телефонувати: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Слухати голосову пошту: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Видалити запис журналу дзвінків: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Запис журналу дзвінків видалено."</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 91a1e2a..208b13d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"sao"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"không"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"dấu thăng"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"thư thoại"</string>
     <string name="description_search_button" msgid="3660807558587384889">"tìm kiếm"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"quay số"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"số để quay"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Nhật ký cuộc gọi"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Tùy chọn khác"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Chỉ hiển thị cuộc gọi nhỡ"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Chỉ hiển thị thư thoại"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Hiển thị tất cả cuộc gọi"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Thêm liên hệ"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Thêm 2 giây dừng"</string>
     <string name="add_wait" msgid="3360818652790319634">"Thêm chờ"</string>
     <string name="call_settings" msgid="7666474782093693667">"Cài đặt"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Cuộc gọi đi"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Cuộc gọi nhỡ"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Thư thoại"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Thêm địa chỉ liên hệ"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Xem thông tin liên hệ của <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Gọi <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Chi tiết liên lạc cho <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Chi tiết cuộc gọi"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Thư thoại mới."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</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>
     <string name="voicemail" msgid="3851469869202611441">"Thư thoại"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Đang tải từ thẻ SIM…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"Danh bạ trên thẻ SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Bật lại ứng dụng Liên hệ để sử dụng tính năng này."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Tìm kiếm bằng giọng nói không khả dụng."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Không thể thực hiện cuộc gọi điện thoại vì ứng dụng Điện thoại đã bị tắt."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Không có ứng dụng đã cài đặt nào để xử lý tác vụ đã chọn."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Nhập tên hoặc số điện thoại"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Tất cả"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Bị nhỡ"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Không có cuộc gọi nhỡ gần đây nào."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Không có thư thoại gần đây nào."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Hiển thị tất cả liên hệ"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Chỉ hiển thị liên hệ ưa thích"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Lịch sử"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Tất cả"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Bị nhỡ"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Thư thoại"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Quay số nhanh"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Gần đây"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Địa chỉ liên hệ"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Tất cả liên hệ"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Tất cả liên hệ"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Đã xóa khỏi mục yêu thích"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Hoàn tác"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Gọi <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Thêm vào danh bạ"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Xem lịch sử cuộc gọi đầy đủ"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> cuộc gọi nhỡ mới"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Người liên hệ yêu thích và người liên hệ bạn\nthường gọi sẽ hiển thị tại đây.\nVì vậy, hãy bắt đầu gọi."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Chạm vào hình ảnh để xem tất cả các số hoặc nhấn và giữ để sắp xếp lại"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Loại bỏ"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Xóa"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Quay số nhanh"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TẤT CẢ NGƯỜI LIÊN HỆ"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"GỌI LẠI"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"XÓA"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"NGHE"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Cuộc gọi nhỡ từ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Cuộc gọi đã trả lời từ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Cuộc gọi đến <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Gọi lại <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Nghe thư thoại từ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Xóa mục nhật ký cuộc gọi cho <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Đã xóa mục nhật ký cuộc gọi."</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index bbe4eb8..5dee4ca 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"星形符号"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"零"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"英镑符号"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"语音信箱"</string>
     <string name="description_search_button" msgid="3660807558587384889">"搜索"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"拨打"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"退格"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"要拨打的号码"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"通话记录"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"更多选项"</string>
@@ -89,7 +87,9 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"仅显示未接来电"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"只显示语音邮件"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"显示所有通话"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"暂停时间延长2秒"</string>
+    <!-- no translation found for add_contact (8875804371377471164) -->
+    <skip />
+    <string name="add_2sec_pause" msgid="9214012315201040129">"延长暂停时间2秒"</string>
     <string name="add_wait" msgid="3360818652790319634">"延长等待时间"</string>
     <string name="call_settings" msgid="7666474782093693667">"设置"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"新建联系人"</string>
@@ -109,13 +109,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"去电"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"未接电话"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"语音邮件"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"添加联系人"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"查看联系人<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"呼叫<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的详细联系信息"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"通话详情"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"有新的语音邮件。"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"拨打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"未知"</string>
     <string name="voicemail" msgid="3851469869202611441">"语音信箱"</string>
@@ -133,32 +136,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"正从 SIM 卡中加载..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM 卡联系人"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"必须重新启用联系人应用才能使用此功能。"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"无法使用语音搜索。"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"“电话”应用已被停用,因此无法拨打电话。"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"没有任何已安装的应用可以处理所选操作。"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"输入姓名或手机号"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"未接电话"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"最近没有未接来电。"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近没有语音邮件。"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"显示所有联系人"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"仅显示常用联系人"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"通话记录"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"未接电话"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"语音邮件"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"快速拨号"</string>
+    <string name="tab_recents" msgid="929949073851377206">"最近"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"联系人"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"所有联系人"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"所有联系人"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"已从“常用联系人”中删除"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"撤消"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"拨打<xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"添加到通讯录"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"查看全部通话记录"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g>个新的未接电话"</string>
     <string name="no_favorites" msgid="5212485868783382971">"您收藏的联系人和经常通话\n的联系人都会显示在这里。\n现在就开始与联系人通话吧。"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"点按图片可查看所有号码,按住图片可重新排序"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"关闭"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"移除"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"快速拨号"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"所有联系人"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"回电"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"删除"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"听取"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>来自<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)的未接电话。"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>来自<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)的已接电话。"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>与<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)的通话。"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"给<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>回电"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"听取来自<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的语音邮件"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"删除与<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的通话记录条目"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"通话记录条目已删除。"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 6f85d5e..90f5928 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"星號"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"零"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"井號鍵"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"留言"</string>
     <string name="description_search_button" msgid="3660807558587384889">"搜尋"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"撥號"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"致電號碼"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"通話記錄"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"更多選項"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"只顯示未接來電"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"僅顯示語音留言"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"顯示所有通話"</string>
+    <string name="add_contact" msgid="8875804371377471164">"新增聯絡人"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"新增 2 秒暫停功能"</string>
     <string name="add_wait" msgid="3360818652790319634">"新增插播功能"</string>
     <string name="call_settings" msgid="7666474782093693667">"設定"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"撥出電話"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"未接來電"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"語音信箱"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"新增聯絡人"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"查看聯絡人<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"致電<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的聯絡人詳細資料"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"通話詳細資料"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"新留言。"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"未知"</string>
     <string name="voicemail" msgid="3851469869202611441">"留言"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"正在從 SIM 卡載入..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM 卡聯絡人"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"請重新啟用「通訊錄」應用程式,才能使用這項功能。"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"無法使用語音搜尋功能。"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"由於「電話」應用程式已停用,因此無法打電話。"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"沒有任何已安裝的活動可以處理指定操作。"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"輸入姓名或電話號碼"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"未接來電"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"最近沒有未接來電。"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近沒有留言。"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"顯示所有聯絡人"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"只顯示我的最愛"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"記錄"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"未接來電"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"留言信箱"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"快速撥號"</string>
+    <string name="tab_recents" msgid="929949073851377206">"最近存取的聯絡人"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"聯絡人"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"所有聯絡人"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"所有聯絡人"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"已從「我的最愛」中移除"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"復原"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"加入通訊錄"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"查看完整通話記錄"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> 個新的未接來電"</string>
     <string name="no_favorites" msgid="5212485868783382971">"您的最愛聯絡人和經常通話的聯絡人\n會在這裡顯示,\n致電他們吧!"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"輕按相片可查看所有號碼,按住則可重新排序"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"關閉"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"移除"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"快速撥號"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"所有聯絡人"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"回撥電話"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"刪除"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"收聽"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"未接來電:「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>),通話時間:<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"已接來電:「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>),通話時間:<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"與「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」通話 (<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>),通話時間:<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"回撥電話給「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"收聽來自「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的留言信箱"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"刪除「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的通話紀錄項目"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"已刪除通話記錄項目。"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6878e55..5aaf726 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"星號"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"磅"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"語音信箱"</string>
     <string name="description_search_button" msgid="3660807558587384889">"搜尋"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"撥號"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"撥號號碼"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"通話紀錄"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"更多選項"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"僅顯示未接來電"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"僅顯示語音留言"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"顯示所有通話"</string>
+    <string name="add_contact" msgid="8875804371377471164">"新增聯絡人"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"暫停時間延長 2 秒"</string>
     <string name="add_wait" msgid="3360818652790319634">"延長等待時間"</string>
     <string name="call_settings" msgid="7666474782093693667">"設定"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"已撥電話"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"未接來電"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"語音留言"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"新增聯絡人"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"查看聯絡人<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"撥電話給<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的聯絡詳細資料"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"通話詳細資料"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"新的語音留言。"</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"不明"</string>
     <string name="voicemail" msgid="3851469869202611441">"語音留言"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"從  SIM 卡讀取中…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"SIM 卡聯絡人"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"您必須重新啟用「使用者」應用程式,才能使用這項功能。"</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"無法使用語音搜尋。"</string>
+    <string name="call_not_available" msgid="8941576511946492225">"「電話」應用程式已遭停用,因此無法撥打電話。"</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"沒有任何已安裝的活動可以處理指定的操作。"</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"輸入姓名或電話號碼"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"未接來電"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"最近沒有未接來電。"</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近沒有語音留言。"</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"顯示所有聯絡人"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"只顯示我的收藏"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"通話紀錄"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"未接來電"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"語音留言"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"快速撥號"</string>
+    <string name="tab_recents" msgid="929949073851377206">"最近存取過"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"聯絡人"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"所有聯絡人"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"所有聯絡人"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"已從最愛的聯絡人移除"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"復原"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"新增為聯絡人"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"查看完整通話紀錄"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> 通新的未接來電"</string>
     <string name="no_favorites" msgid="5212485868783382971">"您最愛的聯絡人和經常通話的聯絡人\n都會顯示在這裡,\n可以直接打給他們!"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"輕按圖片即可查看所有號碼,按住圖片則可重新排序"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"關閉"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"移除"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"快速撥號"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"所有聯絡人"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"回電"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"刪除"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"聽取"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"未接來電,來自「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」,<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>,<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"已接來電,來自「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」,<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>,<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"撥號給「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」,<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>,<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"回電給「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"聽取「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的語音留言"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"刪除「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的通話紀錄項目"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"通話紀錄項目已刪除。"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index e33c0c2..343d128 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -75,10 +75,8 @@
     <string name="description_image_button_star" msgid="3365919907520767866">"ikanyezi"</string>
     <string name="description_image_button_zero" msgid="4133108949401820710">"lutho"</string>
     <string name="description_image_button_pound" msgid="3039765597595889230">"iphawundi"</string>
-    <string name="description_voicemail_button" msgid="3402506823655455591">"Umyalezo wezwi"</string>
     <string name="description_search_button" msgid="3660807558587384889">"sesha"</string>
     <string name="description_dial_button" msgid="1274091017188142646">"dayela"</string>
-    <string name="description_delete_button" msgid="6263102114033407382">"i-backspace"</string>
     <string name="description_digits_edittext" msgid="8760207516497016437">"inombolo okumele uyidayele"</string>
     <string name="action_menu_call_history_description" msgid="9018442816219748968">"Umlando wekholi"</string>
     <string name="action_menu_overflow_description" msgid="2303272250613084574">"Izinketho eziningi"</string>
@@ -89,6 +87,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Bonisa okugejiwe kuphela"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Bonisa ama-imeyli ezwi kuphela"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Bonisa zonke izingcingo ezenziwe"</string>
+    <string name="add_contact" msgid="8875804371377471164">"Engeza oxhumana naye"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Faka ukumisa okwesikhashana kwamasekhondi angu-2"</string>
     <string name="add_wait" msgid="3360818652790319634">"Yengeza ukulinda"</string>
     <string name="call_settings" msgid="7666474782093693667">"Izilungiselelo"</string>
@@ -109,13 +108,16 @@
     <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ikholi eliphumayo"</string>
     <string name="description_call_log_missed_call" msgid="2242805209983708825">"Ikholi ekulahlekele"</string>
     <string name="description_call_log_voicemail" msgid="4600798771975158948">"Ivoyisimeyili"</string>
-    <string name="description_add_contact" msgid="3103414772502485851">"Faka oxhumana naye"</string>
     <string name="description_view_contact" msgid="5205669345700598415">"Bheka oxhumana naye <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call" msgid="3443678121983852666">"Fonela <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="description_contact_details" msgid="51229793651342809">"Imininingwane yokuxhumana ka-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_call_details" msgid="8936017517290240089">"Imininingwane yekholi"</string>
+    <string name="description_new_voicemail" msgid="2133792360865517746">"Ivoyisimeyili entsha."</string>
+    <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="call_log_empty_gecode" msgid="2019639420045039861">" "</string>
     <string name="menu_callNumber" msgid="997146291983360266">"Shayela <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="unknown" msgid="740067747858270469">"Akwaziwa"</string>
     <string name="voicemail" msgid="3851469869202611441">"Ivoyisimeyili"</string>
@@ -133,32 +135,42 @@
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ilayisha kusuka ekhadini le-SIM..."</string>
     <string name="simContacts_title" msgid="27341688347689769">"Othintana nabo bekhadi le-SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"Phinda unike amandla uhlelo lokusebenza lwabantu ukuze basebenzise lesi sici."</string>
+    <string name="voice_search_not_available" msgid="7580616740587850828">"Ukusesha ngezwi akutholakali."</string>
+    <string name="call_not_available" msgid="8941576511946492225">"Ayikwazi ukwenza ikholi yefoni ngoba uhlelo lokusebenza lwefoni likhutshaziwe."</string>
+    <string name="activity_not_available" msgid="8265265380537872585">"Awukho umsebenzi ofakiwe otholakalayo ukuze uphathe isenzo esikhethiwe."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Thayipha igama noma inombolo yefoni"</string>
-    <string name="call_log_all_title" msgid="3566738938889333307">"Konke"</string>
-    <string name="call_log_missed_title" msgid="4541142293870638971">"Phuthelwe"</string>
     <string name="recentMissed_empty" msgid="5427113551557296665">"Awekho amakholi wakamuva aphuthelwe."</string>
     <string name="recentVoicemails_empty" msgid="5163114119598014048">"Awekho amavoyisimeyili wakamuva."</string>
-    <string name="show_all_contacts" msgid="1732256558071778056">"Bonakalisa bonke oxhumana nabo"</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Bonisa izintandokazi kuphela"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Umlando"</string>
-    <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
-    <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
-    <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
-    <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
-    <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
-    <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
-    <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
-    <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
-    <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
-    <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+    <string name="call_log_all_title" msgid="3566738938889333307">"Konke"</string>
+    <string name="call_log_missed_title" msgid="4541142293870638971">"Phuthelwe"</string>
+    <string name="call_log_voicemail_title" msgid="940422274047025948">"Ivoyisimeyili"</string>
+    <string name="tab_speed_dial" msgid="7807567599021643864">"Ukudayela okusheshayo"</string>
+    <string name="tab_recents" msgid="929949073851377206">"Okwakamuva"</string>
+    <string name="tab_all_contacts" msgid="1410922767166533690">"Oxhumana nabo"</string>
     <string name="show_all_contacts_title" msgid="8395378484578221791">"Bonke oxhumana nabo"</string>
     <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Bonke oxhumana nabo"</string>
     <string name="favorite_hidden" msgid="5011234945140912047">"Kukhishiwe kusuka kuzintandokazi"</string>
     <string name="favorite_hidden_undo" msgid="2508998611039406474">"Hlehlisa"</string>
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Shayela ku-<xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Engeza koxhumana nabo"</string>
+    <string name="recents_footer_text" msgid="7315554578957453359">"Buka wonke umlando wekholi"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> amakholi amasha owaphuthelwe"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Izintandokazi noxhumana nabo\nobashayela ngokuvamile bazovela lapha.\nNgakho-ke, qala ukushaya."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Thepha isithombe ukuze ubone zonke izinombolo noma cindezela uphinde ubambe ukuze uhlele kabusha"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Cashisa"</string>
+    <string name="remove_contact" msgid="1080555335283662961">"Susa"</string>
+    <string name="favorites_menu_speed_dial" msgid="3832518092014707628">"Ukudayela okusheshayo"</string>
+    <string name="favorites_menu_all_contacts" msgid="992506284449891186">"BONKE OXHUMANA NABO"</string>
+    <string name="call_log_action_call_back" msgid="4944463006859852473">"SHAYA FUTHI"</string>
+    <string name="call_log_action_delete" msgid="7371990297839987600">"SUSA"</string>
+    <string name="call_log_action_voicemail" msgid="4978620572562925654">"LALELA"</string>
+    <string name="description_incoming_missed_call" msgid="2610535352863246949">"Ikholi ephuthelwe esuka ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_incoming_answered_call" msgid="7206670204016969740">"Ikholi ephenduliwe kusukela ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_outgoing_call" msgid="3964211633673659733">"Ikholi eya ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+    <string name="description_call_back_action" msgid="3012837380108884260">"Phinda ushayele u-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_voicemail_action" msgid="8054891873788903063">"Lalela ivoyisimeyili esuka ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_delete_action" msgid="7188614068459616450">"Susa ukufakwa kwerekhodi lamakholi we-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="toast_entry_removed" msgid="3389119736202317999">"Ukufakwa kurekhodi lamakholi kususiwe."</string>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 04e10b1..70adb36 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -12,14 +12,16 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
-  -->
+-->
 
 <resources>
-
-    <!-- Secondary text color in the Phone app -->
+    <!--  Primary text color in the Dialer -->
     <color name="dialtacts_primary_text_color">#000000</color>
+    <!-- Secondary text color in the Dialer -->
     <color name="dialtacts_secondary_text_color">#888888</color>
-    <color name="dialpad_text_color">#ffffff</color>
+    <color name="dialer_accent_color">#eeff41</color>
+
+    <color name="contact_list_background_color">#f2f2f2</color>
 
     <!-- Color of the text describing an unconsumed missed call. -->
     <color name="call_log_missed_call_highlight_color">#FF0000</color>
@@ -27,8 +29,10 @@
     <!-- Color of the text describing an unconsumed voicemail. -->
     <color name="call_log_voicemail_highlight_color">#33b5e5</color>
 
-    <!-- Colour of voicemail progress bar to the right of position indicator.
-         Same as the background color of the dialer -->
+    <!--
+         Colour of voicemail progress bar to the right of position indicator.
+         Same as the background color of the dialer
+    -->
     <color name="voicemail_playback_seek_bar_yet_to_play">#cecece</color>
 
     <!-- Colour of voicemail progress bar to the left of position indicator. -->
@@ -38,32 +42,26 @@
     <color name="item_selected">#660099cc</color>
 
     <!-- Background color of new dialer activity -->
-    <color name="background_dialer_light">#cecece</color>
+    <color name="background_dialer_light">#ffffff</color>
 
     <!-- Background color of dialer list items (contacts, call log entries) -->
-    <color name="background_dialer_list_items">#eeeeee</color>
+    <color name="background_dialer_list_items">#fbfbfb</color>
 
-    <!-- Background color of new dialpad -->
-    <color name="background_dialpad">#f2020709</color>
-
-    <!-- Primary color of dialpad text, including the call button -->
-    <color name="dialpad_primary_text_color">#33b5e5</color>
-    <!-- Secondary color of dialpad text (used for the letters corresponding to each digit -->
-    <color name="dialpad_secondary_text_color">#aaaaaa</color>
-
-    <!-- Background color of action bars -->
-    <color name="actionbar_background_color">#ffffff</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 -->
-    <color name="searchbox_text_color">#d3d3d3</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">#d3d3d3</color>
 
     <!-- Color of the contact name in favorite tiles -->
-    <color name="contact_tile_name_color">#f0f0f0</color>
+    <color name="contact_tile_name_color">#ffffff</color>
 
     <!-- Undo dialogue color -->
     <color name="undo_dialogue_text_color">#4d4d4d</color>
@@ -71,16 +69,48 @@
     <!-- Text color for no favorites message -->
     <color name="nofavorite_text_color">#777777</color>
 
-    <!-- Background color of wifi highlight items -->
-    <color name="background_wifi_highlight">#00ff00</color>
+    <!-- Text color for the "Remove" text in its regular state -->
+    <color name="remove_text_color">#555555</color>
 
-    <!-- Foreground color of wifi highlight items -->
-    <color name="foreground_wifi_highlight">#ffffff</color>
+    <!-- Text color for the "Remove" text when a contact is dragged on top of the remove view -->
+    <color name="remove_highlighted_text_color">#FF3F3B</color>
 
-    <!-- Dark (e.g. border) regions of wifi highlight items -->
-    <color name="wifi_dark_wifi_highlight">#009900</color>
+    <!-- Text color for the "speed dial" label in the favorites menu. -->
+    <color name="speed_dial_text_color">#555555</color>
 
-    <!-- Generic separator color for wifi list items -->
-    <color name="wifi_list_separator">#909090</color>
+    <!-- Background color for the "All Contacts" button in the favorites menu. -->
+    <color name="all_contacts_button_color">#999999</color>
 
+    <!-- Background color for the "All Contacts" button in the favorites menu when pressed. -->
+    <color name="all_contacts_button_pressed_color">#808080</color>
+
+    <!-- Background color for the favorites menu. -->
+    <color name="favorites_menu_background_color">#eeeeee</color>
+
+    <!-- Text color for the "All Contacts" button above the favorite callers -->
+    <color name="all_contacts_button_text_color">#ffffff</color>
+
+    <!-- Color of the bottom border below the contacts grid on the main dialer screen. -->
+    <color name="contacts_grid_bottom_border_color">#16000000</color>
+
+    <!-- Color of action bar text. Ensure this stays in sync with packages/Telephony
+         phone_settings_actionbar_text_color-->
+    <color name="actionbar_text_color">#ffffff</color>
+    <color name="actionbar_unselected_text_color">#a6ffffff</color>
+
+    <!-- Color of actions in expanded call log entries.  This text color represents actions such
+         as call back, play voicemail, etc. -->
+    <color name="call_log_action_text">#1dc7db</color>
+
+    <!-- Color of the "delete" action in expanded call log entries. -->
+    <color name="call_log_action_delete_text">#ff4f4f</color>
+
+    <!-- Color of action text for expanded call log entries which is disabled. -->
+    <color name="call_log_disabled_text">#b3b3b3</color>
+
+    <!-- Color for missed call icons. -->
+    <color name="missed_call">#ff2e58</color>
+
+    <!-- Color for answered or outgoing call icons. -->
+    <color name="answered_call">#2aad6f</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 1743952..89bd592 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -13,66 +13,121 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
-  -->
+-->
 <resources>
 
-    <!-- Height of edit text in dialpad fragment -->
-    <dimen name="dialpad_horizontal_margin">0dip</dimen>
-    <dimen name="dialpad_vertical_margin">2dip</dimen>
-    <dimen name="dialpad_digits_text_size">35sp</dimen>
-
-    <!-- Just used in landscape mode -->
-    <dimen name="dialpad_digits_height">0px</dimen>
-    <dimen name="dialpad_digits_margin_bottom">0px</dimen>
-    <dimen name="dialpad_center_margin">3dp</dimen>
-    <dimen name="dialpad_button_margin">2dp</dimen>
-    <!-- Match call_button_height to Phone's dimens/in_call_end_button_height -->
-    <dimen name="call_button_height">74dp</dimen>
-
     <!--  Search View -->
     <dimen name="search_text_size">14sp</dimen>
 
+    <!--
+          Drag to remove view (in dp because it is used in conjunction with a statically
+          sized icon
+    -->
+    <dimen name="remove_text_size">16dp</dimen>
+
     <!-- Call Log -->
     <dimen name="call_log_call_action_size">32dip</dimen>
-    <dimen name="call_log_call_action_width">48dip</dimen>
+    <dimen name="call_log_call_action_width">54dp</dimen>
     <dimen name="call_log_icon_margin">4dip</dimen>
     <dimen name="call_log_inner_margin">8dip</dimen>
     <dimen name="call_log_outer_margin">8dip</dimen>
     <dimen name="call_log_indent_margin">24dip</dimen>
     <dimen name="call_log_list_item_height">56dip</dimen>
-    <dimen name="call_log_list_contact_photo_size">64dip</dimen>
+    <dimen name="call_log_list_contact_photo_size">40dip</dimen>
     <dimen name="call_detail_contact_name_margin">24dip</dimen>
     <dimen name="call_detail_button_spacing">2dip</dimen>
+    <!-- Defines the vertical margin for the vertical separator between
+         the main area of a call log entry and the secondary action button. -->
+    <dimen name="call_log_list_item_vertical_divider_margin">17dp</dimen>
 
-    <!-- Layout weight values for dialpad screen. These layouts will be used in one
-         LinearLayout (dialpad_fragment.xml), configuring dialpad screen's vertical
-         ratio. -->
-    <integer name="dialpad_layout_weight_digits">15</integer>
-    <integer name="dialpad_layout_weight_dialpad">65</integer>
+    <!-- Defines the width of the vertical separator between
+         the main area of a call log entry and the secondary action button. -->
+    <dimen name="call_log_list_item_vertical_divider_width">1dp</dimen>
 
-    <!-- Text dimensions for dialpad keys -->
-    <dimen name="dialpad_key_numbers_size">40dp</dimen>
-    <dimen name="dialpad_key_letters_size">11dp</dimen>
-    <dimen name="dialpad_key_plus_size">15dp</dimen>
-    <dimen name="dialpad_key_special_characters_size">25dp</dimen>
-    <dimen name="dialpad_key_letters_width">41dp</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">10dp</dimen>
+    <!-- Bottom margin of the floating action button -->
+    <dimen name="floating_action_button_margin_bottom">10dp</dimen>
 
-    <dimen name="fake_action_bar_height">60dp</dimen>
-    <!-- Min with of fake menu buttons, which should be same as ActionBar's one -->
-    <dimen name="fake_menu_button_min_width">56dp</dimen>
-
-    <!--  Favorites tile and recent call log padding -->
-    <dimen name="contact_tile_divider_padding">3dp</dimen>
+    <!-- Dimensions for speed dial tiles -->
+    <dimen name="contact_tile_divider_width">1dp</dimen>
     <dimen name="contact_tile_info_button_height_and_width">36dp</dimen>
-    <dimen name="favorites_row_top_padding">8dp</dimen>
-    <dimen name="favorites_row_bottom_padding">8dp</dimen>
-    <dimen name="favorites_row_start_padding">8dp</dimen>
-    <dimen name="favorites_row_end_padding">8dp</dimen>
+    <item name="contact_tile_height_to_width_ratio" type="dimen">67%</item>
+    <dimen name="contact_tile_text_side_padding">10dp</dimen>
+    <dimen name="contact_tile_text_bottom_padding">8dp</dimen>
+    <dimen name="favorites_row_top_padding">1dp</dimen>
+    <dimen name="favorites_row_bottom_padding">0dp</dimen>
+    <dimen name="favorites_row_start_padding">1dp</dimen>
+
+    <!-- Padding from the last contact tile will provide the end padding. -->
+    <dimen name="favorites_row_end_padding">0dp</dimen>
     <dimen name="favorites_row_undo_text_side_padding">32dp</dimen>
+
+    <!-- Dimensions for most recent call shortcut cards -->
+    <dimen name="recent_call_log_item_translation_z">5dp</dimen>
     <dimen name="recent_call_log_item_padding">8dp</dimen>
 
+    <!-- Size of the star icon on the favorites tile. -->
+    <dimen name="favorites_star_icon_size">12dp</dimen>
+
     <!-- Padding for the tooltip -->
     <dimen name="dismiss_button_padding_start">20dip</dimen>
     <dimen name="dismiss_button_padding_end">28dip</dimen>
+
+    <!-- Padding above the favorites menu. -->
+    <dimen name="favorites_menu_padding_top">6dp</dimen>
+    <!-- Padding below the favorites menu.. -->
+    <dimen name="favorites_menu_padding_bottom">3dp</dimen>
+    <!-- Horizontal padding in the favorites menu. -->
+    <dimen name="favorites_menu_padding_horizontal">8dp</dimen>
+    <!-- Text size for the "speed dial" text in the favorites menu. -->
+    <dimen name="favorites_menu_speed_dial_text_size">18sp</dimen>
+    <!-- Height of the speed dial TextView in the favorites menu. -->
+    <dimen name="favorites_menu_speed_dial_height">24dp</dimen>
+    <!-- Text size for the "All Contacts" text in the favorites menu. -->
+    <dimen name="favorites_menu_all_contacts_text_size">12sp</dimen>
+    <!-- Height of the all contacts Button in the favorites menu. -->
+    <dimen name="favorites_menu_all_contacts_height">24dp</dimen>
+
+    <!-- Margin to the left and right of the search box. -->
+    <dimen name="search_margin_horizontal">7dp</dimen>
+    <!-- Margin above the search box. -->
+    <dimen name="search_top_margin">4dp</dimen>
+    <!-- Margin below the search box. -->
+    <dimen name="search_bottom_margin">4dp</dimen>
+    <!-- Search box text size -->
+    <dimen name="search_text_size">13.24sp</dimen>
+    <!-- Search box interior padding - left -->
+    <dimen name="search_box_left_padding">16dp</dimen>
+    <!-- Search box interior padding - right -->
+    <dimen name="search_box_right_padding">8dp</dimen>
+    <!-- Padding around the icon in the search box. -->
+    <dimen name="search_box_icon_padding">3dp</dimen>
+    <!-- Left margin of the text field in the search box. -->
+    <dimen name="search_box_text_left_margin">8dp</dimen>
+    <!-- Size of the icon (voice search, close search) in the search box. -->
+    <dimen name="search_box_icon_size">37dp</dimen>
+
+    <!-- Size of text in tabs. -->
+    <dimen name="tab_height">43dp</dimen>
+    <dimen name="tab_text_size">14sp</dimen>
+
+    <!-- Padding to the left and right of call log action buttons. -->
+    <dimen name="call_log_action_horizontal_padding">8dp</dimen>
+    <!-- Left-padding for the call log action buttons - ensures the buttons align with the text
+         to the right of the contact badge.  Adjust when any of the following change:
+         call_log_action_horizontal_padding
+         call_log_list_contact_photo_size  -->
+    <dimen name="call_log_actions_left_padding">48dp</dimen>
+    <!-- Text size for primary call log text -->
+    <dimen name="call_log_primary_text_size">16sp</dimen>
+    <!-- Text size for secondary call log text -->
+    <dimen name="call_log_secondary_text_size">14sp</dimen>
+    <!-- Height of the call log actions section for each call log entry -->
+    <dimen name="call_log_action_height">48dp</dimen>
+    <!-- Elevation of expanded call log items. -->
+    <dimen name="call_log_expanded_elevation">4dp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b04eddd..ecf190a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -265,11 +265,10 @@
     -->
     <string name="description_image_button_pound">pound</string>
 
-    <!-- String describing the Voicemail ImageButton
+    <!-- String describing the image on ImageButton plus
 
          Used by AccessibilityService to announce the purpose of the button.
     -->
-    <string name="description_voicemail_button">voicemail</string>
 
     <!-- String describing the Search ImageButton
 
@@ -284,12 +283,6 @@
     -->
     <string name="description_dial_button">dial</string>
 
-    <!-- String describing the Delete/Backspace ImageButton
-
-         Used by AccessibilityService to announce the purpose of the button.
-    -->
-    <string name="description_delete_button">backspace</string>
-
     <!-- String describing the digits text box containing the number to dial.
 
          Used by AccessibilityService to announce the purpose of the view.
@@ -329,6 +322,7 @@
     <string name="menu_show_all_calls">Show all calls</string>
 
     <!-- Menu items for dialpad options as part of Pause and Wait ftr -->
+    <string name="add_contact">Add contact</string>
     <string name="add_2sec_pause">Add 2-sec pause</string>
     <string name="add_wait">Add wait</string>
 
@@ -414,13 +408,6 @@
     -->
     <string name="description_call_log_voicemail">Voicemail</string>
 
-    <!-- String describing the button to add a contact for the current number.
-
-        Note: AccessibilityServices use this attribute to announce what the view represents.
-              This is especially valuable for views without textual representation like ImageView.
-    -->
-    <string name="description_add_contact">Add contact</string>
-
     <!-- String describing the button to view the contact for the current number.
 
         Note: AccessibilityServices use this attribute to announce what the view represents.
@@ -435,6 +422,33 @@
     -->
     <string name="description_call">Call <xliff:g id="name">%1$s</xliff:g></string>
 
+    <!-- String describing the button to access the contact details for a name or number.
+
+        Note: AccessibilityServices use this attribute to announce what the view represents.
+              This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_contact_details">Contact details for <xliff:g id="nameOrNumber">%1$s</xliff:g></string>
+
+    <!-- String describing the button to access call details in the call log.
+
+        Note: AccessibilityServices use this attribute to announce what the view represents.
+              This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_call_details">Call details</string>
+
+    <!-- String indicating a call log entry has an associated voicemail.
+
+    Note: AccessibilityServices use this attribute to announce what the view represents.
+          This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_new_voicemail">New voicemail.</string>
+
+    <!-- String indicating the number of calls to/from a caller in the call log.
+
+    Note: AccessibilityServices use this attribute to announce what the view represents.
+          This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_num_calls"><xliff:g id="numberOfCalls">%1$s</xliff:g> calls.</string>
 
     <!-- String describing the button to SMS a number or contact.
 
@@ -453,13 +467,12 @@
     -->
     <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>
 
-    <!-- The string used to represent an unknown location for a phone number in the call log
-        Do not translate. -->
-    <string name="call_log_empty_geocode"></string>
-
     <!-- Menu item used to call a contact, containing the number of the contact to call -->
     <string name="menu_callNumber">Call <xliff:g id="number">%s</xliff:g></string>
 
@@ -520,90 +533,54 @@
     <!-- Message displayed when there is no application available to handle the add contact menu option. [CHAR LIMIT=NONE] -->
     <string name="add_contact_not_available">Re-enable the People application to use this feature.</string>
 
+    <!-- Message displayed when there is no application available to handle voice search. [CHAR LIMIT=NONE] -->
+    <string name="voice_search_not_available">Voice search is not available.</string>
+
+    <!-- Message displayed when the Phone application has been disabled and a phone call cannot
+         be made. [CHAR LIMIT=NONE] -->
+    <string name="call_not_available">Cannot make a phone call because the Phone application has been disabled.</string>
+
+    <!-- Message displayed when there is no application available to handle a particular action.
+         [CHAR LIMIT=NONE] -->
+    <string name="activity_not_available">No installed activity available to handle selected action.</string>
+
     <!-- Hint displayed in dialer search box when there is no query that is currently typed.
          [CHAR LIMIT=30] -->
     <string name="dialer_hint_find_contact">Type a name or phone number</string>
 
-    <!-- Title for the call log tab containing the list of all voicemails and calls
-         [CHAR LIMIT=15] -->
-    <string name="call_log_all_title">All</string>
-
-    <!-- Title for the call log tab containing the list of all missed calls only
-         [CHAR LIMIT=15] -->
-    <string name="call_log_missed_title">Missed</string>
-
     <!-- String resource for the font-family to use for the call log activity's title
          Do not translate. -->
     <string name="call_log_activity_title_font_family">sans-serif-light</string>
 
-    <!-- String resource for the font-family to use for show all contacts' title
-         Do not translate. -->
-    <string name="show_all_contacts_title_font_family">sans-serif-light</string>
-
     <!-- Text displayed when the list of missed calls is empty -->
     <string name="recentMissed_empty">No recent missed calls.</string>
 
     <!-- Text displayed when the list of voicemails is empty -->
     <string name="recentVoicemails_empty">No recent voicemails.</string>
 
-    <!--  Menu option to enable all contacts to be displayed -->
-    <string name="show_all_contacts">Show all contacts</string>
-
     <!--  Menu option to show favorite contacts only -->
     <string name="show_favorites_only">Show favorites only</string>
 
     <!--  Title of activity that displays a list of all calls -->
     <string name="call_log_activity_title">History</string>
 
-    <!-- The digit to be displayed on the 0 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_0_number">0</string>
-    <!-- The digit to be displayed on the 1 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_1_number">1</string>
-    <!-- The digit to be displayed on the 2 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_2_number">2</string>
-    <!-- The digit to be displayed on the 3 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_3_number">3</string>
-    <!-- The digit to be displayed on the 4 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_4_number">4</string>
-    <!-- The digit to be displayed on the 5 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_5_number">5</string>
-    <!-- The digit to be displayed on the 6 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_6_number">6</string>
-    <!-- The digit to be displayed on the 7 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_7_number">7</string>
-    <!-- The digit to be displayed on the 8 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_8_number">8</string>
-    <!-- The digit to be displayed on the 9 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_9_number">9</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_star_number">*</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_pound_number">#</string>
+    <!-- Title for the call log tab containing the list of all voicemails and calls
+         [CHAR LIMIT=30] -->
+    <string name="call_log_all_title">All</string>
 
-    <!--  Do not translate. -->
-    <string name="dialpad_0_letters">+</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_1_letters"></string>
-    <!--  Do not translate. -->
-    <string name="dialpad_2_letters">ABC</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_3_letters">DEF</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_4_letters">GHI</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_5_letters">JKL</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_6_letters">MNO</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_7_letters">PQRS</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_8_letters">TUV</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_9_letters">WXYZ</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_star_letters"></string>
-    <!--  Do not translate. -->
-    <string name="dialpad_pound_letters"></string>
+    <!-- Title for the call log tab containing the list of all missed calls only
+         [CHAR LIMIT=30] -->
+    <string name="call_log_missed_title">Missed</string>
+
+    <!-- Title for the call log tab containing the list of all voicemail calls only
+         [CHAR LIMIT=30] -->
+    <string name="call_log_voicemail_title">Voicemail</string>
+
+    <string name="tab_speed_dial">Speed Dial</string>
+
+    <string name="tab_recents">Recents</string>
+
+    <string name="tab_all_contacts">Contacts</string>
 
     <!--  Title of fragment that displays all contacts -->
     <string name="show_all_contacts_title">All contacts</string>
@@ -622,6 +599,9 @@
     <!-- Shortcut item used to add a number directly from search -->
     <string name="search_shortcut_add_to_contacts">Add to contacts</string>
 
+    <!-- Title for the recent calls footer that brings users to the full call history when clicked -->
+    <string name="recents_footer_text">View full call history</string>
+
     <!-- Number of missed calls shown on call card [CHAR LIMIT=40] -->
     <string name="num_missed_calls"><xliff:g id="number">%s</xliff:g> new missed calls</string>
 
@@ -637,26 +617,85 @@
     <!-- Content description for dismiss button on badge. [CHAR LIMIT=NONE] -->
     <string name="description_dismiss">Dismiss</string>
 
-    <string name="wifi_no_signal_no_problem">No Signal? No Problem.</string>
+    <!-- Remove button that shows up when contact is long-pressed. [CHAR LIMIT=NONE] -->
+    <string name="remove_contact">Remove</string>
 
-    <string name="wifi_enable_google_wifi_calling">Enable Google Wi-Fi Calling</string>
+    <!-- Header text displayed on the main dialer screen above the list of favorite phone numbers.
+         [CHAR LIMIT=21] -->
+    <string name="favorites_menu_speed_dial">Speed Dial</string>
 
-    <string name="wifi_when_connected_to_a_signal">When connected to a strong Wi-Fi signal:</string>
+    <!-- Button text for the "all contacts" button displayed on the main dialer screen above the
+         list of favorite phone numbers.  Navigates the user to the "All Contacts" list.
+         This text represents the same action as the text in string "menu_allContacts".
+         [CHAR LIMIT=21] -->
+    <string name="favorites_menu_all_contacts">ALL CONTACTS</string>
 
-    <string name="wifi_always_use_wifi">Always use Wi-Fi to make calls</string>
+    <!-- The font-family to use for the "speed dial" label on the favorites menu.
+         Do not translate. -->
+    <string name="favorites_menu_speed_dial_font_family">sans-serif-light</string>
 
-    <string name="wifi_ask_use_wifi">Always ask</string>
+    <!-- The font-family to use for the "all contacts" label on the favorites menu.
+         Do not translate. -->
+    <string name="favorites_menu_all_contacts_font_family">sans-serif</string>
 
-    <string name="wifi_never_use_wifi">Never use Wi-Fi to make calls</string>
+    <!-- The font-family to use for the text inside the searchbox.
+         Do not translate. -->
+    <string name="search_font_family">sans-serif</string>
 
-    <string name="wifi_next_setup_screen">Next</string>
+    <!-- The font-family to use for tab text.
+         Do not translate. -->
+    <string name="tab_font_family">sans-serif</string>
 
-    <string name="wifi_previous_setup_screen">Back</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] -->
+    <string name="call_log_action_call_back">CALL BACK</string>
 
-    <string name="wifi_setup_completed">Boom. Wi-Fi calling is all set up. You can change your preferences or turn it off anytime in settings.</string>
+    <!-- Button text for the "DELETE" button displayed underneath an entry in the call log.
+         Tapping causes the call log entry in question to be removed from the call log.
+         [CHAR LIMIT=30] -->
+    <string name="call_log_action_delete">DELETE</string>
 
-    <string name="wifi_setup_ok">Ok, got it</string>
+    <!-- Button text for the "LISTEN" button displayed underneath an entry in the call log.
+         Tapping navigates the user to the call details screen where the user can listen to the
+         voicemail represented by the call log entry.
+         [CHAR LIMIT=30] -->
+    <string name="call_log_action_voicemail">LISTEN</string>
 
-    <string name="wifi_setup_settings_shortcut">Call settings</string>
+    <!-- String describing an incoming missed call entry in the call log.
+         Note: AccessibilityServices uses this attribute to announce what the view represents.
+         [CHAR LIMIT=NONE] -->
+    <string name="description_incoming_missed_call">Missed call from <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g>, <xliff:g id="typeOrLocation" example="Mobile">%2$s</xliff:g>, <xliff:g id="timeOfCall" example="2 min ago">%3$s</xliff:g>.</string>
 
+    <!-- String describing an incoming answered call entry in the call log.
+         Note: AccessibilityServices uses this attribute to announce what the view represents.
+         [CHAR LIMIT=NONE] -->
+    <string name="description_incoming_answered_call">Answered call from <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g>, <xliff:g id="typeOrLocation" example="Mobile">%2$s</xliff:g>, <xliff:g id="timeOfCall" example="2 min ago">%3$s</xliff:g>.</string>
+
+    <!-- String describing an outgoing call entry in the call log.
+         Note: AccessibilityServices uses this attribute to announce what the view represents.
+         [CHAR LIMIT=NONE] -->
+    <string name="description_outgoing_call">Call to <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g>, <xliff:g id="typeOrLocation" example="Mobile">%2$s</xliff:g>, <xliff:g id="timeOfCall" example="2 min ago">%3$s</xliff:g>.</string>
+
+    <!-- String describing the "call back" action for an entry in the call log.  The call back
+         action triggers a return call to the named user.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="description_call_back_action">Call back <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g></string>
+
+    <!-- String describing the "listen" action for an entry in the call log.  The listen
+         action is shown for call log entries representing a voicemail message and this button
+         triggers playing back the voicemail.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="description_voicemail_action">Listen to voicemail from <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g></string>
+
+    <!-- String describing the "delete" action for an entry in the call log.  The delete
+         action triggers the removal of the current call log entry from the call log.
+         Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+         [CHAR LIMIT=NONE] -->
+    <string name="description_delete_action">Delete call log entry for <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g></string>
+
+    <!-- Toast message which appears when a call log entry is deleted. -->
+    <string name="toast_entry_removed">Call log entry deleted.</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 89678fc..659d5ab 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -16,12 +16,20 @@
   -->
 <resources>
     <style name="DialtactsTheme"
-           parent="android:Theme.Holo.Light">
+           parent="android:Theme.Quantum.Light">
         <item name="android:textColorPrimary">@color/dialtacts_primary_text_color</item>
         <item name="android:textColorSecondary">@color/dialtacts_secondary_text_color</item>
-        <item name="android:windowActionBarOverlay">false</item>
+        <item name="android:windowActionBarOverlay">true</item>
+        <item name="android:windowActionModeOverlay">true</item>
         <item name="android:actionBarStyle">@style/DialtactsActionBarStyle</item>
+        <!-- Style for the tabs (for the tabs) -->
         <item name="android:actionBarTabStyle">@style/DialtactsActionBarTabStyle</item>
+        <!-- Style for the tab bar (for the divider between tabs) -->
+        <item name="android:actionBarTabBarStyle">@style/DialtactsActionBarTabBarStyle</item>
+        <!-- Style for the tab bar text (for text on tabs) -->
+        <item name="android:actionBarTabTextStyle">@style/DialtactsActionBarTabTextStyle</item>
+        <!-- Style for the overflow button in the actionbar. -->
+        <item name="android:actionOverflowButtonStyle">@style/DialtactsActionBarOverflow</item>
         <item name="android:windowContentOverlay">@null</item>
         <!--  Searchbox Style -->
         <item name="android:editTextStyle">@style/DialtactsSearchboxStyle</item>
@@ -29,7 +37,6 @@
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">32dip</item>
-        <item name="list_item_divider">?android:attr/listDivider</item>
         <item name="list_item_padding_top">8dip</item>
         <item name="list_item_padding_right">0dip</item>
         <item name="list_item_padding_bottom">8dip</item>
@@ -41,17 +48,16 @@
         <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
         <item name="list_item_profile_photo_size">70dip</item>
         <item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
+        <item name="list_item_background_color">@color/background_dialer_light</item>
         <item name="list_item_header_text_indent">8dip</item>
         <item name="list_item_header_text_color">@color/people_app_theme_color</item>
         <item name="list_item_header_text_size">14sp</item>
         <item name="list_item_header_height">30dip</item>
-        <item name="list_item_header_underline_height">1dip</item>
-        <item name="list_item_header_underline_color">@color/favorite_contacts_separator_color</item>
         <item name="list_item_data_width_weight">5</item>
         <item name="list_item_label_width_weight">3</item>
-        <item name="contact_browser_list_padding_left">8dip</item>
-        <item name="contact_browser_list_padding_right">0dip</item>
-        <item name="contact_browser_background">@android:color/transparent</item>
+        <item name="contact_browser_list_padding_left">16dp</item>
+        <item name="contact_browser_list_padding_right">0dp</item>
+        <item name="contact_browser_background">@color/contact_list_background_color</item>
         <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
         <!-- CallLog -->
         <item name="call_log_primary_text_color">#000000</item>
@@ -66,24 +72,38 @@
         <item name="call_log_voicemail_status_action_text_color">#33b5e5</item>
             <!-- Favorites -->
         <item name="favorites_padding_bottom">?android:attr/actionBarSize</item>
+	<item name="android:colorPrimaryDark">@color/actionbar_background_color_dark</item>
+    </style>
+
+    <!-- Action bar overflow menu icon. -->
+    <style name="DialtactsActionBarOverflow"
+           parent="@android:style/Widget.Quantum.Light.ActionButton.Overflow">
+        <item name="android:src">@drawable/ic_menu_overflow_lt</item>
     </style>
 
     <style name="DialpadTheme" parent="DialtactsTheme">
         <item name="android:textColorPrimary">#FFFFFF</item>
     </style>
 
-    <style name="DialtactsThemeWithActionBarOverlay" parent="DialtactsTheme">
-        <item name="android:windowActionBarOverlay">true</item>
+    <style name="DialtactsThemeWithoutActionBarOverlay" parent="DialtactsTheme">
+        <item name="android:windowActionBarOverlay">false</item>
     </style>
 
-    <style name="CallDetailActivityTheme" parent="android:Theme.Holo.Light">
-        <item name="android:windowBackground">@color/background_dialer_list_items</item>
+    <!-- Hide the actionbar title during the activity preview -->
+    <style name="DialtactsActivityTheme" parent="DialtactsTheme">
+        <item name="android:actionBarStyle">@style/DialtactsActionBarWithoutTitleStyle</item>
+    </style>
+
+    <style name="CallDetailActivityTheme" parent="android:Theme.Quantum.Light">
+        <item name="android:windowBackground">@color/background_dialer_light</item>
         <item name="android:gravity">top</item>
         <item name="android:listViewStyle">@style/ListViewStyle</item>
+        <item name="android:actionBarStyle">@style/DialtactsActionBarStyle</item>
+        <item name="android:actionOverflowButtonStyle">@style/DialtactsActionBarOverflow</item>
         <!-- CallLog -->
-        <item name="call_log_primary_text_color">#333333</item>
+        <item name="call_log_primary_text_color">#404040</item>
         <item name="call_log_primary_background_color">#FFFFFF</item>
-        <item name="call_log_secondary_text_color">#333333</item>
+        <item name="call_log_secondary_text_color">#9a9a9a</item>
         <item name="call_log_secondary_background_color">#FFFFFF</item>
         <item name="call_log_header_color">#FFFFFF</item>
         <!-- VoicemailStatus -->
@@ -93,47 +113,46 @@
         <item name="call_log_voicemail_status_action_text_color">#33b5e5</item>
     </style>
 
-    <style name="Theme">
-    </style>
-
-    <style name="DialtactsDigitsTextAppearance">
-        <item name="android:maxLines">1</item>
-        <item name="android:scrollHorizontally">true</item>
-        <item name="android:textSize">@dimen/dialpad_digits_text_size</item>
-        <item name="android:freezesText">true</item>
-        <item name="android:focusableInTouchMode">true</item>
-        <item name="android:editable">true</item>
-        <item name="android:cursorVisible">false</item>
-        <item name="android:layout_weight">0</item>
-    </style>
-
-    <style name="DialtactsDialpadButtonStyle">
-        <item name="android:layout_width">0dip</item>
-        <item name="android:layout_height">match_parent</item>
-        <item name="android:layout_weight">1</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-        <item name="android:soundEffectsEnabled">false</item>
-    </style>
-
-    <style name="DialpadHorizontalSeparator">
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:layout_height">@dimen/dialpad_vertical_margin</item>
-        <item name="android:background">#66000000</item>
-    </style>
-
-    <style name="DialtactsActionBarStyle" parent="android:Widget.Holo.ActionBar">
-        <item name="android:background">@drawable/call_history_actionbar_background</item>
-        <item name="android:backgroundStacked">@color/actionbar_background_color</item>
+    <style name="DialtactsActionBarStyle" parent="android:Widget.Quantum.ActionBar">
+        <item name="android:background">@color/actionbar_background_color</item>
+        <item name="android:backgroundStacked">#ffffff</item>
+        <item name="android:titleTextStyle">@style/DialtactsActionBarTitleText</item>
         <!-- Empty icon -->
         <item name="android:icon">@android:color/transparent</item>
+    </style>
+
+    <style name="DialtactsActionBarWithoutTitleStyle" parent="DialtactsActionBarStyle">
         <item name="android:displayOptions"></item>
     </style>
 
-    <style name="DialtactsActionBarTabStyle" parent="@android:style/Widget.Holo.ActionBar.TabView">
-        <item name="android:background">@drawable/action_bar_tab</item>
+    <!-- Text in the action bar at the top of the screen -->
+    <style name="DialtactsActionBarTitleText"
+           parent="@android:style/TextAppearance.Quantum.Widget.ActionBar.Title">
+        <item name="android:textColor">@color/actionbar_text_color</item>
     </style>
 
-    <style name="ListViewStyle" parent="@android:style/Widget.Holo.Light.ListView">
+    <!-- Styling for the tab bar; handles styling of the divider line. -->
+    <style name="DialtactsActionBarTabBarStyle"
+           parent="@android:style/Widget.Quantum.ActionBar.TabBar">
+        <item name="android:showDividers">none</item>
+    </style>
+
+    <!-- Styling for tabs. -->
+    <style name="DialtactsActionBarTabStyle" parent="@android:style/Widget.Quantum.ActionBar.TabView">
+        <item name="android:background">@drawable/action_bar_tab</item>
+        <item name="android:showDividers">none</item>
+    </style>
+
+    <!-- Text style for tabs. -->
+    <style name="DialtactsActionBarTabTextStyle"
+           parent="android:style/Widget.Quantum.Light.ActionBar.TabText">
+        <item name="android:textColor">@color/tab_text_color</item>
+        <item name="android:textSize">@dimen/tab_text_size</item>
+        <item name="android:fontFamily">@string/tab_font_family</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="ListViewStyle" parent="@android:style/Widget.Quantum.Light.ListView">
         <item name="android:overScrollMode">always</item>
     </style>
 
diff --git a/res/drawable/tab_unselected_pressed.xml b/res/xml/searchable.xml
similarity index 61%
copy from res/drawable/tab_unselected_pressed.xml
copy to res/xml/searchable.xml
index 2362b65..0e8242d 100644
--- a/res/drawable/tab_unselected_pressed.xml
+++ b/res/xml/searchable.xml
@@ -1,6 +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.
@@ -14,13 +13,10 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <item>
-        <shape android:shape="rectangle" >
-            <solid android:color="#4dffffff" />
-        </shape>
-    </item>
-
-</layer-list>
\ No newline at end of file
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+    android:label="@string/applicationLabel"
+    android:hint="@string/dialer_hint_find_contact"
+    android:inputType="textNoSuggestions"
+    android:imeOptions="actionSearch"
+    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
+    />
\ No newline at end of file
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index c96cbf1..decfe9b 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -18,6 +18,7 @@
 
 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;
@@ -31,6 +32,7 @@
 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;
@@ -55,6 +57,7 @@
 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;
@@ -69,6 +72,7 @@
 import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
 import com.android.dialer.util.AsyncTaskExecutor;
 import com.android.dialer.util.AsyncTaskExecutors;
+import com.android.dialer.util.DialerUtils;
 import com.android.dialer.voicemail.VoicemailPlaybackFragment;
 import com.android.dialer.voicemail.VoicemailStatusHelper;
 import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
@@ -234,7 +238,8 @@
             if (finishPhoneNumerSelectedActionModeIfShown()) {
                 return;
             }
-            startActivity(((ViewEntry) view.getTag()).primaryIntent);
+            DialerUtils.startActivityWithErrorToast(CallDetailActivity.this,
+                    ((ViewEntry) view.getTag()).primaryIntent);
         }
     };
 
@@ -244,7 +249,8 @@
             if (finishPhoneNumerSelectedActionModeIfShown()) {
                 return;
             }
-            startActivity(((ViewEntry) view.getTag()).secondaryIntent);
+            DialerUtils.startActivityWithErrorToast(CallDetailActivity.this,
+                    ((ViewEntry) view.getTag()).secondaryIntent);
         }
     };
 
@@ -413,8 +419,10 @@
                 TelephonyManager tm = (TelephonyManager)
                         getSystemService(Context.TELEPHONY_SERVICE);
                 if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
-                    startActivity(CallUtil.getCallIntent(
-                            Uri.fromParts(CallUtil.SCHEME_TEL, mNumber, null)));
+                    DialerUtils.startActivityWithErrorToast(this,
+                            CallUtil.getCallIntent(Uri.fromParts(CallUtil.SCHEME_TEL, mNumber,
+                                    null)),
+                            R.string.call_not_available);
                     return true;
                 }
             }
@@ -544,14 +552,14 @@
                             mainActionDescription);
                 }
 
+                final CharSequence displayNumber =
+                        mPhoneNumberHelper.getDisplayNumber(
+                                firstDetails.number,
+                                firstDetails.numberPresentation,
+                                firstDetails.formattedNumber);
+
                 // This action allows to call the number that places the call.
                 if (canPlaceCallsTo) {
-                    final CharSequence displayNumber =
-                            mPhoneNumberHelper.getDisplayNumber(
-                                    firstDetails.number,
-                                    firstDetails.numberPresentation,
-                                    firstDetails.formattedNumber);
-
                     ViewEntry entry = new ViewEntry(
                             getString(R.string.menu_callNumber,
                                     forceLeftToRight(displayNumber)),
@@ -622,7 +630,20 @@
                             }
                         },
                         historyList);
-                loadContactPhotos(photoUri);
+
+                final String displayNameForDefaultImage = TextUtils.isEmpty(firstDetails.name) ?
+                        displayNumber.toString() : firstDetails.name.toString();
+
+                final String lookupKey = ContactInfoHelper.getLookupKeyFromUri(contactUri);
+
+                final boolean isBusiness = mContactInfoHelper.isBusiness(firstDetails.sourceType);
+
+                final int contactType =
+                        isVoicemailNumber? ContactPhotoManager.TYPE_VOICEMAIL :
+                        isBusiness ? ContactPhotoManager.TYPE_BUSINESS :
+                        ContactPhotoManager.TYPE_DEFAULT;
+
+                loadContactPhotos(photoUri, displayNameForDefaultImage, lookupKey, contactType);
                 findViewById(R.id.call_detail).setVisibility(View.VISIBLE);
             }
         }
@@ -643,7 +664,8 @@
             mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    startActivity(actionIntent);
+                    DialerUtils.startActivityWithErrorToast(CallDetailActivity.this, actionIntent,
+                            R.string.add_contact_not_available);
                 }
             });
             mMainActionPushLayerView.setContentDescription(actionDescription);
@@ -683,6 +705,7 @@
             final CharSequence numberLabel;
             final Uri photoUri;
             final Uri lookupUri;
+            int sourceType;
             // If this is not a regular number, there is no point in looking it up in the contacts.
             ContactInfo info =
                     PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)
@@ -697,6 +720,7 @@
                 numberLabel = "";
                 photoUri = null;
                 lookupUri = null;
+                sourceType = 0;
             } else {
                 formattedNumber = info.formattedNumber;
                 nameText = info.name;
@@ -704,11 +728,12 @@
                 numberLabel = info.label;
                 photoUri = info.photoUri;
                 lookupUri = info.lookupUri;
+                sourceType = info.sourceType;
             }
             return new PhoneCallDetails(number, numberPresentation,
                     formattedNumber, countryIso, geocode,
                     new int[]{ callType }, date, duration,
-                    nameText, numberType, numberLabel, lookupUri, photoUri);
+                    nameText, numberType, numberLabel, lookupUri, photoUri, sourceType);
         } finally {
             if (callCursor != null) {
                 callCursor.close();
@@ -717,9 +742,12 @@
     }
 
     /** Load the contact photos and places them in the corresponding views. */
-    private void loadContactPhotos(Uri photoUri) {
+    private void loadContactPhotos(Uri photoUri, String displayName, String lookupKey,
+            int contactType) {
+        final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey,
+                contactType, false);
         mContactPhotoManager.loadPhoto(mContactBackgroundView, photoUri,
-                mContactBackgroundView.getWidth(), true);
+                mContactBackgroundView.getWidth(), true, false /* isCircular */, request);
     }
 
     static final class ViewEntry {
@@ -812,7 +840,8 @@
             mStatusMessageAction.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    startActivity(new Intent(Intent.ACTION_VIEW, message.actionUri));
+                    DialerUtils.startActivityWithErrorToast(CallDetailActivity.this,
+                            new Intent(Intent.ACTION_VIEW, message.actionUri));
                 }
             });
         } else {
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 04934c7..a90f0c8 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -16,43 +16,46 @@
 
 package com.android.dialer;
 
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
+import android.animation.LayoutTransition;
+import android.app.ActionBar;
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.app.FragmentManager.BackStackEntry;
 import android.app.FragmentTransaction;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
-import android.graphics.drawable.Drawable;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.TypedArray;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.Intents.UI;
 import android.speech.RecognizerIntent;
+import android.support.v4.view.ViewPager;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
 import android.text.TextWatcher;
-import android.text.style.ImageSpan;
 import android.util.Log;
+import android.view.DragEvent;
 import android.view.Menu;
+import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.View.OnFocusChangeListener;
+import android.view.View.OnDragListener;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.AbsListView.OnScrollListener;
 import android.widget.EditText;
+import android.widget.ImageButton;
 import android.widget.PopupMenu;
+import android.widget.RelativeLayout;
 import android.widget.Toast;
 
 import com.android.contacts.common.CallUtil;
@@ -60,34 +63,44 @@
 import com.android.contacts.common.dialog.ClearFrequentsDialog;
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.contacts.common.util.ViewUtil;
 import com.android.dialer.calllog.CallLogActivity;
 import com.android.dialer.database.DialerDatabaseHelper;
 import com.android.dialer.dialpad.DialpadFragment;
 import com.android.dialer.dialpad.SmartDialNameMatcher;
 import com.android.dialer.dialpad.SmartDialPrefix;
 import com.android.dialer.interactions.PhoneNumberInteraction;
-import com.android.dialer.list.AllContactsActivity;
+import com.android.dialer.list.DragDropController;
+import com.android.dialer.list.ListsFragment;
+import com.android.dialer.list.OnDragDropListener;
 import com.android.dialer.list.OnListFragmentScrolledListener;
-import com.android.dialer.list.PhoneFavoriteFragment;
+import com.android.dialer.list.SpeedDialFragment;
+import com.android.dialer.list.PhoneFavoriteSquareTileView;
 import com.android.dialer.list.RegularSearchFragment;
+import com.android.dialer.list.RemoveView;
 import com.android.dialer.list.SearchFragment;
 import com.android.dialer.list.SmartDialSearchFragment;
 import com.android.dialerbind.DatabaseHelperManager;
 import com.android.internal.telephony.ITelephony;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * The dialer tab's title is 'phone', a more common name (see strings.xml).
  */
 public class DialtactsActivity extends TransactionSafeActivity implements View.OnClickListener,
-        DialpadFragment.OnDialpadQueryChangedListener, PopupMenu.OnMenuItemClickListener,
+        DialpadFragment.OnDialpadQueryChangedListener,
         OnListFragmentScrolledListener,
-        DialpadFragment.OnDialpadFragmentStartedListener,
-        PhoneFavoriteFragment.OnShowAllContactsListener {
+        DialpadFragment.HostInterface,
+        ListsFragment.HostInterface,
+        SpeedDialFragment.HostInterface,
+        OnDragDropListener, View.OnLongClickListener,
+        OnPhoneNumberPickerActionListener,
+        ViewPager.OnPageChangeListener {
     private static final String TAG = "DialtactsActivity";
 
-    public static final boolean DEBUG = false;
+    public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
 
@@ -114,16 +127,11 @@
      */
     private static final String ACTION_TOUCH_DIALER = "com.android.phone.action.TOUCH_DIALER";
 
-    private static final int SUBACTIVITY_ACCOUNT_FILTER = 1;
-
     private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
 
-    private String mFilterText;
+    private static final int ANIMATION_DURATION = 250;
 
-    /**
-     * The main fragment displaying the user's favorites and frequent contacts
-     */
-    private PhoneFavoriteFragment mPhoneFavoriteFragment;
+    private RelativeLayout parentLayout;
 
     /**
      * Fragment containing the dialpad that slides into view
@@ -140,19 +148,26 @@
      */
     private SmartDialSearchFragment mSmartDialSearchFragment;
 
-    private View mMenuButton;
-    private View mCallHistoryButton;
-    private View mDialpadButton;
-    private PopupMenu mOverflowMenu;
+    /**
+     * Fragment containing the speed dial list, recents list, and all contacts list.
+     */
+    private ListsFragment mListsFragment;
 
-    // Padding view used to shift the fragments up when the dialpad is shown.
-    private View mBottomPaddingView;
+    private View mFloatingActionButtonContainer;
+    private ImageButton mFloatingActionButton;
+
     private View mFragmentsFrame;
-    private View mActionBar;
 
+    private int mActionBarHeight;
     private boolean mInDialpadSearch;
     private boolean mInRegularSearch;
     private boolean mClearSearchOnPause;
+    private boolean isDialpadShown;
+
+    /**
+     * The position of the currently selected tab in the attached {@link ListsFragment}.
+     */
+    private int mCurrentTabPosition = 0;
 
     /**
      * True if the dialpad is only temporarily showing due to being in call
@@ -163,14 +178,32 @@
      * True when this activity has been launched for the first time.
      */
     private boolean mFirstLaunch;
-    private View mSearchViewContainer;
+
+    /**
+     * Search query to be applied to the SearchView in the ActionBar once
+     * onCreateOptionsMenu has been called.
+     */
+    private String mPendingSearchViewQuery;
+
+    private EditText mSearchView;
     private View mSearchViewCloseButton;
     private View mVoiceSearchButton;
-    private EditText mSearchView;
+    /**
+     * View that contains the "Remove" dialog that shows up when the user long presses a contact.
+     * If the user releases a contact when hovering on top of this, the contact is unfavorited and
+     * removed from the speed dial list.
+     */
+    private View mRemoveViewContainer;
 
+    final Interpolator hideActionBarInterpolator = new AccelerateInterpolator(1.5f);
+    final Interpolator showActionBarInterpolator = new DecelerateInterpolator(1.5f);
     private String mSearchQuery;
 
     private DialerDatabaseHelper mDialerDatabaseHelper;
+    private DragDropController mDragDropController;
+
+    private int mDialerBackgroundColor;
+    private int mContactListBackgroundColor;
 
     private class OverflowPopupMenu extends PopupMenu {
         public OverflowPopupMenu(Context context, View anchor) {
@@ -181,12 +214,28 @@
         public void show() {
             final Menu menu = getMenu();
             final MenuItem clearFrequents = menu.findItem(R.id.menu_clear_frequents);
-            clearFrequents.setVisible(mPhoneFavoriteFragment.hasFrequents());
+            // TODO: Check mSpeedDialFragment.hasFrequents()
+            clearFrequents.setVisible(true);
             super.show();
         }
     }
 
     /**
+     * Listener that listens to drag events and sends their x and y coordinates to a
+     * {@link DragDropController}.
+     */
+    private class LayoutOnDragListener implements OnDragListener {
+        @Override
+        public boolean onDrag(View v, DragEvent event) {
+            if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
+                mDragDropController.handleDragHovered(v, (int) event.getX(),
+                        (int) event.getY());
+            }
+            return true;
+        }
+    }
+
+    /**
      * Listener used when one of phone numbers in search UI is selected. This will initiate a
      * phone call using the phone number.
      */
@@ -238,7 +287,7 @@
                 }
                 mSearchQuery = newText;
                 if (DEBUG) {
-                    Log.d(TAG, "onTextChange for mSearchView called with new query: " + s);
+                    Log.d(TAG, "onTextChange for mSearchView called with new query: " + newText);
                 }
                 final boolean dialpadSearch = isDialpadShowing();
 
@@ -266,6 +315,7 @@
                     mVoiceSearchButton.setVisibility(View.GONE);
                     return;
                 }
+                return;
             }
 
             @Override
@@ -282,22 +332,33 @@
         super.onCreate(savedInstanceState);
         mFirstLaunch = true;
 
-        final Intent intent = getIntent();
-        fixIntent(intent);
-
         setContentView(R.layout.dialtacts_activity);
+        getWindow().setBackgroundDrawable(null);
 
-        getActionBar().hide();
+        final ActionBar actionBar = getActionBar();
+        actionBar.setCustomView(R.layout.search_edittext);
+        actionBar.setDisplayShowCustomEnabled(true);
+
+        final View customView = actionBar.getCustomView();
+
+        mSearchView = (EditText) customView.findViewById(R.id.search_view);
+        mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
+
+        mSearchViewCloseButton = customView.findViewById(R.id.search_close_button);
+        mSearchViewCloseButton.setOnClickListener(this);
+
+        final TypedArray styledAttributes = getTheme().obtainStyledAttributes(
+                new int[] { android.R.attr.actionBarSize });
+        mActionBarHeight = (int) styledAttributes.getDimension(0, 0);
+        styledAttributes.recycle();
 
         // Add the favorites fragment, and the dialpad fragment, but only if savedInstanceState
         // is null. Otherwise the fragment manager takes care of recreating these fragments.
         if (savedInstanceState == null) {
-            final PhoneFavoriteFragment phoneFavoriteFragment = new PhoneFavoriteFragment();
-
-            final FragmentTransaction ft = getFragmentManager().beginTransaction();
-            ft.add(R.id.dialtacts_frame, phoneFavoriteFragment, TAG_FAVORITES_FRAGMENT);
-            ft.add(R.id.dialtacts_container, new DialpadFragment(), TAG_DIALPAD_FRAGMENT);
-            ft.commit();
+            getFragmentManager().beginTransaction()
+                    .add(R.id.dialtacts_frame, new ListsFragment(), TAG_FAVORITES_FRAGMENT)
+                    .add(R.id.dialtacts_container, new DialpadFragment(), TAG_DIALPAD_FRAGMENT)
+                    .commit();
         } else {
             mSearchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
             mInRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI);
@@ -305,17 +366,23 @@
             mFirstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH);
         }
 
-        mBottomPaddingView = findViewById(R.id.dialtacts_bottom_padding);
+        parentLayout = (RelativeLayout) findViewById(R.id.dialtacts_mainlayout);
+        parentLayout.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
+        parentLayout.setOnDragListener(new LayoutOnDragListener());
+
+        mDialerBackgroundColor = getResources().getColor(R.color.background_dialer_light);
+        mContactListBackgroundColor =
+                getResources().getColor(R.color.contact_list_background_color);
+
         mFragmentsFrame = findViewById(R.id.dialtacts_frame);
-        mActionBar = findViewById(R.id.fake_action_bar);
-        prepareSearchView();
 
-        if (UI.FILTER_CONTACTS_ACTION.equals(intent.getAction())
-                && savedInstanceState == null) {
-            setupFilterText(intent);
-        }
+        mFloatingActionButtonContainer = findViewById(R.id.floating_action_button_container);
+        ViewUtil.setupFloatingActionButton(mFloatingActionButtonContainer, getResources());
 
-        setupFakeActionBarItems();
+        mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
+        mFloatingActionButton.setOnClickListener(this);
+
+        mRemoveViewContainer = findViewById(R.id.remove_view_container);
 
         mDialerDatabaseHelper = DatabaseHelperManager.getDatabaseHelper(this);
         SmartDialPrefix.initializeNanpSettings(this);
@@ -330,8 +397,8 @@
             hideDialpadFragment(false, true);
             mInCallDialpadUp = false;
         }
-
         mFirstLaunch = false;
+        prepareVoiceSearchButton();
         mDialerDatabaseHelper.startSmartDialUpdateThread();
     }
 
@@ -364,50 +431,22 @@
             mSmartDialSearchFragment = (SmartDialSearchFragment) fragment;
             mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener(
                     mPhoneNumberPickerActionListener);
+            if (mFragmentsFrame != null) {
+                mFragmentsFrame.setAlpha(1.0f);
+            }
         } else if (fragment instanceof SearchFragment) {
             mRegularSearchFragment = (RegularSearchFragment) fragment;
             mRegularSearchFragment.setOnPhoneNumberPickerActionListener(
                     mPhoneNumberPickerActionListener);
-        } else if (fragment instanceof PhoneFavoriteFragment) {
-            mPhoneFavoriteFragment = (PhoneFavoriteFragment) fragment;
-            mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
+            if (mFragmentsFrame != null) {
+                mFragmentsFrame.setAlpha(1.0f);
+            }
+        } else if (fragment instanceof ListsFragment) {
+            mListsFragment = (ListsFragment) fragment;
+            mListsFragment.addOnPageChangeListener(this);
         }
     }
 
-    @Override
-    public boolean onMenuItemClick(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.menu_import_export:
-                // We hard-code the "contactsAreAvailable" argument because doing it properly would
-                // involve querying a {@link ProviderStatusLoader}, which we don't want to do right
-                // now in Dialtacts for (potential) performance reasons. Compare with how it is
-                // done in {@link PeopleActivity}.
-                ImportExportDialogFragment.show(getFragmentManager(), true,
-                        DialtactsActivity.class);
-                return true;
-            case R.id.menu_clear_frequents:
-                ClearFrequentsDialog.show(getFragmentManager());
-                return true;
-            case R.id.menu_add_contact:
-                try {
-                    startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
-                } catch (ActivityNotFoundException e) {
-                    Toast toast = Toast.makeText(this,
-                            R.string.add_contact_not_available,
-                            Toast.LENGTH_SHORT);
-                    toast.show();
-                }
-                return true;
-            case R.id.menu_call_settings:
-                handleMenuSettings();
-                return true;
-            case R.id.menu_all_contacts:
-                onShowAllContacts();
-                return true;
-        }
-        return false;
-    }
-
     protected void handleMenuSettings() {
         openTelephonySetting(this);
     }
@@ -420,35 +459,30 @@
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
-            case R.id.overflow_menu: {
-                mOverflowMenu.show();
-                break;
-            }
-            case R.id.dialpad_button:
-                // Reset the boolean flag that tracks whether the dialpad was up because
-                // we were in call. Regardless of whether it was true before, we want to
-                // show the dialpad because the user has explicitly clicked the dialpad
-                // button.
-                mInCallDialpadUp = false;
-                showDialpadFragment(true);
-                break;
-            case R.id.call_history_on_dialpad_button:
-            case R.id.call_history_button:
-                // Use explicit CallLogActivity intent instead of ACTION_VIEW +
-                // CONTENT_TYPE, so that we always open our call log from our dialer
-                final Intent intent = new Intent(this, CallLogActivity.class);
-                startActivity(intent);
+            case R.id.floating_action_button:
+                if (!isDialpadShown) {
+                    mInCallDialpadUp = false;
+                    showDialpadFragment(true);
+                } else {
+                    // Dial button was pressed; tell the Dialpad fragment
+                    mDialpadFragment.dialButtonPressed();
+                }
                 break;
             case R.id.search_close_button:
                 // Clear the search field
                 if (!TextUtils.isEmpty(mSearchView.getText())) {
                     mDialpadFragment.clearDialpad();
-                    mSearchView.setText("");
+                    mSearchView.setText(null);
                 }
                 break;
             case R.id.voice_search_button:
-                final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
-                startActivityForResult(voiceIntent, ACTIVITY_REQUEST_CODE_VOICE_SEARCH);
+                try {
+                    startActivityForResult(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH),
+                            ACTIVITY_REQUEST_CODE_VOICE_SEARCH);
+                } catch (ActivityNotFoundException e) {
+                    Toast.makeText(DialtactsActivity.this, R.string.voice_search_not_available,
+                            Toast.LENGTH_SHORT).show();
+                }
                 break;
             default: {
                 Log.wtf(TAG, "Unexpected onClick event from " + view);
@@ -458,6 +492,58 @@
     }
 
     @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.menu_history:
+                showCallHistory();
+                break;
+            case R.id.menu_add_contact:
+                try {
+                    startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
+                } catch (ActivityNotFoundException e) {
+                    Toast toast = Toast.makeText(this,
+                            R.string.add_contact_not_available,
+                            Toast.LENGTH_SHORT);
+                    toast.show();
+                }
+                break;
+            case R.id.menu_import_export:
+                // We hard-code the "contactsAreAvailable" argument because doing it properly would
+                // involve querying a {@link ProviderStatusLoader}, which we don't want to do right
+                // now in Dialtacts for (potential) performance reasons. Compare with how it is
+                // done in {@link PeopleActivity}.
+                ImportExportDialogFragment.show(getFragmentManager(), true,
+                        DialtactsActivity.class);
+                return true;
+            case R.id.menu_clear_frequents:
+                // TODO: This should be enabled/disabled based on
+                // SpeedDialFragment.hasFrequents
+                ClearFrequentsDialog.show(getFragmentManager());
+                return true;
+            case R.id.menu_call_settings:
+                handleMenuSettings();
+                return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onLongClick(View view) {
+        switch (view.getId()) {
+            case R.id.floating_action_button:
+                if (isDialpadShown) {
+                    // Dial button was pressed; tell the Dialpad fragment
+                    mDialpadFragment.dialButtonPressed();
+                    return true;  // Consume the event
+                }
+            default:
+                Log.wtf(TAG, "Unexpected onClick event from " + view);
+                break;
+        }
+        return false;
+    }
+
+    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == ACTIVITY_REQUEST_CODE_VOICE_SEARCH) {
             if (resultCode == RESULT_OK) {
@@ -477,7 +563,8 @@
     }
 
     private void showDialpadFragment(boolean animate) {
-        mDialpadFragment.setAdjustTranslationForAnimation(animate);
+        mDialpadFragment.setAnimate(animate);
+
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         if (animate) {
             ft.setCustomAnimations(R.anim.slide_in, 0);
@@ -494,7 +581,7 @@
             mDialpadFragment.clearDialpad();
         }
         if (!mDialpadFragment.isVisible()) return;
-        mDialpadFragment.setAdjustTranslationForAnimation(animate);
+        mDialpadFragment.setAnimate(animate);
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         if (animate) {
             ft.setCustomAnimations(0, R.anim.slide_out);
@@ -503,36 +590,6 @@
         ft.commit();
     }
 
-    private void prepareSearchView() {
-        mSearchViewContainer = findViewById(R.id.search_view_container);
-        mSearchViewCloseButton = findViewById(R.id.search_close_button);
-        mSearchViewCloseButton.setOnClickListener(this);
-        mVoiceSearchButton = findViewById(R.id.voice_search_button);
-        mVoiceSearchButton.setOnClickListener(this);
-        mSearchView = (EditText) findViewById(R.id.search_view);
-        mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
-
-        final String hintText = getString(R.string.dialer_hint_find_contact);
-
-        // The following code is used to insert an icon into a CharSequence (copied from
-        // SearchView)
-        final SpannableStringBuilder ssb = new SpannableStringBuilder("   "); // for the icon
-        ssb.append(hintText);
-        final Drawable searchIcon = getResources().getDrawable(R.drawable.ic_ab_search);
-        final int textSize = (int) (mSearchView.getTextSize() * 1.20);
-        searchIcon.setBounds(0, 0, textSize, textSize);
-        ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-
-        mSearchView.setHint(ssb);
-    }
-
-    final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            mSearchViewContainer.setVisibility(View.GONE);
-        }
-    };
-
     private boolean getInSearchUi() {
         return mInDialpadSearch || mInRegularSearch;
     }
@@ -547,94 +604,96 @@
         hideDialpadFragment(false, true);
     }
 
-    public void hideSearchBar() {
-       hideSearchBar(true);
+    /**
+     * Callback from child DialpadFragment when the dialpad is shown.
+     */
+    public void onDialpadShown() {
+        isDialpadShown = true;
+        mFloatingActionButton.setImageResource(R.drawable.fab_ic_call);
+        mFloatingActionButton.setContentDescription(
+                getResources().getString(R.string.description_dial_button));
+
+        SearchFragment fragment = null;
+        if (mInDialpadSearch) {
+            fragment = mSmartDialSearchFragment;
+        } else if (mInRegularSearch) {
+            fragment = mRegularSearchFragment;
+        }
+        if (fragment != null && fragment.isVisible()) {
+            fragment.getView().animate().translationY(-mActionBarHeight)
+                    .setInterpolator(hideActionBarInterpolator).setDuration(ANIMATION_DURATION);
+        }
+
+        if (mListsFragment != null && mListsFragment.isResumed() && mListsFragment.isVisible()) {
+            // If the favorites fragment is showing, fade to blank.
+            mFragmentsFrame.animate().alpha(0.0f);
+            parentLayout.setBackgroundColor(mContactListBackgroundColor);
+        }
+        getActionBar().hide();
+        alignFloatingActionButtonMiddle();
     }
 
-    public void hideSearchBar(boolean shiftView) {
-        if (shiftView) {
-            mSearchViewContainer.animate().cancel();
-            mSearchViewContainer.setAlpha(1);
-            mSearchViewContainer.setTranslationY(0);
-            mSearchViewContainer.animate().withLayer().alpha(0).translationY(-mSearchView.getHeight())
-                    .setDuration(200).setListener(mHideListener);
+    /**
+     * Callback from child DialpadFragment when the dialpad is hidden.
+     */
+    public void onDialpadHidden() {
+        isDialpadShown = false;
+        mFloatingActionButton.setImageResource(R.drawable.fab_ic_dial);
+        mFloatingActionButton.setContentDescription(
+                getResources().getString(R.string.action_menu_dialpad_button));
 
-            mFragmentsFrame.animate().withLayer()
-                    .translationY(-mSearchViewContainer.getHeight()).setDuration(200).setListener(
-                    new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mBottomPaddingView.setVisibility(View.VISIBLE);
-                            mFragmentsFrame.setTranslationY(0);
-                            mActionBar.setVisibility(View.INVISIBLE);
-                        }
-                    });
+        SearchFragment fragment = null;
+        if (mInDialpadSearch) {
+            fragment = mSmartDialSearchFragment;
+        } else if (mInRegularSearch) {
+            fragment = mRegularSearchFragment;
+        }
+        if (fragment != null && fragment.isVisible()) {
+            fragment.getView().animate().translationY(0)
+                    .setInterpolator(showActionBarInterpolator).setDuration(ANIMATION_DURATION);
+        }
+
+        if (mListsFragment != null && mListsFragment.isVisible()) {
+            mFragmentsFrame.animate().alpha(1.0f);
+            parentLayout.setBackgroundColor(mDialerBackgroundColor);
+
+        }
+        getActionBar().show();
+        alignFloatingActionButtonByTab(mCurrentTabPosition);
+    }
+
+    private void hideInputMethod(View view) {
+        final InputMethodManager imm = (InputMethodManager) getSystemService(
+                Context.INPUT_METHOD_SERVICE);
+        if (imm != null && view != null) {
+            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+    }
+
+    private void prepareVoiceSearchButton() {
+        mVoiceSearchButton = getActionBar().getCustomView().findViewById(R.id.voice_search_button);
+        final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+        if (canIntentBeHandled(voiceIntent)) {
+            mVoiceSearchButton.setVisibility(View.VISIBLE);
+            mVoiceSearchButton.setOnClickListener(this);
         } else {
-            mSearchViewContainer.setTranslationY(-mSearchView.getHeight());
-            mActionBar.setVisibility(View.INVISIBLE);
+            mVoiceSearchButton.setVisibility(View.GONE);
         }
     }
 
-    public void showSearchBar() {
-        mSearchViewContainer.animate().cancel();
-        mSearchViewContainer.setAlpha(0);
-        mSearchViewContainer.setTranslationY(-mSearchViewContainer.getHeight());
-        mSearchViewContainer.animate().withLayer().alpha(1).translationY(0).setDuration(200)
-                .setListener(new AnimatorListenerAdapter() {
-                    @Override
-                    public void onAnimationStart(Animator animation) {
-                        mSearchViewContainer.setVisibility(View.VISIBLE);
-                        mActionBar.setVisibility(View.VISIBLE);
-                    }
-                });
-
-        mFragmentsFrame.setTranslationY(-mSearchViewContainer.getHeight());
-        mFragmentsFrame.animate().withLayer().translationY(0).setDuration(200)
-                .setListener(
-                        new AnimatorListenerAdapter() {
-                            @Override
-                            public void onAnimationStart(Animator animation) {
-                                mBottomPaddingView.setVisibility(View.GONE);
-                            }
-                        });
-    }
-
-
-    public void setupFakeActionBarItems() {
-        mMenuButton = findViewById(R.id.overflow_menu);
-        if (mMenuButton != null) {
-            mMenuButton.setOnClickListener(this);
-
-            mOverflowMenu = new OverflowPopupMenu(DialtactsActivity.this, mMenuButton);
-            final Menu menu = mOverflowMenu.getMenu();
-            mOverflowMenu.inflate(R.menu.dialtacts_options);
-            mOverflowMenu.setOnMenuItemClickListener(this);
-            mMenuButton.setOnTouchListener(mOverflowMenu.getDragToOpenListener());
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        if (DEBUG) {
+            Log.d(TAG, "onCreateOptionsMenu");
         }
+        MenuInflater inflater = getMenuInflater();
+        inflater.inflate(R.menu.dialtacts_options, menu);
 
-        mCallHistoryButton = findViewById(R.id.call_history_button);
-        // mCallHistoryButton.setMinimumWidth(fakeMenuItemWidth);
-        mCallHistoryButton.setOnClickListener(this);
-
-        mDialpadButton = findViewById(R.id.dialpad_button);
-        // DialpadButton.setMinimumWidth(fakeMenuItemWidth);
-        mDialpadButton.setOnClickListener(this);
-    }
-
-    public void setupFakeActionBarItemsForDialpadFragment() {
-        final View callhistoryButton = findViewById(R.id.call_history_on_dialpad_button);
-        callhistoryButton.setOnClickListener(this);
-    }
-
-    private void fixIntent(Intent intent) {
-        // This should be cleaned up: the call key used to send an Intent
-        // that just said to go to the recent calls list.  It now sends this
-        // abstract action, but this class hasn't been rewritten to deal with it.
-        if (Intent.ACTION_CALL_BUTTON.equals(intent.getAction())) {
-            intent.setDataAndType(Calls.CONTENT_URI, Calls.CONTENT_TYPE);
-            intent.putExtra("call_key", true);
-            setIntent(intent);
+        if (mPendingSearchViewQuery != null) {
+            mSearchView.setText(mPendingSearchViewQuery);
+            mPendingSearchViewQuery = null;
         }
+        return super.onCreateOptionsMenu(menu);
     }
 
     /**
@@ -642,22 +701,20 @@
      * KEYCODE_CALL) while in a call.
      *
      * @param intent the intent that launched this activity
-     * @param recentCallsRequest true if the intent is requesting to view recent calls
      * @return true if the intent is due to hitting the green send key while in a call
      */
-    private boolean isSendKeyWhileInCall(Intent intent, boolean recentCallsRequest) {
-        // If there is a call in progress go to the call screen
-        if (recentCallsRequest) {
-            final boolean callKey = intent.getBooleanExtra("call_key", false);
+    private boolean isSendKeyWhileInCall(Intent intent) {
+        // If there is a call in progress and the user launched the dialer by hitting the call
+        // button, go straight to the in-call screen.
+        final boolean callKey = Intent.ACTION_CALL_BUTTON.equals(intent.getAction());
 
-            try {
-                ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
-                if (callKey && phone != null && phone.showCallScreen()) {
-                    return true;
-                }
-            } catch (RemoteException e) {
-                Log.e(TAG, "Failed to handle send while in call", e);
+        try {
+            ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
+            if (callKey && phone != null && phone.showCallScreen()) {
+                return true;
             }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to handle send while in call", e);
         }
 
         return false;
@@ -670,9 +727,7 @@
      */
     private void displayFragment(Intent intent) {
         // If we got here by hitting send and we're in call forward along to the in-call activity
-        boolean recentCallsRequest = Calls.CONTENT_TYPE.equals(intent.resolveType(
-            getContentResolver()));
-        if (isSendKeyWhileInCall(intent, recentCallsRequest)) {
+        if (isSendKeyWhileInCall(intent)) {
             finish();
             return;
         }
@@ -692,9 +747,7 @@
     @Override
     public void onNewIntent(Intent newIntent) {
         setIntent(newIntent);
-        fixIntent(newIntent);
         displayFragment(newIntent);
-        final String action = newIntent.getAction();
 
         invalidateOptionsMenu();
     }
@@ -725,90 +778,6 @@
     }
 
     /**
-     * Retrieves the filter text stored in {@link #setupFilterText(Intent)}.
-     * This text originally came from a FILTER_CONTACTS_ACTION intent received
-     * by this activity. The stored text will then be cleared after after this
-     * method returns.
-     *
-     * @return The stored filter text
-     */
-    public String getAndClearFilterText() {
-        String filterText = mFilterText;
-        mFilterText = null;
-        return filterText;
-    }
-
-    /**
-     * Stores the filter text associated with a FILTER_CONTACTS_ACTION intent.
-     * This is so child activities can check if they are supposed to display a filter.
-     *
-     * @param intent The intent received in {@link #onNewIntent(Intent)}
-     */
-    private void setupFilterText(Intent intent) {
-        // If the intent was relaunched from history, don't apply the filter text.
-        if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
-            return;
-        }
-        String filter = intent.getStringExtra(UI.FILTER_TEXT_EXTRA_KEY);
-        if (filter != null && filter.length() > 0) {
-            mFilterText = filter;
-        }
-    }
-
-    private final PhoneFavoriteFragment.Listener mPhoneFavoriteListener =
-            new PhoneFavoriteFragment.Listener() {
-        @Override
-        public void onContactSelected(Uri contactUri) {
-            PhoneNumberInteraction.startInteractionForPhoneCall(
-                        DialtactsActivity.this, contactUri, getCallOrigin());
-        }
-
-        @Override
-        public void onCallNumberDirectly(String phoneNumber) {
-            Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin());
-            startActivity(intent);
-        }
-    };
-
-    /* TODO krelease: This is only relevant for phones that have a hard button search key (i.e.
-     * Nexus S). Supporting it is a little more tricky because of the dialpad fragment might
-     * be showing when the search key is pressed so there is more state management involved.
-
-    @Override
-    public void startSearch(String initialQuery, boolean selectInitialQuery,
-            Bundle appSearchData, boolean globalSearch) {
-        if (mRegularSearchFragment != null && mRegularSearchFragment.isAdded() && !globalSearch) {
-            if (mInSearchUi) {
-                if (mSearchView.hasFocus()) {
-                    showInputMethod(mSearchView.findFocus());
-                } else {
-                    mSearchView.requestFocus();
-                }
-            } else {
-                enterSearchUi();
-            }
-        } else {
-            super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
-        }
-    }*/
-
-    private void showInputMethod(View view) {
-        final InputMethodManager imm = (InputMethodManager) getSystemService(
-                Context.INPUT_METHOD_SERVICE);
-        if (imm != null) {
-            imm.showSoftInput(view, 0);
-        }
-    }
-
-    private void hideInputMethod(View view) {
-        final InputMethodManager imm = (InputMethodManager) getSystemService(
-                Context.INPUT_METHOD_SERVICE);
-        if (imm != null && view != null) {
-            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
-        }
-    }
-
-    /**
      * Shows the search fragment
      */
     private void enterSearchUi(boolean smartDialSearch, String query) {
@@ -824,15 +793,12 @@
         }
 
         final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-        transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
 
         SearchFragment fragment;
-        if (mInDialpadSearch) {
+        if (mInDialpadSearch && mSmartDialSearchFragment != null) {
             transaction.remove(mSmartDialSearchFragment);
-        } else if (mInRegularSearch) {
+        } else if (mInRegularSearch && mRegularSearchFragment != null) {
             transaction.remove(mRegularSearchFragment);
-        } else {
-            transaction.remove(mPhoneFavoriteFragment);
         }
 
         final String tag;
@@ -852,6 +818,8 @@
                 fragment = new RegularSearchFragment();
             }
         }
+        // DialtactsActivity will provide the options menu
+        fragment.setHasOptionsMenu(false);
         transaction.replace(R.id.dialtacts_frame, fragment, tag);
         transaction.addToBackStack(null);
         fragment.setQueryString(query, false);
@@ -870,6 +838,10 @@
         // transitioned between search fragments
         getFragmentManager().popBackStack(0, FragmentManager.POP_BACK_STACK_INCLUSIVE);
         setNotInSearchUi();
+
+        if (isDialpadShowing()) {
+            mFragmentsFrame.setAlpha(0);
+        }
     }
 
     /** Returns an Intent to launch Call Settings screen */
@@ -887,12 +859,6 @@
         } else if (getInSearchUi()) {
             mSearchView.setText(null);
             mDialpadFragment.clearDialpad();
-        } else if (isTaskRoot()) {
-            // Instead of stopping, simply push this to the back of the stack.
-            // This is only done when running at the top of the stack;
-            // otherwise, we have been launched by someone else so need to
-            // allow the user to go back to the caller.
-            moveTaskToBack(false);
         } else {
             super.onBackPressed();
         }
@@ -900,8 +866,12 @@
 
     @Override
     public void onDialpadQueryChanged(String query) {
+        if (mSmartDialSearchFragment != null) {
+            mSmartDialSearchFragment.setAddToContactNumber(query);
+        }
         final String normalizedQuery = SmartDialNameMatcher.normalizeNumber(query,
                 SmartDialNameMatcher.LATIN_SMART_DIAL_MAP);
+
         if (!TextUtils.equals(mSearchView.getText(), normalizedQuery)) {
             if (DEBUG) {
                 Log.d(TAG, "onDialpadQueryChanged - new query: " + query);
@@ -912,6 +882,9 @@
                 // that would bring the user back to the search fragment regardless of the
                 // previous state of the application. Instead, just return here and let the
                 // fragment manager correctly figure out whatever fragment was last displayed.
+                if (!TextUtils.isEmpty(normalizedQuery)) {
+                    mPendingSearchViewQuery = normalizedQuery;
+                }
                 return;
             }
             mSearchView.setText(normalizedQuery);
@@ -927,8 +900,15 @@
     }
 
     @Override
-    public void onDialpadFragmentStarted() {
-        setupFakeActionBarItemsForDialpadFragment();
+    public void onListFragmentScroll(int firstVisibleItem, int visibleItemCount,
+            int totalItemCount) {
+        // TODO: No-op for now. This should eventually show/hide the actionBar based on
+        // interactions with the ListsFragments.
+    }
+
+    @Override
+    public void setFloatingActionButtonVisible(boolean visible) {
+        mFloatingActionButtonContainer.setVisibility(visible ? View.VISIBLE : View.GONE);
     }
 
     private boolean phoneIsInUse() {
@@ -937,12 +917,6 @@
         return tm.getCallState() != TelephonyManager.CALL_STATE_IDLE;
     }
 
-    @Override
-    public void onShowAllContacts() {
-        final Intent intent = new Intent(this, AllContactsActivity.class);
-        startActivity(intent);
-    }
-
     public static Intent getAddNumberToContactIntent(CharSequence text) {
         final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
         intent.putExtra(Intents.Insert.PHONE, text);
@@ -950,9 +924,120 @@
         return intent;
     }
 
-    public static Intent getInsertContactWithNameIntent(CharSequence text) {
-        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-        intent.putExtra(Intents.Insert.NAME, text);
-        return intent;
+    private boolean canIntentBeHandled(Intent intent) {
+        final PackageManager packageManager = getPackageManager();
+        final List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
+                PackageManager.MATCH_DEFAULT_ONLY);
+        return resolveInfo != null && resolveInfo.size() > 0;
+    }
+
+    @Override
+    public void showCallHistory() {
+        // Use explicit CallLogActivity intent instead of ACTION_VIEW +
+        // CONTENT_TYPE, so that we always open our call log from our dialer
+        final Intent intent = new Intent(this, CallLogActivity.class);
+        startActivity(intent);
+    }
+
+    /**
+     * Called when the user has long-pressed a contact tile to start a drag operation.
+     */
+    @Override
+    public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
+        getActionBar().hide();
+        mRemoveViewContainer.setVisibility(View.VISIBLE);
+    }
+
+    @Override
+    public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {
+    }
+
+    /**
+     * Called when the user has released a contact tile after long-pressing it.
+     */
+    @Override
+    public void onDragFinished(int x, int y) {
+        getActionBar().show();
+        mRemoveViewContainer.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void onDroppedOnRemove() {}
+
+    /**
+     * Allows the SpeedDialFragment to attach the drag controller to mRemoveViewContainer
+     * once it has been attached to the activity.
+     */
+    @Override
+    public void setDragDropController(DragDropController dragController) {
+        mDragDropController = dragController;
+        ((RemoveView) findViewById(R.id.remove_view))
+                .setDragDropController(dragController);
+    }
+
+    @Override
+    public void onPickPhoneNumberAction(Uri dataUri) {
+        mPhoneNumberPickerActionListener.onPickPhoneNumberAction(dataUri);
+    }
+
+    @Override
+    public void onCallNumberDirectly(String phoneNumber) {
+        mPhoneNumberPickerActionListener.onCallNumberDirectly(phoneNumber);
+    }
+
+    @Override
+    public void onShortcutIntentCreated(Intent intent) {
+        mPhoneNumberPickerActionListener.onShortcutIntentCreated(intent);
+    }
+
+    @Override
+    public void onHomeInActionBarSelected() {
+        mPhoneNumberPickerActionListener.onHomeInActionBarSelected();
+    }
+
+    public int getActionBarHeight() {
+        return mActionBarHeight;
+    }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+    }
+
+    @Override
+    public void onPageSelected(int position) {
+        mCurrentTabPosition = position;
+        // If the dialpad is showing, the floating action button should always be middle aligned.
+        if (!isDialpadShowing()) {
+            alignFloatingActionButtonByTab(mCurrentTabPosition);
+        }
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+    }
+
+    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);
+        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);
+        mFloatingActionButtonContainer.setLayoutParams(params);
     }
 }
diff --git a/src/com/android/dialer/PhoneCallDetails.java b/src/com/android/dialer/PhoneCallDetails.java
index c380b65..4e01ab5 100644
--- a/src/com/android/dialer/PhoneCallDetails.java
+++ b/src/com/android/dialer/PhoneCallDetails.java
@@ -59,13 +59,17 @@
      * This is meant to store the high-res photo only.
      */
     public final Uri photoUri;
+    /**
+     * The source type of the contact associated with this call.
+     */
+    public final int sourceType;
 
     /** Create the details for a call with a number not associated with a contact. */
     public PhoneCallDetails(CharSequence number, int numberPresentation,
             CharSequence formattedNumber, String countryIso, String geocode,
             int[] callTypes, long date, long duration) {
         this(number, numberPresentation, formattedNumber, countryIso, geocode,
-                callTypes, date, duration, "", 0, "", null, null);
+                callTypes, date, duration, "", 0, "", null, null, 0);
     }
 
     /** Create the details for a call with a number associated with a contact. */
@@ -73,7 +77,7 @@
             CharSequence formattedNumber, String countryIso, String geocode,
             int[] callTypes, long date, long duration, CharSequence name,
             int numberType, CharSequence numberLabel, Uri contactUri,
-            Uri photoUri) {
+            Uri photoUri, int sourceType) {
         this.number = number;
         this.numberPresentation = numberPresentation;
         this.formattedNumber = formattedNumber;
@@ -87,5 +91,6 @@
         this.numberLabel = numberLabel;
         this.contactUri = contactUri;
         this.photoUri = photoUri;
+        this.sourceType = sourceType;
     }
 }
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index 2a4a142..ab59972 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -18,9 +18,7 @@
 
 import android.content.res.Resources;
 import android.graphics.Typeface;
-import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.telephony.PhoneNumberUtils;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.TextUtils;
@@ -36,6 +34,10 @@
 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 java.util.ArrayList;
+import java.util.List;
 
 /**
  * Helper class to fill in the views in {@link PhoneCallDetailsViews}.
@@ -53,6 +55,11 @@
     private final PhoneNumberUtilsWrapper mPhoneNumberUtilsWrapper;
 
     /**
+     * List of items to be concatenated together for accessibility descriptions
+     */
+    private ArrayList<CharSequence> mDescriptionItems = Lists.newArrayList();
+
+    /**
      * Creates a new instance of the helper.
      * <p>
      * Generally you should have a single instance of this helper in any context.
@@ -68,8 +75,7 @@
     }
 
     /** Fills the call details views with content. */
-    public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details,
-            boolean isHighlighted) {
+    public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details) {
         // Display up to a given number of icons.
         views.callTypeIcons.clear();
         int count = details.callTypes.length;
@@ -86,24 +92,71 @@
         } else {
             callCount = null;
         }
-        // The color to highlight the count and date in, if any. This is based on the first call.
-        Integer highlightColor =
-                isHighlighted ? mCallTypeHelper.getHighlightedColor(details.callTypes[0]) : null;
 
+        CharSequence callLocationAndDate = getCallLocationAndDate(details);
+
+        // Set the call count, location and date.
+        setCallCountAndDate(views, callCount, callLocationAndDate);
+
+        final CharSequence nameText;
+        final CharSequence displayNumber =
+            mPhoneNumberHelper.getDisplayNumber(details.number,
+                    details.numberPresentation, details.formattedNumber);
+        if (TextUtils.isEmpty(details.name)) {
+            nameText = displayNumber;
+            // We have a real phone number as "nameView" so make it always LTR
+            views.nameView.setTextDirection(View.TEXT_DIRECTION_LTR);
+        } else {
+            nameText = details.name;
+        }
+
+        views.nameView.setText(nameText);
+
+        // TODO: At the current time the voicemail transcription is not supported.  This view
+        // is kept for future expansion when we may wish to show a transcription of voicemail.
+        views.voicemailTranscriptionView.setText("");
+        views.voicemailTranscriptionView.setVisibility(View.GONE);
+    }
+
+    /**
+     * Builds a string containing the call location and date.
+     *
+     * @param details The call details.
+     * @return The call location and date string.
+     */
+    private CharSequence getCallLocationAndDate(PhoneCallDetails details) {
+        mDescriptionItems.clear();
+
+        // Get type of call (ie mobile, home, etc) if known, or the caller's location.
+        CharSequence callTypeOrLocation = getCallTypeOrLocation(details);
+
+        // Only add the call type or location if its not empty.  It will be empty for unknown
+        // callers.
+        if (!TextUtils.isEmpty(callTypeOrLocation)) {
+            mDescriptionItems.add(callTypeOrLocation);
+        }
         // The date of this call, relative to the current time.
-        CharSequence dateText =
-            DateUtils.getRelativeTimeSpanString(details.date,
-                    getCurrentTimeMillis(),
-                    DateUtils.MINUTE_IN_MILLIS,
-                    DateUtils.FORMAT_ABBREV_RELATIVE);
+        mDescriptionItems.add(getCallDate(details));
 
-        // Set the call count and date.
-        setCallCountAndDate(views, callCount, dateText, highlightColor);
+        // Create a comma separated list from the call type or location, and call date.
+        // TextUtils.join ensures a locale appropriate list separator is used.
+        return TextUtils.join((List<CharSequence>)mDescriptionItems);
+    }
 
+    /**
+     * For a call, if there is an associated contact for the caller, return the known call type
+     * (e.g. mobile, home, work).  If there is no associated contact, attempt to use the caller's
+     * location if known.
+     * @param details Call details to use.
+     * @return Type of call (mobile/home) if known, or the location of the caller (if known).
+     */
+    public CharSequence getCallTypeOrLocation(PhoneCallDetails details) {
         CharSequence numberFormattedLabel = null;
         // Only show a label if the number is shown and it is not a SIP address.
         if (!TextUtils.isEmpty(details.number)
-                && !PhoneNumberHelper.isUriNumber(details.number.toString())) {
+                && !PhoneNumberHelper.isUriNumber(details.number.toString())
+                && !mPhoneNumberUtilsWrapper.isVoicemailNumber(details.number)) {
+
             if (details.numberLabel == ContactInfo.GEOCODE_AS_LABEL) {
                 numberFormattedLabel = details.geocode;
             } else {
@@ -112,33 +165,24 @@
             }
         }
 
-        final CharSequence nameText;
-        final CharSequence numberText;
-        final CharSequence labelText;
-        final CharSequence displayNumber =
-            mPhoneNumberHelper.getDisplayNumber(details.number,
+        if (!TextUtils.isEmpty(details.name) && TextUtils.isEmpty(numberFormattedLabel)) {
+            numberFormattedLabel = mPhoneNumberHelper.getDisplayNumber(details.number,
                     details.numberPresentation, details.formattedNumber);
-        if (TextUtils.isEmpty(details.name)) {
-            nameText = displayNumber;
-            if (TextUtils.isEmpty(details.geocode)
-                    || mPhoneNumberUtilsWrapper.isVoicemailNumber(details.number)) {
-                numberText = mResources.getString(R.string.call_log_empty_geocode);
-            } else {
-                numberText = details.geocode;
-            }
-            labelText = numberText;
-            // We have a real phone number as "nameView" so make it always LTR
-            views.nameView.setTextDirection(View.TEXT_DIRECTION_LTR);
-        } else {
-            nameText = details.name;
-            numberText = displayNumber;
-            labelText = TextUtils.isEmpty(numberFormattedLabel) ? numberText :
-                    numberFormattedLabel;
         }
+        return numberFormattedLabel;
+    }
 
-        views.nameView.setText(nameText);
-        views.labelView.setText(labelText);
-        views.labelView.setVisibility(TextUtils.isEmpty(labelText) ? View.GONE : View.VISIBLE);
+    /**
+     * Get the call date/time of the call, relative to the current time.
+     * e.g. 3 minutes ago
+     * @param details Call details to use.
+     * @return String representing when the call occurred.
+     */
+    public CharSequence getCallDate(PhoneCallDetails details) {
+        return DateUtils.getRelativeTimeSpanString(details.date,
+                getCurrentTimeMillis(),
+                DateUtils.MINUTE_IN_MILLIS,
+                DateUtils.FORMAT_ABBREV_RELATIVE);
     }
 
     /** Sets the text of the header view for the details page of a phone call. */
@@ -176,7 +220,7 @@
 
     /** Sets the call count and date. */
     private void setCallCountAndDate(PhoneCallDetailsViews views, Integer callCount,
-            CharSequence dateText, Integer highlightColor) {
+            CharSequence dateText) {
         // Combine the count (if present) and the date.
         final CharSequence text;
         if (callCount != null) {
@@ -186,23 +230,6 @@
             text = dateText;
         }
 
-        // Apply the highlight color if present.
-        final CharSequence formattedText;
-        if (highlightColor != null) {
-            formattedText = addBoldAndColor(text, highlightColor);
-        } else {
-            formattedText = text;
-        }
-
-        views.callTypeAndDate.setText(formattedText);
-    }
-
-    /** Creates a SpannableString for the given text which is bold and in the given color. */
-    private CharSequence addBoldAndColor(CharSequence text, int color) {
-        int flags = Spanned.SPAN_INCLUSIVE_INCLUSIVE;
-        SpannableString result = new SpannableString(text);
-        result.setSpan(new StyleSpan(Typeface.BOLD), 0, text.length(), flags);
-        result.setSpan(new ForegroundColorSpan(color), 0, text.length(), flags);
-        return result;
+        views.callLocationAndDate.setText(text);
     }
 }
diff --git a/src/com/android/dialer/PhoneCallDetailsViews.java b/src/com/android/dialer/PhoneCallDetailsViews.java
index 4e48210..30023ea 100644
--- a/src/com/android/dialer/PhoneCallDetailsViews.java
+++ b/src/com/android/dialer/PhoneCallDetailsViews.java
@@ -29,16 +29,17 @@
     public final TextView nameView;
     public final View callTypeView;
     public final CallTypeIconsView callTypeIcons;
-    public final TextView callTypeAndDate;
-    public final TextView labelView;
+    public final TextView callLocationAndDate;
+    public final TextView voicemailTranscriptionView;
 
     private PhoneCallDetailsViews(TextView nameView, View callTypeView,
-            CallTypeIconsView callTypeIcons, TextView callTypeAndDate, TextView labelView) {
+            CallTypeIconsView callTypeIcons, TextView callLocationAndDate,
+            TextView voicemailTranscriptionView) {
         this.nameView = nameView;
         this.callTypeView = callTypeView;
         this.callTypeIcons = callTypeIcons;
-        this.callTypeAndDate = callTypeAndDate;
-        this.labelView = labelView;
+        this.callLocationAndDate = callLocationAndDate;
+        this.voicemailTranscriptionView = voicemailTranscriptionView;
     }
 
     /**
@@ -52,8 +53,8 @@
         return new PhoneCallDetailsViews((TextView) view.findViewById(R.id.name),
                 view.findViewById(R.id.call_type),
                 (CallTypeIconsView) view.findViewById(R.id.call_type_icons),
-                (TextView) view.findViewById(R.id.call_count_and_date),
-                (TextView) view.findViewById(R.id.label));
+                (TextView) view.findViewById(R.id.call_location_and_date),
+                (TextView) view.findViewById(R.id.voicemail_transcription));
     }
 
     public static PhoneCallDetailsViews createForTest(Context context) {
diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java
index fdef263..9d622aa 100644
--- a/src/com/android/dialer/SpecialCharSequenceMgr.java
+++ b/src/com/android/dialer/SpecialCharSequenceMgr.java
@@ -30,6 +30,7 @@
 import android.os.Looper;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.provider.Settings;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.util.Log;
@@ -39,8 +40,6 @@
 
 import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
 import com.android.internal.telephony.ITelephony;
-import com.android.internal.telephony.TelephonyCapabilities;
-import com.android.internal.telephony.TelephonyIntents;
 
 /**
  * Helper class to listen for some magic character sequences
@@ -57,6 +56,7 @@
 public class SpecialCharSequenceMgr {
     private static final String TAG = "SpecialCharSequenceMgr";
 
+    private static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
     private static final String MMI_IMEI_DISPLAY = "*#06#";
     private static final String MMI_REGULATORY_INFO_DISPLAY = "*#07#";
 
@@ -136,7 +136,7 @@
         // Secret codes are in the form *#*#<code>#*#*
         int len = input.length();
         if (len > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) {
-            Intent intent = new Intent(TelephonyIntents.SECRET_CODE_ACTION,
+            final Intent intent = new Intent(SECRET_CODE_ACTION,
                     Uri.parse("android_secret_code://" + input.substring(4, len - 4)));
             context.sendBroadcast(intent);
             return true;
@@ -158,7 +158,7 @@
         TelephonyManager telephonyManager =
                 (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
         if (telephonyManager == null
-                || !TelephonyCapabilities.supportsAdn(telephonyManager.getCurrentPhoneType())) {
+                || telephonyManager.getPhoneType() != TelephonyManager.PHONE_TYPE_GSM) {
             return false;
         }
 
@@ -243,7 +243,7 @@
         TelephonyManager telephonyManager =
                 (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
         if (telephonyManager != null && input.equals(MMI_IMEI_DISPLAY)) {
-            int phoneType = telephonyManager.getCurrentPhoneType();
+            int phoneType = telephonyManager.getPhoneType();
             if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
                 showIMEIPanel(context, useSystemWindow, telephonyManager);
                 return true;
@@ -259,10 +259,7 @@
     private static boolean handleRegulatoryInfoDisplay(Context context, String input) {
         if (input.equals(MMI_REGULATORY_INFO_DISPLAY)) {
             Log.d(TAG, "handleRegulatoryInfoDisplay() sending intent to settings app");
-            ComponentName regInfoDisplayActivity = new ComponentName(
-                    "com.android.settings", "com.android.settings.RegulatoryInfoDisplayActivity");
-            Intent showRegInfoIntent = new Intent("android.settings.SHOW_REGULATORY_INFO");
-            showRegInfoIntent.setComponent(regInfoDisplayActivity);
+            Intent showRegInfoIntent = new Intent(Settings.ACTION_SHOW_REGULATORY_INFO);
             try {
                 context.startActivity(showRegInfoIntent);
             } catch (ActivityNotFoundException e) {
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index 42318f0..13d5f03 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -19,38 +19,41 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.app.ActionBar.Tab;
-import android.app.ActionBar.TabListener;
-import android.app.FragmentTransaction;
 import android.content.Intent;
+import android.database.Cursor;
 import android.os.Bundle;
 import android.provider.CallLog.Calls;
 import android.support.v13.app.FragmentPagerAdapter;
-import android.support.v4.view.PagerTabStrip;
 import android.support.v4.view.ViewPager;
-import android.support.v4.view.ViewPager.OnPageChangeListener;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.style.TypefaceSpan;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogFragment;
+import com.android.dialer.list.ViewPagerTabs;
+import com.android.dialer.voicemail.VoicemailStatusHelper;
+import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 
-public class CallLogActivity extends Activity {
-
+public class CallLogActivity extends Activity implements CallLogQueryHandler.Listener {
     private ViewPager mViewPager;
+    private ViewPagerTabs mViewPagerTabs;
     private ViewPagerAdapter mViewPagerAdapter;
     private CallLogFragment mAllCallsFragment;
     private CallLogFragment mMissedCallsFragment;
+    private CallLogFragment mVoicemailFragment;
+    private VoicemailStatusHelper mVoicemailStatusHelper;
+
+    private String[] mTabTitles;
 
     private static final int TAB_INDEX_ALL = 0;
     private static final int TAB_INDEX_MISSED = 1;
+    private static final int TAB_INDEX_VOICEMAIL = 2;
 
-    private static final int TAB_INDEX_COUNT = 2;
+    private static final int TAB_INDEX_COUNT_DEFAULT = 2;
+    private static final int TAB_INDEX_COUNT_WITH_VOICEMAIL = 3;
+
+    private boolean mHasActiveVoicemailProvider;
 
     public class ViewPagerAdapter extends FragmentPagerAdapter {
         public ViewPagerAdapter(FragmentManager fm) {
@@ -66,81 +69,61 @@
                 case TAB_INDEX_MISSED:
                     mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
                     return mMissedCallsFragment;
+                case TAB_INDEX_VOICEMAIL:
+                    mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
+                    return mVoicemailFragment;
             }
             throw new IllegalStateException("No fragment at position " + position);
         }
 
         @Override
+        public CharSequence getPageTitle(int position) {
+            return mTabTitles[position];
+        }
+
+        @Override
         public int getCount() {
-            return TAB_INDEX_COUNT;
+            return mHasActiveVoicemailProvider ? TAB_INDEX_COUNT_WITH_VOICEMAIL :
+                    TAB_INDEX_COUNT_DEFAULT;
         }
     }
 
-    private final TabListener mTabListener = new TabListener() {
-        @Override
-        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
-        }
-
-        @Override
-        public void onTabSelected(Tab tab, FragmentTransaction ft) {
-            if (mViewPager != null && mViewPager.getCurrentItem() != tab.getPosition()) {
-                mViewPager.setCurrentItem(tab.getPosition(), true);
-            }
-        }
-
-        @Override
-        public void onTabReselected(Tab tab, FragmentTransaction ft) {
-        }
-    };
-
-    private final OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
-
-        @Override
-        public void onPageScrolled(
-                int position, float positionOffset, int positionOffsetPixels) {}
-
-        @Override
-        public void onPageSelected(int position) {
-            final ActionBar actionBar = getActionBar();
-            actionBar.selectTab(actionBar.getTabAt(position));
-        }
-
-        @Override
-        public void onPageScrollStateChanged(int arg0) {
-        }
-    };
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         setContentView(R.layout.call_log_activity);
+        getWindow().setBackgroundDrawable(null);
 
         final ActionBar actionBar = getActionBar();
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
         actionBar.setDisplayShowHomeEnabled(true);
         actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setDisplayShowTitleEnabled(true);
 
-        final Tab allTab = actionBar.newTab();
-        final String allTitle = getString(R.string.call_log_all_title);
-        allTab.setContentDescription(allTitle);
-        allTab.setText(allTitle);
-        allTab.setTabListener(mTabListener);
-        actionBar.addTab(allTab);
-
-        final Tab missedTab = actionBar.newTab();
-        final String missedTitle = getString(R.string.call_log_missed_title);
-        missedTab.setContentDescription(missedTitle);
-        missedTab.setText(missedTitle);
-        missedTab.setTabListener(mTabListener);
-        actionBar.addTab(missedTab);
+        mTabTitles = new String[TAB_INDEX_COUNT_WITH_VOICEMAIL];
+        mTabTitles[0] = getString(R.string.call_log_all_title);
+        mTabTitles[1] = getString(R.string.call_log_missed_title);
+        mTabTitles[2] = getString(R.string.call_log_voicemail_title);
 
         mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
+
         mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
         mViewPager.setAdapter(mViewPagerAdapter);
-        mViewPager.setOnPageChangeListener(mOnPageChangeListener);
-        mViewPager.setOffscreenPageLimit(1);
+        mViewPager.setOffscreenPageLimit(2);
+
+        mViewPagerTabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
+        mViewPagerTabs.setViewPager(mViewPager);
+        mViewPager.setOnPageChangeListener(mViewPagerTabs);
+
+        mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        CallLogQueryHandler callLogQueryHandler =
+                new CallLogQueryHandler(this.getContentResolver(), this);
+        callLogQueryHandler.fetchVoicemailStatus();
     }
 
     @Override
@@ -176,4 +159,24 @@
         }
         return super.onOptionsItemSelected(item);
     }
-}
+
+    @Override
+    public void onVoicemailStatusFetched(Cursor statusCursor) {
+        if (this.isFinishing()) {
+            return;
+        }
+
+        // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed.
+        int activeSources = mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor);
+        if (activeSources > 0 != mHasActiveVoicemailProvider) {
+            mHasActiveVoicemailProvider = activeSources > 0;
+            mViewPagerAdapter.notifyDataSetChanged();
+            mViewPagerTabs.setViewPager(mViewPager);
+        }
+    }
+
+    @Override
+    public void onCallsFetched(Cursor statusCursor) {
+        // Do nothing. Implemented to satisfy CallLogQueryHandler.Listener.
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index a668196..0aca913 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -22,6 +22,7 @@
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.Uri;
+import android.os.AsyncTask;
 import android.os.Handler;
 import android.os.Message;
 import android.provider.CallLog.Calls;
@@ -34,17 +35,23 @@
 import android.view.ViewTreeObserver;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.common.widget.GroupingListAdapter;
 import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.PhoneCallDetailsHelper;
 import com.android.dialer.R;
+import com.android.dialer.util.AsyncTaskExecutor;
+import com.android.dialer.util.AsyncTaskExecutors;
 import com.android.dialer.util.ExpirableCache;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
 
+import java.util.HashMap;
 import java.util.LinkedList;
 
 /**
@@ -53,6 +60,21 @@
 public class CallLogAdapter extends GroupingListAdapter
         implements ViewTreeObserver.OnPreDrawListener, CallLogGroupBuilder.GroupCreator {
 
+
+    /** The enumeration of {@link android.os.AsyncTask} objects used in this class. */
+    public enum Tasks {
+        REMOVE_CALL_LOG_ENTRIES,
+    }
+
+    /** Interface used to inform a parent UI element that a list item has been expanded. */
+    public interface CallItemExpandedListener {
+        /**
+         * @param view The {@link CallLogListItemView} that represents the item that was clicked
+         *         on.
+         */
+        public void onItemExpanded(CallLogListItemView view);
+    }
+
     /** Interface used to initiate a refresh of the content. */
     public interface CallFetcher {
         public void fetchCalls();
@@ -100,6 +122,9 @@
     private final CallFetcher mCallFetcher;
     private ViewTreeObserver mViewTreeObserver = null;
 
+    /** Aynchronous task executor, lazy instantiated as needed. */
+    private AsyncTaskExecutor mAsyncTaskExecutor;
+
     /**
      * A cache of the contact details for the phone numbers in the call log.
      * <p>
@@ -110,6 +135,9 @@
      */
     private ExpirableCache<NumberWithCountryIso, ContactInfo> mContactInfoCache;
 
+    /** Hashmap, keyed by call Id, used to track which call log entries have been expanded or not */
+    private HashMap<Long,Boolean> mIsExpanded = new HashMap<Long,Boolean>();
+
     /**
      * A request for contact details for the given number.
      */
@@ -180,13 +208,11 @@
     /** Helper to group call log entries. */
     private final CallLogGroupBuilder mCallLogGroupBuilder;
 
+    private CallItemExpandedListener mCallItemExpandedListener;
+
     /** Can be set to true by tests to disable processing of requests. */
     private volatile boolean mRequestProcessingDisabled = false;
 
-    /** True if CallLogAdapter is created from the PhoneFavoriteFragment, where the primary
-     * action should be set to call a number instead of opening the detail page. */
-    private boolean mUseCallAsPrimaryAction = false;
-
     private boolean mIsCallLog = true;
     private int mNumMissedCalls = 0;
     private int mNumMissedCallsShown = 0;
@@ -206,6 +232,47 @@
         }
     };
 
+    /**
+     * Click listener for the delete from call log button.  Removes the current call log
+     * entry and its associated calls from the call log.
+     */
+    private final View.OnClickListener mDeleteListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            // Retrieve the views from the call log view.
+            final CallLogListItemViews views =
+                    (CallLogListItemViews)
+                            ((View)v.getParent().getParent().getParent().getParent()).getTag();
+
+            deleteCalls(views.callIds);
+            notifyDataSetChanged();
+        }
+    };
+
+    /**
+     * The onClickListener used to expand or collapse the action buttons section for a call log
+     * entry.
+     */
+    private final View.OnClickListener mExpandCollapseListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            final CallLogListItemView callLogItem = (CallLogListItemView) v.getParent().getParent();
+            final CallLogListItemViews views = (CallLogListItemViews) callLogItem.getTag();
+
+            // Hide or show the actions view.
+            boolean expanded = toggleExpansion(views.rowId);
+
+            // Trigger loading of the viewstub and visual expand or collapse.
+            expandOrCollapseActions(callLogItem, expanded);
+
+            if (mCallItemExpandedListener != null) {
+                mCallItemExpandedListener.onItemExpanded(callLogItem);
+            }
+
+            notifyDataSetChanged();
+        }
+    };
+
     private void startActivityForAction(View view) {
         final IntentProvider intentProvider = (IntentProvider) view.getTag();
         if (intentProvider != null) {
@@ -246,15 +313,15 @@
     };
 
     public CallLogAdapter(Context context, CallFetcher callFetcher,
-            ContactInfoHelper contactInfoHelper, boolean useCallAsPrimaryAction,
+            ContactInfoHelper contactInfoHelper, CallItemExpandedListener callItemExpandedListener,
             boolean isCallLog) {
         super(context);
 
         mContext = context;
         mCallFetcher = callFetcher;
         mContactInfoHelper = contactInfoHelper;
-        mUseCallAsPrimaryAction = useCallAsPrimaryAction;
         mIsCallLog = isCallLog;
+        mCallItemExpandedListener = callItemExpandedListener;
 
         mContactInfoCache = ExpirableCache.create(CONTACT_INFO_CACHE_SIZE);
         mRequests = new LinkedList<ContactInfoRequest>();
@@ -507,8 +574,6 @@
     private void findAndCacheViews(View view) {
         // Get the views to bind to.
         CallLogListItemViews views = CallLogListItemViews.fromView(view);
-        views.primaryActionView.setOnClickListener(mActionListener);
-        views.secondaryActionView.setOnClickListener(mActionListener);
         view.setTag(views);
     }
 
@@ -532,35 +597,50 @@
         final long duration = c.getLong(CallLogQuery.DURATION);
         final int callType = c.getInt(CallLogQuery.CALL_TYPE);
         final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
+        final long rowId = c.getLong(CallLogQuery.ID);
+        views.rowId = rowId;
+
+        // Store some values used when the actions ViewStub is inflated on expansion of the actions
+        // section.
+        views.number = number;
+        views.numberPresentation = numberPresentation;
+        views.callType = callType;
+        views.voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
+        // Stash away the Ids of the calls so that we can support deleting a row in the call log.
+        views.callIds = getCallIds(c, rowId, count);
 
         final ContactInfo cachedContactInfo = getContactInfoFromCallLog(c);
 
-        if (!mUseCallAsPrimaryAction) {
-            // Sets the primary action to open call detail page.
-            views.primaryActionView.setTag(
-                    IntentProvider.getCallDetailIntentProvider(
-                            getCursor(), c.getPosition(), c.getLong(CallLogQuery.ID), count));
-        } else if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)) {
-            // Sets the primary action to call the number.
-            views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number));
+        final boolean isVoicemailNumber =
+                PhoneNumberUtilsWrapper.INSTANCE.isVoicemailNumber(number);
+
+        // Where binding and not in the call log, use default behaviour of invoking a call when
+        // tapping the primary view.
+        if (!mIsCallLog) {
+            views.primaryActionView.setOnClickListener(this.mActionListener);
+
+            // Set return call intent, otherwise null.
+            if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)) {
+                // Sets the primary action to call the number.
+                views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number));
+            } else {
+                // Number is not callable, so hide button.
+                views.primaryActionView.setTag(null);
+            }
         } else {
-            views.primaryActionView.setTag(null);
+            // In the call log, expand/collapse an actions section for the call log entry when
+            // the primary view is tapped.
+
+            // TODO: This needs to be changed to do the proper QP open/close animation.
+            views.primaryActionView.setOnClickListener(this.mExpandCollapseListener);
+
+            // Note: Binding of the action buttons is done as required in configureActionViews
+            // when the user expands the actions ViewStub.
         }
 
-        // Store away the voicemail information so we can play it directly.
-        if (callType == Calls.VOICEMAIL_TYPE) {
-            String voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
-            final long rowId = c.getLong(CallLogQuery.ID);
-            views.secondaryActionView.setTag(
-                    IntentProvider.getPlayVoicemailIntentProvider(rowId, voicemailUri));
-        } else if (!TextUtils.isEmpty(number)) {
-            // Store away the number so we can call it directly if you click on the call icon.
-            views.secondaryActionView.setTag(
-                    IntentProvider.getReturnCallIntentProvider(number));
-        } else {
-            // No action enabled.
-            views.secondaryActionView.setTag(null);
-        }
+        // Restore expansion state of the row on rebind.  Inflate the actions ViewStub if required,
+        // and set its visibility state accordingly.
+        expandOrCollapseActions(view, isExpanded(rowId));
 
         // Lookup contacts with this number
         NumberWithCountryIso numberCountryIso = new NumberWithCountryIso(number, countryIso);
@@ -568,7 +648,7 @@
                 mContactInfoCache.getCachedValue(numberCountryIso);
         ContactInfo info = cachedInfo == null ? null : cachedInfo.getValue();
         if (!PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)
-                || new PhoneNumberUtilsWrapper().isVoicemailNumber(number)) {
+                || isVoicemailNumber) {
             // If this is a number that cannot be dialed, there is no point in looking up a contact
             // for it.
             info = ContactInfo.EMPTY;
@@ -608,6 +688,7 @@
         CharSequence formattedNumber = info.formattedNumber;
         final int[] callTypes = getCallTypes(c, count);
         final String geocode = c.getString(CallLogQuery.GEOCODED_LOCATION);
+        final int sourceType = info.sourceType;
         final PhoneCallDetails details;
 
         if (TextUtils.isEmpty(name)) {
@@ -617,24 +698,36 @@
         } else {
             details = new PhoneCallDetails(number, numberPresentation,
                     formattedNumber, countryIso, geocode, callTypes, date,
-                    duration, name, ntype, label, lookupUri, photoUri);
+                    duration, name, ntype, label, lookupUri, photoUri, sourceType);
         }
 
-        final boolean isNew = c.getInt(CallLogQuery.IS_READ) == 0;
-        // New items also use the highlighted version of the text.
-        final boolean isHighlighted = isNew;
-        mCallLogViewsHelper.setPhoneCallDetails(views, details, isHighlighted,
-                mUseCallAsPrimaryAction);
+        mCallLogViewsHelper.setPhoneCallDetails(views, details);
+
+        int contactType = ContactPhotoManager.TYPE_DEFAULT;
+
+        if (isVoicemailNumber) {
+            contactType = ContactPhotoManager.TYPE_VOICEMAIL;
+        } else if (mContactInfoHelper.isBusiness(info.sourceType)) {
+            contactType = ContactPhotoManager.TYPE_BUSINESS;
+        }
+
+        String lookupKey = lookupUri == null ? null
+                : ContactInfoHelper.getLookupKeyFromUri(lookupUri);
+
+        String nameForDefaultImage = null;
+        if (TextUtils.isEmpty(name)) {
+            nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(details.number,
+                    details.numberPresentation, details.formattedNumber).toString();
+        } else {
+            nameForDefaultImage = name;
+        }
 
         if (photoId == 0 && photoUri != null) {
-            setPhoto(views, photoUri, lookupUri);
+            setPhoto(views, photoUri, lookupUri, nameForDefaultImage, lookupKey, contactType);
         } else {
-            setPhoto(views, photoId, lookupUri);
+            setPhoto(views, photoId, lookupUri, nameForDefaultImage, lookupKey, contactType);
         }
 
-        views.quickContactView.setContentDescription(views.phoneCallDetailsViews.nameView.
-                getText());
-
         // Listen for the first draw
         if (mViewTreeObserver == null) {
             mViewTreeObserver = view.getViewTreeObserver();
@@ -644,6 +737,140 @@
         bindBadge(view, info, details, callType);
     }
 
+    /**
+     * Determines if a call log row with the given Id is expanded to show the action buttons or
+     * not. If the row Id is not yet tracked, add a new entry assuming the row is collapsed.
+     * @param rowId
+     * @return
+     */
+    private boolean isExpanded(long rowId) {
+        if (!mIsExpanded.containsKey(rowId)) {
+            mIsExpanded.put(rowId, false);
+        }
+
+        return mIsExpanded.get(rowId);
+    }
+
+    /**
+     * Toggles the expansion state tracked for the call log row identified by rowId and returns
+     * the new expansion state.
+     *
+     * @param rowId The row Id associated with the call log row to expand/collapse.
+     * @return True where the row is now expanded, false otherwise.
+     */
+    private boolean toggleExpansion(long rowId) {
+        boolean isExpanded = isExpanded(rowId);
+
+        mIsExpanded.put(rowId, !isExpanded);
+        return !isExpanded;
+    }
+
+    /**
+     * Expands or collapses the view containing the CALLBACK, VOICEMAIL and DELETE action buttons.
+     *
+     * @param callLogItem The call log entry parent view.
+     * @param isExpanded The new expansion state of the view.
+     */
+    private void expandOrCollapseActions(View callLogItem, boolean isExpanded) {
+        final CallLogListItemViews views = (CallLogListItemViews)callLogItem.getTag();
+
+        if (isExpanded) {
+            // Inflate the view stub if necessary, and wire up the event handlers.
+            inflateActionViewStub(callLogItem);
+
+            views.actionsView.setVisibility(View.VISIBLE);
+            callLogItem.setBackgroundColor(
+                    callLogItem.getResources().getColor(R.color.background_dialer_light));
+            callLogItem.setElevation(
+                    callLogItem.getResources().getDimension(R.dimen.call_log_expanded_elevation));
+
+            // Attempt to give accessibility focus to one of the action buttons.
+            // This ensures that a user realizes the expansion occurred.
+            // NOTE(tgunn): requestAccessibilityFocus returns true if the requested
+            // focus was successful.  The first successful focus will satisfy the OR
+            // block and block further attempts to set focus.
+            boolean focused = views.callBackButtonView.requestAccessibilityFocus() ||
+                    views.voicemailButtonView.requestAccessibilityFocus() ||
+                    views.deleteButtonView.requestAccessibilityFocus();
+        } else {
+            // When recycling a view, it is possible the actionsView ViewStub was previously
+            // inflated so we should hide it in this case.
+            if (views.actionsView != null ) {
+                views.actionsView.setVisibility(View.GONE);
+            }
+
+            callLogItem.setBackgroundColor(
+                    callLogItem.getResources().getColor(R.color.background_dialer_list_items));
+            callLogItem.setElevation(0);
+        }
+    }
+
+    /**
+     * Configures the action buttons in the expandable actions ViewStub.  The ViewStub is not
+     * inflated during initial binding, so click handlers, tags and accessibility text must be set
+     * here, if necessary.
+     *
+     * @param callLogItem The call log list item view.
+     */
+    private void inflateActionViewStub(View callLogItem) {
+        final CallLogListItemViews views = (CallLogListItemViews)callLogItem.getTag();
+
+        ViewStub stub = (ViewStub)callLogItem.findViewById(R.id.call_log_entry_actions_stub);
+        if (stub != null) {
+            views.actionsView = stub.inflate();
+        }
+
+        if (views.callBackButtonView == null) {
+            views.callBackButtonView = (TextView)views.actionsView.findViewById(R.id.call_back_action);
+        }
+
+        if (views.voicemailButtonView == null) {
+            views.voicemailButtonView = (TextView)views.actionsView.findViewById(R.id.voicemail_action);
+        }
+
+        if ( views.deleteButtonView == null) {
+            views.deleteButtonView = (TextView)views.actionsView.findViewById(R.id.delete_action);
+        }
+
+        bindActionButtons(views);
+    }
+
+    /***
+     * Binds click handlers and intents to the voicemail, delete and callback action buttons.
+     *
+     * @param views  The call log item views.
+     */
+    private void bindActionButtons(CallLogListItemViews views) {
+        // Set return call intent, otherwise null.
+        if (PhoneNumberUtilsWrapper.canPlaceCallsTo(views.number, views.numberPresentation)) {
+            // Sets the primary action to call the number.
+            views.callBackButtonView.setTag(
+                    IntentProvider.getReturnCallIntentProvider(views.number));
+            views.callBackButtonView.setVisibility(View.VISIBLE);
+            views.callBackButtonView.setOnClickListener(mActionListener);
+        } else {
+            // Number is not callable, so hide button.
+            views.callBackButtonView.setTag(null);
+            views.callBackButtonView.setVisibility(View.GONE);
+        }
+
+        // For voicemail calls, show the "VOICEMAIL" action button; hide otherwise.
+        if (views.callType == Calls.VOICEMAIL_TYPE) {
+            views.voicemailButtonView.setOnClickListener(mActionListener);
+            views.voicemailButtonView.setTag(
+                    IntentProvider.getPlayVoicemailIntentProvider(
+                            views.rowId, views.voicemailUri));
+            views.voicemailButtonView.setVisibility(View.VISIBLE);
+        } else {
+            views.voicemailButtonView.setTag(null);
+            views.voicemailButtonView.setVisibility(View.GONE);
+        }
+
+        views.deleteButtonView.setOnClickListener(this.mDeleteListener);
+
+        mCallLogViewsHelper.setActionContentDescriptions(views);
+    }
+
     protected void bindBadge(View view, ContactInfo info, PhoneCallDetails details, int callType) {
 
         // Do not show badge in call log.
@@ -855,17 +1082,39 @@
         return callTypes;
     }
 
-    private void setPhoto(CallLogListItemViews views, long photoId, Uri contactUri) {
+    private void setPhoto(CallLogListItemViews views, long photoId, Uri contactUri,
+            String displayName, String identifier, int contactType) {
         views.quickContactView.assignContactUri(contactUri);
-        mContactPhotoManager.loadThumbnail(views.quickContactView, photoId, false /* darkTheme */);
+        views.quickContactView.setOverlay(null);
+        DefaultImageRequest request = new DefaultImageRequest(displayName, identifier,
+                contactType, true /* isCircular */);
+        mContactPhotoManager.loadThumbnail(views.quickContactView, photoId, false /* darkTheme */,
+                true /* isCircular */, request);
     }
 
-    private void setPhoto(CallLogListItemViews views, Uri photoUri, Uri contactUri) {
+    private void setPhoto(CallLogListItemViews views, Uri photoUri, Uri contactUri,
+            String displayName, String identifier, int contactType) {
         views.quickContactView.assignContactUri(contactUri);
+        views.quickContactView.setOverlay(null);
+        DefaultImageRequest request = new DefaultImageRequest(displayName, identifier,
+                contactType, true /* isCircular */);
         mContactPhotoManager.loadDirectoryPhoto(views.quickContactView, photoUri,
-                false /* darkTheme */);
+                false /* darkTheme */, true /* isCircular */, request);
     }
 
+    /**
+     * Bind a call log entry view for testing purposes.  Also inflates the action view stub so
+     * unit tests can access the buttons contained within.
+     *
+     * @param view The current call log row.
+     * @param context The current context.
+     * @param cursor The cursor to bind from.
+     */
+    @VisibleForTesting
+    void bindViewForTest(View view, Context context, Cursor cursor) {
+        bindStandAloneView(view, context, cursor);
+        inflateActionViewStub(view);
+    }
 
     /**
      * Sets whether processing of requests for contact details should be enabled.
@@ -927,4 +1176,76 @@
         }
         return number;
     }
+
+    /**
+     * Retrieves the call Ids represented by the current call log row.
+     *
+     * @param cursor Call log cursor to retrieve call Ids from.
+     * @param id Id of the first call of the grouping.
+     * @param groupSize Number of calls associated with the current call log row.
+     * @return Array of call Ids.
+     */
+    private long[] getCallIds(final Cursor cursor, final long id, final int groupSize) {
+        // We want to restore the position in the cursor at the end.
+        int startingPosition = cursor.getPosition();
+        long[] ids = new long[groupSize];
+        // Copy the ids of the rows in the group.
+        for (int index = 0; index < groupSize; ++index) {
+            ids[index] = cursor.getLong(CallLogQuery.ID);
+            cursor.moveToNext();
+        }
+        cursor.moveToPosition(startingPosition);
+        return ids;
+    }
+
+    /**
+     * Retrieves an instance of the asynchronous task executor, creating one if required.
+     * @return The {@link com.android.dialer.util.AsyncTaskExecutor}
+     */
+    private AsyncTaskExecutor getTaskExecutor() {
+        if (mAsyncTaskExecutor == null) {
+            mAsyncTaskExecutor = AsyncTaskExecutors.createAsyncTaskExecutor();
+        }
+        return mAsyncTaskExecutor;
+    }
+
+    /**
+     * Deletes the calls specified in the callIds array, asynchronously.
+     *
+     * @param callIds Ids of calls to be deleted.
+     */
+    private void deleteCalls(long[] callIds) {
+        if (callIds == null) {
+            return;
+        }
+
+        // Build comma separated list of ids to delete.
+        final StringBuilder callIdString = new StringBuilder();
+        for (long callId : callIds) {
+            if (callIdString.length() != 0) {
+                callIdString.append(",");
+            }
+            callIdString.append(callId);
+        }
+
+        // Perform removal of call log entries asynchronously.
+        getTaskExecutor().submit(Tasks.REMOVE_CALL_LOG_ENTRIES,
+                new AsyncTask<Void, Void, Void>() {
+                    @Override
+                    public Void doInBackground(Void... params) {
+                        // Issue delete.
+                        mContext.getContentResolver().delete(Calls.CONTENT_URI_WITH_VOICEMAIL,
+                                Calls._ID + " IN (" + callIdString + ")", null);
+                        return null;
+                    }
+
+                    @Override
+                    public void onPostExecute(Void result) {
+                        // Somewhere went wrong: we're going to bail out and show error to users.
+                        Toast.makeText(mContext, R.string.toast_entry_removed,
+                                Toast.LENGTH_SHORT).show();
+                    }
+                }
+        );
+    }
 }
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 4fb4b0a..2b2d43c 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -16,6 +16,9 @@
 
 package com.android.dialer.calllog;
 
+import android.animation.Animator;
+import android.animation.ValueAnimator;
+import android.animation.Animator.AnimatorListener;
 import android.app.Activity;
 import android.app.KeyguardManager;
 import android.app.ListFragment;
@@ -29,11 +32,15 @@
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.TelephonyManager;
+import android.provider.VoicemailContract.Status;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.TextView;
 
@@ -47,7 +54,6 @@
 import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
 import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 import com.android.dialerbind.ObjectFactory;
-import com.android.internal.telephony.ITelephony;
 
 import java.util.List;
 
@@ -56,7 +62,9 @@
  * (all, missed or voicemails), specify it in the constructor.
  */
 public class CallLogFragment extends ListFragment
-        implements CallLogQueryHandler.Listener, CallLogAdapter.CallFetcher {
+        implements CallLogQueryHandler.Listener,
+        CallLogAdapter.CallFetcher,
+        CallLogAdapter.CallItemExpandedListener {
     private static final String TAG = "CallLogFragment";
 
     /**
@@ -76,14 +84,15 @@
     private TextView mStatusMessageText;
     private TextView mStatusMessageAction;
     private KeyguardManager mKeyguardManager;
+    private View mFooterView;
 
     private boolean mEmptyLoaderRunning;
     private boolean mCallLogFetched;
     private boolean mVoicemailStatusFetched;
 
-    private final Handler mHandler = new Handler();
+    private float mExpandedItemElevation;
 
-    private TelephonyManager mTelephonyManager;
+    private final Handler mHandler = new Handler();
 
     private class CustomContentObserver extends ContentObserver {
         public CustomContentObserver() {
@@ -98,6 +107,7 @@
     // See issue 6363009
     private final ContentObserver mCallLogObserver = new CustomContentObserver();
     private final ContentObserver mContactsObserver = new CustomContentObserver();
+    private final ContentObserver mVoicemailStatusObserver = new CustomContentObserver();
     private boolean mRefreshDataRequired = true;
 
     // Exactly same variable is in Fragment as a package private.
@@ -110,6 +120,10 @@
     // will be used.
     private int mLogLimit = -1;
 
+    // Date limit (in millis since epoch) - when non-zero, only calls which occurred on or after
+    // the date filter are included.  If zero, no date-based filtering occurs.
+    private long mDateLimit = 0;
+
     public CallLogFragment() {
         this(CallLogQueryHandler.CALL_TYPE_ALL, -1);
     }
@@ -124,10 +138,36 @@
         mLogLimit = logLimit;
     }
 
+    /**
+     * Creates a call log fragment, filtering to include only calls of the desired type, occurring
+     * after the specified date.
+     * @param filterType type of calls to include.
+     * @param dateLimit limits results to calls occurring on or after the specified date.
+     */
+    public CallLogFragment(int filterType, long dateLimit) {
+        this(filterType, -1, dateLimit);
+    }
+
+    /**
+     * Creates a call log fragment, filtering to include only calls of the desired type, occurring
+     * after the specified date.  Also provides a means to limit the number of results returned.
+     * @param filterType type of calls to include.
+     * @param logLimit limits the number of results to return.
+     * @param dateLimit limits results to calls occurring on or after the specified date.
+     */
+    public CallLogFragment(int filterType, int logLimit, long dateLimit) {
+        this(filterType, logLimit);
+        mDateLimit = dateLimit;
+    }
+
     @Override
     public void onCreate(Bundle state) {
         super.onCreate(state);
 
+        String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
+        mAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this, new ContactInfoHelper(
+                getActivity(), currentCountryIso), this, true);
+        setListAdapter(mAdapter);
         mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
                 this, mLogLimit);
         mKeyguardManager =
@@ -136,8 +176,12 @@
                 mCallLogObserver);
         getActivity().getContentResolver().registerContentObserver(
                 ContactsContract.Contacts.CONTENT_URI, true, mContactsObserver);
+        getActivity().getContentResolver().registerContentObserver(
+                Status.CONTENT_URI, true, mVoicemailStatusObserver);
         setHasOptionsMenu(true);
-        updateCallList(mCallTypeFilter);
+        updateCallList(mCallTypeFilter, mDateLimit);
+
+        mExpandedItemElevation = getResources().getDimension(R.dimen.call_log_expanded_elevation);
     }
 
     /** Called by the CallLogQueryHandler when the list of calls has been fetched or updated. */
@@ -229,11 +273,8 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         updateEmptyMessage(mCallTypeFilter);
-        String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
-        mAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this, new ContactInfoHelper(
-                getActivity(), currentCountryIso), false, true);
-        setListAdapter(mAdapter);
         getListView().setItemsCanFocus(true);
+        assignFooterViewToListView();
     }
 
     /**
@@ -315,24 +356,25 @@
         mAdapter.changeCursor(null);
         getActivity().getContentResolver().unregisterContentObserver(mCallLogObserver);
         getActivity().getContentResolver().unregisterContentObserver(mContactsObserver);
+        getActivity().getContentResolver().unregisterContentObserver(mVoicemailStatusObserver);
     }
 
     @Override
     public void fetchCalls() {
-        mCallLogQueryHandler.fetchCalls(mCallTypeFilter);
+        mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);
     }
 
     public void startCallsQuery() {
         mAdapter.setLoading(true);
-        mCallLogQueryHandler.fetchCalls(mCallTypeFilter);
+        mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);
     }
 
     private void startVoicemailStatusQuery() {
         mCallLogQueryHandler.fetchVoicemailStatus();
     }
 
-    private void updateCallList(int filterType) {
-        mCallLogQueryHandler.fetchCalls(filterType);
+    private void updateCallList(int filterType, long dateLimit) {
+        mCallLogQueryHandler.fetchCalls(filterType, dateLimit);
     }
 
     private void updateEmptyMessage(int filterType) {
@@ -341,6 +383,9 @@
             case Calls.MISSED_TYPE:
                 message = getString(R.string.recentMissed_empty);
                 break;
+            case Calls.VOICEMAIL_TYPE:
+                message = getString(R.string.recentVoicemails_empty);
+                break;
             case CallLogQueryHandler.CALL_TYPE_ALL:
                 message = getString(R.string.recentCalls_empty);
                 break;
@@ -449,4 +494,94 @@
             CallLogNotificationsHelper.updateVoicemailNotifications(getActivity());
         }
     }
+
+    /**
+     * Assigns a view to be used as a footer view in the call log.
+     *
+     * @param view View to be used as the footer view.
+     */
+    public void setFooterView(View view) {
+        mFooterView = view;
+        // Content view not created yet, defer addition of the footerview to onCreate
+        if (getView() == null) {
+            return;
+        }
+        assignFooterViewToListView();
+    }
+
+    private void assignFooterViewToListView() {
+        if (mFooterView == null) {
+            return;
+        }
+        final ListView listView = getListView();
+        listView.removeFooterView(mFooterView);
+        listView.addFooterView(mFooterView);
+    }
+
+    @Override
+    public void onItemExpanded(final CallLogListItemView view) {
+        final int startingHeight = view.getHeight();
+        final CallLogListItemViews viewHolder = (CallLogListItemViews) view.getTag();
+        final ViewTreeObserver observer = getListView().getViewTreeObserver();
+        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+            @Override
+            public boolean onPreDraw() {
+                // We don't want to continue getting called for every draw.
+                if (observer.isAlive()) {
+                    observer.removeOnPreDrawListener(this);
+                }
+                // Calculate some values to help with the animation.
+                final int endingHeight = view.getHeight();
+                final int distance = Math.abs(endingHeight - startingHeight);
+                final int baseHeight = Math.min(endingHeight, startingHeight);
+                final boolean isExpand = endingHeight > startingHeight;
+
+                // Set the views back to the start state of the animation
+                view.getLayoutParams().height = startingHeight;
+                if (!isExpand) {
+                    viewHolder.actionsView.setVisibility(View.VISIBLE);
+                }
+                view.requestLayout();
+
+                // Set up the animator to animate the expansion.
+                ValueAnimator animator = isExpand ? ValueAnimator.ofFloat(0f, 1f)
+                        : ValueAnimator.ofFloat(1f, 0f);
+
+                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                    @Override
+                    public void onAnimationUpdate(ValueAnimator animator) {
+                        Float value = (Float) animator.getAnimatedValue();
+
+                        // For each value from 0 to 1, animate the various parts of the layout.
+                        view.getLayoutParams().height =
+                                (int) (value * distance + baseHeight);
+                        view.setElevation(mExpandedItemElevation * value);
+                        view.requestLayout();
+                    }
+                });
+                // Set everything to their final values when the animation's done.
+                animator.addListener(new AnimatorListener() {
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        view.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
+                        if (!isExpand) {
+                            viewHolder.actionsView.setVisibility(View.GONE);
+                        }
+                    }
+
+                    @Override
+                    public void onAnimationCancel(Animator animation) {}
+                    @Override
+                    public void onAnimationRepeat(Animator animation) { }
+                    @Override
+                    public void onAnimationStart(Animator animation) { }
+                });
+                animator.start();
+
+                // Return false so this draw does not occur to prevent the final frame from
+                // being drawn for the single frame before the animations start.
+                return false;
+            }
+        });
+    }
 }
diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java
index a38ef01..976726d 100644
--- a/src/com/android/dialer/calllog/CallLogListItemHelper.java
+++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java
@@ -19,7 +19,6 @@
 import android.content.res.Resources;
 import android.provider.CallLog.Calls;
 import android.text.TextUtils;
-import android.view.View;
 
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.PhoneCallDetailsHelper;
@@ -54,38 +53,156 @@
      *
      * @param views the views to populate
      * @param details the details of a phone call needed to fill in the data
-     * @param isHighlighted whether to use the highlight text for the call
      */
-    public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details,
-            boolean isHighlighted, boolean useCallAsPrimaryAction) {
-        mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details,
-                isHighlighted);
-        boolean canCall = PhoneNumberUtilsWrapper.canPlaceCallsTo(details.number,
-                details.numberPresentation);
-        boolean canPlay = details.callTypes[0] == Calls.VOICEMAIL_TYPE;
+    public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details) {
+        mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details);
 
-        if (canPlay) {
-            // Playback action takes preference.
-            configurePlaySecondaryAction(views, isHighlighted);
-        } else if (canCall && !useCallAsPrimaryAction) {
-            // Call is the secondary action.
-            configureCallSecondaryAction(views, details);
+        // Set the accessibility text for the contact badge
+        views.quickContactView.setContentDescription(getContactBadgeDescription(details));
+
+        // Set the primary action accessibility description
+        views.primaryActionView.setContentDescription(getCallDescription(details));
+
+        // Cache name or number of caller.  Used when setting the content descriptions of buttons
+        // when the actions ViewStub is inflated.
+        views.nameOrNumber = this.getNameOrNumber(details);
+    }
+
+    /**
+     * Sets the accessibility descriptions for the action buttons in the action button ViewStub.
+     *
+     * @param views The views associated with the current call log entry.
+     */
+    public void setActionContentDescriptions(CallLogListItemViews views) {
+        views.callBackButtonView.setContentDescription(
+                mResources.getString(R.string.description_call_back_action, views.nameOrNumber));
+
+        views.voicemailButtonView.setContentDescription(
+                mResources.getString(R.string.description_voicemail_action, views.nameOrNumber));
+
+        views.deleteButtonView.setContentDescription(
+                mResources.getString(R.string.description_delete_action, views.nameOrNumber));
+    }
+
+    /**
+     * Returns the accessibility description for the contact badge for a call log entry.
+     *
+     * @param details Details of call.
+     * @return Accessibility description.
+     */
+    private CharSequence getContactBadgeDescription(PhoneCallDetails details) {
+        return mResources.getString(R.string.description_contact_details, getNameOrNumber(details));
+    }
+
+    /**
+     * Returns the accessibility description of the "return call/call" action for a call log
+     * entry.
+     * Accessibility text is a combination of:
+     * {Voicemail Prefix}. {Number of Calls}. {Caller information}.
+     * If most recent call is a voicemail, {Voicemail Prefix} is "New Voicemail.", otherwise "".
+     *
+     * If more than one call for the caller, {Number of Calls} is:
+     * "{number of calls} calls.", otherwise "".
+     *
+     * The {Caller Information} references the most recent call associated with the caller.
+     * For incoming calls:
+     * If missed call:  Missed call from {Name/Number} {Call Type} {Call Time}.
+     * If answered call: Answered call from {Name/Number} {Call Type} {Call Time}.
+     *
+     * For outgoing calls:
+     * If outgoing:  Call to {Name/Number] {Call Type} {Call Time}.
+     *
+     * Where:
+     * {Name/Number} is the name or number of the caller (as shown in call log).
+     * {Call type} is the contact phone number type (eg mobile) or location.
+     * {Call Time} is the time since the last call for the contact occurred.
+     *
+     * Examples:
+     * 3 calls.  New Voicemail.  Missed call from Joe Smith mobile 2 hours ago.
+     * 2 calls.  Answered call from John Doe mobile.  Last called 1 hour ago.
+     * @param details Details of call.
+     * @return Return call action description.
+     */
+    public CharSequence getCallDescription(PhoneCallDetails details) {
+        int lastCallType = getLastCallType(details.callTypes);
+        boolean isVoiceMail = lastCallType == Calls.VOICEMAIL_TYPE;
+
+        // Get the name or number of the caller.
+        final CharSequence nameOrNumber = getNameOrNumber(details);
+
+        // Get the call type or location of the caller; null if not applicable
+        final CharSequence typeOrLocation = mPhoneCallDetailsHelper.getCallTypeOrLocation(details);
+
+        // Get the time/date of the call
+        final CharSequence timeOfCall = mPhoneCallDetailsHelper.getCallDate(details);
+
+        StringBuilder callDescription = new StringBuilder();
+
+        // Prepend the voicemail indication.
+        if (isVoiceMail) {
+            callDescription.append(mResources.getString(R.string.description_new_voicemail));
+        }
+
+        // Add number of calls if more than one.
+        if (details.callTypes.length > 1) {
+            callDescription.append(mResources.getString(R.string.description_num_calls,
+                    details.callTypes.length));
+        }
+
+        int stringID = getCallDescriptionStringID(details);
+
+        // Use chosen string resource to build up the message.
+        callDescription.append(mResources.getString(stringID,
+                nameOrNumber,
+                // If no type or location can be determined, sub in empty string.
+                typeOrLocation == null ? "" : typeOrLocation,
+                timeOfCall));
+
+        return callDescription;
+    }
+
+    /**
+     * Determine the appropriate string ID to describe a call for accessibility purposes.
+     *
+     * @param details Call details.
+     * @return String resource ID to use.
+     */
+    public int getCallDescriptionStringID(PhoneCallDetails details) {
+        int lastCallType = getLastCallType(details.callTypes);
+        int stringID;
+
+        if (lastCallType == Calls.VOICEMAIL_TYPE || lastCallType == Calls.MISSED_TYPE) {
+            //Message: Missed call from <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
+            stringID = R.string.description_incoming_missed_call;
+        } else if (lastCallType == Calls.INCOMING_TYPE) {
+            //Message: Answered call from <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
+            stringID = R.string.description_incoming_answered_call;
         } else {
-            // No action available.
-            views.secondaryActionView.setVisibility(View.GONE);
+            //Message: Call to <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
+            stringID = R.string.description_outgoing_call;
+        }
+        return stringID;
+    }
+
+    /**
+     * Determine the call type for the most recent call.
+     * @param callTypes Call types to check.
+     * @return Call type.
+     */
+    private int getLastCallType(int[] callTypes) {
+        if (callTypes.length > 0) {
+            return callTypes[0];
+        } else {
+            return Calls.MISSED_TYPE;
         }
     }
 
-    /** Sets the secondary action to correspond to the call button. */
-    private void configureCallSecondaryAction(CallLogListItemViews views,
-            PhoneCallDetails details) {
-        views.secondaryActionView.setVisibility(View.VISIBLE);
-        views.secondaryActionView.setImageResource(R.drawable.ic_phone_dk);
-        views.secondaryActionView.setContentDescription(getCallActionDescription(details));
-    }
-
-    /** Returns the description used by the call action for this phone call. */
-    private CharSequence getCallActionDescription(PhoneCallDetails details) {
+    /**
+     * Return the name or number of the caller specified by the details.
+     * @param details Call details
+     * @return the name (if known) of the caller, otherwise the formatted number.
+     */
+    private CharSequence getNameOrNumber(PhoneCallDetails details) {
         final CharSequence recipient;
         if (!TextUtils.isEmpty(details.name)) {
             recipient = details.name;
@@ -93,15 +210,6 @@
             recipient = mPhoneNumberHelper.getDisplayNumber(
                     details.number, details.numberPresentation, details.formattedNumber);
         }
-        return mResources.getString(R.string.description_call, recipient);
-    }
-
-    /** Sets the secondary action to correspond to the play button. */
-    private void configurePlaySecondaryAction(CallLogListItemViews views, boolean isHighlighted) {
-        views.secondaryActionView.setVisibility(View.VISIBLE);
-        views.secondaryActionView.setImageResource(
-                isHighlighted ? R.drawable.ic_play_active_holo_dark : R.drawable.ic_play_holo_light);
-        views.secondaryActionView.setContentDescription(
-                mResources.getString(R.string.description_call_log_play_button));
+        return recipient;
     }
 }
diff --git a/src/com/android/dialer/calllog/CallLogListItemView.java b/src/com/android/dialer/calllog/CallLogListItemView.java
index 113b02a..b8990f5 100644
--- a/src/com/android/dialer/calllog/CallLogListItemView.java
+++ b/src/com/android/dialer/calllog/CallLogListItemView.java
@@ -35,12 +35,4 @@
     public CallLogListItemView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
     }
-
-    @Override
-    public void requestLayout() {
-        // We will assume that once measured this will not need to resize
-        // itself, so there is no need to pass the layout request to the parent
-        // view (ListView).
-        forceLayout();
-    }
 }
diff --git a/src/com/android/dialer/calllog/CallLogListItemViews.java b/src/com/android/dialer/calllog/CallLogListItemViews.java
index ed6218f..333769d 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViews.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViews.java
@@ -34,19 +34,67 @@
     public final QuickContactBadge quickContactView;
     /** The primary action view of the entry. */
     public final View primaryActionView;
-    /** The secondary action button on the entry. */
-    public final ImageView secondaryActionView;
     /** The details of the phone call. */
     public final PhoneCallDetailsViews phoneCallDetailsViews;
     /** The text of the header of a section. */
     public final TextView listHeaderTextView;
+    /** The view containing call log item actions.  Null until the ViewStub is inflated. */
+    public View actionsView;
+    /** The "call back" action button - assigned only when the action section is expanded. */
+    public TextView callBackButtonView;
+    /** The "delete" action button - assigned only when the action section is expanded. */
+    public TextView deleteButtonView;
+    /** The "voicemail" action button - assigned only when the action section is expanded. */
+    public TextView voicemailButtonView;
+
+    /**
+     * The row Id for the first call associated with the call log entry.  Used as a key for the
+     * map used to track which call log entries have the action button section expanded.
+     */
+    public long rowId;
+
+    /**
+     * The call Ids for the calls represented by the current call log entry.  Used when the user
+     * deletes a call log entry.
+     */
+    public long[] callIds;
+
+    /**
+     * The callable phone number for the current call log entry.  Cached here as the call back
+     * intent is set only when the actions ViewStub is inflated.
+     */
+    public String number;
+
+    /**
+     * The phone number presentation for the current call log entry.  Cached here as the call back
+     * intent is set only when the actions ViewStub is inflated.
+     */
+    public int numberPresentation;
+
+    /**
+     * The type of call for the current call log entry.  Cached here as the call back
+     * intent is set only when the actions ViewStub is inflated.
+     */
+    public int callType;
+
+    /**
+     * If the call has an associated voicemail message, the URI of the voicemail message for
+     * playback.  Cached here as the voicemail intent is only set when the actions ViewStub is
+     * inflated.
+     */
+    public String voicemailUri;
+
+    /**
+     * The name or number associated with the call.  Cached here for use when setting content
+     * descriptions on buttons in the actions ViewStub when it is inflated.
+     */
+    public CharSequence nameOrNumber;
 
     private CallLogListItemViews(QuickContactBadge quickContactView, View primaryActionView,
-            ImageView secondaryActionView, PhoneCallDetailsViews phoneCallDetailsViews,
+            PhoneCallDetailsViews phoneCallDetailsViews,
             TextView listHeaderTextView) {
         this.quickContactView = quickContactView;
         this.primaryActionView = primaryActionView;
-        this.secondaryActionView = secondaryActionView;
         this.phoneCallDetailsViews = phoneCallDetailsViews;
         this.listHeaderTextView = listHeaderTextView;
     }
@@ -55,18 +103,21 @@
         return new CallLogListItemViews(
                 (QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
                 view.findViewById(R.id.primary_action_view),
-                (ImageView) view.findViewById(R.id.secondary_action_icon),
                 PhoneCallDetailsViews.fromView(view),
                 (TextView) view.findViewById(R.id.call_log_header));
     }
 
     @NeededForTesting
     public static CallLogListItemViews createForTest(Context context) {
-        return new CallLogListItemViews(
+        CallLogListItemViews views = new CallLogListItemViews(
                 new QuickContactBadge(context),
                 new View(context),
-                new ImageView(context),
                 PhoneCallDetailsViews.createForTest(context),
                 new TextView(context));
+        views.callBackButtonView = new TextView(context);
+        views.deleteButtonView = new TextView(context);
+        views.voicemailButtonView = new TextView(context);
+        views.actionsView = new View(context);
+        return views;
     }
 }
diff --git a/src/com/android/dialer/calllog/CallLogNotificationsService.java b/src/com/android/dialer/calllog/CallLogNotificationsService.java
index 3270963..ccd9335 100644
--- a/src/com/android/dialer/calllog/CallLogNotificationsService.java
+++ b/src/com/android/dialer/calllog/CallLogNotificationsService.java
@@ -70,6 +70,10 @@
 
     @Override
     protected void onHandleIntent(Intent intent) {
+        if (intent == null) {
+            Log.d(TAG, "onHandleIntent: could not handle null intent");
+            return;
+        }
         if (ACTION_MARK_NEW_VOICEMAILS_AS_OLD.equals(intent.getAction())) {
             mCallLogQueryHandler.markNewVoicemailsAsOld();
         } else if (ACTION_UPDATE_NOTIFICATIONS.equals(intent.getAction())) {
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index def3c97..64eddec 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -112,6 +112,8 @@
                 Log.w(TAG, "Exception on background worker thread", e);
             } catch (SQLiteDatabaseCorruptException e) {
                 Log.w(TAG, "Exception on background worker thread", e);
+            } catch (IllegalArgumentException e) {
+                Log.w(TAG, "ContactsProvider not present on device", e);
             }
         }
     }
@@ -258,7 +260,7 @@
     }
 
     @Override
-    protected void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor) {
+    protected synchronized void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor) {
         if (token == QUERY_CALLLOG_TOKEN) {
             int requestId = ((Integer) cookie).intValue();
             if (requestId != mCallsRequestId) {
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index a65f2c2..125ba6f 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -17,7 +17,11 @@
 package com.android.dialer.calllog;
 
 import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.provider.CallLog.Calls;
 import android.util.AttributeSet;
@@ -112,19 +116,80 @@
     }
 
     private static class Resources {
+
+        /**
+         * Drawable representing an incoming answered call.
+         */
         public final Drawable incoming;
+
+        /**
+         * Drawable respresenting an outgoing call.
+         */
         public final Drawable outgoing;
+
+        /**
+         * Drawable representing an incoming missed call.
+         */
         public final Drawable missed;
+
+        /**
+         * Drawable representing a voicemail.
+         */
         public final Drawable voicemail;
+
+        /**
+         * The margin to use for icons.
+         */
         public final int iconMargin;
 
+        /**
+         * Configures the call icon drawables.
+         * A single white call arrow which points down and left is used as a basis for all of the
+         * call arrow icons, applying rotation and colors as needed.
+         *
+         * @param context The current context.
+         */
         public Resources(Context context) {
             final android.content.res.Resources r = context.getResources();
-            incoming = r.getDrawable(R.drawable.ic_call_incoming_holo_dark);
-            outgoing = r.getDrawable(R.drawable.ic_call_outgoing_holo_dark);
-            missed = r.getDrawable(R.drawable.ic_call_missed_holo_dark);
+
+            incoming = r.getDrawable(R.drawable.ic_call_arrow);
+            incoming.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
+
+            // Create a rotated instance of the call arrow for outgoing calls.
+            outgoing = getRotatedDrawable(r, R.drawable.ic_call_arrow, 180f);
+            outgoing.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
+
+            // Need to make a copy of the arrow drawable, otherwise the same instance colored
+            // above will be recolored here.
+            missed = r.getDrawable(R.drawable.ic_call_arrow).mutate();
+            missed.setColorFilter(r.getColor(R.color.missed_call), PorterDuff.Mode.MULTIPLY);
+
             voicemail = r.getDrawable(R.drawable.ic_call_voicemail_holo_dark);
             iconMargin = r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
         }
+
+        /**
+         * Retrieves a copy of the specified drawable resource, rotated by a specified angle.
+         *
+         * @param resources The current resources.
+         * @param resourceId The resource ID of the drawable to rotate.
+         * @param angle The angle of rotation.
+         * @return Rotated drawable.
+         */
+        private Drawable getRotatedDrawable(
+                android.content.res.Resources resources, int resourceId, float angle) {
+
+            // Get the original drawable and make a copy which will be rotated.
+            Bitmap original = BitmapFactory.decodeResource(resources, resourceId);
+            Bitmap rotated = Bitmap.createBitmap(
+                    original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888);
+
+            // Perform the rotation.
+            Canvas tempCanvas = new Canvas(rotated);
+            tempCanvas.rotate(angle, original.getWidth()/2, original.getHeight()/2);
+            tempCanvas.drawBitmap(original, 0, 0, null);
+
+            return new BitmapDrawable(resources,rotated);
+        }
     }
 }
diff --git a/src/com/android/dialer/calllog/ContactInfo.java b/src/com/android/dialer/calllog/ContactInfo.java
index 601f552..41afa5a 100644
--- a/src/com/android/dialer/calllog/ContactInfo.java
+++ b/src/com/android/dialer/calllog/ContactInfo.java
@@ -27,6 +27,7 @@
  */
 public class ContactInfo {
     public Uri lookupUri;
+    public String lookupKey;
     public String name;
     public int type;
     public String label;
diff --git a/src/com/android/dialer/calllog/ContactInfoHelper.java b/src/com/android/dialer/calllog/ContactInfoHelper.java
index d248c70..5d99ef4 100644
--- a/src/com/android/dialer/calllog/ContactInfoHelper.java
+++ b/src/com/android/dialer/calllog/ContactInfoHelper.java
@@ -1,17 +1,15 @@
 /*
  * 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
+ * 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
+ * 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.
+ * 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.calllog;
@@ -37,6 +35,8 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.List;
+
 /**
  * Utility class to look up the contact information for a given number.
  */
@@ -101,7 +101,7 @@
                 updatedInfo = new ContactInfo();
                 updatedInfo.number = number;
                 updatedInfo.formattedNumber = formatPhoneNumber(number, null, countryIso);
-                updatedInfo.lookupUri = createTemporaryContactUri(number);
+                updatedInfo.lookupUri = createTemporaryContactUri(updatedInfo.formattedNumber);
             } else {
                 updatedInfo = info;
             }
@@ -113,23 +113,20 @@
      * Creates a JSON-encoded lookup uri for a unknown number without an associated contact
      *
      * @param number - Unknown phone number
-     * @return JSON-encoded URI that can be used to perform a lookup when clicking
-     * on the quick contact card.
+     * @return JSON-encoded URI that can be used to perform a lookup when clicking on the quick
+     *         contact card.
      */
     private static Uri createTemporaryContactUri(String number) {
         try {
-            final JSONObject contactRows = new JSONObject()
-                    .put(Phone.CONTENT_ITEM_TYPE, new JSONObject()
-                            .put(Phone.NUMBER, number)
-                                    .put(Phone.TYPE, Phone.TYPE_CUSTOM));
+            final JSONObject contactRows = new JSONObject().put(Phone.CONTENT_ITEM_TYPE,
+                    new JSONObject().put(Phone.NUMBER, number).put(Phone.TYPE, Phone.TYPE_CUSTOM));
 
-            final String jsonString = new JSONObject()
-                    .put(Contacts.DISPLAY_NAME, number)
-                            .put(Contacts.DISPLAY_NAME_SOURCE, DisplayNameSources.PHONE)
-                            .put(Contacts.CONTENT_ITEM_TYPE, contactRows)
-                            .toString();
+            final String jsonString = new JSONObject().put(Contacts.DISPLAY_NAME, number)
+                    .put(Contacts.DISPLAY_NAME_SOURCE, DisplayNameSources.PHONE)
+                    .put(Contacts.CONTENT_ITEM_TYPE, contactRows).toString();
 
-            return Contacts.CONTENT_LOOKUP_URI.buildUpon()
+            return Contacts.CONTENT_LOOKUP_URI
+                    .buildUpon()
                     .appendPath(Constants.LOOKUP_URI_ENCODED)
                     .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                             String.valueOf(Long.MAX_VALUE))
@@ -152,8 +149,7 @@
     private ContactInfo lookupContactFromUri(Uri uri) {
         final ContactInfo info;
         Cursor phonesCursor =
-                mContext.getContentResolver().query(
-                        uri, PhoneQuery._PROJECTION, null, null, null);
+                mContext.getContentResolver().query(uri, PhoneQuery._PROJECTION, null, null, null);
 
         if (phonesCursor != null) {
             try {
@@ -161,6 +157,7 @@
                     info = new ContactInfo();
                     long contactId = phonesCursor.getLong(PhoneQuery.PERSON_ID);
                     String lookupKey = phonesCursor.getString(PhoneQuery.LOOKUP_KEY);
+                    info.lookupKey = lookupKey;
                     info.lookupUri = Contacts.getLookupUri(contactId, lookupKey);
                     info.name = phonesCursor.getString(PhoneQuery.NAME);
                     info.type = phonesCursor.getInt(PhoneQuery.PHONE_TYPE);
@@ -230,8 +227,8 @@
         if (info != null && info != ContactInfo.EMPTY) {
             info.formattedNumber = formatPhoneNumber(number, null, countryIso);
         } else if (mCachedNumberLookupService != null) {
-            CachedContactInfo cacheInfo = mCachedNumberLookupService
-                .lookupCachedContactFromNumber(mContext, number);
+            CachedContactInfo cacheInfo =
+                    mCachedNumberLookupService.lookupCachedContactFromNumber(mContext, number);
             info = cacheInfo != null ? cacheInfo.getContactInfo() : null;
         }
         return info;
@@ -242,14 +239,12 @@
      *
      * @param number the number to be formatted.
      * @param normalizedNumber the normalized number of the given number.
-     * @param countryIso the ISO 3166-1 two letters country code, the country's
-     *        convention will be used to format the number if the normalized
-     *        phone is null.
+     * @param countryIso the ISO 3166-1 two letters country code, the country's convention will be
+     *        used to format the number if the normalized phone is null.
      *
      * @return the formatted number, or the given number if it was formatted.
      */
-    private String formatPhoneNumber(String number, String normalizedNumber,
-            String countryIso) {
+    private String formatPhoneNumber(String number, String normalizedNumber, String countryIso) {
         if (TextUtils.isEmpty(number)) {
             return "";
         }
@@ -262,4 +257,33 @@
         }
         return PhoneNumberUtils.formatNumber(number, normalizedNumber, countryIso);
     }
+
+    /**
+     * Parses the given URI to determine the original lookup key of the contact.
+     */
+    public static String getLookupKeyFromUri(Uri lookupUri) {
+        // Would be nice to be able to persist the lookup key somehow to avoid having to parse
+        // the uri entirely just to retrieve the lookup key, but every uri is already parsed
+        // once anyway to check if it is an encoded JSON uri, so this has negligible effect
+        // on performance.
+        if (lookupUri != null && !UriUtils.isEncodedContactUri(lookupUri)) {
+            final List<String> segments = lookupUri.getPathSegments();
+            // This returns the third path segment of the uri, where the lookup key is located.
+            // See {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}.
+            return (segments.size() < 3) ? null : Uri.encode(segments.get(2));
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Given a contact's sourceType, return true if the contact is a business
+     *
+     * @param sourceType sourceType of the contact. This is usually populated by
+     *        {@link #mCachedNumberLookupService}.
+     */
+    public boolean isBusiness(int sourceType) {
+        return mCachedNumberLookupService != null
+                && mCachedNumberLookupService.isBusiness(sourceType);
+    }
 }
diff --git a/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java b/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
index 9c83768..00a260a 100644
--- a/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
+++ b/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
@@ -30,7 +30,7 @@
  *
  */
 public class PhoneNumberUtilsWrapper {
-    private static final PhoneNumberUtilsWrapper INSTANCE = new PhoneNumberUtilsWrapper();
+    public static final PhoneNumberUtilsWrapper INSTANCE = new PhoneNumberUtilsWrapper();
     private static final Set<String> LEGACY_UNKNOWN_NUMBERS = Sets.newHashSet("-1", "-2", "-3");
 
     /** Returns true if it is possible to place a call to the given number. */
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index 555c171..95249a6 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -163,6 +163,17 @@
         /** Selects only rows that have been updated after a certain time stamp.*/
         static final String SELECT_UPDATED_CLAUSE =
                 Phone.CONTACT_LAST_UPDATED_TIMESTAMP + " > ?";
+
+        /** Ignores contacts that have an unreasonably long lookup key. These are likely to be
+         * the result of multiple (> 50) merged raw contacts, and are likely to cause
+         * OutOfMemoryExceptions within SQLite, or cause memory allocation problems later on
+         * when iterating through the cursor set (see b/13133579)
+         */
+        static final String SELECT_IGNORE_LOOKUP_KEY_TOO_LONG_CLAUSE =
+                "length(" + Phone.LOOKUP_KEY + ") < 1000";
+
+        static final String SELECTION = SELECT_UPDATED_CLAUSE + " AND " +
+                SELECT_IGNORE_LOOKUP_KEY_TOO_LONG_CLAUSE;
     }
 
     /** Query options for querying the deleted contact database.*/
@@ -511,6 +522,9 @@
                 DeleteContactQuery.PROJECTION,
                 DeleteContactQuery.SELECT_UPDATED_CLAUSE,
                 new String[] {last_update_time}, null);
+        if (deletedContactCursor == null) {
+            return;
+        }
 
         db.beginTransaction();
         try {
@@ -628,10 +642,26 @@
 
             updatedContactCursor.moveToPosition(-1);
             while (updatedContactCursor.moveToNext()) {
-                insert.bindLong(1, updatedContactCursor.getLong(PhoneQuery.PHONE_ID));
-                insert.bindString(2, updatedContactCursor.getString(PhoneQuery.PHONE_NUMBER));
-                insert.bindLong(3, updatedContactCursor.getLong(PhoneQuery.PHONE_CONTACT_ID));
-                insert.bindString(4, updatedContactCursor.getString(PhoneQuery.PHONE_LOOKUP_KEY));
+                insert.clearBindings();
+
+                // Handle string columns which can possibly be null first. In the case of certain
+                // null columns (due to malformed rows possibly inserted by third-party apps
+                // or sync adapters), skip the phone number row.
+                final String number = updatedContactCursor.getString(PhoneQuery.PHONE_NUMBER);
+                if (TextUtils.isEmpty(number)) {
+                    continue;
+                } else {
+                    insert.bindString(2, number);
+                }
+
+                final String lookupKey = updatedContactCursor.getString(
+                        PhoneQuery.PHONE_LOOKUP_KEY);
+                if (TextUtils.isEmpty(lookupKey)) {
+                    continue;
+                } else {
+                    insert.bindString(4, lookupKey);
+                }
+
                 final String displayName = updatedContactCursor.getString(
                         PhoneQuery.PHONE_DISPLAY_NAME);
                 if (displayName == null) {
@@ -639,6 +669,8 @@
                 } else {
                     insert.bindString(5, displayName);
                 }
+                insert.bindLong(1, updatedContactCursor.getLong(PhoneQuery.PHONE_ID));
+                insert.bindLong(3, updatedContactCursor.getLong(PhoneQuery.PHONE_CONTACT_ID));
                 insert.bindLong(6, updatedContactCursor.getLong(PhoneQuery.PHONE_PHOTO_ID));
                 insert.bindLong(7, updatedContactCursor.getLong(PhoneQuery.PHONE_LAST_TIME_USED));
                 insert.bindLong(8, updatedContactCursor.getInt(PhoneQuery.PHONE_TIMES_USED));
@@ -648,8 +680,6 @@
                 insert.bindLong(12, updatedContactCursor.getInt(PhoneQuery.PHONE_IS_PRIMARY));
                 insert.bindLong(13, currentMillis);
                 insert.executeInsert();
-                insert.clearBindings();
-
                 final String contactPhoneNumber =
                         updatedContactCursor.getString(PhoneQuery.PHONE_NUMBER);
                 final ArrayList<String> numberPrefixes =
@@ -738,7 +768,7 @@
              * update time.
              */
             final Cursor updatedContactCursor = mContext.getContentResolver().query(PhoneQuery.URI,
-                    PhoneQuery.PROJECTION, PhoneQuery.SELECT_UPDATED_CLAUSE,
+                    PhoneQuery.PROJECTION, PhoneQuery.SELECTION,
                     new String[]{lastUpdateMillis}, null);
 
             /** Sets the time after querying the database as the current update time. */
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 91f2bda..4557bd4 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -35,11 +35,9 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.provider.ContactsContract.Contacts;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
 import android.provider.Contacts.PhonesColumns;
-import android.provider.ContactsContract.Intents;
 import android.provider.Settings;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.PhoneStateListener;
@@ -50,17 +48,13 @@
 import android.text.TextWatcher;
 import android.text.style.RelativeSizeSpan;
 import android.util.AttributeSet;
-import android.util.DisplayMetrics;
 import android.util.Log;
-import android.util.TypedValue;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.Menu;
-import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.view.ViewTreeObserver.OnPreDrawListener;
@@ -76,20 +70,19 @@
 
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.common.dialpad.DialpadKeyButton;
+import com.android.contacts.common.dialpad.DialpadView;
 import com.android.contacts.common.util.PhoneNumberFormatter;
 import com.android.contacts.common.util.StopWatch;
 import com.android.dialer.NeededForReflection;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.SpecialCharSequenceMgr;
-import com.android.dialer.database.DialerDatabaseHelper;
-import com.android.dialer.interactions.PhoneNumberInteraction;
-import com.android.dialer.util.OrientationUtil;
+import com.android.dialer.util.DialerUtils;
 import com.android.internal.telephony.ITelephony;
 import com.android.phone.common.CallLogAsync;
 import com.android.phone.common.HapticFeedback;
+
 import com.google.common.annotations.VisibleForTesting;
 
 import java.util.HashSet;
@@ -105,8 +98,18 @@
         DialpadKeyButton.OnPressedListener {
     private static final String TAG = DialpadFragment.class.getSimpleName();
 
-    public interface OnDialpadFragmentStartedListener {
-        public void onDialpadFragmentStarted();
+    /**
+     * This interface allows the DialpadFragment to tell its hosting Activity when and when not
+     * to display the "dial" button. While this is logically part of the DialpadFragment, the
+     * need to have a particular kind of slick animation puts the "dial" button in the parent.
+     *
+     * The parent calls dialButtonPressed() and optionsMenuInvoked() on the dialpad fragment
+     * when appropriate.
+     *
+     * TODO: Refactor the app so this interchange is a bit cleaner.
+     */
+    public interface HostInterface {
+        void setFloatingActionButtonVisible(boolean visible);
     }
 
     /**
@@ -140,30 +143,6 @@
         }
     }
 
-    /**
-     * LinearLayout that always returns true for onHoverEvent callbacks, to fix
-     * problems with accessibility due to the dialpad overlaying other fragments.
-     */
-    public static class HoverIgnoringLinearLayout extends LinearLayout {
-
-        public HoverIgnoringLinearLayout(Context context) {
-            super(context);
-        }
-
-        public HoverIgnoringLinearLayout(Context context, AttributeSet attrs) {
-            super(context, attrs);
-        }
-
-        public HoverIgnoringLinearLayout(Context context, AttributeSet attrs, int defStyle) {
-            super(context, attrs, defStyle);
-        }
-
-        @Override
-        public boolean onHoverEvent(MotionEvent event) {
-            return true;
-        }
-    }
-
     public interface OnDialpadQueryChangedListener {
         void onDialpadQueryChanged(String query);
     }
@@ -187,24 +166,18 @@
     /** Stream type used to play the DTMF tones off call, and mapped to the volume control keys */
     private static final int DIAL_TONE_STREAM_TYPE = AudioManager.STREAM_DTMF;
 
-    private ContactsPreferences mContactsPrefs;
-
     private OnDialpadQueryChangedListener mDialpadQueryListener;
 
-    /**
-     * View (usually FrameLayout) containing mDigits field. This can be null, in which mDigits
-     * isn't enclosed by the container.
-     */
-    private View mDigitsContainer;
+    private DialpadView mDialpadView;
     private EditText mDigits;
 
     /** Remembers if we need to clear digits field when the screen is completely gone. */
     private boolean mClearDigitsOnStop;
 
+    private View mOverflowMenuButton;
     private View mDelete;
     private ToneGenerator mToneGenerator;
     private final Object mToneGeneratorLock = new Object();
-    private View mDialpad;
     private View mSpacer;
 
     /**
@@ -212,8 +185,6 @@
      */
     private final HashSet<View> mPressedDialpadKeys = new HashSet<View>(12);
 
-    private View mDialButtonContainer;
-    private View mDialButton;
     private ListView mDialpadChooser;
     private DialpadChooserAdapter mDialpadChooserAdapter;
 
@@ -287,7 +258,7 @@
 
     private boolean mStartedFromNewIntent = false;
     private boolean mFirstLaunch = false;
-    private boolean mAdjustTranslationForAnimation = false;
+    private boolean mAnimate = false;
 
     private static final String PREF_DIGITS_FILLED_BY_INTENT = "pref_digits_filled_by_intent";
 
@@ -337,19 +308,22 @@
         if (isDigitsEmpty()) {
             mDigitsFilledByIntent = false;
             mDigits.setCursorVisible(false);
+            // Set to INVISIBLE instead of GONE so that text (eg. "Type number to add") is centered.
+            mOverflowMenuButton.setVisibility(View.INVISIBLE);
+        } else if (mDialpadView.canDigitsBeEdited()){
+            mOverflowMenuButton.setVisibility(View.VISIBLE);
         }
 
         if (mDialpadQueryListener != null) {
             mDialpadQueryListener.onDialpadQueryChanged(mDigits.getText().toString());
         }
-        updateDialAndDeleteButtonEnabledState();
+        updateDeleteButtonEnabledState();
     }
 
     @Override
     public void onCreate(Bundle state) {
         super.onCreate(state);
         mFirstLaunch = true;
-        mContactsPrefs = new ContactsPreferences(getActivity());
         mCurrentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
 
         try {
@@ -383,7 +357,7 @@
             public boolean onPreDraw() {
 
                 if (isHidden()) return true;
-                if (mAdjustTranslationForAnimation && fragmentView.getTranslationY() == 0) {
+                if (mAnimate && fragmentView.getTranslationY() == 0) {
                     ((DialpadSlidingLinearLayout) fragmentView).setYFraction(
                             DIALPAD_SLIDE_FRACTION);
                 }
@@ -396,34 +370,26 @@
 
         vto.addOnPreDrawListener(preDrawListener);
 
-        // Load up the resources for the text field.
         Resources r = getResources();
 
-        mDialButtonContainer = fragmentView.findViewById(R.id.dialButtonContainer);
-        mDigitsContainer = fragmentView.findViewById(R.id.digits_container);
-        mDigits = (EditText) fragmentView.findViewById(R.id.digits);
+        mDialpadView = (DialpadView) fragmentView.findViewById(R.id.dialpad_view);
+        mDialpadView.setCanDigitsBeEdited(true);
+        mDigits = mDialpadView.getDigits();
         mDigits.setKeyListener(UnicodeDialerKeyListener.INSTANCE);
         mDigits.setOnClickListener(this);
         mDigits.setOnKeyListener(this);
         mDigits.setOnLongClickListener(this);
         mDigits.addTextChangedListener(this);
+        mDigits.setElegantTextHeight(false);
         PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getActivity(), mDigits);
         // Check for the presence of the keypad
         View oneButton = fragmentView.findViewById(R.id.one);
         if (oneButton != null) {
-            setupKeypad(fragmentView);
+            configureKeypadListeners(fragmentView);
         }
 
-        mDialButton = fragmentView.findViewById(R.id.dialButton);
-        if (r.getBoolean(R.bool.config_show_onscreen_dial_button)) {
-            mDialButton.setOnClickListener(this);
-            mDialButton.setOnLongClickListener(this);
-        } else {
-            mDialButton.setVisibility(View.GONE); // It's VISIBLE by default
-            mDialButton = null;
-        }
+        mDelete = mDialpadView.getDeleteButton();
 
-        mDelete = fragmentView.findViewById(R.id.deleteButton);
         if (mDelete != null) {
             mDelete.setOnClickListener(this);
             mDelete.setOnLongClickListener(this);
@@ -434,46 +400,27 @@
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 if (isDigitsEmpty()) {
-                    hideAndClearDialpad();
+                    hideAndClearDialpad(true);
                     return true;
                 }
                 return false;
             }
         });
 
-        mDialpad = fragmentView.findViewById(R.id.dialpad);  // This is null in landscape mode.
-
-        // In landscape we put the keyboard in phone mode.
-        if (null == mDialpad) {
-            mDigits.setInputType(android.text.InputType.TYPE_CLASS_PHONE);
-        } else {
-            mDigits.setCursorVisible(false);
-        }
+        mDigits.setCursorVisible(false);
 
         // Set up the "dialpad chooser" UI; see showDialpadChooser().
         mDialpadChooser = (ListView) fragmentView.findViewById(R.id.dialpadChooser);
         mDialpadChooser.setOnItemClickListener(this);
 
+        mOverflowMenuButton = mDialpadView.getOverflowMenuButton();
+        mOverflowMenuButton.setOnClickListener(this);
+        final PopupMenu overflowMenu = buildOptionsMenu(mOverflowMenuButton);
+        mOverflowMenuButton.setOnTouchListener(overflowMenu.getDragToOpenListener());
+
         return fragmentView;
     }
 
-    @Override
-    public void onStart() {
-        super.onStart();
-
-        final Activity activity = getActivity();
-
-        try {
-            ((OnDialpadFragmentStartedListener) activity).onDialpadFragmentStarted();
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement OnDialpadFragmentStartedListener");
-        }
-
-        final View overflowButton = getView().findViewById(R.id.overflow_menu_on_dialpad);
-        overflowButton.setOnClickListener(this);
-    }
-
     private boolean isLayoutReady() {
         return mDigits != null;
     }
@@ -623,53 +570,24 @@
         }
     }
 
-    private void setupKeypad(View fragmentView) {
-        final int[] buttonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four,
-                R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.pound};
-
-        final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
-                R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
-                R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
-                R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
-                R.string.dialpad_pound_number};
-
-        final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
-                R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
-                R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
-                R.string.dialpad_8_letters, R.string.dialpad_9_letters,
-                R.string.dialpad_star_letters, R.string.dialpad_pound_letters};
-
-        final Resources resources = getResources();
+    private void configureKeypadListeners(View fragmentView) {
+        final int[] buttonIds = new int[] {R.id.one, R.id.two, R.id.three, R.id.four, R.id.five,
+                R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.zero, R.id.pound};
 
         DialpadKeyButton dialpadKey;
-        TextView numberView;
-        TextView lettersView;
 
         for (int i = 0; i < buttonIds.length; i++) {
             dialpadKey = (DialpadKeyButton) fragmentView.findViewById(buttonIds[i]);
-            dialpadKey.setLayoutParams(new TableRow.LayoutParams(
-                    TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
             dialpadKey.setOnPressedListener(this);
-            numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
-            lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
-            final String numberString = resources.getString(numberIds[i]);
-            numberView.setText(numberString);
-            dialpadKey.setContentDescription(numberString);
-            if (lettersView != null) {
-                lettersView.setText(resources.getString(letterIds[i]));
-                if (buttonIds[i] == R.id.zero) {
-                    lettersView.setTextSize(TypedValue.COMPLEX_UNIT_PX, resources.getDimension(
-                            R.dimen.dialpad_key_plus_size));
-                }
-            }
         }
 
         // Long-pressing one button will initiate Voicemail.
-        fragmentView.findViewById(R.id.one).setOnLongClickListener(this);
+        final DialpadKeyButton one = (DialpadKeyButton) fragmentView.findViewById(R.id.one);
+        one.setOnLongClickListener(this);
 
         // Long-pressing zero button will enter '+' instead.
-        fragmentView.findViewById(R.id.zero).setOnLongClickListener(this);
-
+        final DialpadKeyButton zero = (DialpadKeyButton) fragmentView.findViewById(R.id.zero);
+        zero.setOnLongClickListener(this);
     }
 
     @Override
@@ -754,7 +672,7 @@
 
         stopWatch.lap("hnt");
 
-        updateDialAndDeleteButtonEnabledState();
+        updateDeleteButtonEnabledState();
 
         stopWatch.lap("bes");
 
@@ -801,22 +719,6 @@
         outState.putBoolean(PREF_DIGITS_FILLED_BY_INTENT, mDigitsFilledByIntent);
     }
 
-    private void setupMenuItems(Menu menu) {
-        final MenuItem addToContactMenuItem = menu.findItem(R.id.menu_add_contacts);
-
-        // We show "add to contacts" menu only when the user is
-        // seeing usual dialpad and has typed at least one digit.
-        // We never show a menu if the "choose dialpad" UI is up.
-        if (dialpadChooserVisible() || isDigitsEmpty()) {
-            addToContactMenuItem.setVisible(false);
-        } else {
-            final CharSequence digits = mDigits.getText();
-            // Put the current digits string into an intent
-            addToContactMenuItem.setIntent(DialtactsActivity.getAddNumberToContactIntent(digits));
-            addToContactMenuItem.setVisible(true);
-        }
-    }
-
     private void keyPressed(int keyCode) {
         if (getView().getTranslationY() != 0) {
             return;
@@ -878,7 +780,7 @@
         switch (view.getId()) {
             case R.id.digits:
                 if (keyCode == KeyEvent.KEYCODE_ENTER) {
-                    dialButtonPressed();
+                    handleDialButtonPressed();
                     return true;
                 }
                 break;
@@ -960,33 +862,45 @@
         }
     }
 
+    /**
+     * Called by the containing Activity to tell this Fragment to build an overflow options
+     * menu for display by the container when appropriate.
+     *
+     * @param invoker the View that invoked the options menu, to act as an anchor location.
+     */
+    public PopupMenu buildOptionsMenu(View invoker) {
+        final PopupMenu popupMenu = new PopupMenu(getActivity(), invoker);
+        popupMenu.inflate(R.menu.dialpad_options);
+        popupMenu.setOnMenuItemClickListener(this);
+        return popupMenu;
+    }
+
+    /**
+     * Called by the containing Activity to tell this Fragment that the dial button has been
+     * pressed.
+     */
+    public void dialButtonPressed() {
+        mHaptic.vibrate();
+        handleDialButtonPressed();
+    }
+
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
-            case R.id.overflow_menu_on_dialpad: {
-                final PopupMenu popupMenu = new PopupMenu(getActivity(), view);
-                final Menu menu = popupMenu.getMenu();
-                popupMenu.inflate(R.menu.dialpad_options);
-                popupMenu.setOnMenuItemClickListener(this);
-                setupMenuItems(menu);
-                popupMenu.show();
-                break;
-            }
             case R.id.deleteButton: {
                 keyPressed(KeyEvent.KEYCODE_DEL);
                 return;
             }
-            case R.id.dialButton: {
-                mHaptic.vibrate();  // Vibrate here too, just like we do for the regular keys
-                dialButtonPressed();
-                return;
-            }
             case R.id.digits: {
                 if (!isDigitsEmpty()) {
                     mDigits.setCursorVisible(true);
                 }
                 return;
             }
+            case R.id.dialpad_overflow: {
+                buildOptionsMenu(view).show();
+                break;
+            }
             default: {
                 Log.wtf(TAG, "Unexpected onClick() event from: " + view);
                 return;
@@ -1001,10 +915,6 @@
         switch (id) {
             case R.id.deleteButton: {
                 digits.clear();
-                // TODO: The framework forgets to clear the pressed
-                // status of disabled button. Until this is fixed,
-                // clear manually the pressed status. b/2133127
-                mDelete.setPressed(false);
                 return true;
             }
             case R.id.one: {
@@ -1055,16 +965,6 @@
                 mDigits.setCursorVisible(true);
                 return false;
             }
-            case R.id.dialButton: {
-                if (isDigitsEmpty()) {
-                    handleDialButtonClickWithEmptyDigits();
-                    // This event should be consumed so that onClick() won't do the exactly same
-                    // thing.
-                    return true;
-                } else {
-                    return false;
-                }
-            }
         }
         return false;
     }
@@ -1074,7 +974,6 @@
      * the previous digit or cancel previously entered character.
      */
     private void removePreviousDigitIfPossible() {
-        final Editable editable = mDigits.getText();
         final int currentPosition = mDigits.getSelectionStart();
         if (currentPosition > 0) {
             mDigits.setSelection(currentPosition);
@@ -1084,11 +983,11 @@
 
     public void callVoicemail() {
         startActivity(getVoicemailIntent());
-        hideAndClearDialpad();
+        hideAndClearDialpad(false);
     }
 
-    private void hideAndClearDialpad() {
-        ((DialtactsActivity) getActivity()).hideDialpadFragment(false, true);
+    private void hideAndClearDialpad(boolean animate) {
+        ((DialtactsActivity) getActivity()).hideDialpadFragment(animate, true);
     }
 
     public static class ErrorDialogFragment extends DialogFragment {
@@ -1157,7 +1056,7 @@
      * user needs to press the dial button again, to dial it (general
      * case described above).
      */
-    public void dialButtonPressed() {
+    private void handleDialButtonPressed() {
         if (isDigitsEmpty()) { // No number entered.
             handleDialButtonClickWithEmptyDigits();
         } else {
@@ -1177,13 +1076,13 @@
                 }
 
                 // Clear the digits just in case.
-                mDigits.getText().clear();
+                clearDialpad();
             } else {
                 final Intent intent = CallUtil.getCallIntent(number,
                         (getActivity() instanceof DialtactsActivity ?
                                 ((DialtactsActivity) getActivity()).getCallOrigin() : null));
                 startActivity(intent);
-                hideAndClearDialpad();
+                hideAndClearDialpad(false);
             }
         }
     }
@@ -1192,11 +1091,6 @@
         mDigits.getText().clear();
     }
 
-    private String getCallOrigin() {
-        return (getActivity() instanceof DialtactsActivity) ?
-                ((DialtactsActivity) getActivity()).getCallOrigin() : null;
-    }
-
     private void handleDialButtonClickWithEmptyDigits() {
         if (phoneIsCdma() && phoneIsOffhook()) {
             // This is really CDMA specific. On GSM is it possible
@@ -1320,14 +1214,10 @@
 
         if (enabled) {
             // Log.i(TAG, "Showing dialpad chooser!");
-            if (mDigitsContainer != null) {
-                mDigitsContainer.setVisibility(View.GONE);
-            } else {
-                // mDigits is not enclosed by the container. Make the digits field itself gone.
-                mDigits.setVisibility(View.GONE);
+            if (mDialpadView != null) {
+                mDialpadView.setVisibility(View.GONE);
             }
-            if (mDialpad != null) mDialpad.setVisibility(View.GONE);
-            if (mDialButtonContainer != null) mDialButtonContainer.setVisibility(View.GONE);
+            ((HostInterface) getActivity()).setFloatingActionButtonVisible(false);
 
             mDialpadChooser.setVisibility(View.VISIBLE);
 
@@ -1339,13 +1229,12 @@
             mDialpadChooser.setAdapter(mDialpadChooserAdapter);
         } else {
             // Log.i(TAG, "Displaying normal Dialer UI.");
-            if (mDigitsContainer != null) {
-                mDigitsContainer.setVisibility(View.VISIBLE);
+            if (mDialpadView != null) {
+                mDialpadView.setVisibility(View.VISIBLE);
             } else {
                 mDigits.setVisibility(View.VISIBLE);
             }
-            if (mDialpad != null) mDialpad.setVisibility(View.VISIBLE);
-            if (mDialButtonContainer != null) mDialButtonContainer.setVisibility(View.VISIBLE);
+            ((HostInterface) getActivity()).setFloatingActionButtonVisible(true);
             mDialpadChooser.setVisibility(View.GONE);
         }
     }
@@ -1540,8 +1429,12 @@
 
     @Override
     public boolean onMenuItemClick(MenuItem item) {
-        // R.id.menu_add_contacts already has an add to contact intent populated by setupMenuItems
         switch (item.getItemId()) {
+            case R.id.menu_add_contact:
+                final CharSequence digits = mDigits.getText();
+                DialerUtils.startActivityWithErrorToast(getActivity(),
+                        DialtactsActivity.getAddNumberToContactIntent(digits));
+                return true;
             case R.id.menu_2s_pause:
                 updateDialString(PAUSE);
                 return true;
@@ -1592,24 +1485,11 @@
     /**
      * Update the enabledness of the "Dial" and "Backspace" buttons if applicable.
      */
-    private void updateDialAndDeleteButtonEnabledState() {
-        final boolean digitsNotEmpty = !isDigitsEmpty();
-
-        if (mDialButton != null) {
-            // On CDMA phones, if we're already on a call, we *always*
-            // enable the Dial button (since you can press it without
-            // entering any digits to send an empty flash.)
-            if (phoneIsCdma() && phoneIsOffhook()) {
-                mDialButton.setEnabled(true);
-            } else {
-                // Common case: GSM, or CDMA but not on a call.
-                // Enable the Dial button if some digits have
-                // been entered, or if there is a last dialed number
-                // that could be redialed.
-                mDialButton.setEnabled(digitsNotEmpty ||
-                        !TextUtils.isEmpty(mLastNumberDialed));
-            }
+    private void updateDeleteButtonEnabledState() {
+        if (getActivity() == null) {
+            return;
         }
+        final boolean digitsNotEmpty = !isDigitsEmpty();
         mDelete.setEnabled(digitsNotEmpty);
     }
 
@@ -1695,7 +1575,7 @@
                             // doing anything here.
                             if (getActivity() == null) return;
                             mLastNumberDialed = number;
-                            updateDialAndDeleteButtonEnabledState();
+                            updateDeleteButtonEnabledState();
                         }
                     });
         mCallLog.getLastOutgoingCall(lastCallArgs);
@@ -1711,17 +1591,21 @@
     public void onHiddenChanged(boolean hidden) {
         super.onHiddenChanged(hidden);
         final DialtactsActivity activity = (DialtactsActivity) getActivity();
+        final DialpadView dialpadView = (DialpadView) getView().findViewById(R.id.dialpad_view);
         if (activity == null) return;
         if (hidden) {
-            activity.showSearchBar();
+            activity.onDialpadHidden();
         } else {
-            activity.hideSearchBar();
+            if (mAnimate) {
+                dialpadView.animateShow();
+            }
+            activity.onDialpadShown();
             mDigits.requestFocus();
         }
     }
 
-    public void setAdjustTranslationForAnimation(boolean value) {
-        mAdjustTranslationForAnimation = value;
+    public void setAnimate(boolean value) {
+        mAnimate = value;
     }
 
     public void setYFraction(float yFraction) {
diff --git a/src/com/android/dialer/dialpad/DialpadKeyButton.java b/src/com/android/dialer/dialpad/DialpadKeyButton.java
deleted file mode 100644
index 9a20993..0000000
--- a/src/com/android/dialer/dialpad/DialpadKeyButton.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.dialpad;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.widget.FrameLayout;
-
-/**
- * Custom class for dialpad buttons.
- * <p>
- * This class implements lift-to-type interaction when touch exploration is
- * enabled.
- */
-public class DialpadKeyButton extends FrameLayout {
-    /** Accessibility manager instance used to check touch exploration state. */
-    private AccessibilityManager mAccessibilityManager;
-
-    /** Bounds used to filter HOVER_EXIT events. */
-    private Rect mHoverBounds = new Rect();
-
-    public interface OnPressedListener {
-        public void onPressed(View view, boolean pressed);
-    }
-
-    private OnPressedListener mOnPressedListener;
-
-    public void setOnPressedListener(OnPressedListener onPressedListener) {
-        mOnPressedListener = onPressedListener;
-    }
-
-    public DialpadKeyButton(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initForAccessibility(context);
-    }
-
-    public DialpadKeyButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        initForAccessibility(context);
-    }
-
-    private void initForAccessibility(Context context) {
-        mAccessibilityManager = (AccessibilityManager) context.getSystemService(
-                Context.ACCESSIBILITY_SERVICE);
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        if (mOnPressedListener != null) {
-            mOnPressedListener.onPressed(this, pressed);
-        }
-    }
-
-    @Override
-    public void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-
-        mHoverBounds.left = getPaddingLeft();
-        mHoverBounds.right = w - getPaddingRight();
-        mHoverBounds.top = getPaddingTop();
-        mHoverBounds.bottom = h - getPaddingBottom();
-    }
-
-    @Override
-    public boolean performAccessibilityAction(int action, Bundle arguments) {
-        if (action == AccessibilityNodeInfo.ACTION_CLICK) {
-            simulateClickForAccessibility();
-            return true;
-        }
-
-        return super.performAccessibilityAction(action, arguments);
-    }
-
-    @Override
-    public boolean onHoverEvent(MotionEvent event) {
-        // When touch exploration is turned on, lifting a finger while inside
-        // the button's hover target bounds should perform a click action.
-        if (mAccessibilityManager.isEnabled()
-                && mAccessibilityManager.isTouchExplorationEnabled()) {
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_HOVER_ENTER:
-                    // Lift-to-type temporarily disables double-tap activation.
-                    setClickable(false);
-                    break;
-                case MotionEvent.ACTION_HOVER_EXIT:
-                    if (mHoverBounds.contains((int) event.getX(), (int) event.getY())) {
-                        simulateClickForAccessibility();
-                    }
-                    setClickable(true);
-                    break;
-            }
-        }
-
-        return super.onHoverEvent(event);
-    }
-
-    /**
-     * When accessibility is on, simulate press and release to preserve the
-     * semantic meaning of performClick(). Required for Braille support.
-     */
-    private void simulateClickForAccessibility() {
-        // Checking the press state prevents double activation.
-        if (isPressed()) {
-            return;
-        }
-
-        setPressed(true);
-
-        // Stay consistent with performClick() by sending the event after
-        // setting the pressed state but before performing the action.
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
-
-        setPressed(false);
-    }
-}
diff --git a/src/com/android/dialer/dialpad/DigitsEditText.java b/src/com/android/dialer/dialpad/DigitsEditText.java
deleted file mode 100644
index 1a092be..0000000
--- a/src/com/android/dialer/dialpad/DigitsEditText.java
+++ /dev/null
@@ -1,58 +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.dialpad;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.text.InputType;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-
-/**
- * EditText which suppresses IME show up.
- */
-public class DigitsEditText extends EditText {
-    public DigitsEditText(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
-        setShowSoftInputOnFocus(false);
-    }
-
-    @Override
-    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
-        super.onFocusChanged(focused, direction, previouslyFocusedRect);
-        final InputMethodManager imm = ((InputMethodManager) getContext()
-                .getSystemService(Context.INPUT_METHOD_SERVICE));
-        if (imm != null && imm.isActive(this)) {
-            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        final boolean ret = super.onTouchEvent(event);
-        // Must be done after super.onTouchEvent()
-        final InputMethodManager imm = ((InputMethodManager) getContext()
-                .getSystemService(Context.INPUT_METHOD_SERVICE));
-        if (imm != null && imm.isActive(this)) {
-            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
-        }
-        return ret;
-    }
-}
diff --git a/src/com/android/dialer/dialpad/SmartDialNameMatcher.java b/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
index 43aeb26..0126864 100644
--- a/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
+++ b/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
@@ -34,7 +34,7 @@
  */
 public class SmartDialNameMatcher {
 
-    private final String mQuery;
+    private String mQuery;
 
     // Whether or not we allow matches like 57 - (J)ohn (S)mith
     private static final boolean ALLOW_INITIAL_MATCH = true;
@@ -416,6 +416,10 @@
         return new ArrayList<SmartDialMatchPosition>(mMatchPositions);
     }
 
+    public void setQuery(String query) {
+        mQuery = query;
+    }
+
     public String getNameMatchPositionsInString() {
         return mNameMatchMask;
     }
diff --git a/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java b/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
index fb9b1d1..c7e4c5f 100644
--- a/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
+++ b/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
@@ -68,6 +68,9 @@
                 Uri.encode(number));
         final Cursor cursor = context.getContentResolver().query(contactUri, new String[] {
                 PhoneLookup._ID}, null, null, null);
+        if (cursor == null) {
+            return NO_CONTACT_FOUND;
+        }
         try {
             if (cursor.moveToFirst()) {
                 final long id = cursor.getLong(0);
diff --git a/src/com/android/dialer/list/AllContactsActivity.java b/src/com/android/dialer/list/AllContactsActivity.java
deleted file mode 100644
index f5d739d..0000000
--- a/src/com/android/dialer/list/AllContactsActivity.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.
- */
-package com.android.dialer.list;
-
-import android.app.ActionBar;
-import android.app.Fragment;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.style.TypefaceSpan;
-import android.util.Log;
-
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
-import com.android.dialer.DialtactsActivity;
-import com.android.dialer.R;
-import com.android.dialer.interactions.PhoneNumberInteraction;
-
-public class AllContactsActivity extends TransactionSafeActivity {
-    private static final String TAG = AllContactsActivity.class.getSimpleName();
-
-    private AllContactsFragment mAllContactsFragment;
-
-    // Same behavior as {@link DialtactsActivity}
-    private final OnPhoneNumberPickerActionListener mPhoneNumberPickerActionListener =
-            new OnPhoneNumberPickerActionListener() {
-                @Override
-                public void onPickPhoneNumberAction(Uri dataUri) {
-                    // Specify call-origin so that users will see the previous tab instead of
-                    // CallLog screen (search UI will be automatically exited).
-                    PhoneNumberInteraction.startInteractionForPhoneCall(
-                        AllContactsActivity.this, dataUri, null);
-                }
-
-                @Override
-                public void onCallNumberDirectly(String phoneNumber) {
-                final Intent intent = CallUtil.getCallIntent(phoneNumber, null);
-                    startActivity(intent);
-                }
-
-                @Override
-                public void onShortcutIntentCreated(Intent intent) {
-                    Log.w(TAG, "Unsupported intent has come (" + intent + "). Ignoring.");
-                }
-
-                @Override
-                public void onHomeInActionBarSelected() {
-                    // {@link PhoneNumberPickerFragment handles onClick on the home button
-                    // and performs the callback here. This means we don't have to handle it
-                    // ourself in the activity.
-                    final Intent intent = new Intent(AllContactsActivity.this,
-                            DialtactsActivity.class);
-                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                    startActivity(intent);
-                }
-    };
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        final ActionBar actionBar = getActionBar();
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
-        actionBar.setDisplayShowHomeEnabled(true);
-        actionBar.setDisplayHomeAsUpEnabled(true);
-        actionBar.setDisplayShowTitleEnabled(true);
-
-        setContentView(R.layout.all_contacts_activity);
-    }
-
-    @Override
-    public void onAttachFragment(Fragment fragment) {
-        if (fragment instanceof AllContactsFragment) {
-            mAllContactsFragment = (AllContactsFragment) fragment;
-            mAllContactsFragment.setOnPhoneNumberPickerActionListener(
-                    mPhoneNumberPickerActionListener);
-        }
-    }
-}
diff --git a/src/com/android/dialer/list/AllContactsFragment.java b/src/com/android/dialer/list/AllContactsFragment.java
index 40d5c14..d05f66d 100644
--- a/src/com/android/dialer/list/AllContactsFragment.java
+++ b/src/com/android/dialer/list/AllContactsFragment.java
@@ -1,5 +1,4 @@
 /*
-
  * Copyright (C) 2013 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,39 +16,66 @@
 
 package com.android.dialer.list;
 
-import android.app.Activity;
-import android.os.Bundle;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract.QuickContact;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.QuickContactBadge;
 
+import com.android.contacts.common.list.ContactEntryListAdapter;
+import com.android.contacts.common.list.ContactEntryListFragment;
+import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.PhoneNumberPickerFragment;
+import com.android.contacts.common.list.DefaultContactListAdapter;
 import com.android.dialer.R;
 
 /**
  * Fragments to show all contacts with phone numbers.
  */
-public class AllContactsFragment extends PhoneNumberPickerFragment{
+public class AllContactsFragment extends ContactEntryListFragment<ContactEntryListAdapter> {
 
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+    public AllContactsFragment() {
+        setQuickContactEnabled(false);
+        setPhotoLoaderEnabled(true);
+        setSectionHeaderDisplayEnabled(true);
+        setDarkTheme(false);
+        setVisibleScrollbarEnabled(true);
     }
 
     @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-
-        // Customizes the listview according to the dialer specifics.
-        setQuickContactEnabled(true);
-        setDarkTheme(false);
-        setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(true /* opposite */));
-        setUseCallableUri(true);
+    protected ContactEntryListAdapter createListAdapter() {
+        final DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity()) {
+            @Override
+            protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+                super.bindView(itemView, partition, cursor, position);
+                itemView.setTag(this.getContactUri(partition, cursor));
+            }
+        };
+        adapter.setDisplayPhotos(true);
+        adapter.setFilter(ContactListFilter.createFilterWithType(
+                ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY));
+        adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
+        return adapter;
     }
 
     @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
         return inflater.inflate(R.layout.show_all_contacts_fragment, null);
     }
+
+    @Override
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        final Uri uri = (Uri) view.getTag();
+        if (uri != null) {
+            QuickContact.showQuickContact(getActivity(), view, uri, QuickContact.MODE_LARGE, null);
+        }
+    }
+
+    @Override
+    protected void onItemClick(int position, long id) {
+        // Do nothing. Implemented to satisfy ContactEntryListFragment.
+    }
 }
diff --git a/src/com/android/dialer/list/DragDropController.java b/src/com/android/dialer/list/DragDropController.java
new file mode 100644
index 0000000..8cd1046
--- /dev/null
+++ b/src/com/android/dialer/list/DragDropController.java
@@ -0,0 +1,83 @@
+package com.android.dialer.list;
+
+import android.util.Log;
+import android.view.View;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class that handles and combines drag events generated from multiple views, and then fires
+ * off events to any OnDragDropListeners that have registered for callbacks.
+ */
+public class DragDropController {
+
+    private final List<OnDragDropListener> mOnDragDropListeners =
+            new ArrayList<OnDragDropListener>();
+    private final DragItemContainer mDragItemContainer;
+    private final int[] mLocationOnScreen = new int[2];
+
+    /**
+     * Callback interface used to retrieve views based on the current touch coordinates of the
+     * drag event. The {@link DragItemContainer} houses the draggable views that this
+     * {@link DragDropController} controls.
+     */
+    public interface DragItemContainer {
+        public PhoneFavoriteSquareTileView getViewForLocation(int x, int y);
+    }
+
+    public DragDropController(DragItemContainer dragItemContainer) {
+        mDragItemContainer = dragItemContainer;
+    }
+
+    /**
+     * @return True if the drag is started, false if the drag is cancelled for some reason.
+     */
+    boolean handleDragStarted(int x, int y) {
+        final PhoneFavoriteSquareTileView tileView = mDragItemContainer.getViewForLocation(x, y);
+        if (tileView == null) {
+            return false;
+        }
+        for (int i = 0; i < mOnDragDropListeners.size(); i++) {
+            mOnDragDropListeners.get(i).onDragStarted(x, y, tileView);
+        }
+
+        return true;
+    }
+
+    public void handleDragHovered(View v, int x, int y) {
+        v.getLocationOnScreen(mLocationOnScreen);
+        final int screenX = x + mLocationOnScreen[0];
+        final int screenY = y + mLocationOnScreen[1];
+        final PhoneFavoriteSquareTileView view = mDragItemContainer.getViewForLocation(
+                screenX, screenY);
+        for (int i = 0; i < mOnDragDropListeners.size(); i++) {
+            mOnDragDropListeners.get(i).onDragHovered(screenX, screenY, view);
+        }
+    }
+
+    public void handleDragFinished(int x, int y, boolean isRemoveView) {
+        if (isRemoveView) {
+            for (int i = 0; i < mOnDragDropListeners.size(); i++) {
+                mOnDragDropListeners.get(i).onDroppedOnRemove();
+            }
+        }
+
+        for (int i = 0; i < mOnDragDropListeners.size(); i++) {
+            mOnDragDropListeners.get(i).onDragFinished(x, y);
+        }
+    }
+
+    public void addOnDragDropListener(OnDragDropListener listener) {
+        if (!mOnDragDropListeners.contains(listener)) {
+            mOnDragDropListeners.add(listener);
+        }
+    }
+
+    public void removeOnDragDropListener(OnDragDropListener listener) {
+        if (mOnDragDropListeners.contains(listener)) {
+            mOnDragDropListeners.remove(listener);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
new file mode 100644
index 0000000..18fa531
--- /dev/null
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -0,0 +1,350 @@
+package com.android.dialer.list;
+
+import android.animation.LayoutTransition;
+import android.app.ActionBar;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Loader;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.CallLog;
+import android.support.v13.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.dialer.DialtactsActivity;
+
+import android.view.View.OnClickListener;
+
+import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogFragment;
+import com.android.dialer.calllog.CallLogQuery;
+import com.android.dialer.calllog.CallLogQueryHandler;
+import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.list.ShortcutCardsAdapter.SwipeableShortcutCard;
+import com.android.dialer.widget.OverlappingPaneLayout;
+import com.android.dialer.widget.OverlappingPaneLayout.PanelSlideListener;
+import com.android.dialerbind.ObjectFactory;
+
+import java.util.ArrayList;
+
+/**
+ * Fragment that is used as the main screen of the Dialer.
+ *
+ * Contains a ViewPager that contains various contact lists like the Speed Dial list and the
+ * All Contacts list. This will also eventually contain the logic that allows sliding the
+ * ViewPager containing the lists up above the shortcut cards and pin it against the top of the
+ * screen.
+ */
+public class ListsFragment extends Fragment implements CallLogQueryHandler.Listener,
+        CallLogAdapter.CallFetcher, ViewPager.OnPageChangeListener {
+
+    public static final int TAB_INDEX_SPEED_DIAL = 0;
+    public static final int TAB_INDEX_RECENTS = 1;
+    public static final int TAB_INDEX_ALL_CONTACTS = 2;
+
+    private static final int TAB_INDEX_COUNT = 3;
+
+    private static final int MAX_RECENTS_ENTRIES = 20;
+    // Oldest recents entry to display is 2 weeks old.
+    private static final long OLDEST_RECENTS_DATE = 1000L * 60 * 60 * 24 * 14;
+
+    private static final String KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE =
+            "key_last_dismissed_call_shortcut_date";
+
+    // Used with LoaderManager
+    private static int MISSED_CALL_LOADER = 1;
+
+    public interface HostInterface {
+        public void showCallHistory();
+    }
+
+    private ActionBar mActionBar;
+    private ViewPager mViewPager;
+    private ViewPagerTabs mViewPagerTabs;
+    private ViewPagerAdapter mViewPagerAdapter;
+    private ListView mShortcutCardsListView;
+    private SpeedDialFragment mSpeedDialFragment;
+    private CallLogFragment mRecentsFragment;
+    private AllContactsFragment mAllContactsFragment;
+    private ArrayList<OnPageChangeListener> mOnPageChangeListeners =
+            new ArrayList<OnPageChangeListener>();
+
+    private String[] mTabTitles;
+
+    private ShortcutCardsAdapter mMergedAdapter;
+    private CallLogAdapter mCallLogAdapter;
+    private CallLogQueryHandler mCallLogQueryHandler;
+
+    /**
+     * Call shortcuts older than this date (persisted in shared preferences) will not show up in
+     * at the top of the screen
+     */
+    private long mLastCallShortcutDate = 0;
+
+    /**
+     * The date of the current call shortcut that is showing on screen.
+     */
+    private long mCurrentCallShortcutDate = 0;
+
+    private class MissedCallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
+
+        @Override
+        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+            final Uri uri = CallLog.Calls.CONTENT_URI;
+            final String[] projection = new String[] {CallLog.Calls.TYPE};
+            final String selection = CallLog.Calls.TYPE + " = " + CallLog.Calls.MISSED_TYPE +
+                    " AND " + CallLog.Calls.IS_READ + " = 0";
+            return new CursorLoader(getActivity(), uri, projection, selection, null, null);
+        }
+
+        @Override
+        public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor data) {
+            mCallLogAdapter.setMissedCalls(data);
+        }
+
+        @Override
+        public void onLoaderReset(Loader<Cursor> cursorLoader) {
+        }
+    }
+
+    private PanelSlideListener mPanelSlideListener = new PanelSlideListener() {
+        @Override
+        public void onPanelSlide(View panel, float slideOffset) {
+            // For every 2 percent that the panel is slid upwards, clip 3 percent from each edge
+            // of the shortcut card, to achieve the animated effect of the shortcut card
+            // rapidly shrinking and disappearing from view when the panel is slid upwards.
+            // slideOffset is 1 when the shortcut card is fully exposed, and 0 when completely
+            // hidden.
+            float ratioCardHidden = (1 - slideOffset) * 1.5f;
+            if (mShortcutCardsListView.getCount() > 0) {
+                SwipeableShortcutCard v =
+                        (SwipeableShortcutCard) mShortcutCardsListView.getChildAt(0);
+                v.clipCard(ratioCardHidden);
+            }
+
+            if (mActionBar != null) {
+                // Amount of available space that is not being hidden by the bottom pane
+                final int topPaneHeight = (int) (slideOffset * mShortcutCardsListView.getHeight());
+
+                final int availableActionBarHeight =
+                        Math.min(mActionBar.getHeight(), topPaneHeight);
+                mActionBar.setHideOffset(mActionBar.getHeight() - availableActionBarHeight);
+            }
+        }
+
+        @Override
+        public void onPanelOpened(View panel) {
+        }
+
+        @Override
+        public void onPanelClosed(View panel) {
+        }
+    };
+
+    public class ViewPagerAdapter extends FragmentPagerAdapter {
+        public ViewPagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
+
+        @Override
+        public Fragment getItem(int position) {
+            switch (position) {
+                case TAB_INDEX_SPEED_DIAL:
+                    mSpeedDialFragment = new SpeedDialFragment();
+                    return mSpeedDialFragment;
+                case TAB_INDEX_RECENTS:
+                    mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL,
+                            MAX_RECENTS_ENTRIES, System.currentTimeMillis() - OLDEST_RECENTS_DATE);
+
+                    /*
+                     * Provide mViewPager as a parent viewgroup for the inflation of the footer,
+                     * to ensure that the footer view is inflated with the correct LayoutParams.
+                     * If root is null in
+                     * inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot),
+                     * the layout parameters specified in R.layout.recents_list_footer are not
+                     * correctly applied. The footer view is ultimately not attached to mViewPager.
+                     */
+                    final View viewFullHistoryFooter = getActivity().getLayoutInflater().inflate(
+                            R.layout.recents_list_footer, mViewPager, false);
+                    viewFullHistoryFooter.setOnClickListener(new OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            ((HostInterface) getActivity()).showCallHistory();
+                        }
+                    });
+                    mRecentsFragment.setFooterView(viewFullHistoryFooter);
+                    return mRecentsFragment;
+                case TAB_INDEX_ALL_CONTACTS:
+                    mAllContactsFragment = new AllContactsFragment();
+                    return mAllContactsFragment;
+            }
+            throw new IllegalStateException("No fragment at position " + position);
+        }
+
+        @Override
+        public int getCount() {
+            return TAB_INDEX_COUNT;
+        }
+
+        @Override
+        public CharSequence getPageTitle(int position) {
+            return mTabTitles[position];
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
+                this, 1);
+        final String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
+        mCallLogAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
+                new ContactInfoHelper(getActivity(), currentCountryIso), null, false);
+
+        mMergedAdapter = new ShortcutCardsAdapter(getActivity(), this, mCallLogAdapter);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        getLoaderManager().initLoader(MISSED_CALL_LOADER, null, new MissedCallLogLoaderListener());
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        final SharedPreferences prefs = getActivity().getSharedPreferences(
+                DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
+        mLastCallShortcutDate = prefs.getLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, 0);
+        mActionBar = getActivity().getActionBar();
+        fetchCalls();
+        mCallLogAdapter.setLoading(true);
+    }
+
+    @Override
+    public void onPause() {
+        // Wipe the cache to refresh the call shortcut item. This is not that expensive because
+        // it only contains one item.
+        mCallLogAdapter.invalidateCache();
+        mActionBar = null;
+        super.onPause();
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        final View parentView = inflater.inflate(R.layout.lists_fragment, container, false);
+        mViewPager = (ViewPager) parentView.findViewById(R.id.lists_pager);
+        mViewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
+        mViewPager.setAdapter(mViewPagerAdapter);
+        mViewPager.setOffscreenPageLimit(2);
+        mViewPager.setOnPageChangeListener(this);
+
+        mTabTitles = new String[TAB_INDEX_COUNT];
+        mTabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial);
+        mTabTitles[TAB_INDEX_RECENTS] = getResources().getString(R.string.tab_recents);
+        mTabTitles[TAB_INDEX_ALL_CONTACTS] = getResources().getString(R.string.tab_all_contacts);
+
+        mViewPagerTabs = (ViewPagerTabs) parentView.findViewById(R.id.lists_pager_header);
+        mViewPagerTabs.setViewPager(mViewPager);
+        addOnPageChangeListener(mViewPagerTabs);
+
+        mShortcutCardsListView = (ListView) parentView.findViewById(R.id.shortcut_card_list);
+        mShortcutCardsListView.setAdapter(mMergedAdapter);
+
+        setupPaneLayout((OverlappingPaneLayout) parentView);
+
+        return parentView;
+    }
+
+    @Override
+    public void onVoicemailStatusFetched(Cursor statusCursor) {
+        // no-op
+    }
+
+    @Override
+    public void onCallsFetched(Cursor cursor) {
+        mCallLogAdapter.setLoading(false);
+
+        // Save the date of the most recent call log item
+        if (cursor != null && cursor.moveToFirst()) {
+            mCurrentCallShortcutDate = cursor.getLong(CallLogQuery.DATE);
+        }
+
+        mCallLogAdapter.changeCursor(cursor);
+        mMergedAdapter.notifyDataSetChanged();
+    }
+
+    @Override
+    public void fetchCalls() {
+        mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL, mLastCallShortcutDate);
+    }
+
+    public void dismissShortcut(View view) {
+        mLastCallShortcutDate = mCurrentCallShortcutDate;
+        final SharedPreferences prefs = view.getContext().getSharedPreferences(
+                DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
+        prefs.edit().putLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, mLastCallShortcutDate)
+                .apply();
+        fetchCalls();
+    }
+
+    public void addOnPageChangeListener(OnPageChangeListener onPageChangeListener) {
+        if (!mOnPageChangeListeners.contains(onPageChangeListener)) {
+            mOnPageChangeListeners.add(onPageChangeListener);
+        }
+    }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+        final int count = mOnPageChangeListeners.size();
+        for (int i = 0; i < count; i++) {
+            mOnPageChangeListeners.get(i).onPageScrolled(position, positionOffset,
+                    positionOffsetPixels);
+        }
+    }
+
+    @Override
+    public void onPageSelected(int position) {
+        final int count = mOnPageChangeListeners.size();
+        for (int i = 0; i < count; i++) {
+            mOnPageChangeListeners.get(i).onPageSelected(position);
+        }
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+        final int count = mOnPageChangeListeners.size();
+        for (int i = 0; i < count; i++) {
+            mOnPageChangeListeners.get(i).onPageScrollStateChanged(state);
+        }
+    }
+
+    private void setupPaneLayout(OverlappingPaneLayout paneLayout) {
+        // TODO: Remove the notion of a capturable view. The entire view be slideable, once
+        // the framework better supports nested scrolling.
+        paneLayout.setCapturableView(mViewPagerTabs);
+        paneLayout.openPane();
+        paneLayout.setPanelSlideListener(mPanelSlideListener);
+
+        LayoutTransition transition = paneLayout.getLayoutTransition();
+        // Turns on animations for all types of layout changes so that they occur for
+        // height changes.
+        transition.enableTransitionType(LayoutTransition.CHANGING);
+    }
+}
diff --git a/src/com/android/dialer/list/OnDragDropListener.java b/src/com/android/dialer/list/OnDragDropListener.java
new file mode 100644
index 0000000..c9ef50b
--- /dev/null
+++ b/src/com/android/dialer/list/OnDragDropListener.java
@@ -0,0 +1,41 @@
+package com.android.dialer.list;
+
+
+/**
+ * Classes that want to receive callbacks in response to drag events should implement this
+ * interface.
+ */
+public interface OnDragDropListener {
+    /**
+     * Called when a drag is started.
+     * @param x X-coordinate of the drag event
+     * @param y Y-coordinate of the drag event
+     * @param view The contact tile which the drag was started on
+     */
+    public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view);
+
+    /**
+     * Called when a drag is in progress and the user moves the dragged contact to a
+     * location.
+     *
+     * @param x X-coordinate of the drag event
+     * @param y Y-coordinate of the drag event
+     * @param view Contact tile in the ListView which is currently being displaced
+     * by the dragged contact
+     */
+    public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view);
+
+    /**
+     * Called when a drag is completed (whether by dropping it somewhere or simply by dragging
+     * the contact off the screen)
+     * @param x X-coordinate of the drag event
+     * @param y Y-coordinate of the drag event
+     */
+    public void onDragFinished(int x, int y);
+
+    /**
+     * Called when a contact has been dropped on the remove view, indicating that the user
+     * wants to remove this contact.
+     */
+    public void onDroppedOnRemove();
+}
\ No newline at end of file
diff --git a/src/com/android/dialer/list/OnListFragmentScrolledListener.java b/src/com/android/dialer/list/OnListFragmentScrolledListener.java
index cc5f3cd..5ed3a64 100644
--- a/src/com/android/dialer/list/OnListFragmentScrolledListener.java
+++ b/src/com/android/dialer/list/OnListFragmentScrolledListener.java
@@ -21,4 +21,6 @@
  */
 public interface OnListFragmentScrolledListener {
     public void onListFragmentScrollStateChange(int scrollState);
+    public void onListFragmentScroll(int firstVisibleItem, int visibleItemCount,
+            int totalItemCount);
 }
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java
deleted file mode 100644
index 19abcd7..0000000
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ /dev/null
@@ -1,684 +0,0 @@
-/*
- * 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.
- */
-package com.android.dialer.list;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ArgbEvaluator;
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Loader;
-import android.content.SharedPreferences;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.CallLog;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewTreeObserver;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.RelativeLayout;
-import android.widget.RelativeLayout.LayoutParams;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.dialer.DialtactsActivity;
-import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogQuery;
-import com.android.dialer.calllog.ContactInfoHelper;
-import com.android.dialer.calllog.CallLogAdapter;
-import com.android.dialer.calllog.CallLogQueryHandler;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-import com.android.dialerbind.ObjectFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * Fragment for Phone UI's favorite screen.
- *
- * This fragment contains three kinds of contacts in one screen: "starred", "frequent", and "all"
- * contacts. To show them at once, this merges results from {@link com.android.contacts.common.list.ContactTileAdapter} and
- * {@link com.android.contacts.common.list.PhoneNumberListAdapter} into one unified list using {@link PhoneFavoriteMergedAdapter}.
- * A contact filter header is also inserted between those adapters' results.
- */
-public class PhoneFavoriteFragment extends Fragment implements OnItemClickListener,
-        CallLogQueryHandler.Listener, CallLogAdapter.CallFetcher,
-        PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener {
-
-    /**
-     * By default, the animation code assumes that all items in a list view are of the same height
-     * when animating new list items into view (e.g. from the bottom of the screen into view).
-     * This can cause incorrect translation offsets when a item that is larger or smaller than
-     * other list item is removed from the list. This key is used to provide the actual height
-     * of the removed object so that the actual translation appears correct to the user.
-     */
-    private static final long KEY_REMOVED_ITEM_HEIGHT = Long.MAX_VALUE;
-
-    private static final String TAG = PhoneFavoriteFragment.class.getSimpleName();
-    private static final boolean DEBUG = false;
-
-    private int mAnimationDuration;
-
-    /**
-     * Used with LoaderManager.
-     */
-    private static int LOADER_ID_CONTACT_TILE = 1;
-    private static int MISSED_CALL_LOADER = 2;
-
-    private static final String KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE =
-            "key_last_dismissed_call_shortcut_date";
-
-    public interface OnShowAllContactsListener {
-        public void onShowAllContacts();
-    }
-
-    public interface Listener {
-        public void onContactSelected(Uri contactUri);
-        public void onCallNumberDirectly(String phoneNumber);
-    }
-
-    private class MissedCallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
-
-        @Override
-        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
-            final Uri uri = CallLog.Calls.CONTENT_URI;
-            final String[] projection = new String[] {CallLog.Calls.TYPE};
-            final String selection = CallLog.Calls.TYPE + " = " + CallLog.Calls.MISSED_TYPE +
-                    " AND " + CallLog.Calls.IS_READ + " = 0";
-            return new CursorLoader(getActivity(), uri, projection, selection, null, null);
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor data) {
-            mCallLogAdapter.setMissedCalls(data);
-        }
-
-        @Override
-        public void onLoaderReset(Loader<Cursor> cursorLoader) {
-        }
-    }
-
-    private class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public CursorLoader onCreateLoader(int id, Bundle args) {
-            if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onCreateLoader.");
-            return ContactTileLoaderFactory.createStrequentPhoneOnlyLoader(getActivity());
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoadFinished");
-            mContactTileAdapter.setContactCursor(data);
-            setEmptyViewVisibility(mContactTileAdapter.getCount() == 0);
-        }
-
-        @Override
-        public void onLoaderReset(Loader<Cursor> loader) {
-            if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoaderReset. ");
-        }
-    }
-
-    private class ContactTileAdapterListener implements ContactTileView.Listener {
-        @Override
-        public void onContactSelected(Uri contactUri, Rect targetRect) {
-            if (mListener != null) {
-                mListener.onContactSelected(contactUri);
-            }
-        }
-
-        @Override
-        public void onCallNumberDirectly(String phoneNumber) {
-            if (mListener != null) {
-                mListener.onCallNumberDirectly(phoneNumber);
-            }
-        }
-
-        @Override
-        public int getApproximateTileWidth() {
-            return getView().getWidth() / mContactTileAdapter.getColumnCount();
-        }
-    }
-
-    private class ScrollListener implements ListView.OnScrollListener {
-        @Override
-        public void onScroll(AbsListView view,
-                int firstVisibleItem, int visibleItemCount, int totalItemCount) {
-        }
-
-        @Override
-        public void onScrollStateChanged(AbsListView view, int scrollState) {
-            mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
-        }
-    }
-
-    private final WifiWizardAdapter.WifiWizardModel mWifiWizardModel =
-            new WifiWizardAdapter.WifiWizardModel() {
-                @Override
-                public void setWifiCallState(int state) {
-                    // TODO(ihab): Implement based on real data
-                }
-
-                @Override
-                public int getWifiCallState() {
-                    // TODO(ihab): Implement based on real data
-                    return WIFI_CALL_STATE_ALWAYS;
-                }
-
-                @Override
-                public boolean shouldDisplayWifiSelection() {
-                    // TODO(ihab): Implement based on real data
-                    return true;
-                }
-            };
-
-    private Listener mListener;
-
-    private OnListFragmentScrolledListener mActivityScrollListener;
-    private OnShowAllContactsListener mShowAllContactsListener;
-    private PhoneFavoriteMergedAdapter mAdapter;
-    private PhoneFavoritesTileAdapter mContactTileAdapter;
-
-    private CallLogAdapter mCallLogAdapter;
-    private CallLogQueryHandler mCallLogQueryHandler;
-
-    private View mParentView;
-
-    private PhoneFavoriteListView mListView;
-
-    private View mShowAllContactsButton;
-    private View mShowAllContactsInEmptyViewButton;
-    private View mContactTileFrame;
-
-    private TileInteractionTeaserView mTileInteractionTeaserView;
-
-    private final HashMap<Long, Integer> mItemIdTopMap = new HashMap<Long, Integer>();
-    private final HashMap<Long, Integer> mItemIdLeftMap = new HashMap<Long, Integer>();
-
-    /**
-     * Layout used when there are no favorites.
-     */
-    private View mEmptyView;
-
-    /**
-     * Call shortcuts older than this date (persisted in shared preferences) will not show up in
-     * at the top of the screen
-     */
-    private long mLastCallShortcutDate = 0;
-
-    /**
-     * The date of the current call shortcut that is showing on screen.
-     */
-    private long mCurrentCallShortcutDate = 0;
-
-    private final ContactTileView.Listener mContactTileAdapterListener =
-            new ContactTileAdapterListener();
-    private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
-            new ContactTileLoaderListener();
-    private final ScrollListener mScrollListener = new ScrollListener();
-
-    @Override
-    public void onAttach(Activity activity) {
-        if (DEBUG) Log.d(TAG, "onAttach()");
-        super.onAttach(activity);
-
-        // Construct two base adapters which will become part of PhoneFavoriteMergedAdapter.
-        // We don't construct the resultant adapter at this moment since it requires LayoutInflater
-        // that will be available on onCreateView().
-        mContactTileAdapter = new PhoneFavoritesTileAdapter(activity, mContactTileAdapterListener,
-                this,
-                getResources().getInteger(R.integer.contact_tile_column_count_in_favorites_new),
-                1);
-        mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
-    }
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        if (DEBUG) Log.d(TAG, "onCreate()");
-        super.onCreate(savedState);
-
-        mAnimationDuration = getResources().getInteger(R.integer.fade_duration);
-        mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
-                this, 1);
-        final String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
-        mCallLogAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
-                new ContactInfoHelper(getActivity(), currentCountryIso), true, false);
-        setHasOptionsMenu(true);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        final SharedPreferences prefs = getActivity().getSharedPreferences(
-                DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
-
-        mLastCallShortcutDate = prefs.getLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, 0);
-
-        fetchCalls();
-        mCallLogAdapter.setLoading(true);
-        getLoaderManager().getLoader(LOADER_ID_CONTACT_TILE).forceLoad();
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        mParentView = inflater.inflate(R.layout.phone_favorites_fragment, container, false);
-
-        mListView = (PhoneFavoriteListView) mParentView.findViewById(R.id.contact_tile_list);
-        mListView.setItemsCanFocus(true);
-        mListView.setOnItemClickListener(this);
-        mListView.setVerticalScrollBarEnabled(false);
-        mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
-        mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
-        mListView.setOnItemSwipeListener(mContactTileAdapter);
-        mListView.setOnDragDropListener(mContactTileAdapter);
-
-        final ImageView dragShadowOverlay =
-                (ImageView) mParentView.findViewById(R.id.contact_tile_drag_shadow_overlay);
-        mListView.setDragShadowOverlay(dragShadowOverlay);
-
-        mEmptyView = mParentView.findViewById(R.id.phone_no_favorites_view);
-
-        mShowAllContactsInEmptyViewButton = mParentView.findViewById(
-                R.id.show_all_contact_button_in_nofav);
-        prepareAllContactsButton(mShowAllContactsInEmptyViewButton);
-
-        mShowAllContactsButton = inflater.inflate(R.layout.show_all_contact_button, mListView,
-                false);
-
-        prepareAllContactsButton(mShowAllContactsButton);
-
-        mContactTileFrame = mParentView.findViewById(R.id.contact_tile_frame);
-
-        mTileInteractionTeaserView = (TileInteractionTeaserView) inflater.inflate(
-                R.layout.tile_interactions_teaser_view, mListView, false);
-
-        mAdapter = new PhoneFavoriteMergedAdapter(getActivity(), this, mContactTileAdapter,
-                mCallLogAdapter, mShowAllContactsButton, mTileInteractionTeaserView,
-                mWifiWizardModel);
-
-        mTileInteractionTeaserView.setAdapter(mAdapter);
-
-        mListView.setAdapter(mAdapter);
-
-        mListView.setOnScrollListener(mScrollListener);
-        mListView.setFastScrollEnabled(false);
-        mListView.setFastScrollAlwaysVisible(false);
-
-        return mParentView;
-    }
-
-    public boolean hasFrequents() {
-        if (mContactTileAdapter == null) return false;
-        return mContactTileAdapter.getNumFrequents() > 0;
-    }
-
-    /* package */ void setEmptyViewVisibility(final boolean visible) {
-        final int previousVisibility = mEmptyView.getVisibility();
-        final int newVisibility = visible ? View.VISIBLE : View.GONE;
-
-        if (previousVisibility != newVisibility) {
-            final RelativeLayout.LayoutParams params = (LayoutParams) mContactTileFrame
-                    .getLayoutParams();
-            params.height = visible ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT;
-            mContactTileFrame.setLayoutParams(params);
-            mEmptyView.setVisibility(newVisibility);
-        }
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-
-        final Activity activity = getActivity();
-
-        try {
-            mActivityScrollListener = (OnListFragmentScrolledListener) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement OnListFragmentScrolledListener");
-        }
-
-        try {
-            mShowAllContactsListener = (OnShowAllContactsListener) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement OnShowAllContactsListener");
-        }
-
-        // Use initLoader() instead of restartLoader() to refraining unnecessary reload.
-        // This method call implicitly assures ContactTileLoaderListener's onLoadFinished() will
-        // be called, on which we'll check if "all" contacts should be reloaded again or not.
-        getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, mContactTileLoaderListener);
-        getLoaderManager().initLoader(MISSED_CALL_LOADER, null, new MissedCallLogLoaderListener());
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * This is only effective for elements provided by {@link #mContactTileAdapter}.
-     * {@link #mContactTileAdapter} has its own logic for click events.
-     */
-    @Override
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        final int contactTileAdapterCount = mContactTileAdapter.getCount();
-        if (position <= contactTileAdapterCount) {
-            Log.e(TAG, "onItemClick() event for unexpected position. "
-                    + "The position " + position + " is before \"all\" section. Ignored.");
-        }
-    }
-
-    /**
-     * Gets called when user click on the show all contacts button.
-     */
-    private void showAllContacts() {
-        mShowAllContactsListener.onShowAllContacts();
-    }
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public void onVoicemailStatusFetched(Cursor statusCursor) {
-        // no-op
-    }
-
-    @Override
-    public void onCallsFetched(Cursor cursor) {
-        animateListView();
-        mCallLogAdapter.setLoading(false);
-
-        // Save the date of the most recent call log item
-        if (cursor != null && cursor.moveToFirst()) {
-            mCurrentCallShortcutDate = cursor.getLong(CallLogQuery.DATE);
-        }
-
-        mCallLogAdapter.changeCursor(cursor);
-        mAdapter.notifyDataSetChanged();
-    }
-
-    @Override
-    public void fetchCalls() {
-        mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL, mLastCallShortcutDate);
-    }
-
-    @Override
-    public void onPause() {
-        // If there are any pending contact entries that are to be removed, remove them
-        mContactTileAdapter.removePendingContactEntry();
-        // Wipe the cache to refresh the call shortcut item. This is not that expensive because
-        // it only contains one item.
-        mCallLogAdapter.invalidateCache();
-        super.onPause();
-    }
-
-    /**
-     * Saves the current view offsets into memory
-     */
-    @SuppressWarnings("unchecked")
-    private void saveOffsets(int removedItemHeight) {
-        final int firstVisiblePosition = mListView.getFirstVisiblePosition();
-        if (DEBUG) {
-            Log.d(TAG, "Child count : " + mListView.getChildCount());
-        }
-        for (int i = 0; i < mListView.getChildCount(); i++) {
-            final View child = mListView.getChildAt(i);
-            final int position = firstVisiblePosition + i;
-            final long itemId = mAdapter.getItemId(position);
-            final int itemViewType = mAdapter.getItemViewType(position);
-            if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP) {
-                // This is a tiled row, so save horizontal offsets instead
-                saveHorizontalOffsets((ContactTileRow) child, (ArrayList<ContactEntry>)
-                        mAdapter.getItem(position));
-            }
-            if (DEBUG) {
-                Log.d(TAG, "Saving itemId: " + itemId + " for listview child " + i + " Top: "
-                        + child.getTop());
-            }
-            mItemIdTopMap.put(itemId, child.getTop());
-        }
-
-        mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight);
-    }
-
-    private void saveHorizontalOffsets(ContactTileRow row, ArrayList<ContactEntry> list) {
-        for (int i = 0; i < list.size(); i++) {
-            final View child = row.getChildAt(i);
-            final ContactEntry entry = list.get(i);
-            final long itemId = mContactTileAdapter.getAdjustedItemId(entry.id);
-            if (DEBUG) {
-                Log.d(TAG, "Saving itemId: " + itemId + " for tileview child " + i + " Left: "
-                        + child.getTop());
-            }
-            mItemIdLeftMap.put(itemId, child.getLeft());
-        }
-    }
-
-    /*
-     * Performs a animations for a row of tiles
-     */
-    private void performHorizontalAnimations(ContactTileRow row, ArrayList<ContactEntry> list,
-            long[] idsInPlace) {
-        if (mItemIdLeftMap.isEmpty()) {
-            return;
-        }
-        final AnimatorSet animSet = new AnimatorSet();
-        final ArrayList<Animator> animators = new ArrayList<Animator>();
-        for (int i = 0; i < list.size(); i++) {
-            final View child = row.getChildAt(i);
-            final ContactEntry entry = list.get(i);
-            final long itemId = mContactTileAdapter.getAdjustedItemId(entry.id);
-
-            if (containsId(idsInPlace, itemId)) {
-                animators.add(ObjectAnimator.ofFloat(
-                        child, "alpha", 0.0f, 1.0f));
-                break;
-            } else {
-                Integer startLeft = mItemIdLeftMap.get(itemId);
-                int left = child.getLeft();
-                if (startLeft != null) {
-                    if (startLeft != left) {
-                        int delta = startLeft - left;
-                        if (DEBUG) {
-                            Log.d(TAG, "Found itemId: " + itemId + " for tileview child " + i +
-                                    " Left: " + left +
-                                    " Delta: " + delta);
-                        }
-                        animators.add(ObjectAnimator.ofFloat(
-                                child, "translationX", delta, 0.0f));
-                    }
-                } else {
-                    // In case the last square row is pushed up from the non-square section.
-                    animators.add(ObjectAnimator.ofFloat(
-                            child, "translationX", left, 0.0f));
-                }
-            }
-        }
-        if (animators.size() > 0) {
-            animSet.setDuration(mAnimationDuration).playTogether(animators);
-            animSet.start();
-        }
-    }
-
-    /*
-     * Performs animations for the list view. If the list item is a row of tiles, horizontal
-     * animations will be performed instead.
-     */
-    private void animateListView(final long... idsInPlace) {
-        if (mItemIdTopMap.isEmpty()) {
-            // Don't do animations if the database is being queried for the first time and
-            // the previous item offsets have not been cached, or the user hasn't done anything
-            // (dragging, swiping etc) that requires an animation.
-            return;
-        }
-
-        final int removedItemHeight = mItemIdTopMap.get(KEY_REMOVED_ITEM_HEIGHT);
-
-        final ViewTreeObserver observer = mListView.getViewTreeObserver();
-        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
-            @SuppressWarnings("unchecked")
-            @Override
-            public boolean onPreDraw() {
-                observer.removeOnPreDrawListener(this);
-                final int firstVisiblePosition = mListView.getFirstVisiblePosition();
-                final AnimatorSet animSet = new AnimatorSet();
-                final ArrayList<Animator> animators = new ArrayList<Animator>();
-                for (int i = 0; i < mListView.getChildCount(); i++) {
-                    final View child = mListView.getChildAt(i);
-                    int position = firstVisiblePosition + i;
-                    final int itemViewType = mAdapter.getItemViewType(position);
-                    if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP) {
-                        // This is a tiled row, so perform horizontal animations instead
-                        performHorizontalAnimations((ContactTileRow) child, (
-                                ArrayList<ContactEntry>) mAdapter.getItem(position), idsInPlace);
-                    }
-
-                    final long itemId = mAdapter.getItemId(position);
-
-                    if (containsId(idsInPlace, itemId)) {
-                        animators.add(ObjectAnimator.ofFloat(
-                                child, "alpha", 0.0f, 1.0f));
-                        break;
-                    } else {
-                        Integer startTop = mItemIdTopMap.get(itemId);
-                        final int top = child.getTop();
-                        int delta = 0;
-                        if (startTop != null) {
-                            if (startTop != top) {
-                                delta = startTop - top;
-                            }
-                        } else if (!mItemIdLeftMap.containsKey(itemId)) {
-                            // Animate new views along with the others. The catch is that they did
-                            // not exist in the start state, so we must calculate their starting
-                            // position based on neighboring views.
-
-                            final int itemHeight;
-                            if (removedItemHeight == 0) {
-                                itemHeight = child.getHeight() + mListView.getDividerHeight();
-                            } else {
-                                itemHeight = removedItemHeight;
-                            }
-                            startTop = top + (i > 0 ? itemHeight : -itemHeight);
-                            delta = startTop - top;
-                        } else {
-                            // In case the first non-square row is pushed down
-                            // from the square section.
-                            animators.add(ObjectAnimator.ofFloat(
-                                    child, "alpha", 0.0f, 1.0f));
-                        }
-                        if (DEBUG) {
-                            Log.d(TAG, "Found itemId: " + itemId + " for listview child " + i +
-                                    " Top: " + top +
-                                    " Delta: " + delta);
-                        }
-
-                        if (delta != 0) {
-                            animators.add(ObjectAnimator.ofFloat(
-                                    child, "translationY", delta, 0.0f));
-                        }
-                    }
-                }
-
-                if (animators.size() > 0) {
-                    animSet.setDuration(mAnimationDuration).playTogether(animators);
-                    animSet.start();
-                }
-
-                mItemIdTopMap.clear();
-                mItemIdLeftMap.clear();
-                return true;
-            }
-        });
-    }
-
-    private boolean containsId(long[] ids, long target) {
-        // Linear search on array is fine because this is typically only 0-1 elements long
-        for (int i = 0; i < ids.length; i++) {
-            if (ids[i] == target) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void onDataSetChangedForAnimation(long... idsInPlace) {
-        animateListView(idsInPlace);
-    }
-
-    @Override
-    public void cacheOffsetsForDatasetChange() {
-        saveOffsets(0);
-    }
-
-    public void dismissShortcut(int height) {
-        saveOffsets(height);
-        mLastCallShortcutDate = mCurrentCallShortcutDate;
-        final SharedPreferences prefs = getActivity().getSharedPreferences(
-                DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
-        prefs.edit().putLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, mLastCallShortcutDate)
-                .apply();
-        fetchCalls();
-    }
-
-    /**
-     * Returns a view that is laid out and styled to look like a regular contact, with the correct
-     * click behavior (to launch the all contacts activity when it is clicked).
-     */
-    private View prepareAllContactsButton(View v) {
-        final ContactListItemView view = (ContactListItemView) v;
-        view.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                showAllContacts();
-            }
-        });
-
-        view.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);
-        final Resources resources = getResources();
-        view.setBackgroundResource(R.drawable.contact_list_item_background);
-
-        view.setPaddingRelative(
-                resources.getDimensionPixelSize(R.dimen.favorites_row_start_padding),
-                resources.getDimensionPixelSize(R.dimen.favorites_row_end_padding),
-                resources.getDimensionPixelSize(R.dimen.favorites_row_top_padding),
-                resources.getDimensionPixelSize(R.dimen.favorites_row_bottom_padding));
-
-        view.setDisplayName(resources.getString(R.string.show_all_contacts_button_text));
-        view.setDrawableResource(R.drawable.list_item_avatar_bg,
-                R.drawable.ic_menu_all_contacts_dk);
-        return view;
-    }
-}
diff --git a/src/com/android/dialer/list/PhoneFavoriteListView.java b/src/com/android/dialer/list/PhoneFavoriteListView.java
index 99979dd..4ecc1cd 100644
--- a/src/com/android/dialer/list/PhoneFavoriteListView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteListView.java
@@ -29,32 +29,20 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewConfiguration;
-import android.widget.FrameLayout;
+import android.widget.GridView;
 import android.widget.ImageView;
-import android.widget.ListView;
 
 import com.android.dialer.R;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
-import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
+import com.android.dialer.list.DragDropController.DragItemContainer;
 
 /**
- * The ListView composed of {@link ContactTileRow}.
- * This ListView handles both
- * - Swiping, which is borrowed from packages/apps/UnifiedEmail (com.android.mail.ui.Swipeable)
- * - Drag and drop
+ * Viewgroup that presents the user's speed dial contacts in a grid.
  */
-public class PhoneFavoriteListView extends ListView implements SwipeHelperCallback {
+public class PhoneFavoriteListView extends GridView implements OnDragDropListener,
+        DragItemContainer {
 
     public static final String LOG_TAG = PhoneFavoriteListView.class.getSimpleName();
 
-    private SwipeHelper mSwipeHelper;
-    private boolean mEnableSwipe = true;
-
-    private OnItemGestureListener mOnItemGestureListener;
-    private OnDragDropListener mOnDragDropListener;
-
-    private float mDensityScale;
     private float mTouchSlop;
 
     private int mTopScrollBound;
@@ -63,7 +51,7 @@
 
     private Handler mScrollHandler;
     private final long SCROLL_HANDLER_DELAY_MILLIS = 5;
-    private final int DRAG_SCROLL_PX_UNIT = 10;
+    private final int DRAG_SCROLL_PX_UNIT = 25;
 
     private boolean mIsDragScrollerRunning = false;
     private int mTouchDownForDragStartX;
@@ -71,8 +59,11 @@
 
     private Bitmap mDragShadowBitmap;
     private ImageView mDragShadowOverlay;
+    private View mDragShadowParent;
     private int mAnimationDuration;
 
+    final int[] mLocationOnScreen = new int[2];
+
     // X and Y offsets inside the item from where the user grabbed to the
     // child's left coordinate. This is used to aid in the drawing of the drag shadow.
     private int mTouchOffsetToChildLeft;
@@ -81,6 +72,8 @@
     private int mDragShadowLeft;
     private int mDragShadowTop;
 
+    private DragDropController mDragDropController = new DragDropController(this);
+
     private final float DRAG_SHADOW_ALPHA = 0.7f;
 
     /**
@@ -125,127 +118,45 @@
     public PhoneFavoriteListView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         mAnimationDuration = context.getResources().getInteger(R.integer.fade_duration);
-        mDensityScale = getResources().getDisplayMetrics().density;
         mTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop();
-        mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this,
-                mDensityScale, mTouchSlop);
-        setItemsCanFocus(true);
+        mDragDropController.addOnDragDropListener(this);
     }
 
     @Override
     protected void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
-        mDensityScale= getResources().getDisplayMetrics().density;
         mTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
-        mSwipeHelper.setDensityScale(mDensityScale);
-        mSwipeHelper.setPagingTouchSlop(mTouchSlop);
     }
 
     /**
-     * Enable swipe gestures.
+     * TODO: This is all swipe to remove code (nothing to do with drag to remove). This should
+     * be cleaned up and removed once drag to remove becomes the only way to remove contacts.
      */
-    public void enableSwipe(boolean enable) {
-        mEnableSwipe = enable;
-    }
-
-    public boolean isSwipeEnabled() {
-        return mEnableSwipe && mOnItemGestureListener.isSwipeEnabled();
-    }
-
-    public void setOnItemSwipeListener(OnItemGestureListener listener) {
-        mOnItemGestureListener = listener;
-    }
-
-    public void setOnDragDropListener(OnDragDropListener listener) {
-        mOnDragDropListener = listener;
-    }
-
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
             mTouchDownForDragStartX = (int) ev.getX();
             mTouchDownForDragStartY = (int) ev.getY();
         }
-        if (isSwipeEnabled()) {
-            return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
-        } else {
-            return super.onInterceptTouchEvent(ev);
-        }
+
+        return super.onInterceptTouchEvent(ev);
     }
 
     @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (mOnItemGestureListener != null) {
-            mOnItemGestureListener.onTouch();
-        }
-        if (isSwipeEnabled()) {
-            return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
-        } else {
-            return super.onTouchEvent(ev);
-        }
-    }
-
-    @Override
-    public View getChildAtPosition(MotionEvent ev) {
-        final View view = getViewAtPosition((int) ev.getX(), (int) ev.getY());
-        if (view != null &&
-                SwipeHelper.isSwipeable(view) &&
-                view.getVisibility() != GONE) {
-            // If this view is swipable in this listview, then return it. Otherwise
-            // return a null view, which will simply be ignored by the swipe helper.
-            return view;
-        }
-        return null;
-    }
-
-    @Override
-    public View getChildContentView(View view) {
-        return view.findViewById(R.id.contact_favorite_card);
-    }
-
-    @Override
-    public void onScroll() {}
-
-    @Override
-    public boolean canChildBeDismissed(View v) {
-        return SwipeHelper.isSwipeable(v);
-    }
-
-    @Override
-    public void onChildDismissed(final View v) {
-        if (v != null) {
-            if (mOnItemGestureListener != null) {
-                mOnItemGestureListener.onSwipe(v);
-            }
-        }
-    }
-
-    @Override
-    public void onDragCancelled(View v) {}
-
-    @Override
-    public void onBeginDrag(View v) {
-        final View tileRow = (View) v.getParent();
-
-        // We do this so the underlying ScrollView knows that it won't get
-        // the chance to intercept events anymore
-        requestDisallowInterceptTouchEvent(true);
-    }
-
-    @Override
-    public boolean dispatchDragEvent(DragEvent event) {
+    public boolean onDragEvent(DragEvent event) {
         final int action = event.getAction();
         final int eX = (int) event.getX();
         final int eY = (int) event.getY();
         switch (action) {
-            case DragEvent.ACTION_DRAG_STARTED:
-                if (!handleDragStarted(mTouchDownForDragStartX, mTouchDownForDragStartY)) {
+            case DragEvent.ACTION_DRAG_STARTED: {
+                if (!mDragDropController.handleDragStarted(eX, eY)) {
                     return false;
-                };
+                }
                 break;
+            }
             case DragEvent.ACTION_DRAG_LOCATION:
                 mLastDragY = eY;
-                handleDragHovered(eX, eY);
+                mDragDropController.handleDragHovered(this, eX, eY);
                 // Kick off {@link #mScrollHandler} if it's not started yet.
                 if (!mIsDragScrollerRunning &&
                         // And if the distance traveled while dragging exceeds the touch slop
@@ -268,18 +179,19 @@
                 mIsDragScrollerRunning = false;
                 // Either a successful drop or it's ended with out drop.
                 if (action == DragEvent.ACTION_DROP || action == DragEvent.ACTION_DRAG_ENDED) {
-                    handleDragFinished(eX, eY);
+                    mDragDropController.handleDragFinished(eX, eY, false);
                 }
                 break;
             default:
                 break;
         }
-        // This ListView will consumer the drag events on behalf of its children.
+        // This ListView will consume the drag events on behalf of its children.
         return true;
     }
 
     public void setDragShadowOverlay(ImageView overlay) {
         mDragShadowOverlay = overlay;
+        mDragShadowParent = (View) mDragShadowOverlay.getParent();
     }
 
     /**
@@ -290,7 +202,8 @@
         View child;
         for (int childIdx = 0; childIdx < count; childIdx++) {
             child = getChildAt(childIdx);
-            if (y >= child.getTop() && y <= child.getBottom()) {
+            if (y >= child.getTop() && y <= child.getBottom() && x >= child.getLeft()
+                    && x <= child.getRight()) {
                 return child;
             }
         }
@@ -303,96 +216,61 @@
         }
     }
 
-    /**
-     * @return True if the drag is started.
-     */
-    private boolean handleDragStarted(int x, int y) {
-        final View child = getViewAtPosition(x, y);
-        if (!(child instanceof ContactTileRow)) {
-            // Bail early.
-            return false;
-        }
-
-        final ContactTileRow tile = (ContactTileRow) child;
-
-        if (tile.getTileAdapter().hasPotentialRemoveEntryIndex()) {
-            return false;
-        }
-
-        final int itemIndex = tile.getItemIndex(x, y);
-        if (itemIndex != -1 && mOnDragDropListener != null) {
-            final PhoneFavoriteTileView tileView =
-                    (PhoneFavoriteTileView) tile.getViewAtPosition(x, y);
-            if (mDragShadowOverlay == null) {
-                return false;
-            }
-
-            mDragShadowOverlay.clearAnimation();
-            mDragShadowBitmap = createDraggedChildBitmap(tileView);
-            if (mDragShadowBitmap == null) {
-                return false;
-            }
-
-            if (tileView instanceof PhoneFavoriteRegularRowView) {
-                mDragShadowLeft = tile.getLeft();
-                mDragShadowTop = tile.getTop();
-            } else {
-                // Square tile is relative to the contact tile,
-                // and contact tile is relative to this list view.
-                mDragShadowLeft = tileView.getLeft() + tileView.getParentRow().getLeft();
-                mDragShadowTop = tileView.getTop() + tileView.getParentRow().getTop();
-            }
-
-            mDragShadowOverlay.setImageBitmap(mDragShadowBitmap);
-            mDragShadowOverlay.setVisibility(VISIBLE);
-            mDragShadowOverlay.setAlpha(DRAG_SHADOW_ALPHA);
-
-            mDragShadowOverlay.setX(mDragShadowLeft);
-            mDragShadowOverlay.setY(mDragShadowTop);
-
-            // x and y passed in are the coordinates of where the user has touched down, calculate
-            // the offset to the top left coordinate of the dragged child.  This will be used for
-            // drawing the drag shadow.
-            mTouchOffsetToChildLeft = x - mDragShadowLeft;
-            mTouchOffsetToChildTop = y - mDragShadowTop;
-
-            // invalidate to trigger a redraw of the drag shadow.
-            invalidate();
-
-            mOnDragDropListener.onDragStarted(itemIndex);
-        }
-
-        return true;
+    public DragDropController getDragDropController() {
+        return mDragDropController;
     }
 
-    private void handleDragHovered(int x, int y) {
+    @Override
+    public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView tileView) {
+        if (mDragShadowOverlay == null) {
+            return;
+        }
+
+        mDragShadowOverlay.clearAnimation();
+        mDragShadowBitmap = createDraggedChildBitmap(tileView);
+        if (mDragShadowBitmap == null) {
+            return;
+        }
+
+        tileView.getLocationOnScreen(mLocationOnScreen);
+        mDragShadowLeft = mLocationOnScreen[0];
+        mDragShadowTop = mLocationOnScreen[1];
+
+        // x and y are the coordinates of the on-screen touch event. Using these
+        // and the on-screen location of the tileView, calculate the difference between
+        // the position of the user's finger and the position of the tileView. These will
+        // be used to offset the location of the drag shadow so that it appears that the
+        // tileView is positioned directly under the user's finger.
+        mTouchOffsetToChildLeft = x - mDragShadowLeft;
+        mTouchOffsetToChildTop = y - mDragShadowTop;
+
+        mDragShadowParent.getLocationOnScreen(mLocationOnScreen);
+        mDragShadowLeft -= mLocationOnScreen[0];
+        mDragShadowTop -= mLocationOnScreen[1];
+
+        mDragShadowOverlay.setImageBitmap(mDragShadowBitmap);
+        mDragShadowOverlay.setVisibility(VISIBLE);
+        mDragShadowOverlay.setAlpha(DRAG_SHADOW_ALPHA);
+
+        mDragShadowOverlay.setX(mDragShadowLeft);
+        mDragShadowOverlay.setY(mDragShadowTop);
+    }
+
+    @Override
+    public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView tileView) {
         // Update the drag shadow location.
-        mDragShadowLeft = x - mTouchOffsetToChildLeft;
-        mDragShadowTop = y - mTouchOffsetToChildTop;
+        mDragShadowParent.getLocationOnScreen(mLocationOnScreen);
+        mDragShadowLeft = x - mTouchOffsetToChildLeft - mLocationOnScreen[0];
+        mDragShadowTop = y - mTouchOffsetToChildTop - mLocationOnScreen[1];
         // Draw the drag shadow at its last known location if the drag shadow exists.
         if (mDragShadowOverlay != null) {
             mDragShadowOverlay.setX(mDragShadowLeft);
             mDragShadowOverlay.setY(mDragShadowTop);
         }
-
-        final View child = getViewAtPosition(x, y);
-        if (!(child instanceof ContactTileRow)) {
-            // Bail early.
-            return;
-        }
-
-        final ContactTileRow tile = (ContactTileRow) child;
-        final int itemIndex = tile.getItemIndex(x, y);
-        if (itemIndex != -1 && mOnDragDropListener != null) {
-            mOnDragDropListener.onDragHovered(itemIndex);
-        }
     }
 
-    private void handleDragFinished(int x, int y) {
-        // Update the drag shadow location.
-        mDragShadowLeft = x - mTouchOffsetToChildLeft;
-        mDragShadowTop = y - mTouchOffsetToChildTop;
-
+    @Override
+    public void onDragFinished(int x, int y) {
         if (mDragShadowOverlay != null) {
             mDragShadowOverlay.clearAnimation();
             mDragShadowOverlay.animate().alpha(0.0f)
@@ -400,12 +278,11 @@
                     .setListener(mDragShadowOverAnimatorListener)
                     .start();
         }
-
-        if (mOnDragDropListener != null) {
-            mOnDragDropListener.onDragFinished();
-        }
     }
 
+    @Override
+    public void onDroppedOnRemove() {}
+
     private Bitmap createDraggedChildBitmap(View view) {
         view.setDrawingCacheEnabled(true);
         final Bitmap cache = view.getDrawingCache();
@@ -426,9 +303,18 @@
         return bitmap;
     }
 
-    public interface OnDragDropListener {
-        public void onDragStarted(int itemIndex);
-        public void onDragHovered(int itemIndex);
-        public void onDragFinished();
+    @Override
+    public PhoneFavoriteSquareTileView getViewForLocation(int x, int y) {
+        getLocationOnScreen(mLocationOnScreen);
+        // Calculate the X and Y coordinates of the drag event relative to the view
+        final int viewX = x - mLocationOnScreen[0];
+        final int viewY = y - mLocationOnScreen[1];
+        final View child = getViewAtPosition(viewX, viewY);
+
+        if (!(child instanceof PhoneFavoriteSquareTileView)) {
+            return null;
+        }
+
+        return (PhoneFavoriteSquareTileView) child;
     }
 }
diff --git a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java b/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
deleted file mode 100644
index 53d2ea6..0000000
--- a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.
- * Licensed to 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.list;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.database.DataSetObserver;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
-
-import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogAdapter;
-import com.android.dialer.calllog.CallLogNotificationsHelper;
-import com.android.dialer.calllog.CallLogQueryHandler;
-import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
-import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
-
-/**
- * An adapter that combines items from {@link com.android.contacts.common.list.ContactTileAdapter}
- * and {@link com.android.dialer.calllog.CallLogAdapter} into a single list.
- */
-public class PhoneFavoriteMergedAdapter extends BaseAdapter {
-
-    private class CustomDataSetObserver extends DataSetObserver {
-        @Override
-        public void onChanged() {
-            notifyDataSetChanged();
-        }
-    }
-
-    private static final String TAG = PhoneFavoriteMergedAdapter.class.getSimpleName();
-
-    private static final int TILE_INTERACTION_TEASER_VIEW_POSITION = 2;
-    private static final int TILE_INTERACTION_TEASER_VIEW_ID = -2;
-    private static final int ALL_CONTACTS_BUTTON_ITEM_ID = -1;
-    private final PhoneFavoritesTileAdapter mContactTileAdapter;
-    private final CallLogAdapter mCallLogAdapter;
-    private final WifiWizardAdapter mWifiWizardAdapter;
-    private final View mShowAllContactsButton;
-    private final PhoneFavoriteFragment mFragment;
-    private final TileInteractionTeaserView mTileInteractionTeaserView;
-
-    private final int mCallLogPadding;
-
-    private final Context mContext;
-
-    private final DataSetObserver mObserver;
-
-    private final CallLogQueryHandler mCallLogQueryHandler;
-
-    private final OnItemGestureListener mCallLogOnItemSwipeListener =
-            new OnItemGestureListener() {
-        @Override
-        public void onSwipe(View view) {
-            mCallLogQueryHandler.markNewCallsAsOld();
-            mCallLogQueryHandler.markNewVoicemailsAsOld();
-            CallLogNotificationsHelper.removeMissedCallNotifications();
-            CallLogNotificationsHelper.updateVoicemailNotifications(mContext);
-            mFragment.dismissShortcut(((View) view.getParent()).getHeight());
-        }
-
-        @Override
-        public void onTouch() {}
-
-        @Override
-        public boolean isSwipeEnabled() {
-            return true;
-        }
-    };
-
-    private final CallLogQueryHandler.Listener mCallLogQueryHandlerListener =
-            new CallLogQueryHandler.Listener() {
-        @Override
-        public void onVoicemailStatusFetched(Cursor statusCursor) {}
-
-        @Override
-        public void onCallsFetched(Cursor combinedCursor) {
-            mCallLogAdapter.invalidateCache();
-            mCallLogAdapter.changeCursor(combinedCursor);
-            mCallLogAdapter.notifyDataSetChanged();
-        }
-    };
-
-    public PhoneFavoriteMergedAdapter(Context context,
-            PhoneFavoriteFragment fragment,
-            PhoneFavoritesTileAdapter contactTileAdapter,
-            CallLogAdapter callLogAdapter,
-            View showAllContactsButton,
-            TileInteractionTeaserView tileInteractionTeaserView,
-            WifiWizardAdapter.WifiWizardModel wifiWizardModel) {
-        final Resources resources = context.getResources();
-        mContext = context;
-        mFragment = fragment;
-        mCallLogPadding = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding);
-        mContactTileAdapter = contactTileAdapter;
-        mCallLogAdapter = callLogAdapter;
-        mWifiWizardAdapter = new WifiWizardAdapter(context, wifiWizardModel);
-        mObserver = new CustomDataSetObserver();
-        mWifiWizardAdapter.registerDataSetObserver(mObserver);
-        mCallLogAdapter.registerDataSetObserver(mObserver);
-        mContactTileAdapter.registerDataSetObserver(mObserver);
-        mShowAllContactsButton = showAllContactsButton;
-        mTileInteractionTeaserView = tileInteractionTeaserView;
-        mCallLogQueryHandler = new CallLogQueryHandler(mContext.getContentResolver(),
-                mCallLogQueryHandlerListener);
-    }
-
-    @Override
-    public int getCount() {
-        if (mContactTileAdapter.getCount() > 0) {
-            return mWifiWizardAdapter.getCount() + mContactTileAdapter.getCount() +
-                    mCallLogAdapter.getCount() + 1 + getTeaserViewCount();
-        } else {
-            return mWifiWizardAdapter.getCount() + mCallLogAdapter.getCount();
-        }
-    }
-
-    @Override
-    public Object getItem(int position) {
-        if (mWifiWizardAdapter.getCount() > 0) {
-            if (position < mWifiWizardAdapter.getCount()) {
-                return mWifiWizardAdapter.getItem(position);
-            } else {
-                position -= mWifiWizardAdapter.getCount();
-            }
-        }
-
-        final int callLogAdapterCount = mCallLogAdapter.getCount();
-
-        if (callLogAdapterCount > 0) {
-            if (position < callLogAdapterCount) {
-                return mCallLogAdapter.getItem(position);
-            }
-        }
-        // Set position to the position of the actual favorite contact in the favorites adapter
-        position = getAdjustedFavoritePosition(position, callLogAdapterCount);
-
-        return mContactTileAdapter.getItem(position);
-    }
-
-    /**
-     * In order to ensure that items have stable ids (for animation purposes), we need to
-     * guarantee that every single item has a unique ID, even across data set changes.
-     *
-     * These are the ranges of IDs reserved for each item type.
-     *
-     * -(N + 4): Wi-Fi Wizard item, where N is equal to the number of call log items
-     * -(N + 3) to -3: CallLogAdapterItems, where N is equal to the number of call log items
-     * -2: Teaser
-     * -1: All contacts button
-     * 0 to (M -1): Rows of tiled contacts, where M is equal to the max rows of tiled contacts
-     * M to infinity: Rows of regular contacts. Their item id is calculated by M + contact_id,
-     * where contact_id is guaranteed to never be negative.
-     */
-    @Override
-    public long getItemId(int position) {
-        final int callLogAdapterCount = mCallLogAdapter.getCount();
-
-        if (mWifiWizardAdapter.getCount() > 0) {
-            if (position < mWifiWizardAdapter.getCount()) {
-                return - callLogAdapterCount - 4;
-            } else {
-                position -= mWifiWizardAdapter.getCount();
-            }
-        }
-
-        if (position < callLogAdapterCount) {
-            // Call log items are not animated, so reusing their position for IDs is fine.
-            return ALL_CONTACTS_BUTTON_ITEM_ID - 2 - position;
-        } else if (position == TILE_INTERACTION_TEASER_VIEW_POSITION + callLogAdapterCount &&
-                mTileInteractionTeaserView.getShouldDisplayInList()){
-            return TILE_INTERACTION_TEASER_VIEW_ID;
-        } else if (position < (callLogAdapterCount + mContactTileAdapter.getCount() +
-                getTeaserViewCount())) {
-            return mContactTileAdapter.getItemId(
-                    getAdjustedFavoritePosition(position, callLogAdapterCount));
-        } else {
-            // All contacts button
-            return ALL_CONTACTS_BUTTON_ITEM_ID;
-        }
-    }
-
-    @Override
-    public boolean hasStableIds() {
-        return true;
-    }
-
-    @Override
-    public int getViewTypeCount() {
-        return (mWifiWizardAdapter.getViewTypeCount() +             /* Enable Wifi calling */
-                mContactTileAdapter.getViewTypeCount() +            /* Favorite and frequent */
-                mCallLogAdapter.getViewTypeCount() +                /* Recent call log */
-                getTeaserViewCount() +                              /* Teaser */
-                1);                                                 /* Show all contacts button. */
-    }
-
-    @Override
-    public int getItemViewType(int position) {
-        if (mWifiWizardAdapter.getCount() > 0) {
-            if (position < mWifiWizardAdapter.getCount()) {
-                return mWifiWizardAdapter.getItemViewType(position);
-            } else {
-                position -= mWifiWizardAdapter.getCount();
-            }
-        }
-
-        final int callLogAdapterCount = mCallLogAdapter.getCount();
-
-        if (position < callLogAdapterCount) {
-            // View type of the call log adapter is the last view type of the contact tile adapter
-            // + 1
-            return mContactTileAdapter.getViewTypeCount();
-        } else if (position == TILE_INTERACTION_TEASER_VIEW_POSITION + callLogAdapterCount &&
-                mTileInteractionTeaserView.getShouldDisplayInList()) {
-            // View type of the teaser row is the last view type of the contact tile adapter + 3
-            return mContactTileAdapter.getViewTypeCount() + 2;
-        } else if (position < getCount() - mWifiWizardAdapter.getCount() - 1) {
-            return mContactTileAdapter.getItemViewType(
-                    getAdjustedFavoritePosition(position, callLogAdapterCount));
-        } else {
-            // View type of the show all contact button is the last view type of the contact tile
-            // adapter + 2
-            return mContactTileAdapter.getViewTypeCount() + 1;
-        }
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        if (mWifiWizardAdapter.getCount() > 0) {
-            if (position < mWifiWizardAdapter.getCount()) {
-                SwipeableCallLogRow wrapper = new SwipeableCallLogRow(mContext);
-                wrapper.addView(mWifiWizardAdapter.getView(position, convertView, parent));
-                wrapper.setOnItemSwipeListener(new OnItemGestureListener() {
-                    @Override
-                    public void onSwipe(View view) {}
-
-                    @Override
-                    public void onTouch() {}
-
-                    @Override
-                    public boolean isSwipeEnabled() {
-                        return false;
-                    }
-                });
-                return wrapper;
-            } else {
-                position -= mWifiWizardAdapter.getCount();
-            }
-        }
-
-        final int callLogAdapterCount = mCallLogAdapter.getCount();
-
-        if ((position == getCount() - mWifiWizardAdapter.getCount() - 1)
-                && (mContactTileAdapter.getCount() > 0)) {
-            return mShowAllContactsButton;
-        }
-
-        if (mTileInteractionTeaserView.getShouldDisplayInList())  {
-            if (position == TILE_INTERACTION_TEASER_VIEW_POSITION + callLogAdapterCount) {
-                return mTileInteractionTeaserView;
-            }
-        }
-
-        if (callLogAdapterCount > 0) {
-            if (position == 0) {
-                final SwipeableCallLogRow wrapper;
-                if (convertView == null) {
-                    wrapper = new SwipeableCallLogRow(mContext);
-                    wrapper.setOnItemSwipeListener(mCallLogOnItemSwipeListener);
-                } else {
-                    wrapper = (SwipeableCallLogRow) convertView;
-                }
-
-                // Special case wrapper view for the most recent call log item. This allows
-                // us to create a card-like effect for the more recent call log item in
-                // the PhoneFavoriteMergedAdapter, but keep the original look of the item in
-                // the CallLogAdapter.
-                final View view = mCallLogAdapter.getView(position, convertView == null ?
-                        null : wrapper.getChildAt(0), parent);
-                wrapper.removeAllViews();
-                final View callLogItem = view.findViewById(R.id.call_log_list_item);
-                // Reset the internal call log item view if it is being recycled
-                callLogItem.setTranslationX(0);
-                callLogItem.setAlpha(1);
-                wrapper.addView(view);
-                return wrapper;
-            }
-        }
-
-        // Set position to the position of the actual favorite contact in the
-        // favorites adapter
-        position = getAdjustedFavoritePosition(position, callLogAdapterCount);
-
-        // Favorites section
-        final View view = mContactTileAdapter.getView(position, convertView, parent);
-        if (position >= mContactTileAdapter.getMaxTiledRows()) {
-            final FrameLayout frameLayout = (FrameLayout) view;
-            final View child = frameLayout.getChildAt(0);
-            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
-                    FrameLayout.LayoutParams.WRAP_CONTENT,
-                    FrameLayout.LayoutParams.WRAP_CONTENT);
-            child.setLayoutParams(params);
-        }
-        return view;
-    }
-
-    @Override
-    public boolean areAllItemsEnabled() {
-        return mCallLogAdapter.areAllItemsEnabled() && mContactTileAdapter.areAllItemsEnabled();
-    }
-
-    @Override
-    public boolean isEnabled(int position) {
-        if (mWifiWizardAdapter.getCount() > 0) {
-            if (position < mWifiWizardAdapter.getCount()) {
-                return mWifiWizardAdapter.isEnabled(position);
-            } else {
-                position -= mWifiWizardAdapter.getCount();
-            }
-        }
-
-        final int callLogAdapterCount = mCallLogAdapter.getCount();
-        if (position < callLogAdapterCount) {
-            return mCallLogAdapter.isEnabled(position);
-        } else { // For favorites section
-            return mContactTileAdapter.isEnabled(
-                    getAdjustedFavoritePosition(position, callLogAdapterCount));
-        }
-    }
-
-    private int getAdjustedFavoritePosition(int position, int callLogAdapterCount) {
-        if (position - callLogAdapterCount > TILE_INTERACTION_TEASER_VIEW_POSITION &&
-                mTileInteractionTeaserView.getShouldDisplayInList()) {
-            return position - callLogAdapterCount - 1;
-        } else {
-            return position - callLogAdapterCount;
-        }
-    }
-
-    private int getTeaserViewCount() {
-        return (mContactTileAdapter.getCount() > TILE_INTERACTION_TEASER_VIEW_POSITION &&
-                mTileInteractionTeaserView.getShouldDisplayInList() ? 1 : 0);
-    }
-
-    /**
-     * The swipeable call log row.
-     * See also {@link PhoneFavoritesTileAdapter.ContactTileRow}.
-     */
-    private class SwipeableCallLogRow extends FrameLayout implements SwipeHelperCallback {
-        private SwipeHelper mSwipeHelper;
-        private OnItemGestureListener mOnItemSwipeListener;
-
-        public SwipeableCallLogRow(Context context) {
-            super(context);
-            final float densityScale = getResources().getDisplayMetrics().density;
-            final float pagingTouchSlop = ViewConfiguration.get(context)
-                    .getScaledPagingTouchSlop();
-            mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this,
-                    densityScale, pagingTouchSlop);
-        }
-
-        @Override
-        public void addView(View view) {
-            view.setBackgroundResource(R.drawable.dialer_recent_card_bg);
-
-            final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
-                    FrameLayout.LayoutParams.MATCH_PARENT,
-                    FrameLayout.LayoutParams.WRAP_CONTENT);
-            params.setMargins(mCallLogPadding, mCallLogPadding, mCallLogPadding, mCallLogPadding);
-            view.setLayoutParams(params);
-
-            super.addView(view);
-        }
-
-        @Override
-        public View getChildAtPosition(MotionEvent ev) {
-            return getChildCount() > 0 ? getChildAt(0) : null;
-        }
-
-        @Override
-        public View getChildContentView(View v) {
-            return v.findViewById(R.id.call_log_list_item);
-        }
-
-        @Override
-        public void onScroll() {}
-
-        @Override
-        public boolean canChildBeDismissed(View v) {
-            return true;
-        }
-
-        @Override
-        public void onBeginDrag(View v) {
-            // We do this so the underlying ScrollView knows that it won't get
-            // the chance to intercept events anymore
-            requestDisallowInterceptTouchEvent(true);
-        }
-
-        @Override
-        public void onChildDismissed(View v) {
-            if (v != null && mOnItemSwipeListener != null) {
-                mOnItemSwipeListener.onSwipe(v);
-            }
-        }
-
-        @Override
-        public void onDragCancelled(View v) {}
-
-        @Override
-        public boolean onInterceptTouchEvent(MotionEvent ev) {
-            if (mSwipeHelper != null) {
-                return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
-            } else {
-                return super.onInterceptTouchEvent(ev);
-            }
-        }
-
-        @Override
-        public boolean onTouchEvent(MotionEvent ev) {
-            if (mSwipeHelper != null) {
-                return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
-            } else {
-                return super.onTouchEvent(ev);
-            }
-        }
-
-        public void setOnItemSwipeListener(OnItemGestureListener listener) {
-            mOnItemSwipeListener = listener;
-        }
-    }
-}
diff --git a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java b/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
deleted file mode 100644
index 91b09d7..0000000
--- a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
+++ /dev/null
@@ -1,73 +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.list;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.android.contacts.common.util.ViewUtil;
-import com.android.dialer.R;
-
-public class PhoneFavoriteRegularRowView extends PhoneFavoriteTileView {
-    private static final String TAG = PhoneFavoriteRegularRowView.class.getSimpleName();
-    private static final boolean DEBUG = false;
-
-    public PhoneFavoriteRegularRowView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        final View favoriteContactCard = findViewById(R.id.contact_favorite_card);
-
-        final int rowPaddingStart;
-        final int rowPaddingEnd;
-        final int rowPaddingTop;
-        final int rowPaddingBottom;
-
-        final Resources resources = getResources();
-        rowPaddingStart = resources.getDimensionPixelSize(
-                R.dimen.favorites_row_start_padding);
-        rowPaddingEnd = resources.getDimensionPixelSize(
-                R.dimen.favorites_row_end_padding);
-        rowPaddingTop = resources.getDimensionPixelSize(
-                R.dimen.favorites_row_top_padding);
-        rowPaddingBottom = resources.getDimensionPixelSize(
-                R.dimen.favorites_row_bottom_padding);
-
-        favoriteContactCard.setBackgroundResource(R.drawable.contact_list_item_background);
-
-        favoriteContactCard.setPaddingRelative(rowPaddingStart, rowPaddingTop, rowPaddingEnd,
-                rowPaddingBottom);
-
-        final View quickContactBadge = findViewById(R.id.contact_tile_quick);
-        quickContactBadge.setOnLongClickListener(new OnLongClickListener() {
-            @Override
-            public boolean onLongClick(View v) {
-                return PhoneFavoriteRegularRowView.this.performLongClick();
-            }
-        });
-    }
-
-    @Override
-    protected int getApproximateImageSize() {
-        return ViewUtil.getConstantPreLayoutWidth(getQuickContact());
-    }
-}
diff --git a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
index 85e7216..0520ab4 100644
--- a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.provider.ContactsContract.QuickContact;
-import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.ImageButton;
@@ -26,22 +25,23 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.list.ContactEntry;
 
-import java.util.regex.Pattern;
-
 /**
- * Displays the contact's picture overlayed with their name
- * in a perfect square. It also has an additional touch target for a secondary action.
+ * Displays the contact's picture overlaid with their name and number type in a tile.
  */
 public class PhoneFavoriteSquareTileView extends PhoneFavoriteTileView {
     private static final String TAG = PhoneFavoriteSquareTileView.class.getSimpleName();
+
+    private final float mHeightToWidthRatio;
+
     private ImageButton mSecondaryButton;
 
-    // TODO: Use a more expansive name token separator if needed. For now it should be fine to
-    // not split by dashes, underscore etc.
-    private static final Pattern NAME_TOKEN_SEPARATOR_PATTERN = Pattern.compile("\\s+");
+    private ContactEntry mContactEntry;
 
     public PhoneFavoriteSquareTileView(Context context, AttributeSet attrs) {
         super(context, attrs);
+
+        mHeightToWidthRatio = getResources().getFraction(
+                R.dimen.contact_tile_height_to_width_ratio, 1, 1);
     }
 
     @Override
@@ -54,7 +54,7 @@
     @Override
     protected int getApproximateImageSize() {
         // The picture is the full size of the tile (minus some padding, but we can be generous)
-        return mListener.getApproximateTileWidth();
+        return getWidth();
     }
 
     private void launchQuickContact() {
@@ -63,35 +63,34 @@
     }
 
     @Override
-    protected String getNameForView(String name) {
-        if (TextUtils.isEmpty(name)) return name;
-        final String[] tokens = NAME_TOKEN_SEPARATOR_PATTERN.split(name, 2);
-        if (tokens.length < 1) return name;
-        return tokens[0];
-    }
-
-    @Override
     public void loadFromContact(ContactEntry entry) {
         super.loadFromContact(entry);
         if (entry != null) {
-            final boolean contactIsFavorite = entry.isFavorite;
-            mSecondaryButton.setVisibility(contactIsFavorite ? GONE : VISIBLE);
-
-            if (contactIsFavorite) {
-                mStarView.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        launchQuickContact();
-                    }
-                });
-            } else {
-                mSecondaryButton.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        launchQuickContact();
-                    }
-                });
-            }
+            mSecondaryButton.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    launchQuickContact();
+                }
+            });
         }
+        mContactEntry = entry;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final int width = MeasureSpec.getSize(widthMeasureSpec);
+        final int height = (int) (mHeightToWidthRatio * width);
+        final int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            getChildAt(i).measure(
+                    MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
+                    );
+        }
+        setMeasuredDimension(width, height);
+    }
+
+    public ContactEntry getContactEntry() {
+        return mContactEntry;
     }
 }
diff --git a/src/com/android/dialer/list/PhoneFavoriteTileView.java b/src/com/android/dialer/list/PhoneFavoriteTileView.java
index ecf5616..862952d 100644
--- a/src/com/android/dialer/list/PhoneFavoriteTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteTileView.java
@@ -16,26 +16,19 @@
  */
 package com.android.dialer.list;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
 import android.content.ClipData;
 import android.content.Context;
 import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.util.Log;
-import android.view.GestureDetector;
-import android.view.MotionEvent;
 import android.view.View;
 import android.widget.ImageView;
 
+import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.MoreContactUtils;
+import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.list.ContactEntry;
 import com.android.contacts.common.list.ContactTileView;
 import com.android.dialer.R;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ViewTypes;
 
 /**
  * A light version of the {@link com.android.contacts.common.list.ContactTileView} that is used in
@@ -49,71 +42,37 @@
     private static final String TAG = PhoneFavoriteTileView.class.getSimpleName();
     private static final boolean DEBUG = false;
 
-    /** Length of all animations in miniseconds. */
-    private int mAnimationDuration;
+    // These parameters instruct the photo manager to display the default image/letter at 70% of
+    // its normal size, and vertically offset upwards 14% towards the top of the letter tile, to
+    // make room for the contact name and number label at the bottom of the image.
+    private static final float DEFAULT_IMAGE_LETTER_OFFSET = -0.14f;
+    private static final float DEFAULT_IMAGE_LETTER_SCALE = 0.70f;
 
-    /** The view that holds the front layer of the favorite contact card. */
-    private View mFavoriteContactCard;
-    /** The view that holds the background layer of the removal dialogue. */
-    private View mRemovalDialogue;
-    /** Undo button for undoing favorite removal. */
-    private View mUndoRemovalButton;
-    /** The view that holds the list view row. */
-    protected ContactTileRow mParentRow;
-    /** The view that indicates whether the contact is a favorate. */
-    protected ImageView mStarView;
+    /** View that contains the transparent shadow that is overlaid on top of the contact image. */
+    private View mShadowOverlay;
 
     /** Users' most frequent phone number. */
     private String mPhoneNumberString;
 
-    /** Custom gesture detector.*/
-    protected GestureDetector mGestureDetector;
-
     // Dummy clip data object that is attached to drag shadows so that text views
     // don't crash with an NPE if the drag shadow is released in their bounds
     private static final ClipData EMPTY_CLIP_DATA = ClipData.newPlainText("", "");
 
     public PhoneFavoriteTileView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        mAnimationDuration = context.getResources().getInteger(R.integer.fade_duration);
-    }
-
-    public ContactTileRow getParentRow() {
-        return mParentRow;
     }
 
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mFavoriteContactCard = findViewById(com.android.dialer.R.id.contact_favorite_card);
-        mRemovalDialogue = findViewById(com.android.dialer.R.id.favorite_remove_dialogue);
-        mUndoRemovalButton = findViewById(com.android.dialer.R.id
-                .favorite_remove_undo_button);
-        mStarView = (ImageView) findViewById(com.android.dialer.R.id.contact_favorite_star);
-
-        mUndoRemovalButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                undoRemove();
-            }
-        });
+        mShadowOverlay = findViewById(R.id.shadow_overlay);
 
         setOnLongClickListener(new OnLongClickListener() {
             @Override
             public boolean onLongClick(View v) {
                 final PhoneFavoriteTileView view = (PhoneFavoriteTileView) v;
                 // NOTE The drag shadow is handled in the ListView.
-                if (view instanceof PhoneFavoriteRegularRowView) {
-                    final ContactTileRow parent = view.getParentRow();
-                    // If the view is regular row, start drag the row view.
-                    // Drag is not available for the item exceeds the PIN_LIMIT.
-                    if (parent.getRegularRowItemIndex() < PhoneFavoritesTileAdapter.PIN_LIMIT) {
-                        parent.startDrag(EMPTY_CLIP_DATA, new View.DragShadowBuilder(), null, 0);
-                    }
-                } else {
-                    // If the view is a tile view, start drag the tile.
-                    view.startDrag(EMPTY_CLIP_DATA, new View.DragShadowBuilder(), null, 0);
-                }
+                view.startDrag(EMPTY_CLIP_DATA, new View.DragShadowBuilder(), null, 0);
                 return true;
             }
         });
@@ -122,98 +81,25 @@
     @Override
     public void loadFromContact(ContactEntry entry) {
         super.loadFromContact(entry);
-        mPhoneNumberString = null; // ... in case we're reusing the view
+        // Set phone number to null in case we're reusing the view.
+        mPhoneNumberString = null;
         if (entry != null) {
-            // Grab the phone-number to call directly... see {@link onClick()}
+            // Grab the phone-number to call directly. See {@link onClick()}.
             mPhoneNumberString = entry.phoneNumber;
 
-            mStarView.setVisibility(entry.isFavorite ? VISIBLE : GONE);
             // If this is a blank entry, don't show anything.
-            // TODO krelease:Just hide the view for now. For this to truly look like an empty row
+            // TODO krelease: Just hide the view for now. For this to truly look like an empty row
             // the entire ContactTileRow needs to be hidden.
             if (entry == ContactEntry.BLANK_ENTRY) {
                 setVisibility(View.INVISIBLE);
             } else {
+                final ImageView starIcon = (ImageView) findViewById(R.id.contact_star_icon);
+                starIcon.setVisibility(entry.isFavorite ? View.VISIBLE : View.GONE);
                 setVisibility(View.VISIBLE);
             }
         }
     }
 
-    public void displayRemovalDialog() {
-        mRemovalDialogue.setVisibility(VISIBLE);
-        mRemovalDialogue.setAlpha(0f);
-        final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mRemovalDialogue, "alpha",
-                1.f).setDuration(mAnimationDuration);
-
-        fadeIn.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                mParentRow.setHasTransientState(true);
-            };
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mParentRow.setHasTransientState(false);
-            }
-        });
-        fadeIn.start();
-    }
-
-    /**
-     * Signals the user wants to undo removing the favorite contact.
-     */
-    public void undoRemove() {
-        // Makes the removal dialogue invisible.
-        mRemovalDialogue.setAlpha(0.0f);
-        mRemovalDialogue.setVisibility(GONE);
-
-        // Animates back the favorite contact card.
-        final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mFavoriteContactCard, "alpha", 1.f).
-                setDuration(mAnimationDuration);
-        final ObjectAnimator moveBack = ObjectAnimator.ofFloat(mFavoriteContactCard, "translationX",
-                0.f).setDuration(mAnimationDuration);
-
-        final AnimatorSet animSet = new AnimatorSet();
-
-        animSet.playTogether(fadeIn, moveBack);
-
-        animSet.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                mParentRow.setHasTransientState(true);
-            }
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (mParentRow.getItemViewType() == ViewTypes.FREQUENT) {
-                    SwipeHelper.setSwipeable(mParentRow, true);
-                } else {
-                    SwipeHelper.setSwipeable(PhoneFavoriteTileView.this, true);
-                }
-                mParentRow.setHasTransientState(false);
-            }
-        });
-        animSet.start();
-        // Signals the PhoneFavoritesTileAdapter to undo the potential delete.
-        mParentRow.getTileAdapter().undoPotentialRemoveEntryIndex();
-    }
-
-    /**
-     * Sets up the favorite contact card.
-     */
-    public void setupFavoriteContactCard() {
-        if (mRemovalDialogue != null) {
-            mRemovalDialogue.setVisibility(GONE);
-            mRemovalDialogue.setAlpha(0.f);
-        }
-        mFavoriteContactCard.setAlpha(1.0f);
-        mFavoriteContactCard.setTranslationX(0.f);
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        mParentRow = (ContactTileRow) getParent();
-    }
-
     @Override
     protected boolean isDarkTheme() {
         return false;
@@ -224,8 +110,9 @@
         return new OnClickListener() {
             @Override
             public void onClick(View v) {
-                // When the removal dialog is present, don't allow a click to call
-                if (mListener == null || mRemovalDialogue.isShown()) return;
+                if (mListener == null) {
+                    return;
+                }
                 if (TextUtils.isEmpty(mPhoneNumberString)) {
                     // Copy "superclass" implementation
                     mListener.onContactSelected(getLookupUri(), MoreContactUtils
@@ -240,4 +127,18 @@
             }
         };
     }
+
+    @Override
+    protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
+        return new DefaultImageRequest(displayName, lookupKey, ContactPhotoManager.TYPE_DEFAULT,
+                DEFAULT_IMAGE_LETTER_SCALE, DEFAULT_IMAGE_LETTER_OFFSET, false);
+    }
+
+    @Override
+    protected void configureViewForImage(boolean isDefaultImage) {
+        // Hide the shadow overlay if the image is a default image (i.e. colored letter tile)
+        if (mShadowOverlay != null) {
+            mShadowOverlay.setVisibility(isDefaultImage ? View.GONE : View.VISIBLE);
+        }
+    }
 }
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 3680753..c4ff0b0 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -15,7 +15,9 @@
  */
 package com.android.dialer.list;
 
-import android.animation.ObjectAnimator;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ComparisonChain;
+
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
@@ -28,9 +30,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.LongSparseArray;
-import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.FrameLayout;
@@ -41,11 +41,6 @@
 import com.android.contacts.common.list.ContactEntry;
 import com.android.contacts.common.list.ContactTileAdapter.DisplayType;
 import com.android.contacts.common.list.ContactTileView;
-import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
-import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ComparisonChain;
 
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -55,16 +50,15 @@
 
 /**
  * Also allows for a configurable number of columns as well as a maximum row of tiled contacts.
- *
- * This adapter has been rewritten to only support a maximum of one row for favorites.
- *
  */
 public class PhoneFavoritesTileAdapter extends BaseAdapter implements
-        SwipeHelper.OnItemGestureListener, PhoneFavoriteListView.OnDragDropListener {
+        OnDragDropListener {
     private static final String TAG = PhoneFavoritesTileAdapter.class.getSimpleName();
     private static final boolean DEBUG = false;
 
-    public static final int ROW_LIMIT_DEFAULT = 1;
+    public static final int NO_ROW_LIMIT = -1;
+
+    public static final int ROW_LIMIT_DEFAULT = NO_ROW_LIMIT;
 
     private ContactTileView.Listener mListener;
     private OnDataSetChangedForAnimationListener mDataSetChangedListener;
@@ -82,20 +76,14 @@
     private int mDropEntryIndex = -1;
     /** New position of the temporarily entered contact in the cache. */
     private int mDragEnteredEntryIndex = -1;
-    /** Position of the contact pending removal. */
-    private int mPotentialRemoveEntryIndex = -1;
-    private long mIdToKeepInPlace = -1;
 
     private boolean mAwaitingRemove = false;
+    private boolean mDelayCursorUpdates = false;
 
     private ContactPhotoManager mPhotoManager;
     protected int mNumFrequents;
     protected int mNumStarred;
 
-    protected int mColumnCount;
-    private int mMaxTiledRows = ROW_LIMIT_DEFAULT;
-    private int mStarredIndex;
-
     protected int mIdIndex;
     protected int mLookupIndex;
     protected int mPhotoUriIndex;
@@ -107,11 +95,10 @@
     private int mPhoneNumberTypeIndex;
     private int mPhoneNumberLabelIndex;
     private int mIsDefaultNumberIndex;
+    private int mStarredIndex;
     protected int mPinnedIndex;
     protected int mContactIdIndex;
 
-    private final int mPaddingInPixels;
-
     /** Indicates whether a drag is in process. */
     private boolean mInDragging = false;
 
@@ -142,19 +129,14 @@
     };
 
     public PhoneFavoritesTileAdapter(Context context, ContactTileView.Listener listener,
-            OnDataSetChangedForAnimationListener dataSetChangedListener,
-            int numCols, int maxTiledRows) {
+            OnDataSetChangedForAnimationListener dataSetChangedListener) {
         mDataSetChangedListener = dataSetChangedListener;
         mListener = listener;
         mContext = context;
         mResources = context.getResources();
-        mColumnCount = numCols;
         mNumFrequents = 0;
-        mMaxTiledRows = maxTiledRows;
         mContactEntries = new ArrayList<ContactEntry>();
-        // Converting padding in dips to padding in pixels
-        mPaddingInPixels = mContext.getResources()
-                .getDimensionPixelSize(R.dimen.contact_tile_divider_padding);
+
 
         bindColumnIndices();
     }
@@ -163,20 +145,13 @@
         mPhotoManager = photoLoader;
     }
 
-    public void setMaxRowCount(int maxRows) {
-        mMaxTiledRows = maxRows;
-    }
-
-    public void setColumnCount(int columnCount) {
-        mColumnCount = columnCount;
-    }
-
     /**
      * Indicates whether a drag is in process.
      *
      * @param inDragging Boolean variable indicating whether there is a drag in process.
      */
     public void setInDragging(boolean inDragging) {
+        mDelayCursorUpdates = inDragging;
         mInDragging = inDragging;
     }
 
@@ -223,7 +198,7 @@
      * Else use {@link ContactTileLoaderFactory}
      */
     public void setContactCursor(Cursor cursor) {
-        if (cursor != null && !cursor.isClosed()) {
+        if (!mDelayCursorUpdates && cursor != null && !cursor.isClosed()) {
             mNumStarred = getNumStarredContacts(cursor);
             if (mAwaitingRemove) {
                 mDataSetChangedListener.cacheOffsetsForDatasetChange();
@@ -234,12 +209,7 @@
             // cause a refresh of any views that rely on this data
             notifyDataSetChanged();
             // about to start redraw
-            if (mIdToKeepInPlace != -1) {
-                mDataSetChangedListener.onDataSetChangedForAnimation(mIdToKeepInPlace);
-            } else {
-                mDataSetChangedListener.onDataSetChangedForAnimation();
-            }
-            mIdToKeepInPlace = -1;
+            mDataSetChangedListener.onDataSetChangedForAnimation();
         }
     }
 
@@ -295,7 +265,8 @@
             contact.name = (!TextUtils.isEmpty(name)) ? name :
                     mResources.getString(R.string.missing_name);
             contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
-            contact.lookupKey = ContentUris.withAppendedId(
+            contact.lookupKey = lookupKey;
+            contact.lookupUri = ContentUris.withAppendedId(
                     Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
             contact.isFavorite = isStarred;
             contact.isDefaultNumber = isDefaultNumber;
@@ -342,17 +313,6 @@
     }
 
     /**
-     * Loads a contact from the cached list.
-     *
-     * @param position Position of the Contact.
-     * @return Contact at the requested position.
-     */
-    protected ContactEntry getContactEntryFromCache(int position) {
-        if (mContactEntries.size() <= position) return null;
-        return mContactEntries.get(position);
-    }
-
-    /**
      * Returns the number of frequents that will be displayed in the list.
      */
     public int getNumFrequents() {
@@ -361,46 +321,11 @@
 
     @Override
     public int getCount() {
-        if (mContactEntries == null || mContactEntries.isEmpty()) {
+        if (mContactEntries == null) {
             return 0;
         }
 
-        int total = mContactEntries.size();
-        // The number of contacts that don't show up as tiles
-        final int nonTiledRows = Math.max(0, total - getMaxContactsInTiles());
-        // The number of tiled rows
-        final int tiledRows = getRowCount(total - nonTiledRows);
-        return nonTiledRows + tiledRows;
-    }
-
-    public int getMaxTiledRows() {
-        return mMaxTiledRows;
-    }
-
-    /**
-     * Returns the number of rows required to show the provided number of entries
-     * with the current number of columns.
-     */
-    protected int getRowCount(int entryCount) {
-        if (entryCount == 0) return 0;
-        final int nonLimitedRows = ((entryCount - 1) / mColumnCount) + 1;
-        return Math.min(mMaxTiledRows, nonLimitedRows);
-    }
-
-    private int getMaxContactsInTiles() {
-        return mColumnCount * mMaxTiledRows;
-    }
-
-    public int getRowIndex(int entryIndex) {
-        if (entryIndex < mMaxTiledRows * mColumnCount) {
-            return entryIndex / mColumnCount;
-        } else {
-            return entryIndex - mMaxTiledRows * mColumnCount + mMaxTiledRows;
-        }
-    }
-
-    public int getColumnCount() {
-        return mColumnCount;
+        return mContactEntries.size();
     }
 
     /**
@@ -408,44 +333,8 @@
      * on the row for the given position.
      */
     @Override
-    public ArrayList<ContactEntry> getItem(int position) {
-        ArrayList<ContactEntry> resultList = new ArrayList<ContactEntry>(mColumnCount);
-
-        final int entryIndex = getFirstContactEntryIndexForPosition(position);
-
-        final int viewType = getItemViewType(position);
-
-        final int columnCount;
-        if (viewType == ViewTypes.TOP) {
-            columnCount = mColumnCount;
-        } else {
-            columnCount = 1;
-        }
-
-        for (int i = 0; i < columnCount; i++) {
-            final ContactEntry entry = getContactEntryFromCache(entryIndex + i);
-            if (entry == null) break; // less than mColumnCount contacts
-            resultList.add(entry);
-        }
-
-        return resultList;
-    }
-
-    /*
-     * Given a position in the adapter, returns the index of the first contact entry that is to be
-     * in that row.
-     */
-    private int getFirstContactEntryIndexForPosition(int position) {
-        final int maxContactsInTiles = getMaxContactsInTiles();
-        if (position < getRowCount(maxContactsInTiles)) {
-            // Contacts that appear as tiles
-            return position * mColumnCount;
-        } else {
-            // Contacts that appear as rows
-            // The actual position of the contact in the cursor is simply total the number of
-            // tiled contacts + the given position
-            return maxContactsInTiles + position - mMaxTiledRows;
-        }
+    public ContactEntry getItem(int position) {
+        return mContactEntries.get(position);
     }
 
     /**
@@ -457,18 +346,7 @@
      */
     @Override
     public long getItemId(int position) {
-        if (getItemViewType(position) == ViewTypes.FREQUENT) {
-            return getAdjustedItemId(getItem(position).get(0).id);
-        } else {
-            return position;
-        }
-    }
-
-    /**
-     * Calculates the stable itemId for a particular entry based on its contactID
-     */
-    public long getAdjustedItemId(long id) {
-        return mMaxTiledRows + id;
+        return getItem(position).id;
     }
 
     @Override
@@ -477,9 +355,7 @@
     }
 
     @Override
-
     public boolean areAllItemsEnabled() {
-        // No dividers, so all items are enabled.
         return true;
     }
 
@@ -504,34 +380,22 @@
 
         int itemViewType = getItemViewType(position);
 
-        ContactTileRow contactTileRowView = null;
+        PhoneFavoriteTileView tileView = null;
 
-        if (convertView instanceof  ContactTileRow) {
-            contactTileRowView  = (ContactTileRow) convertView;
+        if (convertView instanceof PhoneFavoriteTileView) {
+            tileView  = (PhoneFavoriteTileView) convertView;
         }
 
-        ArrayList<ContactEntry> contactList = getItem(position);
-
-        if (contactTileRowView == null) {
-            // Creating new row if needed
-            contactTileRowView = new ContactTileRow(mContext, itemViewType, position);
+        if (tileView == null) {
+            tileView = (PhoneFavoriteTileView) View.inflate(mContext,
+                    R.layout.phone_favorite_tile_view, null);
         }
-
-        contactTileRowView.configureRow(contactList, position, position == getCount() - 1);
-
-        return contactTileRowView;
+        tileView.setPhotoManager(mPhotoManager);
+        tileView.setListener(mListener);
+        tileView.loadFromContact(getItem(position));
+        return tileView;
     }
 
-    private int getLayoutResourceId(int viewType) {
-        switch (viewType) {
-            case ViewTypes.FREQUENT:
-                return R.layout.phone_favorite_regular_row_view;
-            case ViewTypes.TOP:
-                return R.layout.phone_favorite_tile_view;
-            default:
-                throw new IllegalArgumentException("Unrecognized viewType " + viewType);
-        }
-    }
     @Override
     public int getViewTypeCount() {
         return ViewTypes.COUNT;
@@ -539,11 +403,7 @@
 
     @Override
     public int getItemViewType(int position) {
-        if (position < getRowCount(getMaxContactsInTiles())) {
-            return ViewTypes.TOP;
-        } else {
-            return ViewTypes.FREQUENT;
-        }
+        return ViewTypes.TILE;
     }
 
     /**
@@ -601,7 +461,6 @@
                 // populated with the dragged ContactEntry at the correct spot.
                 mDropEntryIndex = mDragEnteredEntryIndex;
                 mContactEntries.set(mDropEntryIndex, mDraggedEntry);
-                mIdToKeepInPlace = getAdjustedItemId(mDraggedEntry.id);
                 mDataSetChangedListener.cacheOffsetsForDatasetChange();
                 changed = true;
             } else if (isIndexInBound(mDraggedEntryIndex)) {
@@ -637,44 +496,6 @@
     }
 
     /**
-     * Sets an item to for pending removal. If the user does not click the undo button, the item
-     * will be removed at the next interaction.
-     *
-     * @param index Index of the item to be removed.
-     */
-    public void setPotentialRemoveEntryIndex(int index) {
-        mPotentialRemoveEntryIndex = index;
-    }
-
-    /**
-     * Removes a contact entry from the list.
-     *
-     * @return True is an item is removed. False is there is no item to be removed.
-     */
-    public boolean removePendingContactEntry() {
-        boolean removed = false;
-        if (isIndexInBound(mPotentialRemoveEntryIndex)) {
-            final ContactEntry entry = mContactEntries.get(mPotentialRemoveEntryIndex);
-            unstarAndUnpinContact(entry.lookupKey);
-            removed = true;
-            mAwaitingRemove = true;
-        }
-        cleanTempVariables();
-        return removed;
-    }
-
-    /**
-     * Resets the item for pending removal.
-     */
-    public void undoPotentialRemoveEntryIndex() {
-        mPotentialRemoveEntryIndex = -1;
-    }
-
-    public boolean hasPotentialRemoveEntryIndex() {
-        return isIndexInBound(mPotentialRemoveEntryIndex);
-    }
-
-    /**
      * Clears all temporary variables at a new interaction.
      */
     public void cleanTempVariables() {
@@ -682,387 +503,12 @@
         mDropEntryIndex = -1;
         mDragEnteredEntryIndex = -1;
         mDraggedEntry = null;
-        mPotentialRemoveEntryIndex = -1;
     }
 
     /**
-     * Acts as a row item composed of {@link ContactTileView}
-     *
-     */
-    public class ContactTileRow extends FrameLayout implements SwipeHelperCallback {
-        public static final int CONTACT_ENTRY_INDEX_TAG = R.id.contact_entry_index_tag;
-
-        private int mItemViewType;
-        private int mLayoutResId;
-        private final int mRowPaddingStart;
-        private final int mRowPaddingEnd;
-        private final int mRowPaddingTop;
-        private final int mRowPaddingBottom;
-        private int mPosition;
-        private SwipeHelper mSwipeHelper;
-        private OnItemGestureListener mOnItemSwipeListener;
-
-        public ContactTileRow(Context context, int itemViewType, int position) {
-            super(context);
-            mItemViewType = itemViewType;
-            mLayoutResId = getLayoutResourceId(mItemViewType);
-            mPosition = position;
-
-            final Resources resources = mContext.getResources();
-
-            if (mItemViewType == ViewTypes.TOP) {
-                // For tiled views, we still want padding to be set on the ContactTileRow.
-                // Otherwise the padding would be set around each of the tiles, which we don't want
-                mRowPaddingTop = resources.getDimensionPixelSize(
-                        R.dimen.favorites_row_top_padding);
-                mRowPaddingBottom = resources.getDimensionPixelSize(
-                        R.dimen.favorites_row_bottom_padding);
-                mRowPaddingStart = resources.getDimensionPixelSize(
-                        R.dimen.favorites_row_start_padding);
-                mRowPaddingEnd = resources.getDimensionPixelSize(
-                        R.dimen.favorites_row_end_padding);
-
-                setBackgroundResource(R.drawable.bottom_border_background);
-            } else {
-                // For row views, padding is set on the view itself.
-                mRowPaddingTop = 0;
-                mRowPaddingBottom = 0;
-                mRowPaddingStart = 0;
-                mRowPaddingEnd = 0;
-            }
-
-            setPaddingRelative(mRowPaddingStart, mRowPaddingTop, mRowPaddingEnd,
-                    mRowPaddingBottom);
-
-            // Remove row (but not children) from accessibility node tree.
-            setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
-
-            if (mItemViewType == ViewTypes.FREQUENT) {
-                // ListView handles swiping for this item
-                SwipeHelper.setSwipeable(this, true);
-            } else if (mItemViewType == ViewTypes.TOP) {
-                // The contact tile row has its own swipe helpers, that makes each individual
-                // tile swipeable.
-                final float densityScale = getResources().getDisplayMetrics().density;
-                final float pagingTouchSlop = ViewConfiguration.get(context)
-                        .getScaledPagingTouchSlop();
-                mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, densityScale,
-                        pagingTouchSlop);
-                // Increase swipe thresholds for square tiles since they are relatively small.
-                mSwipeHelper.setChildSwipedFarEnoughFactor(0.9f);
-                mSwipeHelper.setChildSwipedFastEnoughFactor(0.1f);
-                mOnItemSwipeListener = PhoneFavoritesTileAdapter.this;
-            }
-        }
-
-        /**
-         * Configures the row to add {@link ContactEntry}s information to the views
-         */
-        public void configureRow(ArrayList<ContactEntry> list, int position, boolean isLastRow) {
-            int columnCount = mItemViewType == ViewTypes.FREQUENT ? 1 : mColumnCount;
-            mPosition = position;
-
-            // Adding tiles to row and filling in contact information
-            for (int columnCounter = 0; columnCounter < columnCount; columnCounter++) {
-                ContactEntry entry =
-                        columnCounter < list.size() ? list.get(columnCounter) : null;
-                addTileFromEntry(entry, columnCounter, isLastRow);
-            }
-            if (columnCount == 1) {
-                if (list.get(0) == ContactEntry.BLANK_ENTRY) {
-                    setVisibility(View.INVISIBLE);
-                } else {
-                    setVisibility(View.VISIBLE);
-                }
-            }
-        }
-
-        private void addTileFromEntry(ContactEntry entry, int childIndex, boolean isLastRow) {
-            final PhoneFavoriteTileView contactTile;
-
-            if (getChildCount() <= childIndex) {
-
-                contactTile = (PhoneFavoriteTileView) inflate(mContext, mLayoutResId, null);
-                // Note: the layoutparam set here is only actually used for FREQUENT.
-                // We override onMeasure() for STARRED and we don't care the layout param there.
-                final Resources resources = mContext.getResources();
-                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
-                        ViewGroup.LayoutParams.WRAP_CONTENT,
-                        ViewGroup.LayoutParams.WRAP_CONTENT);
-
-                params.setMargins(
-                        resources.getDimensionPixelSize(R.dimen.detail_item_side_margin), 0,
-                        resources.getDimensionPixelSize(R.dimen.detail_item_side_margin), 0);
-                contactTile.setLayoutParams(params);
-                contactTile.setPhotoManager(mPhotoManager);
-                contactTile.setListener(mListener);
-                addView(contactTile);
-            } else {
-                contactTile = (PhoneFavoriteTileView) getChildAt(childIndex);
-            }
-            contactTile.loadFromContact(entry);
-
-            int entryIndex = -1;
-            switch (mItemViewType) {
-                case ViewTypes.TOP:
-                    // Setting divider visibilities
-                    contactTile.setPaddingRelative(0, 0,
-                            childIndex >= mColumnCount - 1 ? 0 : mPaddingInPixels, 0);
-                    entryIndex = getFirstContactEntryIndexForPosition(mPosition) + childIndex;
-                    SwipeHelper.setSwipeable(contactTile, false);
-                    break;
-                case ViewTypes.FREQUENT:
-                    contactTile.setHorizontalDividerVisibility(
-                            isLastRow ? View.GONE : View.VISIBLE);
-                    entryIndex = getFirstContactEntryIndexForPosition(mPosition);
-                    SwipeHelper.setSwipeable(this, true);
-                    break;
-                default:
-                    break;
-            }
-            // tag the tile with the index of the contact entry it is associated with
-            if (entryIndex != -1) {
-                contactTile.setTag(CONTACT_ENTRY_INDEX_TAG, entryIndex);
-            }
-            contactTile.setupFavoriteContactCard();
-        }
-
-        @Override
-        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-            switch (mItemViewType) {
-                case ViewTypes.TOP:
-                    onLayoutForTiles();
-                    return;
-                default:
-                    super.onLayout(changed, left, top, right, bottom);
-                    return;
-            }
-        }
-
-        private void onLayoutForTiles() {
-            final int count = getChildCount();
-
-            // Just line up children horizontally.
-            int childLeft = getPaddingStart();
-            for (int i = 0; i < count; i++) {
-                final View child = getChildAt(i);
-
-                // Note MeasuredWidth includes the padding.
-                final int childWidth = child.getMeasuredWidth();
-                child.layout(childLeft, getPaddingTop(), childLeft + childWidth,
-                        getPaddingTop() + child.getMeasuredHeight());
-                childLeft += childWidth;
-            }
-        }
-
-        @Override
-        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-            switch (mItemViewType) {
-                case ViewTypes.TOP:
-                    onMeasureForTiles(widthMeasureSpec);
-                    return;
-                default:
-                    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-                    return;
-            }
-        }
-
-        private void onMeasureForTiles(int widthMeasureSpec) {
-            final int width = MeasureSpec.getSize(widthMeasureSpec);
-
-            final int childCount = getChildCount();
-            if (childCount == 0) {
-                // Just in case...
-                setMeasuredDimension(width, 0);
-                return;
-            }
-
-            // 1. Calculate image size.
-            //      = ([total width] - [total padding]) / [child count]
-            //
-            // 2. Set it to width/height of each children.
-            //    If we have a remainder, some tiles will have 1 pixel larger width than its height.
-            //
-            // 3. Set the dimensions of itself.
-            //    Let width = given width.
-            //    Let height = image size + bottom paddding.
-
-            final int totalPaddingsInPixels = (mColumnCount - 1) * mPaddingInPixels
-                    + mRowPaddingStart + mRowPaddingEnd;
-
-            // Preferred width / height for images (excluding the padding).
-            // The actual width may be 1 pixel larger than this if we have a remainder.
-            final int imageSize = (width - totalPaddingsInPixels) / mColumnCount;
-            final int remainder = width - (imageSize * mColumnCount) - totalPaddingsInPixels;
-
-            for (int i = 0; i < childCount; i++) {
-                final View child = getChildAt(i);
-                final int childWidth = imageSize + child.getPaddingRight()
-                        // Compensate for the remainder
-                        + (i < remainder ? 1 : 0);
-                final int childHeight = imageSize;
-                child.measure(
-                        MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY),
-                        MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY)
-                        );
-            }
-            setMeasuredDimension(width, imageSize + getPaddingTop() + getPaddingBottom());
-        }
-
-        /**
-         * Gets the index of the item at the specified coordinates.
-         *
-         * @param itemX X-coordinate of the selected item.
-         * @param itemY Y-coordinate of the selected item.
-         * @return Index of the selected item in the cached array.
-         */
-        public int getItemIndex(float itemX, float itemY) {
-            if (mPosition < mMaxTiledRows) {
-                if (DEBUG) {
-                    Log.v(TAG, String.valueOf(itemX) + " " + String.valueOf(itemY));
-                }
-                for (int i = 0; i < getChildCount(); ++i) {
-                    /** If the row contains multiple tiles, checks each tile to see if the point
-                     * is contained in the tile. */
-                    final View child = getChildAt(i);
-                    /** The coordinates passed in are based on the ListView,
-                     * translate for each child first */
-                    final int xInListView = child.getLeft() + getLeft();
-                    final int yInListView = child.getTop() + getTop();
-                    final int distanceX = (int) itemX - xInListView;
-                    final int distanceY = (int) itemY - yInListView;
-                    if ((distanceX > 0 && distanceX < child.getWidth()) &&
-                            (distanceY > 0 && distanceY < child.getHeight())) {
-                        /** If the point is contained in the rectangle, computes the index of the
-                         * item in the cached array. */
-                        return i + (mPosition) * mColumnCount;
-                    }
-                }
-            } else {
-                /** If the selected item is one of the rows, compute the index. */
-                return getRegularRowItemIndex();
-            }
-            return -1;
-        }
-
-        /**
-         * Gets the index of the regular row item.
-         *
-         * @return Index of the selected item in the cached array.
-         */
-        public int getRegularRowItemIndex() {
-            return (mPosition - mMaxTiledRows) + mColumnCount * mMaxTiledRows;
-        }
-
-        public PhoneFavoritesTileAdapter getTileAdapter() {
-            return PhoneFavoritesTileAdapter.this;
-        }
-
-        public int getPosition() {
-            return mPosition;
-        }
-
-        /**
-         * Find the view under the pointer.
-         */
-        public View getViewAtPosition(int x, int y) {
-            // find the view under the pointer, accounting for GONE views
-            final int count = getChildCount();
-            View view;
-            for (int childIdx = 0; childIdx < count; childIdx++) {
-                view = getChildAt(childIdx);
-                if (x >= view.getLeft() && x <= view.getRight()) {
-                    return view;
-                }
-            }
-            return null;
-        }
-
-        @Override
-        public View getChildAtPosition(MotionEvent ev) {
-            final View view = getViewAtPosition((int) ev.getX(), (int) ev.getY());
-            if (view != null &&
-                    SwipeHelper.isSwipeable(view) &&
-                    view.getVisibility() != GONE) {
-                // If this view is swipable, then return it. If not, because the removal
-                // dialog is currently showing, then return a null view, which will simply
-                // be ignored by the swipe helper.
-                return view;
-            }
-            return null;
-        }
-
-        @Override
-        public View getChildContentView(View v) {
-            return v.findViewById(R.id.contact_favorite_card);
-        }
-
-        @Override
-        public void onScroll() {}
-
-        @Override
-        public boolean canChildBeDismissed(View v) {
-            return true;
-        }
-
-        @Override
-        public void onBeginDrag(View v) {
-            removePendingContactEntry();
-            final int index = indexOfChild(v);
-
-            /*
-            if (index > 0) {
-                detachViewFromParent(index);
-                attachViewToParent(v, 0, v.getLayoutParams());
-            }*/
-
-            // We do this so the underlying ScrollView knows that it won't get
-            // the chance to intercept events anymore
-            requestDisallowInterceptTouchEvent(true);
-        }
-
-        @Override
-        public void onChildDismissed(View v) {
-            if (v != null) {
-                if (mOnItemSwipeListener != null) {
-                    mOnItemSwipeListener.onSwipe(v);
-                }
-            }
-        }
-
-        @Override
-        public void onDragCancelled(View v) {}
-
-        @Override
-        public boolean onInterceptTouchEvent(MotionEvent ev) {
-            if (mSwipeHelper != null && isSwipeEnabled()) {
-                return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
-            } else {
-                return super.onInterceptTouchEvent(ev);
-            }
-        }
-
-        @Override
-        public boolean onTouchEvent(MotionEvent ev) {
-            if (mSwipeHelper != null && isSwipeEnabled()) {
-                return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
-            } else {
-                return super.onTouchEvent(ev);
-            }
-        }
-
-        public int getItemViewType() {
-            return mItemViewType;
-        }
-
-        public void setOnItemSwipeListener(OnItemGestureListener listener) {
-            mOnItemSwipeListener = listener;
-        }
-    }
-
-    /**
-     * Used when a contact is swiped away. This will both unstar and set pinned position of the
-     * contact to PinnedPosition.DEMOTED so that it doesn't show up anymore in the favorites list.
+     * Used when a contact is removed from speeddial. This will both unstar and set pinned position
+     * of the contact to PinnedPosition.DEMOTED so that it doesn't show up anymore in the favorites
+     * list.
      */
     private void unstarAndUnpinContact(Uri contactUri) {
         final ContentValues values = new ContentValues(2);
@@ -1158,55 +604,50 @@
     }
 
     protected static class ViewTypes {
-        public static final int FREQUENT = 0;
-        public static final int TOP = 1;
-        public static final int COUNT = 2;
+        public static final int TILE = 0;
+        public static final int COUNT = 1;
     }
 
     @Override
-    public void onSwipe(View view) {
-        final PhoneFavoriteTileView tileView = (PhoneFavoriteTileView) view.findViewById(
-                R.id.contact_tile);
-        // When the view is in the removal dialog, it should no longer be swipeable
-        SwipeHelper.setSwipeable(view, false);
-        tileView.displayRemovalDialog();
-
-        final Integer entryIndex = (Integer) tileView.getTag(
-                ContactTileRow.CONTACT_ENTRY_INDEX_TAG);
-
-        setPotentialRemoveEntryIndex(entryIndex);
-    }
-
-    @Override
-    public void onTouch() {
-        removePendingContactEntry();
-        return;
-    }
-
-    @Override
-    public boolean isSwipeEnabled() {
-        return !mAwaitingRemove;
-    }
-
-    @Override
-    public void onDragStarted(int itemIndex) {
+    public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
         setInDragging(true);
+        final int itemIndex = mContactEntries.indexOf(view.getContactEntry());
         popContactEntry(itemIndex);
     }
 
     @Override
-    public void onDragHovered(int itemIndex) {
+    public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {
+        if (view == null) {
+            // The user is hovering over a view that is not a contact tile, no need to do
+            // anything here.
+            return;
+        }
+        final int itemIndex = mContactEntries.indexOf(view.getContactEntry());
         if (mInDragging &&
                 mDragEnteredEntryIndex != itemIndex &&
                 isIndexInBound(itemIndex) &&
-                itemIndex < PIN_LIMIT) {
+                itemIndex < PIN_LIMIT &&
+                itemIndex >= 0) {
             markDropArea(itemIndex);
         }
     }
 
     @Override
-    public void onDragFinished() {
+    public void onDragFinished(int x, int y) {
         setInDragging(false);
-        handleDrop();
+        // A contact has been dragged to the RemoveView in order to be unstarred,  so simply wait
+        // for the new contact cursor which will cause the UI to be refreshed without the unstarred
+        // contact.
+        if (!mAwaitingRemove) {
+            handleDrop();
+        }
+    }
+
+    @Override
+    public void onDroppedOnRemove() {
+        if (mDraggedEntry != null) {
+            unstarAndUnpinContact(mDraggedEntry.lookupUri);
+            mAwaitingRemove = true;
+        }
     }
 }
diff --git a/src/com/android/dialer/list/RemoveView.java b/src/com/android/dialer/list/RemoveView.java
new file mode 100644
index 0000000..ae358fc
--- /dev/null
+++ b/src/com/android/dialer/list/RemoveView.java
@@ -0,0 +1,91 @@
+package com.android.dialer.list;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.DragEvent;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.dialer.R;
+
+public class RemoveView extends FrameLayout {
+
+    DragDropController mDragDropController;
+    TextView mRemoveText;
+    ImageView mRemoveIcon;
+    int mUnhighlightedColor;
+    int mHighlightedColor;
+    Drawable mRemoveDrawable;
+    Drawable mRemoveHighlightedDrawable;
+
+    public RemoveView(Context context) {
+      super(context);
+    }
+
+    public RemoveView(Context context, AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public RemoveView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        mRemoveText = (TextView) findViewById(R.id.remove_view_text);
+        mRemoveIcon = (ImageView) findViewById(R.id.remove_view_icon);
+        final Resources r = getResources();
+        mUnhighlightedColor = r.getColor(R.color.remove_text_color);
+        mHighlightedColor = r.getColor(R.color.remove_highlighted_text_color);
+        mRemoveDrawable = r.getDrawable(R.drawable.ic_remove);
+        mRemoveHighlightedDrawable = r.getDrawable(R.drawable.ic_remove_highlight);
+    }
+
+    public void setDragDropController(DragDropController controller) {
+        mDragDropController = controller;
+    }
+
+    @Override
+    public boolean onDragEvent(DragEvent event) {
+        final int action = event.getAction();
+        switch (action) {
+            case DragEvent.ACTION_DRAG_ENTERED:
+                setAppearanceHighlighted();
+                break;
+            case DragEvent.ACTION_DRAG_EXITED:
+                setAppearanceNormal();
+                break;
+            case DragEvent.ACTION_DRAG_LOCATION:
+                if (mDragDropController != null) {
+                    mDragDropController.handleDragHovered(this, (int) event.getX(),
+                            (int) event.getY());
+                }
+                break;
+            case DragEvent.ACTION_DROP:
+                if (mDragDropController != null) {
+                    mDragDropController.handleDragFinished((int) event.getX(), (int) event.getY(),
+                            true);
+                }
+                setAppearanceNormal();
+                break;
+        }
+        return true;
+    }
+
+    private void setAppearanceNormal() {
+        mRemoveText.setTextColor(mUnhighlightedColor);
+        mRemoveIcon.setImageDrawable(mRemoveDrawable);
+        invalidate();
+    }
+
+    private void setAppearanceHighlighted() {
+        mRemoveText.setTextColor(mHighlightedColor);
+        mRemoveIcon.setImageDrawable(mRemoveHighlightedDrawable);
+        invalidate();
+    }
+}
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 006729b..ab76fdc 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -16,11 +16,12 @@
 package com.android.dialer.list;
 
 import android.app.Activity;
-import android.content.ActivityNotFoundException;
 import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
 import android.widget.AbsListView;
 import android.widget.AbsListView.OnScrollListener;
-import android.widget.Toast;
+import android.widget.ListView;
 
 import com.android.contacts.common.list.ContactEntryListAdapter;
 import com.android.contacts.common.list.ContactListItemView;
@@ -28,20 +29,27 @@
 import com.android.contacts.common.list.PhoneNumberPickerFragment;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.dialpad.DialpadFragment;
 import com.android.dialer.list.OnListFragmentScrolledListener;
+import com.android.dialer.util.DialerUtils;
 
 public class SearchFragment extends PhoneNumberPickerFragment {
 
     private OnListFragmentScrolledListener mActivityScrollListener;
 
+    /*
+     * Stores the untouched user-entered string that is used to populate the add to contacts
+     * intent.
+     */
+    private String mAddToContactNumber;
+    private int mActionBarHeight;
+
     @Override
     public void onAttach(Activity activity) {
         super.onAttach(activity);
 
         setQuickContactEnabled(true);
         setDarkTheme(false);
-        setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(true /* opposite */));
+        setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */));
         setUseCallableUri(true);
 
         try {
@@ -58,7 +66,19 @@
         if (isSearchMode()) {
             getAdapter().setHasHeader(0, false);
         }
-        getListView().setOnScrollListener(new OnScrollListener() {
+
+        mActionBarHeight = ((DialtactsActivity) getActivity()).getActionBarHeight();
+
+        final View parentView = getView();
+        parentView.setPaddingRelative(
+                parentView.getPaddingStart(),
+                mActionBarHeight,
+                parentView.getPaddingEnd(),
+                parentView.getPaddingBottom());
+
+        final ListView listView = getListView();
+
+        listView.setOnScrollListener(new OnScrollListener() {
             @Override
             public void onScrollStateChanged(AbsListView view, int scrollState) {
                 mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
@@ -69,6 +89,10 @@
                     int totalItemCount) {
             }
         });
+
+        if (!getActivity().getActionBar().isShowing()) {
+            parentView.setTranslationY(-mActionBarHeight);
+        }
     }
 
     @Override
@@ -81,6 +105,10 @@
         }
     }
 
+    public void setAddToContactNumber(String addToContactNumber) {
+        mAddToContactNumber = addToContactNumber;
+    }
+
     @Override
     protected ContactEntryListAdapter createListAdapter() {
         DialerPhoneNumberListAdapter adapter = new DialerPhoneNumberListAdapter(getActivity());
@@ -103,19 +131,11 @@
                 listener.onCallNumberDirectly(getQueryString());
             }
         } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS) {
-            final String number = adapter.getFormattedQueryString();
+            final String number = TextUtils.isEmpty(mAddToContactNumber) ?
+                    adapter.getFormattedQueryString() : mAddToContactNumber;
             final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
-            startActivityWithErrorToast(intent);
-        }
-    }
-
-    private void startActivityWithErrorToast(Intent intent) {
-        try {
-            startActivity(intent);
-        } catch (ActivityNotFoundException e) {
-            Toast toast = Toast.makeText(getActivity(), R.string.add_contact_not_available,
-                    Toast.LENGTH_SHORT);
-            toast.show();
+            DialerUtils.startActivityWithErrorToast(getActivity(), intent,
+                    R.string.add_contact_not_available);
         }
     }
 }
diff --git a/src/com/android/dialer/list/ShortcutCardsAdapter.java b/src/com/android/dialer/list/ShortcutCardsAdapter.java
new file mode 100644
index 0000000..8a1f64c
--- /dev/null
+++ b/src/com/android/dialer/list/ShortcutCardsAdapter.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ * Licensed to 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.list;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.database.DataSetObserver;
+import android.graphics.Rect;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+
+import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogNotificationsHelper;
+import com.android.dialer.calllog.CallLogQueryHandler;
+import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
+import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
+
+/**
+ * An adapter that displays call shortcuts from {@link com.android.dialer.calllog.CallLogAdapter}
+ * in the form of cards.
+ */
+public class ShortcutCardsAdapter extends BaseAdapter {
+
+    private class CustomDataSetObserver extends DataSetObserver {
+        @Override
+        public void onChanged() {
+            notifyDataSetChanged();
+        }
+    }
+
+    private static final String TAG = ShortcutCardsAdapter.class.getSimpleName();
+
+    private final CallLogAdapter mCallLogAdapter;
+    private final ListsFragment mFragment;
+
+    private final int mCallLogPadding;
+
+    private final Context mContext;
+
+    private final DataSetObserver mObserver;
+
+    private final CallLogQueryHandler mCallLogQueryHandler;
+
+    private final OnItemGestureListener mCallLogOnItemSwipeListener =
+            new OnItemGestureListener() {
+        @Override
+        public void onSwipe(View view) {
+            mCallLogQueryHandler.markNewCallsAsOld();
+            mCallLogQueryHandler.markNewVoicemailsAsOld();
+            CallLogNotificationsHelper.removeMissedCallNotifications();
+            CallLogNotificationsHelper.updateVoicemailNotifications(mContext);
+            mFragment.dismissShortcut(view);
+        }
+
+        @Override
+        public void onTouch() {}
+
+        @Override
+        public boolean isSwipeEnabled() {
+            return true;
+        }
+    };
+
+    private final CallLogQueryHandler.Listener mCallLogQueryHandlerListener =
+            new CallLogQueryHandler.Listener() {
+        @Override
+        public void onVoicemailStatusFetched(Cursor statusCursor) {}
+
+        @Override
+        public void onCallsFetched(Cursor combinedCursor) {
+            mCallLogAdapter.invalidateCache();
+            mCallLogAdapter.changeCursor(combinedCursor);
+            mCallLogAdapter.notifyDataSetChanged();
+        }
+    };
+
+    public ShortcutCardsAdapter(Context context,
+            ListsFragment fragment,
+            CallLogAdapter callLogAdapter) {
+        final Resources resources = context.getResources();
+        mContext = context;
+        mFragment = fragment;
+        mCallLogPadding = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding);
+        mCallLogAdapter = callLogAdapter;
+        mObserver = new CustomDataSetObserver();
+        mCallLogAdapter.registerDataSetObserver(mObserver);
+        mCallLogQueryHandler = new CallLogQueryHandler(mContext.getContentResolver(),
+                mCallLogQueryHandlerListener);
+    }
+
+    /**
+     * Determines the number of items in the adapter.
+     * mCallLogAdapter contains the item for the most recent caller.
+     * mContactTileAdapter contains the starred contacts.
+     * The +1 is to account for the presence of the favorites menu.
+     *
+     * @return Number of items in the adapter.
+     */
+    @Override
+    public int getCount() {
+        return mCallLogAdapter.getCount();
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return mCallLogAdapter.getItem(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public boolean hasStableIds() {
+        return true;
+    }
+
+    /**
+     * Determine the number of view types present.
+     */
+    @Override
+    public int getViewTypeCount() {
+        return mCallLogAdapter.getViewTypeCount();
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return mCallLogAdapter.getItemViewType(position);
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        final SwipeableShortcutCard wrapper;
+        if (convertView == null) {
+            wrapper = new SwipeableShortcutCard(mContext);
+            wrapper.setOnItemSwipeListener(mCallLogOnItemSwipeListener);
+        } else {
+            wrapper = (SwipeableShortcutCard) convertView;
+        }
+
+        // Special case wrapper view for the most recent call log item. This allows
+        // us to create a card-like effect for the more recent call log item in
+        // the PhoneFavoriteMergedAdapter, but keep the original look of the item in
+        // the CallLogAdapter.
+        final View view = mCallLogAdapter.getView(position, convertView == null ?
+                null : wrapper.getChildAt(0), parent);
+        wrapper.removeAllViews();
+        final View callLogItem = view.findViewById(R.id.call_log_list_item);
+        // Reset the internal call log item view if it is being recycled
+        callLogItem.setTranslationX(0);
+        callLogItem.setAlpha(1);
+        wrapper.addView(view);
+        return wrapper;
+    }
+
+    @Override
+    public boolean areAllItemsEnabled() {
+        return mCallLogAdapter.areAllItemsEnabled();
+    }
+
+    @Override
+    public boolean isEnabled(int position) {
+        return mCallLogAdapter.isEnabled(position);
+    }
+
+    /**
+     * The swipeable call log row.
+     */
+    class SwipeableShortcutCard extends FrameLayout implements SwipeHelperCallback {
+        private SwipeHelper mSwipeHelper;
+        private OnItemGestureListener mOnItemSwipeListener;
+
+        public SwipeableShortcutCard(Context context) {
+            super(context);
+            final float densityScale = getResources().getDisplayMetrics().density;
+            final float pagingTouchSlop = ViewConfiguration.get(context)
+                    .getScaledPagingTouchSlop();
+            mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this,
+                    densityScale, pagingTouchSlop);
+        }
+
+        @Override
+        public void addView(View view) {
+            view.setBackgroundResource(R.drawable.ic_tile_for_recents_and_contact_tile);
+
+            final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+                    FrameLayout.LayoutParams.MATCH_PARENT,
+                    FrameLayout.LayoutParams.WRAP_CONTENT);
+            params.setMargins(mCallLogPadding, mCallLogPadding, mCallLogPadding, mCallLogPadding);
+            view.setLayoutParams(params);
+            view.setTranslationZ(getResources().getDimensionPixelSize(
+                    R.dimen.recent_call_log_item_translation_z));
+
+            super.addView(view);
+        }
+
+        @Override
+        public View getChildAtPosition(MotionEvent ev) {
+            return getChildCount() > 0 ? getChildAt(0) : null;
+        }
+
+        @Override
+        public View getChildContentView(View v) {
+            return v.findViewById(R.id.call_log_list_item);
+        }
+
+        @Override
+        public void onScroll() {}
+
+        @Override
+        public boolean canChildBeDismissed(View v) {
+            return true;
+        }
+
+        @Override
+        public void onBeginDrag(View v) {
+            // We do this so the underlying ScrollView knows that it won't get
+            // the chance to intercept events anymore
+            requestDisallowInterceptTouchEvent(true);
+        }
+
+        @Override
+        public void onChildDismissed(View v) {
+            if (v != null && mOnItemSwipeListener != null) {
+                mOnItemSwipeListener.onSwipe(v);
+            }
+        }
+
+        @Override
+        public void onDragCancelled(View v) {}
+
+        @Override
+        public boolean onInterceptTouchEvent(MotionEvent ev) {
+            if (mSwipeHelper != null) {
+                return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
+            } else {
+                return super.onInterceptTouchEvent(ev);
+            }
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent ev) {
+            if (mSwipeHelper != null) {
+                return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
+            } else {
+                return super.onTouchEvent(ev);
+            }
+        }
+
+        public void setOnItemSwipeListener(OnItemGestureListener listener) {
+            mOnItemSwipeListener = listener;
+        }
+
+        private float mPreviousTranslationZ = 0;
+        private Rect mClipRect = new Rect();
+
+        /**
+         * Clips the card by a specified amount.
+         *
+         * @param ratioHidden A float indicating how much of each edge of the card should be
+         *         clipped. If 0, the entire card is displayed. If 0.5f, each edge is hidden
+         *         entirely, thus obscuring the entire card.
+         */
+        public void clipCard(float ratioHidden) {
+            final View viewToClip = getChildAt(0);
+            if (viewToClip == null) {
+                return;
+            }
+            int width = viewToClip.getWidth();
+            int height = viewToClip.getHeight();
+
+            if (ratioHidden <= 0.01f) {
+                viewToClip.setTranslationZ(mPreviousTranslationZ);
+            } else if (viewToClip.getTranslationZ() != 0){
+                mPreviousTranslationZ = viewToClip.getTranslationZ();
+                viewToClip.setTranslationZ(0);
+            }
+
+            if (ratioHidden > 0.5f) {
+                mClipRect.set(0, 0 , 0, 0);
+            } else {
+                int newLeft = (int) (ratioHidden * width);
+                int newRight = (width - newLeft);
+                int newTop = (int) (ratioHidden * height);
+                int newBottom = (height - newTop);
+                mClipRect.set(newLeft, newTop, newRight, newBottom);
+            }
+            viewToClip.setClipBounds(mClipRect);
+
+            // If the view has any children, fade them out of view.
+            final ViewGroup viewGroup = (ViewGroup) viewToClip;
+            final int count = viewGroup.getChildCount();
+            for (int i = 0; i < count; i++) {
+                viewGroup.getChildAt(i).setAlpha(Math.max(0, 1 - 4 * ratioHidden));
+            }
+        }
+    }
+}
diff --git a/src/com/android/dialer/list/SmartDialNumberListAdapter.java b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
index 962d8ee..25d442e 100644
--- a/src/com/android/dialer/list/SmartDialNumberListAdapter.java
+++ b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
@@ -46,6 +46,8 @@
 
     public SmartDialNumberListAdapter(Context context) {
         super(context);
+        mNameMatcher = new SmartDialNameMatcher("", SmartDialPrefix.getMap());
+
         if (DEBUG) {
             Log.v(TAG, "Constructing List Adapter");
         }
@@ -60,12 +62,11 @@
         }
 
         if (getQueryString() == null) {
-            mNameMatcher = new SmartDialNameMatcher("", SmartDialPrefix.getMap());
             loader.configureQuery("");
+            mNameMatcher.setQuery("");
         } else {
             loader.configureQuery(getQueryString());
-            mNameMatcher = new SmartDialNameMatcher(PhoneNumberUtils.normalizeNumber(
-                    getQueryString()), SmartDialPrefix.getMap());
+            mNameMatcher.setQuery(PhoneNumberUtils.normalizeNumber(getQueryString()));
         }
     }
 
diff --git a/src/com/android/dialer/list/SmartDialSearchFragment.java b/src/com/android/dialer/list/SmartDialSearchFragment.java
index 0efe918..4f0ce72 100644
--- a/src/com/android/dialer/list/SmartDialSearchFragment.java
+++ b/src/com/android/dialer/list/SmartDialSearchFragment.java
@@ -41,6 +41,8 @@
         // Disable the direct call shortcut for the smart dial fragment, since the call button
         // will already be showing anyway.
         adapter.setShortcutEnabled(SmartDialNumberListAdapter.SHORTCUT_DIRECT_CALL, false);
+        adapter.setShortcutEnabled(SmartDialNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS,
+                false);
         return adapter;
     }
 
diff --git a/src/com/android/dialer/list/SpeedDialFragment.java b/src/com/android/dialer/list/SpeedDialFragment.java
new file mode 100644
index 0000000..0399bf7
--- /dev/null
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -0,0 +1,421 @@
+/*
+ * 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.
+ */
+package com.android.dialer.list;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.CursorLoader;
+import android.content.Loader;
+import android.database.Cursor;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.animation.AnimationUtils;
+import android.view.animation.LayoutAnimationController;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.RelativeLayout.LayoutParams;
+
+import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.ContactTileLoaderFactory;
+import com.android.contacts.common.list.ContactTileView;
+import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.dialer.R;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * This fragment displays the user's favorite/frequent contacts in a grid.
+ */
+public class SpeedDialFragment extends Fragment implements OnItemClickListener,
+        PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener {
+
+    /**
+     * By default, the animation code assumes that all items in a list view are of the same height
+     * when animating new list items into view (e.g. from the bottom of the screen into view).
+     * This can cause incorrect translation offsets when a item that is larger or smaller than
+     * other list item is removed from the list. This key is used to provide the actual height
+     * of the removed object so that the actual translation appears correct to the user.
+     */
+    private static final long KEY_REMOVED_ITEM_HEIGHT = Long.MAX_VALUE;
+
+    private static final String TAG = SpeedDialFragment.class.getSimpleName();
+    private static final boolean DEBUG = false;
+
+    private int mAnimationDuration;
+
+    /**
+     * Used with LoaderManager.
+     */
+    private static int LOADER_ID_CONTACT_TILE = 1;
+
+    public interface HostInterface {
+        public void setDragDropController(DragDropController controller);
+    }
+
+    private class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
+        @Override
+        public CursorLoader onCreateLoader(int id, Bundle args) {
+            if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onCreateLoader.");
+            return ContactTileLoaderFactory.createStrequentPhoneOnlyLoader(getActivity());
+        }
+
+        @Override
+        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+            if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoadFinished");
+            mContactTileAdapter.setContactCursor(data);
+            setEmptyViewVisibility(mContactTileAdapter.getCount() == 0);
+        }
+
+        @Override
+        public void onLoaderReset(Loader<Cursor> loader) {
+            if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoaderReset. ");
+        }
+    }
+
+    private class ContactTileAdapterListener implements ContactTileView.Listener {
+        @Override
+        public void onContactSelected(Uri contactUri, Rect targetRect) {
+            if (mPhoneNumberPickerActionListener != null) {
+                mPhoneNumberPickerActionListener.onPickPhoneNumberAction(contactUri);
+            }
+        }
+
+        @Override
+        public void onCallNumberDirectly(String phoneNumber) {
+            if (mPhoneNumberPickerActionListener != null) {
+                mPhoneNumberPickerActionListener.onCallNumberDirectly(phoneNumber);
+            }
+        }
+
+        @Override
+        public int getApproximateTileWidth() {
+            return getView().getWidth();
+        }
+    }
+
+    private class ScrollListener implements ListView.OnScrollListener {
+        @Override
+        public void onScroll(AbsListView view,
+                int firstVisibleItem, int visibleItemCount, int totalItemCount) {
+            if (mActivityScrollListener != null) {
+                mActivityScrollListener.onListFragmentScroll(firstVisibleItem, visibleItemCount,
+                    totalItemCount);
+            }
+        }
+
+        @Override
+        public void onScrollStateChanged(AbsListView view, int scrollState) {
+            mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
+        }
+    }
+
+    private OnPhoneNumberPickerActionListener mPhoneNumberPickerActionListener;
+
+    private OnListFragmentScrolledListener mActivityScrollListener;
+    private PhoneFavoritesTileAdapter mContactTileAdapter;
+
+    private View mParentView;
+
+    private PhoneFavoriteListView mListView;
+
+    private View mPhoneFavoritesMenu;
+    private View mContactTileFrame;
+
+    private TileInteractionTeaserView mTileInteractionTeaserView;
+
+    private final HashMap<Long, Integer> mItemIdTopMap = new HashMap<Long, Integer>();
+    private final HashMap<Long, Integer> mItemIdLeftMap = new HashMap<Long, Integer>();
+
+    /**
+     * Layout used when there are no favorites.
+     */
+    private View mEmptyView;
+
+    private final ContactTileView.Listener mContactTileAdapterListener =
+            new ContactTileAdapterListener();
+    private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
+            new ContactTileLoaderListener();
+    private final ScrollListener mScrollListener = new ScrollListener();
+
+    @Override
+    public void onAttach(Activity activity) {
+        if (DEBUG) Log.d(TAG, "onAttach()");
+        super.onAttach(activity);
+
+        // Construct two base adapters which will become part of PhoneFavoriteMergedAdapter.
+        // We don't construct the resultant adapter at this moment since it requires LayoutInflater
+        // that will be available on onCreateView().
+        mContactTileAdapter = new PhoneFavoritesTileAdapter(activity, mContactTileAdapterListener,
+                this);
+        mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
+    }
+
+    @Override
+    public void onCreate(Bundle savedState) {
+        if (DEBUG) Log.d(TAG, "onCreate()");
+        super.onCreate(savedState);
+
+        mAnimationDuration = getResources().getInteger(R.integer.fade_duration);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        getLoaderManager().getLoader(LOADER_ID_CONTACT_TILE).forceLoad();
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        mParentView = inflater.inflate(R.layout.phone_favorites_fragment, container, false);
+
+        mListView = (PhoneFavoriteListView) mParentView.findViewById(R.id.contact_tile_list);
+        mListView.setOnItemClickListener(this);
+        mListView.setVerticalScrollBarEnabled(false);
+        mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
+        mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
+        mListView.getDragDropController().addOnDragDropListener(mContactTileAdapter);
+
+        final ImageView dragShadowOverlay =
+                (ImageView) getActivity().findViewById(R.id.contact_tile_drag_shadow_overlay);
+        mListView.setDragShadowOverlay(dragShadowOverlay);
+
+        mEmptyView = mParentView.findViewById(R.id.phone_no_favorites_view);
+
+        mPhoneFavoritesMenu = inflater.inflate(R.layout.phone_favorites_menu, mListView, false);
+
+        mContactTileFrame = mParentView.findViewById(R.id.contact_tile_frame);
+
+        mTileInteractionTeaserView = (TileInteractionTeaserView) inflater.inflate(
+                R.layout.tile_interactions_teaser_view, mListView, false);
+
+        final LayoutAnimationController controller = new LayoutAnimationController(
+                AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in));
+        controller.setDelay(0);
+        mListView.setLayoutAnimation(controller);
+        mListView.setAdapter(mContactTileAdapter);
+
+        mListView.setOnScrollListener(mScrollListener);
+        mListView.setFastScrollEnabled(false);
+        mListView.setFastScrollAlwaysVisible(false);
+
+        return mParentView;
+    }
+
+    public boolean hasFrequents() {
+        if (mContactTileAdapter == null) return false;
+        return mContactTileAdapter.getNumFrequents() > 0;
+    }
+
+    /* package */ void setEmptyViewVisibility(final boolean visible) {
+        final int previousVisibility = mEmptyView.getVisibility();
+        final int newVisibility = visible ? View.VISIBLE : View.GONE;
+
+        if (previousVisibility != newVisibility) {
+            final RelativeLayout.LayoutParams params = (LayoutParams) mContactTileFrame
+                    .getLayoutParams();
+            params.height = visible ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT;
+            mContactTileFrame.setLayoutParams(params);
+            mEmptyView.setVisibility(newVisibility);
+        }
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        final Activity activity = getActivity();
+
+        try {
+            mActivityScrollListener = (OnListFragmentScrolledListener) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement OnListFragmentScrolledListener");
+        }
+
+        try {
+            OnDragDropListener listener = (OnDragDropListener) activity;
+            mListView.getDragDropController().addOnDragDropListener(listener);
+            ((HostInterface) activity).setDragDropController(mListView.getDragDropController());
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement OnDragDropListener and HostInterface");
+        }
+
+        try {
+            mPhoneNumberPickerActionListener = (OnPhoneNumberPickerActionListener) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement PhoneFavoritesFragment.listener");
+        }
+
+        // Use initLoader() instead of restartLoader() to refraining unnecessary reload.
+        // This method call implicitly assures ContactTileLoaderListener's onLoadFinished() will
+        // be called, on which we'll check if "all" contacts should be reloaded again or not.
+        getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, mContactTileLoaderListener);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * This is only effective for elements provided by {@link #mContactTileAdapter}.
+     * {@link #mContactTileAdapter} has its own logic for click events.
+     */
+    @Override
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        final int contactTileAdapterCount = mContactTileAdapter.getCount();
+        if (position <= contactTileAdapterCount) {
+            Log.e(TAG, "onItemClick() event for unexpected position. "
+                    + "The position " + position + " is before \"all\" section. Ignored.");
+        }
+    }
+
+    /**
+     * Cache the current view offsets into memory. Once a relayout of views in the ListView
+     * has happened due to a dataset change, the cached offsets are used to create animations
+     * that slide views from their previous positions to their new ones, to give the appearance
+     * that the views are sliding into their new positions.
+     */
+    private void saveOffsets(int removedItemHeight) {
+        final int firstVisiblePosition = mListView.getFirstVisiblePosition();
+        if (DEBUG) {
+            Log.d(TAG, "Child count : " + mListView.getChildCount());
+        }
+        for (int i = 0; i < mListView.getChildCount(); i++) {
+            final View child = mListView.getChildAt(i);
+            final int position = firstVisiblePosition + i;
+            final long itemId = mContactTileAdapter.getItemId(position);
+            if (DEBUG) {
+                Log.d(TAG, "Saving itemId: " + itemId + " for listview child " + i + " Top: "
+                        + child.getTop());
+            }
+            mItemIdTopMap.put(itemId, child.getTop());
+            mItemIdLeftMap.put(itemId, child.getLeft());
+        }
+
+        mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight);
+    }
+
+    /*
+     * Performs animations for the gridView
+     */
+    private void animateGridView(final long... idsInPlace) {
+        if (mItemIdTopMap.isEmpty()) {
+            // Don't do animations if the database is being queried for the first time and
+            // the previous item offsets have not been cached, or the user hasn't done anything
+            // (dragging, swiping etc) that requires an animation.
+            return;
+        }
+
+        final ViewTreeObserver observer = mListView.getViewTreeObserver();
+        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+            @SuppressWarnings("unchecked")
+            @Override
+            public boolean onPreDraw() {
+                observer.removeOnPreDrawListener(this);
+                final int firstVisiblePosition = mListView.getFirstVisiblePosition();
+                final AnimatorSet animSet = new AnimatorSet();
+                final ArrayList<Animator> animators = new ArrayList<Animator>();
+                for (int i = 0; i < mListView.getChildCount(); i++) {
+                    final View child = mListView.getChildAt(i);
+                    int position = firstVisiblePosition + i;
+
+                    final long itemId = mContactTileAdapter.getItemId(position);
+
+                    if (containsId(idsInPlace, itemId)) {
+                        animators.add(ObjectAnimator.ofFloat(
+                                child, "alpha", 0.0f, 1.0f));
+                        break;
+                    } else {
+                        Integer startTop = mItemIdTopMap.get(itemId);
+                        Integer startLeft = mItemIdLeftMap.get(itemId);
+                        final int top = child.getTop();
+                        final int left = child.getLeft();
+                        int deltaX = 0;
+                        int deltaY = 0;
+
+                        if (startLeft != null) {
+                            if (startLeft != left) {
+                                deltaX = startLeft - left;
+                                animators.add(ObjectAnimator.ofFloat(
+                                        child, "translationX", deltaX, 0.0f));
+                            }
+                        }
+
+                        if (startTop != null) {
+                            if (startTop != top) {
+                                deltaY = startTop - top;
+                                animators.add(ObjectAnimator.ofFloat(
+                                        child, "translationY", deltaY, 0.0f));
+                            }
+                        }
+
+                        if (DEBUG) {
+                            Log.d(TAG, "Found itemId: " + itemId + " for listview child " + i +
+                                    " Top: " + top +
+                                    " Delta: " + deltaY);
+                        }
+                    }
+                }
+
+                if (animators.size() > 0) {
+                    animSet.setDuration(mAnimationDuration).playTogether(animators);
+                    animSet.start();
+                }
+
+                mItemIdTopMap.clear();
+                mItemIdLeftMap.clear();
+                return true;
+            }
+        });
+    }
+
+    private boolean containsId(long[] ids, long target) {
+        // Linear search on array is fine because this is typically only 0-1 elements long
+        for (int i = 0; i < ids.length; i++) {
+            if (ids[i] == target) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void onDataSetChangedForAnimation(long... idsInPlace) {
+        animateGridView(idsInPlace);
+    }
+
+    @Override
+    public void cacheOffsetsForDatasetChange() {
+        saveOffsets(0);
+    }
+}
diff --git a/src/com/android/dialer/list/TileInteractionTeaserView.java b/src/com/android/dialer/list/TileInteractionTeaserView.java
index 6e70fd1..fd5ed34 100644
--- a/src/com/android/dialer/list/TileInteractionTeaserView.java
+++ b/src/com/android/dialer/list/TileInteractionTeaserView.java
@@ -31,7 +31,7 @@
     private int mTextTop;
     private int mAnimatedHeight = -1;
 
-    private PhoneFavoriteMergedAdapter mAdapter;
+    private ShortcutCardsAdapter mAdapter;
 
     public TileInteractionTeaserView(final Context context) {
         this(context, null);
@@ -91,7 +91,7 @@
         return prefs.getBoolean(KEY_TILE_INTERACTION_TEASER_SHOWN, true);
     }
 
-    public void setAdapter(PhoneFavoriteMergedAdapter adapter) {
+    public void setAdapter(ShortcutCardsAdapter adapter) {
         mAdapter = adapter;
     }
 
diff --git a/src/com/android/dialer/list/ViewPagerTabs.java b/src/com/android/dialer/list/ViewPagerTabs.java
new file mode 100644
index 0000000..b545802
--- /dev/null
+++ b/src/com/android/dialer/list/ViewPagerTabs.java
@@ -0,0 +1,178 @@
+package com.android.dialer.list;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.HorizontalScrollView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.dialer.R;
+
+/**
+ * Lightweight implementation of ViewPager tabs. This looks similar to traditional actionBar tabs,
+ * but allows for the view containing the tabs to be placed anywhere on screen. Text-related
+ * attributes can also be assigned in XML - these will get propogated to the child TextViews
+ * automatically.
+ */
+public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnPageChangeListener {
+
+    ViewPager mPager;
+    /**
+     * Linearlayout that will contain the TextViews serving as tabs. This is the only child
+     * of the parent HorizontalScrollView.
+     */
+    LinearLayout mChild;
+    final int mTextStyle;
+    final ColorStateList mTextColor;
+    final int mTextSize;
+    final boolean mTextAllCaps;
+    int mPrevSelected = -1;
+    int mSidePadding;
+
+    private static final int TAB_SIDE_PADDING_IN_DPS = 10;
+
+    // TODO: This should use <declare-styleable> in the future
+    private static final int[] ATTRS = new int[] {
+        android.R.attr.textSize,
+        android.R.attr.textStyle,
+        android.R.attr.textColor,
+        android.R.attr.textAllCaps
+    };
+
+    /**
+     * Simulates actionbar tab behavior by showing a toast with the tab title when long clicked.
+     */
+    private class OnTabLongClickListener implements OnLongClickListener {
+        final int mPosition;
+
+        public OnTabLongClickListener(int position) {
+            mPosition = position;
+        }
+
+        @Override
+        public boolean onLongClick(View v) {
+            final int[] screenPos = new int[2];
+            getLocationOnScreen(screenPos);
+
+            final Context context = getContext();
+            final int width = getWidth();
+            final int height = getHeight();
+            final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
+
+            Toast toast = Toast.makeText(context, mPager.getAdapter().getPageTitle(mPosition),
+                    Toast.LENGTH_SHORT);
+
+            // Show the toast under the tab
+            toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
+                    (screenPos[0] + width / 2) - screenWidth / 2, screenPos[1] + height);
+
+            toast.show();
+            return true;
+        }
+    }
+
+    public ViewPagerTabs(Context context) {
+        this(context, null);
+    }
+
+    public ViewPagerTabs(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public ViewPagerTabs(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setFillViewport(true);
+
+        mSidePadding = (int) (getResources().getDisplayMetrics().density * TAB_SIDE_PADDING_IN_DPS);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
+        mTextSize = a.getDimensionPixelSize(0, 0);
+        mTextStyle = a.getInt(1, 0);
+        mTextColor = a.getColorStateList(2);
+        mTextAllCaps = a.getBoolean(3, false);
+
+        mChild = new LinearLayout(context);
+        addView(mChild,
+                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
+        a.recycle();
+    }
+
+    public void setViewPager(ViewPager viewPager) {
+        mPager = viewPager;
+        addTabs(mPager.getAdapter());
+    }
+
+    private void addTabs(PagerAdapter adapter) {
+        mChild.removeAllViews();
+
+        final int count = adapter.getCount();
+        for (int i = 0; i < count; i++) {
+            addTab(adapter.getPageTitle(i), i);
+        }
+    }
+
+    private void addTab(CharSequence tabTitle, final int position) {
+        final TextView textView = new TextView(getContext());
+        textView.setText(tabTitle);
+        textView.setBackgroundResource(R.drawable.action_bar_tab);
+        textView.setGravity(Gravity.CENTER);
+        textView.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mPager.setCurrentItem(position);
+            }
+        });
+
+        textView.setOnLongClickListener(new OnTabLongClickListener(position));
+
+        // Assign various text appearance related attributes to child views.
+        if (mTextStyle > 0) {
+            textView.setTypeface(textView.getTypeface(), mTextStyle);
+        }
+        if (mTextSize > 0) {
+            textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
+        }
+        if (mTextColor != null) {
+            textView.setTextColor(mTextColor);
+        }
+        textView.setAllCaps(mTextAllCaps);
+        textView.setPadding(mSidePadding, 0, mSidePadding, 0);
+        mChild.addView(textView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.MATCH_PARENT, 1));
+        // Default to the first child being selected
+        if (position == 0) {
+            mPrevSelected = 0;
+            textView.setSelected(true);
+        }
+    }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+    }
+
+    @Override
+    public void onPageSelected(int position) {
+        if (mPrevSelected >= 0) {
+            mChild.getChildAt(mPrevSelected).setSelected(false);
+        }
+        final View selectedChild = mChild.getChildAt(position);
+        selectedChild.setSelected(true);
+        // Update scroll position
+        final int scrollPos = selectedChild.getLeft() - (getWidth() - selectedChild.getWidth()) / 2;
+        smoothScrollTo(scrollPos, 0);
+        mPrevSelected = position;
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+    }
+}
diff --git a/src/com/android/dialer/list/WifiWizardAdapter.java b/src/com/android/dialer/list/WifiWizardAdapter.java
deleted file mode 100644
index bac8c7a..0000000
--- a/src/com/android/dialer/list/WifiWizardAdapter.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2013 Google Inc.
- * Licensed to 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.list;
-
-import com.android.dialer.R;
-import android.content.Context;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.Button;
-
-public class WifiWizardAdapter extends BaseAdapter {
-
-    public interface WifiWizardModel {
-        public static final int WIFI_CALL_STATE_ALWAYS = 0;
-        public static final int WIFI_CALL_STATE_NEVER = 1;
-        public static final int WIFI_CALL_STATE_ASK = 2;
-
-        void setWifiCallState(int state);
-
-        int getWifiCallState();
-
-        boolean shouldDisplayWifiSelection();
-    }
-
-    private abstract class WifiWizardStep {
-        private final int mResourceId;
-        private View mView;
-        protected WifiWizardStep(int resourceId) {
-            mResourceId = resourceId;
-        }
-        public final View getView() {
-            if (mView == null) {
-                mView = inflate(mResourceId);
-            }
-            if (mView.getParent() != null && (mView.getParent() instanceof ViewGroup)) {
-                ((ViewGroup) mView.getParent()).removeView(mView);
-            }
-            configureView(mView);
-            return mView;
-        }
-        protected abstract void configureView(View view);
-    }
-
-    private WifiWizardStep mTeaserStep =
-            new WifiWizardStep(R.layout.wifi_call_enable_teaser) {
-                @Override
-                protected void configureView(View view) {
-                    view.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            mStep = mSettingsStep;
-                            notifyDataSetChanged();
-                        }
-                    });
-                }
-            };
-
-    private WifiWizardStep mSettingsStep =
-            new WifiWizardStep(R.layout.wifi_call_enable_settings) {
-                @Override
-                protected void configureView(View view) {
-                    view.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            mStep = mCompletionStep;
-                            notifyDataSetChanged();
-                        }
-                    });
-                }
-            };
-
-    private WifiWizardStep mCompletionStep =
-            new WifiWizardStep(R.layout.wifi_call_enable_completion) {
-                @Override
-                protected void configureView(View view) {
-                    view.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            mStep = mTeaserStep;
-                            notifyDataSetChanged();
-                        }
-                    });
-                }
-            };
-
-    private final WifiWizardModel mModel;
-    private final Context mContext;
-    private WifiWizardStep mStep = mTeaserStep;
-
-    public WifiWizardAdapter(Context context, WifiWizardModel model) {
-        this.mContext = context;
-        this.mModel = model;
-    }
-
-    @Override
-    public int getCount() {
-        return 1;
-    }
-
-    @Override
-    public Object getItem(int position) {
-        return this;
-    }
-
-    @Override
-    public long getItemId(int position) {
-        return 1L;
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        return mStep.getView();
-    }
-
-    private View inflate(int resource) {
-        return ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
-                .inflate(resource, null);
-    }
-}
diff --git a/src/com/android/dialer/service/CachedNumberLookupService.java b/src/com/android/dialer/service/CachedNumberLookupService.java
index 5745c9d..73fd895 100644
--- a/src/com/android/dialer/service/CachedNumberLookupService.java
+++ b/src/com/android/dialer/service/CachedNumberLookupService.java
@@ -33,6 +33,8 @@
 
     public boolean isCacheUri(String uri);
 
+    public boolean isBusiness(int sourceType);
+
     public boolean addPhoto(Context context, String number, byte[] photo);
 
     /**
diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java
new file mode 100644
index 0000000..8b0c4c6
--- /dev/null
+++ b/src/com/android/dialer/util/DialerUtils.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.util;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.widget.Toast;
+
+import com.android.dialer.R;
+
+/**
+ * General purpose utility methods for the Dialer.
+ */
+public class DialerUtils {
+
+    /**
+     * Attempts to start an activity and displays a toast with the default error message if the
+     * activity is not found, instead of throwing an exception.
+     *
+     * @param context to start the activity with.
+     * @param intent to start the activity with.
+     */
+    public static void startActivityWithErrorToast(Context context, Intent intent) {
+        startActivityWithErrorToast(context, intent, R.string.activity_not_available);
+    }
+
+    /**
+     * Attempts to start an activity and displays a toast with a provided error message if the
+     * activity is not found, instead of throwing an exception.
+     *
+     * @param context to start the activity with.
+     * @param intent to start the activity with.
+     * @param msgId Resource ID of the string to display in an error message if the activity is
+     *              not found.
+     */
+    public static void startActivityWithErrorToast(Context context, Intent intent, int msgId) {
+        try {
+          context.startActivity(intent);
+        } catch (ActivityNotFoundException e) {
+            Toast.makeText(context, msgId, Toast.LENGTH_SHORT).show();
+        }
+    }
+}
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
index 1dbae65..826dec0 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
@@ -74,7 +74,9 @@
     };
 
     private VoicemailPlaybackPresenter mPresenter;
-    private ScheduledExecutorService mScheduledExecutorService;
+    private static int mMediaPlayerRefCount = 0;
+    private static MediaPlayerProxy mMediaPlayerInstance;
+    private static ScheduledExecutorService mScheduledExecutorService;
     private View mPlaybackLayout;
 
     @Override
@@ -87,7 +89,6 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        mScheduledExecutorService = createScheduledExecutorService();
         Bundle arguments = getArguments();
         Preconditions.checkNotNull(arguments, "fragment must be started with arguments");
         Uri voicemailUri = arguments.getParcelable(EXTRA_VOICEMAIL_URI);
@@ -99,8 +100,8 @@
                 powerManager.newWakeLock(
                         PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getSimpleName());
         mPresenter = new VoicemailPlaybackPresenter(createPlaybackViewImpl(),
-                createMediaPlayer(mScheduledExecutorService), voicemailUri,
-                mScheduledExecutorService, startPlayback,
+                getMediaPlayerInstance(), voicemailUri,
+                getScheduledExecutorServiceInstance(), startPlayback,
                 AsyncTaskExecutors.createAsyncTaskExecutor(), wakeLock);
         mPresenter.onCreate(savedInstanceState);
     }
@@ -113,8 +114,8 @@
 
     @Override
     public void onDestroy() {
+        shutdownMediaPlayer();
         mPresenter.onDestroy();
-        mScheduledExecutorService.shutdown();
         super.onDestroy();
     }
 
@@ -129,12 +130,36 @@
                 mPlaybackLayout);
     }
 
-    private MediaPlayerProxy createMediaPlayer(ExecutorService executorService) {
-        return VariableSpeed.createVariableSpeed(executorService);
+    private static synchronized MediaPlayerProxy getMediaPlayerInstance() {
+        ++mMediaPlayerRefCount;
+        if (mMediaPlayerInstance == null) {
+            mMediaPlayerInstance = VariableSpeed.createVariableSpeed(
+                    getScheduledExecutorServiceInstance());
+        }
+        return mMediaPlayerInstance;
     }
 
-    private ScheduledExecutorService createScheduledExecutorService() {
-        return Executors.newScheduledThreadPool(NUMBER_OF_THREADS_IN_POOL);
+    private static synchronized ScheduledExecutorService getScheduledExecutorServiceInstance() {
+        if (mScheduledExecutorService == null) {
+            mScheduledExecutorService = Executors.newScheduledThreadPool(
+                    NUMBER_OF_THREADS_IN_POOL);
+        }
+        return mScheduledExecutorService;
+    }
+
+    private static synchronized void shutdownMediaPlayer() {
+        --mMediaPlayerRefCount;
+        if (mMediaPlayerRefCount > 0) {
+            return;
+        }
+        if (mScheduledExecutorService != null) {
+            mScheduledExecutorService.shutdown();
+            mScheduledExecutorService = null;
+        }
+        if (mMediaPlayerInstance != null) {
+            mMediaPlayerInstance.release();
+            mMediaPlayerInstance = null;
+        }
     }
 
     /**
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index ebda0eb..085ef66 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -35,6 +35,7 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 
+import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
@@ -311,6 +312,7 @@
                             mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
                             mPlayer.setAudioStreamType(PLAYBACK_STREAM);
                             mPlayer.prepare();
+                            mDuration.set(mPlayer.getDuration());
                             return null;
                         } catch (Exception e) {
                             return e;
@@ -344,7 +346,7 @@
         mView.setSpeakerPhoneOn(mView.isSpeakerPhoneOn());
         mView.setRateDecreaseButtonListener(createRateDecreaseListener());
         mView.setRateIncreaseButtonListener(createRateIncreaseListener());
-        mView.setClipPosition(0, mPlayer.getDuration());
+        mView.setClipPosition(0, mDuration.get());
         mView.playbackStopped();
         // Always disable on stop.
         mView.disableProximitySensor();
@@ -363,6 +365,10 @@
     }
 
     public void onDestroy() {
+        if (mPrepareTask != null) {
+            mPrepareTask.cancel(false);
+            mPrepareTask = null;
+        }
         mPlayer.release();
         if (mFetchResultHandler != null) {
             mFetchResultHandler.destroy();
@@ -430,49 +436,67 @@
         }
     }
 
+    private class AsyncPrepareTask extends AsyncTask<Void, Void, Exception> {
+        private int mClipPositionInMillis;
+
+        AsyncPrepareTask(int clipPositionInMillis) {
+            mClipPositionInMillis = clipPositionInMillis;
+        }
+
+        @Override
+        public Exception doInBackground(Void... params) {
+            try {
+                if (!mPlayer.isReadyToPlay()) {
+                    mPlayer.reset();
+                    mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
+                    mPlayer.setAudioStreamType(PLAYBACK_STREAM);
+                    mPlayer.prepare();
+                }
+                return null;
+            } catch (Exception e) {
+                return e;
+            }
+        }
+
+        @Override
+        public void onPostExecute(Exception exception) {
+            mPrepareTask = null;
+            if (exception == null) {
+                final int duration = mPlayer.getDuration();
+                mDuration.set(duration);
+                int startPosition =
+                    constrain(mClipPositionInMillis, 0, duration);
+                mPlayer.seekTo(startPosition);
+                mView.setClipPosition(startPosition, duration);
+                try {
+                    // Can throw RejectedExecutionException
+                    mPlayer.start();
+                    mView.playbackStarted();
+                    if (!mWakeLock.isHeld()) {
+                        mWakeLock.acquire();
+                    }
+                    // Only enable if we are not currently using the speaker phone.
+                    if (!mView.isSpeakerPhoneOn()) {
+                        mView.enableProximitySensor();
+                    }
+                    // Can throw RejectedExecutionException
+                    mPositionUpdater.startUpdating(startPosition, duration);
+                } catch (RejectedExecutionException e) {
+                    handleError(e);
+                }
+            } else {
+                handleError(exception);
+            }
+        }
+    }
+
     private void resetPrepareStartPlaying(final int clipPositionInMillis) {
         if (mPrepareTask != null) {
             mPrepareTask.cancel(false);
+            mPrepareTask = null;
         }
         mPrepareTask = mAsyncTaskExecutor.submit(Tasks.RESET_PREPARE_START_MEDIA_PLAYER,
-                new AsyncTask<Void, Void, Exception>() {
-                    @Override
-                    public Exception doInBackground(Void... params) {
-                        try {
-                            mPlayer.reset();
-                            mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
-                            mPlayer.setAudioStreamType(PLAYBACK_STREAM);
-                            mPlayer.prepare();
-                            return null;
-                        } catch (Exception e) {
-                            return e;
-                        }
-                    }
-
-                    @Override
-                    public void onPostExecute(Exception exception) {
-                        mPrepareTask = null;
-                        if (exception == null) {
-                            mDuration.set(mPlayer.getDuration());
-                            int startPosition =
-                                    constrain(clipPositionInMillis, 0, mDuration.get());
-                            mView.setClipPosition(startPosition, mDuration.get());
-                            mPlayer.seekTo(startPosition);
-                            mPlayer.start();
-                            mView.playbackStarted();
-                            if (!mWakeLock.isHeld()) {
-                                mWakeLock.acquire();
-                            }
-                            // Only enable if we are not currently using the speaker phone.
-                            if (!mView.isSpeakerPhoneOn()) {
-                                mView.enableProximitySensor();
-                            }
-                            mPositionUpdater.startUpdating(startPosition, mDuration.get());
-                        } else {
-                            handleError(exception);
-                        }
-                    }
-                });
+                new AsyncPrepareTask(clipPositionInMillis));
     }
 
     private void handleError(Exception e) {
@@ -598,6 +622,7 @@
             synchronized (mLock) {
                 if (mScheduledFuture != null) {
                     mScheduledFuture.cancel(false);
+                    mScheduledFuture = null;
                 }
                 mScheduledFuture = mExecutorService.scheduleAtFixedRate(this, 0, mPeriodMillis,
                         TimeUnit.MILLISECONDS);
@@ -620,6 +645,7 @@
         }
         if (mPrepareTask != null) {
             mPrepareTask.cancel(false);
+            mPrepareTask = null;
         }
         if (mWakeLock.isHeld()) {
             mWakeLock.release();
diff --git a/src/com/android/dialer/widget/OverlappingPaneLayout.java b/src/com/android/dialer/widget/OverlappingPaneLayout.java
new file mode 100644
index 0000000..e17194e
--- /dev/null
+++ b/src/com/android/dialer/widget/OverlappingPaneLayout.java
@@ -0,0 +1,1100 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.v4.view.AccessibilityDelegateCompat;
+import android.support.v4.view.MotionEventCompat;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.view.accessibility.AccessibilityEvent;
+
+/**
+ * A custom layout that aligns its child views vertically as two panes, and allows for the bottom
+ * pane to be dragged upwards to overlap and hide the top pane. This layout is adapted from
+ * {@link android.support.v4.widget.SlidingPaneLayout}.
+ */
+public class OverlappingPaneLayout extends ViewGroup {
+    private static final String TAG = "SlidingPaneLayout";
+
+    /**
+     * Default size of the overhang for a pane in the open state.
+     * At least this much of a sliding pane will remain visible.
+     * This indicates that there is more content available and provides
+     * a "physical" edge to grab to pull it closed.
+     */
+    private static final int DEFAULT_OVERHANG_SIZE = 32; // dp;
+
+    /**
+     * If no fade color is given by default it will fade to 80% gray.
+     */
+    private static final int DEFAULT_FADE_COLOR = 0xcccccccc;
+
+    /**
+     * Minimum velocity that will be detected as a fling
+     */
+    private static final int MIN_FLING_VELOCITY = 400; // dips per second
+
+    /**
+     * The size of the overhang in pixels.
+     * This is the minimum section of the sliding panel that will
+     * be visible in the open state to allow for a closing drag.
+     */
+    private final int mOverhangSize;
+
+    /**
+     * True if a panel can slide with the current measurements
+     */
+    private boolean mCanSlide;
+
+    /**
+     * The child view that can slide, if any.
+     */
+    private View mSlideableView;
+
+    /**
+     * The view that can be used to start the drag with.
+     */
+    private View mCapturableView;
+
+    /**
+     * How far the panel is offset from its closed position.
+     * range [0, 1] where 0 = closed, 1 = open.
+     */
+    private float mSlideOffset;
+
+    /**
+     * How far in pixels the slideable panel may move.
+     */
+    private int mSlideRange;
+
+    /**
+     * A panel view is locked into internal scrolling or another condition that
+     * is preventing a drag.
+     */
+    private boolean mIsUnableToDrag;
+
+    /**
+     * Tracks whether or not a child view is in the process of a nested scroll.
+     */
+    private boolean mIsInNestedScroll;
+
+    private float mInitialMotionX;
+    private float mInitialMotionY;
+
+    private PanelSlideListener mPanelSlideListener;
+
+    private final ViewDragHelper mDragHelper;
+
+    /**
+     * Stores whether or not the pane was open the last time it was slideable.
+     * If open/close operations are invoked this state is modified. Used by
+     * instance state save/restore.
+     */
+    private boolean mPreservedOpenState;
+    private boolean mFirstLayout = true;
+
+    private final Rect mTmpRect = new Rect();
+
+    /**
+     * Listener for monitoring events about sliding panes.
+     */
+    public interface PanelSlideListener {
+        /**
+         * Called when a sliding pane's position changes.
+         * @param panel The child view that was moved
+         * @param slideOffset The new offset of this sliding pane within its range, from 0-1
+         */
+        public void onPanelSlide(View panel, float slideOffset);
+        /**
+         * Called when a sliding pane becomes slid completely open. The pane may or may not
+         * be interactive at this point depending on how much of the pane is visible.
+         * @param panel The child view that was slid to an open position, revealing other panes
+         */
+        public void onPanelOpened(View panel);
+
+        /**
+         * Called when a sliding pane becomes slid completely closed. The pane is now guaranteed
+         * to be interactive. It may now obscure other views in the layout.
+         * @param panel The child view that was slid to a closed position
+         */
+        public void onPanelClosed(View panel);
+    }
+
+    public OverlappingPaneLayout(Context context) {
+        this(context, null);
+    }
+
+    public OverlappingPaneLayout(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public OverlappingPaneLayout(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        final float density = context.getResources().getDisplayMetrics().density;
+        mOverhangSize = (int) (DEFAULT_OVERHANG_SIZE * density + 0.5f);
+
+        setWillNotDraw(false);
+
+        ViewCompat.setAccessibilityDelegate(this, new AccessibilityDelegate());
+        ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+
+        mDragHelper = ViewDragHelper.create(this, 0.5f, new DragHelperCallback());
+        mDragHelper.setMinVelocity(MIN_FLING_VELOCITY * density);
+    }
+
+    /**
+     * Set the view that can be used to start dragging the sliding pane.
+     */
+    public void setCapturableView(View capturableView) {
+        mCapturableView = capturableView;
+    }
+
+    public void setPanelSlideListener(PanelSlideListener listener) {
+        mPanelSlideListener = listener;
+    }
+
+    void dispatchOnPanelSlide(View panel) {
+        if (mPanelSlideListener != null) {
+            mPanelSlideListener.onPanelSlide(panel, mSlideOffset);
+        }
+    }
+
+    void dispatchOnPanelOpened(View panel) {
+        if (mPanelSlideListener != null) {
+            mPanelSlideListener.onPanelOpened(panel);
+        }
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+    }
+
+    void dispatchOnPanelClosed(View panel) {
+        if (mPanelSlideListener != null) {
+            mPanelSlideListener.onPanelClosed(panel);
+        }
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+    }
+
+    void updateObscuredViewsVisibility(View panel) {
+        final int startBound = getPaddingTop();
+        final int endBound = getHeight() - getPaddingBottom();
+
+        final int leftBound = getPaddingLeft();
+        final int rightBound = getWidth() - getPaddingRight();
+        final int left;
+        final int right;
+        final int top;
+        final int bottom;
+        if (panel != null && viewIsOpaque(panel)) {
+            left = panel.getLeft();
+            right = panel.getRight();
+            top = panel.getTop();
+            bottom = panel.getBottom();
+        } else {
+            left = right = top = bottom = 0;
+        }
+
+        for (int i = 0, childCount = getChildCount(); i < childCount; i++) {
+            final View child = getChildAt(i);
+
+            if (child == panel) {
+                // There are still more children above the panel but they won't be affected.
+                break;
+            }
+
+            final int clampedChildLeft = Math.max(leftBound, child.getLeft());
+            final int clampedChildRight = Math.min(rightBound, child.getRight());
+            final int clampedChildTop = Math.max(startBound, child.getTop());
+            final int clampedChildBottom = Math.min(endBound, child.getBottom());
+
+            final int vis;
+            if (clampedChildLeft >= left && clampedChildTop >= top &&
+                    clampedChildRight <= right && clampedChildBottom <= bottom) {
+                vis = INVISIBLE;
+            } else {
+                vis = VISIBLE;
+            }
+            child.setVisibility(vis);
+        }
+    }
+
+    void setAllChildrenVisible() {
+        for (int i = 0, childCount = getChildCount(); i < childCount; i++) {
+            final View child = getChildAt(i);
+            if (child.getVisibility() == INVISIBLE) {
+                child.setVisibility(VISIBLE);
+            }
+        }
+    }
+
+    private static boolean viewIsOpaque(View v) {
+        if (ViewCompat.isOpaque(v)) return true;
+
+        final Drawable bg = v.getBackground();
+        if (bg != null) {
+            return bg.getOpacity() == PixelFormat.OPAQUE;
+        }
+        return false;
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        mFirstLayout = true;
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        mFirstLayout = true;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+
+        if (widthMode != MeasureSpec.EXACTLY) {
+            if (isInEditMode()) {
+                // Don't crash the layout editor. Consume all of the space if specified
+                // or pick a magic number from thin air otherwise.
+                // TODO Better communication with tools of this bogus state.
+                // It will crash on a real device.
+                if (widthMode == MeasureSpec.AT_MOST) {
+                    widthMode = MeasureSpec.EXACTLY;
+                } else if (widthMode == MeasureSpec.UNSPECIFIED) {
+                    widthMode = MeasureSpec.EXACTLY;
+                    widthSize = 300;
+                }
+            } else {
+                throw new IllegalStateException("Width must have an exact value or MATCH_PARENT");
+            }
+        } else if (heightMode == MeasureSpec.UNSPECIFIED) {
+            if (isInEditMode()) {
+                // Don't crash the layout editor. Pick a magic number from thin air instead.
+                // TODO Better communication with tools of this bogus state.
+                // It will crash on a real device.
+                if (heightMode == MeasureSpec.UNSPECIFIED) {
+                    heightMode = MeasureSpec.AT_MOST;
+                    heightSize = 300;
+                }
+            } else {
+                throw new IllegalStateException("Height must not be UNSPECIFIED");
+            }
+        }
+
+        int layoutWidth = 0;
+        int maxLayoutWidth = -1;
+        switch (widthMode) {
+            case MeasureSpec.EXACTLY:
+                layoutWidth = maxLayoutWidth = widthSize - getPaddingLeft() - getPaddingRight();
+                break;
+            case MeasureSpec.AT_MOST:
+                maxLayoutWidth = widthSize - getPaddingLeft() - getPaddingRight();
+                break;
+        }
+
+        float weightSum = 0;
+        boolean canSlide = false;
+        final int heightAvailable = heightSize - getPaddingTop() - getPaddingBottom();
+        int heightRemaining = heightAvailable;
+        final int childCount = getChildCount();
+
+        if (childCount > 2) {
+            Log.e(TAG, "onMeasure: More than two child views are not supported.");
+        }
+
+        // We'll find the current one below.
+        mSlideableView = null;
+
+        // First pass. Measure based on child LayoutParams width/height.
+        // Weight will incur a second pass.
+        for (int i = 0; i < childCount; i++) {
+            final View child = getChildAt(i);
+            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+            if (child.getVisibility() == GONE) {
+                continue;
+            }
+
+            if (lp.weight > 0) {
+                weightSum += lp.weight;
+
+                // If we have no height, weight is the only contributor to the final size.
+                // Measure this view on the weight pass only.
+                if (lp.height == 0) continue;
+            }
+
+            int childHeightSpec;
+            final int verticalMargin = lp.topMargin + lp.bottomMargin;
+            if (lp.height == LayoutParams.WRAP_CONTENT) {
+                childHeightSpec = MeasureSpec.makeMeasureSpec(heightAvailable - verticalMargin,
+                        MeasureSpec.AT_MOST);
+            } else if (lp.height == LayoutParams.MATCH_PARENT) {
+                childHeightSpec = MeasureSpec.makeMeasureSpec(heightAvailable - verticalMargin,
+                        MeasureSpec.EXACTLY);
+            } else {
+                childHeightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
+            }
+
+            int childWidthSpec;
+            if (lp.width == LayoutParams.WRAP_CONTENT) {
+                childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth, MeasureSpec.AT_MOST);
+            } else if (lp.width == LayoutParams.MATCH_PARENT) {
+                childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth, MeasureSpec.EXACTLY);
+            } else {
+                childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
+            }
+
+            child.measure(childWidthSpec, childHeightSpec);
+            final int childWidth = child.getMeasuredWidth();
+            final int childHeight = child.getMeasuredHeight();
+
+            if (widthMode == MeasureSpec.AT_MOST && childWidth > layoutWidth) {
+                layoutWidth = Math.min(childWidth, maxLayoutWidth);
+            }
+
+            heightRemaining -= childHeight;
+            canSlide |= lp.slideable = heightRemaining < 0;
+            if (lp.slideable) {
+                mSlideableView = child;
+            }
+        }
+
+        // Resolve weight and make sure non-sliding panels are smaller than the full screen.
+        if (canSlide || weightSum > 0) {
+            final int fixedPanelHeightLimit = heightAvailable - mOverhangSize;
+
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+
+                if (child.getVisibility() == GONE) {
+                    continue;
+                }
+
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+                if (child.getVisibility() == GONE) {
+                    continue;
+                }
+
+                final boolean skippedFirstPass = lp.height == 0 && lp.weight > 0;
+                final int measuredHeight = skippedFirstPass ? 0 : child.getMeasuredHeight();
+                if (canSlide && child != mSlideableView) {
+                    if (lp.height < 0 && (measuredHeight > fixedPanelHeightLimit || lp.weight > 0)) {
+                        // Fixed panels in a sliding configuration should
+                        // be clamped to the fixed panel limit.
+                        final int childWidthSpec;
+                        if (skippedFirstPass) {
+                            // Do initial width measurement if we skipped measuring this view
+                            // the first time around.
+                            if (lp.width == LayoutParams.WRAP_CONTENT) {
+                                childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+                                        MeasureSpec.AT_MOST);
+                            } else if (lp.height == LayoutParams.MATCH_PARENT) {
+                                childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+                                        MeasureSpec.EXACTLY);
+                            } else {
+                                childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width,
+                                        MeasureSpec.EXACTLY);
+                            }
+                        } else {
+                            childWidthSpec = MeasureSpec.makeMeasureSpec(
+                                    child.getMeasuredWidth(), MeasureSpec.EXACTLY);
+                        }
+                        final int childHeightSpec = MeasureSpec.makeMeasureSpec(
+                                fixedPanelHeightLimit, MeasureSpec.EXACTLY);
+                        child.measure(childWidthSpec, childHeightSpec);
+                    }
+                } else if (lp.weight > 0) {
+                    int childWidthSpec;
+                    if (lp.height == 0) {
+                        // This was skipped the first time; figure out a real width spec.
+                        if (lp.width == LayoutParams.WRAP_CONTENT) {
+                            childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+                                    MeasureSpec.AT_MOST);
+                        } else if (lp.width == LayoutParams.MATCH_PARENT) {
+                            childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+                                    MeasureSpec.EXACTLY);
+                        } else {
+                            childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width,
+                                    MeasureSpec.EXACTLY);
+                        }
+                    } else {
+                        childWidthSpec = MeasureSpec.makeMeasureSpec(
+                                child.getMeasuredWidth(), MeasureSpec.EXACTLY);
+                    }
+
+                    if (canSlide) {
+                        // Consume available space
+                        final int verticalMargin = lp.topMargin + lp.bottomMargin;
+                        final int newHeight = heightAvailable - verticalMargin;
+                        final int childHeightSpec = MeasureSpec.makeMeasureSpec(
+                                newHeight, MeasureSpec.EXACTLY);
+                        if (measuredHeight != newHeight) {
+                            child.measure(childWidthSpec, childHeightSpec);
+                        }
+                    } else {
+                        // Distribute the extra width proportionally similar to LinearLayout
+                        final int heightToDistribute = Math.max(0, heightRemaining);
+                        final int addedHeight = (int) (lp.weight * heightToDistribute / weightSum);
+                        final int childHeightSpec = MeasureSpec.makeMeasureSpec(
+                                measuredHeight + addedHeight, MeasureSpec.EXACTLY);
+                        child.measure(childWidthSpec, childHeightSpec);
+                    }
+                }
+            }
+        }
+
+        final int measuredHeight = heightSize;
+        final int measuredWidth = layoutWidth + getPaddingLeft() + getPaddingRight();
+
+        setMeasuredDimension(measuredWidth, measuredHeight);
+        mCanSlide = canSlide;
+
+        if (mDragHelper.getViewDragState() != ViewDragHelper.STATE_IDLE && !canSlide) {
+            // Cancel scrolling in progress, it's no longer relevant.
+            mDragHelper.abort();
+        }
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        mDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_TOP);
+
+        final int height = b - t;
+        final int paddingTop = getPaddingTop();
+        final int paddingBottom = getPaddingBottom();
+        final int paddingLeft = getPaddingLeft();
+
+        final int childCount = getChildCount();
+        int yStart = paddingTop;
+        int nextYStart = yStart;
+
+        if (mFirstLayout) {
+            mSlideOffset = mCanSlide && mPreservedOpenState ? 1.f : 0.f;
+        }
+
+        for (int i = 0; i < childCount; i++) {
+            final View child = getChildAt(i);
+
+            if (child.getVisibility() == GONE) {
+                continue;
+            }
+
+            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+            final int childHeight = child.getMeasuredHeight();
+
+            if (lp.slideable) {
+                final int margin = lp.topMargin + lp.bottomMargin;
+                final int range = Math.min(nextYStart,
+                        height - paddingBottom - mOverhangSize) - yStart - margin;
+                mSlideRange = range;
+                final int lpMargin = lp.topMargin;
+                final int pos = (int) (range * mSlideOffset);
+                yStart += pos + lpMargin;
+                mSlideOffset = (float) pos / mSlideRange;
+            } else {
+                yStart = nextYStart;
+            }
+
+            final int childTop = yStart;
+            final int childBottom = childTop + childHeight;
+            final int childLeft = paddingLeft;
+            final int childRight = childLeft + child.getMeasuredWidth();
+
+            child.layout(childLeft, childTop, childRight, childBottom);
+
+            nextYStart += child.getHeight();
+        }
+
+        if (mFirstLayout) {
+            updateObscuredViewsVisibility(mSlideableView);
+        }
+
+        mFirstLayout = false;
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+        // Recalculate sliding panes and their details
+        if (h != oldh) {
+            mFirstLayout = true;
+        }
+    }
+
+    @Override
+    public void requestChildFocus(View child, View focused) {
+        super.requestChildFocus(child, focused);
+        if (!isInTouchMode() && !mCanSlide) {
+            mPreservedOpenState = child == mSlideableView;
+        }
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        final int action = MotionEventCompat.getActionMasked(ev);
+
+        // Preserve the open state based on the last view that was touched.
+        if (!mCanSlide && action == MotionEvent.ACTION_DOWN && getChildCount() > 1) {
+            // After the first things will be slideable.
+            final View secondChild = getChildAt(1);
+            if (secondChild != null) {
+                mPreservedOpenState = !mDragHelper.isViewUnder(secondChild,
+                        (int) ev.getX(), (int) ev.getY());
+            }
+        }
+
+        if (!mCanSlide || (mIsUnableToDrag && action != MotionEvent.ACTION_DOWN)) {
+            if (!mIsInNestedScroll) {
+                mDragHelper.cancel();
+            }
+            return super.onInterceptTouchEvent(ev);
+        }
+
+        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
+            if (!mIsInNestedScroll) {
+                mDragHelper.cancel();
+            }
+            return false;
+        }
+
+        switch (action) {
+            case MotionEvent.ACTION_DOWN: {
+                mIsUnableToDrag = false;
+                final float x = ev.getX();
+                final float y = ev.getY();
+                mInitialMotionX = x;
+                mInitialMotionY = y;
+
+                break;
+            }
+
+            case MotionEvent.ACTION_MOVE: {
+                final float x = ev.getX();
+                final float y = ev.getY();
+                final float adx = Math.abs(x - mInitialMotionX);
+                final float ady = Math.abs(y - mInitialMotionY);
+                final int slop = mDragHelper.getTouchSlop();
+                if (ady > slop && adx > ady || !isCapturableViewUnder((int) x, (int) y)) {
+                    if (!mIsInNestedScroll) {
+                        mDragHelper.cancel();
+                    }
+                    mIsUnableToDrag = true;
+                    return false;
+                }
+            }
+        }
+
+        final boolean interceptForDrag = mDragHelper.shouldInterceptTouchEvent(ev);
+
+        return interceptForDrag;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (!mCanSlide) {
+            return super.onTouchEvent(ev);
+        }
+
+        mDragHelper.processTouchEvent(ev);
+
+        final int action = ev.getAction();
+        boolean wantTouchEvents = true;
+
+        switch (action & MotionEventCompat.ACTION_MASK) {
+            case MotionEvent.ACTION_DOWN: {
+                final float x = ev.getX();
+                final float y = ev.getY();
+                mInitialMotionX = x;
+                mInitialMotionY = y;
+                break;
+            }
+        }
+
+        return wantTouchEvents;
+    }
+
+    private boolean closePane(View pane, int initialVelocity) {
+        if (mFirstLayout || smoothSlideTo(0.f, initialVelocity)) {
+            mPreservedOpenState = false;
+            return true;
+        }
+        return false;
+    }
+
+    private boolean openPane(View pane, int initialVelocity) {
+        if (mFirstLayout || smoothSlideTo(1.f, initialVelocity)) {
+            mPreservedOpenState = true;
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Open the sliding pane if it is currently slideable. If first layout
+     * has already completed this will animate.
+     *
+     * @return true if the pane was slideable and is now open/in the process of opening
+     */
+    public boolean openPane() {
+        return openPane(mSlideableView, 0);
+    }
+
+    /**
+     * Close the sliding pane if it is currently slideable. If first layout
+     * has already completed this will animate.
+     *
+     * @return true if the pane was slideable and is now closed/in the process of closing
+     */
+    public boolean closePane() {
+        return closePane(mSlideableView, 0);
+    }
+
+    /**
+     * Check if the layout is completely open. It can be open either because the slider
+     * itself is open revealing the left pane, or if all content fits without sliding.
+     *
+     * @return true if sliding panels are completely open
+     */
+    public boolean isOpen() {
+        return !mCanSlide || mSlideOffset == 1;
+    }
+
+    /**
+     * Check if the content in this layout cannot fully fit side by side and therefore
+     * the content pane can be slid back and forth.
+     *
+     * @return true if content in this layout can be slid open and closed
+     */
+    public boolean isSlideable() {
+        return mCanSlide;
+    }
+
+    private void onPanelDragged(int newTop) {
+        if (mSlideableView == null) {
+            // This can happen if we're aborting motion during layout because everything now fits.
+            mSlideOffset = 0;
+            return;
+        }
+        final LayoutParams lp = (LayoutParams) mSlideableView.getLayoutParams();
+
+        final int lpMargin = lp.topMargin;
+        final int topBound = getPaddingTop() + lpMargin;
+
+        mSlideOffset = (float) (newTop - topBound) / mSlideRange;
+
+        dispatchOnPanelSlide(mSlideableView);
+    }
+
+    @Override
+    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+        boolean result;
+        final int save = canvas.save(Canvas.CLIP_SAVE_FLAG);
+
+        if (mCanSlide && !lp.slideable && mSlideableView != null) {
+            // Clip against the slider; no sense drawing what will immediately be covered.
+            canvas.getClipBounds(mTmpRect);
+
+            mTmpRect.bottom = Math.min(mTmpRect.bottom, mSlideableView.getTop());
+            canvas.clipRect(mTmpRect);
+        }
+
+        if (Build.VERSION.SDK_INT >= 11) { // HC
+            result = super.drawChild(canvas, child, drawingTime);
+        } else {
+            if (child.isDrawingCacheEnabled()) {
+                child.setDrawingCacheEnabled(false);
+            }
+            result = super.drawChild(canvas, child, drawingTime);
+        }
+
+        canvas.restoreToCount(save);
+
+        return result;
+    }
+
+    /**
+     * Smoothly animate mDraggingPane to the target X position within its range.
+     *
+     * @param slideOffset position to animate to
+     * @param velocity initial velocity in case of fling, or 0.
+     */
+    boolean smoothSlideTo(float slideOffset, int velocity) {
+        if (!mCanSlide) {
+            // Nothing to do.
+            return false;
+        }
+
+        final LayoutParams lp = (LayoutParams) mSlideableView.getLayoutParams();
+
+        int y;
+        int topBound = getPaddingTop() + lp.topMargin;
+        y = (int) (topBound + slideOffset * mSlideRange);
+
+        if (mDragHelper.smoothSlideViewTo(mSlideableView, mSlideableView.getLeft(), y)) {
+            setAllChildrenVisible();
+            ViewCompat.postInvalidateOnAnimation(this);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void computeScroll() {
+        if (mDragHelper.continueSettling(true)) {
+            if (!mCanSlide) {
+                mDragHelper.abort();
+                return;
+            }
+
+            ViewCompat.postInvalidateOnAnimation(this);
+        }
+    }
+
+    private boolean isCapturableViewUnder(int x, int y) {
+        View capturableView = mCapturableView != null ? mCapturableView : mSlideableView;
+        if (capturableView == null) {
+            return false;
+        }
+        int[] viewLocation = new int[2];
+        capturableView.getLocationOnScreen(viewLocation);
+        int[] parentLocation = new int[2];
+        this.getLocationOnScreen(parentLocation);
+        int screenX = parentLocation[0] + x;
+        int screenY = parentLocation[1] + y;
+        return screenX >= viewLocation[0]
+                && screenX < viewLocation[0] + capturableView.getWidth()
+                && screenY >= viewLocation[1]
+                && screenY < viewLocation[1] + capturableView.getHeight();
+    }
+
+    @Override
+    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
+        return new LayoutParams();
+    }
+
+    @Override
+    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
+        return p instanceof MarginLayoutParams
+                ? new LayoutParams((MarginLayoutParams) p)
+                : new LayoutParams(p);
+    }
+
+    @Override
+    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+        return p instanceof LayoutParams && super.checkLayoutParams(p);
+    }
+
+    @Override
+    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return new LayoutParams(getContext(), attrs);
+    }
+
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        Parcelable superState = super.onSaveInstanceState();
+
+        SavedState ss = new SavedState(superState);
+        ss.isOpen = isSlideable() ? isOpen() : mPreservedOpenState;
+
+        return ss;
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        SavedState ss = (SavedState) state;
+        super.onRestoreInstanceState(ss.getSuperState());
+
+        if (ss.isOpen) {
+            openPane();
+        } else {
+            closePane();
+        }
+        mPreservedOpenState = ss.isOpen;
+    }
+
+    @Override
+    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
+        final boolean startNestedScroll = (nestedScrollAxes & SCROLL_AXIS_VERTICAL) != 0;
+        if (startNestedScroll) {
+            mIsInNestedScroll = true;
+            mDragHelper.startNestedScroll(mSlideableView);
+        }
+        return startNestedScroll;
+    }
+
+    @Override
+    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {
+        mDragHelper.processNestedScroll(mSlideableView, 0, dy, consumed);
+    }
+
+    @Override
+    public void onStopNestedScroll(View child) {
+        mDragHelper.stopNestedScroll(mSlideableView);
+        mIsInNestedScroll = false;
+    }
+
+    private class DragHelperCallback extends ViewDragHelper.Callback {
+
+        @Override
+        public boolean tryCaptureView(View child, int pointerId) {
+            if (mIsUnableToDrag) {
+                return false;
+            }
+
+            return ((LayoutParams) child.getLayoutParams()).slideable;
+        }
+
+        @Override
+        public void onViewDragStateChanged(int state) {
+            if (mDragHelper.getViewDragState() == ViewDragHelper.STATE_IDLE) {
+                if (mSlideOffset == 0) {
+                    updateObscuredViewsVisibility(mSlideableView);
+                    dispatchOnPanelClosed(mSlideableView);
+                    mPreservedOpenState = false;
+                } else {
+                    dispatchOnPanelOpened(mSlideableView);
+                    mPreservedOpenState = true;
+                }
+            }
+        }
+
+        @Override
+        public void onViewCaptured(View capturedChild, int activePointerId) {
+            // Make all child views visible in preparation for sliding things around
+            setAllChildrenVisible();
+        }
+
+        @Override
+        public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
+            onPanelDragged(top);
+            invalidate();
+        }
+
+        @Override
+        public void onViewReleased(View releasedChild, float xvel, float yvel) {
+            final LayoutParams lp = (LayoutParams) releasedChild.getLayoutParams();
+
+            int top = getPaddingTop() + lp.topMargin;
+            if (yvel > 0 || (yvel == 0 && mSlideOffset > 0.5f)) {
+                top += mSlideRange;
+            }
+
+            mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top);
+            invalidate();
+        }
+
+        @Override
+        public int getViewVerticalDragRange(View child) {
+            return mSlideRange;
+        }
+
+        @Override
+        public int clampViewPositionHorizontal(View child, int left, int dx) {
+            // Make sure we never move views horizontally.
+            return child.getLeft();
+        }
+
+        @Override
+        public int clampViewPositionVertical(View child, int top, int dy) {
+            final LayoutParams lp = (LayoutParams) mSlideableView.getLayoutParams();
+
+            final int newTop;
+            int topBound = getPaddingTop() + lp.topMargin;
+            int bottomBound = topBound + mSlideRange;
+            newTop = Math.min(Math.max(top, topBound), bottomBound);
+
+            return newTop;
+        }
+
+        @Override
+        public void onEdgeDragStarted(int edgeFlags, int pointerId) {
+            mDragHelper.captureChildView(mSlideableView, pointerId);
+        }
+    }
+
+    public static class LayoutParams extends ViewGroup.MarginLayoutParams {
+        private static final int[] ATTRS = new int[] {
+            android.R.attr.layout_weight
+        };
+
+        /**
+         * The weighted proportion of how much of the leftover space
+         * this child should consume after measurement.
+         */
+        public float weight = 0;
+
+        /**
+         * True if this pane is the slideable pane in the layout.
+         */
+        boolean slideable;
+
+        public LayoutParams() {
+            super(FILL_PARENT, FILL_PARENT);
+        }
+
+        public LayoutParams(int width, int height) {
+            super(width, height);
+        }
+
+        public LayoutParams(android.view.ViewGroup.LayoutParams source) {
+            super(source);
+        }
+
+        public LayoutParams(MarginLayoutParams source) {
+            super(source);
+        }
+
+        public LayoutParams(LayoutParams source) {
+            super(source);
+            this.weight = source.weight;
+        }
+
+        public LayoutParams(Context c, AttributeSet attrs) {
+            super(c, attrs);
+
+            final TypedArray a = c.obtainStyledAttributes(attrs, ATTRS);
+            this.weight = a.getFloat(0, 0);
+            a.recycle();
+        }
+
+    }
+
+    static class SavedState extends BaseSavedState {
+        boolean isOpen;
+
+        SavedState(Parcelable superState) {
+            super(superState);
+        }
+
+        private SavedState(Parcel in) {
+            super(in);
+            isOpen = in.readInt() != 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            super.writeToParcel(out, flags);
+            out.writeInt(isOpen ? 1 : 0);
+        }
+
+        public static final Parcelable.Creator<SavedState> CREATOR =
+                new Parcelable.Creator<SavedState>() {
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in);
+            }
+
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
+
+    class AccessibilityDelegate extends AccessibilityDelegateCompat {
+        private final Rect mTmpRect = new Rect();
+
+        @Override
+        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
+            final AccessibilityNodeInfoCompat superNode = AccessibilityNodeInfoCompat.obtain(info);
+            super.onInitializeAccessibilityNodeInfo(host, superNode);
+            copyNodeInfoNoChildren(info, superNode);
+            superNode.recycle();
+
+            info.setClassName(OverlappingPaneLayout.class.getName());
+            info.setSource(host);
+
+            final ViewParent parent = ViewCompat.getParentForAccessibility(host);
+            if (parent instanceof View) {
+                info.setParent((View) parent);
+            }
+
+            // This is a best-approximation of addChildrenForAccessibility()
+            // that accounts for filtering.
+            final int childCount = getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                if (child.getVisibility() == View.VISIBLE) {
+                    // Force importance to "yes" since we can't read the value.
+                    ViewCompat.setImportantForAccessibility(
+                            child, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                    info.addChild(child);
+                }
+            }
+        }
+
+        @Override
+        public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
+            super.onInitializeAccessibilityEvent(host, event);
+
+            event.setClassName(OverlappingPaneLayout.class.getName());
+        }
+
+        /**
+         * This should really be in AccessibilityNodeInfoCompat, but there unfortunately
+         * seem to be a few elements that are not easily cloneable using the underlying API.
+         * Leave it private here as it's not general-purpose useful.
+         */
+        private void copyNodeInfoNoChildren(AccessibilityNodeInfoCompat dest,
+                AccessibilityNodeInfoCompat src) {
+            final Rect rect = mTmpRect;
+
+            src.getBoundsInParent(rect);
+            dest.setBoundsInParent(rect);
+
+            src.getBoundsInScreen(rect);
+            dest.setBoundsInScreen(rect);
+
+            dest.setVisibleToUser(src.isVisibleToUser());
+            dest.setPackageName(src.getPackageName());
+            dest.setClassName(src.getClassName());
+            dest.setContentDescription(src.getContentDescription());
+
+            dest.setEnabled(src.isEnabled());
+            dest.setClickable(src.isClickable());
+            dest.setFocusable(src.isFocusable());
+            dest.setFocused(src.isFocused());
+            dest.setAccessibilityFocused(src.isAccessibilityFocused());
+            dest.setSelected(src.isSelected());
+            dest.setLongClickable(src.isLongClickable());
+
+            dest.addAction(src.getActions());
+
+            dest.setMovementGranularities(src.getMovementGranularities());
+        }
+    }
+}
diff --git a/src/com/android/dialer/widget/ViewDragHelper.java b/src/com/android/dialer/widget/ViewDragHelper.java
new file mode 100644
index 0000000..83e8707
--- /dev/null
+++ b/src/com/android/dialer/widget/ViewDragHelper.java
@@ -0,0 +1,1491 @@
+/*
+ * 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.
+ */
+
+
+package com.android.dialer.widget;
+
+import android.content.Context;
+import android.support.v4.view.MotionEventCompat;
+import android.support.v4.view.VelocityTrackerCompat;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.widget.ScrollerCompat;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.animation.Interpolator;
+
+import java.util.Arrays;
+
+/**
+ * ViewDragHelper is a utility class for writing custom ViewGroups. It offers a number
+ * of useful operations and state tracking for allowing a user to drag and reposition
+ * views within their parent ViewGroup.
+ */
+public class ViewDragHelper {
+    private static final String TAG = "ViewDragHelper";
+
+    /**
+     * A null/invalid pointer ID.
+     */
+    public static final int INVALID_POINTER = -1;
+
+    /**
+     * A view is not currently being dragged or animating as a result of a fling/snap.
+     */
+    public static final int STATE_IDLE = 0;
+
+    /**
+     * A view is currently being dragged. The position is currently changing as a result
+     * of user input or simulated user input.
+     */
+    public static final int STATE_DRAGGING = 1;
+
+    /**
+     * A view is currently settling into place as a result of a fling or
+     * predefined non-interactive motion.
+     */
+    public static final int STATE_SETTLING = 2;
+
+    /**
+     * Edge flag indicating that the left edge should be affected.
+     */
+    public static final int EDGE_LEFT = 1 << 0;
+
+    /**
+     * Edge flag indicating that the right edge should be affected.
+     */
+    public static final int EDGE_RIGHT = 1 << 1;
+
+    /**
+     * Edge flag indicating that the top edge should be affected.
+     */
+    public static final int EDGE_TOP = 1 << 2;
+
+    /**
+     * Edge flag indicating that the bottom edge should be affected.
+     */
+    public static final int EDGE_BOTTOM = 1 << 3;
+
+    /**
+     * Edge flag set indicating all edges should be affected.
+     */
+    public static final int EDGE_ALL = EDGE_LEFT | EDGE_TOP | EDGE_RIGHT | EDGE_BOTTOM;
+
+    /**
+     * Indicates that a check should occur along the horizontal axis
+     */
+    public static final int DIRECTION_HORIZONTAL = 1 << 0;
+
+    /**
+     * Indicates that a check should occur along the vertical axis
+     */
+    public static final int DIRECTION_VERTICAL = 1 << 1;
+
+    /**
+     * Indicates that a check should occur along all axes
+     */
+    public static final int DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;
+
+    private static final int EDGE_SIZE = 20; // dp
+
+    private static final int BASE_SETTLE_DURATION = 256; // ms
+    private static final int MAX_SETTLE_DURATION = 600; // ms
+
+    // Current drag state; idle, dragging or settling
+    private int mDragState;
+
+    // Distance to travel before a drag may begin
+    private int mTouchSlop;
+
+    // Last known position/pointer tracking
+    private int mActivePointerId = INVALID_POINTER;
+    private float[] mInitialMotionX;
+    private float[] mInitialMotionY;
+    private float[] mLastMotionX;
+    private float[] mLastMotionY;
+    private int[] mInitialEdgesTouched;
+    private int[] mEdgeDragsInProgress;
+    private int[] mEdgeDragsLocked;
+    private int mPointersDown;
+
+    private VelocityTracker mVelocityTracker;
+    private float mMaxVelocity;
+    private float mMinVelocity;
+
+    private int mEdgeSize;
+    private int mTrackingEdges;
+
+    private ScrollerCompat mScroller;
+
+    private final Callback mCallback;
+
+    private View mCapturedView;
+    private boolean mReleaseInProgress;
+
+    private final ViewGroup mParentView;
+
+    /**
+     * A Callback is used as a communication channel with the ViewDragHelper back to the
+     * parent view using it. <code>on*</code>methods are invoked on siginficant events and several
+     * accessor methods are expected to provide the ViewDragHelper with more information
+     * about the state of the parent view upon request. The callback also makes decisions
+     * governing the range and draggability of child views.
+     */
+    public static abstract class Callback {
+        /**
+         * Called when the drag state changes. See the <code>STATE_*</code> constants
+         * for more information.
+         *
+         * @param state The new drag state
+         *
+         * @see #STATE_IDLE
+         * @see #STATE_DRAGGING
+         * @see #STATE_SETTLING
+         */
+        public void onViewDragStateChanged(int state) {}
+
+        /**
+         * Called when the captured view's position changes as the result of a drag or settle.
+         *
+         * @param changedView View whose position changed
+         * @param left New X coordinate of the left edge of the view
+         * @param top New Y coordinate of the top edge of the view
+         * @param dx Change in X position from the last call
+         * @param dy Change in Y position from the last call
+         */
+        public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {}
+
+        /**
+         * Called when a child view is captured for dragging or settling. The ID of the pointer
+         * currently dragging the captured view is supplied. If activePointerId is
+         * identified as {@link #INVALID_POINTER} the capture is programmatic instead of
+         * pointer-initiated.
+         *
+         * @param capturedChild Child view that was captured
+         * @param activePointerId Pointer id tracking the child capture
+         */
+        public void onViewCaptured(View capturedChild, int activePointerId) {}
+
+        /**
+         * Called when the child view is no longer being actively dragged.
+         * The fling velocity is also supplied, if relevant. The velocity values may
+         * be clamped to system minimums or maximums.
+         *
+         * <p>Calling code may decide to fling or otherwise release the view to let it
+         * settle into place. It should do so using {@link #settleCapturedViewAt(int, int)}
+         * or {@link #flingCapturedView(int, int, int, int)}. If the Callback invokes
+         * one of these methods, the ViewDragHelper will enter {@link #STATE_SETTLING}
+         * and the view capture will not fully end until it comes to a complete stop.
+         * If neither of these methods is invoked before <code>onViewReleased</code> returns,
+         * the view will stop in place and the ViewDragHelper will return to
+         * {@link #STATE_IDLE}.</p>
+         *
+         * @param releasedChild The captured child view now being released
+         * @param xvel X velocity of the pointer as it left the screen in pixels per second.
+         * @param yvel Y velocity of the pointer as it left the screen in pixels per second.
+         */
+        public void onViewReleased(View releasedChild, float xvel, float yvel) {}
+
+        /**
+         * Called when one of the subscribed edges in the parent view has been touched
+         * by the user while no child view is currently captured.
+         *
+         * @param edgeFlags A combination of edge flags describing the edge(s) currently touched
+         * @param pointerId ID of the pointer touching the described edge(s)
+         * @see #EDGE_LEFT
+         * @see #EDGE_TOP
+         * @see #EDGE_RIGHT
+         * @see #EDGE_BOTTOM
+         */
+        public void onEdgeTouched(int edgeFlags, int pointerId) {}
+
+        /**
+         * Called when the given edge may become locked. This can happen if an edge drag
+         * was preliminarily rejected before beginning, but after {@link #onEdgeTouched(int, int)}
+         * was called. This method should return true to lock this edge or false to leave it
+         * unlocked. The default behavior is to leave edges unlocked.
+         *
+         * @param edgeFlags A combination of edge flags describing the edge(s) locked
+         * @return true to lock the edge, false to leave it unlocked
+         */
+        public boolean onEdgeLock(int edgeFlags) {
+            return false;
+        }
+
+        /**
+         * Called when the user has started a deliberate drag away from one
+         * of the subscribed edges in the parent view while no child view is currently captured.
+         *
+         * @param edgeFlags A combination of edge flags describing the edge(s) dragged
+         * @param pointerId ID of the pointer touching the described edge(s)
+         * @see #EDGE_LEFT
+         * @see #EDGE_TOP
+         * @see #EDGE_RIGHT
+         * @see #EDGE_BOTTOM
+         */
+        public void onEdgeDragStarted(int edgeFlags, int pointerId) {}
+
+        /**
+         * Called to determine the Z-order of child views.
+         *
+         * @param index the ordered position to query for
+         * @return index of the view that should be ordered at position <code>index</code>
+         */
+        public int getOrderedChildIndex(int index) {
+            return index;
+        }
+
+        /**
+         * Return the magnitude of a draggable child view's horizontal range of motion in pixels.
+         * This method should return 0 for views that cannot move horizontally.
+         *
+         * @param child Child view to check
+         * @return range of horizontal motion in pixels
+         */
+        public int getViewHorizontalDragRange(View child) {
+            return 0;
+        }
+
+        /**
+         * Return the magnitude of a draggable child view's vertical range of motion in pixels.
+         * This method should return 0 for views that cannot move vertically.
+         *
+         * @param child Child view to check
+         * @return range of vertical motion in pixels
+         */
+        public int getViewVerticalDragRange(View child) {
+            return 0;
+        }
+
+        /**
+         * Called when the user's input indicates that they want to capture the given child view
+         * with the pointer indicated by pointerId. The callback should return true if the user
+         * is permitted to drag the given view with the indicated pointer.
+         *
+         * <p>ViewDragHelper may call this method multiple times for the same view even if
+         * the view is already captured; this indicates that a new pointer is trying to take
+         * control of the view.</p>
+         *
+         * <p>If this method returns true, a call to {@link #onViewCaptured(android.view.View, int)}
+         * will follow if the capture is successful.</p>
+         *
+         * @param child Child the user is attempting to capture
+         * @param pointerId ID of the pointer attempting the capture
+         * @return true if capture should be allowed, false otherwise
+         */
+        public abstract boolean tryCaptureView(View child, int pointerId);
+
+        /**
+         * Restrict the motion of the dragged child view along the horizontal axis.
+         * The default implementation does not allow horizontal motion; the extending
+         * class must override this method and provide the desired clamping.
+         *
+         *
+         * @param child Child view being dragged
+         * @param left Attempted motion along the X axis
+         * @param dx Proposed change in position for left
+         * @return The new clamped position for left
+         */
+        public int clampViewPositionHorizontal(View child, int left, int dx) {
+            return 0;
+        }
+
+        /**
+         * Restrict the motion of the dragged child view along the vertical axis.
+         * The default implementation does not allow vertical motion; the extending
+         * class must override this method and provide the desired clamping.
+         *
+         *
+         * @param child Child view being dragged
+         * @param top Attempted motion along the Y axis
+         * @param dy Proposed change in position for top
+         * @return The new clamped position for top
+         */
+        public int clampViewPositionVertical(View child, int top, int dy) {
+            return 0;
+        }
+    }
+
+    /**
+     * Interpolator defining the animation curve for mScroller
+     */
+    private static final Interpolator sInterpolator = new Interpolator() {
+        public float getInterpolation(float t) {
+            t -= 1.0f;
+            return t * t * t * t * t + 1.0f;
+        }
+    };
+
+    private final Runnable mSetIdleRunnable = new Runnable() {
+        public void run() {
+            setDragState(STATE_IDLE);
+        }
+    };
+
+    /**
+     * Factory method to create a new ViewDragHelper.
+     *
+     * @param forParent Parent view to monitor
+     * @param cb Callback to provide information and receive events
+     * @return a new ViewDragHelper instance
+     */
+    public static ViewDragHelper create(ViewGroup forParent, Callback cb) {
+        return new ViewDragHelper(forParent.getContext(), forParent, cb);
+    }
+
+    /**
+     * Factory method to create a new ViewDragHelper.
+     *
+     * @param forParent Parent view to monitor
+     * @param sensitivity Multiplier for how sensitive the helper should be about detecting
+     *                    the start of a drag. Larger values are more sensitive. 1.0f is normal.
+     * @param cb Callback to provide information and receive events
+     * @return a new ViewDragHelper instance
+     */
+    public static ViewDragHelper create(ViewGroup forParent, float sensitivity, Callback cb) {
+        final ViewDragHelper helper = create(forParent, cb);
+        helper.mTouchSlop = (int) (helper.mTouchSlop * (1 / sensitivity));
+        return helper;
+    }
+
+    /**
+     * Apps should use ViewDragHelper.create() to get a new instance.
+     * This will allow VDH to use internal compatibility implementations for different
+     * platform versions.
+     *
+     * @param context Context to initialize config-dependent params from
+     * @param forParent Parent view to monitor
+     */
+    private ViewDragHelper(Context context, ViewGroup forParent, Callback cb) {
+        if (forParent == null) {
+            throw new IllegalArgumentException("Parent view may not be null");
+        }
+        if (cb == null) {
+            throw new IllegalArgumentException("Callback may not be null");
+        }
+
+        mParentView = forParent;
+        mCallback = cb;
+
+        final ViewConfiguration vc = ViewConfiguration.get(context);
+        final float density = context.getResources().getDisplayMetrics().density;
+        mEdgeSize = (int) (EDGE_SIZE * density + 0.5f);
+
+        mTouchSlop = vc.getScaledTouchSlop();
+        mMaxVelocity = vc.getScaledMaximumFlingVelocity();
+        mMinVelocity = vc.getScaledMinimumFlingVelocity();
+        mScroller = ScrollerCompat.create(context, sInterpolator);
+    }
+
+    /**
+     * Set the minimum velocity that will be detected as having a magnitude greater than zero
+     * in pixels per second. Callback methods accepting a velocity will be clamped appropriately.
+     *
+     * @param minVel Minimum velocity to detect
+     */
+    public void setMinVelocity(float minVel) {
+        mMinVelocity = minVel;
+    }
+
+    /**
+     * Return the currently configured minimum velocity. Any flings with a magnitude less
+     * than this value in pixels per second. Callback methods accepting a velocity will receive
+     * zero as a velocity value if the real detected velocity was below this threshold.
+     *
+     * @return the minimum velocity that will be detected
+     */
+    public float getMinVelocity() {
+        return mMinVelocity;
+    }
+
+    /**
+     * Retrieve the current drag state of this helper. This will return one of
+     * {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}.
+     * @return The current drag state
+     */
+    public int getViewDragState() {
+        return mDragState;
+    }
+
+    /**
+     * Enable edge tracking for the selected edges of the parent view.
+     * The callback's {@link Callback#onEdgeTouched(int, int)} and
+     * {@link Callback#onEdgeDragStarted(int, int)} methods will only be invoked
+     * for edges for which edge tracking has been enabled.
+     *
+     * @param edgeFlags Combination of edge flags describing the edges to watch
+     * @see #EDGE_LEFT
+     * @see #EDGE_TOP
+     * @see #EDGE_RIGHT
+     * @see #EDGE_BOTTOM
+     */
+    public void setEdgeTrackingEnabled(int edgeFlags) {
+        mTrackingEdges = edgeFlags;
+    }
+
+    /**
+     * Return the size of an edge. This is the range in pixels along the edges of this view
+     * that will actively detect edge touches or drags if edge tracking is enabled.
+     *
+     * @return The size of an edge in pixels
+     * @see #setEdgeTrackingEnabled(int)
+     */
+    public int getEdgeSize() {
+        return mEdgeSize;
+    }
+
+    /**
+     * Capture a specific child view for dragging within the parent. The callback will be notified
+     * but {@link Callback#tryCaptureView(android.view.View, int)} will not be asked permission to
+     * capture this view.
+     *
+     * @param childView Child view to capture
+     * @param activePointerId ID of the pointer that is dragging the captured child view
+     */
+    public void captureChildView(View childView, int activePointerId) {
+        if (childView.getParent() != mParentView) {
+            throw new IllegalArgumentException("captureChildView: parameter must be a descendant " +
+                    "of the ViewDragHelper's tracked parent view (" + mParentView + ")");
+        }
+
+        mCapturedView = childView;
+        mActivePointerId = activePointerId;
+        mCallback.onViewCaptured(childView, activePointerId);
+        setDragState(STATE_DRAGGING);
+    }
+
+    /**
+     * @return The currently captured view, or null if no view has been captured.
+     */
+    public View getCapturedView() {
+        return mCapturedView;
+    }
+
+    /**
+     * @return The ID of the pointer currently dragging the captured view,
+     *         or {@link #INVALID_POINTER}.
+     */
+    public int getActivePointerId() {
+        return mActivePointerId;
+    }
+
+    /**
+     * @return The minimum distance in pixels that the user must travel to initiate a drag
+     */
+    public int getTouchSlop() {
+        return mTouchSlop;
+    }
+
+    /**
+     * The result of a call to this method is equivalent to
+     * {@link #processTouchEvent(android.view.MotionEvent)} receiving an ACTION_CANCEL event.
+     */
+    public void cancel() {
+        mActivePointerId = INVALID_POINTER;
+        clearMotionHistory();
+
+        if (mVelocityTracker != null) {
+            mVelocityTracker.recycle();
+            mVelocityTracker = null;
+        }
+    }
+
+    /**
+     * {@link #cancel()}, but also abort all motion in progress and snap to the end of any
+     * animation.
+     */
+    public void abort() {
+        cancel();
+        if (mDragState == STATE_SETTLING) {
+            final int oldX = mScroller.getCurrX();
+            final int oldY = mScroller.getCurrY();
+            mScroller.abortAnimation();
+            final int newX = mScroller.getCurrX();
+            final int newY = mScroller.getCurrY();
+            mCallback.onViewPositionChanged(mCapturedView, newX, newY, newX - oldX, newY - oldY);
+        }
+        setDragState(STATE_IDLE);
+    }
+
+    /**
+     * Animate the view <code>child</code> to the given (left, top) position.
+     * If this method returns true, the caller should invoke {@link #continueSettling(boolean)}
+     * on each subsequent frame to continue the motion until it returns false. If this method
+     * returns false there is no further work to do to complete the movement.
+     *
+     * <p>This operation does not count as a capture event, though {@link #getCapturedView()}
+     * will still report the sliding view while the slide is in progress.</p>
+     *
+     * @param child Child view to capture and animate
+     * @param finalLeft Final left position of child
+     * @param finalTop Final top position of child
+     * @return true if animation should continue through {@link #continueSettling(boolean)} calls
+     */
+    public boolean smoothSlideViewTo(View child, int finalLeft, int finalTop) {
+        mCapturedView = child;
+        mActivePointerId = INVALID_POINTER;
+
+        return forceSettleCapturedViewAt(finalLeft, finalTop, 0, 0);
+    }
+
+    /**
+     * Settle the captured view at the given (left, top) position.
+     * The appropriate velocity from prior motion will be taken into account.
+     * If this method returns true, the caller should invoke {@link #continueSettling(boolean)}
+     * on each subsequent frame to continue the motion until it returns false. If this method
+     * returns false there is no further work to do to complete the movement.
+     *
+     * @param finalLeft Settled left edge position for the captured view
+     * @param finalTop Settled top edge position for the captured view
+     * @return true if animation should continue through {@link #continueSettling(boolean)} calls
+     */
+    public boolean settleCapturedViewAt(int finalLeft, int finalTop) {
+        if (!mReleaseInProgress) {
+            throw new IllegalStateException("Cannot settleCapturedViewAt outside of a call to " +
+                    "Callback#onViewReleased");
+        }
+
+        return forceSettleCapturedViewAt(finalLeft, finalTop,
+                (int) VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId),
+                (int) VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId));
+    }
+
+    /**
+     * Settle the captured view at the given (left, top) position.
+     *
+     * @param finalLeft Target left position for the captured view
+     * @param finalTop Target top position for the captured view
+     * @param xvel Horizontal velocity
+     * @param yvel Vertical velocity
+     * @return true if animation should continue through {@link #continueSettling(boolean)} calls
+     */
+    private boolean forceSettleCapturedViewAt(int finalLeft, int finalTop, int xvel, int yvel) {
+        final int startLeft = mCapturedView.getLeft();
+        final int startTop = mCapturedView.getTop();
+        final int dx = finalLeft - startLeft;
+        final int dy = finalTop - startTop;
+
+        if (dx == 0 && dy == 0) {
+            // Nothing to do. Send callbacks, be done.
+            mScroller.abortAnimation();
+            setDragState(STATE_IDLE);
+            return false;
+        }
+
+        final int duration = computeSettleDuration(mCapturedView, dx, dy, xvel, yvel);
+        mScroller.startScroll(startLeft, startTop, dx, dy, duration);
+
+        setDragState(STATE_SETTLING);
+        return true;
+    }
+
+    private int computeSettleDuration(View child, int dx, int dy, int xvel, int yvel) {
+        xvel = clampMag(xvel, (int) mMinVelocity, (int) mMaxVelocity);
+        yvel = clampMag(yvel, (int) mMinVelocity, (int) mMaxVelocity);
+        final int absDx = Math.abs(dx);
+        final int absDy = Math.abs(dy);
+        final int absXVel = Math.abs(xvel);
+        final int absYVel = Math.abs(yvel);
+        final int addedVel = absXVel + absYVel;
+        final int addedDistance = absDx + absDy;
+
+        final float xweight = xvel != 0 ? (float) absXVel / addedVel :
+                (float) absDx / addedDistance;
+        final float yweight = yvel != 0 ? (float) absYVel / addedVel :
+                (float) absDy / addedDistance;
+
+        int xduration = computeAxisDuration(dx, xvel, mCallback.getViewHorizontalDragRange(child));
+        int yduration = computeAxisDuration(dy, yvel, mCallback.getViewVerticalDragRange(child));
+
+        return (int) (xduration * xweight + yduration * yweight);
+    }
+
+    private int computeAxisDuration(int delta, int velocity, int motionRange) {
+        if (delta == 0) {
+            return 0;
+        }
+
+        final int width = mParentView.getWidth();
+        final int halfWidth = width / 2;
+        final float distanceRatio = Math.min(1f, (float) Math.abs(delta) / width);
+        final float distance = halfWidth + halfWidth *
+                distanceInfluenceForSnapDuration(distanceRatio);
+
+        int duration;
+        velocity = Math.abs(velocity);
+        if (velocity > 0) {
+            duration = 4 * Math.round(1000 * Math.abs(distance / velocity));
+        } else {
+            final float range = (float) Math.abs(delta) / motionRange;
+            duration = (int) ((range + 1) * BASE_SETTLE_DURATION);
+        }
+        return Math.min(duration, MAX_SETTLE_DURATION);
+    }
+
+    /**
+     * Clamp the magnitude of value for absMin and absMax.
+     * If the value is below the minimum, it will be clamped to zero.
+     * If the value is above the maximum, it will be clamped to the maximum.
+     *
+     * @param value Value to clamp
+     * @param absMin Absolute value of the minimum significant value to return
+     * @param absMax Absolute value of the maximum value to return
+     * @return The clamped value with the same sign as <code>value</code>
+     */
+    private int clampMag(int value, int absMin, int absMax) {
+        final int absValue = Math.abs(value);
+        if (absValue < absMin) return 0;
+        if (absValue > absMax) return value > 0 ? absMax : -absMax;
+        return value;
+    }
+
+    /**
+     * Clamp the magnitude of value for absMin and absMax.
+     * If the value is below the minimum, it will be clamped to zero.
+     * If the value is above the maximum, it will be clamped to the maximum.
+     *
+     * @param value Value to clamp
+     * @param absMin Absolute value of the minimum significant value to return
+     * @param absMax Absolute value of the maximum value to return
+     * @return The clamped value with the same sign as <code>value</code>
+     */
+    private float clampMag(float value, float absMin, float absMax) {
+        final float absValue = Math.abs(value);
+        if (absValue < absMin) return 0;
+        if (absValue > absMax) return value > 0 ? absMax : -absMax;
+        return value;
+    }
+
+    private float distanceInfluenceForSnapDuration(float f) {
+        f -= 0.5f; // center the values about 0.
+        f *= 0.3f * Math.PI / 2.0f;
+        return (float) Math.sin(f);
+    }
+
+    /**
+     * Settle the captured view based on standard free-moving fling behavior.
+     * The caller should invoke {@link #continueSettling(boolean)} on each subsequent frame
+     * to continue the motion until it returns false.
+     *
+     * @param minLeft Minimum X position for the view's left edge
+     * @param minTop Minimum Y position for the view's top edge
+     * @param maxLeft Maximum X position for the view's left edge
+     * @param maxTop Maximum Y position for the view's top edge
+     */
+    public void flingCapturedView(int minLeft, int minTop, int maxLeft, int maxTop) {
+        if (!mReleaseInProgress) {
+            throw new IllegalStateException("Cannot flingCapturedView outside of a call to " +
+                    "Callback#onViewReleased");
+        }
+
+        mScroller.fling(mCapturedView.getLeft(), mCapturedView.getTop(),
+                (int) VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId),
+                (int) VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId),
+                minLeft, maxLeft, minTop, maxTop);
+
+        setDragState(STATE_SETTLING);
+    }
+
+    /**
+     * Move the captured settling view by the appropriate amount for the current time.
+     * If <code>continueSettling</code> returns true, the caller should call it again
+     * on the next frame to continue.
+     *
+     * @param deferCallbacks true if state callbacks should be deferred via posted message.
+     *                       Set this to true if you are calling this method from
+     *                       {@link android.view.View#computeScroll()} or similar methods
+     *                       invoked as part of layout or drawing.
+     * @return true if settle is still in progress
+     */
+    public boolean continueSettling(boolean deferCallbacks) {
+        if (mDragState == STATE_SETTLING) {
+            boolean keepGoing = mScroller.computeScrollOffset();
+            final int x = mScroller.getCurrX();
+            final int y = mScroller.getCurrY();
+            final int dx = x - mCapturedView.getLeft();
+            final int dy = y - mCapturedView.getTop();
+
+            if (dx != 0) {
+                mCapturedView.offsetLeftAndRight(dx);
+            }
+            if (dy != 0) {
+                mCapturedView.offsetTopAndBottom(dy);
+            }
+
+            if (dx != 0 || dy != 0) {
+                mCallback.onViewPositionChanged(mCapturedView, x, y, dx, dy);
+            }
+
+            if (keepGoing && x == mScroller.getFinalX() && y == mScroller.getFinalY()) {
+                // Close enough. The interpolator/scroller might think we're still moving
+                // but the user sure doesn't.
+                mScroller.abortAnimation();
+                keepGoing = mScroller.isFinished();
+            }
+
+            if (!keepGoing) {
+                if (deferCallbacks) {
+                    mParentView.post(mSetIdleRunnable);
+                } else {
+                    setDragState(STATE_IDLE);
+                }
+            }
+        }
+
+        return mDragState == STATE_SETTLING;
+    }
+
+    /**
+     * Like all callback events this must happen on the UI thread, but release
+     * involves some extra semantics. During a release (mReleaseInProgress)
+     * is the only time it is valid to call {@link #settleCapturedViewAt(int, int)}
+     * or {@link #flingCapturedView(int, int, int, int)}.
+     */
+    private void dispatchViewReleased(float xvel, float yvel) {
+        mReleaseInProgress = true;
+        mCallback.onViewReleased(mCapturedView, xvel, yvel);
+        mReleaseInProgress = false;
+
+        if (mDragState == STATE_DRAGGING) {
+            // onViewReleased didn't call a method that would have changed this. Go idle.
+            setDragState(STATE_IDLE);
+        }
+    }
+
+    private void clearMotionHistory() {
+        if (mInitialMotionX == null) {
+            return;
+        }
+        Arrays.fill(mInitialMotionX, 0);
+        Arrays.fill(mInitialMotionY, 0);
+        Arrays.fill(mLastMotionX, 0);
+        Arrays.fill(mLastMotionY, 0);
+        Arrays.fill(mInitialEdgesTouched, 0);
+        Arrays.fill(mEdgeDragsInProgress, 0);
+        Arrays.fill(mEdgeDragsLocked, 0);
+        mPointersDown = 0;
+    }
+
+    private void clearMotionHistory(int pointerId) {
+        if (mInitialMotionX == null) {
+            return;
+        }
+        mInitialMotionX[pointerId] = 0;
+        mInitialMotionY[pointerId] = 0;
+        mLastMotionX[pointerId] = 0;
+        mLastMotionY[pointerId] = 0;
+        mInitialEdgesTouched[pointerId] = 0;
+        mEdgeDragsInProgress[pointerId] = 0;
+        mEdgeDragsLocked[pointerId] = 0;
+        mPointersDown &= ~(1 << pointerId);
+    }
+
+    private void ensureMotionHistorySizeForId(int pointerId) {
+        if (mInitialMotionX == null || mInitialMotionX.length <= pointerId) {
+            float[] imx = new float[pointerId + 1];
+            float[] imy = new float[pointerId + 1];
+            float[] lmx = new float[pointerId + 1];
+            float[] lmy = new float[pointerId + 1];
+            int[] iit = new int[pointerId + 1];
+            int[] edip = new int[pointerId + 1];
+            int[] edl = new int[pointerId + 1];
+
+            if (mInitialMotionX != null) {
+                System.arraycopy(mInitialMotionX, 0, imx, 0, mInitialMotionX.length);
+                System.arraycopy(mInitialMotionY, 0, imy, 0, mInitialMotionY.length);
+                System.arraycopy(mLastMotionX, 0, lmx, 0, mLastMotionX.length);
+                System.arraycopy(mLastMotionY, 0, lmy, 0, mLastMotionY.length);
+                System.arraycopy(mInitialEdgesTouched, 0, iit, 0, mInitialEdgesTouched.length);
+                System.arraycopy(mEdgeDragsInProgress, 0, edip, 0, mEdgeDragsInProgress.length);
+                System.arraycopy(mEdgeDragsLocked, 0, edl, 0, mEdgeDragsLocked.length);
+            }
+
+            mInitialMotionX = imx;
+            mInitialMotionY = imy;
+            mLastMotionX = lmx;
+            mLastMotionY = lmy;
+            mInitialEdgesTouched = iit;
+            mEdgeDragsInProgress = edip;
+            mEdgeDragsLocked = edl;
+        }
+    }
+
+    private void saveInitialMotion(float x, float y, int pointerId) {
+        ensureMotionHistorySizeForId(pointerId);
+        mInitialMotionX[pointerId] = mLastMotionX[pointerId] = x;
+        mInitialMotionY[pointerId] = mLastMotionY[pointerId] = y;
+        mInitialEdgesTouched[pointerId] = getEdgesTouched((int) x, (int) y);
+        mPointersDown |= 1 << pointerId;
+    }
+
+    private void saveLastMotion(MotionEvent ev) {
+        final int pointerCount = MotionEventCompat.getPointerCount(ev);
+        for (int i = 0; i < pointerCount; i++) {
+            final int pointerId = MotionEventCompat.getPointerId(ev, i);
+            final float x = MotionEventCompat.getX(ev, i);
+            final float y = MotionEventCompat.getY(ev, i);
+            mLastMotionX[pointerId] = x;
+            mLastMotionY[pointerId] = y;
+        }
+    }
+
+    /**
+     * Check if the given pointer ID represents a pointer that is currently down (to the best
+     * of the ViewDragHelper's knowledge).
+     *
+     * <p>The state used to report this information is populated by the methods
+     * {@link #shouldInterceptTouchEvent(android.view.MotionEvent)} or
+     * {@link #processTouchEvent(android.view.MotionEvent)}. If one of these methods has not
+     * been called for all relevant MotionEvents to track, the information reported
+     * by this method may be stale or incorrect.</p>
+     *
+     * @param pointerId pointer ID to check; corresponds to IDs provided by MotionEvent
+     * @return true if the pointer with the given ID is still down
+     */
+    public boolean isPointerDown(int pointerId) {
+        return (mPointersDown & 1 << pointerId) != 0;
+    }
+
+    void setDragState(int state) {
+        if (mDragState != state) {
+            mDragState = state;
+            mCallback.onViewDragStateChanged(state);
+            if (state == STATE_IDLE) {
+                mCapturedView = null;
+            }
+        }
+    }
+
+    /**
+     * Attempt to capture the view with the given pointer ID. The callback will be involved.
+     * This will put us into the "dragging" state. If we've already captured this view with
+     * this pointer this method will immediately return true without consulting the callback.
+     *
+     * @param toCapture View to capture
+     * @param pointerId Pointer to capture with
+     * @return true if capture was successful
+     */
+    boolean tryCaptureViewForDrag(View toCapture, int pointerId) {
+        if (toCapture == mCapturedView && mActivePointerId == pointerId) {
+            // Already done!
+            return true;
+        }
+        if (toCapture != null && mCallback.tryCaptureView(toCapture, pointerId)) {
+            mActivePointerId = pointerId;
+            captureChildView(toCapture, pointerId);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Tests scrollability within child views of v given a delta of dx.
+     *
+     * @param v View to test for horizontal scrollability
+     * @param checkV Whether the view v passed should itself be checked for scrollability (true),
+     *               or just its children (false).
+     * @param dx Delta scrolled in pixels along the X axis
+     * @param dy Delta scrolled in pixels along the Y axis
+     * @param x X coordinate of the active touch point
+     * @param y Y coordinate of the active touch point
+     * @return true if child views of v can be scrolled by delta of dx.
+     */
+    protected boolean canScroll(View v, boolean checkV, int dx, int dy, int x, int y) {
+        if (v instanceof ViewGroup) {
+            final ViewGroup group = (ViewGroup) v;
+            final int scrollX = v.getScrollX();
+            final int scrollY = v.getScrollY();
+            final int count = group.getChildCount();
+            // Count backwards - let topmost views consume scroll distance first.
+            for (int i = count - 1; i >= 0; i--) {
+                // TODO: Add versioned support here for transformed views.
+                // This will not work for transformed views in Honeycomb+
+                final View child = group.getChildAt(i);
+                if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() &&
+                        y + scrollY >= child.getTop() && y + scrollY < child.getBottom() &&
+                        canScroll(child, true, dx, dy, x + scrollX - child.getLeft(),
+                                y + scrollY - child.getTop())) {
+                    return true;
+                }
+            }
+        }
+
+        return checkV && (ViewCompat.canScrollHorizontally(v, -dx) ||
+                ViewCompat.canScrollVertically(v, -dy));
+    }
+
+    /**
+     * Check if this event as provided to the parent view's onInterceptTouchEvent should
+     * cause the parent to intercept the touch event stream.
+     *
+     * @param ev MotionEvent provided to onInterceptTouchEvent
+     * @return true if the parent view should return true from onInterceptTouchEvent
+     */
+    public boolean shouldInterceptTouchEvent(MotionEvent ev) {
+        final int action = MotionEventCompat.getActionMasked(ev);
+        final int actionIndex = MotionEventCompat.getActionIndex(ev);
+
+        if (action == MotionEvent.ACTION_DOWN) {
+            // Reset things for a new event stream, just in case we didn't get
+            // the whole previous stream.
+            cancel();
+        }
+
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+        mVelocityTracker.addMovement(ev);
+
+        switch (action) {
+            case MotionEvent.ACTION_DOWN: {
+                final float x = ev.getX();
+                final float y = ev.getY();
+                final int pointerId = MotionEventCompat.getPointerId(ev, 0);
+                saveInitialMotion(x, y, pointerId);
+
+                final View toCapture = findTopChildUnder((int) x, (int) y);
+
+                // Catch a settling view if possible.
+                if (toCapture == mCapturedView && mDragState == STATE_SETTLING) {
+                    tryCaptureViewForDrag(toCapture, pointerId);
+                }
+
+                final int edgesTouched = mInitialEdgesTouched[pointerId];
+                if ((edgesTouched & mTrackingEdges) != 0) {
+                    mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+                }
+                break;
+            }
+
+            case MotionEventCompat.ACTION_POINTER_DOWN: {
+                final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+                final float x = MotionEventCompat.getX(ev, actionIndex);
+                final float y = MotionEventCompat.getY(ev, actionIndex);
+
+                saveInitialMotion(x, y, pointerId);
+
+                // A ViewDragHelper can only manipulate one view at a time.
+                if (mDragState == STATE_IDLE) {
+                    final int edgesTouched = mInitialEdgesTouched[pointerId];
+                    if ((edgesTouched & mTrackingEdges) != 0) {
+                        mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+                    }
+                } else if (mDragState == STATE_SETTLING) {
+                    // Catch a settling view if possible.
+                    final View toCapture = findTopChildUnder((int) x, (int) y);
+                    if (toCapture == mCapturedView) {
+                        tryCaptureViewForDrag(toCapture, pointerId);
+                    }
+                }
+                break;
+            }
+
+            case MotionEvent.ACTION_MOVE: {
+                // First to cross a touch slop over a draggable view wins. Also report edge drags.
+                final int pointerCount = MotionEventCompat.getPointerCount(ev);
+                for (int i = 0; i < pointerCount; i++) {
+                    final int pointerId = MotionEventCompat.getPointerId(ev, i);
+                    final float x = MotionEventCompat.getX(ev, i);
+                    final float y = MotionEventCompat.getY(ev, i);
+                    final float dx = x - mInitialMotionX[pointerId];
+                    final float dy = y - mInitialMotionY[pointerId];
+
+                    reportNewEdgeDrags(dx, dy, pointerId);
+                    if (mDragState == STATE_DRAGGING) {
+                        // Callback might have started an edge drag
+                        break;
+                    }
+
+                    final View toCapture = findTopChildUnder((int) x, (int) y);
+                    if (toCapture != null && checkTouchSlop(toCapture, dx, dy) &&
+                            tryCaptureViewForDrag(toCapture, pointerId)) {
+                        break;
+                    }
+                }
+                saveLastMotion(ev);
+                break;
+            }
+
+            case MotionEventCompat.ACTION_POINTER_UP: {
+                final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+                clearMotionHistory(pointerId);
+                break;
+            }
+
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL: {
+                cancel();
+                break;
+            }
+        }
+
+        return mDragState == STATE_DRAGGING;
+    }
+
+    /**
+     * Process a touch event received by the parent view. This method will dispatch callback events
+     * as needed before returning. The parent view's onTouchEvent implementation should call this.
+     *
+     * @param ev The touch event received by the parent view
+     */
+    public void processTouchEvent(MotionEvent ev) {
+        final int action = MotionEventCompat.getActionMasked(ev);
+        final int actionIndex = MotionEventCompat.getActionIndex(ev);
+
+        if (action == MotionEvent.ACTION_DOWN) {
+            // Reset things for a new event stream, just in case we didn't get
+            // the whole previous stream.
+            cancel();
+        }
+
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+        mVelocityTracker.addMovement(ev);
+
+        switch (action) {
+            case MotionEvent.ACTION_DOWN: {
+                final float x = ev.getX();
+                final float y = ev.getY();
+                final int pointerId = MotionEventCompat.getPointerId(ev, 0);
+                final View toCapture = findTopChildUnder((int) x, (int) y);
+
+                saveInitialMotion(x, y, pointerId);
+
+                // Since the parent is already directly processing this touch event,
+                // there is no reason to delay for a slop before dragging.
+                // Start immediately if possible.
+                tryCaptureViewForDrag(toCapture, pointerId);
+
+                final int edgesTouched = mInitialEdgesTouched[pointerId];
+                if ((edgesTouched & mTrackingEdges) != 0) {
+                    mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+                }
+                break;
+            }
+
+            case MotionEventCompat.ACTION_POINTER_DOWN: {
+                final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+                final float x = MotionEventCompat.getX(ev, actionIndex);
+                final float y = MotionEventCompat.getY(ev, actionIndex);
+
+                saveInitialMotion(x, y, pointerId);
+
+                // A ViewDragHelper can only manipulate one view at a time.
+                if (mDragState == STATE_IDLE) {
+                    // If we're idle we can do anything! Treat it like a normal down event.
+
+                    final View toCapture = findTopChildUnder((int) x, (int) y);
+                    tryCaptureViewForDrag(toCapture, pointerId);
+
+                    final int edgesTouched = mInitialEdgesTouched[pointerId];
+                    if ((edgesTouched & mTrackingEdges) != 0) {
+                        mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+                    }
+                } else if (isCapturedViewUnder((int) x, (int) y)) {
+                    // We're still tracking a captured view. If the same view is under this
+                    // point, we'll swap to controlling it with this pointer instead.
+                    // (This will still work if we're "catching" a settling view.)
+
+                    tryCaptureViewForDrag(mCapturedView, pointerId);
+                }
+                break;
+            }
+
+            case MotionEvent.ACTION_MOVE: {
+                if (mDragState == STATE_DRAGGING) {
+                    final int index = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
+                    final float x = MotionEventCompat.getX(ev, index);
+                    final float y = MotionEventCompat.getY(ev, index);
+                    final int idx = (int) (x - mLastMotionX[mActivePointerId]);
+                    final int idy = (int) (y - mLastMotionY[mActivePointerId]);
+
+                    dragTo(mCapturedView.getLeft() + idx, mCapturedView.getTop() + idy, idx, idy);
+
+                    saveLastMotion(ev);
+                } else {
+                    // Check to see if any pointer is now over a draggable view.
+                    final int pointerCount = MotionEventCompat.getPointerCount(ev);
+                    for (int i = 0; i < pointerCount; i++) {
+                        final int pointerId = MotionEventCompat.getPointerId(ev, i);
+                        final float x = MotionEventCompat.getX(ev, i);
+                        final float y = MotionEventCompat.getY(ev, i);
+                        final float dx = x - mInitialMotionX[pointerId];
+                        final float dy = y - mInitialMotionY[pointerId];
+
+                        reportNewEdgeDrags(dx, dy, pointerId);
+                        if (mDragState == STATE_DRAGGING) {
+                            // Callback might have started an edge drag.
+                            break;
+                        }
+
+                        final View toCapture = findTopChildUnder((int) x, (int) y);
+                        if (checkTouchSlop(toCapture, dx, dy) &&
+                                tryCaptureViewForDrag(toCapture, pointerId)) {
+                            break;
+                        }
+                    }
+                    saveLastMotion(ev);
+                }
+                break;
+            }
+
+            case MotionEventCompat.ACTION_POINTER_UP: {
+                final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+                if (mDragState == STATE_DRAGGING && pointerId == mActivePointerId) {
+                    // Try to find another pointer that's still holding on to the captured view.
+                    int newActivePointer = INVALID_POINTER;
+                    final int pointerCount = MotionEventCompat.getPointerCount(ev);
+                    for (int i = 0; i < pointerCount; i++) {
+                        final int id = MotionEventCompat.getPointerId(ev, i);
+                        if (id == mActivePointerId) {
+                            // This one's going away, skip.
+                            continue;
+                        }
+
+                        final float x = MotionEventCompat.getX(ev, i);
+                        final float y = MotionEventCompat.getY(ev, i);
+                        if (findTopChildUnder((int) x, (int) y) == mCapturedView &&
+                                tryCaptureViewForDrag(mCapturedView, id)) {
+                            newActivePointer = mActivePointerId;
+                            break;
+                        }
+                    }
+
+                    if (newActivePointer == INVALID_POINTER) {
+                        // We didn't find another pointer still touching the view, release it.
+                        releaseViewForPointerUp();
+                    }
+                }
+                clearMotionHistory(pointerId);
+                break;
+            }
+
+            case MotionEvent.ACTION_UP: {
+                if (mDragState == STATE_DRAGGING) {
+                    releaseViewForPointerUp();
+                }
+                cancel();
+                break;
+            }
+
+            case MotionEvent.ACTION_CANCEL: {
+                if (mDragState == STATE_DRAGGING) {
+                    dispatchViewReleased(0, 0);
+                }
+                cancel();
+                break;
+            }
+        }
+    }
+
+    private void reportNewEdgeDrags(float dx, float dy, int pointerId) {
+        int dragsStarted = 0;
+        if (checkNewEdgeDrag(dx, dy, pointerId, EDGE_LEFT)) {
+            dragsStarted |= EDGE_LEFT;
+        }
+        if (checkNewEdgeDrag(dy, dx, pointerId, EDGE_TOP)) {
+            dragsStarted |= EDGE_TOP;
+        }
+        if (checkNewEdgeDrag(dx, dy, pointerId, EDGE_RIGHT)) {
+            dragsStarted |= EDGE_RIGHT;
+        }
+        if (checkNewEdgeDrag(dy, dx, pointerId, EDGE_BOTTOM)) {
+            dragsStarted |= EDGE_BOTTOM;
+        }
+
+        if (dragsStarted != 0) {
+            mEdgeDragsInProgress[pointerId] |= dragsStarted;
+            mCallback.onEdgeDragStarted(dragsStarted, pointerId);
+        }
+    }
+
+    private boolean checkNewEdgeDrag(float delta, float odelta, int pointerId, int edge) {
+        final float absDelta = Math.abs(delta);
+        final float absODelta = Math.abs(odelta);
+
+        if ((mInitialEdgesTouched[pointerId] & edge) != edge  || (mTrackingEdges & edge) == 0 ||
+                (mEdgeDragsLocked[pointerId] & edge) == edge ||
+                (mEdgeDragsInProgress[pointerId] & edge) == edge ||
+                (absDelta <= mTouchSlop && absODelta <= mTouchSlop)) {
+            return false;
+        }
+        if (absDelta < absODelta * 0.5f && mCallback.onEdgeLock(edge)) {
+            mEdgeDragsLocked[pointerId] |= edge;
+            return false;
+        }
+        return (mEdgeDragsInProgress[pointerId] & edge) == 0 && absDelta > mTouchSlop;
+    }
+
+    /**
+     * Check if we've crossed a reasonable touch slop for the given child view.
+     * If the child cannot be dragged along the horizontal or vertical axis, motion
+     * along that axis will not count toward the slop check.
+     *
+     * @param child Child to check
+     * @param dx Motion since initial position along X axis
+     * @param dy Motion since initial position along Y axis
+     * @return true if the touch slop has been crossed
+     */
+    private boolean checkTouchSlop(View child, float dx, float dy) {
+        if (child == null) {
+            return false;
+        }
+        final boolean checkHorizontal = mCallback.getViewHorizontalDragRange(child) > 0;
+        final boolean checkVertical = mCallback.getViewVerticalDragRange(child) > 0;
+
+        if (checkHorizontal && checkVertical) {
+            return dx * dx + dy * dy > mTouchSlop * mTouchSlop;
+        } else if (checkHorizontal) {
+            return Math.abs(dx) > mTouchSlop;
+        } else if (checkVertical) {
+            return Math.abs(dy) > mTouchSlop;
+        }
+        return false;
+    }
+
+    /**
+     * Check if any pointer tracked in the current gesture has crossed
+     * the required slop threshold.
+     *
+     * <p>This depends on internal state populated by
+     * {@link #shouldInterceptTouchEvent(android.view.MotionEvent)} or
+     * {@link #processTouchEvent(android.view.MotionEvent)}. You should only rely on
+     * the results of this method after all currently available touch data
+     * has been provided to one of these two methods.</p>
+     *
+     * @param directions Combination of direction flags, see {@link #DIRECTION_HORIZONTAL},
+     *                   {@link #DIRECTION_VERTICAL}, {@link #DIRECTION_ALL}
+     * @return true if the slop threshold has been crossed, false otherwise
+     */
+    public boolean checkTouchSlop(int directions) {
+        final int count = mInitialMotionX.length;
+        for (int i = 0; i < count; i++) {
+            if (checkTouchSlop(directions, i)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check if the specified pointer tracked in the current gesture has crossed
+     * the required slop threshold.
+     *
+     * <p>This depends on internal state populated by
+     * {@link #shouldInterceptTouchEvent(android.view.MotionEvent)} or
+     * {@link #processTouchEvent(android.view.MotionEvent)}. You should only rely on
+     * the results of this method after all currently available touch data
+     * has been provided to one of these two methods.</p>
+     *
+     * @param directions Combination of direction flags, see {@link #DIRECTION_HORIZONTAL},
+     *                   {@link #DIRECTION_VERTICAL}, {@link #DIRECTION_ALL}
+     * @param pointerId ID of the pointer to slop check as specified by MotionEvent
+     * @return true if the slop threshold has been crossed, false otherwise
+     */
+    public boolean checkTouchSlop(int directions, int pointerId) {
+        if (!isPointerDown(pointerId)) {
+            return false;
+        }
+
+        final boolean checkHorizontal = (directions & DIRECTION_HORIZONTAL) == DIRECTION_HORIZONTAL;
+        final boolean checkVertical = (directions & DIRECTION_VERTICAL) == DIRECTION_VERTICAL;
+
+        final float dx = mLastMotionX[pointerId] - mInitialMotionX[pointerId];
+        final float dy = mLastMotionY[pointerId] - mInitialMotionY[pointerId];
+
+        if (checkHorizontal && checkVertical) {
+            return dx * dx + dy * dy > mTouchSlop * mTouchSlop;
+        } else if (checkHorizontal) {
+            return Math.abs(dx) > mTouchSlop;
+        } else if (checkVertical) {
+            return Math.abs(dy) > mTouchSlop;
+        }
+        return false;
+    }
+
+    /**
+     * Check if any of the edges specified were initially touched in the currently active gesture.
+     * If there is no currently active gesture this method will return false.
+     *
+     * @param edges Edges to check for an initial edge touch. See {@link #EDGE_LEFT},
+     *              {@link #EDGE_TOP}, {@link #EDGE_RIGHT}, {@link #EDGE_BOTTOM} and
+     *              {@link #EDGE_ALL}
+     * @return true if any of the edges specified were initially touched in the current gesture
+     */
+    public boolean isEdgeTouched(int edges) {
+        final int count = mInitialEdgesTouched.length;
+        for (int i = 0; i < count; i++) {
+            if (isEdgeTouched(edges, i)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check if any of the edges specified were initially touched by the pointer with
+     * the specified ID. If there is no currently active gesture or if there is no pointer with
+     * the given ID currently down this method will return false.
+     *
+     * @param edges Edges to check for an initial edge touch. See {@link #EDGE_LEFT},
+     *              {@link #EDGE_TOP}, {@link #EDGE_RIGHT}, {@link #EDGE_BOTTOM} and
+     *              {@link #EDGE_ALL}
+     * @return true if any of the edges specified were initially touched in the current gesture
+     */
+    public boolean isEdgeTouched(int edges, int pointerId) {
+        return isPointerDown(pointerId) && (mInitialEdgesTouched[pointerId] & edges) != 0;
+    }
+
+    private void releaseViewForPointerUp() {
+        mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity);
+        final float xvel = clampMag(
+                VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId),
+                mMinVelocity, mMaxVelocity);
+        final float yvel = clampMag(
+                VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId),
+                mMinVelocity, mMaxVelocity);
+        dispatchViewReleased(xvel, yvel);
+    }
+
+    private void dragTo(int left, int top, int dx, int dy) {
+        int clampedX = left;
+        int clampedY = top;
+        final int oldLeft = mCapturedView.getLeft();
+        final int oldTop = mCapturedView.getTop();
+        if (dx != 0) {
+            clampedX = mCallback.clampViewPositionHorizontal(mCapturedView, left, dx);
+            mCapturedView.offsetLeftAndRight(clampedX - oldLeft);
+        }
+        if (dy != 0) {
+            clampedY = mCallback.clampViewPositionVertical(mCapturedView, top, dy);
+            mCapturedView.offsetTopAndBottom(clampedY - oldTop);
+        }
+
+        if (dx != 0 || dy != 0) {
+            final int clampedDx = clampedX - oldLeft;
+            final int clampedDy = clampedY - oldTop;
+            mCallback.onViewPositionChanged(mCapturedView, clampedX, clampedY,
+                    clampedDx, clampedDy);
+        }
+    }
+
+    /**
+     * Determine if the currently captured view is under the given point in the
+     * parent view's coordinate system. If there is no captured view this method
+     * will return false.
+     *
+     * @param x X position to test in the parent's coordinate system
+     * @param y Y position to test in the parent's coordinate system
+     * @return true if the captured view is under the given point, false otherwise
+     */
+    public boolean isCapturedViewUnder(int x, int y) {
+        return isViewUnder(mCapturedView, x, y);
+    }
+
+    /**
+     * Determine if the supplied view is under the given point in the
+     * parent view's coordinate system.
+     *
+     * @param view Child view of the parent to hit test
+     * @param x X position to test in the parent's coordinate system
+     * @param y Y position to test in the parent's coordinate system
+     * @return true if the supplied view is under the given point, false otherwise
+     */
+    public boolean isViewUnder(View view, int x, int y) {
+        if (view == null) {
+            return false;
+        }
+        return x >= view.getLeft() &&
+                x < view.getRight() &&
+                y >= view.getTop() &&
+                y < view.getBottom();
+    }
+
+    /**
+     * Find the topmost child under the given point within the parent view's coordinate system.
+     * The child order is determined using {@link Callback#getOrderedChildIndex(int)}.
+     *
+     * @param x X position to test in the parent's coordinate system
+     * @param y Y position to test in the parent's coordinate system
+     * @return The topmost child view under (x, y) or null if none found.
+     */
+    public View findTopChildUnder(int x, int y) {
+        final int childCount = mParentView.getChildCount();
+        for (int i = childCount - 1; i >= 0; i--) {
+            final View child = mParentView.getChildAt(mCallback.getOrderedChildIndex(i));
+            if (x >= child.getLeft() && x < child.getRight() &&
+                    y >= child.getTop() && y < child.getBottom()) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    private int getEdgesTouched(int x, int y) {
+        int result = 0;
+
+        if (x < mParentView.getLeft() + mEdgeSize) result |= EDGE_LEFT;
+        if (y < mParentView.getTop() + mEdgeSize) result |= EDGE_TOP;
+        if (x > mParentView.getRight() - mEdgeSize) result |= EDGE_RIGHT;
+        if (y > mParentView.getBottom() - mEdgeSize) result |= EDGE_BOTTOM;
+
+        return result;
+    }
+
+    /**
+     * Prepares the {@link ViewDragHelper} for the beginning of a nested scroll.
+     *
+     * @param target The child view that is dispatching the nested scroll.
+     */
+    public void startNestedScroll(View target) {
+        setDragState(STATE_DRAGGING);
+        mCapturedView = target;
+    }
+
+    /**
+     * Informs the {@link ViewDragHelper} that a nested scroll has ended.
+     *
+     * @param target The child view that is dispatching the nested scroll.
+     */
+    public void stopNestedScroll(View target) {
+        dispatchViewReleased(0, 0);
+    }
+
+    /**
+     * Update the {@link ViewDragHelper} with a new nested scrolling event.
+     *
+     * @param target The child view that is dispatching the nested scroll.
+     * @param dx The x distance scrolled on the child, in pixels.
+     * @param dy The y distance scroll on the child, in pixels.
+     * @param consumed An int array for the {@link ViewDragHelper} to report back the scroll
+     *         deltas that it consumed.
+     */
+    public void processNestedScroll(View target, int dx, int dy, int[] consumed) {
+        final int targetX = mCapturedView.getLeft() + dx;
+        final int targetY = mCapturedView.getTop() + dy;
+        dragTo(targetX, targetY, dx, dy);
+        if (consumed != null) {
+            final int unconsumedX = targetX - mCapturedView.getLeft();
+            final int unconsumedY = targetY - mCapturedView.getTop();
+            consumed[0] = dx - unconsumedX;
+            consumed[1] = dy - unconsumedY;
+        }
+    }
+
+}
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index c43dffc..9786311 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 
 import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogAdapter.CallItemExpandedListener;
 import com.android.dialer.calllog.ContactInfoHelper;
 import com.android.dialer.service.CachedNumberLookupService;
 
@@ -34,10 +35,18 @@
         return null;
     }
 
+    /**
+     * Create a new instance of the call log adapter.
+     * @param context The context to use.
+     * @param callFetcher Instance of call fetcher to use.
+     * @param contactInfoHelper Instance of contact info helper class to use.
+     * @param isCallLog Is this call log adapter being used on the call log?
+     * @return Instance of CallLogAdapter.
+     */
     public static CallLogAdapter newCallLogAdapter(Context context, CallFetcher callFetcher,
-            ContactInfoHelper contactInfoHelper, boolean useCallAsPrimaryAction,
+            ContactInfoHelper contactInfoHelper, CallItemExpandedListener callItemExpandedListener,
             boolean isCallLog) {
-        return new CallLogAdapter(context, callFetcher, contactInfoHelper, useCallAsPrimaryAction,
+        return new CallLogAdapter(context, callFetcher, contactInfoHelper, callItemExpandedListener,
                 isCallLog);
     }
 }
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 3a714e3..94aa3aa 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -25,6 +25,7 @@
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
 
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
     <uses-permission android:name="android.permission.READ_SYNC_STATS" />
diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
index 6f5a986..30fd0e2 100644
--- a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
@@ -111,9 +111,9 @@
     public void testSetPhoneCallDetails_Normal() {
         setPhoneCallDetailsWithNumber("14125551212",
                 Calls.PRESENTATION_ALLOWED, "1-412-555-1212");
-        assertEquals("Yesterday", mViews.callTypeAndDate.getText().toString());
-        assertEqualsHtml("<font color='#33b5e5'><b>Yesterday</b></font>",
-                mViews.callTypeAndDate.getText());
+        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. */
@@ -252,12 +252,12 @@
 
     /** Asserts that the label text field contains the given string value. */
     private void assertLabelEquals(String text) {
-        assertEquals(text, mViews.labelView.getText().toString());
+        assertTrue(mViews.callLocationAndDate.getText().toString().contains(text));
     }
 
     /** Asserts that the date text field contains the given string value. */
     private void assertDateEquals(String text) {
-        assertEquals(text, mViews.callTypeAndDate.getText().toString());
+        assertTrue(mViews.callLocationAndDate.getText().toString().contains(text));
     }
 
     /** Asserts that the call type contains the images with the given drawables. */
@@ -268,7 +268,7 @@
             assertEquals(id, mViews.callTypeIcons.getCallType(index));
         }
         assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
-        assertEquals("Yesterday", mViews.callTypeAndDate.getText().toString());
+        assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday"));
     }
 
     /**
@@ -282,7 +282,8 @@
             assertEquals(id, mViews.callTypeIcons.getCallType(index));
         }
         assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
-        assertEquals(overflowText + " Yesterday", mViews.callTypeAndDate.getText().toString());
+        assertTrue(mViews.callLocationAndDate.getText().toString().contains(overflowText));
+        assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday"));
     }
 
     /** Sets the phone call details with default values and the given number. */
@@ -291,8 +292,8 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(number, presentation, formattedNumber,
                         TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
-                true);
+                        new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION)
+        );
     }
 
     /** Sets the phone call details with default values and the given number. */
@@ -301,8 +302,8 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(number, Calls.PRESENTATION_ALLOWED,
                         formattedNumber, TEST_COUNTRY_ISO, geocodedLocation,
-                        new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
-                true);
+                        new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION)
+        );
     }
 
     /** Sets the phone call details with default values and the given date. */
@@ -310,8 +311,8 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
                         TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION),
-                false);
+                        new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION)
+        );
     }
 
     /** Sets the phone call details with default values and the given call types using icons. */
@@ -319,8 +320,8 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
                         TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        callTypes, TEST_DATE, TEST_DURATION),
-                false);
+                        callTypes, TEST_DATE, TEST_DURATION)
+        );
     }
 
     private void setCallDetailsHeaderWithNumber(String number, int presentation) {
@@ -335,6 +336,6 @@
                 new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
                         TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
                         new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION,
-                        name, 0, "", null, null));
+                        name, 0, "", null, null, 0));
     }
 }
diff --git a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
index 12cdb2b..8225d13 100644
--- a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
@@ -212,7 +212,7 @@
 
         public TestCallLogAdapter(Context context, CallFetcher callFetcher,
                 ContactInfoHelper contactInfoHelper) {
-            super(context, callFetcher, contactInfoHelper, false, false);
+            super(context, callFetcher, contactInfoHelper, null, false);
         }
 
         @Override
diff --git a/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java b/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
index 4ccdaaf..2c0fe0e 100644
--- a/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
@@ -20,6 +20,7 @@
 import android.app.FragmentTransaction;
 import android.content.ComponentName;
 import android.content.ContentUris;
+import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.database.MatrixCursor;
@@ -34,6 +35,7 @@
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.test.suitebuilder.annotation.MediumTest;
+import android.util.Log;
 import android.view.View;
 import android.widget.FrameLayout;
 
@@ -117,11 +119,13 @@
         FragmentManager fragmentManager = mActivity.getFragmentManager();
         FragmentTransaction transaction = fragmentManager.beginTransaction();
         transaction.add(FragmentTestActivity.LAYOUT_ID, mFragment);
-        transaction.commit();
+        transaction.commitAllowingStateLoss();
         // Wait for the fragment to be loaded.
         getInstrumentation().waitForIdleSync();
 
-        mVoicemail = TelephonyManager.getDefault().getVoiceMailNumber();
+        final TelephonyManager telephonyManager =
+                (TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
+        mVoicemail = telephonyManager.getVoiceMailNumber();
         mAdapter = mFragment.getAdapter();
         // Do not process requests for details during tests. This would start a background thread,
         // which makes the tests flaky.
@@ -171,7 +175,6 @@
         insertPrivate(NOW, 0);
         View view = mAdapter.newGroupView(getActivity(), mParentView);
         mAdapter.bindGroupView(view, getActivity(), mCursor, 3, false);
-        assertNotNull(view.findViewById(R.id.secondary_action_icon));
     }
 
     @MediumTest
@@ -179,8 +182,7 @@
         mCursor.moveToFirst();
         insertPrivate(NOW, 0);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-        assertNotNull(view.findViewById(R.id.secondary_action_icon));
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
     }
 
     @MediumTest
@@ -189,7 +191,6 @@
         insertPrivate(NOW, 0);
         View view = mAdapter.newChildView(getActivity(), mParentView);
         mAdapter.bindChildView(view, getActivity(), mCursor);
-        assertNotNull(view.findViewById(R.id.secondary_action_icon));
     }
 
     @MediumTest
@@ -197,7 +198,7 @@
         mCursor.moveToFirst();
         insert(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0, Calls.INCOMING_TYPE);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, TEST_NUMBER);
@@ -211,7 +212,7 @@
         values[CallLogQuery.CACHED_FORMATTED_NUMBER] = TEST_FORMATTED_NUMBER;
         insertValues(values);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, TEST_FORMATTED_NUMBER);
@@ -225,7 +226,7 @@
         insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
                 "John Doe", Phone.TYPE_HOME, TEST_DEFAULT_CUSTOM_LABEL);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, "John Doe");
@@ -238,7 +239,7 @@
         insertWithCachedValues("sip:johndoe@gmail.com", NOW, 0, Calls.INCOMING_TYPE,
                 "John Doe", Phone.TYPE_HOME, TEST_DEFAULT_CUSTOM_LABEL);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, "John Doe");
@@ -253,7 +254,7 @@
         insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
                 "John Doe", Phone.TYPE_HOME, TEST_DEFAULT_CUSTOM_LABEL);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, "John Doe");
@@ -268,7 +269,7 @@
         insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
                 "John Doe", Phone.TYPE_WORK, TEST_DEFAULT_CUSTOM_LABEL);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, "John Doe");
@@ -282,7 +283,7 @@
         insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
                 "John Doe", Phone.TYPE_CUSTOM, numberLabel);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertNameIs(views, "John Doe");
@@ -295,7 +296,7 @@
         insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
                 "John Doe", Phone.TYPE_HOME, "");
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertTrue(views.quickContactView.isEnabled());
@@ -306,7 +307,7 @@
         mCursor.moveToFirst();
         insert(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0, Calls.INCOMING_TYPE);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
         assertFalse(views.quickContactView.isEnabled());
@@ -317,10 +318,15 @@
         mCursor.moveToFirst();
         insert(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0, Calls.INCOMING_TYPE);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        IntentProvider intentProvider = (IntentProvider) views.secondaryActionView.getTag();
+
+        // The primaryActionView tag is set in the
+        // {@link com.android.dialer.calllog.CallLogAdapter#bindView} method.  If it is possible
+        // to place a call to the phone number, a call intent will have been created for the
+        // primaryActionView.
+        IntentProvider intentProvider = (IntentProvider) views.callBackButtonView.getTag();
         Intent intent = intentProvider.getIntent(mActivity);
         // Starts a call.
         assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
@@ -333,10 +339,10 @@
         mCursor.moveToFirst();
         insertVoicemail(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+        mAdapter.bindViewForTest(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        IntentProvider intentProvider = (IntentProvider) views.secondaryActionView.getTag();
+        IntentProvider intentProvider = (IntentProvider) views.voicemailButtonView.getTag();
         Intent intent = intentProvider.getIntent(mActivity);
         // Starts the call detail activity.
         assertEquals(new ComponentName(mActivity, CallDetailActivity.class),
@@ -362,8 +368,9 @@
     // HELPERS to check conditions on the DB/views
     //
     /**
-     * Go over all the views in the list and check that the Call
-     * icon's visibility matches the nature of the number.
+     * Go over the views in the list and check to ensure that
+     * callable numbers have an associated call intent, where numbers
+     * which are not callable have a null intent.
      */
     private void checkCallStatus() {
         for (int i = 0; i < mList.length; i++) {
@@ -374,9 +381,17 @@
             int presentation = getPhoneNumberPresentationForListEntry(i);
             if (presentation == Calls.PRESENTATION_RESTRICTED ||
                     presentation == Calls.PRESENTATION_UNKNOWN) {
-                assertFalse(View.VISIBLE == mItem.secondaryActionView.getVisibility());
+                //If number is not callable, the primary action view should have a null tag.
+                assertNull(mItem.callBackButtonView.getTag());
             } else {
-                assertEquals(View.VISIBLE, mItem.secondaryActionView.getVisibility());
+                //If the number is callable, the primary action view should have a non-null tag.
+                assertNotNull(mItem.callBackButtonView.getTag());
+
+                IntentProvider intentProvider = (IntentProvider)mItem.callBackButtonView.getTag();
+                Intent callIntent = intentProvider.getIntent(mActivity);
+
+                //The intent should be to make the call
+                assertEquals(Intent.ACTION_CALL_PRIVILEGED, callIntent.getAction());
             }
         }
     }
@@ -424,7 +439,7 @@
             if (null == mList[i]) {
                 mList[i] = mAdapter.newStandAloneView(mActivity, mParentView);
             }
-            mAdapter.bindStandAloneView(mList[i], mActivity, mCursor);
+            mAdapter.bindViewForTest(mList[i], mActivity, mCursor);
             mCursor.moveToPrevious();
             i++;
         }
@@ -633,10 +648,9 @@
     /** Asserts that the label text view contains the given text. */
     private void assertLabel(CallLogListItemViews views, CharSequence number,
             CharSequence label) {
-        assertEquals(label == null ? View.GONE : View.VISIBLE,
-                views.phoneCallDetailsViews.labelView.getVisibility());
         if (label != null) {
-            assertEquals(label, views.phoneCallDetailsViews.labelView.getText().toString());
+            assertTrue(views.phoneCallDetailsViews.callLocationAndDate.getText().toString()
+                    .contains(label));
         }
     }
 }
diff --git a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
index a10dec9..96eefbc 100644
--- a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
@@ -24,6 +24,7 @@
 
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.PhoneCallDetailsHelper;
+import com.android.dialer.R;
 
 /**
  * Unit tests for {@link CallLogListItemHelper}.
@@ -52,19 +53,21 @@
     private PhoneNumberDisplayHelper mPhoneNumberHelper;
     private PhoneNumberDisplayHelper mPhoneNumberDisplayHelper;
 
+    private Resources mResources;
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
         Context context = getContext();
-        Resources resources = context.getResources();
-        CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
+        mResources = context.getResources();
+        CallTypeHelper callTypeHelper = new CallTypeHelper(mResources);
         final TestPhoneNumberUtilsWrapper phoneUtils = new TestPhoneNumberUtilsWrapper(
                 TEST_VOICEMAIL_NUMBER);
         PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
-                resources, callTypeHelper, phoneUtils);
-        mPhoneNumberDisplayHelper = new PhoneNumberDisplayHelper(resources);
+                mResources, callTypeHelper, phoneUtils);
+        mPhoneNumberDisplayHelper = new PhoneNumberDisplayHelper(mResources);
         mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberDisplayHelper,
-                resources);
+                mResources);
         mViews = CallLogListItemViews.createForTest(context);
     }
 
@@ -78,92 +81,243 @@
     public void testSetPhoneCallDetails() {
         setPhoneCallDetailsWithNumber("12125551234", Calls.PRESENTATION_ALLOWED,
                 "1-212-555-1234");
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
-    }
-
-    public void testSetPhoneCallDetailsInFavorites() {
-        setPhoneCallDetailsWithNumberInFavorites("12125551234", Calls.PRESENTATION_ALLOWED,
-                "1-212-555-1234");
-        assertNoCallButton();
+        assertEquals(View.VISIBLE, mViews.callBackButtonView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_Unknown() {
         setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_UNKNOWN, "");
-        assertNoCallButton();
-    }
-
-    public void testSetPhoneCallDetailsInFavorites_Unknown() {
-        setPhoneCallDetailsWithNumberInFavorites("", Calls.PRESENTATION_UNKNOWN, "");
-        assertNoCallButton();
+        assertNoCallIntent();
     }
 
     public void testSetPhoneCallDetails_Private() {
         setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_RESTRICTED, "");
-        assertNoCallButton();
-    }
-
-    public void testSetPhoneCallDetailsInFavorites_Private() {
-        setPhoneCallDetailsWithNumberInFavorites("", Calls.PRESENTATION_RESTRICTED, "");
-        assertNoCallButton();
+        assertNoCallIntent();
     }
 
     public void testSetPhoneCallDetails_Payphone() {
         setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_PAYPHONE, "");
-        assertNoCallButton();
-    }
-
-    public void testSetPhoneCallDetailsInFavorites_Payphone() {
-        setPhoneCallDetailsWithNumberInFavorites("", Calls.PRESENTATION_PAYPHONE, "");
-        assertNoCallButton();
+        assertNoCallIntent();
     }
 
     public void testSetPhoneCallDetails_VoicemailNumber() {
         setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER,
                 Calls.PRESENTATION_ALLOWED, TEST_VOICEMAIL_NUMBER);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_ReadVoicemail() {
         setPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_UnreadVoicemail() {
         setUnreadPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_VoicemailFromUnknown() {
         setPhoneCallDetailsWithNumberAndType("", Calls.PRESENTATION_UNKNOWN,
                 "", Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
     }
 
-    public void testSetPhoneCallDetailsInFavorites_VoicemailNumber() {
-        setPhoneCallDetailsWithNumberInFavorites(TEST_VOICEMAIL_NUMBER,
-                Calls.PRESENTATION_ALLOWED, TEST_VOICEMAIL_NUMBER);
-        assertNoCallButton();
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where an answered unknown call is received.
+     */
+    public void testGetCallDescriptionID_UnknownAnswered() {
+        PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_incoming_answered_call,
+                mHelper.getCallDescriptionStringID(details));
     }
 
-    public void testSetPhoneCallDetailsInFavorites_ReadVoicemail() {
-        setPhoneCallDetailsWithTypesInFavorites(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where an missed unknown call is received.
+     */
+    public void testGetCallDescriptionID_UnknownMissed() {
+        PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_incoming_missed_call,
+                mHelper.getCallDescriptionStringID(details));
     }
 
-    public void testSetPhoneCallDetailsInFavorites_UnreadVoicemail() {
-        setUnreadPhoneCallDetailsWithTypesInFavorites(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where an missed unknown call is received and a voicemail was left.
+     */
+    public void testGetCallDescriptionID_UnknownVoicemail() {
+        PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_incoming_missed_call,
+                mHelper.getCallDescriptionStringID(details));
     }
 
-    public void testSetPhoneCallDetailsInFavorites_VoicemailFromUnknown() {
-        setPhoneCallDetailsWithNumberAndTypeInFavorites("", Calls.PRESENTATION_UNKNOWN,
-                "", Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where an answered call from a known caller is received.
+     */
+    public void testGetCallDescriptionID_KnownAnswered() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_incoming_answered_call,
+                mHelper.getCallDescriptionStringID(details));
     }
 
-    /** Asserts that the whole call area is gone. */
-    private void assertNoCallButton() {
-        assertEquals(View.GONE, mViews.secondaryActionView.getVisibility());
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where a missed call from a known caller is received.
+     */
+    public void testGetCallDescriptionID_KnownMissed() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_incoming_missed_call,
+                mHelper.getCallDescriptionStringID(details));
+    }
+
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where a missed call from a known caller is received and a voicemail was left.
+     */
+    public void testGetCallDescriptionID_KnownVoicemail() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_incoming_missed_call,
+                mHelper.getCallDescriptionStringID(details));
+    }
+
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where an outgoing call is made to a known number and there is a history of
+     * only a single call for this caller.
+     */
+    public void testGetCallDescriptionID_OutgoingSingle() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_outgoing_call,
+                mHelper.getCallDescriptionStringID(details));
+    }
+
+    /**
+     * Test getCallDescriptionID method used to get the accessibility description for calls.
+     * Test case where an outgoing call is made to a known number and there is a history of
+     * many calls for this caller.
+     */
+    public void testGetCallDescriptionID_OutgoingMultiple() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+        assertEquals(R.string.description_outgoing_call,
+                mHelper.getCallDescriptionStringID(details));
+    }
+
+    /**
+     * Test getCallDescription method used to get the accessibility description for calls.
+     * For outgoing calls, we should NOT have "New Voicemail" in the description.
+     */
+    public void testGetCallDescription_NoVoicemailOutgoing() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+        CharSequence description = mHelper.getCallDescription(details);
+        assertFalse(description.toString()
+                .contains(this.mResources.getString(R.string.description_new_voicemail)));
+    }
+
+    /**
+     * Test getCallDescription method used to get the accessibility description for calls.
+     * For regular incoming calls, we should NOT have "New Voicemail" in the description.
+     */
+    public void testGetCallDescription_NoVoicemailIncoming() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+        CharSequence description = mHelper.getCallDescription(details);
+        assertFalse(description.toString()
+                .contains(this.mResources.getString(R.string.description_new_voicemail)));
+    }
+
+    /**
+     * Test getCallDescription method used to get the accessibility description for calls.
+     * For regular missed calls, we should NOT have "New Voicemail" in the description.
+     */
+    public void testGetCallDescription_NoVoicemailMissed() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.MISSED_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+        CharSequence description = mHelper.getCallDescription(details);
+        assertFalse(description.toString()
+                .contains(this.mResources.getString(R.string.description_new_voicemail)));
+    }
+
+    /**
+     * Test getCallDescription method used to get the accessibility description for calls.
+     * For voicemail calls, we should have "New Voicemail" in the description.
+     */
+    public void testGetCallDescription_Voicemail() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.VOICEMAIL_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+        CharSequence description = mHelper.getCallDescription(details);
+        assertTrue(description.toString()
+                .contains(this.mResources.getString(R.string.description_new_voicemail)));
+    }
+
+    /**
+     * Test getCallDescription method used to get the accessibility description for calls.
+     * Test that the "X calls" message is not present if there is only a single call.
+     */
+    public void testGetCallDescription_NumCallsSingle() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
+        CharSequence description = mHelper.getCallDescription(details);
+
+        // Rather than hard coding the "X calls" string message, we'll generate it with an empty
+        // number of calls, and trim the resulting string.  This gets us just the word "calls",
+        // and ensures any trivial changes to that string resource won't unnecessarily break
+        // the unit test.
+        assertFalse(description.toString()
+                .contains(this.mResources.getString(R.string.description_num_calls, "").trim()));
+    }
+
+    /**
+     * Test getCallDescription method used to get the accessibility description for calls.
+     * Test that the "X calls" message is present if there are many calls.
+     */
+    public void testGetCallDescription_NumCallsMultiple() {
+        PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER,
+                TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new int[]{Calls.VOICEMAIL_TYPE, Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
+        CharSequence description = mHelper.getCallDescription(details);
+        assertTrue(description.toString()
+                .contains(this.mResources.getString(R.string.description_num_calls, 2)));
+    }
+
+    /** Asserts that the primary action view does not have a call intent. */
+    private void assertNoCallIntent() {
+        Object intentProvider = (IntentProvider)mViews.primaryActionView.getTag();
+        // The intent provider should be null as there is no ability to make a call.
+        assertNull(intentProvider);
     }
 
     /** Sets the details of a phone call using the specified phone number. */
@@ -173,31 +327,14 @@
                 formattedNumber, Calls.INCOMING_TYPE);
     }
 
-    /** Sets the details of a phone call in the favorite screen using the specified phone number. */
-    private void setPhoneCallDetailsWithNumberInFavorites(String number,
-            int presentation, String formattedNumber) {
-        setPhoneCallDetailsWithNumberAndTypeInFavorites(number, presentation,
-                formattedNumber, Calls.INCOMING_TYPE);
-    }
-
     /** Sets the details of a phone call using the specified phone number. */
     private void setPhoneCallDetailsWithNumberAndType(String number,
             int presentation, String formattedNumber, int callType) {
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(number, presentation, formattedNumber,
                         TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        new int[]{ callType }, TEST_DATE, TEST_DURATION),
-                false, false);
-    }
-
-    /** Sets the details of a phone call in the favorite screen using the specified phone number. */
-    private void setPhoneCallDetailsWithNumberAndTypeInFavorites(String number,
-            int presentation, String formattedNumber, int callType) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(number, presentation, formattedNumber,
-                        TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        new int[]{ callType }, TEST_DATE, TEST_DURATION),
-                false, true);
+                        new int[]{ callType }, TEST_DATE, TEST_DURATION)
+        );
     }
 
     /** Sets the details of a phone call using the specified call type. */
@@ -205,17 +342,8 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
                         TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        types, TEST_DATE, TEST_DURATION),
-                false, false);
-    }
-
-    /** Sets the details of a phone call in the favorite screen using the specified call type. */
-    private void setPhoneCallDetailsWithTypesInFavorites(int... types) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
-                        TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        types, TEST_DATE, TEST_DURATION),
-                false, true);
+                        types, TEST_DATE, TEST_DURATION)
+        );
     }
 
     /** Sets the details of an unread phone call using the specified call type. */
@@ -223,18 +351,7 @@
         mHelper.setPhoneCallDetails(mViews,
                 new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
                         TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        types, TEST_DATE, TEST_DURATION),
-                true, false);
-    }
-
-    /** Sets the details of an unread phone call in the favorite screen using the specified call
-     * type.
-     */
-    private void setUnreadPhoneCallDetailsWithTypesInFavorites(int... types) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
-                        TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        types, TEST_DATE, TEST_DURATION),
-                true, true);
+                        types, TEST_DATE, TEST_DURATION)
+        );
     }
 }
diff --git a/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java b/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java
index 611b3f1..c2069bd 100644
--- a/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java
+++ b/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java
@@ -1,15 +1,26 @@
 package com.android.dialer.list;
 
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.provider.ContactsContract.PinnedPositions;
 import android.test.AndroidTestCase;
 
+import com.android.contacts.common.ContactTileLoaderFactory;
+import com.android.contacts.common.list.ContactEntry;
+import com.android.dialer.list.PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener;
+
+import java.util.ArrayList;
+
 public class PhoneFavoritesTileAdapterTest extends AndroidTestCase {
     private PhoneFavoritesTileAdapter mAdapter;
+    private static final OnDataSetChangedForAnimationListener
+            sOnDataSetChangedForAnimationListener = new OnDataSetChangedForAnimationListener() {
+                @Override
+                public void onDataSetChangedForAnimation(long... idsInPlace) {}
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mAdapter = new PhoneFavoritesTileAdapter(getContext(), null, null, 3, 1);
-    }
+                @Override
+                public void cacheOffsetsForDatasetChange() {}
+            };
 
     /**
      * TODO: Add tests
@@ -42,5 +53,55 @@
 
     }
 
+    /**
+     * Returns a cursor containing starred and frequent contacts for test purposes.
+     *
+     * @param numStarred Number of starred contacts in the cursor. Cannot be a negative number.
+     * @param numFrequents Number of frequent contacts in the cursor. Cannot be a negative number.
+     * @return Cursor containing the required number of rows, each representing one ContactEntry
+     */
+    private Cursor getCursorForTest(int numStarred, int numFrequents) {
+        assertTrue(numStarred >= 0);
+        assertTrue(numFrequents >= 0);
+        final MatrixCursor c = new MatrixCursor(ContactTileLoaderFactory.COLUMNS_PHONE_ONLY);
+        int countId = 0;
 
+        // Add starred contact entries. These entries have the starred field set to 1 (true).
+        // The only field that really matters for testing is the contact id.
+        for (int i = 0; i < numStarred; i++) {
+            c.addRow(new Object[] {countId, null, 1, null, null, 0, 0, null, 0,
+                    PinnedPositions.UNPINNED, countId});
+            countId++;
+        }
+
+        // Add frequent contact entries. These entries have the starred field set to 0 (false).
+        for (int i = 0; i < numFrequents; i++) {
+            c.addRow(new Object[] {countId, null, 0, null, null, 0, 0, null, 0,
+                    PinnedPositions.UNPINNED, countId});
+            countId++;
+        }
+        return c;
+    }
+
+    /**
+     * Returns a ContactEntry with test data corresponding to the provided contact Id
+     *
+     * @param id Non-negative id
+     * @return ContactEntry item used for testing
+     */
+    private ContactEntry getTestContactEntry(int id, boolean isFavorite) {
+        ContactEntry contactEntry = new ContactEntry();
+        contactEntry.id = id;
+        contactEntry.isFavorite = isFavorite;
+        return contactEntry;
+    }
+
+    private void assertContactEntryRowsEqual(ArrayList<ContactEntry> expected,
+            ArrayList<ContactEntry> actual) {
+        assertEquals(expected.size(), actual.size());
+        for (int i = 0; i < actual.size(); i++) {
+            assertEquals(expected.get(i).id, actual.get(i).id);
+            assertEquals(expected.get(i).isFavorite, actual.get(i).isFavorite);
+        }
+    }
 }