Merge "Call super.bindView() in list subclasses" into lmp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1abfd22..54fce69 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -275,7 +275,7 @@
         <activity-alias android:name="ContactShortcut"
             android:targetActivity=".activities.ContactSelectionActivity"
             android:label="@string/shortcutContact"
-            android:icon="@mipmap/ic_launcher_shortcut_contact">
+            android:icon="@drawable/logo_quick_contacts_color_44in48dp">
 
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_SHORTCUT" />
@@ -287,7 +287,7 @@
         <activity-alias android:name="alias.DialShortcut"
             android:targetActivity=".activities.ContactSelectionActivity"
             android:label="@string/shortcutDialContact"
-            android:icon="@mipmap/ic_launcher_shortcut_directdial"
+            android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp"
             android:enabled="@*android:bool/config_voice_capable">
 
             <intent-filter>
@@ -301,7 +301,7 @@
         <activity-alias android:name="alias.MessageShortcut"
             android:targetActivity=".activities.ContactSelectionActivity"
             android:label="@string/shortcutMessageContact"
-            android:icon="@mipmap/ic_launcher_shortcut_directmessage"
+            android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp"
             android:enabled="@*android:bool/config_voice_capable">
 
             <intent-filter>
diff --git a/res/drawable-hdpi/logo_quick_contacts_color_44in48dp.png b/res/drawable-hdpi/logo_quick_contacts_color_44in48dp.png
new file mode 100644
index 0000000..a52fe5a
--- /dev/null
+++ b/res/drawable-hdpi/logo_quick_contacts_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-hdpi/logo_quick_contacts_dialer_color_44in48dp.png b/res/drawable-hdpi/logo_quick_contacts_dialer_color_44in48dp.png
new file mode 100644
index 0000000..a3591ec
--- /dev/null
+++ b/res/drawable-hdpi/logo_quick_contacts_dialer_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-hdpi/logo_quick_contacts_mail_color_44in48dp.png b/res/drawable-hdpi/logo_quick_contacts_mail_color_44in48dp.png
new file mode 100644
index 0000000..5a77a44
--- /dev/null
+++ b/res/drawable-hdpi/logo_quick_contacts_mail_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-mdpi/logo_quick_contacts_color_44in48dp.png b/res/drawable-mdpi/logo_quick_contacts_color_44in48dp.png
new file mode 100644
index 0000000..7c7f2de
--- /dev/null
+++ b/res/drawable-mdpi/logo_quick_contacts_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-mdpi/logo_quick_contacts_dialer_color_44in48dp.png b/res/drawable-mdpi/logo_quick_contacts_dialer_color_44in48dp.png
new file mode 100644
index 0000000..846c5cf
--- /dev/null
+++ b/res/drawable-mdpi/logo_quick_contacts_dialer_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-mdpi/logo_quick_contacts_mail_color_44in48dp.png b/res/drawable-mdpi/logo_quick_contacts_mail_color_44in48dp.png
new file mode 100644
index 0000000..9d4056e
--- /dev/null
+++ b/res/drawable-mdpi/logo_quick_contacts_mail_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/logo_quick_contacts_color_44in48dp.png b/res/drawable-xhdpi/logo_quick_contacts_color_44in48dp.png
new file mode 100644
index 0000000..be27c75
--- /dev/null
+++ b/res/drawable-xhdpi/logo_quick_contacts_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/logo_quick_contacts_dialer_color_44in48dp.png b/res/drawable-xhdpi/logo_quick_contacts_dialer_color_44in48dp.png
new file mode 100644
index 0000000..38f6af8
--- /dev/null
+++ b/res/drawable-xhdpi/logo_quick_contacts_dialer_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/logo_quick_contacts_mail_color_44in48dp.png b/res/drawable-xhdpi/logo_quick_contacts_mail_color_44in48dp.png
new file mode 100644
index 0000000..ba83fa3
--- /dev/null
+++ b/res/drawable-xhdpi/logo_quick_contacts_mail_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/logo_quick_contacts_color_44in48dp.png b/res/drawable-xxhdpi/logo_quick_contacts_color_44in48dp.png
new file mode 100644
index 0000000..94334ba
--- /dev/null
+++ b/res/drawable-xxhdpi/logo_quick_contacts_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/logo_quick_contacts_dialer_color_44in48dp.png b/res/drawable-xxhdpi/logo_quick_contacts_dialer_color_44in48dp.png
new file mode 100644
index 0000000..df94a54
--- /dev/null
+++ b/res/drawable-xxhdpi/logo_quick_contacts_dialer_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/logo_quick_contacts_mail_color_44in48dp.png b/res/drawable-xxhdpi/logo_quick_contacts_mail_color_44in48dp.png
new file mode 100644
index 0000000..9b25b54
--- /dev/null
+++ b/res/drawable-xxhdpi/logo_quick_contacts_mail_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/logo_quick_contacts_color_44in48dp.png b/res/drawable-xxxhdpi/logo_quick_contacts_color_44in48dp.png
new file mode 100644
index 0000000..67543af
--- /dev/null
+++ b/res/drawable-xxxhdpi/logo_quick_contacts_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/logo_quick_contacts_dialer_color_44in48dp.png b/res/drawable-xxxhdpi/logo_quick_contacts_dialer_color_44in48dp.png
new file mode 100644
index 0000000..021a14a
--- /dev/null
+++ b/res/drawable-xxxhdpi/logo_quick_contacts_dialer_color_44in48dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/logo_quick_contacts_mail_color_44in48dp.png b/res/drawable-xxxhdpi/logo_quick_contacts_mail_color_44in48dp.png
new file mode 100644
index 0000000..c8c98c0
--- /dev/null
+++ b/res/drawable-xxxhdpi/logo_quick_contacts_mail_color_44in48dp.png
Binary files differ
diff --git a/res/layout-sw720dp/quickcontact_activity.xml b/res/layout-sw720dp/quickcontact_activity.xml
index 5a7d90a..efbb4d1 100644
--- a/res/layout-sw720dp/quickcontact_activity.xml
+++ b/res/layout-sw720dp/quickcontact_activity.xml
@@ -27,52 +27,45 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:orientation="vertical" >
+        android:orientation="horizontal">
 
         <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/quickcontact_starting_empty_height"
