Merge "Fixed issue that SIM name was not completely displayed in select dialog"
am: 5d2590d55e

Change-Id: I6ed5224a71243aeb9407fd4a7f91e0e362b5cec7
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 58209ae..93b9a70 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.android.contacts"
-          android:versionCode="10710"
-          android:versionName="1.7.10">
+          android:versionCode="10721"
+          android:versionName="1.7.21">
 
     <uses-sdk
         android:minSdkVersion="21"
diff --git a/res/drawable-anydpi-v26/ic_add_contact_shortcut.xml b/res/drawable-anydpi-v26/ic_add_contact_shortcut.xml
new file mode 100644
index 0000000..fbd7a09
--- /dev/null
+++ b/res/drawable-anydpi-v26/ic_add_contact_shortcut.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 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.
+-->
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_add_contact_shortcut_background"/>
+    <foreground android:drawable="@drawable/ic_add_circle_24dp"/>
+</adaptive-icon>
\ No newline at end of file
diff --git a/res/drawable/ic_add_circle_24dp.xml b/res/drawable/ic_add_circle_24dp.xml
index ae37470..ebaab34 100644
--- a/res/drawable/ic_add_circle_24dp.xml
+++ b/res/drawable/ic_add_circle_24dp.xml
@@ -20,7 +20,7 @@
         android:width="24dp"
         android:viewportHeight="192.0"
         android:viewportWidth="192.0">
-  <path android:fillColor="#F5F5F5"
+  <path android:fillColor="@color/ic_add_contact_shortcut_background"
         android:pathData="M96,8C47.38,8 8,47.38 8,96s39.38,88 88,88s88,-39.38 88,-88S144.62,8 96,8z"/>
   <path android:fillColor="#039BE5"
         android:pathData="M124,100h-24v24h-8v-24H68v-8h24V68h8v24h24V100z"/>
diff --git a/res/drawable/ic_add_contact_shortcut.xml b/res/drawable/ic_add_contact_shortcut.xml
new file mode 100644
index 0000000..85a7e61
--- /dev/null
+++ b/res/drawable/ic_add_contact_shortcut.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- A copy of ic_add_circle_24dp for use in pre O devices. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="192.0"
+    android:viewportWidth="192.0">
+    <path android:fillColor="@color/ic_add_contact_shortcut_background"
+        android:pathData="M96,8C47.38,8 8,47.38 8,96s39.38,88 88,88s88,-39.38 88,-88S144.62,8 96,8z"/>
+    <path android:fillColor="#039BE5"
+        android:pathData="M124,100h-24v24h-8v-24H68v-8h24V68h8v24h24V100z"/>
+</vector>
diff --git a/res/layout/expanding_entry_card_item.xml b/res/layout/expanding_entry_card_item.xml
index 99f9174..dbbeee5 100644
--- a/res/layout/expanding_entry_card_item.xml
+++ b/res/layout/expanding_entry_card_item.xml
@@ -88,8 +88,8 @@
 
      <ImageView
          android:id="@+id/third_icon"
-         android:layout_width="wrap_content"
-         android:layout_height="wrap_content"
+         android:layout_width="@dimen/default_clickable_icon_size"
+         android:layout_height="@dimen/default_clickable_icon_size"
          android:layout_alignParentTop="true"
          android:layout_toStartOf="@+id/icon_alternate"
          android:layout_alignWithParentIfMissing="true"
@@ -102,8 +102,8 @@
 
      <ImageView
          android:id="@+id/icon_alternate"
-         android:layout_width="wrap_content"
-         android:layout_height="wrap_content"
+         android:layout_width="@dimen/default_clickable_icon_size"
+         android:layout_height="@dimen/default_clickable_icon_size"
          android:layout_alignParentEnd="true"
          android:layout_alignParentTop="true"
          android:visibility="gone"
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 8e79099..ac64425 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -29,8 +29,8 @@
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"إنشاء جهة اتصال جديدة"</string>
     <string name="searchHint" msgid="8482945356247760701">"البحث في جهات الاتصال"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"إضافة إلى المفضلة"</string>
-    <string name="menu_removeStar" msgid="5844227078364227030">"الإزالة من العناصر المفضّلة"</string>
-    <string name="description_action_menu_remove_star" msgid="4699640108012265178">"تمت الإزالة من العناصر المفضّلة"</string>
+    <string name="menu_removeStar" msgid="5844227078364227030">"إزالة من المفضلة"</string>
+    <string name="description_action_menu_remove_star" msgid="4699640108012265178">"تمت الإزالة من المفضلة"</string>
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"تمت الإضافة إلى المفضلة"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"تعديل"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index d4d812c..fc5c553 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -216,7 +216,7 @@
     <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Nenaslovljeni događaj)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Podesi"</string>
-    <string name="header_im_entry" msgid="3581720979640225615">"Razmena trenutnih poruka"</string>
+    <string name="header_im_entry" msgid="3581720979640225615">"Trenutne poruke"</string>
     <string name="header_organization_entry" msgid="8515394955666265406">"Organizacija"</string>
     <string name="header_nickname_entry" msgid="6743561883967451485">"Nadimak"</string>
     <string name="header_note_entry" msgid="4320190426480612344">"Beleška"</string>
@@ -338,7 +338,7 @@
     <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
     <string name="emailLabelsGroup" msgid="8389931313045344406">"Imejl"</string>
     <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
-    <string name="imLabelsGroup" msgid="3898238486262614027">"Razmena trenutnih poruka"</string>
+    <string name="imLabelsGroup" msgid="3898238486262614027">"Trenutne poruke"</string>
     <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
     <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
     <string name="eventLabelsGroup" msgid="7960408705307831289">"Poseban dan"</string>
@@ -535,6 +535,5 @@
     <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz nije uspeo"</string>
     <string name="importing_sim_failed_message" msgid="3345258302998021066">"Uvoz kontakata sa SIM kartice nije uspeo"</string>
     <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvozi se sa SIM-a"</string>
-    <!-- no translation found for contacts_default_notification_channel (4754058700611188581) -->
-    <skip />
+    <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Obaveštenja"</string>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index c4f6730..1a31466 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -26,7 +26,7 @@
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Дадаць у кантакт"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выберыце кантакт"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Выбраць"</string>
-    <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Стварыць новы кантакт"</string>
+    <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Новы кантакт"</string>
     <string name="searchHint" msgid="8482945356247760701">"Пошук кантактаў"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Дадаць у абраныя"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Выдаліць з абраных"</string>
@@ -187,9 +187,9 @@
     <string name="clear_default" msgid="7193185801596678067">"Скінуць налады па змаўчанні"</string>
     <string name="toast_text_copied" msgid="5143776250008541719">"Тэкст скапіяваны"</string>
     <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Скасаваць змены?"</string>
-    <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Адхіліць"</string>
+    <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Скасаваць"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Скасаваць"</string>
-    <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Скасаваць карыст. выгляд?"</string>
+    <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Скінуць налады?"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Пошук кантактаў"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Выдаліць кантакты"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Мой лакальны профіль"</string>
@@ -197,7 +197,7 @@
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Знайдзіце хвілінку, каб дадаць уліковы запіс, які дазволіць стварыць рэзервовую копію вашых кантактаў у Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новыя кантакты будуць захаваны ва ўліковы запіс <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Выбраць уліковы запіс па змаўчанні для новых кантактаў:"</string>
-    <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Стварыць новы кантакт"</string>
+    <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Новы кантакт"</string>
     <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Рэдагаваць кантакт"</string>
     <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Толькі прагляд"</string>
     <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Выбраць кантакт для рэдагавання"</string>
