Merge "Add the ActionBar trash and share icons."
diff --git a/res/drawable-hdpi/ic_add_contact_holo_dark.png b/res/drawable-hdpi/ic_add_contact_holo_dark.png
new file mode 100644
index 0000000..1190bf6
--- /dev/null
+++ b/res/drawable-hdpi/ic_add_contact_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_contact_holo_light.png b/res/drawable-hdpi/ic_add_contact_holo_light.png
new file mode 100644
index 0000000..c0c201e
--- /dev/null
+++ b/res/drawable-hdpi/ic_add_contact_holo_light.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_fav_quickcontact_holo_dark.png b/res/drawable-hdpi/ic_contacts_holo_dark.png
similarity index 100%
rename from res/drawable-hdpi/ic_fav_quickcontact_holo_dark.png
rename to res/drawable-hdpi/ic_contacts_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_add.png b/res/drawable-hdpi/sym_action_add.png
deleted file mode 100755
index 45a9ec5..0000000
--- a/res/drawable-hdpi/sym_action_add.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_view_contact.png b/res/drawable-hdpi/sym_action_view_contact.png
deleted file mode 100755
index 3a016ff..0000000
--- a/res/drawable-hdpi/sym_action_view_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_contact_holo_dark.png b/res/drawable-mdpi/ic_add_contact_holo_dark.png
new file mode 100644
index 0000000..9aadd04
--- /dev/null
+++ b/res/drawable-mdpi/ic_add_contact_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_contact_holo_light.png b/res/drawable-mdpi/ic_add_contact_holo_light.png
new file mode 100644
index 0000000..84ec510
--- /dev/null
+++ b/res/drawable-mdpi/ic_add_contact_holo_light.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_fav_quickcontact_holo_dark.png b/res/drawable-mdpi/ic_contacts_holo_dark.png
similarity index 100%
rename from res/drawable-mdpi/ic_fav_quickcontact_holo_dark.png
rename to res/drawable-mdpi/ic_contacts_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_add.png b/res/drawable-mdpi/sym_action_add.png
deleted file mode 100644
index af637b3..0000000
--- a/res/drawable-mdpi/sym_action_add.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_view_contact.png b/res/drawable-mdpi/sym_action_view_contact.png
deleted file mode 100644
index 118d8b3..0000000
--- a/res/drawable-mdpi/sym_action_view_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_contact_holo_dark.png b/res/drawable-xhdpi/ic_add_contact_holo_dark.png
new file mode 100644
index 0000000..2eac542
--- /dev/null
+++ b/res/drawable-xhdpi/ic_add_contact_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_contact_holo_light.png b/res/drawable-xhdpi/ic_add_contact_holo_light.png
new file mode 100644
index 0000000..578df30
--- /dev/null
+++ b/res/drawable-xhdpi/ic_add_contact_holo_light.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fav_quickcontact_holo_dark.png b/res/drawable-xhdpi/ic_contacts_holo_dark.png
similarity index 100%
rename from res/drawable-xhdpi/ic_fav_quickcontact_holo_dark.png
rename to res/drawable-xhdpi/ic_contacts_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_add.png b/res/drawable-xhdpi/sym_action_add.png
deleted file mode 100644
index 32f8e22..0000000
--- a/res/drawable-xhdpi/sym_action_add.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_view_contact.png b/res/drawable-xhdpi/sym_action_view_contact.png
deleted file mode 100644
index 2c14e56..0000000
--- a/res/drawable-xhdpi/sym_action_view_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml b/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
index f4c95f8..b8328ef 100644
--- a/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
+++ b/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
@@ -21,7 +21,8 @@
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@drawable/panel_content">
+    android:background="@color/background_primary"
+    android:padding="16dip">
 
     <!-- Placeholder for empty list -->
     <include
@@ -40,10 +41,7 @@
             android:scaleType="centerCrop"
             android:layout_width="@dimen/detail_contact_photo_size"
             android:layout_height="@dimen/detail_contact_photo_size"
-            android:layout_marginLeft="@dimen/detail_contact_photo_margin"
-            android:layout_marginRight="@dimen/detail_contact_photo_margin"
-            android:layout_marginTop="@dimen/detail_contact_photo_margin"
-            android:layout_marginBottom="@dimen/detail_contact_photo_margin"/>
+            android:layout_marginRight="@dimen/detail_contact_photo_margin"/>
 
         <ListView android:id="@android:id/list"
             android:layout_width="0dip"
diff --git a/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml b/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
index 1a1a3bb..dce00ac 100644
--- a/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
+++ b/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
@@ -24,8 +24,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:padding="20dip">
+    android:orientation="horizontal">
 
     <ImageView
         android:id="@+id/photo"
@@ -37,8 +36,8 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical"
-        android:paddingLeft="10dip"
-        android:paddingRight="10dip">
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip">
 
         <TextView
             android:id="@+id/name"
diff --git a/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml b/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
index 415bbbf..486b7c2 100644
--- a/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
+++ b/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
@@ -23,8 +23,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:paddingTop="20dip">
+    android:orientation="vertical">
 
     <TextView
         android:id="@+id/name"
diff --git a/res/layout-sw580dp/contact_detail_fragment.xml b/res/layout-sw580dp/contact_detail_fragment.xml
index cd559fe..c9dad2a 100644
--- a/res/layout-sw580dp/contact_detail_fragment.xml
+++ b/res/layout-sw580dp/contact_detail_fragment.xml
@@ -20,8 +20,7 @@
     android:id="@+id/contact_detail"
     android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/panel_content">
+    android:layout_height="match_parent">
 
     <!-- Placeholder for empty list -->
     <include
@@ -30,23 +29,12 @@
         android:visibility="gone" />
 
     <!-- Real list -->
-    <com.android.contacts.widget.InterpolatingLayout
+    <ListView android:id="@android:id/list"
         android:layout_width="match_parent"
