diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e27445f..7fb7f37 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -298,6 +298,24 @@
             android:targetActivity=".activities.PeopleActivity"
         />
 
+        <!-- Backwards compatibility: "Contacts" from Honeycomb -->
+        <activity-alias android:name=".activities.ContactsFrontDoor"
+            android:targetActivity=".activities.PeopleActivity"
+            android:exported="true"
+        />
+
+        <!-- Backwards compatibility: "Contacts" from Gingerbread and earlier -->
+        <activity-alias android:name="DialtactsContactsEntryActivity"
+            android:targetActivity=".activities.PeopleActivity"
+            android:exported="true"
+        />
+
+        <!-- Backwards compatibility: "Phone" from Gingerbread and earlier -->
+        <activity-alias android:name="DialtactsActivity"
+            android:targetActivity=".activities.DialtactsActivity"
+            android:exported="true"
+        />
+
         <!-- An activity for joining contacts -->
         <activity android:name=".activities.JoinContactActivity"
             android:theme="@style/JoinContactActivityTheme"
diff --git a/res/layout/contact_tile_single.xml b/res/layout/contact_tile_frequent.xml
similarity index 95%
rename from res/layout/contact_tile_single.xml
rename to res/layout/contact_tile_frequent.xml
index 7147f3c..4ba7396 100644
--- a/res/layout/contact_tile_single.xml
+++ b/res/layout/contact_tile_frequent.xml
@@ -36,8 +36,8 @@
             android:textAppearance="?android:attr/textAppearanceMedium"
             android:paddingTop="24dip" />
 
-        <ImageView
-            android:id="@+id/contact_tile_image"
+        <QuickContactBadge
+            android:id="@+id/contact_tile_quick"
             android:layout_width="64dip"
             android:layout_height="64dip"
             android:scaleType="centerCrop" />
diff --git a/res/layout/contact_tile_square.xml b/res/layout/contact_tile_square.xml
deleted file mode 100644
index ca79cef..0000000
--- a/res/layout/contact_tile_square.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<view
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.contacts.list.ContactTileSquareView"
-    android:focusable="true"
-    android:padding="1px"
-    android:background="@drawable/list_selector" >
-
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-
-        <ImageView
-            android:id="@+id/contact_tile_image"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:scaleType="centerCrop" />
-
-        <View
-            android:id="@+id/contact_tile_background"
-            android:layout_width="match_parent"
-            android:layout_height="48dip"
-            android:layout_alignParentBottom="true"
-            android:layout_alignParentLeft="true"
-            android:alpha="0.5"
-            android:background="@android:color/black" />
-
-        <TextView
-            android:id="@+id/contact_tile_name"
-            android:layout_width="match_parent"
-            android:layout_height="48dip"
-            android:layout_alignParentBottom="true"
-            android:layout_alignParentLeft="true"
-            android:gravity="center_vertical"
-            android:paddingLeft="8dip"
-            android:singleLine="true"
-            android:ellipsize="end"
-            android:textColor="@android:color/white"
-            android:textAppearance="?android:attr/textAppearanceMedium" />
-
-    </RelativeLayout>
-
-</view>
diff --git a/res/layout/contact_tile_single.xml b/res/layout/contact_tile_starred.xml
similarity index 60%
copy from res/layout/contact_tile_single.xml
copy to res/layout/contact_tile_starred.xml
index 7147f3c..6cdf213 100644
--- a/res/layout/contact_tile_single.xml
+++ b/res/layout/contact_tile_starred.xml
@@ -15,33 +15,27 @@
 -->
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.contacts.list.ContactTileView"
-    android:focusable="true"
-    android:background="@drawable/list_selector"
-    android:paddingRight="16dip"
-    android:paddingLeft="16dip" >
+    class="com.android.contacts.list.ContactTileStarredView"
+    style="@style/ContactTileStarred" >
 
-    <LinearLayout
+    <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent" >
 
-        <TextView
-            android:id="@+id/contact_tile_name"
-            android:layout_width="0dip"
-            android:layout_height="fill_parent"
-            android:layout_weight="1"
-            android:textSize="18sp"
-            android:singleLine="true"
-            android:ellipsize="end"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:paddingTop="24dip" />
-
         <ImageView
             android:id="@+id/contact_tile_image"
-            android:layout_width="64dip"
-            android:layout_height="64dip"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
             android:scaleType="centerCrop" />
 
-    </LinearLayout>
+        <View
+            android:id="@+id/contact_tile_background"
+            style="@style/ContactTileStarredTextBackground" />
+
+        <TextView
+            android:id="@+id/contact_tile_name"
+            style="@style/ContactTileStarredText" />
+
+    </RelativeLayout>
 
 </view>
diff --git a/res/layout/contact_tile_starred_quick_contact.xml b/res/layout/contact_tile_starred_quick_contact.xml
new file mode 100644
index 0000000..241ab54
--- /dev/null
+++ b/res/layout/contact_tile_starred_quick_contact.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<view
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    class="com.android.contacts.list.ContactTileStarredView"
+    style="@style/ContactTileStarred" >
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <QuickContactBadge
+            android:id="@+id/contact_tile_quick"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="centerCrop" />
+
+        <View
+            android:id="@+id/contact_tile_background"
+            style="@style/ContactTileStarredTextBackground" />
+
+        <TextView
+            android:id="@+id/contact_tile_name"
+            style="@style/ContactTileStarredText" />
+
+    </RelativeLayout>
+
+</view>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e4b7a86..01f0e62 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -328,4 +328,32 @@
         <item name="android:background">@drawable/btn_dial</item>
         <item name="android:soundEffectsEnabled">false</item>
     </style>
