Merge "Background tasks can decide which executor to run with."
diff --git a/res/layout-sw580dp/aggregation_suggestions_item.xml b/res/layout-sw580dp/aggregation_suggestions_item.xml
deleted file mode 100644
index 5ea8347..0000000
--- a/res/layout-sw580dp/aggregation_suggestions_item.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2010, 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.editor.AggregationSuggestionView"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:paddingLeft="5dip"
-    android:paddingRight="15dip"
-    android:background="?android:attr/selectableItemBackground"
-    android:focusable="true"
->
-    <ImageView
-        android:id="@+id/aggregation_suggestion_photo"
-        android:layout_width="@dimen/aggregation_suggestion_icon_size"
-        android:layout_height="@dimen/aggregation_suggestion_icon_size"
-        android:layout_alignParentLeft="true"
-        android:layout_centerInParent="true"
-        android:layout_marginTop="4dip"
-        android:scaleType="fitCenter"
-    />
-
-    <TextView
-        android:id="@+id/aggregation_suggestion_name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/aggregation_suggestion_photo"
-        android:layout_marginLeft="10dip"
-        android:layout_marginTop="4dip"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:textColor="?android:attr/textColorSecondary"
-    />
-
-    <TextView
-        android:id="@+id/aggregation_suggestion_data"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/aggregation_suggestion_photo"
-        android:layout_below="@id/aggregation_suggestion_name"
-        android:layout_marginLeft="10dip"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:textColor="?android:attr/textColorSecondary"
-    />
-</view>
diff --git a/res/layout/account_selector_list_item.xml b/res/layout/account_selector_list_item.xml
index 82b73da..a700866 100644
--- a/res/layout/account_selector_list_item.xml
+++ b/res/layout/account_selector_list_item.xml
@@ -22,7 +22,7 @@
         android:layout_width="@dimen/detail_network_icon_size"
         android:layout_height="@dimen/detail_network_icon_size"
         android:layout_margin="8dip"
-        android:layout_gravity="center_vertical"/>
+        android:layout_gravity="center_vertical" />
 
     <LinearLayout
         android:layout_width="0dip"
diff --git a/res/layout/aggregation_suggestions_item.xml b/res/layout/aggregation_suggestions_item.xml
index 9ed1bf3..188a26e 100644
--- a/res/layout/aggregation_suggestions_item.xml
+++ b/res/layout/aggregation_suggestions_item.xml
@@ -21,42 +21,34 @@
     class="com.android.contacts.editor.AggregationSuggestionView"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:paddingLeft="5dip"
-    android:paddingRight="15dip"
+    android:minHeight="48dip"
+    android:paddingLeft="8dip"
     android:background="?android:attr/selectableItemBackground"
-    android:focusable="true"
->
+    android:orientation="horizontal">
+
+    <LinearLayout
+        android:layout_width="0px"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:layout_gravity="center_vertical">
+        <TextView
+            android:id="@+id/aggregation_suggestion_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+        <TextView
+            android:id="@+id/aggregation_suggestion_data"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="?android:attr/textColorSecondary" />
+    </LinearLayout>
 
     <ImageView
         android:id="@+id/aggregation_suggestion_photo"
-        android:layout_width="@dimen/aggregation_suggestion_icon_size"
-        android:layout_height="@dimen/aggregation_suggestion_icon_size"
-        android:layout_alignParentLeft="true"
-        android:layout_centerInParent="true"
-        android:layout_marginTop="4dip"
+        android:layout_width="48dip"
+        android:layout_height="48dip"
         android:scaleType="fitCenter"
-    />
-
-    <TextView
-        android:id="@+id/aggregation_suggestion_name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/aggregation_suggestion_photo"
-        android:layout_marginLeft="10dip"
-        android:layout_marginTop="4dip"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="?android:attr/textColorSecondary"
-    />
-
-    <TextView
-        android:id="@+id/aggregation_suggestion_data"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/aggregation_suggestion_photo"
-        android:layout_below="@id/aggregation_suggestion_name"
-        android:layout_marginLeft="10dip"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="?android:attr/textColorSecondary"
-    />
+        android:layout_gravity="center_vertical" />
 </view>
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index 987a787..08b283a 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -16,10 +16,12 @@
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:ex="http://schemas.android.com/apk/res/com.android.contacts"
+    android:id="@+id/call_detail"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="horizontal"
     android:gravity="top"
+    android:visibility="gone"
 >
     <FrameLayout
         android:id="@+id/voicemail_status"
@@ -48,7 +50,6 @@
             android:layout_height="0dip"
             android:adjustViewBounds="true"
             android:scaleType="centerCrop"
-            android:background="@drawable/ic_contact_picture"
         />
     </view>
     <LinearLayout
@@ -109,21 +110,87 @@
         android:layout_alignBottom="@id/contact_background_sizer"
         android:background="?android:attr/selectableItemBackground"
     />
-    <ListView
-        android:id="@android:id/list"
+    <FrameLayout android:id="@+id/call_and_sms_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/voicemail_container"
         android:layout_marginTop="@dimen/call_log_icon_margin"
-        android:background="?attr/call_log_primary_background_color"
-    />
+    >
+        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/call_and_sms"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/call_log_list_item_height"
+            android:orientation="horizontal"
+            android:layout_marginTop="@dimen/call_log_icon_margin"
+            android:gravity="center_vertical"
+            android:background="@drawable/dialpad_background"
+        >
+
+            <LinearLayout android:id="@+id/call_and_sms_main_action"
+                android:layout_width="0dip"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:paddingLeft="@dimen/call_log_indent_margin"
+                android:orientation="vertical"
+                android:gravity="center_vertical"
+                android:focusable="true"
+                android:background="@drawable/btn_dial"
+            >
+
+                <TextView android:id="@+id/call_and_sms_text1"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="?android:attr/textAppearanceLarge"
+                />
+
+                <LinearLayout android:id="@+id/call_and_sms_line2"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                >
+                    <TextView android:id="@+id/call_and_sms_label"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginRight="5dip"
+                        android:textAppearance="?android:attr/textAppearanceSmall"
+                        android:textStyle="bold"
+                    />
+
+                    <TextView android:id="@+id/call_and_sms_number"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textAppearance="?android:attr/textAppearanceSmall"
+                    />
+                </LinearLayout>
+
+            </LinearLayout>
+
+            <View android:id="@+id/call_and_sms_divider"
+                android:layout_width="1px"
+                android:layout_height="32dip"
+                android:background="@drawable/ic_divider_dashed_holo_dark"
+                android:layout_gravity="center_vertical"
+            />
+
+            <ImageView android:id="@+id/call_and_sms_icon"
+                android:layout_width="@color/call_log_voicemail_highlight_color"
+                android:layout_height="match_parent"
+                android:paddingLeft="@dimen/call_log_inner_margin"
+                android:paddingRight="@dimen/call_log_outer_margin"
+                android:gravity="center"
+                android:scaleType="centerInside"
+                android:focusable="true"
+                android:background="@drawable/btn_dial"
+            />
+        </LinearLayout>
+    </FrameLayout>
     <ListView
         android:id="@+id/history"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="@dimen/call_log_icon_margin"
         android:layout_alignParentLeft="true"
-        android:layout_below="@android:id/list"
+        android:layout_below="@id/call_and_sms_container"
         android:background="@android:color/black"
     />
 </RelativeLayout>
diff --git a/res/layout/call_detail_list_item.xml b/res/layout/call_detail_list_item.xml
deleted file mode 100644
index e2bf83c..0000000
--- a/res/layout/call_detail_list_item.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/call_log_list_item_height"
-    android:orientation="horizontal"
-    android:layout_marginTop="@dimen/call_log_icon_margin"
-    android:gravity="center_vertical"
-    android:background="@drawable/dialpad_background"
->
-
-    <LinearLayout android:id="@+id/main_action"
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:paddingLeft="@dimen/call_log_indent_margin"
-        android:orientation="vertical"
-        android:gravity="center_vertical"
-        android:focusable="true"
-        android:background="@drawable/btn_dial"
-    >
-
-        <TextView android:id="@android:id/text1"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-        />
-
-
-        <LinearLayout android:id="@+id/line2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-        >
-            <TextView android:id="@+id/label"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginRight="5dip"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-                android:textStyle="bold"
-            />
-
-            <TextView android:id="@+id/number"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-            />
-        </LinearLayout>
-
-    </LinearLayout>
-
-    <View android:id="@+id/divider"
-        android:layout_width="1px"
-        android:layout_height="32dip"
-        android:background="@drawable/ic_divider_dashed_holo_dark"
-        android:layout_gravity="center_vertical"
-    />
-
-    <ImageView android:id="@+id/icon"
-        android:layout_width="@color/call_log_voicemail_highlight_color"
-        android:layout_height="match_parent"
-        android:paddingLeft="@dimen/call_log_inner_margin"
-        android:paddingRight="@dimen/call_log_outer_margin"
-        android:gravity="center"
-        android:scaleType="centerInside"
-        android:focusable="true"
-        android:background="@drawable/btn_dial"
-    />
-
-</LinearLayout>
diff --git a/res/layout/contacts_list_content.xml b/res/layout/contacts_list_content.xml
index 567e63d..f98d751 100644
--- a/res/layout/contacts_list_content.xml
+++ b/res/layout/contacts_list_content.xml
@@ -41,14 +41,17 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:minHeight="@dimen/contact_filter_header_min_height"
-            android:layout_marginLeft="8dip"
             android:singleLine="true"
             android:ellipsize="end"
