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