Merge "Remove tab colors and drawables to ContactsCommon."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7795aa8..6879f3a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -122,11 +122,6 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.TAB" />
             </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable"/>
         </activity>
 
         <activity android:name="com.android.dialer.calllog.CallLogActivity"
diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml
index 6d04103..2cd796b 100644
--- a/res/layout/dialtacts_activity.xml
+++ b/res/layout/dialtacts_activity.xml
@@ -46,53 +46,6 @@
             android:id="@+id/search_and_remove_view_container"
             android:visibility="gone"
             >
-            <!--  TODO: This is set to visibility:gone for now, should be removed entirely -->
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/search_box_height"
-                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"
-                android:visibility="gone"
-                >
-                <EditText
-                    android:id="@+id/search_view"
-                    android:layout_width="match_parent"
-                    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: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>
             <com.android.dialer.list.RemoveView
                 android:layout_width="match_parent"
                 android:layout_height="56dp"
diff --git a/res/layout/lists_fragment.xml b/res/layout/lists_fragment.xml
index 6ed0f85..d5b2bf8 100644
--- a/res/layout/lists_fragment.xml
+++ b/res/layout/lists_fragment.xml
@@ -14,11 +14,11 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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:paddingTop="?android:attr/actionBarSize"
-    android:orientation="vertical"
     android:animateLayoutChanges="true"
     android:id="@+id/lists_frame">
     <ListView
@@ -29,18 +29,23 @@
         android:clipToPadding="false"
         android:fadingEdge="none"
         android:divider="@null" />
-    <com.android.dialer.list.ViewPagerTabs
-        android:id="@+id/lists_pager_header"
+    <LinearLayout
         android:layout_width="match_parent"
-        android:layout_height="?android:attr/actionBarSize"
-        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>
+        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="?android:attr/actionBarSize"
+            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/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/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index a332030..17f4d9f 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -14,16 +14,11 @@
      limitations under the License.
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:id="@+id/menu_search"
-        android:title="@string/description_search_button"
-        android:showAsAction="always"
-        android:actionViewClass="android.widget.SearchView"/>
+
     <item
         android:id="@+id/menu_history"
         android:icon="@drawable/ic_menu_history_lt"
-        android:title="@string/action_menu_call_history_description"
-        android:showAsAction="ifRoom"/>
+        android:title="@string/action_menu_call_history_description" />
     <item
         android:id="@+id/menu_import_export"
         android:title="@string/menu_import_export" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 2db6fb3..b8c52fc 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Meer opsies"</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>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index d8bd866..931e24b 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"ተጨማሪ አማራጮች"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 4eb05b3..44fb1e3 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"خيارات أخرى"</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>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index bfc648d..17b7633 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Още опции"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index ae4fb80..cee089e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Més opcions"</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>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 9774b79..82b6e93 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Další možnosti"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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 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>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 8e4acf9..b759da7 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Flere muligheder"</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>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 6bd2c57..37917ce 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Weitere Optionen"</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>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 66cadc7..d5e1d83 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Περισσότερες επιλογές"</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>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 007bc54..a2964c3 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"More options"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 007bc54..a2964c3 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"More options"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 2e91356..11e3075 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Más opciones"</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>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index c8de505..00a191e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Más opciones"</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>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 802057a..7bae4d7 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Rohkem valikuid"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index b1d2505..bc66aef 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"گزینه‌های بیشتر"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index a9759a7..b3cd101 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Lisää vaihtoehtoja"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 78c4aa3..c09b53c 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Plus d\'options"</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>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index ff093ac..edb014d 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Plus d\'options"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f18c8af..16a34d5 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"अधिक विकल्प"</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>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index e90e14c..5d327a7 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Više opcija"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 3ce07fb..6937243 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"További lehetőségek"</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>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 07c30de..d2ec2b8 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Այլ ընտրանքներ"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index d3efb09..c5abcf7 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Opsi lainnya"</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>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 5d2a4ec..348fc8b 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Altre opzioni"</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>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index edf8b68..0021146 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"עוד אפשרויות"</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>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index f273614..b168c79 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"その他のオプション"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index f946fb5..9c50d19 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"მეტი ვარიანტები"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 35a0029..e3f28c0 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"ជម្រើស​ច្រើន​ទៀត"</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>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 1f43f7e..8d9d268 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"옵션 더보기"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 0320184..4b93e83 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"ໂຕ​ເລືອກ​ອື່ນ"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 30f883e..a6fcbd3 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Daugiau parinkčių"</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>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 3a36697..a0e19e4 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Citas opcijas"</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>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index d222445..505d3ee 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Нэмэлт сонголтууд"</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>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index fc086a1..3483747 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Lagi pilihan"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 4f87fae..91b32a8 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Flere alternativer"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index a272d88..9a759e6 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Meer opties"</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>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 8c28bc9..3320a6a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Więcej opcji"</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>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 70dd309..a3031b4 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Mais opções"</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>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index fa6de35..19df83f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Mais opções"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 8b7edab..cf97465 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -161,6 +161,8 @@
     <skip />
     <!-- no translation found for description_add_contact (3103414772502485851) -->
     <skip />