-        android:layout_height="0px"
-        android:layout_weight="1">
-        <ListView android:id="@android:id/list"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            ex:layout_wideParentWidth="800dip"
-            ex:layout_wideMarginLeft="64dip"
-            ex:layout_widePaddingRight="48dip"
-            ex:layout_narrowParentWidth="300dip"
-            ex:layout_narrowMarginLeft="5dip"
-            ex:layout_narrowPaddingRight="16dip"
-            android:cacheColorHint="#00000000"
-            android:divider="@null"
-        />
-    </com.android.contacts.widget.InterpolatingLayout>
+        android:layout_height="match_parent"
+        android:cacheColorHint="#00000000"
+        android:divider="@null"
+    />
 
     <!-- "QuickFix"- button (Copy to local contact, add to group) -->
     <Button
diff --git a/res/layout-sw580dp/detail_header_contact_without_updates.xml b/res/layout-sw580dp/detail_header_contact_without_updates.xml
index 4ae31c8..04fbad9 100644
--- a/res/layout-sw580dp/detail_header_contact_without_updates.xml
+++ b/res/layout-sw580dp/detail_header_contact_without_updates.xml
@@ -22,8 +22,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:paddingTop="20dip">
+    android:orientation="vertical">
 
     <ImageView
         android:id="@+id/photo"
diff --git a/res/layout-sw580dp/people_activity.xml b/res/layout-sw580dp/people_activity.xml
index 87bb3b5..13adfa9 100644
--- a/res/layout-sw580dp/people_activity.xml
+++ b/res/layout-sw580dp/people_activity.xml
@@ -67,8 +67,10 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             ex:layout_narrowParentWidth="800dip"
+            ex:layout_narrowMarginLeft="0dip"
             ex:layout_narrowMarginRight="0dip"
             ex:layout_wideParentWidth="1280dip"
+            ex:layout_wideMarginLeft="0dip"
             ex:layout_wideMarginRight="0dip"
             ex:clipMarginLeft="0dip"
             ex:clipMarginTop="3dip"
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index 94bc072..a4de03f 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -59,42 +59,46 @@
     >
         <!-- The voicemail fragment will be put here. -->
     </LinearLayout>
-    <LinearLayout
+    <View
+        android:id="@+id/photo_text_bar"
         android:layout_width="match_parent"
-        android:layout_height="@dimen/call_detail_contact_background_overlay_height"
-        android:background="#3F000000"
+        android:layout_height="42dip"
+        android:background="#7F000000"
         android:layout_alignParentLeft="true"
         android:layout_alignBottom="@id/contact_background_sizer"
     />
+    <ImageView
+        android:id="@+id/main_action"
+        android:layout_width="wrap_content"
+        android:layout_height="0dip"
+        android:scaleType="center"
+        android:layout_alignRight="@id/photo_text_bar"
+        android:layout_alignBottom="@id/photo_text_bar"
+        android:layout_alignTop="@id/photo_text_bar"
+        android:layout_marginRight="@dimen/call_log_outer_margin"
+    />
     <RelativeLayout
-        android:id="@+id/contact_text"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/call_detail_contact_background_overlay_height"
-        android:layout_alignParentLeft="true"
-        android:layout_alignBottom="@id/contact_background_sizer"
-        android:paddingLeft="@dimen/call_detail_contact_name_margin"
+        android:layout_width="wrap_content"
+        android:layout_height="0dip"
+        android:layout_alignLeft="@id/photo_text_bar"
+        android:layout_alignTop="@id/photo_text_bar"
+        android:layout_toLeftOf="@id/main_action"
+        android:layout_alignBottom="@id/photo_text_bar"
+        android:layout_marginRight="@dimen/call_log_inner_margin"
+        android:layout_marginLeft="@dimen/call_detail_contact_name_margin"
     >
-        <ImageView
-            android:id="@+id/main_action"
-            android:layout_width="@dimen/call_log_call_action_size"
-            android:layout_height="match_parent"
-            android:gravity="center_vertical"
-            android:scaleType="center"
-            android:layout_alignParentRight="true"
-            android:layout_alignParentBottom="true"
-            android:layout_marginRight="@dimen/call_log_outer_margin"
-            android:layout_marginLeft="@dimen/call_log_inner_margin"
-        />
-        <RelativeLayout
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_alignParentLeft="true"
-            android:layout_toLeftOf="@id/main_action"
-            android:layout_alignParentBottom="true"
-        >
-            <include layout="@layout/call_log_phone_call_details" />
-        </RelativeLayout>
+        <include layout="@layout/call_log_phone_call_details" />
     </RelativeLayout>
+    <ImageButton
+        android:id="@+id/main_action_push_layer"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignLeft="@id/contact_background_sizer"
+        android:layout_alignTop="@id/contact_background_sizer"
+        android:layout_alignRight="@id/contact_background_sizer"
+        android:layout_alignBottom="@id/contact_background_sizer"
+        android:background="?android:attr/selectableItemBackground"
+    />
     <ListView
         android:id="@android:id/list"
         android:layout_width="match_parent"
diff --git a/res/layout/call_detail_history_item.xml b/res/layout/call_detail_history_item.xml
index 069ade9..b225369 100644
--- a/res/layout/call_detail_history_item.xml
+++ b/res/layout/call_detail_history_item.xml
@@ -22,7 +22,8 @@
     android:background="?attr/call_log_secondary_background_color"
     android:padding="@dimen/call_log_indent_margin"
 >
-    <FrameLayout
+    <view
+        class="com.android.contacts.calllog.CallTypeIconsView"
         android:id="@+id/call_type_icon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index a86d839..3b5601f 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -14,60 +14,41 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:padding="@dimen/call_log_inner_margin"
 >
     <!--
-        We have a nested FrameLayout because the margin attributes out the outer
-        layout are not used when this layout is inflated within a list.
+        This layout may represent either a call log item or one of the
+        headers in the call log.
 
-        TODO: Can we find a way to avoid the extra layer?
-     -->
-    <FrameLayout
+        The former will make the @id/call_log_item visible and the
+        @id/call_log_header gone.
+
+        The latter will make the @id/call_log_header visible and the
+        @id/call_log_item gone
+    -->
+
+    <RelativeLayout
+        android:id="@+id/call_log_item"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+    >
+        <include layout="@layout/call_log_contact_photo"/>
+        <include layout="@layout/call_log_action_call"/>
+        <include layout="@layout/call_log_list_item_layout"/>
+    </RelativeLayout>
+
+    <TextView
+        android:id="@+id/call_log_header_text"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginLeft="@dimen/call_log_inner_margin"
-        android:layout_marginRight="@dimen/call_log_inner_margin"
-        android:layout_marginTop="@dimen/call_log_inner_margin"
-        android:layout_marginBottom="@dimen/call_log_inner_margin"
-    >
-        <!--
-            This layout may represent either a call log item or one of the
-            headers in the call log.
-
-            The former will make the @id/call_log_item visible and the
-            @id/call_log_header gone.
-
-            The latter will make the @id/call_log_header visible and the
-            @id/call_log_item gone
-        -->
-
-        <RelativeLayout
-            android:id="@+id/call_log_item"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:gravity="center_vertical"
-        >
-            <include layout="@layout/call_log_contact_photo"/>
-            <include layout="@layout/call_log_action_call"/>
-            <include layout="@layout/call_log_list_item_layout"/>
-        </RelativeLayout>
-
-        <LinearLayout
-            android:id="@+id/call_log_header"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-        >
-            <TextView
-                android:id="@+id/call_log_header_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="@dimen/call_log_inner_margin"
-                android:textSize="14sp"
-                android:textStyle="bold"
-                android:textColor="?attr/call_log_header_color"
-            />
-        </LinearLayout>
-    </FrameLayout>
-</LinearLayout>
+        android:textSize="14sp"
+        android:textStyle="bold"
+        android:textColor="?attr/call_log_header_color"
+    />
+</FrameLayout>
diff --git a/res/layout/call_log_phone_call_details.xml b/res/layout/call_log_phone_call_details.xml
index 5a4131e..4d12a1d 100644
--- a/res/layout/call_log_phone_call_details.xml
+++ b/res/layout/call_log_phone_call_details.xml
@@ -45,13 +45,13 @@
             android:layout_height="wrap_content"
             android:orientation="horizontal"
         >
-            <LinearLayout
+            <view
+                class="com.android.contacts.calllog.CallTypeIconsView"
                 android:id="@+id/call_type_icons"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginRight="@dimen/call_log_icon_margin"
                 android:layout_gravity="center_vertical"
-                android:orientation="horizontal"
             />
             <TextView
                 android:id="@+id/call_type_name"
diff --git a/res/layout/contact_detail_container.xml b/res/layout/contact_detail_container.xml
index 0b5b85a..3991e5c 100644
--- a/res/layout/contact_detail_container.xml
+++ b/res/layout/contact_detail_container.xml
@@ -26,13 +26,14 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:background="@color/background_primary"
+    android:padding="16dip">
 
     <android.support.v4.view.ViewPager
         android:id="@+id/pager"
         android:layout_alignParentTop="true"
         android:layout_alignParentLeft="true"
-        android:paddingTop="20dip"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
 
@@ -42,10 +43,7 @@
         android:layout_alignParentTop="true"
         android:layout_alignParentLeft="true"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="20dip"
-        android:paddingLeft="10dip"
-        android:paddingRight="10dip"/>
+        android:layout_height="wrap_content"/>
 
     <fragment
         android:id="@+id/contact_detail_fragment"
diff --git a/res/layout/create_new_contact.xml b/res/layout/create_new_contact.xml
index 2c36017..2edaf3e 100644
--- a/res/layout/create_new_contact.xml
+++ b/res/layout/create_new_contact.xml
@@ -31,7 +31,7 @@
             android:layout_marginLeft="5dip"
             android:layout_marginRight="11dip"
             android:focusable="false"
-            android:src="@*android:drawable/sym_action_add"
+            android:src="@drawable/ic_add_contact_holo_light"
             android:scaleType="fitCenter"
             />
     <TextView android:id="@+id/title"
diff --git a/res/layout/quickcontact_photo_container.xml b/res/layout/quickcontact_photo_container.xml
index b18fddc..7df54d9 100644
--- a/res/layout/quickcontact_photo_container.xml
+++ b/res/layout/quickcontact_photo_container.xml
@@ -32,11 +32,10 @@
             android:layout_alignBottom="@id/photo"
             android:layout_alignLeft="@id/photo"
             android:layout_alignRight="@id/photo"
-            android:alpha="0.5"
-            android:background="@android:color/black" />
+            android:background="#7F000000" />
         <ImageButton
             android:id="@+id/open_details_button"
-            android:src="@drawable/ic_fav_quickcontact_holo_dark"
+            android:src="@drawable/ic_contacts_holo_dark"
             android:background="?android:attr/selectableItemBackground"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
diff --git a/res/values-sw580dp/dimens.xml b/res/values-sw580dp/dimens.xml
index 4de6bb7..a10d234 100644
--- a/res/values-sw580dp/dimens.xml
+++ b/res/values-sw580dp/dimens.xml
@@ -22,7 +22,7 @@
     <dimen name="editor_round_button_padding_right">8dip</dimen>
     <dimen name="editor_field_top_padding">12dip</dimen>
     <dimen name="editor_field_bottom_padding">12dip</dimen>
-    <dimen name="detail_item_side_margin">19dip</dimen>
+    <dimen name="detail_item_side_margin">0dip</dimen>
     <dimen name="contact_name_text_size">26sp</dimen>
     <dimen name="action_bar_filter_min_width">120dip</dimen>
     <dimen name="action_bar_filter_max_width">120dip</dimen>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 2ca8512..79d12f9 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -97,11 +97,6 @@
         <attr name="list_item_header_underline_color" format="color" />
     </declare-styleable>
 