-            android:gravity="left"
+            android:textStyle="bold"
+            android:gravity="left|center_vertical"
+            android:textAllCaps="true"
+            android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
             android:textAppearance="?android:attr/textAppearanceSmall"
             android:textColor="?android:attr/textColorSecondary" />
         <View
             android:id="@+id/account_filter_header_bottom_divider"
+            android:layout_height="1dip"
             style="@style/SectionDivider" />
     </LinearLayout>
 
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
index e9a95ee..1f74c26 100644
--- a/res/layout/dialpad.xml
+++ b/res/layout/dialpad.xml
@@ -19,13 +19,18 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/dialpad"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="0px"
+    android:layout_weight="0.650"
     android:layout_gravity="center_horizontal"
-    android:layout_marginTop="4dip"
-    android:background="@drawable/dialpad_background"
-    android:layout_weight="1">
+    android:layout_marginTop="@dimen/dialpad_vertical_margin"
+    android:paddingLeft="5dip"
+    android:paddingRight="5dip"
+    android:paddingBottom="10dip"
+    android:background="@drawable/dialpad_background">
 
-    <TableRow>
+    <TableRow
+         android:layout_height="0px"
+         android:layout_weight="1">
         <ImageButton android:id="@+id/one" style="@style/DialtactsDialpadButtonStyle"
             android:src="@drawable/dial_num_1"
             android:contentDescription="@string/description_image_button_one" />
@@ -37,7 +42,9 @@
             android:contentDescription="@string/description_image_button_three" />
     </TableRow>
 
-    <TableRow>
+    <TableRow
+         android:layout_height="0px"
+         android:layout_weight="1">
         <ImageButton android:id="@+id/four" style="@style/DialtactsDialpadButtonStyle"
             android:src="@drawable/dial_num_4"
             android:contentDescription="@string/description_image_button_four" />
@@ -49,7 +56,9 @@
             android:contentDescription="@string/description_image_button_six" />
     </TableRow>
 
-    <TableRow>
+    <TableRow
+         android:layout_height="0px"
+         android:layout_weight="1">
         <ImageButton android:id="@+id/seven" style="@style/DialtactsDialpadButtonStyle"
             android:src="@drawable/dial_num_7"
             android:contentDescription="@string/description_image_button_seven" />
@@ -61,7 +70,9 @@
             android:contentDescription="@string/description_image_button_nine" />
     </TableRow>
 
-    <TableRow>
+    <TableRow
+         android:layout_height="0px"
+         android:layout_weight="1">
         <ImageButton android:id="@+id/star" style="@style/DialtactsDialpadButtonStyle"
             android:src="@drawable/dial_num_star"
             android:contentDescription="@string/description_image_button_star" />
@@ -71,6 +82,5 @@
         <ImageButton android:id="@+id/pound" style="@style/DialtactsDialpadButtonStyle"
             android:src="@drawable/dial_num_pound"
             android:contentDescription="@string/description_image_button_pound" />
-
     </TableRow>
 </TableLayout>
diff --git a/res/layout/dialpad_additional_buttons.xml b/res/layout/dialpad_additional_buttons.xml
index 47a578e..a5e247b 100644
--- a/res/layout/dialpad_additional_buttons.xml
+++ b/res/layout/dialpad_additional_buttons.xml
@@ -18,11 +18,10 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/dialpadAdditionalButtons"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/dialpad_additional_buttons_height"
+    android:layout_height="0px"
+    android:layout_weight="0.150"
     android:layout_gravity="center_horizontal"
-    android:layout_marginTop="4dip"
-    android:layout_marginBottom="4dip"
-    android:layout_weight="0.25"
+    android:layout_marginTop="@dimen/dialpad_vertical_margin"
     android:background="@drawable/dialpad_background"
     android:orientation="horizontal">
 
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index 864dcc7..90d2593 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -19,15 +19,16 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    android:paddingLeft="4dip"
-    android:paddingRight="4dip">
+    android:paddingLeft="@dimen/dialpad_horizontal_margin"
+    android:paddingRight="@dimen/dialpad_horizontal_margin">
 
     <!-- Text field and possibly soft menu button above the keypad where
          the digits are displayed. -->
     <RelativeLayout
         android:layout_width="match_parent"
-        android:layout_height="@dimen/dialpad_digits_height"
-        android:layout_marginTop="4dip"
+        android:layout_height="0px"
+        android:layout_weight="0.200"
+        android:layout_marginTop="@dimen/dialpad_vertical_margin"
         android:gravity="center" >
 
         <!-- Type of this EditText is set to NULL (to disable the IME keyboard)
@@ -45,10 +46,11 @@
             android:textColor="?android:attr/textColorPrimary" />
 
         <ImageButton android:id="@+id/overflow_menu"
-            android:layout_width="wrap_content"
+            android:layout_width="48dip"
             android:layout_height="match_parent"
             android:layout_alignParentRight="true"
-            android:src="@drawable/ic_menu_overflow" />
+            android:src="@drawable/ic_menu_overflow"
+            android:background="@android:color/transparent"/>
 
     </RelativeLayout>
 
diff --git a/res/layout/edit_field_list.xml b/res/layout/edit_field_list.xml
index ba715c7..d46828b 100644
--- a/res/layout/edit_field_list.xml
+++ b/res/layout/edit_field_list.xml
@@ -23,4 +23,4 @@
     android:layout_weight="1"
     android:layout_height="wrap_content"
     android:paddingLeft="@dimen/editor_field_left_padding"
-    android:orientation="vertical" />
\ No newline at end of file
+    android:orientation="vertical" />
diff --git a/res/layout/edit_field_list_with_anchor_view.xml b/res/layout/edit_field_list_with_anchor_view.xml
new file mode 100644
index 0000000..fa69a5c
--- /dev/null
+++ b/res/layout/edit_field_list_with_anchor_view.xml
@@ -0,0 +1,35 @@
+<?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.
+-->
+
+<!-- Layout that behaves similarly to edit_field_list.xml,
+     but also has an anchor view for ListPopupWindow -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="0dip"
+    android:layout_height="wrap_content"
+    android:layout_weight="1"
+    android:paddingLeft="@dimen/editor_field_left_padding"
+    android:orientation="vertical">
+    <LinearLayout
+         android:id="@+id/editors"
+         android:layout_width="match_parent"
+         android:layout_height="wrap_content"
+         android:orientation="vertical" />
+    <View
+         android:id="@+id/anchor_view"
+         android:layout_width="match_parent"
+         android:layout_height="0px" />
+</LinearLayout>
diff --git a/res/layout/raw_contact_editor_view.xml b/res/layout/raw_contact_editor_view.xml
index b98f4fb..af95e04 100644
--- a/res/layout/raw_contact_editor_view.xml
+++ b/res/layout/raw_contact_editor_view.xml
@@ -66,13 +66,6 @@
 
         </LinearLayout>
 
-        <ViewStub android:id="@+id/aggregation_suggestion_stub"
-            android:inflatedId="@+id/aggregation_suggestion"
-            android:layout="@layout/aggregation_suggestions"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:visibility="visible"/>
-
         <LinearLayout
             android:id="@+id/sect_fields"
             android:layout_width="match_parent"
diff --git a/res/layout/structured_name_editor_view.xml b/res/layout/structured_name_editor_view.xml
index 196b079..3c5d5c9 100644
--- a/res/layout/structured_name_editor_view.xml
+++ b/res/layout/structured_name_editor_view.xml
@@ -34,8 +34,7 @@
         android:clickable="true">
 
         <include
-            android:id="@+id/editors"
-            layout="@layout/edit_field_list" />
+            layout="@layout/edit_field_list_with_anchor_view" />
 
         <include
             android:id="@+id/expansion_view_container"
diff --git a/res/layout/text_fields_editor_view.xml b/res/layout/text_fields_editor_view.xml
index e63b7da..e187a9e 100644
--- a/res/layout/text_fields_editor_view.xml
+++ b/res/layout/text_fields_editor_view.xml
@@ -31,8 +31,7 @@
         android:clickable="true">
 
         <include
-            android:id="@+id/editors"
-            layout="@layout/edit_field_list" />
+            layout="@layout/edit_field_list_with_anchor_view" />
 
         <include
             android:id="@+id/expansion_view_container"
diff --git a/res/layout/user_profile_button.xml b/res/layout/user_profile_button.xml
index b7b5e1d..4937d7b 100644
--- a/res/layout/user_profile_button.xml
+++ b/res/layout/user_profile_button.xml
@@ -19,9 +19,10 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="?android:attr/selectableItemBackground"
-    android:paddingLeft="@dimen/contact_browser_list_left_margin"
     android:singleLine="true"
     android:text="@string/profile_display_name"
     android:ellipsize="end"
+    android:minHeight="@dimen/contact_browser_list_item_photo_size"
     android:gravity="left|center_vertical"
+    android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
     android:textAppearance="?android:attr/textAppearanceMedium" />