@@ -207,7 +207,7 @@
     <string name="add_account" msgid="8201790677994503186">"Дадаць уліковы запіс"</string>
     <string name="add_new_account" msgid="5748627740680940264">"Дадаць новы ўліковы запіс"</string>
     <string name="menu_export_database" msgid="2659719297530170820">"Экспарт базы дадзеных файлаў"</string>
-    <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Стварыць новы кантакт"</string>
+    <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Новы кантакт"</string>
     <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Болей"</string>
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Паказаць менш"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Нядаўнія"</string>
@@ -258,7 +258,7 @@
     <string name="navigation_drawer_label" msgid="4154758025620107419">"Метка <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
     <string name="menu_title_groups" msgid="8356921831150278868">"Меткі"</string>
     <string name="menu_title_filters" msgid="8210922220185114527">"Уліковыя запісы"</string>
-    <string name="permission_explanation_header" msgid="5739405825039695327">"Паказваць усю гісторыю разам"</string>
+    <string name="permission_explanation_header" msgid="5739405825039695327">"Паказаць агульную гісторыю"</string>
     <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Падзеі і паведамленні"</string>
     <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Падзеі"</string>
     <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Паведамленні"</string>
@@ -390,9 +390,9 @@
     <string name="announce_collapsed_fields" msgid="6414231530177338704">"Згорнута"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Усе кантакты"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Пазначана"</string>
-    <string name="list_filter_customize" msgid="4789963356004169321">"Карыстальнiцкi"</string>
+    <string name="list_filter_customize" msgid="4789963356004169321">"Наладзіць"</string>
     <string name="list_filter_single" msgid="5871400283515893087">"Кантакт"</string>
-    <string name="display_ungrouped" msgid="6885954210243119591">"Усе кантакты з тэчкі \"Іншыя\""</string>
+    <string name="display_ungrouped" msgid="6885954210243119591">"Усе іншыя кантакты"</string>
     <string name="display_all_contacts" msgid="2031647544742889505">"Усе кантакты"</string>
     <string name="menu_sync_remove" msgid="3266725887008450161">"Выдаліць групу сінхранізацыі"</string>
     <string name="dialog_sync_add" msgid="8267045393119375803">"Дадаць групу сінхранізацыі"</string>
@@ -481,7 +481,7 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Няма кантактаў, якія можна абагуліць."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Паказаць кантакты"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Адлюстроўваць кантакты"</string>
-    <string name="custom_list_filter" msgid="9048525797111024204">"Наладзіць від"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Наладзіць прагляд"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Захаваць"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Шукаць у кантактах"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Выбранае"</string>
@@ -542,6 +542,5 @@
     <string name="importing_sim_failed_title" msgid="39706901030537985">"Не ўдалося імпартаваць"</string>
     <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не ўдалося імпартаваць кантакты з SIM-карты"</string>
     <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Імпартаванне SIM"</string>
-    <!-- no translation found for contacts_default_notification_channel (4754058700611188581) -->
-    <skip />
+    <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Апавяшчэнні"</string>
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index ea786b7..091b09e 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -27,7 +27,7 @@
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izaberi kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Odaberi"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Napravi novi kontakt"</string>
-    <string name="searchHint" msgid="8482945356247760701">"Traži kontakte"</string>
+    <string name="searchHint" msgid="8482945356247760701">"Pretraži kontakte"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Dodaj u favorite"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz favorita"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Uklonjeno iz favorita"</string>
@@ -186,7 +186,7 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Otkaži"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Odbaciti prilagođavanja?"</string>
-    <string name="enter_contact_name" msgid="4594274696120278368">"Traži kontakte"</string>
+    <string name="enter_contact_name" msgid="4594274696120278368">"Pretraži kontakte"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Ukloni kontakte"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Moj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
@@ -345,7 +345,7 @@
     <string name="sms" msgid="1756857139634224222">"Tekstualna poruka"</string>
     <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
     <string name="ghostData_company" msgid="5414421120553765775">"Kompanija"</string>
-    <string name="ghostData_title" msgid="7496735200318496110">"Naslov"</string>
+    <string name="ghostData_title" msgid="7496735200318496110">"Pozicija"</string>
     <string name="label_notes" msgid="8337354953278341042">"Bilješke"</string>
     <string name="label_custom_field" msgid="1994056912242214426">"Prilagođeno"</string>
     <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
@@ -477,7 +477,7 @@
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
     <string name="custom_list_filter" msgid="9048525797111024204">"Prilagodi prikaz"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Sačuvaj"</string>
-    <string name="hint_findContacts" msgid="7128627979899070325">"Traži kontakte"</string>
+    <string name="hint_findContacts" msgid="7128627979899070325">"Pretraži kontakte"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
     <string name="menu_import" msgid="6107961135813836467">"Uvezi"</string>
     <string name="menu_export" msgid="2658783911863503902">"Izvezi"</string>
@@ -535,6 +535,5 @@
     <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz nije uspio"</string>
     <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nije moguće uvesti kontakte sa SIM kartice"</string>
     <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvoz sa SIM kartice"</string>
-    <!-- no translation found for contacts_default_notification_channel (4754058700611188581) -->
-    <skip />
+    <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Obavještenja"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 9326229..4f4f7e1 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -159,7 +159,7 @@
     <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द करें"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"वापस जाएं"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करें"</string>
-    <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित संपर्क के संपादन पर जाएं? आपके द्वारा अभी तक दर्ज की गई जानकारी की कॉपी बनाई जाएगी."</string>
+    <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित संपर्क के संपादन पर जाएं? आपके द्वारा अभी तक दर्ज की गई जानकारी की प्रतिलिपि बनाई जाएगी."</string>
     <string name="contact_directory_description" msgid="683398073603909119">"निर्देशिका <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग"</string>
     <string name="menu_settings" msgid="377929915873428211">"सेटिंग"</string>
@@ -174,10 +174,10 @@
     <string name="create_group_item_label" msgid="3263064599743742865">"नया बनाएं…"</string>
     <string name="delete_group_dialog_message" msgid="335713829185261371">"लेबल \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" हटाएं? (संपर्क स्वयं नहीं हटाए जाएंगे.)"</string>
     <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"अन्‍य संपर्क से लिंक करने से पहले संपर्क नाम लिखें."</string>
-    <string name="copy_text" msgid="3257145021583508761">"क्‍लिपबोर्ड में कॉपी करें"</string>
+    <string name="copy_text" msgid="3257145021583508761">"क्‍लिपबोर्ड पर प्रतिलिपि बनाएं"</string>
     <string name="set_default" msgid="4417505153468300351">"सामान्य सेट करें"</string>
     <string name="clear_default" msgid="7193185801596678067">"सामान्य साफ़ करें"</string>
-    <string name="toast_text_copied" msgid="5143776250008541719">"लेख को कॉपी किया गया"</string>
+    <string name="toast_text_copied" msgid="5143776250008541719">"लेख की प्रतिलिपि बनाई गई"</string>
     <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"क्या परिवर्तनों को छोड़ना चाहते हैं?"</string>
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"अभी नहीं"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द करें"</string>
@@ -204,7 +204,7 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कम देखें"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"हाल ही का"</string>
     <string name="about_card_title" msgid="2920942314212825637">"संक्षिप्त विवरण"</string>