+
+    <style name="ContactTileStarred">
+        <item name="android:focusable">true</item>
+        <item name="android:padding">1px</item>
+        <item name="android:background">@drawable/list_selector</item>
+    </style>
+
+    <style name="ContactTileStarredText">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">48dip</item>
+        <item name="android:layout_alignParentBottom">true</item>
+        <item name="android:layout_alignParentLeft">true</item>
+        <item name="android:gravity">center_vertical</item>
+        <item name="android:paddingLeft">8dip</item>
+        <item name="android:singleLine">true</item>
+        <item name="android:ellipsize">end</item>
+        <item name="android:textColor">@android:color/white</item>
+        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
+    </style>
+
+    <style name="ContactTileStarredTextBackground">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">48dip</item>
+        <item name="android:layout_alignParentBottom">true</item>
+        <item name="android:layout_alignParentLeft">true</item>
+        <item name="android:alpha">0.5</item>
+        <item name="android:background">@android:color/black</item>
+    </style>
 </resources>
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index a1d2bb7..d08b76a 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -304,8 +304,8 @@
                     setListAdapter(adapter);
                 }
                 mPhoneCallDetailsHelper.setPhoneCallDetails(mPhoneCallDetailsViews,
-                        new PhoneCallDetails(mNumber, numberText, callType, date, nameText,
-                                numberType, numberLabel), false);
+                        new PhoneCallDetails(mNumber, numberText, new int[]{ callType }, date,
+                                nameText, numberType, numberLabel), false);
 
                 loadContactPhotos(photoId);
             } else {
diff --git a/src/com/android/contacts/ContactLoader.java b/src/com/android/contacts/ContactLoader.java
index 2ec1cbf..7ed9d86 100644
--- a/src/com/android/contacts/ContactLoader.java
+++ b/src/com/android/contacts/ContactLoader.java
@@ -413,7 +413,6 @@
                 RawContacts.SYNC3,
                 RawContacts.SYNC4,
                 RawContacts.DELETED,
-                RawContacts.IS_RESTRICTED,
                 RawContacts.NAME_VERIFIED,
 
                 Contacts.Entity.DATA_ID,
@@ -481,46 +480,45 @@
         public final static int SYNC3 = 22;
         public final static int SYNC4 = 23;
         public final static int DELETED = 24;
-        public final static int IS_RESTRICTED = 25;
-        public final static int NAME_VERIFIED = 26;
+        public final static int NAME_VERIFIED = 25;
 
-        public final static int DATA_ID = 27;
-        public final static int DATA1 = 28;
-        public final static int DATA2 = 29;
-        public final static int DATA3 = 30;
-        public final static int DATA4 = 31;
-        public final static int DATA5 = 32;
-        public final static int DATA6 = 33;
-        public final static int DATA7 = 34;
-        public final static int DATA8 = 35;
-        public final static int DATA9 = 36;
-        public final static int DATA10 = 37;
-        public final static int DATA11 = 38;
-        public final static int DATA12 = 39;
-        public final static int DATA13 = 40;
-        public final static int DATA14 = 41;
-        public final static int DATA15 = 42;
-        public final static int DATA_SYNC1 = 43;
-        public final static int DATA_SYNC2 = 44;
-        public final static int DATA_SYNC3 = 45;
-        public final static int DATA_SYNC4 = 46;
-        public final static int DATA_VERSION = 47;
-        public final static int IS_PRIMARY = 48;
-        public final static int IS_SUPERPRIMARY = 49;
-        public final static int MIMETYPE = 50;
-        public final static int RES_PACKAGE = 51;
+        public final static int DATA_ID = 26;
+        public final static int DATA1 = 27;
+        public final static int DATA2 = 28;
+        public final static int DATA3 = 29;
+        public final static int DATA4 = 30;
+        public final static int DATA5 = 31;
+        public final static int DATA6 = 32;
+        public final static int DATA7 = 33;
+        public final static int DATA8 = 34;
+        public final static int DATA9 = 35;
+        public final static int DATA10 = 36;
+        public final static int DATA11 = 37;
+        public final static int DATA12 = 38;
+        public final static int DATA13 = 39;
+        public final static int DATA14 = 40;
+        public final static int DATA15 = 41;
+        public final static int DATA_SYNC1 = 42;
+        public final static int DATA_SYNC2 = 43;
+        public final static int DATA_SYNC3 = 44;
+        public final static int DATA_SYNC4 = 45;
+        public final static int DATA_VERSION = 46;
+        public final static int IS_PRIMARY = 47;
+        public final static int IS_SUPERPRIMARY = 48;
+        public final static int MIMETYPE = 49;
+        public final static int RES_PACKAGE = 50;
 
-        public final static int GROUP_SOURCE_ID = 52;
+        public final static int GROUP_SOURCE_ID = 51;
 
-        public final static int PRESENCE = 53;
-        public final static int CHAT_CAPABILITY = 54;
-        public final static int STATUS = 55;
-        public final static int STATUS_RES_PACKAGE = 56;
-        public final static int STATUS_ICON = 57;
-        public final static int STATUS_LABEL = 58;
-        public final static int STATUS_TIMESTAMP = 59;
+        public final static int PRESENCE = 52;
+        public final static int CHAT_CAPABILITY = 53;
+        public final static int STATUS = 54;
+        public final static int STATUS_RES_PACKAGE = 55;
+        public final static int STATUS_ICON = 56;
+        public final static int STATUS_LABEL = 57;
+        public final static int STATUS_TIMESTAMP = 58;
 
-        public final static int PHOTO_URI = 60;
+        public final static int PHOTO_URI = 59;
     }
 
     private static class DirectoryQuery {
@@ -764,7 +762,6 @@
             cursorColumnToContentValues(cursor, cv, ContactQuery.DELETED);
             cursorColumnToContentValues(cursor, cv, ContactQuery.CONTACT_ID);
             cursorColumnToContentValues(cursor, cv, ContactQuery.STARRED);
-            cursorColumnToContentValues(cursor, cv, ContactQuery.IS_RESTRICTED);
             cursorColumnToContentValues(cursor, cv, ContactQuery.NAME_VERIFIED);
 
             return cv;
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
index 0633bf8..8f08ccd 100644
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ b/src/com/android/contacts/GroupMemberLoader.java
@@ -82,8 +82,6 @@
         Uri uri = Data.CONTENT_URI;
         uri = uri.buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                 String.valueOf(Directory.DEFAULT)).build();
-        // TODO: Bring back dataRestriction
-        // uri = applyDataRestriction(uri);
         return uri;
     }
 