-            android:contentDescription="@string/quickcontact_transparent_view_description"
-            android:id="@+id/transparent_view" />
+            android:id="@+id/empty_start_column"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="@integer/contact_list_space_layout_weight"
+            android:contentDescription="@string/quickcontact_transparent_view_description" />
 
         <LinearLayout
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
+            android:layout_weight="@integer/contact_list_card_layout_weight"
             android:layout_height="match_parent"
-            android:orientation="horizontal">
+            android:orientation="vertical">
 
             <View
-                android:id="@+id/empty_start_column"
-                android:layout_width="0dp"
-                android:layout_height="match_parent"
-                android:layout_weight="@integer/contact_list_space_layout_weight"
-                android:background="@color/background_primary"
-                android:focusable="false" />
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/quickcontact_starting_empty_height"
+                android:contentDescription="@string/quickcontact_transparent_view_description"
+                android:id="@+id/transparent_view" />
 
-            <LinearLayout
-                android:layout_width="0dp"
+            <FrameLayout
+                android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:layout_weight="@integer/contact_list_card_layout_weight"
-                android:orientation="vertical"
-                android:elevation="@dimen/contact_list_card_elevation"
-                android:outlineProvider="bounds" >
-                <FrameLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:id="@+id/toolbar_parent">
-                    <include layout="@layout/quickcontact_header" />
-                </FrameLayout>
+                android:id="@+id/toolbar_parent">
+                <include layout="@layout/quickcontact_header" />
+            </FrameLayout>
 
-                <include layout="@layout/quickcontact_content" />
-            </LinearLayout>
+            <include layout="@layout/quickcontact_content" />
 
-            <View
-                android:id="@+id/empty_end_column"
-                android:layout_width="0dp"
-                android:layout_height="match_parent"
-                android:layout_weight="@integer/contact_list_space_layout_weight"
-                android:background="@color/background_primary"
-                android:focusable="false" />
         </LinearLayout>
+
+        <View
+            android:id="@+id/empty_end_column"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="@integer/contact_list_space_layout_weight"
+            android:contentDescription="@string/quickcontact_transparent_view_description" />
+
     </LinearLayout>
 
     <!-- This title's maximum height must be less than the minimum size of its