diff --git a/res/layout/user_profile_header.xml b/res/layout/user_profile_header.xml
index ae803ba..7c82ea4 100644
--- a/res/layout/user_profile_header.xml
+++ b/res/layout/user_profile_header.xml
@@ -16,7 +16,7 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:background="@color/contact_browser_list_bk_color"
+    android:paddingTop="@dimen/contact_browser_list_top_margin"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="wrap_content" >
@@ -30,14 +30,14 @@
             android:id="@+id/profile_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginLeft="@dimen/contact_browser_list_left_margin"
             android:singleLine="true"
             android:text="@string/user_profile_contacts_list_header"
             android:textStyle="bold"
             android:ellipsize="end"
-            android:gravity="left"
+            android:gravity="left|center_vertical"
             android:layout_weight="1"
-            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
             android:textColor="@color/people_app_theme_color" />
 
         <TextView
@@ -46,15 +46,15 @@
             android:layout_height="wrap_content"
             android:singleLine="true"
             android:ellipsize="end"
-            android:layout_gravity="right"
-            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:layout_gravity="right|center_vertical"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textSize="12dip"
             android:textColor="@color/contact_count_text_color" />
     </LinearLayout>
 
     <View
         android:background="@color/people_app_theme_color"
-        android:layout_marginLeft="@dimen/contact_browser_list_left_margin"
         android:layout_width="match_parent"
-        android:layout_height="1px" />
+        android:layout_height="1dip" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/values-long/dimens.xml b/res/values-long/dimens.xml
deleted file mode 100644
index af51d4c..0000000
--- a/res/values-long/dimens.xml
+++ /dev/null
@@ -1,20 +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.
--->
-<resources>
-    <dimen name="dialpad_digits_height">80dip</dimen>
-    <dimen name="dialpad_additional_buttons_height">58dip</dimen>
-    <dimen name="dialpad_button_height">70dip</dimen>
-</resources>
diff --git a/res/values-sw580dp/dimens.xml b/res/values-sw580dp/dimens.xml
index f7c0f05..91842d6 100644
--- a/res/values-sw580dp/dimens.xml
+++ b/res/values-sw580dp/dimens.xml
@@ -14,7 +14,6 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="aggregation_suggestion_icon_size">64dip</dimen>
     <dimen name="editor_padding_top">32dip</dimen>
     <dimen name="editor_type_label_width">122dip</dimen>
     <dimen name="editor_field_spinner_text_size">15sp</dimen>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 4d4050e..0f7b62d 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -96,6 +96,8 @@
         <attr name="list_item_header_underline_height" format="dimension" />
         <attr name="list_item_header_underline_color" format="color" />
         <attr name="list_item_contacts_count_text_color" format="color" />
+        <attr name="list_item_text_indent" format="dimension" />
+        <attr name="list_item_contacts_count_text_size" format="dimension" />
     </declare-styleable>
 
     <declare-styleable name="CallLog">
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 6e6cadb..a277124 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -88,7 +88,7 @@
 
     <!-- Colors in the contact browser list -->
     <color name="contact_browser_list_bk_color">#EEEEEE</color>
-    <color name="contact_count_text_color">#777777</color>
+    <color name="contact_count_text_color">#AAAAAA</color>
 
     <!-- Color of the text of the tab carousel in the contact details  -->
     <color name="detail_tab_carousel_tab_label_color">#EEEEEE</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d5f3b69..69441fd 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -21,8 +21,6 @@
     <dimen name="contact_shortcut_frame_width">50dip</dimen>
     <dimen name="contact_shortcut_frame_height">56dip</dimen>
 
-    <dimen name="aggregation_suggestion_icon_size">40dip</dimen>
-
     <dimen name="account_selector_popup_width">400dip</dimen>
 
     <dimen name="photo_action_popup_width">400dip</dimen>
@@ -196,14 +194,15 @@
     <dimen name="group_editor_member_list_height">550dip</dimen>
 
     <!-- Height of edit text in dialpad fragment -->
-    <dimen name="dialpad_digits_height">67dip</dimen>
-    <dimen name="dialpad_digits_text_size">33sp</dimen>
-    <dimen name="dialpad_additional_buttons_height">50dip</dimen>
-    <dimen name="dialpad_button_height">50dip</dimen>
+    <dimen name="dialpad_horizontal_margin">4dip</dimen>
+    <dimen name="dialpad_vertical_margin">2dip</dimen>
+    <dimen name="dialpad_digits_text_size">35sp</dimen>
+
     <!-- Just used in landscape mode -->
-    <dimen name="dialpad_digits_margin_top">1dip</dimen>
-    <!-- Just used in landscape mode -->
-    <dimen name="dialpad_digits_margin_bottom">50dip</dimen>
+    <dimen name="dialpad_button_height">0px</dimen>
+    <dimen name="dialpad_digits_height">0px</dimen>
+    <dimen name="dialpad_digits_margin_top">0px</dimen>
+    <dimen name="dialpad_digits_margin_bottom">0px</dimen>
 
     <!-- Width of search view in action bar.  Use 0dip for MATCH_PARENT -->
     <dimen name="search_view_width">0dip</dimen>
@@ -213,8 +212,10 @@
     <dimen name="contact_browser_list_header_right_margin">@dimen/list_visible_scrollbar_padding</dimen>
     <dimen name="contact_browser_list_left_margin">16dip</dimen>
     <dimen name="contact_browser_list_right_margin">0dip</dimen>
+    <dimen name="contact_browser_list_item_photo_size">64dip</dimen>
+    <dimen name="contact_browser_list_item_text_indent">8dip</dimen>
 
-    <dimen name="contact_browser_list_top_margin">0dip</dimen>
+    <dimen name="contact_browser_list_top_margin">8dip</dimen>
     <dimen name="contacts_count_right_margin">40dip</dimen>
 
     <!--  ContactTile Layouts -->
@@ -249,4 +250,5 @@
 
     <!-- Height for directory headers in contact lists -->
     <dimen name="directory_header_height">24dip</dimen>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f20f6c3..eaf6ab8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1729,6 +1729,34 @@
     -->
     <string name="description_call_log_voicemail">Voicemail</string>
 
+    <!-- String describing the button to add a contact for the current number.
+
+        Note: AccessibilityServices use this attribute to announce what the view represents.
+              This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_add_contact">Add contact</string>
+
+    <!-- String describing the button to view the contact for the current number.
+
+        Note: AccessibilityServices use this attribute to announce what the view represents.
+              This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_view_contact">View contact <xliff:g id="name">%1$s</xliff:g></string>
+
+    <!-- String describing the button to call a number or contact.
+
+        Note: AccessibilityServices use this attribute to announce what the view represents.
+              This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_call">Call <xliff:g id="name">%1$s</xliff:g></string>
+
+    <!-- String describing the button to SMS a number or contact.
+
+        Note: AccessibilityServices use this attribute to announce what the view represents.
+              This is especially valuable for views without textual representation like ImageView.
+    -->
+    <string name="description_send_text_message">Send text message to <xliff:g id="name">%1$s</xliff:g></string>
+
     <!-- String describing the icon in the call log used to represent an unheard voicemail left to
          the user.
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 763a600..e6cad61 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -24,7 +24,7 @@
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">32dip</item>
-        <item name="list_item_divider">@drawable/list_item_divider</item>
+        <item name="list_item_divider">?android:attr/listDivider</item>
         <item name="list_item_padding_top">0dip</item>
         <item name="list_item_padding_right">0dip</item>
         <item name="list_item_padding_bottom">0dip</item>
@@ -35,16 +35,17 @@
         <item name="list_item_vertical_divider_margin">5dip</item>
         <item name="list_item_presence_icon_margin">4dip</item>
         <item name="list_item_presence_icon_size">16dip</item>
-        <item name="list_item_photo_size">56dip</item>
+        <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
         <item name="list_item_profile_photo_size">70dip</item>
         <item name="list_item_prefix_highlight_color">#729a27</item>
-        <item name="list_item_header_text_indent">4dip</item>
+        <item name="list_item_header_text_indent">8dip</item>
         <item name="list_item_header_text_color">@color/people_app_theme_color</item>
         <item name="list_item_header_text_size">12sp</item>
         <item name="list_item_header_height">24dip</item>
         <item name="list_item_header_underline_height">1px</item>
         <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
         <item name="contact_filter_popup_width">320dip</item>
+        <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
         <!-- CallLog -->
         <item name="call_log_primary_text_color">#FFFFFF</item>
         <item name="call_log_primary_background_color">#000000</item>
@@ -129,7 +130,7 @@
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">24dip</item>
-        <item name="list_item_divider">@drawable/list_item_divider</item>
+        <item name="list_item_divider">?android:attr/listDivider</item>
         <item name="list_item_padding_top">0dip</item>
         <item name="list_item_padding_right">0dip</item>
         <item name="list_item_padding_bottom">0dip</item>
@@ -140,17 +141,20 @@
         <item name="list_item_vertical_divider_margin">5dip</item>
         <item name="list_item_presence_icon_margin">4dip</item>
         <item name="list_item_presence_icon_size">16dip</item>
-        <item name="list_item_photo_size">56dip</item>
+        <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
         <item name="list_item_profile_photo_size">70dip</item>
         <item name="list_item_prefix_highlight_color">#729a27</item>
-        <item name="list_item_header_text_indent">4dip</item>
+        <item name="list_item_header_text_indent">@dimen/contact_browser_list_item_text_indent</item>
         <item name="list_item_header_text_color">@color/people_app_theme_color</item>
-        <item name="list_item_header_text_size">12sp</item>
+        <item name="list_item_header_text_size">14dip</item>
         <item name="list_item_header_height">26dip</item>
