Merge "Change disambiguation wording for sms/phone numbers." into jb-dev
diff --git a/res/drawable/gray_action_bar_background.xml b/res/drawable/gray_action_bar_background.xml
index 7ebf604..4192313 100644
--- a/res/drawable/gray_action_bar_background.xml
+++ b/res/drawable/gray_action_bar_background.xml
@@ -14,8 +14,9 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-          android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-    <item android:state_pressed="true" android:drawable="@drawable/action_bar_item_pressed_holo_light"/>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_pressed="true"
+        android:drawable="@drawable/ab_solid_custom_blue_inverse_holo"/>
     <item android:drawable="@drawable/ab_stacked_solid_inverse_holo" />
 </selector>
diff --git a/res/layout-sw580dp-w940dp/group_browse_list_account_header.xml b/res/layout-sw580dp-w940dp/group_browse_list_account_header.xml
new file mode 100644
index 0000000..af60c79
--- /dev/null
+++ b/res/layout-sw580dp-w940dp/group_browse_list_account_header.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <!-- Only visible when it is the first element in the list. -->
+    <View
+        android:id="@+id/header_extra_top_padding"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/list_header_extra_top_padding" />
+
+    <include layout="@layout/group_account_header_horizontal" />
+
+</LinearLayout>
diff --git a/res/layout-sw580dp/group_browse_list_account_header.xml b/res/layout-sw580dp/group_browse_list_account_header.xml
new file mode 100644
index 0000000..cca6ed9
--- /dev/null
+++ b/res/layout-sw580dp/group_browse_list_account_header.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <!-- Only visible when it is the first element in the list. -->
+    <View
+        android:id="@+id/header_extra_top_padding"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/list_header_extra_top_padding" />
+
+    <include layout="@layout/group_account_header_vertical" />
+
+</LinearLayout>
diff --git a/res/layout-sw580dp/people_activity.xml b/res/layout-sw580dp/people_activity.xml
index 93f7795..42c6afc 100644
--- a/res/layout-sw580dp/people_activity.xml
+++ b/res/layout-sw580dp/people_activity.xml
@@ -78,7 +78,7 @@
                 class="com.android.contacts.detail.ContactLoaderFragment"
                 android:layout_height="0dip"
                 android:layout_width="0dip"
-                android:visibility="gone"/>
+                android:visibility="gone" />
         </view>
 
         <!-- Right panel detail view for Groups tab -->
@@ -100,42 +100,21 @@
                 android:visibility="gone" />
         </view>
 
-        <!-- Two-panel view under the Favorites tab -->
-        <LinearLayout
+        <!-- Single panel view under the Favorites tab (Strequent) -->
+        <FrameLayout
             android:id="@+id/favorites_view"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="@drawable/list_background_holo"
-            android:baselineAligned="false">
+            android:layout_height="match_parent">
 
-            <!-- Starred -->
-            <FrameLayout
-                android:layout_width="0dip"
-                android:layout_height="match_parent"
-                android:layout_weight="10"
-                android:background="@drawable/panel_favorites_holo_light">
-
-                <fragment
-                    android:id="@+id/favorites_fragment"
-                    class="com.android.contacts.list.ContactTileListFragment"
-                    android:layout_height="match_parent"
-                    android:layout_width="match_parent"
-                    android:layout_marginRight="16dip"
-                    android:layout_marginLeft="16dip"/>
-
-            </FrameLayout>
-
-            <!-- Most Frequent -->
             <fragment
-                android:id="@+id/frequent_fragment"
-                class="com.android.contacts.list.ContactTileFrequentFragment"
-                android:layout_width="0dip"
+                android:id="@+id/favorites_fragment"
+                class="com.android.contacts.list.ContactTileListFragment"
                 android:layout_height="match_parent"
-                android:layout_weight="8"
-                android:layout_marginTop="16dip"
-                android:layout_marginRight="16dip"/>
+                android:layout_width="match_parent"
+                android:layout_marginRight="16dip"
+                android:layout_marginLeft="16dip" />
 
-        </LinearLayout>
+        </FrameLayout>
 
     </LinearLayout>
 
diff --git a/res/layout-sw680dp/group_browse_list_account_header.xml b/res/layout-sw680dp/group_browse_list_account_header.xml
new file mode 100644
index 0000000..af60c79
--- /dev/null
+++ b/res/layout-sw680dp/group_browse_list_account_header.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <!-- Only visible when it is the first element in the list. -->
+    <View
+        android:id="@+id/header_extra_top_padding"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/list_header_extra_top_padding" />
+
+    <include layout="@layout/group_account_header_horizontal" />
+
+</LinearLayout>
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index 1ad71a4..9e88c49 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -20,7 +20,8 @@
     android:layout_height="match_parent"
     android:orientation="vertical"
     android:paddingBottom="?android:attr/actionBarSize"
-    android:divider="?android:attr/dividerHorizontal">
+    android:divider="?android:attr/dividerHorizontal"
+    android:showDividers="end">
 
     <FrameLayout
         android:id="@+id/voicemail_status"
@@ -34,8 +35,7 @@
     </FrameLayout>
     <FrameLayout
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-    >
+        android:layout_height="match_parent">
         <ListView android:id="@android:id/list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/res/layout/directory_header.xml b/res/layout/directory_header.xml
index 8e845e0..fcd255e 100644
--- a/res/layout/directory_header.xml
+++ b/res/layout/directory_header.xml
@@ -15,46 +15,53 @@
 -->
 
 <!-- Layout used for list section separators. -->
-<LinearLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     style="@style/DirectoryHeader"
+    android:id="@+id/directory_header"
+    android:paddingLeft="?attr/list_item_padding_left"
+    android:paddingRight="?attr/list_item_padding_right"
+    android:minHeight="@dimen/list_section_divider_min_height"
+    android:layout_marginTop="@dimen/list_header_extra_top_padding"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:gravity="center_vertical"
-    android:minHeight="@dimen/list_section_divider_min_height"
-    android:background="@drawable/list_section_divider_holo_custom"
-    android:layout_marginTop="@dimen/list_header_extra_top_padding"
-    android:paddingLeft="?attr/list_item_padding_left"
-    android:paddingRight="?attr/list_item_padding_right">
-    <TextView
-        android:id="@+id/label"
-        android:layout_width="wrap_content"
+    >
+    <LinearLayout
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="8dip"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="@color/people_app_theme_color"
-        android:singleLine="true"
-        android:textStyle="bold"
-        android:textAllCaps="true" />
-    <TextView
-        android:id="@+id/display_name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="8dip"
-        android:layout_marginRight="8dip"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="@color/people_app_theme_color"
-        android:singleLine="true"
-        android:textStyle="bold"
-        android:textAllCaps="true" />
-    <TextView
-        android:id="@+id/count"
-        android:paddingTop="1dip"
-        android:layout_width="0dip"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:gravity="right"
-        android:singleLine="true"
-        android:textSize="12sp"
-        android:textColor="@color/contact_count_text_color" />
-</LinearLayout>
+        android:gravity="center_vertical"
+        android:background="@drawable/list_section_divider_holo_custom"
+        >
+        <TextView
+            android:id="@+id/label"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="8dip"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="@color/people_app_theme_color"
+            android:singleLine="true"
+            android:textStyle="bold"
+            android:textAllCaps="true" />
+        <TextView
+            android:id="@+id/display_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="8dip"
+            android:layout_marginRight="8dip"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="@color/people_app_theme_color"
+            android:singleLine="true"
+            android:textStyle="bold"
+            android:textAllCaps="true" />
+        <TextView
+            android:id="@+id/count"
+            android:paddingTop="1dip"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:gravity="right"
+            android:singleLine="true"
+            android:textSize="12sp"
+            android:textColor="@color/contact_count_text_color" />
+    </LinearLayout>
+</FrameLayout>
diff --git a/res/layout/group_account_header_horizontal.xml b/res/layout/group_account_header_horizontal.xml
new file mode 100644
index 0000000..5043f25
--- /dev/null
+++ b/res/layout/group_account_header_horizontal.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?attr/list_item_header_height"
+    android:layout_marginLeft="?attr/list_item_padding_left"
+    android:layout_marginRight="?attr/list_item_padding_right"
+    android:background="@drawable/list_section_divider_holo_custom"
+    android:orientation="horizontal">
+
+    <TextView
+        android:id="@+id/account_type"
+        android:layout_width="0px"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:layout_gravity="center_vertical"
+        android:paddingLeft="?attr/list_item_header_text_indent"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="@color/people_app_theme_color"
+        android:textStyle="bold"
+        android:textAllCaps="true"
+        android:singleLine="true"/>
+
+    <!-- TODO: Should use correct color with a correct name (content should be same).
+         can use "?android:attr/textColorTertiary" -->
+    <TextView
+        android:id="@+id/account_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:textColor="@color/contact_count_text_color"
+        android:textSize="12sp"
+        android:singleLine="true"
+        android:ellipsize="middle" />
+</LinearLayout>
diff --git a/res/layout/group_account_header_vertical.xml b/res/layout/group_account_header_vertical.xml
new file mode 100644
index 0000000..8edbb8b
--- /dev/null
+++ b/res/layout/group_account_header_vertical.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?attr/list_item_header_height"
+    android:layout_marginLeft="?attr/list_item_padding_left"
+    android:layout_marginRight="?attr/list_item_padding_right"
+    android:paddingBottom="4dip"
+    android:background="@drawable/list_section_divider_holo_custom"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/account_type"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:paddingLeft="?attr/list_item_header_text_indent"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="@color/people_app_theme_color"
+        android:textStyle="bold"
+        android:textAllCaps="true"
+        android:singleLine="true"/>
+
+    <!-- TODO: Should use correct color with a correct name (content should be same).
+         can use "?android:attr/textColorTertiary" -->
+    <TextView
+        android:id="@+id/account_name"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:paddingLeft="?attr/list_item_header_text_indent"
+        android:textColor="@color/contact_count_text_color"
+        android:textSize="12sp"
+        android:singleLine="true"
+        android:ellipsize="middle" />
+</LinearLayout>
diff --git a/res/layout/group_browse_list_account_header.xml b/res/layout/group_browse_list_account_header.xml
index 78e0639..7bfbd07 100644
--- a/res/layout/group_browse_list_account_header.xml
+++ b/res/layout/group_browse_list_account_header.xml
@@ -26,39 +26,6 @@
         android:layout_width="match_parent"
         android:layout_height="@dimen/list_header_extra_top_padding" />
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="?attr/list_item_header_height"
-        android:layout_marginLeft="?attr/list_item_padding_left"
-        android:layout_marginRight="?attr/list_item_padding_right"
-        android:background="@drawable/list_section_divider_holo_custom"
-        android:orientation="horizontal">
-
-        <TextView
-            android:id="@+id/account_type"
-            android:layout_width="0px"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:layout_gravity="center_vertical"
-            android:paddingLeft="?attr/list_item_header_text_indent"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="@color/people_app_theme_color"
-            android:textStyle="bold"
-            android:textAllCaps="true"
-            android:singleLine="true"/>
-
-        <!-- TODO: Shold use correct color with a correct name (content should be same).
-             can use "?android:attr/textColorTertiary" -->
-        <TextView
-            android:id="@+id/account_name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:textColor="@color/contact_count_text_color"
-            android:textSize="12sp"
-            android:singleLine="true"
-            android:ellipsize="middle" />
-    </LinearLayout>
+    <include layout="@layout/group_account_header_horizontal" />
 
 </LinearLayout>