diff --git a/res/mipmap-hdpi/ic_launcher_shortcut_contact.png b/res/mipmap-hdpi/ic_launcher_shortcut_contact.png
deleted file mode 100644
index e132cd0..0000000
--- a/res/mipmap-hdpi/ic_launcher_shortcut_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-hdpi/ic_launcher_shortcut_directdial.png b/res/mipmap-hdpi/ic_launcher_shortcut_directdial.png
deleted file mode 100644
index f6ec866..0000000
--- a/res/mipmap-hdpi/ic_launcher_shortcut_directdial.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-hdpi/ic_launcher_shortcut_directmessage.png b/res/mipmap-hdpi/ic_launcher_shortcut_directmessage.png
deleted file mode 100644
index 3256f8d..0000000
--- a/res/mipmap-hdpi/ic_launcher_shortcut_directmessage.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_shortcut_contact.png b/res/mipmap-mdpi/ic_launcher_shortcut_contact.png
deleted file mode 100644
index 218c915..0000000
--- a/res/mipmap-mdpi/ic_launcher_shortcut_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_shortcut_directdial.png b/res/mipmap-mdpi/ic_launcher_shortcut_directdial.png
deleted file mode 100644
index 50278c3..0000000
--- a/res/mipmap-mdpi/ic_launcher_shortcut_directdial.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_shortcut_directmessage.png b/res/mipmap-mdpi/ic_launcher_shortcut_directmessage.png
deleted file mode 100644
index 88ba718..0000000
--- a/res/mipmap-mdpi/ic_launcher_shortcut_directmessage.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_shortcut_contact.png b/res/mipmap-xhdpi/ic_launcher_shortcut_contact.png
deleted file mode 100644
index 8a5e25a..0000000
--- a/res/mipmap-xhdpi/ic_launcher_shortcut_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_shortcut_directdial.png b/res/mipmap-xhdpi/ic_launcher_shortcut_directdial.png
deleted file mode 100644
index e060bc5..0000000
--- a/res/mipmap-xhdpi/ic_launcher_shortcut_directdial.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_shortcut_directmessage.png b/res/mipmap-xhdpi/ic_launcher_shortcut_directmessage.png
deleted file mode 100644
index 4664ea6..0000000
--- a/res/mipmap-xhdpi/ic_launcher_shortcut_directmessage.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_shortcut_contact.png b/res/mipmap-xxhdpi/ic_launcher_shortcut_contact.png
deleted file mode 100644
index f230faa..0000000
--- a/res/mipmap-xxhdpi/ic_launcher_shortcut_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_shortcut_directdial.png b/res/mipmap-xxhdpi/ic_launcher_shortcut_directdial.png
deleted file mode 100644
index 153a31a..0000000
--- a/res/mipmap-xxhdpi/ic_launcher_shortcut_directdial.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_shortcut_directmessage.png b/res/mipmap-xxhdpi/ic_launcher_shortcut_directmessage.png
deleted file mode 100644
index 579a100..0000000
--- a/res/mipmap-xxhdpi/ic_launcher_shortcut_directmessage.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_shortcut_contact.png b/res/mipmap-xxxhdpi/ic_launcher_shortcut_contact.png
deleted file mode 100644
index 7d07add..0000000
--- a/res/mipmap-xxxhdpi/ic_launcher_shortcut_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
index 17b1f69..d92d3c7 100644
--- a/res/values-sw600dp/styles.xml
+++ b/res/values-sw600dp/styles.xml
@@ -30,11 +30,6 @@
         <item name="android:background">@android:color/transparent</item>
     </style>
 
-    <style name="NonPhoneDialogTheme" parent="@android:Theme.Material.Light.Dialog">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:windowContentOverlay">@null</item>
-    </style>
-
     <style name="ConfirmAddDetailViewStyle">
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">wrap_content</item>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 074ff52..e2bf0aa 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -59,6 +59,7 @@
         <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
         <!-- Style for the overflow button in the actionbar. -->
         <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
+        <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item>
         <item name="android:textColorPrimary">@color/primary_text_color</item>
         <item name="android:textColorSecondary">@color/secondary_text_color</item>
         <item name="android:icon">@android:color/transparent</item>
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index cc687ec..bb03705 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -53,7 +53,6 @@
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.model.RawContactModifier;
 import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.util.CallerInfoCacheUtils;
 import com.android.contacts.util.ContactPhotoUtils;
 
 import com.google.common.collect.Lists;
@@ -188,10 +187,8 @@
         String action = intent.getAction();
         if (ACTION_NEW_RAW_CONTACT.equals(action)) {
             createRawContact(intent);
-            CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
         } else if (ACTION_SAVE_CONTACT.equals(action)) {
             saveContact(intent);
-            CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
         } else if (ACTION_CREATE_GROUP.equals(action)) {
             createGroup(intent);
         } else if (ACTION_RENAME_GROUP.equals(action)) {
@@ -208,16 +205,12 @@
             clearPrimary(intent);
         } else if (ACTION_DELETE_CONTACT.equals(action)) {
             deleteContact(intent);
-            CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
         } else if (ACTION_JOIN_CONTACTS.equals(action)) {
             joinContacts(intent);
-            CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
         } else if (ACTION_SET_SEND_TO_VOICEMAIL.equals(action)) {
             setSendToVoicemail(intent);
-            CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
         } else if (ACTION_SET_RINGTONE.equals(action)) {
             setRingtone(intent);
-            CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
         }
     }
 