-    <declare-styleable name="CallDetailActivity">
-        <attr name="call_detail_transparent_background" format="color" />
-        <attr name="call_detail_contact_background_overlay_alpha" format="float" />
-    </declare-styleable>
-
     <declare-styleable name="CallLog">
         <attr name="call_log_primary_text_color" format="color" />
         <attr name="call_log_primary_background_color" format="color" />
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index cbac941..569f00b 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -116,7 +116,7 @@
     <dimen name="detail_update_section_internal_padding">16dip</dimen>
 
     <!-- Margin around the contact's photo on the contact card -->
-    <dimen name="detail_contact_photo_margin">15dip</dimen>
+    <dimen name="detail_contact_photo_margin">16dip</dimen>
 
     <!-- Width and height of the contact photo on the contact detail page -->
     <dimen name="detail_contact_photo_size">256dip</dimen>
@@ -219,7 +219,6 @@
     <dimen name="call_log_indent_margin">24dip</dimen>
     <dimen name="call_log_list_contact_photo_size">64dip</dimen>
     <dimen name="call_detail_contact_background_height">174dip</dimen>
-    <dimen name="call_detail_contact_background_overlay_height">42dip</dimen>
     <dimen name="call_detail_contact_name_margin">24dip</dimen>
     <dimen name="call_detail_action_bar_height">60dip</dimen>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 9fd4cb0..e267a19 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -61,8 +61,6 @@
     <style name="CallDetailActivityTheme" parent="android:Theme.Holo">
         <item name="android:windowBackground">@android:color/black</item>
         <item name="android:gravity">top</item>
-        <item name="call_detail_transparent_background">#CC000000</item>
-        <item name="call_detail_contact_background_overlay_alpha">0.25</item>
         <!-- CallLog -->
         <item name="call_log_primary_text_color">#FFFFFF</item>
         <item name="call_log_primary_background_color">#000000</item>
@@ -292,8 +290,7 @@
     </style>
 
     <style name="ContactTileStarredShadowBox">
-        <item name="android:alpha">0.5</item>
-        <item name="android:background">@android:color/black</item>
+        <item name="android:background">#7F000000</item>
     </style>
 
     <style name="DialtactsActionBarStyle" parent="android:Widget.Holo.ActionBar">
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index 3fdfe38..d0eb817 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -51,6 +51,7 @@
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
+import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
@@ -82,6 +83,7 @@
     private PhoneNumberHelper mPhoneNumberHelper;
     private PhoneCallDetailsHelper mPhoneCallDetailsHelper;
     private ImageView mMainActionView;
+    private ImageButton mMainActionPushLayerView;
     private ImageView mContactBackgroundView;
 
     private String mNumber = null;
@@ -144,7 +146,7 @@
         mResources = getResources();
 
         mPhoneCallDetailsViews = PhoneCallDetailsViews.fromView(getWindow().getDecorView());
-        mCallTypeHelper = new CallTypeHelper(getResources(), mInflater);
+        mCallTypeHelper = new CallTypeHelper(getResources());
         mPhoneNumberHelper = new PhoneNumberHelper(mResources, getVoicemailNumber());
         mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(mResources, mCallTypeHelper,
                 mPhoneNumberHelper);
@@ -154,6 +156,7 @@
         mStatusMessageText = (TextView) findViewById(R.id.voicemail_status_message);
         mStatusMessageAction = (TextView) findViewById(R.id.voicemail_status_action);
         mMainActionView = (ImageView) findViewById(R.id.main_action);
+        mMainActionPushLayerView = (ImageButton) findViewById(R.id.main_action_push_layer);
         mContactBackgroundView = (ImageView) findViewById(R.id.contact_background);
         mDefaultCountryIso = ContactsUtils.getCurrentCountryIso(this);
         mContactPhotoManager = ContactPhotoManager.getInstance(this);
@@ -287,7 +290,7 @@
         if (details[0].personId != -1) {
             Uri personUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, personId);
             mainActionIntent = new Intent(Intent.ACTION_VIEW, personUri);