diff --git a/res/layout/phone_contact_tile_list.xml b/res/layout/phone_contact_tile_list.xml
index 289fba3..57dd66c 100644
--- a/res/layout/phone_contact_tile_list.xml
+++ b/res/layout/phone_contact_tile_list.xml
@@ -21,7 +21,8 @@
     android:layout_height="match_parent"
     android:orientation="vertical"
     android:paddingBottom="?android:attr/actionBarSize"
-    android:divider="?android:attr/dividerHorizontal">
+    android:divider="?android:attr/dividerHorizontal"
+    android:showDividers="end">
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
@@ -38,7 +39,7 @@
             android:id="@+id/contact_tile_list_empty"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:gravity="center_horizontal"
+            android:gravity="center"
             android:layout_marginTop="@dimen/empty_message_top_margin"
             android:textColor="?android:attr/textColorSecondary"
             android:textAppearance="?android:attr/textAppearanceLarge"/>
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 3158598..8eaa915 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -46,7 +46,7 @@
 
          TODO: look for better idea. -->
     <item
-        android:id="@+id/fake_menu_item"
+        android:id="@+id/empty_right_menu_item"
         android:actionLayout="@layout/empty2"
         android:showAsAction="ifRoom" />
 </menu>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 252416e..158d8fa 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Instellings"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte om te wys"</string>
     <string name="menu_settings" msgid="377929915873428211">"Instellings"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Hulp"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Vertoonopsies"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Vind kontakte"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index adfe377..d3cc56f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"ቅንብሮች"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ዕውቂያዎች አሳይ"</string>
     <string name="menu_settings" msgid="377929915873428211">"ቅንብሮች"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"እገዛ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ማሳያ አማራጮች"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>፣ <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"ዕውቂያዎች አግኝ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 6fdd2b6..3fd4b0b 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"الإعدادات"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"جهات الاتصال التي يتم عرضها"</string>
     <string name="menu_settings" msgid="377929915873428211">"الإعدادات"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"مساعدة"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"خيارات العرض"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"البحث عن جهات اتصال"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 65d27f6..d48eef9 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Налады"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Кантакты для адлюстр."</string>
     <string name="menu_settings" msgid="377929915873428211">"Налады"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Даведка"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Паказаць параметры"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Знайсці кантакты"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 1784a3d..8a33bde 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Настройки"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за показване"</string>
     <string name="menu_settings" msgid="377929915873428211">"Настройки"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Помощ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Опции за показване"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Намиране на контакти"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 1940b54..9692191 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Configuració"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactes per mostrar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configuració"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ajuda"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcions de visualització"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Cerca contactes"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 8d47ada..66a1102 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavení"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty k zobrazení"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavení"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Nápověda"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti zobrazení"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Najít kontakty"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 51ed768..bb646f4 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Indstillinger"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Viste kontaktpersoner"</string>
     <string name="menu_settings" msgid="377929915873428211">"Indstillinger"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Hjælp"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Indstillinger for visning"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Find kontaktpersoner"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 486b8bb..594334f 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Einstellungen"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte zum Anzeigen"</string>
     <string name="menu_settings" msgid="377929915873428211">"Einstellungen"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Hilfe"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Anzeigeoptionen"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Kontakte suchen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 5288138..cfab0ab 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Ρυθμίσεις"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Επαφές για προβολή"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ρυθμίσεις"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Βοήθεια"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Επιλογές προβολής"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Εύρεση επαφών"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 43721ad..0820a6b 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
     <string name="menu_settings" msgid="377929915873428211">"Settings"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Help"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Find contacts"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 9d6841f..c389b7b 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -151,9 +151,9 @@
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"¿Eliminar registro?"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Se eliminarán todos tus registros de llamadas."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Borrando registro de llamadas..."</string>
-    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"¿Deseas borrar los contactos frecuentes?"</string>
-    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Estás a punto de borrar la lista de contactos frecuentes en las aplicaciones de teléfono y usuarios y obligarás a las aplicaciones de correo a aprender nuevamente tus preferencias de direcciones."</string>
-    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Borrando contactos frecuentes..."</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"¿Borrar los contactos frecuentes?"</string>
+    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Estás a punto de borrar la lista de contactos frecuentes de las aplicaciones Personas y Teléfono y harás que las aplicaciones de correo deban aprender nuevamente tus preferencias."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Borrando contactos frecuentes…"</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
     <string name="voicemail" msgid="3851469869202611441">"Correo de voz"</string>
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Configuración"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos para mostrar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configuración"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ayuda"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opciones de visualización"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Buscar contactos"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e73398b..b478a12 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Ajustes"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos que mostrar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ajustes"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ayuda"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opciones de visualización"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Buscar contactos"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index e691bd2..1cf5078 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Seaded"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kuvatavad kontaktid"</string>
     <string name="menu_settings" msgid="377929915873428211">"Seaded"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Abi"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Kuvamisvalikud"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Otsige kontakte"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index bff0bc0..2fbf33b 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"تنظیمات"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"مخاطبین جهت نمایش"</string>
     <string name="menu_settings" msgid="377929915873428211">"تنظیمات"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"راهنمایی"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"گزینه های نمایش"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"پیدا کردن مخاطبین"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 2241df7..4ef41cd 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Asetukset"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Näytettävät yhteystiedot"</string>
     <string name="menu_settings" msgid="377929915873428211">"Asetukset"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ohje"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Näyttövalinnat"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Etsi yhteystietoja"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index e3f9f69..1feea62 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Paramètres"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts à afficher"</string>
     <string name="menu_settings" msgid="377929915873428211">"Paramètres"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Aide"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Options d\'affichage"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Rechercher contacts"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 9824d34..61301e4 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शन के लिए संपर्क"</string>
     <string name="menu_settings" msgid="377929915873428211">"सेटिंग"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"सहायता"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"प्रदर्शन विकल्प"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"संपर्क ढूंढें"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 76a1f1c..4a6ac37 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -151,7 +151,7 @@
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Izbrisati dnevnik poziva?"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Svi vaši zapisi poziva bit će izbrisani."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Brisanje dnevnika poziva..."</string>
-    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Briši podatke o čestim kontaktima?"</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Brisati podatke o čestim kontaktima?"</string>
     <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Obrisat ćete popis osoba s kojima često kontaktirate u aplikacijama Osobe i Telefoni tako da će aplikacije e-pošte morati naučiti vaše preference adresiranja od početka."</string>
     <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje često kontaktiranih..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Postavke"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
     <string name="menu_settings" msgid="377929915873428211">"Postavke"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Pomoć"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcije prikaza"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Pronađi kontakte"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 57ccdb6..99faa34 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Beállítások"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Megjelenítendő névjegyek"</string>
     <string name="menu_settings" msgid="377929915873428211">"Beállítások"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Súgó"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Megjelenítési beállítások"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Névjegy keresése"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4f5502c..4452b46 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -237,8 +237,8 @@
     <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Satu file atau lebih tidak dapat diimpor (%s)."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Kesalahan tidak dikenal."</string>
     <string name="select_vcard_title" msgid="7791371083694672861">"Pilih file vCard"</string>