+    <!-- no translation found for description_dialpad_overflow (5085126640236518486) -->
+    <skip />
     <!-- no translation found for description_view_contact (5205669345700598415) -->
     <skip />
     <!-- no translation found for description_call (3443678121983852666) -->
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 92f4137..40b17fb 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Mai multe opțiuni"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index df302f2..4093fc8 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Ещё"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c2c5a9f..9d0ee88 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Viac možností"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index bef11a5..e8ef39a 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Več možnosti"</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>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index be46664..b26258d 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Још опција"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 7e91c24..badb42f 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Fler alternativ"</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>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 37c1a81..cac08a9 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Chaguo zaidi"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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 simu."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Gonga picha ili uone nambari zote au bonyeza na ushikilie ili upange upya"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index c0adf23..2ddf8a0 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"ตัวเลือกอื่น"</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>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 9d5e773..66e28b4 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Higit pang mga opsyon"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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">"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>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 575e725..87a5043 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Diğer seçenekler"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 885123e..24ca079 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Інші опції"</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>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f8d3e5e..bec7674 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Thêm tùy chọn"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c170fdc..4993276 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"更多选项"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index a945982..829366e 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"更多選項"</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>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6cdab8c..5881493 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"更多選項"</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>
@@ -174,8 +175,7 @@
     <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>
-    <!-- no translation found for recents_footer_text (7315554578957453359) -->
-    <skip />
+    <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>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 2ac055c..3dce536 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -111,6 +111,7 @@
     <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_dialpad_overflow" msgid="5085126640236518486">"Izinketho eziningi"</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>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 83ff4ae..5095cdd 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -50,7 +50,7 @@
     <dimen name="dialpad_key_star_pound_size">26sp</dimen>
     <dimen name="dialpad_key_numbers_width">30dp</dimen>
     <dimen name="dialpad_key_letters_width">50dp</dimen>
-    <dimen name="dialpad_key_height">56dp</dimen>
+    <dimen name="dialpad_key_height">56sp</dimen>
     <!-- The bottom row of the dialpad is slightly taller to account for the dial button -->
     <dimen name="dialpad_bottom_key_height">70dp</dimen>
     <dimen name="dialpad_key_plus_size">18sp</dimen>
@@ -113,11 +113,9 @@
     <!-- 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">10dp</dimen>
+    <dimen name="search_top_margin">4dp</dimen>
     <!-- Margin below the search box. -->
     <dimen name="search_bottom_margin">4dp</dimen>