-    <string name="toast_making_personal_copy" msgid="288549957278065542">"एक व्‍यक्तिगत कॉपी बना रहा है…"</string>
+    <string name="toast_making_personal_copy" msgid="288549957278065542">"एक व्‍यक्तिगत प्रतिलिपि बना रहा है…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"कल"</string>
     <string name="today" msgid="8041090779381781781">"आज"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"आज <xliff:g id="TIME_INTERVAL">%s</xliff:g> बजे"</string>
@@ -239,7 +239,7 @@
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"संपर्क लिंक करें"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"अभी नहीं"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"यह संपर्क"</string>
-    <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभावित कॉपी"</string>
+    <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभावित प्रतिलिपि"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"हो सकता है कि ये संपर्क एक ही व्‍यक्‍ति हो. आप उन्हें एकल संपर्क के रूप में एक साथ लिंक कर सकते हैं."</string>
     <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> हटाएं"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> हटाएं"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index cfc8607..3dd2de8 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -229,7 +229,7 @@
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tak terjawab"</string>
     <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan telepon terbaru. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk menelepon balik"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Anda: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
-    <string name="editor_more_fields" msgid="3630987771304393421">"Kolom lainnya"</string>
+    <string name="editor_more_fields" msgid="3630987771304393421">"Bidang lainnya"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ubah foto kontak"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tambahkan foto kontak"</string>
     <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto kontak"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 2c31633..c97992a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -103,7 +103,7 @@
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> został dodany do ekranu głównego."</string>
     <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Brak zdjęć na urządzeniu."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Zdjęcie kontaktu"</string>
-    <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nazwa etykiety własnej"</string>
+    <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nazwa etykiety niestandardowej"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Usuń zdjęcie"</string>
     <string name="noContacts" msgid="2228592924476426108">"Twoja lista kontaktów jest pusta"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Brak kontaktów z tą etykietą"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index f60f241..55611fc 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -66,15 +66,15 @@
     <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Contactos <xliff:g id="NAME_0">%1$s</xliff:g> e <xliff:g id="NAME_1">%2$s</xliff:g> eliminados"</string>
     <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… foram eliminados"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
-      <item quantity="one">Contacto eliminado</item>
+      <item quantity="one">Contacts deleted</item>
       <item quantity="other">Contactos eliminados</item>
     </plurals>
     <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
+      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
       <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Da Google"</string>
@@ -137,7 +137,7 @@
     <string name="menu_add_contact" msgid="3198704337220892684">"Adicionar aos contactos"</string>
     <string name="menu_add_contacts" msgid="4465646512002163011">"Adicionar"</string>
     <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
-      <item quantity="one">Partilhar contacto através de</item>
+      <item quantity="one">Share contacts via</item>
       <item quantity="other">Partilhar contactos através de</item>
     </plurals>
     <string name="dialog_new_group_account" msgid="3451312333591556651">"Selecionar conta"</string>
@@ -264,7 +264,7 @@
     <string name="call_fax_work" msgid="7467763592359059243">"Ligar para fax do emprego"</string>
     <string name="call_fax_home" msgid="8342175628887571876">"Ligar para o fax da residência"</string>
     <string name="call_pager" msgid="9003902812293983281">"Ligar para pager"</string>
-    <string name="call_other" msgid="8563753966926932052">"Telefonar"</string>
+    <string name="call_other" msgid="8563753966926932052">"Ligar"</string>
     <string name="call_callback" msgid="1910165691349426858">"Ligar para rechamada"</string>
     <string name="call_car" msgid="3280537320306436445">"Ligar para automóvel"</string>
     <string name="call_company_main" msgid="6105120947138711257">"Ligar para telefone principal da empresa"</string>
@@ -396,11 +396,11 @@
     <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
     <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
     <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
-      <item quantity="one">1 contacto</item>
+      <item quantity="one">%1$d contacts</item>
       <item quantity="other">%1$d contactos</item>
     </plurals>
     <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
-      <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contacto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
       <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contactos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
     </plurals>
     <string name="import_from_vcf_file" msgid="8662528435646418203">"Ficheiro .vcf"</string>
@@ -509,7 +509,7 @@
     <string name="sim_import_empty_message" msgid="7743815244380189651">"Sem contactos no cartão SIM"</string>
     <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"O contacto já existe na sua lista"</string>
     <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
-      <item quantity="one">1 contacto do cartão SIM importado</item>
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> SIM contacts imported</item>
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos do cartão SIM importados</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ocorreu uma falha ao importar os contactos do cartão SIM"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 109b71f..de982b3 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -37,7 +37,7 @@
     <string name="menu_change_photo" msgid="7769177631511496210">"Schimbați fotografia"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Creați o comandă rapidă"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Disociați"</string>
-    <string name="menu_editGroup" msgid="6696843438454341063">"Ștergeți persoane de contact"</string>
+    <string name="menu_editGroup" msgid="6696843438454341063">"Eliminați intrările din Agendă"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Redenumiți eticheta"</string>
     <string name="menu_deleteGroup" msgid="1126469629233412249">"Ștergeți eticheta"</string>
     <string name="menu_addToGroup" msgid="3267409983764370041">"Adăugați o persoană"</string>
@@ -187,7 +187,7 @@
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anulați"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Renunțați la personalizări?"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Căutați în Agendă"</string>
-    <string name="title_edit_group" msgid="8602752287270586734">"Ștergeți persoane de contact"</string>
+    <string name="title_edit_group" msgid="8602752287270586734">"Eliminați intrările din Agendă"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Profilul meu local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Profilul meu <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adăugați un cont în care se va face backup pentru agenda dvs. în Google."</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index e394ea3..5c36249 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -500,11 +500,11 @@
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> з <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
     <string name="about_build_version" msgid="1765533099416999801">"Версія складання"</string>
-    <string name="about_open_source_licenses" msgid="6479990452352919641">"Ліцензії відкритого коду"</string>
+    <string name="about_open_source_licenses" msgid="6479990452352919641">"Ліцензії з відкритим кодом"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Деталі ліцензії на програмне забезпечення з відкритим кодом"</string>
     <string name="about_privacy_policy" msgid="3705518622499152626">"Політика конфіденційності"</string>
     <string name="about_terms_of_service" msgid="4642400812150296723">"Умови використання"</string>
-    <string name="activity_title_licenses" msgid="5467767062737708066">"Ліцензії відкритого коду"</string>
+    <string name="activity_title_licenses" msgid="5467767062737708066">"Ліцензії з відкритим кодом"</string>
     <string name="url_open_error_toast" msgid="452592089815420457">"Не вдалося відкрити посилання."</string>
     <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> вибрано"</string>
     <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> не вибрано"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 29477bb..201756d 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -257,14 +257,14 @@
     <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Tavsiyalar"</string>
     <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Kontaktlar bilan qulay ishlash uchun ularni tartibga soling"</string>
     <string name="undo" msgid="1425165101664071422">"Bekor qilish"</string>
-    <string name="call_custom" msgid="6385303130912713318">"Chaqiruv (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+    <string name="call_custom" msgid="6385303130912713318">"Qo‘ng‘iroq qilish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
     <string name="call_home" msgid="1990519474420545392">"Uy telefoni"</string>
     <string name="call_mobile" msgid="7502236805487609178">"Mobil telefon"</string>
     <string name="call_work" msgid="5328785911463744028">"Ishxona telefoni"</string>
     <string name="call_fax_work" msgid="7467763592359059243">"Ishxona faksi"</string>
     <string name="call_fax_home" msgid="8342175628887571876">"Uy faksi"</string>
     <string name="call_pager" msgid="9003902812293983281">"Peyjer"</string>