-    <string name="caching_vcard_title" msgid="1226272312940516605">"Menyimpan ke tembolok"</string>
-    <string name="caching_vcard_message" msgid="4926308675041506756">"Menyimpan vCard ke tembolok untuk penyimpanan lokal sementara. Impor yang sebenarnya akan segera dimulai."</string>
+    <string name="caching_vcard_title" msgid="1226272312940516605">"Menyimpan ke cache"</string>
+    <string name="caching_vcard_message" msgid="4926308675041506756">"Menyimpan vCard ke cache untuk penyimpanan lokal sementara. Impor yang sebenarnya akan segera dimulai."</string>
     <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimpor <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Mengimpor <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Tidak dapat membaca data vCard"</string>
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Setelan"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kenalan untuk ditampilkan"</string>
     <string name="menu_settings" msgid="377929915873428211">"Setelan"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Bantuan"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opsi tampilan"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Temukan kenalan"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 4021d46..2983081 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Impostazioni"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatti da visualizzare"</string>
     <string name="menu_settings" msgid="377929915873428211">"Impostazioni"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Guida"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opzioni di visualizzazione"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Trova contatti"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 9c405c7..1606fce 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"הגדרות"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"אנשי קשר להצגה"</string>
     <string name="menu_settings" msgid="377929915873428211">"הגדרות"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"עזרה"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"אפשרויות תצוגה"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"חפש אנשי קשר"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 5c40be2..9e1300d 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"表示する連絡先"</string>
     <string name="menu_settings" msgid="377929915873428211">"設定"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"ヘルプ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"表示オプション"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>、<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"連絡先を検索"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 1abd37d..a9aea70 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"설정"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"표시할 연락처"</string>
     <string name="menu_settings" msgid="377929915873428211">"설정"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"도움말"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"표시 옵션"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"연락처 찾기"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 274aeef..8a56cc9 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Nustatymai"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Pateiktini kontaktai"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nustatymai"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Pagalba"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Pateikties parinktys"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"„<xliff:g id="COMPANY_0">%2$s</xliff:g>“, „<xliff:g id="COMPANY_1">%1$s</xliff:g>“"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Ieškoti kontaktų"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 3819f55..dc5c502 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Iestatījumi"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Attēlojamās kontaktpers."</string>
     <string name="menu_settings" msgid="377929915873428211">"Iestatījumi"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Palīdzība"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Attēlošanas opcijas"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Meklēt kontaktpersonas"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 15d3e6a..57f9e53 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -152,7 +152,7 @@
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Semua rekod panggilan anda akan dipadamkan."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Memadam bersih log panggilan..."</string>
     <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Padam bersih senarai kerap dihubungi?"</string>
-    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Anda akan mengosongkan senarai orang yang kerap dihubungi dalam apl Orang dan Telefon serta memaksa apl e-mel untuk mempelajari pilihan alamat anda dari mula."</string>
+    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Anda akan mengosongkan senarai orang yang kerap dihubungi dalam apl Orang dan Telefon serta memaksa apl e-mel untuk mempelajari pilihan alamat anda dari awal."</string>
     <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Memadam bersih senarai kerap dihubungi..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
@@ -459,8 +459,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Tetapan"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kenalan untuk dipaparkan"</string>
     <string name="menu_settings" msgid="377929915873428211">"Tetapan"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Bantuan"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Pilihan paparan"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Cari kenalan"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 26cc8cc..0b5e123 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Innstillinger"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakter i visning"</string>
     <string name="menu_settings" msgid="377929915873428211">"Innstillinger"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Hjelp"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Vis grupper"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Finn kontakter"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index d5f02ab..c59fa42 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Instellingen"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Zichtbare contacten"</string>
     <string name="menu_settings" msgid="377929915873428211">"Instellingen"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Help"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Weergaveopties"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Contacten vinden"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index c10c6bd..389d91e 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -151,12 +151,9 @@
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Usunąć rejestr połączeń?"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Wszystkie dane połączeń zostaną usunięte."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Czyszczenie rejestru połączeń…"</string>
-    <!-- no translation found for clearFrequentsConfirmation_title (766292372438450432) -->
-    <skip />
-    <!-- no translation found for clearFrequentsConfirmation (3254215748990281318) -->
-    <skip />
-    <!-- no translation found for clearFrequentsProgress_title (5157001637482794212) -->
-    <skip />
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Wyczyścić częste kontakty?"</string>
+    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Wyczyścisz listę częstych kontaktów w aplikacjach Osoby i Telefon. Aplikacje pocztowe będą musiały od nowa poznawać Twoje preferencje adresowe."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Czyszczę częste kontakty…"</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"Numer MEID"</string>
     <string name="voicemail" msgid="3851469869202611441">"Poczta głosowa"</string>
@@ -288,8 +285,7 @@
     <string name="quickcontact_missing_app" msgid="358168575340921552">"Nie znaleziono aplikacji do obsługi tego działania."</string>
     <string name="missing_name" msgid="8745511583852904385">"(Bez nazwy)"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Konta"</string>
-    <!-- no translation found for menu_clear_frequents (7688250191932838833) -->
-    <skip />
+    <string name="menu_clear_frequents" msgid="7688250191932838833">"Wyczyść częste kontakty"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty do wyświetlenia"</string>
     <string name="menu_import_export" msgid="26217871113229507">"Importuj/eksportuj"</string>
     <string name="dialog_import_export" msgid="4360648034889921624">"Importuj/eksportuj kontakty"</string>
@@ -461,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Ustawienia"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty do wyświetlenia"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ustawienia"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Pomoc"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcje wyświetlania"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Znajdź kontakty"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 15203ad..c8175ef 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Definições"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos a apresentar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Definições"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ajuda"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de visualização"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Localizar contactos"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 2291f16..36cde51 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Configurações"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatos a exibir"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configurações"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ajudar"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de exibição"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Localizar contatos"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 60ad868..9a86b66 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -151,9 +151,9 @@
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Ştergeţi apelurile?"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Toate înregistrările apelurilor dvs. vor fi şterse."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Se goleşte jurnalul de apeluri..."</string>
-    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Ştergeţi lista pers. frecv. contact.?"</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Ştergeţi persoane frecvent contactate?"</string>
     <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Veţi şterge lista cu persoanele contactate cel mai frecvent din aplicaţiile Persoane şi Telefon şi veţi forţa aplicaţiile de e-mail să reţină preferinţele dvs. pentru adrese de la zero."</string>
-    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Şterg. listă pers. frecv. contact…"</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Ştergeți persoane frecv. contactate…"</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
     <string name="voicemail" msgid="3851469869202611441">"Mesagerie vocală"</string>
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Setări"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Pers. din agendă de afiş."</string>
     <string name="menu_settings" msgid="377929915873428211">"Setări"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Ajutor"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opţiuni de afişare"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Găsiţi contacte"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index d54ed9d..c9c8c2c 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Настройки"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Фильтр контактов"</string>
     <string name="menu_settings" msgid="377929915873428211">"Настройки"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Справка"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Варианты отображения"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Найти контакты"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 5b8599c..7c8bd40 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavenia"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty na zobrazenie"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavenia"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Pomocník"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti zobrazenia"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Nájsť kontakty"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 0806025..c3ff636 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavitve"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Stiki za prikaz"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavitve"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Pomoč"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti prikaza"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Najdi stike"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 9fbd4b5..2db17b7 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Подешавања"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за приказ"</string>
     <string name="menu_settings" msgid="377929915873428211">"Подешавања"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Помоћ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Опције приказа"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Пронађи контакте"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 34f1540..1783117 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Inställningar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakter som ska visas"</string>
     <string name="menu_settings" msgid="377929915873428211">"Inställningar"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Hjälp"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Visa alternativ"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Sök efter kontakter"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 394724c..290afa4 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -459,8 +459,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Mipangilio"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Anwani za uonyesha"</string>
     <string name="menu_settings" msgid="377929915873428211">"Mipangilio"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Msaada"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Onyesha machaguo"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Tafuta anwani"</string>