diff --git a/src/com/android/contacts/PhoneCallDetails.java b/src/com/android/contacts/PhoneCallDetails.java
index c5c37df..7b02a88 100644
--- a/src/com/android/contacts/PhoneCallDetails.java
+++ b/src/com/android/contacts/PhoneCallDetails.java
@@ -27,8 +27,12 @@
     public final CharSequence number;
     /** The formatted version of {@link #number}. */
     public final CharSequence formattedNumber;
-    /** The type of call, as defined in the call log table, e.g., {@link Calls#INCOMING_TYPE}. */
-    public final int callType;
+    /**
+     * The type of calls, as defined in the call log table, e.g., {@link Calls#INCOMING_TYPE}.
+     * <p>
+     * There might be multiple types if this represents a set of entries grouped together.
+     */
+    public final int[] callTypes;
     /** The date of the call, in milliseconds since the epoch. */
     public final long date;
     /** The name of the contact, or the empty string. */
@@ -39,17 +43,17 @@
     public final CharSequence numberLabel;
 
     /** Create the details for a call with a number not associated with a contact. */
-    public PhoneCallDetails(CharSequence number, CharSequence formattedNumber, int callType,
+    public PhoneCallDetails(CharSequence number, CharSequence formattedNumber, int[] callTypes,
             long date) {
-        this(number, formattedNumber, callType, date, "", 0, "");
+        this(number, formattedNumber, callTypes, date, "", 0, "");
     }
 
     /** Create the details for a call with a number associated with a contact. */
-    public PhoneCallDetails(CharSequence number, CharSequence formattedNumber, int callType,
+    public PhoneCallDetails(CharSequence number, CharSequence formattedNumber, int[] callTypes,
             long date, CharSequence name, int numberType, CharSequence numberLabel) {
         this.number = number;
         this.formattedNumber = formattedNumber;
-        this.callType = callType;
+        this.callTypes = callTypes;
         this.date = date;
         this.name = name;
         this.numberType = numberType;
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index 4605799..7f73b04 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -86,58 +86,22 @@
     public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details,
             boolean useIcons) {
         if (useIcons) {
-            final Drawable callTypeDrawable;
-            switch (details.callType) {
-                case Calls.INCOMING_TYPE:
-                    callTypeDrawable = mIncomingDrawable;
-                    break;
-
-                case Calls.OUTGOING_TYPE:
-                    callTypeDrawable = mOutgoingDrawable;
-                    break;
-
-                case Calls.MISSED_TYPE:
-                    callTypeDrawable = mMissedDrawable;
-                    break;
-
-                case Calls.VOICEMAIL_TYPE:
-                    callTypeDrawable = mVoicemailDrawable;
-                    break;
-
-                default:
-                    throw new IllegalArgumentException("invalid call type: " + details.callType);
-            }
-            ImageView callTypeImage = new ImageView(mContext);
-            callTypeImage.setImageDrawable(callTypeDrawable);
             views.callTypeIcons.removeAllViews();
-            views.callTypeIcons.addView(callTypeImage);
-
+            int count = details.callTypes.length;
+            for (int callType : details.callTypes) {
+                ImageView callTypeImage = new ImageView(mContext);
+                callTypeImage.setImageDrawable(getCallTypeDrawable(callType));
+                views.callTypeIcons.addView(callTypeImage);
+            }
             views.callTypeIcons.setVisibility(View.VISIBLE);
             views.callTypeText.setVisibility(View.GONE);
             views.callTypeSeparator.setVisibility(View.GONE);
         } else {
             String callTypeName;
-            switch (details.callType) {
-                case Calls.INCOMING_TYPE:
-                    callTypeName = mIncomingName;
-                    break;
-
-                case Calls.OUTGOING_TYPE:
-                    callTypeName = mOutgoingName;
-                    break;
-
-                case Calls.MISSED_TYPE:
-                    callTypeName = mMissedName;
-                    break;
-
-                case Calls.VOICEMAIL_TYPE:
-                    callTypeName = mVoicemailName;
-                    break;
-
-                default:
-                    throw new IllegalArgumentException("invalid call type: " + details.callType);
-            }
-            views.callTypeText.setText(callTypeName);
+            // Use the name of the first call type.
+            // TODO: We should update this to handle the text for multiple calls as well.
+            int callType = details.callTypes[0];
+            views.callTypeText.setText(getCallTypeText(callType));
             views.callTypeIcons.removeAllViews();
 
             views.callTypeText.setVisibility(View.VISIBLE);
@@ -167,7 +131,7 @@
         } else {
             nameText = details.name;
             CharSequence displayNumber = getDisplayNumber(details.number, details.formattedNumber);
-            if (details.callType != 0 && numberFormattedLabel != null) {
+            if (numberFormattedLabel != null) {
                 numberText = FormatUtils.applyStyleToSpan(Typeface.BOLD,
                         numberFormattedLabel + " " + displayNumber, 0,
                         numberFormattedLabel.length(),
@@ -191,6 +155,46 @@
         }
     }
 
+    /** Returns the text used to represent the given call type. */
+    private String getCallTypeText(int callType) {
+        switch (callType) {
+            case Calls.INCOMING_TYPE:
+                return mIncomingName;
+
+            case Calls.OUTGOING_TYPE:
+                return mOutgoingName;
+
+            case Calls.MISSED_TYPE:
+                return mMissedName;
+
+            case Calls.VOICEMAIL_TYPE:
+                return mVoicemailName;
+
+            default:
+                throw new IllegalArgumentException("invalid call type: " + callType);
+        }
+    }
+
+    /** Returns the drawable of the icon associated with the given call type. */
+    private Drawable getCallTypeDrawable(int callType) {
+        switch (callType) {
+            case Calls.INCOMING_TYPE:
+                return mIncomingDrawable;
+
+            case Calls.OUTGOING_TYPE:
+                return mOutgoingDrawable;
+
+            case Calls.MISSED_TYPE:
+                return mMissedDrawable;
+
+            case Calls.VOICEMAIL_TYPE:
+                return mVoicemailDrawable;
+
+            default:
+                throw new IllegalArgumentException("invalid call type: " + callType);
+        }
+    }
+
     private CharSequence getDisplayNumber(CharSequence number, CharSequence formattedNumber) {
         if (TextUtils.isEmpty(number)) {
             return "";
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index 47568b8..7456967 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -218,7 +218,7 @@
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         // First check if the {@link ContactLoaderFragment} can handle the key
-        if (mLoaderFragment.handleKeyDown(keyCode)) return true;
+        if (mLoaderFragment != null && mLoaderFragment.handleKeyDown(keyCode)) return true;
 
         // Otherwise find the correct fragment to handle the event
         FragmentKeyListener mCurrentFragment;
@@ -232,7 +232,7 @@
             default:
                 throw new IllegalStateException("Invalid current item for ViewPager");
         }
-        if (mCurrentFragment.handleKeyDown(keyCode)) return true;
+        if (mCurrentFragment != null && mCurrentFragment.handleKeyDown(keyCode)) return true;
 
         // In the last case, give the key event to the superclass.
         return super.onKeyDown(keyCode, event);
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index e345db7..0fa745d 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -333,6 +333,7 @@
             mCallLogFragment.onVisibilityChanged(currentPosition == TAB_INDEX_CALL_LOG);
         } else if (fragment instanceof StrequentContactListFragment) {
             mStrequentFragment = (StrequentContactListFragment) fragment;
+            mStrequentFragment.setQuickContact(false);
             mStrequentFragment.setListener(mStrequentListener);
         } else if (fragment instanceof PhoneNumberPickerFragment) {
             mSearchFragment = (PhoneNumberPickerFragment) fragment;
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index bf0b256..12a17f2 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -236,10 +236,12 @@
         } else if (fragment instanceof GroupDetailFragment) {
             mGroupDetailFragment = (GroupDetailFragment) fragment;
             mGroupDetailFragment.setListener(mGroupDetailFragmentListener);
+            mGroupDetailFragment.setQuickContact(PhoneCapabilityTester.isUsingTwoPanes(this));
         } else if (fragment instanceof StrequentContactListFragment) {
             mFavoritesFragment = (StrequentContactListFragment) fragment;
             mFavoritesFragment.setListener(mFavoritesFragmentListener);
             mFavoritesFragment.setDisplayType(DisplayType.STARRED_ONLY);
+            mFavoritesFragment.setQuickContact(PhoneCapabilityTester.isUsingTwoPanes(this));
         }
     }
 
@@ -488,6 +490,10 @@
                     filter = ContactListFilter.createFilterWithType(
                             ContactListFilter.FILTER_TYPE_STARRED);
                     break;
+                case ContactsRequest.ACTION_VIEW_CONTACT:
+                    if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
+                        getActionBar().setSelectedNavigationItem(TabState.ALL.ordinal());
+                    }
             }
 
             mSearchMode = mRequest.isSearchMode();
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index 3bf757b..11f8965 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -583,7 +583,7 @@
         @VisibleForTesting
         @Override
         public void bindStandAloneView(View view, Context context, Cursor cursor) {
-            bindView(context, view, cursor);
+            bindView(view, cursor, 1);
         }
 
         @VisibleForTesting
@@ -599,7 +599,7 @@
         @VisibleForTesting
         @Override
         public void bindChildView(View view, Context context, Cursor cursor) {
-            bindView(context, view, cursor);
+            bindView(view, cursor, 1);
         }
 
         @VisibleForTesting
@@ -616,11 +616,7 @@
         @Override
         public void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
                 boolean expanded) {
-            final CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-            int groupIndicator = expanded
-                    ? com.android.internal.R.drawable.expander_ic_maximized
-                    : com.android.internal.R.drawable.expander_ic_minimized;
-            bindView(context, view, cursor);
+            bindView(view, cursor, groupSize);
         }
 
         private void findAndCacheViews(View view) {
@@ -632,12 +628,18 @@
             view.setTag(views);
         }
 
-        public void bindView(Context context, View view, Cursor c) {
+        /**
+         * Binds the views in the entry to the data in the call log.
+         *
+         * @param view the view corresponding to this entry
+         * @param c the cursor pointing to the entry in the call log
+         * @param count the number of entries in the current item, greater than 1 if it is a group
+         */
+        private void bindView(View view, Cursor c, int count) {
             final CallLogListItemViews views = (CallLogListItemViews) view.getTag();
 
             String number = c.getString(CallLogQuery.NUMBER);
             long date = c.getLong(CallLogQuery.DATE);
-            int callType = c.getInt(CallLogQuery.CALL_TYPE);
             final String formattedNumber;
             String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
             // Store away the number so we can call it directly if you click on the call icon
@@ -694,11 +696,12 @@
                 views.callView.setVisibility(View.VISIBLE);
             }
 
+            int[] callTypes = getCallTypes(c, count);
             final PhoneCallDetails details;
             if (TextUtils.isEmpty(name)) {
-                details = new PhoneCallDetails(number, formattedNumber, callType, date);
+                details = new PhoneCallDetails(number, formattedNumber, callTypes, date);
             } else {
-                details = new PhoneCallDetails(number, formattedNumber, callType, date, name,
+                details = new PhoneCallDetails(number, formattedNumber, callTypes, date, name,
                         ntype, label);
             }
             mCallLogViewsHelper.setPhoneCallDetails(views, details , true);
@@ -715,6 +718,24 @@
             }
         }
 
+        /**
+         * Returns the call types for the given number of items in the cursor.
+         * <p>
+         * It uses the next {@code count} rows in the cursor to extract the types.
+         * <p>
+         * It position in the cursor is unchanged by this function.
+         */
+        private int[] getCallTypes(Cursor cursor, int count) {
+            int position = cursor.getPosition();
+            int[] callTypes = new int[count];
+            for (int index = 0; index < count; ++index) {
+                callTypes[index] = cursor.getInt(CallLogQuery.CALL_TYPE);
+                cursor.moveToNext();
+            }
+            cursor.moveToPosition(position);
+            return callTypes;
+        }
+
         private void bindQuickContact(QuickContactBadge view, long photoId, long contactId,
                 String lookupKey) {
             view.assignContactUri(getContactUri(contactId, lookupKey));
diff --git a/src/com/android/contacts/calllog/CallLogListItemHelper.java b/src/com/android/contacts/calllog/CallLogListItemHelper.java
index 462b0b3..e4630e9 100644
--- a/src/com/android/contacts/calllog/CallLogListItemHelper.java
+++ b/src/com/android/contacts/calllog/CallLogListItemHelper.java
@@ -61,8 +61,9 @@
             boolean useIcons) {
         mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details, useIcons);
         if (views.callView != null) {
+            // The type of icon, call or play, is determined by the first call in the group.
             views.callView.setImageDrawable(
-                    details.callType == Calls.VOICEMAIL_TYPE ? mPlayDrawable : mCallDrawable);
+                    details.callTypes[0] == Calls.VOICEMAIL_TYPE ? mPlayDrawable : mCallDrawable);
             views.callView.setVisibility(
                     canPlaceCallsTo(details.number) ? View.VISIBLE : View.INVISIBLE);
         }