-    <string name="call_other" msgid="8563753966926932052">"Chaqiruv"</string>
+    <string name="call_other" msgid="8563753966926932052">"Qo‘ng‘iroq qilish"</string>
     <string name="call_callback" msgid="1910165691349426858">"Teskari chaqiruv"</string>
     <string name="call_car" msgid="3280537320306436445">"Avtomobildagi telefon"</string>
     <string name="call_company_main" msgid="6105120947138711257">"Ofis"</string>
@@ -276,9 +276,9 @@
     <string name="call_tty_tdd" msgid="8951266948204379604">"Teletayp"</string>
     <string name="call_work_mobile" msgid="8707874281430105394">"Ishxona mobil telefoni"</string>
     <string name="call_work_pager" msgid="3419348514157949008">"Ish peyjeri"</string>
-    <string name="call_assistant" msgid="670941612175068337">"Chaqiruv (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+    <string name="call_assistant" msgid="670941612175068337">"Qo‘ng‘iroq qilish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
     <string name="call_mms" msgid="6274041545876221437">"MMS markazi"</string>
-    <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Chaqiruv)"</string>
+    <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Qo‘ng‘iroq qilish)"</string>
     <string name="sms_custom" msgid="415060214233647603">"SMS yuborish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
     <string name="sms_home" msgid="7524332261493162995">"SMS: uy telefoni"</string>
     <string name="sms_mobile" msgid="5200107250451030769">"SMS: mobil"</string>
diff --git a/res/values-v26/dimens.xml b/res/values-v26/dimens.xml
new file mode 100644
index 0000000..b5737f2
--- /dev/null
+++ b/res/values-v26/dimens.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+    <!-- On Android O, shortcut icons will be 108dp unmasked.
+         See go/o-icons-eng for more details. -->
+    <dimen name="shortcut_icon_size">108dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 1aa84c6..e311ff3 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -16,6 +16,7 @@
 <resources>
     <!-- Adaptive icon background layer color -->
     <color name="ic_contacts_launcher_background">#2458CA</color>
+    <color name="ic_add_contact_shortcut_background">#F5F5F5</color>
 
     <!-- 87% black -->
     <color name="quantum_black_text">#dd000000</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e9fe2ad..c14d396 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -14,6 +14,8 @@
      limitations under the License.
 -->
 <resources>
+    <!-- Size of clickable icons that are GAR-4 -->
+    <dimen name="default_clickable_icon_size">48dp</dimen>
     <!-- Copied from java/com/google/android/assets/launchscreens/res/values-port-v21/dimens.xml -->
     <!-- Values adjusted for nav bar size due to windowDrawsSystemBarBackgrounds -->
     <dimen name="launchscreens_product_logo_bottom">64dp</dimen>
diff --git a/res/xml/shortcuts.xml b/res/xml/shortcuts.xml
index c33893a..7ce90e6 100644
--- a/res/xml/shortcuts.xml
+++ b/res/xml/shortcuts.xml
@@ -17,7 +17,7 @@
 <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
     <shortcut
         android:enabled="true"
-        android:icon="@drawable/ic_add_circle_24dp"
+        android:icon="@drawable/ic_add_contact_shortcut"
         android:shortcutId="shortcut-add-contact"
         android:shortcutShortLabel="@string/shortcut_add_contact">
         <intent
diff --git a/src/com/android/contacts/CallUtil.java b/src/com/android/contacts/CallUtil.java
index ddde01c..7172766 100644
--- a/src/com/android/contacts/CallUtil.java
+++ b/src/com/android/contacts/CallUtil.java
@@ -23,6 +23,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telecom.VideoProfile;
+import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
 import com.android.contacts.compat.CompatUtils;
@@ -80,7 +81,17 @@
      * automatically.
      */
     public static Intent getCallIntent(String number) {
-        return getCallIntent(getCallUri(number));
+        Uri uri = getCallUri(number);
+        return PhoneNumberUtils.isEmergencyNumber(number)
+                ? getCallIntentForEmergencyNumber(uri) : getCallIntent(uri);
+    }
+
+    /**
+     * Return an Intent to directly start Dialer when calling an emergency number. Scheme is always
+     * PhoneAccount.SCHEME_TEL.
+     */
+    private static Intent getCallIntentForEmergencyNumber(Uri uri) {
+        return new Intent(Intent.ACTION_DIAL, uri);
     }
 
     /**
diff --git a/src/com/android/contacts/DynamicShortcuts.java b/src/com/android/contacts/DynamicShortcuts.java
index e287e4a..fc0d05a 100644
--- a/src/com/android/contacts/DynamicShortcuts.java
+++ b/src/com/android/contacts/DynamicShortcuts.java
@@ -16,6 +16,7 @@
 package com.android.contacts;
 
 import android.annotation.TargetApi;
+import android.app.ActivityManager;
 import android.app.job.JobInfo;
 import android.app.job.JobParameters;
 import android.app.job.JobScheduler;
@@ -51,6 +52,7 @@
 
 import com.android.contacts.activities.RequestPermissionsActivity;
 import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.lettertiles.LetterTileDrawable;
 import com.android.contacts.util.BitmapUtil;
 import com.android.contacts.util.ImplicitIntentsUtil;
 import com.android.contacts.util.PermissionsUtil;
@@ -95,21 +97,18 @@
     private static final int SHORTCUT_TYPE_CONTACT_URI = 1;
     private static final int SHORTCUT_TYPE_ACTION_URI = 2;
 
-    // The spec specifies that it should be 44dp @ xxxhdpi
-    // Note that ShortcutManager.getIconMaxWidth and ShortcutManager.getMaxHeight return different
-    // (larger) values.
-    private static final int RECOMMENDED_ICON_PIXEL_LENGTH = 176;
-
     @VisibleForTesting
     static final String[] PROJECTION = new String[] {
             Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME_PRIMARY
     };
 
     private final Context mContext;
+
     private final ContentResolver mContentResolver;
     private final ShortcutManager mShortcutManager;
     private int mShortLabelMaxLength = SHORT_LABEL_MAX_LENGTH;
     private int mLongLabelMaxLength = LONG_LABEL_MAX_LENGTH;
+    private int mIconSize;
     private final int mContentChangeMinUpdateDelay;
     private final int mContentChangeMaxUpdateDelay;
     private final JobScheduler mJobScheduler;
@@ -131,6 +130,12 @@
                 .getInteger(Experiments.DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS);
         mContentChangeMaxUpdateDelay = Flags.getInstance()
                 .getInteger(Experiments.DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS);
+        final ActivityManager am = (ActivityManager) context
+                .getSystemService(Context.ACTIVITY_SERVICE);
+        mIconSize = context.getResources().getDimensionPixelSize(R.dimen.shortcut_icon_size);
+        if (mIconSize == 0) {
+            mIconSize = am.getLauncherLargeIconSize();
+        }
     }
 
     @VisibleForTesting
@@ -373,10 +378,8 @@
         final int iconMaxHeight = mShortcutManager.getIconMaxHeight();
 
         final int sampleSize = Math.min(
-                BitmapUtil.findOptimalSampleSize(sourceWidth,
-                        RECOMMENDED_ICON_PIXEL_LENGTH),
-                BitmapUtil.findOptimalSampleSize(sourceHeight,
-                        RECOMMENDED_ICON_PIXEL_LENGTH));
+                BitmapUtil.findOptimalSampleSize(sourceWidth, mIconSize),
+                BitmapUtil.findOptimalSampleSize(sourceHeight, mIconSize));
         final BitmapFactory.Options opts = new BitmapFactory.Options();
         opts.inSampleSize = sampleSize;
 
@@ -404,46 +407,26 @@
             return BitmapUtil.getRoundedBitmap(bitmap, targetSize, targetSize);
         }
 
-        // If on O or higher, add padding around the bitmap.
-        final int paddingW = (int) (bitmap.getWidth() *
-                AdaptiveIconDrawable.getExtraInsetFraction());
-        final int paddingH = (int) (bitmap.getHeight() *
-                AdaptiveIconDrawable.getExtraInsetFraction());
-
-        final Bitmap scaledBitmap = Bitmap.createBitmap(bitmap.getWidth() + paddingW,
-                bitmap.getHeight() + paddingH, bitmap.getConfig());
-
-        final Canvas scaledCanvas = new Canvas(scaledBitmap);
-        scaledCanvas.drawBitmap(bitmap, paddingW / 2, paddingH / 2, null);
-
-        return scaledBitmap;
+        return bitmap;
     }
 
     private Bitmap getFallbackAvatar(String displayName, String lookupKey) {
-        final int width;
-        final int height;
-        final int padding;
-        if (BuildCompat.isAtLeastO()) {
-            // Add padding on >= O
-            padding = (int) (RECOMMENDED_ICON_PIXEL_LENGTH *
-                    AdaptiveIconDrawable.getExtraInsetFraction());
-            width = RECOMMENDED_ICON_PIXEL_LENGTH + padding;
-            height = RECOMMENDED_ICON_PIXEL_LENGTH + padding;
-        } else {
-            padding = 0;
-            width = RECOMMENDED_ICON_PIXEL_LENGTH;
-            height = RECOMMENDED_ICON_PIXEL_LENGTH;
-        }
+        // Use a circular icon if we're not on O or higher.
+        final boolean circularIcon = !BuildCompat.isAtLeastO();
 
         final ContactPhotoManager.DefaultImageRequest request =
-                new ContactPhotoManager.DefaultImageRequest(displayName, lookupKey, true);
+                new ContactPhotoManager.DefaultImageRequest(displayName, lookupKey, circularIcon);
+        if (BuildCompat.isAtLeastO()) {
+            // On O, scale the image down to add the padding needed by AdaptiveIcons.
+            request.scale = LetterTileDrawable.getAdaptiveIconScale();
+        }
         final Drawable avatar = ContactPhotoManager.getDefaultAvatarDrawableForContact(
                 mContext.getResources(), true, request);
-        final Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+        final Bitmap result = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
         // The avatar won't draw unless it thinks it is visible
         avatar.setVisible(true, true);
         final Canvas canvas = new Canvas(result);
-        avatar.setBounds(padding, padding, width - padding, height - padding);
+        avatar.setBounds(0, 0, mIconSize, mIconSize);
         avatar.draw(canvas);
         return result;
     }
diff --git a/src/com/android/contacts/Experiments.java b/src/com/android/contacts/Experiments.java
index b53ced3..b66311d 100644
--- a/src/com/android/contacts/Experiments.java
+++ b/src/com/android/contacts/Experiments.java
@@ -39,6 +39,12 @@
             "Shortcuts__dynamic_min_content_change_update_delay_millis";
 
     /**
+     * Flags for enabling video call from quick contact.
+     */
+    public static final String QUICK_CONTACT_VIDEO_CALL =
+            "QuickContact__video_call_integration";
+
+    /**
      * Flags for maximum time to show spinner for a contacts sync.
      */
     public static final String PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS =
diff --git a/src/com/android/contacts/ShortcutIntentBuilder.java b/src/com/android/contacts/ShortcutIntentBuilder.java
index 3a0b36b..e90e786 100644
--- a/src/com/android/contacts/ShortcutIntentBuilder.java
+++ b/src/com/android/contacts/ShortcutIntentBuilder.java
@@ -40,6 +40,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Photo;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
+import android.support.v4.graphics.drawable.IconCompat;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
 import android.support.v4.os.BuildCompat;
@@ -49,6 +50,7 @@
 import android.text.TextUtils.TruncateAt;
 
 import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.lettertiles.LetterTileDrawable;
 import com.android.contacts.util.BitmapUtil;
 import com.android.contacts.util.ImplicitIntentsUtil;
 
@@ -260,8 +262,14 @@
             Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length, null);
             return new BitmapDrawable(mContext.getResources(), bitmap);
         } else {
+            final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey,
+                    false);
+            if (BuildCompat.isAtLeastO()) {
+                // On O, scale the image down to add the padding needed by AdaptiveIcons.
+                request.scale = LetterTileDrawable.getAdaptiveIconScale();
+            }
             return ContactPhotoManager.getDefaultAvatarDrawableForContact(mContext.getResources(),
-                    false, new DefaultImageRequest(displayName, lookupKey, false));
+                    false, request);
         }
     }
 
@@ -285,11 +293,15 @@
         final Intent shortcutIntent = ImplicitIntentsUtil.getIntentForQuickContactLauncherShortcut(
                 mContext, contactUri);
 
-        final Bitmap icon = generateQuickContactIcon(drawable);
-
-
         intent = intent == null ? new Intent() : intent;
-        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+
+        final Bitmap icon = generateQuickContactIcon(drawable);
+        if (BuildCompat.isAtLeastO()) {
+            final IconCompat compatIcon = IconCompat.createWithAdaptiveBitmap(icon);
+            compatIcon.addToShortcutIntent(intent);
+        } else {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+        }
         intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
         intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, displayName);
 
@@ -325,18 +337,25 @@
         shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
         Intent intent = null;
+        IconCompat compatAdaptiveIcon = null;
         if (BuildCompat.isAtLeastO()) {
+            compatAdaptiveIcon = IconCompat.createWithAdaptiveBitmap(icon);
             final ShortcutManager sm = (ShortcutManager)
                     mContext.getSystemService(Context.SHORTCUT_SERVICE);
             final String id = shortcutAction + lookupKey;
             final DynamicShortcuts dynamicShortcuts = new DynamicShortcuts(mContext);
             final ShortcutInfo shortcutInfo = dynamicShortcuts.getActionShortcutInfo(
-                    id, displayName, shortcutIntent, Icon.createWithAdaptiveBitmap(icon));
+                    id, displayName, shortcutIntent, compatAdaptiveIcon.toIcon());
             intent = sm.createShortcutResultIntent(shortcutInfo);
         }
 
         intent = intent == null ? new Intent() : intent;
-        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+        // This will be non-null in O and above.
+        if (compatAdaptiveIcon != null) {
+            compatAdaptiveIcon.addToShortcutIntent(intent);
+        } else {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+        }
         intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
         intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
 