diff --git a/res/values-sw580dp-w940dp/donottranslate_config.xml b/res/values-sw580dp-w940dp/donottranslate_config.xml
index 92d2780..5e5be30 100644
--- a/res/values-sw580dp-w940dp/donottranslate_config.xml
+++ b/res/values-sw580dp-w940dp/donottranslate_config.xml
@@ -19,4 +19,5 @@
 
 <resources>
     <bool name="config_browse_list_show_images">true</bool>
+    <bool name="config_use_two_panes_in_favorites">true</bool>
 </resources>
diff --git a/res/values-sw580dp-w940dp/integers.xml b/res/values-sw580dp-w940dp/integers.xml
index 8ce96de..191eeb8 100644
--- a/res/values-sw580dp-w940dp/integers.xml
+++ b/res/values-sw580dp-w940dp/integers.xml
@@ -15,5 +15,6 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">3</integer>
+    <integer name="contact_tile_column_count_in_favorites">3</integer>
     <integer name="updates_tab_snippet_max_lines">7</integer>
 </resources>
diff --git a/res/values-sw580dp/donottranslate_config.xml b/res/values-sw580dp/donottranslate_config.xml
index cf4286e..3d0dea0 100644
--- a/res/values-sw580dp/donottranslate_config.xml
+++ b/res/values-sw580dp/donottranslate_config.xml
@@ -19,6 +19,7 @@
 
 <resources>
     <bool name="config_use_two_panes">true</bool>
+    <bool name="config_use_two_panes_in_favorites">false</bool>
     <bool name="show_home_icon">true</bool>
     <bool name="config_show_group_action_in_action_bar">false</bool>
     <bool name="config_browse_list_show_images">false</bool>
diff --git a/res/values-sw580dp/integers.xml b/res/values-sw580dp/integers.xml
index a62fa14..cdf6e4a 100644
--- a/res/values-sw580dp/integers.xml
+++ b/res/values-sw580dp/integers.xml
@@ -15,5 +15,6 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">2</integer>
+    <integer name="contact_tile_column_count_in_favorites">3</integer>
     <integer name="updates_tab_snippet_max_lines">4</integer>
 </resources>
diff --git a/res/values-sw680dp-w1000dp/donottranslate_config.xml b/res/values-sw680dp-w1000dp/donottranslate_config.xml
deleted file mode 100644
index 92d2780..0000000
--- a/res/values-sw680dp-w1000dp/donottranslate_config.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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>
-    <bool name="config_browse_list_show_images">true</bool>
-</resources>
diff --git a/res/values-sw680dp-w1000dp/integers.xml b/res/values-sw680dp-w1000dp/integers.xml
index 5fda2ed..bc9b2b7 100644
--- a/res/values-sw680dp-w1000dp/integers.xml
+++ b/res/values-sw680dp-w1000dp/integers.xml
@@ -15,4 +15,5 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">4</integer>
-</resources>
\ No newline at end of file
+    <integer name="contact_tile_column_count_in_favorites">4</integer>
+</resources>
diff --git a/res/values-sw680dp/donottranslate_config.xml b/res/values-sw680dp/donottranslate_config.xml
index 92d2780..5e5be30 100644
--- a/res/values-sw680dp/donottranslate_config.xml
+++ b/res/values-sw680dp/donottranslate_config.xml
@@ -19,4 +19,5 @@
 
 <resources>
     <bool name="config_browse_list_show_images">true</bool>
+    <bool name="config_use_two_panes_in_favorites">true</bool>
 </resources>
diff --git a/res/values-sw680dp/integers.xml b/res/values-sw680dp/integers.xml
index eaf5971..5b348a5 100644
--- a/res/values-sw680dp/integers.xml
+++ b/res/values-sw680dp/integers.xml
@@ -15,5 +15,6 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">2</integer>
+    <integer name="contact_tile_column_count_in_favorites">2</integer>
     <integer name="updates_tab_snippet_max_lines">7</integer>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 4f12795..0892bb4 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"การตั้งค่า"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"รายชื่อติดต่อที่จะแสดง"</string>
     <string name="menu_settings" msgid="377929915873428211">"การตั้งค่า"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"ความช่วยเหลือ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ตัวเลือกการแสดงผล"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"ค้นหารายชื่อติดต่อ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index fc59c12..ddf61f0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -151,12 +151,9 @@
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"I-clear ang log ng tawag?"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Tatanggalin ang lahat ng iyong record ng tawag."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Kini-clear ang log ng tawag…"</string>
-    <!-- no translation found for clearFrequentsConfirmation_title (766292372438450432) -->
-    <skip />
-    <!-- no translation found for clearFrequentsConfirmation (3254215748990281318) -->
-    <skip />
-    <!-- no translation found for clearFrequentsProgress_title (5157001637482794212) -->
-    <skip />
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"I-clear ang mga madalas tinatawagan?"</string>
+    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Iki-clear mo ang listahan ng mga madalas na tinatawagan sa Mga Tao at Telepono na mga app, at pilitin ang mga email app na matutunan ang iyong mga kagustuhan sa pag-address mula sa umpisa."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Kini-clear ang mga madalas tinatawagan…"</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
     <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -288,8 +285,7 @@
     <string name="quickcontact_missing_app" msgid="358168575340921552">"Walang natagpuang app na mangangasiwa sa pagkilos na ito."</string>
     <string name="missing_name" msgid="8745511583852904385">"(Walang pangalan)"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Mga Account"</string>
-    <!-- no translation found for menu_clear_frequents (7688250191932838833) -->
-    <skip />
+    <string name="menu_clear_frequents" msgid="7688250191932838833">"I-clear ang mga madadalas"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Mga contact na ipapakita"</string>
     <string name="menu_import_export" msgid="26217871113229507">"Mag-import/mag-export"</string>
     <string name="dialog_import_export" msgid="4360648034889921624">"Mag-import/mag-export ng mga contact"</string>
@@ -461,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Mga Setting"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Mga contact na ipapakita"</string>
     <string name="menu_settings" msgid="377929915873428211">"Mga Setting"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Tulong"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Mga pagpipilian sa pagpapakita"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Mghanap ng contact"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 516e7d7..c9ade87 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Görüntülenecek kişiler"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ayarlar"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Yardım"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Görüntüleme seçenekleri"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Kişileri bul"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 7c4ad63..15a4c2a 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Налаштування"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти для показу"</string>
     <string name="menu_settings" msgid="377929915873428211">"Налаштування"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Довідка"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Параметри відображення"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Пошук контактів"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f55164e..4b4ed47 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Cài đặt"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"DS liên hệ để hiển thị"</string>
     <string name="menu_settings" msgid="377929915873428211">"Cài đặt"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Trợ giúp"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Tùy chọn hiển thị"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Tìm địa chỉ liên hệ"</string>
diff --git a/res/values-w470dp/integers.xml b/res/values-w470dp/integers.xml
index d247e46..bc9b2b7 100644
--- a/res/values-w470dp/integers.xml
+++ b/res/values-w470dp/integers.xml
@@ -15,4 +15,5 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">4</integer>
+    <integer name="contact_tile_column_count_in_favorites">4</integer>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 525aa59..db1cf96 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"设置"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要显示的联系人"</string>
     <string name="menu_settings" msgid="377929915873428211">"设置"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"帮助"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"显示选项"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>,<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"查找联系人"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6c584e3..4ff5b35 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要顯示的聯絡人"</string>
     <string name="menu_settings" msgid="377929915873428211">"設定"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"說明"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"顯示選項"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_1">%1$s</xliff:g> <xliff:g id="COMPANY_0">%2$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"尋找聯絡人"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5e4d54e..366befe 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -151,9 +151,9 @@
     <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Sula ifayela lokungena"</string>
     <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Yonke imininingwane eqoshiwe iyosuswa."</string>
     <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Isula imininingwane yokushaya..."</string>
-    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Sula okuthintwa njalo?"</string>
-    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Uzosula uhlu oluthintwa njalo kwizinhlelo zokusebenza zaBantu kanye Nefoni, futhi iphoqelela izinhlelo zokusebenza ze-imeyli ukufunda okukhethayo kokuthintana kusuka ekuqaleni."</string>
-    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Isula okuthintwa njalo…"</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Sula oxhumana nabo njalo?"</string>
+    <string name="clearFrequentsConfirmation" msgid="3254215748990281318">"Uzosula uhlu okuxhunyanwa nalo njalo kwizinhlelo zokusebenza zaBantu kanye Nefoni, futhi iphoqelela izinhlelo zokusebenza ze-imeyli ukufunda okukhethayo kokuthintana kusuka ekuqaleni."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Isula oxhumana nabo njalo…"</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"I-MEID"</string>
     <string name="voicemail" msgid="3851469869202611441">"Ivoyisimeyili"</string>