-            mainActionIcon = R.drawable.sym_action_view_contact;
+            mainActionIcon = R.drawable.ic_contacts_holo_dark;
         } else if (isVoicemailNumber) {
             mainActionIntent = null;
             mainActionIcon = 0;
@@ -307,7 +310,7 @@
             mainActionIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
             mainActionIntent.setType(Contacts.CONTENT_ITEM_TYPE);
             mainActionIntent.putExtra(Insert.PHONE, mNumber);
-            mainActionIcon = R.drawable.sym_action_add;
+            mainActionIcon = R.drawable.ic_add_contact_holo_dark;
         } else {
             // If we cannot call the number, when we probably cannot add it as a contact either.
             // This is usually the case of private, unknown, or payphone numbers.
@@ -317,10 +320,12 @@
 
         if (mainActionIntent == null) {
             mMainActionView.setVisibility(View.INVISIBLE);
+            mMainActionPushLayerView.setVisibility(View.GONE);
         } else {
             mMainActionView.setVisibility(View.VISIBLE);
             mMainActionView.setImageResource(mainActionIcon);
-            mMainActionView.setOnClickListener(new View.OnClickListener() {
+            mMainActionPushLayerView.setVisibility(View.VISIBLE);
+            mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                     startActivity(mainActionIntent);
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index f312a5d..8cdd0d0 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -61,10 +61,10 @@
     public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details,
             boolean useIcons, boolean isHighlighted, boolean nameOnly) {
         if (useIcons) {
-            views.callTypeIcons.removeAllViews();
+            views.callTypeIcons.clear();
             int count = details.callTypes.length;
             for (int index = 0; index < count && index < MAX_CALL_TYPE_ICONS; ++index) {
-                mCallTypeHelper.inflateCallTypeIcon(details.callTypes[index], views.callTypeIcons);
+                views.callTypeIcons.add(details.callTypes[index]);
             }
             views.callTypeIcons.setVisibility(View.VISIBLE);
             if (count > MAX_CALL_TYPE_ICONS) {
@@ -77,14 +77,13 @@
                 views.callTypeSeparator.setVisibility(View.GONE);
             }
         } else {
-            String 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(
                     isHighlighted ? mCallTypeHelper.getHighlightedCallTypeText(callType)
                             : mCallTypeHelper.getCallTypeText(callType));
-            views.callTypeIcons.removeAllViews();
+            views.callTypeIcons.clear();
 
             views.callTypeText.setVisibility(View.VISIBLE);
             views.callTypeSeparator.setVisibility(View.VISIBLE);
diff --git a/src/com/android/contacts/PhoneCallDetailsViews.java b/src/com/android/contacts/PhoneCallDetailsViews.java
index 19e931f..c07e337 100644
--- a/src/com/android/contacts/PhoneCallDetailsViews.java
+++ b/src/com/android/contacts/PhoneCallDetailsViews.java
@@ -16,9 +16,10 @@
 
 package com.android.contacts;
 
+import com.android.contacts.calllog.CallTypeIconsView;
+
 import android.content.Context;
 import android.view.View;
-import android.widget.LinearLayout;
 import android.widget.TextView;
 
 /**
@@ -27,14 +28,15 @@
 public final class PhoneCallDetailsViews {
     public final TextView nameView;
     public final View callTypeView;
-    public final LinearLayout callTypeIcons;
+    public final CallTypeIconsView callTypeIcons;
     public final TextView callTypeText;
     public final View callTypeSeparator;
     public final TextView dateView;
     public final TextView numberView;
 
-    private PhoneCallDetailsViews(TextView nameView, View callTypeView, LinearLayout callTypeIcons,
-            TextView callTypeText, View callTypeSeparator, TextView dateView, TextView numberView) {
+    private PhoneCallDetailsViews(TextView nameView, View callTypeView,
+            CallTypeIconsView callTypeIcons, TextView callTypeText, View callTypeSeparator,
+            TextView dateView, TextView numberView) {
         this.nameView = nameView;
         this.callTypeView = callTypeView;
         this.callTypeIcons = callTypeIcons;
@@ -54,7 +56,7 @@
     public static PhoneCallDetailsViews fromView(View view) {
         return new PhoneCallDetailsViews((TextView) view.findViewById(R.id.name),
                 view.findViewById(R.id.call_type),
-                (LinearLayout) view.findViewById(R.id.call_type_icons),
+                (CallTypeIconsView) view.findViewById(R.id.call_type_icons),
                 (TextView) view.findViewById(R.id.call_type_name),
                 view.findViewById(R.id.call_type_separator),
                 (TextView) view.findViewById(R.id.date),
@@ -65,7 +67,7 @@
         return new PhoneCallDetailsViews(
                 new TextView(context),
                 new View(context),
-                new LinearLayout(context),
+                new CallTypeIconsView(context),
                 new TextView(context),
                 new View(context),
                 new TextView(context),
diff --git a/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java b/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java
index 26275af..3e3ba36 100644
--- a/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java
@@ -64,19 +64,20 @@
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         // Make sure we have a valid convertView to start with
-        if (convertView == null) {
-            convertView = mLayoutInflater.inflate(R.layout.call_detail_history_item, parent, false);
-        }
+        final View result  = convertView == null
+                ? mLayoutInflater.inflate(R.layout.call_detail_history_item, parent, false)
+                : convertView;
 
         PhoneCallDetails details = mPhoneCallDetails[position];
-        FrameLayout callTypeIconView = (FrameLayout) convertView.findViewById(R.id.call_type_icon);
-        TextView callTypeTextView = (TextView) convertView.findViewById(R.id.call_type_text);
-        TextView dateView = (TextView) convertView.findViewById(R.id.date);
-        TextView durationView = (TextView) convertView.findViewById(R.id.duration);
+        CallTypeIconsView callTypeIconView =
+                (CallTypeIconsView) result.findViewById(R.id.call_type_icon);
+        TextView callTypeTextView = (TextView) result.findViewById(R.id.call_type_text);
+        TextView dateView = (TextView) result.findViewById(R.id.date);
+        TextView durationView = (TextView) result.findViewById(R.id.duration);
 
         int callType = details.callTypes[0];
-        callTypeIconView.removeAllViews();
-        mCallTypeHelper.inflateCallTypeIcon(callType, callTypeIconView);
+        callTypeIconView.clear();
+        callTypeIconView.add(callType);
         callTypeTextView.setText(mCallTypeHelper.getCallTypeText(callType));
         // Set the date.
         CharSequence dateValue = DateUtils.formatDateRange(mContext, details.date, details.date,
@@ -91,7 +92,7 @@
             durationView.setText(formatDuration(details.duration));
         }
 
-        return convertView;
+        return result;
     }
 
     private String formatDuration(long elapsedSeconds) {
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index abc9adf..0999b44 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -313,11 +313,7 @@
             mPreDrawListener = null;
 
             Resources resources = getResources();
-            LayoutInflater layoutInflater = getActivity().getLayoutInflater();
-            CallTypeHelper callTypeHelper = new CallTypeHelper(resources, layoutInflater);
-            Drawable callDrawable = resources.getDrawable(R.drawable.ic_dial_action_call);
-            Drawable playDrawable = resources.getDrawable(
-                    R.drawable.ic_call_log_list_action_play);
+            CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
 
             mContactPhotoManager = ContactPhotoManager.getInstance(getActivity());
             mPhoneNumberHelper = new PhoneNumberHelper(getResources(), mVoiceMailNumber);
@@ -678,7 +674,7 @@
             if (section == CallLogQuery.SECTION_NEW_HEADER
                     || section == CallLogQuery.SECTION_OLD_HEADER) {
                 views.listItemView.setVisibility(View.GONE);
-                views.listHeaderView.setVisibility(View.VISIBLE);
+                views.listHeaderTextView.setVisibility(View.VISIBLE);
                 views.listHeaderTextView.setText(
                         section == CallLogQuery.SECTION_NEW_HEADER
                                 ? R.string.call_log_new_header
@@ -688,7 +684,7 @@
             }
             // Default case: an item in the call log.
             views.listItemView.setVisibility(View.VISIBLE);
-            views.listHeaderView.setVisibility(View.GONE);
+            views.listHeaderTextView.setVisibility(View.GONE);
 
             final String number = c.getString(CallLogQuery.NUMBER);
             final long date = c.getLong(CallLogQuery.DATE);
diff --git a/src/com/android/contacts/calllog/CallLogListItemViews.java b/src/com/android/contacts/calllog/CallLogListItemViews.java
index 90f78f7..368a868 100644
--- a/src/com/android/contacts/calllog/CallLogListItemViews.java
+++ b/src/com/android/contacts/calllog/CallLogListItemViews.java
@@ -45,14 +45,12 @@
     public final PhoneCallDetailsViews phoneCallDetailsViews;
     /** The item view for a stand-alone row, or null for other types of rows. */
     public final View listItemView;
-    /** The header view for a stand-alone row, or null for other types of rows. */
-    public final View listHeaderView;
     /** The text of the header in a stand-alone row, or null for other types of rows. */
     public final TextView listHeaderTextView;
 
     private CallLogListItemViews(QuickContactBadge quickContactView, ImageView photoView,
             View callView, View playView, View unheardView, View dividerView,
-            PhoneCallDetailsViews phoneCallDetailsViews, View listItemView, View listHeaderView,
+            PhoneCallDetailsViews phoneCallDetailsViews, View listItemView,
             TextView listHeaderTextView) {
         this.quickContactView = quickContactView;
         this.plainPhotoView = photoView;
@@ -62,7 +60,6 @@
         this.dividerView = dividerView;
         this.phoneCallDetailsViews = phoneCallDetailsViews;
         this.listItemView = listItemView;
-        this.listHeaderView = listHeaderView;
         this.listHeaderTextView = listHeaderTextView;
     }
 
@@ -76,7 +73,6 @@
                 view.findViewById(R.id.divider),
                 PhoneCallDetailsViews.fromView(view),
                 view.findViewById(R.id.call_log_item),
-                view.findViewById(R.id.call_log_header),
                 (TextView) view.findViewById(R.id.call_log_header_text));
     }
 
@@ -90,7 +86,6 @@
                 new View(context),
                 PhoneCallDetailsViews.createForTest(context),
                 new View(context),
-                new View(context),
                 new TextView(context));
     }
 }