@@ -344,7 +363,6 @@
     }
 
     private Bitmap generateQuickContactIcon(Drawable photo) {
-
         // Setup the drawing classes
         Bitmap bitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
         Canvas canvas = new Canvas(bitmap);
@@ -354,6 +372,11 @@
         photo.setBounds(dst);
         photo.draw(canvas);
 
+        // Don't put a rounded border on an icon for O
+        if (BuildCompat.isAtLeastO()) {
+            return bitmap;
+        }
+
         // Draw the icon with a rounded border
         RoundedBitmapDrawable roundedDrawable =
                 RoundedBitmapDrawableFactory.create(mResources, bitmap);
@@ -421,22 +444,24 @@
 
         // Draw the phone action icon as an overlay
         int iconWidth = icon.getWidth();
-        dst.set(iconWidth - ((int) (20 * density)), -1,
-                iconWidth, ((int) (19 * density)));
-        canvas.drawBitmap(phoneIcon, null, dst, photoPaint);
-
-        canvas.setBitmap(null);
-        if (!BuildCompat.isAtLeastO()) {
-            return icon;
+        if (BuildCompat.isAtLeastO()) {
+            // On O we need to calculate where the phone icon goes slightly differently. The whole
+            // canvas area is 108dp, a centered circle with a diameter of 66dp is the "safe zone".
+            // So we start the drawing the phone icon at
+            // 108dp - 21 dp (distance from right edge of safe zone to the edge of the canvas)
+            // - 24 dp (size of the phone icon) on the x axis (left)
+            // The y axis is simply 21dp for the distance to the safe zone (top).
+            // See go/o-icons-eng for more details and a handy picture.
+            final int left = (int) (mIconSize - (45 * density));
+            final int top = (int) (21 * density);
+            canvas.drawBitmap(phoneIcon, left, top, photoPaint);
+        } else {
+            dst.set(iconWidth - ((int) (20 * density)), -1,
+                    iconWidth, ((int) (19 * density)));
+            canvas.drawBitmap(phoneIcon, null, dst, photoPaint);
         }
 
-        // On >= O scale image up by AdaptiveIconDrawable.DEFAULT_VIEW_PORT_SCALE.
-        final int scale = (int) (icon.getHeight() *
-                (1f / (1 + 2 * AdaptiveIconDrawable.getExtraInsetFraction())));
-        final Bitmap scaledBitmap = Bitmap.createBitmap(icon.getWidth() + scale,
-                icon.getHeight() + scale, icon.getConfig());
-        Canvas scaledCanvas = new Canvas(scaledBitmap);
-        scaledCanvas.drawBitmap(icon, scale / 2, scale / 2, null);
-        return scaledBitmap;
+        canvas.setBitmap(null);
+        return icon;
     }
 }
diff --git a/src/com/android/contacts/datepicker/DatePickerDialog.java b/src/com/android/contacts/datepicker/DatePickerDialog.java
index 82eed24..de04af9 100644
--- a/src/com/android/contacts/datepicker/DatePickerDialog.java
+++ b/src/com/android/contacts/datepicker/DatePickerDialog.java
@@ -78,21 +78,6 @@
     /**
      * @param context The context the dialog is to run in.
      * @param callBack How the parent is notified that the date is set.
-     * @param year The initial year of the dialog
-     * @param monthOfYear The initial month of the dialog.
-     * @param dayOfMonth The initial day of the dialog.
-     */
-    public DatePickerDialog(Context context,
-            OnDateSetListener callBack,
-            int year,
-            int monthOfYear,
-            int dayOfMonth) {
-        this(context, callBack, year, monthOfYear, dayOfMonth, false);
-    }
-
-    /**
-     * @param context The context the dialog is to run in.
-     * @param callBack How the parent is notified that the date is set.
      * @param year The initial year of the dialog or {@link DatePickerDialog#NO_YEAR} if no year
      *  has been specified
      * @param monthOfYear The initial month of the dialog.
@@ -106,7 +91,7 @@
             int dayOfMonth,
             boolean yearOptional) {
         // Don't pass a theme id. Instead use the default alert dialog theme.
-        this(context, /* themeId = */ -1, callBack, year, monthOfYear, dayOfMonth,
+        this(context, /* themeId = */ 0, callBack, year, monthOfYear, dayOfMonth,
                 yearOptional);
     }
 
@@ -114,24 +99,6 @@
      * @param context The context the dialog is to run in.
      * @param theme the theme to apply to this dialog
      * @param callBack How the parent is notified that the date is set.
-     * @param year The initial year of the dialog or {@link DatePickerDialog#NO_YEAR} if no year
-     *  has been specified
-     * @param monthOfYear The initial month of the dialog.
-     * @param dayOfMonth The initial day of the dialog.
-     */
-    public DatePickerDialog(Context context,
-            int theme,
-            OnDateSetListener callBack,
-            int year,
-            int monthOfYear,
-            int dayOfMonth) {
-        this(context, theme, callBack, year, monthOfYear, dayOfMonth, false);
-    }
-
-    /**
-     * @param context The context the dialog is to run in.
-     * @param theme the theme to apply to this dialog
-     * @param callBack How the parent is notified that the date is set.
      * @param year The initial year of the dialog or {@link DatePickerDialog#NO_YEAR} if no
      *  year has been specified.
      * @param monthOfYear The initial month of the dialog.
@@ -183,13 +150,6 @@
         updateTitle(year, month, day);
     }
 
-    public void updateDate(int year, int monthOfYear, int dayOfMonth) {
-        mInitialYear = year;
-        mInitialMonth = monthOfYear;
-        mInitialDay = dayOfMonth;
-        mDatePicker.updateDate(year, monthOfYear, dayOfMonth);
-    }
-
     private void updateTitle(int year, int month, int day) {
         final Calendar calendar = Calendar.getInstance();
         calendar.set(Calendar.YEAR, year);
diff --git a/src/com/android/contacts/lettertiles/LetterTileDrawable.java b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
index 5652ac6..b80fd4f 100644
--- a/src/com/android/contacts/lettertiles/LetterTileDrawable.java
+++ b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
@@ -26,6 +26,7 @@
 import android.graphics.Paint.Align;
 import android.graphics.Rect;
 import android.graphics.Typeface;
+import android.graphics.drawable.AdaptiveIconDrawable;
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 
@@ -284,4 +285,11 @@
         mIsCircle = isCircle;
         return this;
     }
+
+    /**
+     * Returns the scale percentage as a float for LetterTileDrawables used in AdaptiveIcons.
+     */
+    public static float getAdaptiveIconScale() {
+        return 1 / (1 + (2 * AdaptiveIconDrawable.getExtraInsetFraction()));
+    }
 }
diff --git a/src/com/android/contacts/model/dataitem/PhoneDataItem.java b/src/com/android/contacts/model/dataitem/PhoneDataItem.java
index 8d6cf8e..6355157 100644
--- a/src/com/android/contacts/model/dataitem/PhoneDataItem.java
+++ b/src/com/android/contacts/model/dataitem/PhoneDataItem.java
@@ -31,6 +31,11 @@
 
     public static final String KEY_FORMATTED_PHONE_NUMBER = "formattedPhoneNumber";
 
+    private boolean mTachyonReachable;
+    // Stores the custom reachable data item to provide extra data to the Entry created from this
+    // PhoneDataItem.
+    private DataItem mReachableDataItem;
+
     /* package */ PhoneDataItem(ContentValues values) {
         super(values);
     }
@@ -54,6 +59,22 @@
         return getContentValues().getAsString(Phone.LABEL);
     }
 