@@ -285,7 +285,7 @@
     <string name="quickcontact_missing_app" msgid="358168575340921552">"Ayikho insiza etholakele ukubhekana nalengxenye."</string>
     <string name="missing_name" msgid="8745511583852904385">"(alikho igama)"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Ama-akhawunti"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Sula okuthintwa njalo"</string>
+    <string name="menu_clear_frequents" msgid="7688250191932838833">"Sula oxhumana nabo njalo"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Othintana nabo abazoboniswa"</string>
     <string name="menu_import_export" msgid="26217871113229507">"Ngenisa/Thekelisa"</string>
     <string name="dialog_import_export" msgid="4360648034889921624">"Ngenisa/Thekelisa othintana nabo"</string>
@@ -457,8 +457,7 @@
     <string name="activity_title_settings" msgid="5464130076132770781">"Izilungiselelo"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Othintana nabo abazoboniswa"</string>
     <string name="menu_settings" msgid="377929915873428211">"Izilungiselelo"</string>
-    <!-- no translation found for menu_help (5123887102216637725) -->
-    <skip />
+    <string name="menu_help" msgid="5123887102216637725">"Usizo"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Izinketho zokubonisa"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="hint_findContacts" msgid="1808681193458772072">"Thola othintana nabo"</string>
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index 64a1243..dd94097 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -107,6 +107,12 @@
          shown in their own screens. This flag must be in sync with the layout definitions. -->
     <bool name="config_use_two_panes">false</bool>
 
+    <!--  If true, Contacts uses two panes in the favorites view, one for starred and one for
+          frequently contacted.  If false, only one list is shown with starred on top and frequently
+          contacted listed below. Note: This should not be true if config_use_two_panes is
+          false. -->
+    <bool name="config_use_two_panes_in_favorites">false</bool>
+
     <!-- If true, the "home" icon on the action bar will be shown. -->
     <bool name="show_home_icon">false</bool>
 
diff --git a/res/values/integers.xml b/res/values/integers.xml
index e742ba0..6d5f7c9 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -18,6 +18,9 @@
     <!-- Determines the number of columns in a ContactTileRow -->
     <integer name="contact_tile_column_count">2</integer>
 
+    <!--  Determines the number of columns in a ContactTileRow in the favorites tab -->
+    <integer name="contact_tile_column_count_in_favorites">2</integer>
+
     <!-- Max lines to display of a contact's snippet in the "updates" tab of the contact card tab carousel  -->
     <integer name="updates_tab_snippet_max_lines">3</integer>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index defd755..7404335 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -281,13 +281,7 @@
     </style>
 
     <style name="DialtactsActionBarStyle" parent="android:Widget.Holo.ActionBar">
-        <!-- For making test easier. Should use @null.
-             TODO: use @null once we're sure issue 6041917 is gone.
-             Don't forget to add android:showDividers="end" to call_log_fragment.xml
-             and phone_contact_tile_list.xml, to show horizontal divider between
-             the list and the split ActionBar.
-          -->
-        <!-- <item name="android:backgroundSplit">@null</item> -->
+        <item name="android:backgroundSplit">@null</item>
         <item name="android:backgroundStacked">@drawable/ab_stacked_opaque_dark_holo</item>
         <item name="android:displayOptions"></item>
     </style>
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index 6f13924..b5b0a63 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -82,10 +82,7 @@
         implements View.OnClickListener {
     private static final String TAG = "DialtactsActivity";
 
-    /**
-     * STOPSHIP: This must be turned off after issue 6127931 and 6041917 being resolved.
-     */
-    public static final boolean DEBUG = true;
+    public static final boolean DEBUG = false;
 
     /** Used to open Call Setting */
     private static final String PHONE_PACKAGE = "com.android.phone";
@@ -939,79 +936,127 @@
     public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.dialtacts_options, menu);
+
+        // set up intents and onClick listeners
+        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
+        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
+        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
+        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
+
+        callSettingsMenuItem.setIntent(DialtactsActivity.getCallSettingsIntent());
+        searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
+        filterOptionMenuItem.setOnMenuItemClickListener(mFilterOptionsMenuItemClickListener);
+        addContactOptionMenuItem.setIntent(
+                new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
+
         return true;
     }
 
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
+        if (mInSearchUi) {
+            prepareOptionsMenuInSearchMode(menu);
+        } else {
+            // get reference to the currently selected tab
+            final Tab tab = getActionBar().getSelectedTab();
+            if (tab != null) {
+                switch(tab.getPosition()) {
+                    case TAB_INDEX_DIALER:
+                        prepareOptionsMenuForDialerTab(menu);
+                        break;
+                    case TAB_INDEX_CALL_LOG:
+                        prepareOptionsMenuForCallLogTab(menu);
+                        break;
+                    case TAB_INDEX_FAVORITES:
+                        prepareOptionsMenuForFavoritesTab(menu);
+                        break;
+                }
+            }
+        }
+        return true;
+    }
+
+    private void prepareOptionsMenuInSearchMode(Menu menu) {
+        // get references to menu items
         final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
         final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
         final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
         final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
-        final Tab tab = getActionBar().getSelectedTab();
-        final MenuItem fakeMenuItem = menu.findItem(R.id.fake_menu_item);
-        if (mInSearchUi) {
-            searchMenuItem.setVisible(false);
-            if (ViewConfiguration.get(this).hasPermanentMenuKey()) {
-                filterOptionMenuItem.setVisible(true);
-                filterOptionMenuItem.setOnMenuItemClickListener(
-                        mFilterOptionsMenuItemClickListener);
-            } else {
-                // Filter option menu should be not be shown as a overflow menu.
-                filterOptionMenuItem.setVisible(false);
-            }
-            addContactOptionMenuItem.setVisible(false);
-            callSettingsMenuItem.setVisible(false);
-            fakeMenuItem.setVisible(false);
-        } else {
-            final boolean showCallSettingsMenu;
-            if (tab != null && tab.getPosition() == TAB_INDEX_DIALER) {
-                if (DEBUG) {
-                    Log.d(TAG, "onPrepareOptionsMenu(dialer). swipe: " + mDuringSwipe
-                            + ", user tab click: " + mUserTabClick);
-                }
-                if (mDuringSwipe || mUserTabClick) {
-                    // During horizontal movement, we just show real ActionBar menu items.
-                    searchMenuItem.setVisible(true);
-                    searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
-                    showCallSettingsMenu = true;
+        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);
 
-                    fakeMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
-                } else {
-                    searchMenuItem.setVisible(false);
-                    // When permanent menu key is _not_ available, the call settings menu should be
-                    // available via DialpadFragment.
-                    showCallSettingsMenu = ViewConfiguration.get(this).hasPermanentMenuKey();
-                    fakeMenuItem.setVisible(false);
-                }
-            } else {
-                searchMenuItem.setVisible(true);
-                searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
-                showCallSettingsMenu = true;
-                fakeMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey()
-                        && (tab != null && tab.getPosition() == TAB_INDEX_CALL_LOG));
-            }
-            if (tab != null && tab.getPosition() == TAB_INDEX_FAVORITES) {
-                filterOptionMenuItem.setVisible(true);
-                filterOptionMenuItem.setOnMenuItemClickListener(
-                        mFilterOptionsMenuItemClickListener);
-                addContactOptionMenuItem.setVisible(true);
-                addContactOptionMenuItem.setIntent(
-                        new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
-            } else {
-                filterOptionMenuItem.setVisible(false);
-                addContactOptionMenuItem.setVisible(false);
-            }
+        // prepare the menu items
+        searchMenuItem.setVisible(false);
+        filterOptionMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
+        addContactOptionMenuItem.setVisible(false);
+        callSettingsMenuItem.setVisible(false);
+        emptyRightMenuItem.setVisible(false);
+    }
 