-        <item name="list_item_header_underline_height">1px</item>
+        <item name="list_item_header_underline_height">1dip</item>
         <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
         <item name="list_item_contacts_count_text_color">@color/contact_count_text_color</item>
         <item name="contact_filter_popup_width">320dip</item>
+        <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+        <item name="list_item_contacts_count_text_size">12dip</item>
+        list_item_contacts_count_text_size
         <!-- Favorites -->
         <item name="favorites_padding_bottom">0dip</item>
     </style>
@@ -173,7 +177,7 @@
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">32dip</item>
-        <item name="list_item_divider">@drawable/list_item_divider</item>
+        <item name="list_item_divider">?android:attr/listDivider</item>
         <item name="list_item_padding_top">4dip</item>
         <item name="list_item_padding_right">11dip</item>
         <item name="list_item_padding_bottom">4dip</item>
@@ -183,7 +187,7 @@
         <item name="list_item_call_button_padding">14dip</item>
         <item name="list_item_vertical_divider_margin">5dip</item>
         <item name="list_item_presence_icon_margin">5dip</item>
-        <item name="list_item_photo_size">56dip</item>
+        <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
         <item name="list_item_profile_photo_size">70dip</item>
         <item name="list_item_prefix_highlight_color">#729a27</item>
         <item name="list_item_header_text_indent">56dip</item>
@@ -194,7 +198,7 @@
 
     <style name="ContactPickerTheme" parent="@android:Theme.Holo.Light">
         <item name="section_header_background">@drawable/section_header</item>
-        <item name="list_item_divider">@drawable/list_item_divider</item>
+        <item name="list_item_divider">?android:attr/listDivider</item>
         <item name="list_item_padding_top">4dip</item>
         <item name="list_item_padding_right">11dip</item>
         <item name="list_item_padding_bottom">4dip</item>
@@ -204,7 +208,7 @@
         <item name="list_item_call_button_padding">14dip</item>
         <item name="list_item_vertical_divider_margin">5dip</item>
         <item name="list_item_presence_icon_margin">5dip</item>
-        <item name="list_item_photo_size">56dip</item>
+        <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
         <item name="list_item_profile_photo_size">70dip</item>
         <item name="list_item_prefix_highlight_color">#729a27</item>
         <item name="list_item_header_text_indent">56dip</item>
@@ -276,7 +280,7 @@
 
     <style name="DialtactsDialpadButtonStyle">
         <item name="android:layout_width">0dip</item>
-        <item name="android:layout_height">@dimen/dialpad_button_height</item>
+        <item name="android:layout_height">match_parent</item>
         <item name="android:layout_weight">1</item>
         <item name="android:background">@drawable/btn_dial</item>
         <item name="android:soundEffectsEnabled">false</item>
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index 662485a..14b38b9 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -28,7 +28,7 @@
 import com.android.contacts.voicemail.VoicemailStatusHelperImpl;
 
 import android.app.ActionBar;
-import android.app.ListActivity;
+import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -55,15 +55,12 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -72,7 +69,7 @@
  * This activity can be either started with the URI of a single call log entry, or with the
  * {@link #EXTRA_CALL_LOG_IDS} extra to specify a group of call log entries.
  */
-public class CallDetailActivity extends ListActivity {
+public class CallDetailActivity extends Activity {
     private static final String TAG = "CallDetail";
 
     /** A long array extra containing ids of call log entries to display. */
@@ -143,6 +140,20 @@
     static final int COLUMN_INDEX_NORMALIZED_NUMBER = 5;
     static final int COLUMN_INDEX_PHOTO_URI = 6;
 
+    private final View.OnClickListener mPrimaryActionListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View view) {
+            startActivity(((ViewEntry) view.getTag()).primaryIntent);
+        }
+    };
+
+    private final View.OnClickListener mSecondaryActionListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View view) {
+            startActivity(((ViewEntry) view.getTag()).secondaryIntent);
+        }
+    };
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -323,14 +334,25 @@
                 // contact from this number.
                 final Intent mainActionIntent;
                 final int mainActionIcon;
+                final String mainActionDescription;
+
+                final CharSequence nameOrNumber;
+                if (!TextUtils.isEmpty(firstDetails.name)) {
+                    nameOrNumber = firstDetails.name;
+                } else {
+                    nameOrNumber = firstDetails.number;
+                }
 
                 if (firstDetails.personId != -1) {
                     Uri personUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, personId);
                     mainActionIntent = new Intent(Intent.ACTION_VIEW, personUri);
                     mainActionIcon = R.drawable.ic_contacts_holo_dark;
+                    mainActionDescription =
+                            getString(R.string.description_view_contact, nameOrNumber);
                 } else if (isVoicemailNumber) {
                     mainActionIntent = null;
                     mainActionIcon = 0;
+                    mainActionDescription = null;
                 } else if (isSipNumber) {
                     // TODO: This item is currently disabled for SIP addresses, because
                     // the Insert.PHONE extra only works correctly for PSTN numbers.
@@ -343,16 +365,19 @@
                     // and then we can remove the "!isSipNumber" check above.
                     mainActionIntent = null;
                     mainActionIcon = 0;
+                    mainActionDescription = null;
                 } else if (canPlaceCallsTo) {
                     mainActionIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                     mainActionIntent.setType(Contacts.CONTENT_ITEM_TYPE);
                     mainActionIntent.putExtra(Insert.PHONE, mNumber);
                     mainActionIcon = R.drawable.ic_add_contact_holo_dark;
+                    mainActionDescription = getString(R.string.description_add_contact);
                 } 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.
                     mainActionIntent = null;
                     mainActionIcon = 0;
+                    mainActionDescription = null;
                 }
 
                 if (mainActionIntent == null) {
@@ -368,11 +393,9 @@
                             startActivity(mainActionIntent);
                         }
                     });
+                    mMainActionPushLayerView.setContentDescription(mainActionDescription);
                 }
 
-                // Build list of various available actions.
-                final List<ViewEntry> actions = new ArrayList<ViewEntry>();
-
                 // This action allows to call the number that places the call.
                 if (canPlaceCallsTo) {
                     final CharSequence displayNumber =
@@ -381,7 +404,8 @@
 
                     ViewEntry entry = new ViewEntry(
                             getString(R.string.menu_callNumber, displayNumber),
-                            new Intent(Intent.ACTION_CALL_PRIVILEGED, numberCallUri));
+                            new Intent(Intent.ACTION_CALL_PRIVILEGED, numberCallUri),
+                            getString(R.string.description_call, nameOrNumber));
 
                     // Only show a label if the number is shown and it is not a SIP address.
                     if (!TextUtils.isEmpty(firstDetails.number)
@@ -393,30 +417,26 @@
                     // The secondary action allows to send an SMS to the number that placed the
                     // call.
                     if (mPhoneNumberHelper.canSendSmsTo(mNumber)) {
-                        entry.setSecondaryAction(R.drawable.ic_text_holo_dark,
+                        entry.setSecondaryAction(
+                                R.drawable.ic_text_holo_dark,
                                 new Intent(Intent.ACTION_SENDTO,
-                                           Uri.fromParts("sms", mNumber, null)));
+                                           Uri.fromParts("sms", mNumber, null)),
+                                getString(R.string.description_send_text_message, nameOrNumber));
                     }
 
-                    actions.add(entry);
+                    configureCallButton(entry);
+                } else {
+                    disableCallButton();
                 }
 
                 mHasEditNumberBeforeCall = canPlaceCallsTo && !isSipNumber && !isVoicemailNumber;
 
-                if (actions.size() != 0) {
-                    // Set the actions for this phone number.
-                    setListAdapter(new ViewAdapter(CallDetailActivity.this, actions));
-                    getListView().setVisibility(View.VISIBLE);
-                    getListView().setItemsCanFocus(true);
-                } else {
-                    getListView().setVisibility(View.GONE);
-                }
-
                 ListView historyList = (ListView) findViewById(R.id.history);
                 historyList.setAdapter(
                         new CallDetailHistoryAdapter(CallDetailActivity.this, mInflater,
                                 mCallTypeHelper, details));
                 loadContactPhotos(photoUri);
+                findViewById(R.id.call_detail).setVisibility(View.VISIBLE);
             }
         });
     }
@@ -507,6 +527,8 @@
     static final class ViewEntry {
         public final String text;
         public final Intent primaryIntent;
+        /** The description for accessibility of the primary action. */
+        public final String primaryDescription;
 
         public CharSequence label = null;
         public String number = null;
@@ -514,111 +536,72 @@
         public int secondaryIcon = 0;
         /** Intent for the secondary action. If not null, an icon must be defined. */
         public Intent secondaryIntent = null;
+        /** The description for accessibility of the secondary action. */
+        public String secondaryDescription = null;
 
-        public ViewEntry(String text, Intent intent) {
+        public ViewEntry(String text, Intent intent, String description) {
             this.text = text;
-            this.primaryIntent = intent;
+            primaryIntent = intent;
+            primaryDescription = description;
         }
 
-        public void setSecondaryAction(int icon, Intent intent) {
+        public void setSecondaryAction(int icon, Intent intent, String description) {
             secondaryIcon = icon;
             secondaryIntent = intent;
+            secondaryDescription = description;
         }
     }
 
-    private static final class ViewAdapter extends BaseAdapter {
-        private final Context mContext;
-        private final List<ViewEntry> mActions;
-        private final LayoutInflater mInflater;
+    /** Disables the call button area, e.g., for private numbers. */
+    private void disableCallButton() {
+        findViewById(R.id.call_and_sms).setVisibility(View.GONE);
+    }
 
-        private final View.OnClickListener mPrimaryActionListener = new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                ViewEntry entry = (ViewEntry) view.getTag();
-                mContext.startActivity(entry.primaryIntent);
-            }
-        };
+    /** Configures the call button area using the given entry. */
+    private void configureCallButton(ViewEntry entry) {
+        View convertView = findViewById(R.id.call_and_sms);
+        convertView.setVisibility(View.VISIBLE);
 
-        private final View.OnClickListener mSecondaryActionListener = new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                ViewEntry entry = (ViewEntry) view.getTag();
-                mContext.startActivity(entry.secondaryIntent);
-            }
-        };
+        ImageView icon = (ImageView) convertView.findViewById(R.id.call_and_sms_icon);
+        View divider = convertView.findViewById(R.id.call_and_sms_divider);
+        TextView text = (TextView) convertView.findViewById(R.id.call_and_sms_text1);
 