diff --git a/src/com/android/contacts/detail/ContactLoaderFragment.java b/src/com/android/contacts/detail/ContactLoaderFragment.java
index 5504473..b7cb2b7 100644
--- a/src/com/android/contacts/detail/ContactLoaderFragment.java
+++ b/src/com/android/contacts/detail/ContactLoaderFragment.java
@@ -98,8 +98,6 @@
 
     private ContactLoader.Result mContactData;
 
-    private boolean mAllRestricted;
-
     public ContactLoaderFragment() {
     }
 
@@ -189,16 +187,6 @@
                 mContactData = null;
             }
 
-            mAllRestricted = true;
-
-            for (Entity entity: mContactData.getEntities()) {
-                final ContentValues entValues = entity.getEntityValues();
-                // Mark when this contact has any unrestricted components
-                Integer restricted = entValues.getAsInteger(RawContacts.IS_RESTRICTED);
-                final boolean isRestricted = restricted != null && restricted != 0;
-                if (!isRestricted) mAllRestricted = false;
-            }
-
             if (mListener != null) {
                 if (mContactData == null) {
                     mListener.onContactNotFound();
@@ -208,6 +196,7 @@
             }
         }
 
+        @Override
         public void onLoaderReset(Loader<ContactLoader.Result> loader) {
             mContactData = null;
             if (mListener != null) {
@@ -259,7 +248,7 @@
     }
 
     public boolean isContactShareable() {
-        return mContactData != null && !mContactData.isDirectoryEntry() && !mAllRestricted;
+        return mContactData != null && !mContactData.isDirectoryEntry();
     }
 
     @Override
@@ -281,7 +270,6 @@
                 return true;
             }
             case R.id.menu_share: {
-                if (mAllRestricted) return false;
                 if (mContactData == null) return false;
 
                 final String lookupKey = mContactData.getLookupKey();
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index fe2605e..9e668bb 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -105,6 +105,7 @@
 
         mAdapter = new ContactTileAdapter(activity, mContactTileListener, columnCount,
                 DisplayType.GROUP_MEMBERS);
+
         configurePhotoLoader();
     }
 