-    <!-- Height of the search box. -->
-    <dimen name="search_box_height">41dp</dimen>
     <!-- Search box text size -->
     <dimen name="search_text_size">13.24sp</dimen>
     <!-- Search box interior padding - left -->
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 470c0b6..decfe9b 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -745,9 +745,9 @@
     private void loadContactPhotos(Uri photoUri, String displayName, String lookupKey,
             int contactType) {
         final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey,
-                contactType);
+                contactType, false);
         mContactPhotoManager.loadPhoto(mContactBackgroundView, photoUri,
-                mContactBackgroundView.getWidth(), true, request);
+                mContactBackgroundView.getWidth(), true, false /* isCircular */, request);
     }
 
     static final class ViewEntry {
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 2e0225a..ce71245 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -20,18 +20,17 @@
 import android.animation.LayoutTransition;
 import android.animation.Animator.AnimatorListener;
 import android.animation.AnimatorListenerAdapter;
+import android.app.ActionBar;
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
-import android.app.SearchManager;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.TypedArray;
-import android.graphics.Outline;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.RemoteException;
@@ -41,28 +40,23 @@
 import android.speech.RecognizerIntent;
 import android.support.v4.view.ViewPager;
 import android.telephony.TelephonyManager;
+import android.text.Editable;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.util.Log;
-import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLayoutChangeListener;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 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.FrameLayout;
-import android.widget.LinearLayout;
+import android.widget.EditText;
 import android.widget.PopupMenu;
 import android.widget.RelativeLayout;
 import android.widget.SearchView;
-import android.widget.SearchView.OnQueryTextListener;
 import android.widget.Toast;
 
 import com.android.contacts.common.CallUtil;
@@ -82,7 +76,6 @@
 import com.android.dialer.list.OnDragDropListener;
 import com.android.dialer.list.OnListFragmentScrolledListener;
 import com.android.dialer.list.SpeedDialFragment;
-import com.android.dialer.list.PhoneFavoriteTileView;
 import com.android.dialer.list.PhoneFavoriteSquareTileView;
 import com.android.dialer.list.RegularSearchFragment;
 import com.android.dialer.list.RemoveView;
@@ -195,7 +188,9 @@
     // This view points to the Framelayout that houses both the search view and remove view
     // containers.
     private View mSearchAndRemoveViewContainer;
-    private SearchView mSearchView;
+    private EditText mSearchView;
+    private View mSearchViewCloseButton;
+    private View mVoiceSearchButton;
     /**
      * 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
@@ -260,19 +255,19 @@
     /**
      * Listener used to send search queries to the phone search fragment.
      */
-    private final OnQueryTextListener mPhoneSearchQueryTextListener = new OnQueryTextListener() {
+    private final TextWatcher mPhoneSearchQueryTextListener = new TextWatcher() {
             @Override
-            public boolean onQueryTextSubmit(String query) {
-                return false;
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
             }
 
             @Override
-            public boolean onQueryTextChange(String newText) {
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                final String newText = s.toString();
                 if (newText.equals(mSearchQuery)) {
                     // If the query hasn't changed (perhaps due to activity being destroyed
                     // and restored, or user launching the same DIAL intent twice), then there is
                     // no need to do anything here.
-                    return true;
+                    return;
                 }
                 mSearchQuery = newText;
                 if (DEBUG) {
@@ -283,7 +278,9 @@
                 // Show search result with non-empty text. Show a bare list otherwise.
                 if (TextUtils.isEmpty(newText) && getInSearchUi()) {
                     exitSearchUi();
-                    return true;
+                    mSearchViewCloseButton.setVisibility(View.GONE);
+                    mVoiceSearchButton.setVisibility(View.VISIBLE);
+                    return;
                 } else if (!TextUtils.isEmpty(newText)) {
                     final boolean sameSearchMode = (dialpadSearch && mInDialpadSearch) ||
                             (!dialpadSearch && mInRegularSearch);
@@ -298,9 +295,15 @@
                     } else if (mRegularSearchFragment != null) {
                         mRegularSearchFragment.setQueryString(newText, false);
                     }
-                    return true;
+                    mSearchViewCloseButton.setVisibility(View.VISIBLE);
+                    mVoiceSearchButton.setVisibility(View.GONE);
+                    return;
                 }
-                return true;
+                return;
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
             }
     };
 
@@ -316,8 +319,17 @@
         setContentView(R.layout.dialtacts_activity);
         getWindow().setBackgroundDrawable(null);
 
-        getActionBar().setDisplayShowHomeEnabled(false);
-        getActionBar().setDisplayShowTitleEnabled(false);
+        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 });
@@ -368,6 +380,7 @@
             mInCallDialpadUp = false;
         }
         mFirstLaunch = false;
+        prepareVoiceSearchButton();
         mDialerDatabaseHelper.startSmartDialUpdateThread();
     }
 
@@ -442,9 +455,9 @@
                 break;
             case R.id.search_close_button:
                 // Clear the search field
-                if (!TextUtils.isEmpty(mSearchView.getQuery())) {
+                if (!TextUtils.isEmpty(mSearchView.getText())) {
                     mDialpadFragment.clearDialpad();
-                    mSearchView.setQuery("", false);
+                    mSearchView.setText(null);
                 }
                 break;
             case R.id.voice_search_button:
@@ -523,7 +536,7 @@
                         RecognizerIntent.EXTRA_RESULTS);
                 if (matches.size() > 0) {
                     final String match = matches.get(0);
-                    mSearchView.setQuery(match, false);
+                    mSearchView.setText(match);
                 } else {
                     Log.e(TAG, "Voice search - nothing heard");
                 }
@@ -578,7 +591,7 @@
     }
 
     private void hideDialpadAndSearchUi() {
-        mSearchView.setQuery("", false);
+        mSearchView.setText(null);
         hideDialpadFragment(false, true);
     }
 