-            if (showCallSettingsMenu) {
-                callSettingsMenuItem.setVisible(true);
-                callSettingsMenuItem.setIntent(DialtactsActivity.getCallSettingsIntent());
-            } else {
-                callSettingsMenuItem.setVisible(false);
-            }
+    private void prepareOptionsMenuForDialerTab(Menu menu) {
+        if (DEBUG) {
+            Log.d(TAG, "onPrepareOptionsMenu(dialer). swipe: " + mDuringSwipe
+                    + ", user tab click: " + mUserTabClick);
         }
 
-        return true;
+        // get references to menu items
+        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
+        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
+        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
+        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
+        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);
+
+        // prepare the menu items
+        filterOptionMenuItem.setVisible(false);
+        addContactOptionMenuItem.setVisible(false);
+        if (mDuringSwipe || mUserTabClick) {
+            // During horizontal movement, the real ActionBar menu items are shown
+            searchMenuItem.setVisible(true);
+            callSettingsMenuItem.setVisible(true);
+            // When there is a permanent menu key, there is no overflow icon on the right of
+            // the action bar which would force the search menu item (if it is visible) to the
+            // left.  This is the purpose of showing the emptyRightMenuItem.
+            emptyRightMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
+        } else {
+            // This is when the user is looking at the dialer pad.  In this case, the real
+            // ActionBar is hidden and fake menu items are shown.
+            searchMenuItem.setVisible(false);
+            // If a permanent menu key is available, then we need to show the call settings item
+            // so that the call settings item can be invoked by the permanent menu key.
+            callSettingsMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
+            emptyRightMenuItem.setVisible(false);
+        }
+    }
+
+    private void prepareOptionsMenuForCallLogTab(Menu menu) {
+        // get references to menu items
+        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
+        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
+        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
+        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
+        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);
+
+        // prepare the menu items
+        searchMenuItem.setVisible(true);
+        filterOptionMenuItem.setVisible(false);
+        addContactOptionMenuItem.setVisible(false);
+        callSettingsMenuItem.setVisible(true);
+        emptyRightMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
+    }
+
+    private void prepareOptionsMenuForFavoritesTab(Menu menu) {
+        // get references to menu items
+        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
+        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
+        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
+        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
+        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);
+
+        // prepare the menu items
+        searchMenuItem.setVisible(true);
+        filterOptionMenuItem.setVisible(true);
+        addContactOptionMenuItem.setVisible(true);
+        callSettingsMenuItem.setVisible(true);
+        emptyRightMenuItem.setVisible(false);
     }
 
     @Override
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 2d6e4c8..464075a 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -48,8 +48,8 @@
 import com.android.contacts.list.DirectoryListLoader;
 import com.android.contacts.list.OnContactBrowserActionListener;
 import com.android.contacts.list.OnContactsUnavailableActionListener;
-import com.android.contacts.list.ProviderStatusLoader;
-import com.android.contacts.list.ProviderStatusLoader.ProviderStatusListener;
+import com.android.contacts.list.ProviderStatusWatcher;
+import com.android.contacts.list.ProviderStatusWatcher.ProviderStatusListener;
 import com.android.contacts.model.AccountTypeManager;
 import com.android.contacts.model.AccountWithDataSet;
 import com.android.contacts.preference.ContactsPreferenceActivity;
@@ -149,7 +149,7 @@
     private ContactListFilterController mContactListFilterController;
 
     private ContactsUnavailableFragment mContactsUnavailableFragment;
-    private ProviderStatusLoader mProviderStatusLoader;
+    private ProviderStatusWatcher mProviderStatusWatcher;
     private int mProviderStatus = -1;
 
     private boolean mOptionsMenuContactsAvailable;
@@ -207,7 +207,7 @@
     public PeopleActivity() {
         mInstanceId = sNextInstanceId.getAndIncrement();
         mIntentResolver = new ContactsIntentResolver(this);
-        mProviderStatusLoader = new ProviderStatusLoader(this);
+        mProviderStatusWatcher = ProviderStatusWatcher.getInstance(this);
     }
 
     @Override
@@ -247,7 +247,6 @@
             mContactDetailFragment = (ContactDetailFragment) fragment;
         } else if (fragment instanceof ContactsUnavailableFragment) {
             mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment;
-            mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader);
             mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
                     new ContactsUnavailableFragmentListener());
         }
@@ -269,6 +268,8 @@
         mContactListFilterController.checkFilterValidity(false);
         mContactListFilterController.addListener(this);
 
+        mProviderStatusWatcher.addListener(this);
+
         mIsRecreatedInstance = (savedState != null);
         createViewsAndFragments(savedState);
         if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
@@ -402,11 +403,13 @@
             mGroupDetailsView = getView(R.id.group_details_view);
             mBrowserView = getView(R.id.browse_view);
 
-            // 2-pane only fragments
-            mFrequentFragment = getFragment(R.id.frequent_fragment);
-            mFrequentFragment.setListener(mFavoritesFragmentListener);
-            mFrequentFragment.setDisplayType(DisplayType.FREQUENT_ONLY);
-            mFrequentFragment.enableQuickContact(true);
+            // Only favorites tab with two panes has a separate frequent fragment
+            if (PhoneCapabilityTester.isUsingTwoPanesInFavorites(this)) {
+                mFrequentFragment = getFragment(R.id.frequent_fragment);
+                mFrequentFragment.setListener(mFavoritesFragmentListener);
+                mFrequentFragment.setDisplayType(DisplayType.FREQUENT_ONLY);
+                mFrequentFragment.enableQuickContact(true);
+            }
 
             mContactDetailLoaderFragment = getFragment(R.id.contact_detail_loader_fragment);
             mContactDetailLoaderFragment.setListener(mContactDetailLoaderFragmentListener);
@@ -430,7 +433,7 @@
         fragmentManager.executePendingTransactions();
 
         // Setting Properties after fragment is created