@@ -130,6 +131,10 @@
         startGroupMetadataLoader();
     }
 
+    public void setQuickContact(boolean enableQuickContact) {
+        mAdapter.setQuickContact(enableQuickContact);
+    }
+
     private void configureAdapter(long groupId) {
         mGroupId = groupId;
         mMemberListView.setAdapter(mAdapter);
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 06e31e3..a03ddee 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -20,7 +20,6 @@
 import com.android.contacts.widget.IndexerListAdapter;
 import com.android.contacts.widget.TextWithHighlightingFactory;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.CursorLoader;
 import android.database.Cursor;
@@ -61,7 +60,6 @@
     private int mDisplayOrder;
     private int mSortOrder;
     private boolean mNameHighlightingEnabled;
-    private boolean mDataRestrictedByCallingPackage;
 
     private boolean mDisplayPhotos;
     private boolean mQuickContactEnabled;
@@ -278,43 +276,6 @@
         mIncludeProfile = includeProfile;
     }
 
-    public boolean isDataRestrictedByCallingPackage() {
-        return mDataRestrictedByCallingPackage;
-    }
-
-    public void setDataRestrictedByCallingPackage(boolean flag) {
-        mDataRestrictedByCallingPackage = flag;
-    }
-
-    /**
-     * Adds a parameter to the URI that ensures that only unrestricted data
-     * is included in the list, if {@link #isDataRestrictedByCallingPackage()} is true.
-     */
-    protected Uri applyDataRestriction(Uri uri) {
-        if (!mDataRestrictedByCallingPackage) {
-            return uri;
-        }
-
-        return applyDataRestriction(uri.buildUpon()).build();
-    }
-
-    /**
-     * See {@link #applyDataRestriction(Uri)}.
-     */
-    protected Uri.Builder applyDataRestriction(Uri.Builder builder) {
-        if (!mDataRestrictedByCallingPackage) {
-            return builder;
-        }
-
-        String callingPackage = ((Activity)getContext()).getCallingPackage();
-        if (!TextUtils.isEmpty(callingPackage)) {
-            return builder.appendQueryParameter(
-                    ContactsContract.REQUESTING_PACKAGE_PARAM_KEY, callingPackage);
-        }
-
-        return builder;
-    }
-
     public void configureDirectoryLoader(DirectoryListLoader loader) {
         loader.setDirectorySearchMode(mDirectorySearchMode);
         loader.setLocalInvisibleDirectoryEnabled(LOCAL_INVISIBLE_DIRECTORY_ENABLED);
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 6bfca57..5d0f692 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -170,7 +170,6 @@
         super.configureAdapter();
 
         ContactEntryListAdapter adapter = getAdapter();
-        adapter.setDataRestrictedByCallingPackage(true);
 
         // If "Create new contact" is shown, don't display the empty list UI
         adapter.setEmptyListEnabled(!isCreateContactEnabled());
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 5d5e6cb..20c639e 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -65,6 +65,7 @@
     private int mPhotoUriIndex;
     private int mNameIndex;
     private int mStarredIndex;
+    private boolean mIsQuickContact = false;
 
     /**
      * Configures the adapter to filter and display contacts using different view types.
@@ -72,27 +73,23 @@
      */
     public enum DisplayType {
         /**
-         * Displays a mixed view type where Starred Contacts
-         * are in a regular {@link ContactTileView} layout and
-         * frequent contacts are in a small {@link ContactTileView} layout.
+         * Displays a mixed view type of starred and frequent contacts
          */
         STREQUENT,
 
         /**
-         * Display only starred contacts in
-         * regular {@link ContactTileView} layout.
+         * Display only starred contacts
          */
         STARRED_ONLY,
 
         /**
-         * Display only most frequently contacted in a
-         * single {@link ContactTileView} layout.
+         * Display only most frequently contacted
          */
         FREQUENT_ONLY,
 
         /**
-         * Display all contacts from a group in the cursor in a
-         * regular {@link ContactTileView} layout. Use {@link GroupMemberLoader}
+         * Display all contacts from a group in the cursor
+         * Use {@link GroupMemberLoader}
          * when passing {@link Cursor} into loadFromCusor method.
          */
         GROUP_MEMBERS
@@ -120,6 +117,10 @@
         mDisplayType = displayType;
     }
 
+    public void setQuickContact(boolean enableQuickContact) {
+        mIsQuickContact = enableQuickContact;
+    }
+
     /**
      * Sets the column indices for expected {@link Cursor}
      * based on {@link DisplayType}.
@@ -292,7 +293,7 @@
         int columnCount = -1;
 
         switch (itemViewType) {
-            case ViewTypes.SQUARE:
+            case ViewTypes.STARRED:
                 if (contactTileRowView == null) {
                     // Creating new row if needed
                     contactTileRowView = new ContactTileRow(mContext, layoutResId, true);
@@ -300,7 +301,7 @@
                 columnCount = mColumnCount;
                 break;
 
-            case ViewTypes.SINGLE_ROW:
+            case ViewTypes.FREQUENT:
                 if (contactTileRowView == null) {
                     // Creating new row if needed
                     contactTileRowView = new ContactTileRow(mContext, layoutResId, false);
@@ -327,10 +328,14 @@
 
     private int getLayoutResourceId(int viewType) {
         switch (viewType) {
-            case ViewTypes.SQUARE:
-                return R.layout.contact_tile_square;
-            case ViewTypes.SINGLE_ROW:
-                return R.layout.contact_tile_single;
+            case ViewTypes.STARRED:
+                if (mIsQuickContact) {
+                    return R.layout.contact_tile_starred_quick_contact;
+                } else {
+                    return R.layout.contact_tile_starred;
+                }
+            case ViewTypes.FREQUENT:
+                return R.layout.contact_tile_frequent;
             default:
                 throw new IllegalArgumentException("Received unrecognized viewType " + viewType);
         }
@@ -343,8 +348,8 @@
     /**
      * Returns view type based on {@link DisplayType}.
      * {@link DisplayType#STARRED_ONLY} and {@link DisplayType#GROUP_MEMBERS}
-     * are {@link ViewTypes#SQUARE}.
-     * {@link DisplayType#FREQUENT_ONLY} is {@link ViewTypes#SINGLE_ROW}.
+     * are {@link ViewTypes#STARRED}.
+     * {@link DisplayType#FREQUENT_ONLY} is {@link ViewTypes#FREQUENT}.
      * {@link DisplayType#STREQUENT} mixes both {@link ViewTypes}
      * and also adds in {@link ViewTypes#DIVIDER}.
      */
@@ -353,17 +358,17 @@
         switch (mDisplayType) {
             case STREQUENT:
                 if (position < mDividerRowIndex) {
-                    return ViewTypes.SQUARE;
+                    return ViewTypes.STARRED;
                 } else if (position == mDividerRowIndex) {
                     return ViewTypes.DIVIDER;
                 } else {
-                    return ViewTypes.SINGLE_ROW;
+                    return ViewTypes.FREQUENT;
                 }
             case STARRED_ONLY:
             case GROUP_MEMBERS:
-                return ViewTypes.SQUARE;
+                return ViewTypes.STARRED;
             case FREQUENT_ONLY:
-                return ViewTypes.SINGLE_ROW;
+                return ViewTypes.FREQUENT;
             default:
                 throw new IllegalStateException(
                         "Received unrecognized DisplayType " + mDisplayType);
@@ -400,7 +405,7 @@
 
             if (getChildCount() <= tileIndex) {
                 if (mIsContactTileSquare) {
-                    contactTile = (ContactTileSquareView) inflate(mContext, mLayoutResId, null);
+                    contactTile = (ContactTileStarredView) inflate(mContext, mLayoutResId, null);
                 } else {
                     contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
                 }
@@ -433,9 +438,9 @@
 
     private static class ViewTypes {
         public static final int COUNT = 3;
-        public static final int SQUARE = 0;
+        public static final int STARRED = 0;
         public static final int DIVIDER = 1;
-        public static final int SINGLE_ROW = 2;
+        public static final int FREQUENT = 2;
     }
 
     public interface Listener {
diff --git a/src/com/android/contacts/list/ContactTileSquareView.java b/src/com/android/contacts/list/ContactTileStarredView.java
similarity index 80%
rename from src/com/android/contacts/list/ContactTileSquareView.java
rename to src/com/android/contacts/list/ContactTileStarredView.java
index 7716481..3c0ba42 100644
--- a/src/com/android/contacts/list/ContactTileSquareView.java
+++ b/src/com/android/contacts/list/ContactTileStarredView.java
@@ -19,13 +19,13 @@
 import android.util.AttributeSet;
 
 /**
- * A ContactTileSquare displays the contact's picture overlayed with their name
+ * A {@link ContactTileStarredView} displays the contact's picture overlayed with their name
  * in a perfect square.
  */
-public class ContactTileSquareView extends ContactTileView {
-    private final static String TAG = ContactTileSquareView.class.getSimpleName();
+public class ContactTileStarredView extends ContactTileView {
+    private final static String TAG = ContactTileStarredView.class.getSimpleName();
 
-    public ContactTileSquareView(Context context, AttributeSet attrs) {
+    public ContactTileStarredView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index ad711cf..279dc93 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -26,6 +26,7 @@
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
+import android.widget.QuickContactBadge;
 import android.widget.TextView;
 
 /**
@@ -36,6 +37,7 @@
 
     private Uri mLookupUri;
     private ImageView mPhoto;
+    private QuickContactBadge mQuickContact;
     private TextView mName;
     private ContactPhotoManager mPhotoManager = null;
 
@@ -47,6 +49,8 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
         mName = (TextView) findViewById(R.id.contact_tile_name);
+
+        mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick);
         mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
     }
 
@@ -62,11 +66,23 @@
         if (entry != null) {
             mName.setText(entry.name);
             mLookupUri = entry.lookupKey;
-            mPhoto.setImageBitmap(null);
+
+            if (mQuickContact != null) {
+                mQuickContact.assignContactUri(mLookupUri);
+                mQuickContact.setImageBitmap(null);
+            } else {
+                mPhoto.setImageBitmap(null);
+            }
+
             setVisibility(View.VISIBLE);
 
             if (mPhotoManager != null) {
-                mPhotoManager.loadPhoto(mPhoto, entry.photoUri);
+                if (mQuickContact != null){
+                    mPhotoManager.loadPhoto(mQuickContact, entry.photoUri);
+                } else {
+                    mPhotoManager.loadPhoto(mPhoto, entry.photoUri);
+                }
+
             } else {
                 Log.w(TAG, "contactPhotoManager not set");
             }
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 7f96906..30ba3b0 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -82,7 +82,6 @@
                 }
                 builder.appendQueryParameter(SearchSnippetColumns.SNIPPET_ARGS_PARAM_KEY,
                         SNIPPET_ARGS);
-                applyDataRestriction(builder);
                 loader.setUri(builder.build());
                 loader.setProjection(FILTER_PROJECTION);
             }
@@ -129,7 +128,6 @@
                     ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
                     .build();
         }
-        uri = applyDataRestriction(uri);
 
         // Include the user's personal profile.
         if (shouldIncludeProfile()) {
diff --git a/src/com/android/contacts/list/EmailAddressListAdapter.java b/src/com/android/contacts/list/EmailAddressListAdapter.java
index eae02b5..e1c8ea2 100644
--- a/src/com/android/contacts/list/EmailAddressListAdapter.java
+++ b/src/com/android/contacts/list/EmailAddressListAdapter.java
@@ -22,10 +22,9 @@
 import android.net.Uri;
 import android.net.Uri.Builder;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.ContactCounts;
 import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
@@ -75,7 +74,6 @@
         }
         builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                 String.valueOf(directoryId));
-        applyDataRestriction(builder);
         loader.setUri(builder.build());
         loader.setProjection(EMAILS_PROJECTION);
 
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index aabeebc..21a7846 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -90,7 +90,6 @@
 
             builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                     String.valueOf(directoryId));
-            applyDataRestriction(builder);
             uri = builder.build();
             // TODO a projection that includes the search snippet
             loader.setProjection(PHONES_PROJECTION);
@@ -101,7 +100,6 @@
             if (isSectionHeaderDisplayEnabled()) {
                 uri = buildSectionIndexerUri(uri);
             }
-            uri = applyDataRestriction(uri);
 
             loader.setProjection(PHONES_PROJECTION);
         }
diff --git a/src/com/android/contacts/list/PostalAddressListAdapter.java b/src/com/android/contacts/list/PostalAddressListAdapter.java
index 86d465a..5642045 100644
--- a/src/com/android/contacts/list/PostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/PostalAddressListAdapter.java
@@ -63,7 +63,6 @@
     @Override
     public void configureLoader(CursorLoader loader, long directoryId) {
         Uri uri = buildSectionIndexerUri(StructuredPostal.CONTENT_URI);
-        uri = applyDataRestriction(uri);
         loader.setUri(uri);
         loader.setProjection(POSTALS_PROJECTION);
 
diff --git a/src/com/android/contacts/list/StrequentContactListFragment.java b/src/com/android/contacts/list/StrequentContactListFragment.java
index 18edaea..00b3072 100644
--- a/src/com/android/contacts/list/StrequentContactListFragment.java
+++ b/src/com/android/contacts/list/StrequentContactListFragment.java
@@ -85,6 +85,10 @@
         mAdapter.setDisplayType(displayType);
     }
 
+    public void setQuickContact(boolean enableQuickContact) {
+        mAdapter.setQuickContact(enableQuickContact);
+    }
+
     /**
      * The listener for the strequent meta data loader.
      */
diff --git a/tests/src/com/android/contacts/ContactLoaderTest.java b/tests/src/com/android/contacts/ContactLoaderTest.java
index 0e0e2b0..d923bfa 100644
--- a/tests/src/com/android/contacts/ContactLoaderTest.java
+++ b/tests/src/com/android/contacts/ContactLoaderTest.java
@@ -279,8 +279,7 @@
                         RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, RawContacts.DIRTY,
                         RawContacts.VERSION, RawContacts.SOURCE_ID, RawContacts.SYNC1,
                         RawContacts.SYNC2, RawContacts.SYNC3, RawContacts.SYNC4,
-                        RawContacts.DELETED, RawContacts.IS_RESTRICTED,
-                        RawContacts.NAME_VERIFIED,
+                        RawContacts.DELETED, RawContacts.NAME_VERIFIED,
 
                         Contacts.Entity.DATA_ID,
 
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
index 8b8baae..353c2ec 100644
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
@@ -131,16 +131,16 @@
     }
 
     public void testSetPhoneCallDetails_CallTypeIcons() {
-        setPhoneCallDetailsWithCallType(Calls.INCOMING_TYPE, true);
+        setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE);
         assertCallTypeIconsEquals(TEST_INCOMING_DRAWABLE);
 
-        setPhoneCallDetailsWithCallType(Calls.OUTGOING_TYPE, true);
+        setPhoneCallDetailsWithCallTypeIcons(Calls.OUTGOING_TYPE);
         assertCallTypeIconsEquals(TEST_OUTGOING_DRAWABLE);
 
-        setPhoneCallDetailsWithCallType(Calls.MISSED_TYPE, true);
+        setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE);
         assertCallTypeIconsEquals(TEST_MISSED_DRAWABLE);
 
-        setPhoneCallDetailsWithCallType(Calls.VOICEMAIL_TYPE, true);
+        setPhoneCallDetailsWithCallTypeIcons(Calls.VOICEMAIL_TYPE);
         assertCallTypeIconsEquals(TEST_VOICEMAIL_DRAWABLE);
     }
 
@@ -148,16 +148,16 @@
         LocaleTestUtils localeTestUtils = new LocaleTestUtils(getContext());
         localeTestUtils.setLocale(Locale.US);
         try {
-            setPhoneCallDetailsWithCallType(Calls.INCOMING_TYPE, false);
+            setPhoneCallDetailsWithCallTypeText(Calls.INCOMING_TYPE);
             assertCallTypeTextEquals("Incoming call");
 
-            setPhoneCallDetailsWithCallType(Calls.OUTGOING_TYPE, false);
+            setPhoneCallDetailsWithCallTypeText(Calls.OUTGOING_TYPE);
             assertCallTypeTextEquals("Outgoing call");
 
-            setPhoneCallDetailsWithCallType(Calls.MISSED_TYPE, false);
+            setPhoneCallDetailsWithCallTypeText(Calls.MISSED_TYPE);
             assertCallTypeTextEquals("Missed call");
 
-            setPhoneCallDetailsWithCallType(Calls.VOICEMAIL_TYPE, false);
+            setPhoneCallDetailsWithCallTypeText(Calls.VOICEMAIL_TYPE);
             assertCallTypeTextEquals("Voicemail");
         } finally {
             localeTestUtils.restoreLocale();
@@ -203,21 +203,32 @@
     /** Sets the phone call details with default values and the given number. */
     private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) {
         mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(number, formattedNumber, Calls.INCOMING_TYPE, TEST_DATE),
+                new PhoneCallDetails(number, formattedNumber, new int[]{ Calls.INCOMING_TYPE },
+                        TEST_DATE),
                 false);
     }
 
     /** Sets the phone call details with default values and the given date. */
     private void setPhoneCallDetailsWithDate(long date) {
         mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, Calls.INCOMING_TYPE, date),
+                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER,
+                        new int[]{ Calls.INCOMING_TYPE }, date),
                 false);
     }
 
