am 79967cb6: Merge "Revert "Make portrait action bar icons consistent with landscape."" into jb-dev

* commit '79967cb6849efc9b7885651ad870d49761702ae2':
  Revert "Make portrait action bar icons consistent with landscape."
diff --git a/res/menu-sw580dp-w720dp/people_options.xml b/res/menu-sw580dp-w720dp/people_options.xml
new file mode 100644
index 0000000..cb65cc8
--- /dev/null
+++ b/res/menu-sw580dp-w720dp/people_options.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/menu_search"
+        android:icon="@drawable/ic_ab_search_holo_dark"
+        android:title="@string/menu_search"
+        android:showAsAction="always" />
+
+    <item
+        android:id="@+id/menu_add_contact"
+        android:icon="@drawable/ic_add_contact_holo_dark"
+        android:title="@string/menu_new_contact_action_bar"
+        android:showAsAction="always" />
+
+    <item
+        android:id="@+id/menu_custom_add_group"
+        android:icon="@drawable/ic_add_group_holo_dark"
+        android:title="@string/menu_new_group_action_bar"
+        android:showAsAction="always" />
+
+    <item
+        android:id="@+id/menu_contacts_filter"
+        android:orderInCategory="1"
+        android:title="@string/menu_contacts_filter" />
+
+    <item
+        android:id="@+id/menu_import_export"
+        android:orderInCategory="2"
+        android:title="@string/menu_import_export" />
+
+    <item
+        android:id="@+id/menu_clear_frequents"
+        android:orderInCategory="3"
+        android:title="@string/menu_clear_frequents" />
+
+    <item
+        android:id="@+id/menu_accounts"
+        android:orderInCategory="4"
+        android:title="@string/menu_accounts" />
+
+    <item
+        android:id="@+id/menu_settings"
+        android:orderInCategory="5"
+        android:title="@string/menu_settings" />
+
+    <item
+        android:id="@+id/menu_help"
+        android:orderInCategory="6"
+        android:title="@string/menu_help" />
+</menu>
diff --git a/res/menu-sw580dp-w720dp/view_contact.xml b/res/menu-sw580dp-w720dp/view_contact.xml
new file mode 100644
index 0000000..ead176c
--- /dev/null
+++ b/res/menu-sw580dp-w720dp/view_contact.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/menu_edit"
+        android:icon="@drawable/ic_menu_compose_holo_dark"
+        android:title="@string/menu_editContact"
+        android:alphabeticShortcut="e"
+        android:showAsAction="always" />
+
+    <item
+        android:id="@+id/menu_share"
+        android:title="@string/menu_share"
+        android:alphabeticShortcut="s" />
+
+    <item
+        android:id="@+id/menu_delete"
+        android:title="@string/menu_deleteContact" />
+
+    <item
+        android:id="@+id/menu_create_contact_shortcut"
+        android:title="@string/menu_create_contact_shortcut" />
+
+</menu>
diff --git a/res/menu-sw580dp-w720dp/view_group.xml b/res/menu-sw580dp-w720dp/view_group.xml
new file mode 100644
index 0000000..3836c0f
--- /dev/null
+++ b/res/menu-sw580dp-w720dp/view_group.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/menu_edit_group"
+        android:icon="@drawable/ic_menu_compose_holo_dark"
+        android:title="@string/menu_editGroup"
+        android:alphabeticShortcut="e"
+        android:showAsAction="always" />
+
+    <item
+        android:id="@+id/menu_delete_group"
+        android:title="@string/menu_deleteGroup" />
+</menu>
diff --git a/res/menu-sw580dp/people_options.xml b/res/menu-sw580dp/people_options.xml
index 5d05752..42c4749 100644
--- a/res/menu-sw580dp/people_options.xml
+++ b/res/menu-sw580dp/people_options.xml
@@ -23,14 +23,12 @@
     <item
         android:id="@+id/menu_add_contact"
         android:icon="@drawable/ic_add_contact_holo_dark"
-        android:title="@string/menu_new_contact_action_bar"
-        android:showAsAction="ifRoom" />
+        android:title="@string/menu_new_contact_action_bar" />
 
     <item
         android:id="@+id/menu_add_group"
         android:icon="@drawable/ic_add_group_holo_dark"
-        android:title="@string/menu_new_group_action_bar"
-        android:showAsAction="ifRoom" />
+        android:title="@string/menu_new_group_action_bar" />
 
     <!-- Added orderInCategory to keep the following buttons at the end of the menu
          Buttons will be added in the order added/inflated. Ordered buttons will be added
diff --git a/res/menu-sw580dp/view_contact.xml b/res/menu-sw580dp/view_contact.xml
index a2ff00d..516a2ae 100644
--- a/res/menu-sw580dp/view_contact.xml
+++ b/res/menu-sw580dp/view_contact.xml
@@ -19,8 +19,7 @@
         android:id="@+id/menu_edit"
         android:icon="@drawable/ic_menu_compose_holo_dark"
         android:title="@string/menu_editContact"
-        android:alphabeticShortcut="e"
-        android:showAsAction="always"/>
+        android:alphabeticShortcut="e" />
 
     <item
         android:id="@+id/menu_share"
diff --git a/res/menu-sw580dp/view_group.xml b/res/menu-sw580dp/view_group.xml
index 3836c0f..d01c167 100644
--- a/res/menu-sw580dp/view_group.xml
+++ b/res/menu-sw580dp/view_group.xml
@@ -19,8 +19,7 @@
         android:id="@+id/menu_edit_group"
         android:icon="@drawable/ic_menu_compose_holo_dark"
         android:title="@string/menu_editGroup"