-        public ViewAdapter(Context context, List<ViewEntry> actions) {
-            mContext = context;
-            mActions = actions;
-            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        View mainAction = convertView.findViewById(R.id.call_and_sms_main_action);
+        mainAction.setOnClickListener(mPrimaryActionListener);
+        mainAction.setTag(entry);
+        mainAction.setContentDescription(entry.primaryDescription);
+
+        if (entry.secondaryIntent != null) {
+            icon.setOnClickListener(mSecondaryActionListener);
+            icon.setImageResource(entry.secondaryIcon);
+            icon.setVisibility(View.VISIBLE);
+            icon.setTag(entry);
+            icon.setContentDescription(entry.secondaryDescription);
+            divider.setVisibility(View.VISIBLE);
+        } else {
+            icon.setVisibility(View.GONE);
+            divider.setVisibility(View.GONE);
         }
+        text.setText(entry.text);
 
-        @Override
-        public int getCount() {
-            return mActions.size();
-        }
+        View line2 = convertView.findViewById(R.id.call_and_sms_line2);
+        boolean numberEmpty = TextUtils.isEmpty(entry.number);
+        boolean labelEmpty = TextUtils.isEmpty(entry.label) || numberEmpty;
+        if (labelEmpty && numberEmpty) {
+            line2.setVisibility(View.GONE);
+        } else {
+            line2.setVisibility(View.VISIBLE);
 
-        @Override
-        public Object getItem(int position) {
-            return mActions.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            // Make sure we have a valid convertView to start with
-            if (convertView == null) {
-                convertView = mInflater.inflate(R.layout.call_detail_list_item, parent, false);
-            }
-
-            // Fill action with icon and text.
-            ViewEntry entry = mActions.get(position);
-
-            ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
-            View divider = convertView.findViewById(R.id.divider);
-            TextView text = (TextView) convertView.findViewById(android.R.id.text1);
-
-            View mainAction = convertView.findViewById(R.id.main_action);
-            mainAction.setOnClickListener(mPrimaryActionListener);
-            mainAction.setTag(entry);
-
-            if (entry.secondaryIntent != null) {
-                icon.setOnClickListener(mSecondaryActionListener);
-                icon.setImageResource(entry.secondaryIcon);
-                icon.setVisibility(View.VISIBLE);
-                icon.setTag(entry);
-                divider.setVisibility(View.VISIBLE);
+            TextView label = (TextView) convertView.findViewById(R.id.call_and_sms_label);
+            if (labelEmpty) {
+                label.setVisibility(View.GONE);
             } else {
-                icon.setVisibility(View.GONE);
-                divider.setVisibility(View.GONE);
-            }
-            text.setText(entry.text);
-
-            View line2 = convertView.findViewById(R.id.line2);
-            boolean numberEmpty = TextUtils.isEmpty(entry.number);
-            boolean labelEmpty = TextUtils.isEmpty(entry.label) || numberEmpty;
-            if (labelEmpty && numberEmpty) {
-                line2.setVisibility(View.GONE);
-            } else {
-                line2.setVisibility(View.VISIBLE);
-
-                TextView label = (TextView) convertView.findViewById(R.id.label);
-                if (labelEmpty) {
-                    label.setVisibility(View.GONE);
-                } else {
-                    label.setText(entry.label);
-                    label.setVisibility(View.VISIBLE);
-                }
-
-                TextView number = (TextView) convertView.findViewById(R.id.number);
-                number.setText(entry.number);
+                label.setText(entry.label);
+                label.setVisibility(View.VISIBLE);
             }
 
-            return convertView;
+            TextView number = (TextView) convertView.findViewById(R.id.call_and_sms_number);
+            number.setText(entry.number);
         }
     }
 
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index b2fc972..fc9879a 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1195,11 +1195,10 @@
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-//      STOPSHIP Un-comment it once b/5027071 is fixed.
-//        if (!areContactsAvailable()) {
-//            If contacts aren't available, hide all menu items.
-//            return false;
-//        }
+        if (!areContactsAvailable()) {
+            // If contacts aren't available, hide all menu items.
+            return false;
+        }
         super.onCreateOptionsMenu(menu);
 
         MenuInflater inflater = getMenuInflater();
@@ -1255,14 +1254,9 @@
     public boolean onPrepareOptionsMenu(Menu menu) {
         mOptionsMenuContactsAvailable = areContactsAvailable();
         if (!mOptionsMenuContactsAvailable) {
-            // STOPSHIP Remove makeAllMenuItemsVisible()when STOPSHIP in onCreateOptionsMenu() is
-            // fixed.
-            makeAllMenuItemsVisible(menu, false);
             return false;
         }
-        makeAllMenuItemsVisible(menu, true);
 
-        final MenuItem searchMenu = menu.findItem(R.id.menu_search);
         final MenuItem addContactMenu = menu.findItem(R.id.menu_add_contact);
         final MenuItem contactsFilterMenu = menu.findItem(R.id.menu_contacts_filter);
 
@@ -1271,7 +1265,8 @@
             addGroupMenu = menu.findItem(R.id.menu_custom_add_group);
         }
 
-        if (mActionBarAdapter.isSearchMode()) {
+        final boolean isSearchMode = mActionBarAdapter.isSearchMode();
+        if (isSearchMode) {
             addContactMenu.setVisible(false);
             addGroupMenu.setVisible(false);
             contactsFilterMenu.setVisible(false);
@@ -1299,25 +1294,20 @@
                     break;
             }
         }
-
-        if (searchMenu != null) {
-            // Don't show the search menu in search mode.
-            searchMenu.setVisible(!mActionBarAdapter.isSearchMode());
-        }
-
-
-        MenuItem settings = menu.findItem(R.id.menu_settings);
-        if (settings != null) {
-            settings.setVisible(!ContactsPreferenceActivity.isEmpty(this));
-        }
+        final boolean showMiscOptions = !isSearchMode;
+        makeMenuItemVisible(menu, R.id.menu_search, showMiscOptions);
+        makeMenuItemVisible(menu, R.id.menu_import_export, showMiscOptions);
+        makeMenuItemVisible(menu, R.id.menu_accounts, showMiscOptions);
+        makeMenuItemVisible(menu, R.id.menu_settings,
+                showMiscOptions && !ContactsPreferenceActivity.isEmpty(this));
 
         return true;
     }
 
-    private void makeAllMenuItemsVisible(Menu menu, boolean visible) {
-        final int itemCount = menu.size();
-        for (int i = 0; i < itemCount; i++) {
-            menu.getItem(i).setVisible(visible);
+    private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
+        MenuItem item =menu.findItem(itemId);
+        if (item != null) {
+            item.setVisible(visible);
         }
     }
 
diff --git a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
index 5b51d57..f74b56a 100644
--- a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
@@ -217,11 +217,11 @@
             return;
         }
 
-        String snippet = null;
+        CharSequence snippet = null;
         String photoUri = null;
         if (!contactData.getStreamItems().isEmpty()) {
             StreamItemEntry firstEntry = contactData.getStreamItems().get(0);
-            snippet = firstEntry.getText();
+            snippet = Html.fromHtml(firstEntry.getText());
             if (!firstEntry.getPhotos().isEmpty()) {
                 StreamItemPhotoEntry firstPhoto = firstEntry.getPhotos().get(0);
                 photoUri = firstPhoto.getPhotoUri();
diff --git a/src/com/android/contacts/editor/AggregationSuggestionView.java b/src/com/android/contacts/editor/AggregationSuggestionView.java
index 07e67e8..df90cff 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionView.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionView.java
@@ -29,7 +29,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.util.AttributeSet;
 import android.widget.ImageView;
-import android.widget.RelativeLayout;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import java.util.ArrayList;
@@ -38,7 +38,7 @@
 /**
  * A view that contains a name, picture and other data for a contact aggregation suggestion.
  */
-public class AggregationSuggestionView extends RelativeLayout {
+public class AggregationSuggestionView extends LinearLayout {
 
     public interface Listener {
 
@@ -63,17 +63,14 @@
 
     public AggregationSuggestionView(Context context) {
         super(context);
-        setClickable(true);
     }
 
     public AggregationSuggestionView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        setClickable(true);
     }
 
     public AggregationSuggestionView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
-        setClickable(true);
     }
 
     public void setNewContact(boolean flag) {
@@ -135,8 +132,7 @@
         mListener = listener;
     }
 
-    @Override
-    public boolean performClick() {
+    public boolean handleItemClickEvent() {
         if (mListener != null && isEnabled()) {
             if (canEditSuggestedContact()) {
                 mListener.onEditAction(Contacts.getLookupUri(mContactId, mLookupKey));
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 412efab..afc3ab1 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -83,6 +83,8 @@
 import android.view.ViewGroup.MarginLayoutParams;
 import android.view.ViewStub;
 import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.BaseAdapter;
 import android.widget.LinearLayout;
 import android.widget.ListPopupWindow;
 import android.widget.Toast;
@@ -207,17 +209,6 @@
 
     private Cursor mGroupMetaData;
 
-    /**
-     * A delay in milliseconds used for bringing aggregation suggestions to
-     * the visible part of the screen. The reason this has to be done after
-     * a delay is a race condition with the soft keyboard.  The keyboard
-     * may expand to display its own autocomplete suggestions, which will
-     * reduce the visible area of the screen.  We will yield to the keyboard
-     * hoping that the delay is sufficient.  If not - part of the
-     * suggestion will be hidden, which is not fatal.
-     */
-    private static final int AGGREGATION_SUGGESTION_SCROLL_DELAY = 200;
-
     private File mCurrentPhotoFile;
 
     // Height/width (in pixels) to request for the photo - queried from the provider.
@@ -245,6 +236,62 @@
     private long mAggregationSuggestionsRawContactId;
     private View mAggregationSuggestionView;
 
+    private ListPopupWindow mAggregationSuggestionPopup;
+
+    private static final class AggregationSuggestionAdapter extends BaseAdapter {
+        private final Activity mActivity;
+        private final boolean mSetNewContact;
+        private final AggregationSuggestionView.Listener mListener;
+        private final List<Suggestion> mSuggestions;
+
+        public AggregationSuggestionAdapter(Activity activity, boolean setNewContact,
+                AggregationSuggestionView.Listener listener, List<Suggestion> suggestions) {
+            mActivity = activity;
+            mSetNewContact = setNewContact;
+            mListener = listener;
+            mSuggestions = suggestions;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            Suggestion suggestion = (Suggestion) getItem(position);
+            LayoutInflater inflater = mActivity.getLayoutInflater();
+            AggregationSuggestionView suggestionView =
+                    (AggregationSuggestionView) inflater.inflate(
+                            R.layout.aggregation_suggestions_item, null);
+            suggestionView.setNewContact(mSetNewContact);
+            suggestionView.setListener(mListener);
+            suggestionView.bindSuggestion(suggestion);
+            return suggestionView;
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return mSuggestions.get(position);
+        }
+
+        @Override
+        public int getCount() {
+            return mSuggestions.size();
+        }
+    }
+
+    private OnItemClickListener mAggregationSuggestionItemClickListener =
+            new OnItemClickListener() {
+        @Override
+        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+            final AggregationSuggestionView suggestionView = (AggregationSuggestionView) view;
+            suggestionView.handleItemClickEvent();
+            mAggregationSuggestionPopup.dismiss();
+            mAggregationSuggestionPopup = null;
+        }
+    };
+
     private boolean mAutoAddToDefaultGroup;
 
     private boolean mEnabled = true;
@@ -1276,76 +1323,28 @@
             return;
         }
 
-        RawContactEditorView rawContactView =
+        if (mAggregationSuggestionPopup != null && mAggregationSuggestionPopup.isShowing()) {
+            mAggregationSuggestionPopup.dismiss();
+        }
+
+        if (mAggregationSuggestionEngine.getSuggestedContactCount() == 0) {
+            return;
+        }
+
+        final RawContactEditorView rawContactView =
                 (RawContactEditorView)getRawContactEditorView(mAggregationSuggestionsRawContactId);
-        if (rawContactView == null) {
-            return;
-        }
-
-        ViewStub stub = (ViewStub)rawContactView.findViewById(R.id.aggregation_suggestion_stub);
-        if (stub != null) {
-            stub.inflate();
-        }
-
-        // Only request the view on screen when it is first displayed
-        boolean requestOnScreen = mAggregationSuggestionView == null;
-        mAggregationSuggestionView = rawContactView.findViewById(R.id.aggregation_suggestion);
-
-        int count = mAggregationSuggestionEngine.getSuggestedContactCount();
-        if (count == 0) {
-            mAggregationSuggestionView.setVisibility(View.GONE);
-            return;
-        }
-
-        List<Suggestion> suggestions = mAggregationSuggestionEngine.getSuggestions();
-
-        LinearLayout itemList = (LinearLayout) mAggregationSuggestionView.findViewById(
-                R.id.aggregation_suggestions);
-        itemList.removeAllViews();
-
-        LayoutInflater inflater = getActivity().getLayoutInflater();
-
-        for (Suggestion suggestion : suggestions) {
-            AggregationSuggestionView suggestionView =
-                    (AggregationSuggestionView) inflater.inflate(
-                            R.layout.aggregation_suggestions_item, null);
-            suggestionView.setLayoutParams(
-                    new LinearLayout.LayoutParams(
-                            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
-            suggestionView.setNewContact(mState.size() == 1 && mState.get(0).isContactInsert());
-            suggestionView.setListener(this);
-            suggestionView.bindSuggestion(suggestion);
-            itemList.addView(suggestionView);
-        }
-
-        adjustAggregationSuggestionViewLayout(rawContactView);
-        setAggregationSuggestionViewEnabled(mEnabled);
-        mAggregationSuggestionView.setVisibility(View.VISIBLE);
-
-        if (requestOnScreen) {
-            mContent.postDelayed(new Runnable() {
-
-                @Override
-                public void run() {
-                    requestAggregationSuggestionOnScreen(mAggregationSuggestionView);
-                }
-            }, AGGREGATION_SUGGESTION_SCROLL_DELAY);
-        }
-    }
-
-    /**
-     * Adjusts the layout of the aggregation suggestion view so that it is placed directly
-     * underneath and have the same width as the last text editor of the contact name editor.
-     */
-    private void adjustAggregationSuggestionViewLayout(RawContactEditorView rawContactView) {
-        TextFieldsEditorView nameEditor = rawContactView.getNameEditor();
-        Rect rect = new Rect();
-        nameEditor.acquireEditorBounds(rect);
-        MarginLayoutParams layoutParams =
-                (MarginLayoutParams) mAggregationSuggestionView.getLayoutParams();
-        layoutParams.leftMargin = rect.left;
-        layoutParams.width = rect.width();
-        mAggregationSuggestionView.setLayoutParams(layoutParams);
+        final View anchorView = rawContactView.findViewById(R.id.anchor_view);
+        mAggregationSuggestionPopup = new ListPopupWindow(mContext, null);
+        mAggregationSuggestionPopup.setAnchorView(anchorView);
+        mAggregationSuggestionPopup.setWidth(anchorView.getWidth());
+        mAggregationSuggestionPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+        mAggregationSuggestionPopup.setModal(true);
+        mAggregationSuggestionPopup.setAdapter(
+                new AggregationSuggestionAdapter(getActivity(),
+                        mState.size() == 1 && mState.get(0).isContactInsert(),
+                        this, mAggregationSuggestionEngine.getSuggestions()));
+        mAggregationSuggestionPopup.setOnItemClickListener(mAggregationSuggestionItemClickListener);
+        mAggregationSuggestionPopup.show();
     }
 
     @Override
@@ -1452,20 +1451,6 @@
         }
     }
 
-    /**
-     * Scrolls the editor if necessary to reveal the aggregation suggestion that is
-     * shown below the name editor. Makes sure that the currently focused field
-     * remains visible.
-     */
-    private void requestAggregationSuggestionOnScreen(final View view) {
-        Rect rect = getRelativeBounds(mContent, view);
-        View focused = mContent.findFocus();
-        if (focused != null) {
-            rect.union(getRelativeBounds(mContent, focused));
-        }
-        mContent.requestRectangleOnScreen(rect);
-    }
-
     public void setAggregationSuggestionViewEnabled(boolean enabled) {
         if (mAggregationSuggestionView == null) {
             return;
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index a27d3e0..1205c31 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -149,6 +149,7 @@
         mGroupSourceViewContainer = (ViewGroup) mRootView.findViewById(
                 R.id.group_source_view_container);
         mMemberListView = (ListView) mRootView.findViewById(android.R.id.list);
+        mMemberListView.setAdapter(mAdapter);
 
         return mRootView;
     }
@@ -162,11 +163,6 @@
         mAdapter.enableQuickContact(enableQuickContact);
     }
 
-    private void configureAdapter(long groupId) {
-        mGroupId = groupId;
-        mMemberListView.setAdapter(mAdapter);
-    }
-
     private void configurePhotoLoader() {
         if (mContext != null) {
             if (mPhotoManager == null) {
@@ -234,7 +230,6 @@
                     bindGroupMetaData(data);
 
                     // Retrieve the list of members
-                    configureAdapter(mGroupId);
                     startGroupMembersLoader();
                     return;
                 }
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
index 0fe8d0d..7ddece6 100644
--- a/src/com/android/contacts/list/ContactListItemView.java
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -36,6 +36,7 @@
 import android.text.TextUtils;
 import android.text.TextUtils.TruncateAt;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
@@ -85,6 +86,9 @@
     private final int mHeaderTextSize;
     private final int mHeaderUnderlineHeight;
     private final int mHeaderUnderlineColor;
+    private final int mCountViewTextSize;
+    private final int mContactsCountTextColor;
+    private final int mTextIndent;
 
     private Drawable mActivatedBackgroundDrawable;
 
@@ -226,7 +230,7 @@
                 R.styleable.ContactListItemView_list_item_header_text_indent, 0);
         mHeaderTextColor = a.getColor(
                 R.styleable.ContactListItemView_list_item_header_text_color, Color.BLACK);
-        mHeaderTextSize = a.getDimensionPixelSize(
+        mHeaderTextSize = (int)a.getDimensionPixelSize(
                 R.styleable.ContactListItemView_list_item_header_text_size, 12);
         mHeaderBackgroundHeight = a.getDimensionPixelSize(
                 R.styleable.ContactListItemView_list_item_header_height, 30);
@@ -234,6 +238,12 @@
                 R.styleable.ContactListItemView_list_item_header_underline_height, 1);
         mHeaderUnderlineColor = a.getColor(
                 R.styleable.ContactListItemView_list_item_header_underline_color, 0);
+        mTextIndent = a.getDimensionPixelOffset(
+                R.styleable.ContactListItemView_list_item_text_indent, 0);
+        mCountViewTextSize = (int)a.getDimensionPixelSize(
+                R.styleable.ContactListItemView_list_item_contacts_count_text_size, 12);
+        mContactsCountTextColor = a.getColor(
+                R.styleable.ContactListItemView_list_item_contacts_count_text_color, Color.BLACK);
 
         mPrefixHighligher = new PrefixHighlighter(
                 a.getColor(R.styleable.ContactListItemView_list_item_prefix_highlight_color,
@@ -424,7 +434,7 @@
         // Layout all text view and presence icon
         // Put name TextView first
         if (isVisible(mNameTextView)) {
-            mNameTextView.layout(leftBound,
+            mNameTextView.layout(leftBound + mTextIndent,
                     textTopBound,
                     rightBound,
                     textTopBound + mNameTextViewHeight);
@@ -432,13 +442,13 @@
         }
 
         // Presence and status
-        int statusLeftBound = leftBound;
+        int statusLeftBound = leftBound + mTextIndent;
         if (isVisible(mPresenceIcon)) {
             int iconWidth = mPresenceIcon.getMeasuredWidth();
             mPresenceIcon.layout(
-                    leftBound,
+                    leftBound + mTextIndent,
                     textTopBound,
-                    leftBound + iconWidth,
+                    leftBound + iconWidth + mTextIndent,
                     textTopBound + mStatusTextViewHeight);
             statusLeftBound += (iconWidth + mPresenceIconMargin);
         }
@@ -457,7 +467,7 @@
         // Rest of text views
         int dataLeftBound = leftBound;
         if (isVisible(mPhoneticNameTextView)) {
-            mPhoneticNameTextView.layout(leftBound,
+            mPhoneticNameTextView.layout(leftBound + mTextIndent,
                     textTopBound,
                     rightBound,
                     textTopBound + mPhoneticNameTextViewHeight);
@@ -465,8 +475,8 @@
         }
 
         if (isVisible(mLabelView)) {
-            dataLeftBound = leftBound + mLabelView.getMeasuredWidth();
-            mLabelView.layout(leftBound,
+            dataLeftBound = leftBound + mLabelView.getMeasuredWidth() + mTextIndent;
+            mLabelView.layout(leftBound + mTextIndent,
                     textTopBound,
                     dataLeftBound,
                     textTopBound + mLabelTextViewHeight);
@@ -484,7 +494,7 @@
         }
 
         if (isVisible(mSnippetView)) {
-            mSnippetView.layout(leftBound,
+            mSnippetView.layout(leftBound + mTextIndent,
                     textTopBound,
                     rightBound,
                     textTopBound + mSnippetTextViewHeight);
@@ -645,7 +655,7 @@
             if (mHeaderTextView == null) {
                 mHeaderTextView = new TextView(mContext);
                 mHeaderTextView.setTextColor(mHeaderTextColor);
-                mHeaderTextView.setTextSize(mHeaderTextSize);
+                mHeaderTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mHeaderTextSize);
                 mHeaderTextView.setTypeface(mHeaderTextView.getTypeface(), Typeface.BOLD);
                 mHeaderTextView.setGravity(Gravity.CENTER_VERTICAL);
                 addView(mHeaderTextView);
@@ -958,6 +968,9 @@
         } else {
             getCountView();
             mCountView.setText(text);
+            mCountView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCountViewTextSize);
+            mCountView.setGravity(Gravity.CENTER_VERTICAL);
+            mCountView.setTextColor(mContactsCountTextColor);
             mCountView.setVisibility(VISIBLE);
         }
     }
diff --git a/src/com/android/contacts/list/ContactListPinnedHeaderView.java b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
index a689045..5983007 100644
--- a/src/com/android/contacts/list/ContactListPinnedHeaderView.java
+++ b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
@@ -26,6 +26,7 @@
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
@@ -46,6 +47,7 @@
     private final int mPaddingRight;
     private final int mPaddingLeft;
     private final int mContactsCountTextColor;
+    private final int mCountViewTextSize;
 
     private int mHeaderBackgroundHeight;
     private TextView mHeaderTextView;
@@ -76,12 +78,14 @@
                 R.styleable.ContactListItemView_list_item_padding_right, 0);
         mContactsCountTextColor = a.getColor(
                 R.styleable.ContactListItemView_list_item_contacts_count_text_color, Color.BLACK);
+        mCountViewTextSize = (int)a.getDimensionPixelSize(
+                R.styleable.ContactListItemView_list_item_contacts_count_text_size, 12);
 
         a.recycle();
 
         mHeaderTextView = new TextView(mContext);
         mHeaderTextView.setTextColor(mHeaderTextColor);
-        mHeaderTextView.setTextSize(mHeaderTextSize);
+        mHeaderTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mHeaderTextSize);
         mHeaderTextView.setTypeface(mHeaderTextView.getTypeface(), Typeface.BOLD);
         mHeaderTextView.setGravity(Gravity.CENTER_VERTICAL);
         addView(mHeaderTextView);
@@ -156,7 +160,8 @@
         if (mCountTextView == null) {
             mCountTextView = new TextView(mContext);
             mCountTextView.setTextColor(mContactsCountTextColor);
-            mCountTextView.setTextSize(mHeaderTextSize);
+            mCountTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCountViewTextSize);
+            mCountTextView.setGravity(Gravity.CENTER_VERTICAL);
             addView(mCountTextView);
         }
         mCountTextView.setText(count);
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 8590c29..4db2270 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -139,8 +139,9 @@
             if (count != 0) {
                 String format = getResources().getQuantityText(
                         R.plurals.listTotalAllContacts, count).toString();
+                // Do not count the user profile in the contacts count
                 if (mUserProfileExists) {
-                    getAdapter().setContactsCount(String.format(format, count));
+                    getAdapter().setContactsCount(String.format(format, count - 1));
                 } else {
                     mCounterHeaderView.setText(String.format(format, count));
                 }
diff --git a/tests/src/com/android/contacts/ContactLoaderTest.java b/tests/src/com/android/contacts/ContactLoaderTest.java
index ac691bc..a731f24 100644
--- a/tests/src/com/android/contacts/ContactLoaderTest.java
+++ b/tests/src/com/android/contacts/ContactLoaderTest.java
@@ -301,6 +301,7 @@
 
                         Contacts.SEND_TO_VOICEMAIL,
                         Contacts.CUSTOM_RINGTONE,
+                        Contacts.IS_USER_PROFILE,
                     })
                     .withSortOrder(Contacts.Entity.RAW_CONTACT_ID)
                     .returnRow(
@@ -337,7 +338,8 @@
                         "content:some.photo.uri",
 
                         0,
-                        null
+                        null,
+                        0
                     );
         }
 
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
index 40a33b6..bb93b98 100644
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
@@ -175,34 +175,25 @@
     }
 
     public void testSetPhoneCallDetails_Geocode() {
-        setPhoneCallDetailsWithNumber("+14125555555", "1-412-555-5555");
+        setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "Pennsylvania");
         assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
         assertNumberEquals("Pennsylvania");  // The geocode is shown as the number.
     }
 
     public void testSetPhoneCallDetails_NoGeocode() {
-        setPhoneCallDetailsWithNumber("+0", "+0");
-        assertNameEquals("+0");  // The phone number is shown as the name.
+        setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", null);
+        assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
         assertNumberEquals("-");  // The empty geocode is shown as the number.
     }
 
-    public void testSetPhoneCallDetails_NoGeocodeForUnknown() {
-        setPhoneCallDetailsWithNumber(CallerInfo.UNKNOWN_NUMBER, "");
-        assertNumberEquals("-");  // The empty geocode is shown as the number.
-    }
-
-    public void testSetPhoneCallDetails_NoGeocodeForPrivate() {
-        setPhoneCallDetailsWithNumber(CallerInfo.PRIVATE_NUMBER, "");
-        assertNumberEquals("-");  // The empty geocode is shown as the number.
-    }
-
-    public void testSetPhoneCallDetails_NoGeocodeForPayphone() {
-        setPhoneCallDetailsWithNumber(CallerInfo.PAYPHONE_NUMBER, "");
+    public void testSetPhoneCallDetails_EmptyGeocode() {
+        setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "");
+        assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
         assertNumberEquals("-");  // The empty geocode is shown as the number.
     }
 
     public void testSetPhoneCallDetails_NoGeocodeForVoicemail() {
-        setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, "");
+        setPhoneCallDetailsWithNumberAndGeocode(TEST_VOICEMAIL_NUMBER, "", "United States");
         assertNumberEquals("-");  // The empty geocode is shown as the number.
     }
 
@@ -269,8 +260,14 @@
 
     /** Sets the phone call details with default values and the given number. */
     private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) {
+        setPhoneCallDetailsWithNumberAndGeocode(number, formattedNumber, TEST_GEOCODE);
+    }
+
+    /** Sets the phone call details with default values and the given number. */
+    private void setPhoneCallDetailsWithNumberAndGeocode(String number, String formattedNumber,
+            String geocodedLocation) {
         mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO, TEST_GEOCODE,
+                new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO, geocodedLocation,
                         new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
                 true);
     }