@@ -641,6 +654,17 @@
         }
     }
 
+    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 {
+            mVoiceSearchButton.setVisibility(View.GONE);
+        }
+    }
+
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         if (DEBUG) {
@@ -648,15 +672,9 @@
         }
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.dialtacts_options, menu);
-        final MenuItem searchItem = menu.findItem(R.id.menu_search);
-        mSearchView = (SearchView) searchItem.getActionView();
-        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
-        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
-        mSearchView.setOnQueryTextListener(mPhoneSearchQueryTextListener);
-        mSearchView.setIconifiedByDefault(false);
 
         if (mPendingSearchViewQuery != null) {
-            mSearchView.setQuery(mPendingSearchViewQuery, false);
+            mSearchView.setText(mPendingSearchViewQuery);
             mPendingSearchViewQuery = null;
         }
         return super.onCreateOptionsMenu(menu);
@@ -823,7 +841,7 @@
         if (mDialpadFragment != null && mDialpadFragment.isVisible()) {
             hideDialpadFragment(true, false);
         } else if (getInSearchUi()) {
-            mSearchView.setQuery(null, false);
+            mSearchView.setText(null);
             mDialpadFragment.clearDialpad();
         } else {
             super.onBackPressed();
@@ -837,13 +855,8 @@
         }
         final String normalizedQuery = SmartDialNameMatcher.normalizeNumber(query,
                 SmartDialNameMatcher.LATIN_SMART_DIAL_MAP);
-        if (mSearchView == null) {
-            if (!TextUtils.isEmpty(normalizedQuery)) {
-                mPendingSearchViewQuery = normalizedQuery;
-            }
-            return;
-        }
-        if (!TextUtils.equals(mSearchView.getQuery(), normalizedQuery)) {
+
+        if (!TextUtils.equals(mSearchView.getText(), normalizedQuery)) {
             if (DEBUG) {
                 Log.d(TAG, "onDialpadQueryChanged - new query: " + query);
             }
@@ -853,9 +866,12 @@
                 // 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.setQuery(normalizedQuery, false);
+            mSearchView.setText(normalizedQuery);
         }
     }
 
@@ -979,7 +995,10 @@
     @Override
     public void onPageSelected(int position) {
         mCurrentTabPosition = position;
-        alignFloatingActionButtonByTab(mCurrentTabPosition);
+        // If the dialpad is showing, the floating action button should always be middle aligned.
+        if (!isDialpadShowing()) {
+            alignFloatingActionButtonByTab(mCurrentTabPosition);
+        }
     }
 
     @Override
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index aee24ba..266be34 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -882,19 +882,21 @@
     private void setPhoto(CallLogListItemViews views, long photoId, Uri contactUri,
             String displayName, String identifier, int contactType) {
         views.quickContactView.assignContactUri(contactUri);
+        views.quickContactView.setOverlay(null);
         DefaultImageRequest request = new DefaultImageRequest(displayName, identifier,
-                contactType);
+                contactType, true /* isCircular */);
         mContactPhotoManager.loadThumbnail(views.quickContactView, photoId, false /* darkTheme */,
-                request);
+                true /* isCircular */, request);
     }
 
     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);
+                contactType, true /* isCircular */);
         mContactPhotoManager.loadDirectoryPhoto(views.quickContactView, photoUri,
-                false /* darkTheme */, request);
+                false /* darkTheme */, true /* isCircular */, request);
     }
 
 
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 3992676..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);
             }
         }
     }
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 72abaa0..0ca26e9 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -405,6 +405,7 @@
         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);
@@ -624,6 +625,7 @@
             lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
             final String numberString = resources.getString(numberIds[i]);
             numberView.setText(numberString);
+            numberView.setElegantTextHeight(false);
             dialpadKey.setContentDescription(numberString);
             if (lettersView != null) {
                 lettersView.setText(resources.getString(letterIds[i]));
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index a61d8a5..49d6b3a 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -9,16 +9,17 @@
 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.LinearLayout;
 import android.widget.ListView;
 
 import com.android.contacts.common.GeoUtil;
@@ -32,6 +33,9 @@
 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;
@@ -226,10 +230,8 @@
                 (ListView) parentView.findViewById(R.id.shortcut_card_list);
         shortcutCardsListView.setAdapter(mMergedAdapter);
 
-        LayoutTransition transition = ((LinearLayout) parentView).getLayoutTransition();
-        // Turns on animations for all types of layout changes so that they occur for
-        // height changes.
-        transition.enableTransitionType(LayoutTransition.CHANGING);
+        setupPaneLayout((OverlappingPaneLayout) parentView, shortcutCardsListView);
+
         return parentView;
     }
 