+    public void setTachyonReachable(boolean tachyonReachable) {
+        mTachyonReachable = tachyonReachable;
+    }
+
+    public boolean isTachyonReachable() {
+        return mTachyonReachable;
+    }
+
+    public DataItem getReachableDataItem() {
+        return mReachableDataItem;
+    }
+
+    public void setReachableDataItem(DataItem reachableDataItem) {
+        mReachableDataItem = reachableDataItem;
+    }
+
     public void computeFormattedPhoneNumber(String defaultCountryIso) {
         final String phoneNumber = getNumber();
         if (phoneNumber != null) {
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index 49da4c8..b0f7800 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -117,6 +117,7 @@
         private final int mIconResourceId;
         private final int mThirdAction;
         private final Bundle mThirdExtras;
+        private final boolean mShouldApplyThirdIconColor;
 
         public Entry(int id, Drawable mainIcon, String header, String subHeader,
                 Drawable subHeaderIcon, String text, Drawable textIcon,
@@ -125,7 +126,7 @@
                 Spannable alternateContentDescription, boolean shouldApplyColor, boolean isEditable,
                 EntryContextMenuInfo entryContextMenuInfo, Drawable thirdIcon, Intent thirdIntent,
                 String thirdContentDescription, int thirdAction, Bundle thirdExtras,
-                int iconResourceId) {
+                boolean shouldApplyThirdIconColor, int iconResourceId) {
             mId = id;
             mIcon = mainIcon;
             mHeader = header;
@@ -146,6 +147,7 @@
             mThirdContentDescription = thirdContentDescription;
             mThirdAction = thirdAction;
             mThirdExtras = thirdExtras;
+            mShouldApplyThirdIconColor = shouldApplyThirdIconColor;
             mIconResourceId = iconResourceId;
         }
 
@@ -232,6 +234,10 @@
         public Bundle getThirdExtras() {
             return mThirdExtras;
         }
+
+        boolean shouldApplyThirdIconColor() {
+            return mShouldApplyThirdIconColor;
+        }
     }
 
     public interface ExpandingEntryCardViewListener {
@@ -607,7 +613,7 @@
                             alternateIcon.setColorFilter(mThemeColorFilter);
                         }
                         Drawable thirdIcon = entry.getThirdIcon();
-                        if (thirdIcon != null) {
+                        if (thirdIcon != null && entry.shouldApplyThirdIconColor()) {
                             thirdIcon.mutate();
                             thirdIcon.setColorFilter(mThemeColorFilter);
                         }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index bd419b5..535fe69 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -105,8 +105,11 @@
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.ContactsUtils;
 import com.android.contacts.DynamicShortcuts;
+import com.android.contacts.Experiments;
 import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
+import com.android.contacts.ShortcutIntentBuilder;
+import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
 import com.android.contacts.activities.ContactEditorActivity;
 import com.android.contacts.activities.ContactSelectionActivity;
 import com.android.contacts.activities.RequestDesiredPermissionsActivity;
@@ -126,8 +129,6 @@
 import com.android.contacts.interactions.SmsInteractionsLoader;
 import com.android.contacts.interactions.TouchPointManager;
 import com.android.contacts.lettertiles.LetterTileDrawable;
-import com.android.contacts.ShortcutIntentBuilder;
-import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
 import com.android.contacts.list.UiIntentActions;
 import com.android.contacts.logging.Logger;
 import com.android.contacts.logging.QuickContactEvent.ActionType;
@@ -175,6 +176,7 @@
 import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
 import com.android.contacts.widget.QuickContactImageView;
 import com.android.contactsbind.HelpUtils;
+import com.android.contactsbind.experiments.Flags;
 
 import com.google.common.collect.Lists;
 
@@ -246,6 +248,10 @@
     @SuppressWarnings("deprecation")
     private static final String LEGACY_AUTHORITY = android.provider.Contacts.AUTHORITY;
 
+    public static final String MIMETYPE_TACHYON =
+            "vnd.android.cursor.item/com.google.android.apps.tachyon.phone";
+    private static final String TACHYON_CALL_ACTION =
+            "com.google.android.apps.tachyon.action.CALL";
     private static final String MIMETYPE_GPLUS_PROFILE =
             "vnd.android.cursor.item/vnd.googleplus.profile";
     private static final String GPLUS_PROFILE_DATA_5_VIEW_PROFILE = "view";
@@ -430,8 +436,6 @@
                 }
             }
 
-            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
             mHasIntentLaunched = true;
             try {
                 final int actionType = intent.getIntExtra(EXTRA_ACTION_TYPE,
@@ -439,7 +443,15 @@
                 final String thirdPartyAction = intent.getStringExtra(EXTRA_THIRD_PARTY_ACTION);
                 Logger.logQuickContactEvent(mReferrer, mContactType,
                         CardType.UNKNOWN_CARD, actionType, thirdPartyAction);
-                ImplicitIntentsUtil.startActivityInAppIfPossible(QuickContactActivity.this, intent);
+                // For the tachyon call action, we need to use startActivityForResult and not
+                // add FLAG_ACTIVITY_NEW_TASK to the intent.
+                if (TACHYON_CALL_ACTION.equals(intent.getAction())) {
+                    QuickContactActivity.this.startActivityForResult(intent, /* requestCode */ 0);
+                } else {
+                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    ImplicitIntentsUtil.startActivityInAppIfPossible(QuickContactActivity.this,
+                            intent);
+                }
             } catch (SecurityException ex) {
                 Toast.makeText(QuickContactActivity.this, R.string.missing_app,
                         Toast.LENGTH_SHORT).show();
@@ -1328,6 +1340,7 @@
                     /* thirdContentDescription = */ null,
                     /* thirdAction = */ Entry.ACTION_NONE,
                     /* thirdExtras = */ null,
+                    /* shouldApplyThirdIconColor = */ true,
                     /* iconResourceId = */  0);
             List<Entry> phoneticList = new ArrayList<>();
             phoneticList.add(phoneticEntry);
@@ -1390,6 +1403,7 @@
                 /* thirdContentDescription = */ null,
                 /* thirdAction = */ Entry.ACTION_NONE,
                 /* thirdExtras = */ null,
+                /* shouldApplyThirdIconColor = */ true,
                 R.drawable.quantum_ic_phone_vd_theme_24);
 
         final List<List<Entry>> promptEntries = new ArrayList<>();
@@ -1409,6 +1423,7 @@
                     /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
                     /* thirdIntent = */ null, /* thirdContentDescription = */ null,
                     /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
+                    /* shouldApplyThirdIconColor = */ true,
                     R.drawable.quantum_ic_email_vd_theme_24);
 
             promptEntries.add(new ArrayList<Entry>(1));
@@ -1443,7 +1458,6 @@
 
         final Map<String, List<DataItem>> dataItemsMap = new HashMap<>();
 