diff --git a/src/com/android/contacts/calllog/CallTypeHelper.java b/src/com/android/contacts/calllog/CallTypeHelper.java
index 465e2bf..d27d4f9 100644
--- a/src/com/android/contacts/calllog/CallTypeHelper.java
+++ b/src/com/android/contacts/calllog/CallTypeHelper.java
@@ -25,16 +25,11 @@
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
 import android.text.style.StyleSpan;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
 
 /**
  * Helper class to perform operations related to call types.
  */
 public class CallTypeHelper {
-    /** Used to create the views for the call types. */
-    private final LayoutInflater mLayoutInflater;
     /** Name used to identify incoming calls. */
     private final CharSequence mIncomingName;
     /** Name used to identify outgoing calls. */
@@ -48,8 +43,7 @@
     /** Name used to identify new voicemail calls. */
     private final CharSequence mNewVoicemailName;
 
-    public CallTypeHelper(Resources resources, LayoutInflater layoutInflater) {
-        mLayoutInflater = layoutInflater;
+    public CallTypeHelper(Resources resources) {
         // Cache these values so that we do not need to look them up each time.
         mIncomingName = resources.getString(R.string.type_incoming);
         mOutgoingName = resources.getString(R.string.type_outgoing);
@@ -103,26 +97,6 @@
         }
     }
 
-    /** Returns a new view for the icon to be used to represent a given call type. */
-    public View inflateCallTypeIcon(int callType, ViewGroup root) {
-        switch (callType) {
-            case Calls.INCOMING_TYPE:
-                return mLayoutInflater.inflate(R.layout.call_log_incoming_call_icon, root);
-
-            case Calls.OUTGOING_TYPE:
-                return mLayoutInflater.inflate(R.layout.call_log_outgoing_call_icon, root);
-
-            case Calls.MISSED_TYPE:
-                return mLayoutInflater.inflate(R.layout.call_log_missed_call_icon, root);
-
-            case Calls.VOICEMAIL_TYPE:
-                return mLayoutInflater.inflate(R.layout.call_log_voicemail_icon, root);
-
-            default:
-                throw new IllegalArgumentException("invalid call type: " + callType);
-        }
-    }
-
     /** Creates a SpannableString for the given text which is bold and in the given color. */
     private CharSequence addBoldAndColor(CharSequence text, int color) {
         int flags = Spanned.SPAN_INCLUSIVE_INCLUSIVE;
diff --git a/src/com/android/contacts/calllog/CallTypeIconsView.java b/src/com/android/contacts/calllog/CallTypeIconsView.java
new file mode 100644
index 0000000..4fbe7d7
--- /dev/null
+++ b/src/com/android/contacts/calllog/CallTypeIconsView.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.calllog;
+
+import com.android.contacts.R;
+import com.google.common.collect.Lists;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.provider.CallLog.Calls;
+import android.util.AttributeSet;
+import android.view.View;
+
+import java.util.List;
+
+/**
+ * View that draws one or more symbols for different types of calls (missed calls, outgoing etc).
+ * The symbols are set up horizontally. As this view doesn't create subviews, it is better suited
+ * for ListView-recycling that a regular LinearLayout using ImageViews.
+ */
+public class CallTypeIconsView extends View {
+    private List<Integer> mCallTypes = Lists.newArrayListWithCapacity(3);
+    private Resources mResources;
+    private int mWidth;
+    private int mHeight;
+
+    public CallTypeIconsView(Context context) {
+        this(context, null);
+    }
+
+    public CallTypeIconsView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mResources = new Resources(context);
+    }
+
+    public void clear() {
+        mCallTypes.clear();
+        mWidth = 0;
+        mHeight = 0;
+        invalidate();
+    }
+
+    public void add(int callType) {
+        mCallTypes.add(callType);
+
+        final Drawable drawable = getCallTypeDrawable(callType);
+        mWidth += drawable.getIntrinsicWidth() + mResources.iconMargin;
+        mHeight = Math.max(mHeight, drawable.getIntrinsicHeight());
+        invalidate();
+    }
+
+    public int getCount() {
+        return mCallTypes.size();
+    }
+
+    public int getCallType(int index) {
+        return mCallTypes.get(index);
+    }
+
+    private Drawable getCallTypeDrawable(int callType) {
+        switch (callType) {
+            case Calls.INCOMING_TYPE:
+                return mResources.incoming;
+            case Calls.OUTGOING_TYPE:
+                return mResources.outgoing;
+            case Calls.MISSED_TYPE:
+                return mResources.missed;
+            case Calls.VOICEMAIL_TYPE:
+                return mResources.voicemail;
+            default:
+                throw new IllegalArgumentException("invalid call type: " + callType);
+        }
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        setMeasuredDimension(mWidth, mHeight);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        int left = 0;
+        for (Integer callType : mCallTypes) {
+            final Drawable drawable = getCallTypeDrawable(callType);
+            final int right = left + drawable.getIntrinsicWidth();
+            drawable.setBounds(left, 0, right, drawable.getIntrinsicHeight());
+            drawable.draw(canvas);
+            left = right + mResources.iconMargin;
+        }
+    }
+
+    private static class Resources {
+        public final Drawable incoming;
+        public final Drawable outgoing;
+        public final Drawable missed;
+        public final Drawable voicemail;
+        public final int iconMargin;
+
+        public Resources(Context context) {
+            final android.content.res.Resources r = context.getResources();
+            incoming = r.getDrawable(R.drawable.ic_call_incoming_holo_dark);
+            outgoing = r.getDrawable(R.drawable.ic_call_outgoing_holo_dark);
+            missed = r.getDrawable(R.drawable.ic_call_missed_holo_dark);
+            voicemail = r.getDrawable(R.drawable.ic_call_voicemail_holo_dark);
+            iconMargin = r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 2c64d8f..5850a4a 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -236,7 +236,7 @@
 
     @Override
     public int getCount() {
-        if (mContactCursor == null || mContactCursor.getCount() == 0) {
+        if (mContactCursor == null) {
             return 0;
         }
 
@@ -458,30 +458,15 @@
             for (int columnCounter = 0; columnCounter < columnCount; columnCounter++) {
                 ContactEntry entry =
                         columnCounter < list.size() ? list.get(columnCounter) : null;
-                        addTileFromEntry(entry, columnCounter);
-                }
+                addTileFromEntry(entry, columnCounter);
             }
+        }
 
         private void addTileFromEntry(ContactEntry entry, int tileIndex) {
             final ContactTileView contactTile;
 
             if (getChildCount() <= tileIndex) {
-                switch (mItemViewType) {
-                    case ViewTypes.STARRED_WITH_SECONDARY_ACTION:
-                        contactTile = (ContactTileSecondaryTargetView)
-                                inflate(mContext, mLayoutResId, null);
-                        break;
-                    case ViewTypes.STARRED:
-                        contactTile =
-                                (ContactTileStarredView) inflate(mContext, mLayoutResId, null);
-                        break;
-                    case ViewTypes.FREQUENT:
-                        contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
-                        break;
-                    default:
-                        throw new IllegalStateException(
-                                "Unrecognized ViewType " + mItemViewType);
-                }
+                contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
                 contactTile.setLayoutParams(new LinearLayout.LayoutParams(0,
                         LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));
                 contactTile.setPhotoManager(mPhotoManager);
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index aee34c9..4dfa876 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -52,7 +52,6 @@
 
     public ContactTileView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        setLayerType(View.LAYER_TYPE_HARDWARE, null);
     }
 
     @Override
diff --git a/src/com/android/contacts/model/ExternalAccountType.java b/src/com/android/contacts/model/ExternalAccountType.java
index caf311b..e5af8f8 100644
--- a/src/com/android/contacts/model/ExternalAccountType.java
+++ b/src/com/android/contacts/model/ExternalAccountType.java
@@ -23,6 +23,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
@@ -74,6 +75,7 @@
     private int mInviteActionLabelResId;
     private String mAccountTypeLabelAttribute;
     private String mAccountTypeIconAttribute;
+    private boolean mInitSuccessful;
 
     public ExternalAccountType(Context context, String resPackageName) {
         this.resPackageName = resPackageName;
@@ -81,17 +83,18 @@
 
         // Handle unknown sources by searching their package
         final PackageManager pm = context.getPackageManager();
-        final Intent syncAdapter = new Intent(ACTION_SYNC_ADAPTER);
-        final List<ResolveInfo> matches = pm.queryIntentServices(syncAdapter,
-                PackageManager.GET_META_DATA);
-        for (ResolveInfo info : matches) {
-            ServiceInfo serviceInfo = info.serviceInfo;
-            if (serviceInfo.packageName.equals(resPackageName)) {
+        try {
+            PackageInfo packageInfo = pm.getPackageInfo(resPackageName,
+                    PackageManager.GET_SERVICES|PackageManager.GET_META_DATA);
+            for (ServiceInfo serviceInfo : packageInfo.services) {
                 final XmlResourceParser parser = serviceInfo.loadXmlMetaData(pm,
                         METADATA_CONTACTS);
                 if (parser == null) continue;
                 inflate(context, parser);
             }
+        } catch (NameNotFoundException nnfe) {
+            // If the package name is not found, we can't initialize this account type.
+            return;
         }
 
         mExtensionPackageNames = new ArrayList<String>();
@@ -107,6 +110,9 @@
         addDataKindDisplayName(context);
         addDataKindPhoneticName(context);
         addDataKindPhoto(context);
+
+        // If we reach this point, the account type has been successfully initialized.
+        mInitSuccessful = true;
     }
 
     @Override
@@ -114,6 +120,14 @@
         return true;
     }
 
+    /**
+     * Whether this account type was able to be fully initialized.  This may be false if
+     * (for example) the package name associated with the account type could not be found.
+     */
+    public boolean isInitialized() {
+        return mInitSuccessful;
+    }
+
     @Override
     public String getEditContactActivityClassName() {
         return mEditContactActivityClassName;
diff --git a/src/com/android/contacts/quickcontact/FloatingChildLayout.java b/src/com/android/contacts/quickcontact/FloatingChildLayout.java
index 62b4f1a..5358aca 100644
--- a/src/com/android/contacts/quickcontact/FloatingChildLayout.java
+++ b/src/com/android/contacts/quickcontact/FloatingChildLayout.java
@@ -158,7 +158,7 @@
         final int scaleInterpolator = isExitAnimation ? android.R.interpolator.accelerate_quint
                 : android.R.interpolator.decelerate_quint;
         animator.setInterpolator(AnimationUtils.loadInterpolator(getContext(), scaleInterpolator));
-        final float scaleTarget = isExitAnimation ? 0.7f : 1.0f;
+        final float scaleTarget = isExitAnimation ? 0.5f : 1.0f;
         animator.scaleX(scaleTarget);
         animator.scaleY(scaleTarget);
         animator.alpha(isExitAnimation ? 0.0f : 1.0f);
diff --git a/src/com/android/contacts/socialwidget/SocialWidgetProvider.java b/src/com/android/contacts/socialwidget/SocialWidgetProvider.java
index 4686c81..ee41332 100644
--- a/src/com/android/contacts/socialwidget/SocialWidgetProvider.java
+++ b/src/com/android/contacts/socialwidget/SocialWidgetProvider.java
@@ -202,7 +202,7 @@
         sb.setSpan(sizeSpan, 0, name.length(), 0);
         sb.setSpan(styleSpan, 0, name.length(), 0);
 
-        if (streamItems.isEmpty()) {
+        if (streamItems == null || streamItems.isEmpty()) {
             views.setTextViewText(R.id.name, sb);
             views.setViewVisibility(R.id.name, View.VISIBLE);
             views.setViewVisibility(R.id.name_and_snippet, View.GONE);
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
index 8feca19..1e5d879 100644
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
@@ -25,7 +25,6 @@
 import android.content.res.Resources;
 import android.provider.CallLog.Calls;
 import android.test.AndroidTestCase;
-import android.view.LayoutInflater;
 import android.view.View;
 
 import java.util.GregorianCalendar;
@@ -59,9 +58,7 @@
         super.setUp();
         Context context = getContext();
         Resources resources = context.getResources();
-        LayoutInflater layoutInflater =
-                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        CallTypeHelper callTypeHelper = new CallTypeHelper(resources, layoutInflater);
+        CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
         mPhoneNumberHelper = new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
         mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, mPhoneNumberHelper);
         mViews = PhoneCallDetailsViews.createForTest(context);
@@ -128,25 +125,30 @@
 
     public void testSetPhoneCallDetails_CallTypeIcons() {
         setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE);
-        assertCallTypeIconsEquals(R.id.call_log_incoming_call_icon);
+        assertCallTypeIconsEquals(Calls.INCOMING_TYPE);
 
         setPhoneCallDetailsWithCallTypeIcons(Calls.OUTGOING_TYPE);
-        assertCallTypeIconsEquals(R.id.call_log_outgoing_call_icon);
+        assertCallTypeIconsEquals(Calls.OUTGOING_TYPE);
 
         setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE);
-        assertCallTypeIconsEquals(R.id.call_log_missed_call_icon);
+        assertCallTypeIconsEquals(Calls.MISSED_TYPE);
 
         setPhoneCallDetailsWithCallTypeIcons(Calls.VOICEMAIL_TYPE);
-        assertCallTypeIconsEquals(R.id.call_log_voicemail_icon);
+        assertCallTypeIconsEquals(Calls.VOICEMAIL_TYPE);
     }
 
     public void testSetPhoneCallDetails_MultipleCallTypeIcons() {
         setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallTypeIconsEquals(R.id.call_log_incoming_call_icon,
-                R.id.call_log_outgoing_call_icon);
+        assertCallTypeIconsEquals(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
 
         setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE, Calls.MISSED_TYPE);
-        assertCallTypeIconsEquals(R.id.call_log_missed_call_icon, R.id.call_log_missed_call_icon);
+        assertCallTypeIconsEquals(Calls.MISSED_TYPE, Calls.MISSED_TYPE);
+    }
+
+    public void testSetPhoneCallDetails_MultipleCallTypeIconsLastOneDropped() {
+        setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE, Calls.MISSED_TYPE,
+                Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
+        assertCallTypeIconsEquals(Calls.MISSED_TYPE, Calls.MISSED_TYPE, Calls.INCOMING_TYPE);
     }
 
     public void testSetPhoneCallDetails_CallTypeText() {
@@ -222,10 +224,10 @@
 
     /** Asserts that the call type contains the images with the given drawables. */
     private void assertCallTypeIconsEquals(int... ids) {
-        assertEquals(ids.length, mViews.callTypeIcons.getChildCount());
+        assertEquals(ids.length, mViews.callTypeIcons.getCount());
         for (int index = 0; index < ids.length; ++index) {
             int id = ids[index];
-            assertEquals(id, mViews.callTypeIcons.getChildAt(index).getId());
+            assertEquals(id, mViews.callTypeIcons.getCallType(index));
         }
         assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
         assertEquals(View.GONE, mViews.callTypeText.getVisibility());
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
index 79ebf4d..4628b8e 100644
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
@@ -24,7 +24,6 @@
 import android.content.res.Resources;
 import android.provider.CallLog.Calls;
 import android.test.AndroidTestCase;
-import android.view.LayoutInflater;
 import android.view.View;
 
 /**
@@ -56,9 +55,7 @@
         super.setUp();
         Context context = getContext();
         Resources resources = context.getResources();
-        LayoutInflater layoutInflater =
-                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        CallTypeHelper callTypeHelper = new CallTypeHelper(resources, layoutInflater);
+        CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
         mPhoneNumberHelper = new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
         PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
                 resources, callTypeHelper, mPhoneNumberHelper);