diff --git a/tests/src/com/android/contacts/activities/CallLogActivityTests.java b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
index ce2418f..070941c 100644
--- a/tests/src/com/android/contacts/activities/CallLogActivityTests.java
+++ b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
@@ -69,6 +69,7 @@
             Calls.TYPE,
             Calls.COUNTRY_ISO,
             Calls.VOICEMAIL_URI,
+            Calls.GEOCODED_LOCATION,
             CallLogFragment.CallLogQuery.SECTION_NAME,
     };
     private static final int RAND_DURATION = -1;
@@ -505,6 +506,7 @@
         row.add(type);  // type
         row.add(TEST_COUNTRY_ISO);  // country ISO
         row.add(null);  // voicemail_uri
+        row.add(null);  // geocoded_location
         row.add(CallLogFragment.CallLogQuery.SECTION_OLD_ITEM);  // section
     }
 
@@ -535,6 +537,7 @@
         row.add(Calls.VOICEMAIL_TYPE);  // type
         row.add(TEST_COUNTRY_ISO);  // country ISO
         row.add(voicemailUri);  // voicemail_uri
+        row.add(null);  // geocoded_location
         row.add(CallLogFragment.CallLogQuery.SECTION_OLD_ITEM);  // section
     }
 
diff --git a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
index 9aa5d7b..8a7e946 100644
--- a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
@@ -224,7 +224,7 @@
         }
         mCursor.moveToNext();
         mCursor.addRow(new Object[]{
-                mCursor.getPosition(), number, 0L, 0L, type, "", "", section
+                mCursor.getPosition(), number, 0L, 0L, type, "", "", "", section
         });
     }
 