-        if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
+        if (PhoneCapabilityTester.isUsingTwoPanesInFavorites(this)) {
             mFavoritesFragment.enableQuickContact(true);
             mFavoritesFragment.setDisplayType(DisplayType.STARRED_ONLY);
         } else {
@@ -486,14 +489,14 @@
         mOptionsMenuContactsAvailable = false;
 
         mProviderStatus = -1;
-        mProviderStatusLoader.setProviderStatusListener(null);
+        mProviderStatusWatcher.stop();
         super.onPause();
     }
 
     @Override
     protected void onResume() {
         super.onResume();
-        mProviderStatusLoader.setProviderStatusListener(this);
+        mProviderStatusWatcher.start();
         showContactsUnavailableFragmentIfNecessary();
 
         // Re-register the listener, which may have been cleared when onSaveInstanceState was
@@ -515,6 +518,8 @@
 
     @Override
     protected void onDestroy() {
+        mProviderStatusWatcher.removeListener(this);
+
         // Some of variables will be null if this Activity redirects Intent.
         // See also onCreate() or other methods called during the Activity's initialization.
         if (mActionBarAdapter != null) {
@@ -975,7 +980,7 @@
     }
 
     private void showContactsUnavailableFragmentIfNecessary() {
-        int providerStatus = mProviderStatusLoader.getProviderStatus();
+        int providerStatus = mProviderStatusWatcher.getProviderStatus();
         if (providerStatus == mProviderStatus) {
             return;
         }
@@ -1015,7 +1020,6 @@
             }
             if (mContactsUnavailableFragment == null) {
                 mContactsUnavailableFragment = new ContactsUnavailableFragment();
-                mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader);
                 mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
                         new ContactsUnavailableFragmentListener());
                 getFragmentManager().beginTransaction()
@@ -1448,7 +1452,7 @@
      * @return
      */
     private boolean hasFrequents() {
-        if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
+        if (PhoneCapabilityTester.isUsingTwoPanesInFavorites(this)) {
             return mFrequentFragment.hasFrequents();
         } else {
             return mFavoritesFragment.hasFrequents();
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 5ee25a2..27fdada 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -128,7 +128,6 @@
     private ContextMenuAdapter mContextMenuAdapter;
     private ContactPhotoManager mPhotoManager;
     private ContactListEmptyView mEmptyView;
-    private ProviderStatusLoader mProviderStatusLoader;
     private ContactsPreferences mContactsPrefs;
 
     private boolean mForceLoad;
@@ -291,10 +290,6 @@
 
         mContactsPrefs.registerChangeListener(mPreferencesChangeListener);
 
-        if (mProviderStatusLoader == null) {
-            mProviderStatusLoader = new ProviderStatusLoader(mContext);
-        }
-
         mForceLoad = loadPreferences();
 
         mDirectoryListStatus = STATUS_NOT_LOADED;
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
index 9f34c54..4ee20f5 100644
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ b/src/com/android/contacts/list/ContactTileListFragment.java
@@ -19,6 +19,7 @@
 import com.android.contacts.ContactTileLoaderFactory;
 import com.android.contacts.R;
 import com.android.contacts.list.ContactTileAdapter.DisplayType;
+import com.android.contacts.util.PhoneCapabilityTester;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -31,6 +32,7 @@
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -53,8 +55,6 @@
         void onCallNumberDirectly(String phoneNumber);
     }
 
-    private static int LOADER_CONTACTS = 1;
-
     private Listener mListener;
     private ContactTileAdapter mAdapter;
     private DisplayType mDisplayType;
@@ -68,7 +68,7 @@
         super.onAttach(activity);
 
         Resources res = getResources();
-        int columnCount = res.getInteger(R.integer.contact_tile_column_count);
+        int columnCount = res.getInteger(R.integer.contact_tile_column_count_in_favorites);
 
         mAdapter = new ContactTileAdapter(activity, mAdapterListener,
                 columnCount, mDisplayType);
@@ -97,7 +97,17 @@
     @Override
     public void onStart() {
         super.onStart();
-        getLoaderManager().initLoader(LOADER_CONTACTS, null, mContactTileLoaderListener);
+
+        // initialize the loader for this display type and destroy all others
+        final DisplayType[] loaderTypes = mDisplayType.values();
+        for (int i = 0; i < loaderTypes.length; i++) {
+            if (loaderTypes[i] == mDisplayType) {
+                getLoaderManager().initLoader(mDisplayType.ordinal(), null,
+                        mContactTileLoaderListener);
+            } else {
+                getLoaderManager().destroyLoader(loaderTypes[i].ordinal());
+            }
+        }
     }
 
     /**
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 74a578f..becc704 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -35,7 +35,7 @@
  */
 public class ContactsUnavailableFragment extends Fragment implements OnClickListener {
 
-    private ProviderStatusLoader mProviderStatusLoader;
+    private ProviderStatusWatcher mProviderStatusWatcher;
 
     private View mView;
     private TextView mMessageView;
@@ -52,6 +52,12 @@
     private OnContactsUnavailableActionListener mListener;
 
     @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mProviderStatusWatcher = ProviderStatusWatcher.getInstance(getActivity());
+    }
+
+    @Override
     public View onCreateView(
             LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         mView = inflater.inflate(R.layout.contacts_unavailable_fragment, null);
@@ -77,12 +83,8 @@
         mListener = listener;
     }
 
-    public void setProviderStatusLoader(ProviderStatusLoader loader) {
-        mProviderStatusLoader = loader;
-    }
-
     public void update() {
-        int providerStatus = mProviderStatusLoader.getProviderStatus();
+        int providerStatus = mProviderStatusWatcher.getProviderStatus();
         switch (providerStatus) {
             case ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS:
                 setMessageText(mNoContactsMsgResId, mNSecNoContactsMsgResId);
@@ -120,7 +122,7 @@
 
             case ProviderStatus.STATUS_UPGRADE_OUT_OF_MEMORY:
                 String message = getResources().getString(R.string.upgrade_out_of_memory,
-                        new Object[] { mProviderStatusLoader.getProviderStatusData() });
+                        new Object[] { mProviderStatusWatcher.getProviderStatusData() });
                 mMessageView.setText(message);
                 mMessageView.setGravity(Gravity.LEFT);
                 mMessageView.setVisibility(View.VISIBLE);
@@ -153,7 +155,7 @@
                 mListener.onFreeInternalStorageAction();
                 break;
             case R.id.import_failure_retry_button:
-                mProviderStatusLoader.retryUpgrade();
+                mProviderStatusWatcher.retryUpgrade();
                 break;
         }
     }
@@ -166,7 +168,7 @@
         mNoContactsMsgResId = resId;
         mNSecNoContactsMsgResId = secResId;
         if (mMessageView != null &&
-                mProviderStatusLoader.getProviderStatus() ==
+                mProviderStatusWatcher.getProviderStatus() ==
                     ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS) {
             if (resId != -1) {
                 mMessageView.setText(mNoContactsMsgResId);
diff --git a/src/com/android/contacts/list/PhoneFavoriteFragment.java b/src/com/android/contacts/list/PhoneFavoriteFragment.java
index a8eafdc..170790f 100644
--- a/src/com/android/contacts/list/PhoneFavoriteFragment.java
+++ b/src/com/android/contacts/list/PhoneFavoriteFragment.java
@@ -275,7 +275,7 @@
         // that will be available on onCreateView().
 
         mContactTileAdapter = new ContactTileAdapter(activity, mContactTileAdapterListener,
-                getResources().getInteger(R.integer.contact_tile_column_count),
+                getResources().getInteger(R.integer.contact_tile_column_count_in_favorites),
                 ContactTileAdapter.DisplayType.STREQUENT_PHONE_ONLY);
         mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
 
diff --git a/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java b/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java
index b35d446..d5b62e5 100644
--- a/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java
+++ b/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java
@@ -77,6 +77,13 @@
     }
 
     @Override
+    public boolean isEmpty() {
+        // Cannot use the super's method here because we add extra rows in getCount() to account
+        // for headers
+        return mContactTileAdapter.getCount() + mContactEntryListAdapter.getCount() == 0;
+    }
+
+    @Override
     public int getCount() {
         final int contactTileAdapterCount = mContactTileAdapter.getCount();
         final int contactEntryListAdapterCount = mContactEntryListAdapter.getCount();
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index 9be53f6..7680a97 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -20,6 +20,8 @@
 import com.android.contacts.util.AccountFilterUtil;
 
 import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
@@ -28,6 +30,7 @@
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.widget.TextView;
 
 /**
  * Fragment containing a phone number list for picking.
@@ -188,6 +191,14 @@
         super.startLoading();
     }
 
+    @Override
+    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+        super.onLoadFinished(loader, data);
+
+        // disable scroll bar if there is no data
+        setVisibleScrollbarEnabled(data.getCount() > 0);
+    }
+
     public void setUseCallableUri(boolean useCallableUri) {
         mUseCallableUri = useCallableUri;
     }
diff --git a/src/com/android/contacts/list/ProviderStatusLoader.java b/src/com/android/contacts/list/ProviderStatusLoader.java
deleted file mode 100644
index a6afa9f..0000000
--- a/src/com/android/contacts/list/ProviderStatusLoader.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-package com.android.contacts.list;
-
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.os.Handler;
-import android.provider.ContactsContract.ProviderStatus;
-
-/**
- * Checks provider status and configures a list adapter accordingly.
- */
-public class ProviderStatusLoader extends ContentObserver {
-
-    /**
-     * Callback interface invoked when the provider status changes.
-     */
-    public interface ProviderStatusListener {
-        public void onProviderStatusChange();
-    }
-
-    private static final String[] PROJECTION = new String[] {
-        ProviderStatus.STATUS,
-        ProviderStatus.DATA1
-    };
-
-    private static final int UNKNOWN = -1;
-
-    private final Context mContext;
-    private int mProviderStatus = UNKNOWN;
-    private String mProviderData;
-    private ProviderStatusListener mListener;
-    private Handler mHandler = new Handler();
-
-    public ProviderStatusLoader(Context context) {
-        super(null);
-        this.mContext = context;
-    }
-
-    public int getProviderStatus() {
-        if (mProviderStatus == UNKNOWN) {
-            loadProviderStatus();
-        }
-
-        return mProviderStatus;
-    }
-
-    public String getProviderStatusData() {
-        if (mProviderStatus == UNKNOWN) {
-            loadProviderStatus();
-        }
-
-        return mProviderData;
-    }
-
-    protected void loadProviderStatus() {
-
-        // Default to normal status
-        mProviderStatus = ProviderStatus.STATUS_NORMAL;
-
-        // This query can be performed on the UI thread because
-        // the API explicitly allows such use.
-        Cursor cursor = mContext.getContentResolver().query(ProviderStatus.CONTENT_URI,
-                PROJECTION, null, null, null);
-        if (cursor != null) {
-            try {
-                if (cursor.moveToFirst()) {
-                    mProviderStatus = cursor.getInt(0);
-                    mProviderData = cursor.getString(1);
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-    }
-
-    public void setProviderStatusListener(ProviderStatusListener listener) {
-        mListener = listener;
-
-        ContentResolver resolver = mContext.getContentResolver();
-        if (listener != null) {
-            mProviderStatus = UNKNOWN;
-            resolver.registerContentObserver(ProviderStatus.CONTENT_URI, false, this);
-        } else {
-            resolver.unregisterContentObserver(this);
-        }
-    }
-
-    @Override
-    public void onChange(boolean selfChange) {
-        // Deliver a notification on the UI thread
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mListener != null) {
-                    mProviderStatus = UNKNOWN;
-                    mListener.onProviderStatusChange();
-                }
-            }
-        });
-    }
-
-    /**
-     * Sends a provider status update, which will trigger a retry of database upgrade
-     */
-    public void retryUpgrade() {
-        ContentValues values = new ContentValues();
-        values.put(ProviderStatus.STATUS, ProviderStatus.STATUS_UPGRADING);
-        mContext.getContentResolver().update(ProviderStatus.CONTENT_URI, values, null, null);
-    }
-}
diff --git a/src/com/android/contacts/list/ProviderStatusWatcher.java b/src/com/android/contacts/list/ProviderStatusWatcher.java
new file mode 100644
index 0000000..3ce4b78
--- /dev/null
+++ b/src/com/android/contacts/list/ProviderStatusWatcher.java
@@ -0,0 +1,308 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import com.google.common.collect.Lists;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.provider.ContactsContract.ProviderStatus;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+/**
+ * A singleton that keeps track of the last known provider status.
+ *
+ * All methods must be called on the UI thread unless noted otherwise.
+ *
+ * All members must be set on the UI thread unless noted otherwise.
+ */
+public class ProviderStatusWatcher extends ContentObserver {
+    private static final String TAG = "ProviderStatusWatcher";
+    private static final boolean DEBUG = false;
+
+    /**
+     * Callback interface invoked when the provider status changes.
+     */
+    public interface ProviderStatusListener {
+        public void onProviderStatusChange();
+    }
+
+    private static final String[] PROJECTION = new String[] {
+        ProviderStatus.STATUS,
+        ProviderStatus.DATA1
+    };
+
+    /**
+     * We'll wait for this amount of time on the UI thread if the load hasn't finished.
+     */
+    private static final int LOAD_WAIT_TIMEOUT_MS = 1000;
+
+    private static final int STATUS_UNKNOWN = -1;
+
+    private static ProviderStatusWatcher sInstance;
+
+    private final Context mContext;
+    private final Handler mHandler = new Handler();
+
+    private final Object mSignal = new Object();
+
+    private int mStartRequestedCount;
+
+    private LoaderTask mLoaderTask;
+
+    /** Last known provider status.  This can be changed on a worker thread. */
+    private int mProviderStatus = STATUS_UNKNOWN;
+
+    /** Last known provider status data.  This can be changed on a worker thread. */
+    private String mProviderData;
+
+    private final ArrayList<ProviderStatusListener> mListeners = Lists.newArrayList();
+
+    private final Runnable mStartLoadingRunnable = new Runnable() {
+        @Override
+        public void run() {
+            startLoading();
+        }
+    };
+
+    /**
+     * Returns the singleton instance.
+     */
+    public synchronized static ProviderStatusWatcher getInstance(Context context) {
+        if (sInstance == null) {
+            sInstance = new ProviderStatusWatcher(context);
+        }
+        return sInstance;
+    }
+
+    private ProviderStatusWatcher(Context context) {
+        super(null);
+        mContext = context;
+    }
+
+    /** Add a listener. */
+    public void addListener(ProviderStatusListener listener) {
+        mListeners.add(listener);
+    }
+
+    /** Remove a listener */
+    public void removeListener(ProviderStatusListener listener) {
+        mListeners.remove(listener);
+    }
+
+    private void notifyListeners() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyListeners: " + mListeners.size());
+        }
+        if (isStarted()) {
+            for (ProviderStatusListener listener : mListeners) {
+                listener.onProviderStatusChange();
+            }
+        }
+    }
+
+    private boolean isStarted() {
+        return mStartRequestedCount > 0;
+    }
+
+    /**
+     * Starts watching the provider status.  {@link #start()} and {@link #stop()} calls can be
+     * nested.
+     */
+    public void start() {
+        if (++mStartRequestedCount == 1) {
+            mContext.getContentResolver()
+                .registerContentObserver(ProviderStatus.CONTENT_URI, false, this);
+            startLoading();
+
+            if (DEBUG) {
+                Log.d(TAG, "Start observing");
+            }
+        }
+    }
+
+    /**
+     * Stops watching the provider status.
+     */
+    public void stop() {
+        if (!isStarted()) {
+            Log.e(TAG, "Already stopped");
+            return;
+        }
+        if (--mStartRequestedCount == 0) {
+
+            mHandler.removeCallbacks(mStartLoadingRunnable);
+
+            mContext.getContentResolver().unregisterContentObserver(this);
+            if (DEBUG) {
+                Log.d(TAG, "Stop observing");
+            }
+        }
+    }
+
+    /**
+     * @return last known provider status.
+     *
+     * If this method is called when we haven't started the status query or the query is still in
+     * progress, it will start a query in a worker thread if necessary, and *wait for the result*.
+     *
+     * This means this method is essentially a blocking {@link ProviderStatus#CONTENT_URI} query.
+     * This URI is not backed by the file system, so is usually fast enough to perform on the main
+     * thread, but in extreme cases (when the system takes a while to bring up the contacts
+     * provider?) this may still cause ANRs.
+     *
+     * In order to avoid that, if we can't load the status within {@link #LOAD_WAIT_TIMEOUT_MS},
+     * we'll give up and just returns {@link ProviderStatus#STATUS_UPGRADING} in order to unblock
+     * the UI thread.  The actual result will be delivered later via {@link ProviderStatusListener}.
+     * (If {@link ProviderStatus#STATUS_UPGRADING} is returned, the app (should) shows an according
+     * message, like "contacts are being updated".)
+     */
+    public int getProviderStatus() {
+        waitForLoaded();
+
+        if (mProviderStatus == STATUS_UNKNOWN) {
+            return ProviderStatus.STATUS_UPGRADING;
+        }
+
+        return mProviderStatus;
+    }
+
+    /**
+     * @return last known provider status data.  See also {@link #getProviderStatus()}.
+     */
+    public String getProviderStatusData() {
+        waitForLoaded();
+
+        if (mProviderStatus == STATUS_UNKNOWN) {
+            // STATUS_UPGRADING has no data.
+            return "";
+        }
+
+        return mProviderData;
+    }
+
+    private void waitForLoaded() {
+        if (mProviderStatus == STATUS_UNKNOWN) {
+            if (mLoaderTask == null) {
+                // For some reason the loader couldn't load the status.  Let's start it again.
+                startLoading();
+            }
+            synchronized (mSignal) {
+                try {
+                    mSignal.wait(LOAD_WAIT_TIMEOUT_MS);
+                } catch (InterruptedException ignore) {
+                }
+            }
+        }
+    }
+
+    private void startLoading() {
+        if (mLoaderTask != null) {
+            return; // Task already running.
+        }
+
+        if (DEBUG) {
+            Log.d(TAG, "Start loading");
+        }
+
+        mLoaderTask = new LoaderTask();
+        mLoaderTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+
+    private class LoaderTask extends AsyncTask<Void, Void, Boolean> {
+        @Override
+        protected Boolean doInBackground(Void... params) {
+            try {
+                Cursor cursor = mContext.getContentResolver().query(ProviderStatus.CONTENT_URI,
+                        PROJECTION, null, null, null);
+                if (cursor != null) {
+                    try {
+                        if (cursor.moveToFirst()) {
+                            mProviderStatus = cursor.getInt(0);
+                            mProviderData = cursor.getString(1);
+                            return true;
+                        }
+                    } finally {
+                        cursor.close();
+                    }
+                }
+                return false;
+            } finally {
+                synchronized (mSignal) {
+                    mSignal.notifyAll();
+                }
+            }
+        }
+
+        @Override
+        protected void onCancelled(Boolean result) {
+            cleanUp();
+        }
+
+        @Override
+        protected void onPostExecute(Boolean loaded) {
+            cleanUp();
+            if (loaded != null && loaded) {
+                notifyListeners();
+            }
+        }
+
+        private void cleanUp() {
+            mLoaderTask = null;
+        }
+    }
+
+    /**
+     * Called when provider status may has changed.
+     *
+     * This method will be called on a worker thread by the framework.
+     */
+    @Override
+    public void onChange(boolean selfChange, Uri uri) {
+        if (!ProviderStatus.CONTENT_URI.equals(uri)) return;
+
+        // Provider status change is rare, so okay to log.
+        Log.i(TAG, "Provider status changed.");
+
+        mHandler.removeCallbacks(mStartLoadingRunnable); // Remove one in the queue, if any.
+        mHandler.post(mStartLoadingRunnable);
+    }
+
+    /**
+     * Sends a provider status update, which will trigger a retry of database upgrade
+     */
+    public void retryUpgrade() {
+        Log.i(TAG, "retryUpgrade");
+        final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
+            @Override
+            protected Void doInBackground(Void... params) {
+                ContentValues values = new ContentValues();
+                values.put(ProviderStatus.STATUS, ProviderStatus.STATUS_UPGRADING);
+                mContext.getContentResolver().update(ProviderStatus.CONTENT_URI, values,
+                        null, null);
+                return null;
+            }
+        };
+        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+}
diff --git a/src/com/android/contacts/util/PhoneCapabilityTester.java b/src/com/android/contacts/util/PhoneCapabilityTester.java
index d3a8060..ce248bb 100644
--- a/src/com/android/contacts/util/PhoneCapabilityTester.java
+++ b/src/com/android/contacts/util/PhoneCapabilityTester.java
@@ -89,4 +89,11 @@
     public static boolean isUsingTwoPanes(Context context) {
         return context.getResources().getBoolean(R.bool.config_use_two_panes);
     }
+
+    /**
+     * True if the favorites tab should be shown in two-pane mode.  False, otherwise.
+     */
+    public static boolean isUsingTwoPanesInFavorites(Context context) {
+        return context.getResources().getBoolean(R.bool.config_use_two_panes_in_favorites);
+    }
 }