-        final ResolveCache cache = ResolveCache.getInstance(this);
         for (RawContact rawContact : data.getRawContacts()) {
             for (DataItem dataItem : rawContact.getDataItems()) {
                 dataItem.setRawContactId(rawContact.getId());
@@ -1451,17 +1465,19 @@
                 final String mimeType = dataItem.getMimeType();
                 if (mimeType == null) continue;
 
-                final AccountType accountType = rawContact.getAccountType(this);
-                final DataKind dataKind = AccountTypeManager.getInstance(this)
-                        .getKindOrFallback(accountType, mimeType);
-                if (dataKind == null) continue;
+                if (!MIMETYPE_TACHYON.equals(mimeType)) {
+                    final AccountType accountType = rawContact.getAccountType(this);
+                    final DataKind dataKind = AccountTypeManager.getInstance(this)
+                            .getKindOrFallback(accountType, mimeType);
+                    if (dataKind == null) continue;
 
-                dataItem.setDataKind(dataKind);
+                    dataItem.setDataKind(dataKind);
 
-                final boolean hasData = !TextUtils.isEmpty(dataItem.buildDataString(this,
-                        dataKind));
+                    final boolean hasData = !TextUtils.isEmpty(dataItem.buildDataString(this,
+                            dataKind));
 
-                if (isMimeExcluded(mimeType) || !hasData) continue;
+                    if (isMimeExcluded(mimeType) || !hasData) continue;
+                }
 
                 List<DataItem> dataItemListByType = dataItemsMap.get(mimeType);
                 if (dataItemListByType == null) {
@@ -1472,6 +1488,7 @@
             }
         }
         Trace.endSection();
+        bindReachability(dataItemsMap);
 
         Trace.beginSection("sort within mimetypes");
         /*
@@ -1529,6 +1546,28 @@
     }
 
     /**
+     * Bind the custom data items to each {@link PhoneDataItem} that is Tachyon reachable, the data
+     * will be needed when creating the {@link Entry} for the {@link PhoneDataItem}.
+     */
+    private void bindReachability(Map<String, List<DataItem>> dataItemsMap) {
+        final List<DataItem> phoneItems = dataItemsMap.get(Phone.CONTENT_ITEM_TYPE);
+        final List<DataItem> tachyonItems = dataItemsMap.get(MIMETYPE_TACHYON);
+        if (phoneItems != null && tachyonItems != null) {
+            for (DataItem phone : phoneItems) {
+                if (phone instanceof PhoneDataItem && ((PhoneDataItem) phone).getNumber() != null) {
+                    for (DataItem tachyonItem : tachyonItems) {
+                        if (((PhoneDataItem) phone).getNumber().equals(
+                                tachyonItem.getContentValues().getAsString(Data.DATA1))) {
+                            ((PhoneDataItem) phone).setTachyonReachable(true);
+                            ((PhoneDataItem) phone).setReachableDataItem(tachyonItem);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
      * Class used to hold the About card and Contact cards' data model that gets generated
      * on a background thread. All data is from CP2.
      */
@@ -1575,6 +1614,7 @@
         Spannable smsContentDescription = null;
         Intent intent = null;
         boolean shouldApplyColor = true;
+        boolean shouldApplyThirdIconColor = true;
         Drawable alternateIcon = null;
         Intent alternateIntent = null;
         StringBuilder alternateContentDescription = new StringBuilder();
@@ -1747,6 +1787,9 @@
                 boolean isPresenceEnabled =
                         (videoCapability & CallUtil.VIDEO_CALLING_PRESENCE) != 0;
                 boolean isVideoEnabled = (videoCapability & CallUtil.VIDEO_CALLING_ENABLED) != 0;
+                // Check to ensure carrier presence indicates the number supports video calling.
+                int carrierPresence = dataItem.getCarrierPresence();
+                boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
 
                 if (CallUtil.isCallWithSubjectSupported(context)) {
                     thirdIcon = res.getDrawable(R.drawable.quantum_ic_perm_phone_msg_vd_theme_24);
@@ -1770,20 +1813,23 @@
                             phone.getFormattedPhoneNumber());
                     thirdExtras.putString(CallSubjectDialog.ARG_NUMBER_LABEL,
                             phoneLabel);
-                } else if (isVideoEnabled) {
-                    // Check to ensure carrier presence indicates the number supports video calling.
-                    int carrierPresence = dataItem.getCarrierPresence();
-                    boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
-
-                    if ((isPresenceEnabled && isPresent) || !isPresenceEnabled) {
-                        thirdIcon = res.getDrawable(R.drawable.quantum_ic_videocam_vd_theme_24);
-                        thirdAction = Entry.ACTION_INTENT;
-                        thirdIntent = CallUtil.getVideoCallIntent(phone.getNumber(),
-                                CALL_ORIGIN_QUICK_CONTACTS_ACTIVITY);
-                        thirdIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.VIDEOCALL);
-                        thirdContentDescription =
-                                res.getString(R.string.description_video_call);
-                    }
+                } else if (isVideoEnabled && (!isPresenceEnabled || isPresent)) {
+                    thirdIcon = res.getDrawable(R.drawable.quantum_ic_videocam_vd_theme_24);
+                    thirdAction = Entry.ACTION_INTENT;
+                    thirdIntent = CallUtil.getVideoCallIntent(phone.getNumber(),
+                            CALL_ORIGIN_QUICK_CONTACTS_ACTIVITY);
+                    thirdIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.VIDEOCALL);
+                    thirdContentDescription =
+                            res.getString(R.string.description_video_call);
+                } else if (Flags.getInstance().getBoolean(Experiments.QUICK_CONTACT_VIDEO_CALL)
+                        && ((PhoneDataItem) dataItem).isTachyonReachable()) {
+                    thirdIcon = res.getDrawable(R.drawable.quantum_ic_videocam_vd_theme_24);
+                    thirdAction = Entry.ACTION_INTENT;
+                    thirdIntent = new Intent(TACHYON_CALL_ACTION);
+                    thirdIntent.setData(
+                            Uri.fromParts(PhoneAccount.SCHEME_TEL, phone.getNumber(), null));
+                    thirdContentDescription = ((PhoneDataItem) dataItem).getReachableDataItem()
+                            .getContentValues().getAsString(Data.DATA2);
                 }
             }
         } else if (dataItem instanceof EmailDataItem) {
@@ -1870,6 +1916,10 @@
                     aboutCardName.value = res.getString(R.string.about_card_title);
                 }
             }
+        } else if (Flags.getInstance().getBoolean(Experiments.QUICK_CONTACT_VIDEO_CALL)
+                && MIMETYPE_TACHYON.equals(dataItem.getMimeType())) {
+            // Skip these actions. They will be placed by the phone number.
+            return null;
         } else {
             // Custom DataItem
             header = dataItem.buildDataStringForDisplay(context, kind);
@@ -1882,7 +1932,6 @@
 
             if (intent != null) {
                 final String mimetype = intent.getType();
-
                 // Build advanced entry for known 3p types. Otherwise default to ResolveCache icon.
                 if (MIMETYPE_HANGOUTS.equals(mimetype)) {
                     // If a secondDataItem is available, use it to build an entry with
@@ -1964,7 +2013,7 @@
                         : smsContentDescription,
                 shouldApplyColor, isEditable,
                 entryContextMenuInfo, thirdIcon, thirdIntent, thirdContentDescription, thirdAction,
-                thirdExtras, iconResourceId);
+                thirdExtras, shouldApplyThirdIconColor, iconResourceId);
     }
 
     private List<Entry> dataItemsToEntries(List<DataItem> dataItems,
@@ -2265,6 +2314,7 @@
                     /* thirdContentDescription = */ null,
                     /* thirdAction = */ Entry.ACTION_NONE,
                     /* thirdActionExtras = */ null,
+                    /* shouldApplyThirdIconColor = */ true,
                     interaction.getIconResourceId()));
         }
         return entries;
@@ -2497,7 +2547,9 @@
                         /* isEditable = */ false, /* EntryContextMenuInfo = */ null,
                         /* thirdIcon = */ null, /* thirdIntent = */ null,
                         /* thirdContentDescription = */ null, /* thirdAction = */ Entry.ACTION_NONE,
-                        /* thirdExtras = */ null, R.drawable.quantum_ic_history_vd_theme_24);
+                        /* thirdExtras = */ null,
+                        /* shouldApplyThirdIconColor = */ true,
+                        R.drawable.quantum_ic_history_vd_theme_24);
 
                 final List<List<Entry>> permissionExplanationEntries = new ArrayList<>();
                 permissionExplanationEntries.add(new ArrayList<Entry>());