diff --git a/src/com/android/contacts/NonPhoneActivity.java b/src/com/android/contacts/NonPhoneActivity.java
index bab3977..652620c 100644
--- a/src/com/android/contacts/NonPhoneActivity.java
+++ b/src/com/android/contacts/NonPhoneActivity.java
@@ -27,7 +27,7 @@
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents.Insert;
-import android.telecomm.PhoneAccount;
+import android.telecom.PhoneAccount;
 import android.text.TextUtils;
 
 /**
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index d8926f0..abf89b6 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -30,7 +30,7 @@
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.PhoneLookup;
 import android.provider.ContactsContract.RawContacts;
-import android.telecomm.PhoneAccount;
+import android.telecom.PhoneAccount;
 import android.util.Log;
 
 import com.android.contacts.common.ContactsUtils;
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index f112847..ed2520d 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -125,6 +125,7 @@
     private static final String KEY_STATUS = "status";
     private static final String KEY_NEW_LOCAL_PROFILE = "newLocalProfile";
     private static final String KEY_IS_USER_PROFILE = "isUserProfile";
+    private static final String KEY_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption";
     private static final String KEY_UPDATED_PHOTOS = "updatedPhotos";
     private static final String KEY_IS_EDIT = "isEdit";
     private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
@@ -146,6 +147,9 @@
 
     public static final String INTENT_EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
 
+    public static final String INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION =
+            "disableDeleteMenuOption";
+
     /**
      * Modes that specify what the AsyncTask has to perform after saving
      */
@@ -339,6 +343,7 @@
     private boolean mRequestFocus;
     private boolean mNewLocalProfile = false;
     private boolean mIsUserProfile = false;
+    private boolean mDisableDeleteMenuOption = false;
 
     public ContactEditorFragment() {
     }
@@ -471,6 +476,8 @@
                 && mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY);
         mNewLocalProfile = mIntentExtras != null
                 && mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE);