-    /** Sets the phone call details with default values and the given call type. */
-    private void setPhoneCallDetailsWithCallType(int callType, boolean useIcons) {
+    /** Sets the phone call details with default values and the given call types using icons. */
+    private void setPhoneCallDetailsWithCallTypeIcons(int... callTypes) {
+        setPhoneCallDetailsWithCallTypes(true, callTypes);
+    }
+
+    /** Sets the phone call details with default values and the given call types using text. */
+    private void setPhoneCallDetailsWithCallTypeText(int... callTypes) {
+        setPhoneCallDetailsWithCallTypes(false, callTypes);
+    }
+
+    private void setPhoneCallDetailsWithCallTypes(boolean useIcons, int... callTypes) {
         mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, callType, TEST_DATE),
+                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, callTypes, TEST_DATE),
                 useIcons);
     }
 }
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
index 2665c13..a8714b4 100644
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
@@ -86,35 +86,35 @@
         super.tearDown();
     }
 
-    public void testSetContactNumberOnly() {
+    public void testSetPhoneCallDetails() {
         setPhoneCallDetailsWithNumber("12125551234", "1-212-555-1234");
         assertEquals(View.VISIBLE, mViews.callView.getVisibility());
         assertEquals(TEST_CALL_DRAWABLE, mViews.callView.getDrawable());
     }
 
-    public void testSetContactNumberOnly_Unknown() {
+    public void testSetPhoneCallDetails_Unknown() {
         setPhoneCallDetailsWithNumber(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER);
         assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
     }
 
-    public void testSetContactNumberOnly_Private() {
+    public void testSetPhoneCallDetails_Private() {
         setPhoneCallDetailsWithNumber(CallerInfo.PRIVATE_NUMBER, CallerInfo.PRIVATE_NUMBER);
         assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
     }
 
-    public void testSetContactNumberOnly_Payphone() {
+    public void testSetPhoneCallDetails_Payphone() {
         setPhoneCallDetailsWithNumber(CallerInfo.PAYPHONE_NUMBER, CallerInfo.PAYPHONE_NUMBER);
         assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
     }
 
-    public void testSetContactNumberOnly_VoicemailNumber() {
+    public void testSetPhoneCallDetails_VoicemailNumber() {
         setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, TEST_VOICEMAIL_NUMBER);
         assertEquals(View.VISIBLE, mViews.callView.getVisibility());
         assertEquals(TEST_CALL_DRAWABLE, mViews.callView.getDrawable());
     }
 
-    public void testSetContactNumberOnly_Voicemail() {
-        setPhoneCallDetailsWithType(Calls.VOICEMAIL_TYPE);
+    public void testSetPhoneCallDetails_Voicemail() {
+        setPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
         assertEquals(View.VISIBLE, mViews.callView.getVisibility());
         assertEquals(TEST_PLAY_DRAWABLE, mViews.callView.getDrawable());
     }
@@ -122,13 +122,14 @@
     /** Sets the details of a phone call using the specified phone number. */
     private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) {
         mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(number, formattedNumber, Calls.INCOMING_TYPE, TEST_DATE),
+                new PhoneCallDetails(number, formattedNumber, new int[]{ Calls.INCOMING_TYPE },
+                        TEST_DATE),
                 true);
     }
 
     /** Sets the details of a phone call using the specified call type. */
-    private void setPhoneCallDetailsWithType(int type) {
+    private void setPhoneCallDetailsWithTypes(int... types) {
         mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, type, TEST_DATE), true);
+                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, types, TEST_DATE), true);
     }
 }