-        android:alphabeticShortcut="e"
-        android:showAsAction="always" />
+        android:alphabeticShortcut="e" />
 
     <item
         android:id="@+id/menu_delete_group"
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 8e6e19e..075c59f 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -50,16 +50,19 @@
 import com.android.contacts.list.OnContactsUnavailableActionListener;
 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;
 import com.android.contacts.preference.DisplayOptionsPreferenceFragment;
 import com.android.contacts.util.AccountFilterUtil;
 import com.android.contacts.util.AccountPromptUtils;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.HelpUtils;
+import com.android.contacts.util.UriUtils;
+import com.android.contacts.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.util.Constants;
 import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.HelpUtils;
 import com.android.contacts.util.PhoneCapabilityTester;
-import com.android.contacts.util.UriUtils;
 import com.android.contacts.widget.TransitionAnimationView;
 
 import android.app.Fragment;
@@ -76,6 +79,7 @@
 import android.preference.PreferenceActivity;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.ProviderStatus;
 import android.provider.ContactsContract.QuickContact;
 import android.provider.Settings;
@@ -90,10 +94,15 @@
 import android.view.MenuItem;
 import android.view.MenuItem.OnMenuItemClickListener;
 import android.view.View;
+import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListPopupWindow;
 import android.widget.Toast;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -158,6 +167,8 @@
     private TransitionAnimationView mContactDetailsView;
     private TransitionAnimationView mGroupDetailsView;
 
+    private View mAddGroupImageView;
+
     /** ViewPager for swipe, used only on the phone (i.e. one-pane mode) */
     private ViewPager mTabPager;
     private TabPagerAdapter mTabPagerAdapter;
@@ -1321,6 +1332,22 @@
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.people_options, menu);
 
+        // 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.
+        final MenuItem addGroup = menu.findItem(R.id.menu_custom_add_group);
+        if (addGroup != null) {
+            mAddGroupImageView = getLayoutInflater().inflate(
+                    R.layout.add_group_menu_item, null, false);
+            mAddGroupImageView.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    createNewGroupWithAccountDisambiguation();
+                }
+            });
+            addGroup.setActionView(mAddGroupImageView);
+        }
+
         if (DEBUG_TRANSITIONS && mContactDetailLoaderFragment != null) {
             final MenuItem toggleSocial =
                     menu.add(mContactDetailLoaderFragment.getLoadStreamItems() ? "less" : "more");
@@ -1377,6 +1404,9 @@
         final MenuItem contactsFilterMenu = menu.findItem(R.id.menu_contacts_filter);
 
         MenuItem addGroupMenu = menu.findItem(R.id.menu_add_group);
+        if (addGroupMenu == null) {
+            addGroupMenu = menu.findItem(R.id.menu_custom_add_group);
+        }
 
         final MenuItem clearFrequentsMenu = menu.findItem(R.id.menu_clear_frequents);
         final MenuItem helpMenu = menu.findItem(R.id.menu_help);
@@ -1488,8 +1518,7 @@
                 // to this activity to display the new contact.
                 if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
                     intent.putExtra(
-                            ContactEditorActivity.INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED,
-                            true);
+                        ContactEditorActivity.INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
                     startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
                 } else {
                     // Otherwise, on 1-pane UI, we need the editor to launch the view contact
@@ -1499,7 +1528,7 @@
                 return true;
             }
             case R.id.menu_add_group: {
-                createNewGroup();
+                createNewGroupWithAccountDisambiguation();
                 return true;
             }
             case R.id.menu_import_export: {
@@ -1523,10 +1552,40 @@
         return false;
     }
 
-    private void createNewGroup() {
-        final Intent intent = new Intent(this, GroupEditorActivity.class);
-        intent.setAction(Intent.ACTION_INSERT);
-        startActivityForResult(intent, SUBACTIVITY_NEW_GROUP);
+    private void createNewGroupWithAccountDisambiguation() {
+        final List<AccountWithDataSet> accounts =
+                AccountTypeManager.getInstance(this).getAccounts(true);
+        if (accounts.size() <= 1 || mAddGroupImageView == null) {
+            // No account to choose or no control to anchor the popup-menu to
+            // ==> just go straight to the editor which will disambig if necessary
+            final Intent intent = new Intent(this, GroupEditorActivity.class);
+            intent.setAction(Intent.ACTION_INSERT);
+            startActivityForResult(intent, SUBACTIVITY_NEW_GROUP);
+            return;
+        }
+
+        final ListPopupWindow popup = new ListPopupWindow(this, null);
+        popup.setWidth(getResources().getDimensionPixelSize(R.dimen.account_selector_popup_width));
+        popup.setAnchorView(mAddGroupImageView);
+        // Create a list adapter with all writeable accounts (assume that the writeable accounts all
+        // allow group creation).
+        final AccountsListAdapter adapter = new AccountsListAdapter(this,
+                AccountListFilter.ACCOUNTS_GROUP_WRITABLE);
+        popup.setAdapter(adapter);
+        popup.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                popup.dismiss();
+                AccountWithDataSet account = adapter.getItem(position);
+                final Intent intent = new Intent(PeopleActivity.this, GroupEditorActivity.class);
+                intent.setAction(Intent.ACTION_INSERT);
+                intent.putExtra(Intents.Insert.ACCOUNT, account);
+                intent.putExtra(Intents.Insert.DATA_SET, account.dataSet);
+                startActivityForResult(intent, SUBACTIVITY_NEW_GROUP);
+            }
+        });
+        popup.setModal(true);
+        popup.show();
     }
 
     @Override