+        mDisableDeleteMenuOption = mIntentExtras != null
+                && mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION);
     }
 
     public void setListener(Listener value) {
@@ -504,6 +511,7 @@
             mEnabled = savedState.getBoolean(KEY_ENABLED);
             mStatus = savedState.getInt(KEY_STATUS);
             mNewLocalProfile = savedState.getBoolean(KEY_NEW_LOCAL_PROFILE);
+            mDisableDeleteMenuOption = savedState.getBoolean(KEY_DISABLE_DELETE_MENU_OPTION);
             mIsUserProfile = savedState.getBoolean(KEY_IS_USER_PROFILE);
             mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
             mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
@@ -1072,6 +1080,7 @@
             splitMenu.setVisible(mState.size() > 1 && !isEditingUserProfile());
             // Cannot join a user profile
             joinMenu.setVisible(!isEditingUserProfile());
+            deleteMenu.setVisible(!mDisableDeleteMenuOption);
         } else {
             // something else, so don't show the help menu
             helpMenu.setVisible(false);
@@ -1767,6 +1776,7 @@
         outState.putLong(KEY_SHOW_JOIN_SUGGESTIONS, mAggregationSuggestionsRawContactId);
         outState.putBoolean(KEY_ENABLED, mEnabled);
         outState.putBoolean(KEY_NEW_LOCAL_PROFILE, mNewLocalProfile);
+        outState.putBoolean(KEY_DISABLE_DELETE_MENU_OPTION, mDisableDeleteMenuOption);
         outState.putBoolean(KEY_IS_USER_PROFILE, mIsUserProfile);
         outState.putInt(KEY_STATUS, mStatus);
         outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index aacfedf..a41cf77 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -26,7 +26,7 @@
 import android.net.WebAddress;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.Data;
-import android.telecomm.PhoneAccount;
+import android.telecom.PhoneAccount;
 import android.text.TextUtils;
 import android.util.Log;
 
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index 1313e24..f40ebe7 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -728,7 +728,6 @@
     private void updateBadges() {
         if (mIsExpanded) {
             mBadgeContainer.removeAllViews();
-            mBadgeIds.clear();
         } else {
             // Inflate badges if not yet created
             if (mBadges.size() < mEntries.size() - mCollapsedEntriesCount) {
@@ -829,6 +828,8 @@
         transitionSet.addTransition(boundsTransition);
         transitionSet.addTransition(scrollTransition);
 
+        transitionSet.excludeTarget(R.id.text, /* exclude = */ true);
+
         final ViewGroup transitionViewContainer = mAnimationViewGroup == null ?
                 this : mAnimationViewGroup;
 
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 360ffb7..eda9a91 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -70,8 +70,8 @@
 import android.provider.ContactsContract.QuickContact;
 import android.provider.ContactsContract.RawContacts;
 import android.support.v7.graphics.Palette;
-import android.telecomm.PhoneAccount;
-import android.telecomm.TelecommManager;
+import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.ContextMenu;
@@ -125,6 +125,7 @@
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.detail.ContactDisplayUtils;
+import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.interactions.CalendarInteractionsLoader;
 import com.android.contacts.interactions.CallLogInteractionsLoader;
 import com.android.contacts.interactions.ContactDeletionInteraction;
@@ -141,7 +142,6 @@
 import com.android.contacts.widget.MultiShrinkScroller;
 import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
 import com.android.contacts.widget.QuickContactImageView;
-
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
@@ -354,7 +354,7 @@
                     Bundle extras = new Bundle();
                     extras.putParcelable(TouchPointManager.TOUCH_POINT,
                             TouchPointManager.getInstance().getPoint());
-                    intent.putExtra(TelecommManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
+                    intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
                 }
             }
 
@@ -771,6 +771,10 @@
     }
 
     private void processIntent(Intent intent) {
+        if (intent == null) {
+            finish();
+            return;
+        }
         Uri lookupUri = intent.getData();
 
         // Check to see whether it comes from the old version.
@@ -2162,6 +2166,11 @@
                                 mContactData.getRawContacts().get(0).getDataSet());
                     }
 
+                    // Add this flag to disable the delete menu option on directory contact joins
+                    // with local contacts. The delete option is ambiguous when joining contacts.
+                    intent.putExtra(ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
+                            true);
+
                     startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
                 } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
                     InvisibleContactUtil.addToDefaultGroup(mContactData, this);
diff --git a/src/com/android/contacts/util/CallerInfoCacheUtils.java b/src/com/android/contacts/util/CallerInfoCacheUtils.java
deleted file mode 100644
index 9e53159..0000000
--- a/src/com/android/contacts/util/CallerInfoCacheUtils.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.util;
-
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Utilities for managing CallerInfoCache.
- *
- * The cache lives in Phone package and is used as fallback storage when database lookup is slower
- * than expected. It remembers some information necessary for responding to incoming calls
- * (e.g. custom ringtone settings, send-to-voicemail).
- *
- * Even though the cache will be updated periodically, Contacts app can request the cache update
- * via broadcast Intent. This class provides that mechanism, and possibly other misc utilities
- * for the update mechanism.
- */
-public final class CallerInfoCacheUtils {
-    private static final String UPDATE_CALLER_INFO_CACHE =
-            "com.android.phone.UPDATE_CALLER_INFO_CACHE";
-
-    private CallerInfoCacheUtils() {
-    }
-
-    /**
-     * Sends an Intent, notifying CallerInfo cache should be updated.
-     *
-     * Note: CallerInfo is *not* part of public API, and no guarantee is available around its
-     * specific behavior. In practice this will only be used by Phone package, but may change
-     * in the future.
-     *
-     * See also CallerInfoCache in Phone package for more information.
-     */
-    public static void sendUpdateCallerInfoCacheIntent(Context context) {
-        context.sendBroadcast(new Intent(UPDATE_CALLER_INFO_CACHE));
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index 15dca5c..570a24b 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -275,7 +275,21 @@
         mLargeTextView = (TextView) findViewById(R.id.large_title);
         mInvisiblePlaceholderTextView = (TextView) findViewById(R.id.placeholder_textview);
         mStartColumn = findViewById(R.id.empty_start_column);
-
+        // Touching the empty space should close the card
+        if (mStartColumn != null) {
+            mStartColumn.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    scrollOffBottom();
+                }
+            });
+            findViewById(R.id.empty_end_column).setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    scrollOffBottom();
+                }
+            });
+        }
         mListener = listener;
         mIsOpenContactSquare = isOpenContactSquare;