@@ -245,7 +245,7 @@
             throw new IllegalArgumentException("not a header section: " + section);
         }
         mCursor.moveToNext();
-        mCursor.addRow(new Object[]{ mCursor.getPosition(), "", 0L, 0L, 0, "", "", section });
+        mCursor.addRow(new Object[]{ mCursor.getPosition(), "", 0L, 0L, 0, "", "", "", section });
     }
 
     /** Asserts that the group matches the given values. */
diff --git a/tests/src/com/android/contacts/format/DisplayNameFormatterTest.java b/tests/src/com/android/contacts/format/DisplayNameFormatterTest.java
index fb834c0..24714cd 100644
--- a/tests/src/com/android/contacts/format/DisplayNameFormatterTest.java
+++ b/tests/src/com/android/contacts/format/DisplayNameFormatterTest.java
@@ -53,32 +53,32 @@
     public void testSetDisplayName_Simple() {
         setNames("John Doe", "Doe John");
         setDisplayName();
-        SpannedTestUtils.checkHtmlText("<b>John </b>Doe", mView);
+        SpannedTestUtils.checkHtmlText("John Doe", mView);
         setNames("Jean Pierre Doe", "Doe Jean Pierre");
         setDisplayName();
-        SpannedTestUtils.checkHtmlText("<b>Jean Pierre </b>Doe", mView);
+        SpannedTestUtils.checkHtmlText("Jean Pierre Doe", mView);
         setNames("John Doe Smith", "Doe Smith John");
         setDisplayName();
-        SpannedTestUtils.checkHtmlText("<b>John </b>Doe Smith", mView);
+        SpannedTestUtils.checkHtmlText("John Doe Smith", mView);
     }
     public void testSetDisplayName_AccidentalOverlap() {
         // This is probably not what we want, but we assume that the two names differ only in the
         // order in which the two components are listed.
         setNames("Johnson John", "Johnson Smith");
         setDisplayName();
-        SpannedTestUtils.checkHtmlText("<b>Johnson </b>John", mView);
+        SpannedTestUtils.checkHtmlText("Johnson John", mView);
     }
 
     public void testSetDisplayName_Reversed() {
         setNames("John Doe", "Doe John");
         setDisplayNameReversed();
-        SpannedTestUtils.checkHtmlText("John <b>Doe</b>", mView);
+        SpannedTestUtils.checkHtmlText("John Doe", mView);
         setNames("Jean Pierre Doe", "Doe Jean Pierre");
         setDisplayNameReversed();
-        SpannedTestUtils.checkHtmlText("Jean Pierre <b>Doe</b>", mView);
+        SpannedTestUtils.checkHtmlText("Jean Pierre Doe", mView);
         setNames("John Doe Smith", "Doe Smith John");
         setDisplayNameReversed();
-        SpannedTestUtils.checkHtmlText("John <b>Doe Smith</b>", mView);
+        SpannedTestUtils.checkHtmlText("John Doe Smith", mView);
     }
 
     public void testSetDisplayName_NoOverlap() {
@@ -90,26 +90,26 @@
     public void testSetDisplayName_Prefix() {
         setNames("John Doe", "Doe John");
         setDisplayNameWithPrefix("DO");
-        SpannedTestUtils.checkHtmlText("<b>John </b>" + START + "Do" + END + "e", mView);
+        SpannedTestUtils.checkHtmlText("John " + START + "Do" + END + "e", mView);
     }
 
     public void testSetDisplayName_PrefixFirstName() {
         setNames("John Doe", "Doe John");
         setDisplayNameWithPrefix("JO");
-        SpannedTestUtils.checkHtmlText(START + "<b>Jo</b>" + END + "<b>hn </b>Doe", mView);
+        SpannedTestUtils.checkHtmlText(START + "Jo" + END + "hn Doe", mView);
     }
 
     public void testSetDisplayName_PrefixMiddleName() {
         setNames("John Paul Doe", "Doe John Paul");
         setDisplayNameWithPrefix("PAU");
-        SpannedTestUtils.checkHtmlText("<b>John </b>" + START + "<b>Pau</b>" + END + "<b>l </b>Doe",
+        SpannedTestUtils.checkHtmlText("John " + START + "Pau" + END + "l Doe",
                 mView);
     }
 
     public void testSetDisplayName_ReversedPrefix() {
         setNames("John Doe", "Doe John");
         setDisplayNameReversedWithPrefix("DO");
-        SpannedTestUtils.checkHtmlText("John " + START + "<b>Do</b>" + END + "<b>e</b>", mView);
+        SpannedTestUtils.checkHtmlText("John " + START + "Do" + END + "e", mView);
     }
 
     public void testSetDisplayName_Empty() {
@@ -136,7 +136,7 @@
         mDisplayNameFormatter.setTextWithHighlightingFactory(new TestTextWithHighlightingFactory());
         setNames("John Doe", "Doe John");
         setDisplayNameWithHighlighting();
-        SpannedTestUtils.checkHtmlText("<i><b>John </b></i><i>Doe</i> <i>Doe John</i>", mView);
+        SpannedTestUtils.checkHtmlText("<i>John Doe</i> <i>Doe John</i>", mView);
     }
 
     /**
diff --git a/tests/src/com/android/contacts/list/ContactListItemViewTest.java b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
index 7764eb3..ccd2fb5 100644
--- a/tests/src/com/android/contacts/list/ContactListItemViewTest.java
+++ b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
@@ -51,7 +51,7 @@
         view.showDisplayName(cursor, 0, 1, false,
                 ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY);
 
-        SpannedTestUtils.checkHtmlText("<b>John </b>Doe", view.getNameTextView());
+        SpannedTestUtils.checkHtmlText("John Doe", view.getNameTextView());
     }
 
     public void testShowDisplayName_Unknown() {
@@ -73,7 +73,7 @@
         view.showDisplayName(cursor, 0, 1, false,
                 ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY);
 
-        SpannedTestUtils.checkHtmlText("<b>John </b>" + START + "Doe" + END,
+        SpannedTestUtils.checkHtmlText("John " + START + "Doe" + END,
                 view.getNameTextView());
     }
 
@@ -85,7 +85,7 @@
         view.showDisplayName(cursor, 0, 1, false,
                 ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE);
 
-        SpannedTestUtils.checkHtmlText("John " + START + "<b>Doe</b>" + END,
+        SpannedTestUtils.checkHtmlText("John " + START + "Doe" + END,
                 view.getNameTextView());
     }
 
@@ -97,7 +97,7 @@
         view.showDisplayName(cursor, 0, 1, true,
                 ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY);
 
-        SpannedTestUtils.checkHtmlText("<i><b>John </b></i><i>Doe</i> <i>Doe John</i>",
+        SpannedTestUtils.checkHtmlText("<i>John Doe</i> <i>Doe John</i>",
                 view.getNameTextView());
     }