@@ -295,4 +297,39 @@
             mOnPageChangeListeners.get(i).onPageScrollStateChanged(state);
         }
     }
+
+    private void setupPaneLayout(OverlappingPaneLayout paneLayout,
+            final ListView shortcutCardsListView) {
+        // 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(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.
+                float ratioCardHidden = (1 - slideOffset) * 1.5f;
+                if (shortcutCardsListView.getCount() > 0) {
+                    SwipeableShortcutCard v =
+                            (SwipeableShortcutCard) shortcutCardsListView.getChildAt(0);
+                    v.clipCard(ratioCardHidden);
+                }
+            }
+
+            @Override
+            public void onPanelOpened(View panel) {
+            }
+
+            @Override
+            public void onPanelClosed(View panel) {
+            }
+        });
+
+        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/PhoneFavoriteTileView.java b/src/com/android/dialer/list/PhoneFavoriteTileView.java
index 3626bcb..862952d 100644
--- a/src/com/android/dialer/list/PhoneFavoriteTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteTileView.java
@@ -131,7 +131,7 @@
     @Override
     protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
         return new DefaultImageRequest(displayName, lookupKey, ContactPhotoManager.TYPE_DEFAULT,
-                DEFAULT_IMAGE_LETTER_SCALE, DEFAULT_IMAGE_LETTER_OFFSET);
+                DEFAULT_IMAGE_LETTER_SCALE, DEFAULT_IMAGE_LETTER_OFFSET, false);
     }
 
     @Override
diff --git a/src/com/android/dialer/list/ShortcutCardsAdapter.java b/src/com/android/dialer/list/ShortcutCardsAdapter.java
index 0009ee5..8a1f64c 100644
--- a/src/com/android/dialer/list/ShortcutCardsAdapter.java
+++ b/src/com/android/dialer/list/ShortcutCardsAdapter.java
@@ -20,6 +20,7 @@
 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;
@@ -150,12 +151,12 @@
 
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
-        final SwipeableCallLogRow wrapper;
+        final SwipeableShortcutCard wrapper;
         if (convertView == null) {
-            wrapper = new SwipeableCallLogRow(mContext);
+            wrapper = new SwipeableShortcutCard(mContext);
             wrapper.setOnItemSwipeListener(mCallLogOnItemSwipeListener);
         } else {
-            wrapper = (SwipeableCallLogRow) convertView;
+            wrapper = (SwipeableShortcutCard) convertView;
         }
 
         // Special case wrapper view for the most recent call log item. This allows
@@ -186,11 +187,11 @@
     /**
      * The swipeable call log row.
      */
-    private class SwipeableCallLogRow extends FrameLayout implements SwipeHelperCallback {
+    class SwipeableShortcutCard extends FrameLayout implements SwipeHelperCallback {
         private SwipeHelper mSwipeHelper;
         private OnItemGestureListener mOnItemSwipeListener;
 
-        public SwipeableCallLogRow(Context context) {
+        public SwipeableShortcutCard(Context context) {
             super(context);
             final float densityScale = getResources().getDisplayMetrics().density;
             final float pagingTouchSlop = ViewConfiguration.get(context)
@@ -270,5 +271,49 @@
         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/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
index 9de75bb..cfcea9d 100644
--- a/src/com/android/dialer/list/SpeedDialFragment.java
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -32,6 +32,8 @@
 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;
@@ -216,6 +218,10 @@
         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);
diff --git a/src/com/android/dialer/widget/OverlappingPaneLayout.java b/src/com/android/dialer/widget/OverlappingPaneLayout.java
new file mode 100644
index 0000000..d6ebbb0
--- /dev/null
+++ b/src/com/android/dialer/widget/OverlappingPaneLayout.java
@@ -0,0 +1,1076 @@
+/*
+ * 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.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+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.support.v4.widget.ViewDragHelper;
+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;
+
+import java.util.ArrayList;
+
+/**
+ * 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;
+
+    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)) {
+            mDragHelper.cancel();
+            return super.onInterceptTouchEvent(ev);
+        }
+
+        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
+            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)) {
+                    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;
+    }
+
+    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;
+            }
+
+            int left;
+            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());
+        }
+    }
+}