Merge "People: Enable split action bar on 1-pane"
diff --git a/res/menu/actions.xml b/res/menu/actions.xml
index 7bd3765..fd2b967 100644
--- a/res/menu/actions.xml
+++ b/res/menu/actions.xml
@@ -17,17 +17,20 @@
     <item
         android:id="@+id/menu_search"
         android:icon="@android:drawable/ic_menu_search"
-        android:title="@string/menu_search" />
+        android:title="@string/menu_search"
+        android:showAsAction="ifRoom" />
 
     <item
         android:id="@+id/menu_add_contact"
         android:icon="@drawable/ic_menu_add_contact_holo_light"
-        android:title="@string/menu_new_contact_action_bar" />
+        android:title="@string/menu_new_contact_action_bar"
+        android:showAsAction="ifRoom" />
 
     <item
         android:id="@+id/menu_add_group"
         android:icon="@drawable/ic_menu_display_all_holo_light"
-        android:title="@string/menu_new_group_action_bar" />
+        android:title="@string/menu_new_group_action_bar"
+        android:showAsAction="ifRoom" />
 
     <item
         android:id="@+id/menu_contacts_filter"
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 01f0e62..8fdccfc 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -161,7 +161,7 @@
         <attr name="call_log_list_item_height" format="dimension" />
     </declare-styleable>
 
-    <style name="PeopleTheme" parent="android:Theme.Holo.Light">
+    <style name="PeopleTheme" parent="android:Theme.Holo.Light.SplitActionBarWhenNarrow">
         <item name="list_item_height">?android:attr/listPreferredItemHeight</item>
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 74f05c2..907a5fd 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -145,6 +145,10 @@
     private int mProviderStatus = -1;
 
     private boolean mOptionsMenuContactsAvailable;
+    /** true if the search menu item exists */
+    private boolean mOptionsMenuSearchExists;
+    /** true if the search menu item is currently visible */
+    private boolean mOptionsMenuSearchVisible;
 
     /**
      * Showing a list of Contacts. Also used for showing search results in search mode.
@@ -479,10 +483,12 @@
             case START_SEARCH_MODE:
                 clearSearch();
                 updateFragmentsVisibility();
+                invalidateOptionsMenuIfNeeded();
                 break;
             case STOP_SEARCH_MODE:
                 clearSearch();
                 updateFragmentsVisibility();
+                invalidateOptionsMenuIfNeeded();
                 break;
             case CHANGE_SEARCH_QUERY:
                 loadSearch(mActionBarAdapter.getQueryString());
@@ -1057,35 +1063,20 @@
     }
 
     @Override
-    public boolean onCreatePanelMenu(int featureId, Menu menu) {
-        // No menu if contacts are unavailable
-        if (!areContactsAvailable()) {
-            return false;
-        }
-
-        return super.onCreatePanelMenu(featureId, menu);
-    }
-
-    @Override
-    public boolean onPreparePanel(int featureId, View view, Menu menu) {
-        // No menu if contacts are unavailable
-        if (!areContactsAvailable()) {
-            return false;
-        }
-
-        return super.onPreparePanel(featureId, view, menu);
-    }
-
-    @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        if (!areContactsAvailable()) {
-            return false;
-        }
+//      STOPSHIP Un-comment it once b/5027071 is fixed.
+//        if (!areContactsAvailable()) {
+//            If contacts aren't available, hide all menu items.
+//            return false;
+//        }
         super.onCreateOptionsMenu(menu);
 
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.actions, menu);
 
+        mOptionsMenuSearchExists = menu.findItem(R.id.menu_search) != null;
+        mOptionsMenuSearchVisible = mOptionsMenuSearchExists;
+
         // On narrow screens we specify a NEW group button in the {@link ActionBar}, so that
         // it can be in the overflow menu. On wide screens, we use a custom view because we need
         // its location for anchoring the account-selector popup.
@@ -1116,6 +1107,10 @@
             return true;
         }
 
+        if (mOptionsMenuSearchVisible != shouldMakeSearchMenuVisible()) {
+            return true;
+        }
+
         if (mAllFragment != null && mAllFragment.isOptionsMenuChanged()) {
             return true;
         }
@@ -1132,12 +1127,21 @@
         return false;
     }
 
+    /** @return true if the search menu item should be visible */
+    private boolean shouldMakeSearchMenuVisible() {
+        return mOptionsMenuSearchExists && !mActionBarAdapter.isSearchMode();
+    }
+
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         mOptionsMenuContactsAvailable = areContactsAvailable();
         if (!mOptionsMenuContactsAvailable) {
+            // STOPSHIP Remove makeAllMenuItemsVisible()when STOPSHIP in onCreateOptionsMenu() is
+            // fixed.
+            makeAllMenuItemsVisible(menu, false);
             return false;
         }
+        makeAllMenuItemsVisible(menu, true);
 
         final MenuItem searchMenu = menu.findItem(R.id.menu_search);
         final MenuItem addContactMenu = menu.findItem(R.id.menu_add_contact);
@@ -1149,9 +1153,6 @@
         if (mActionBarAdapter.isSearchMode()) {
             addContactMenu.setVisible(false);
             addGroupMenu.setVisible(false);
-            if (searchMenu != null) {
-                searchMenu.setVisible(false); // Don't show the search menu in search mode.
-            }
         } else {
             switch (mActionBarAdapter.getCurrentTab()) {
                 case FAVORITES:
@@ -1168,6 +1169,12 @@
             }
         }
 
+        if (searchMenu != null) {
+            // Don't show the search menu in search mode.
+            mOptionsMenuSearchVisible = shouldMakeSearchMenuVisible();
+            searchMenu.setVisible(mOptionsMenuSearchVisible);
+        }
+
         MenuItem settings = menu.findItem(R.id.menu_settings);
         if (settings != null) {
             settings.setVisible(!ContactsPreferenceActivity.isEmpty(this));
@@ -1176,6 +1183,13 @@
         return true;
     }
 
+    private void makeAllMenuItemsVisible(Menu menu, boolean visible) {
+        final int itemCount = menu.size();
+        for (int i = 0; i < itemCount; i++) {
+            menu.getItem(i).setVisible(visible);
+        }
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {