Add group menu options in group details fragment
- Move "new contact" and "new group" menu items into
list fragment (instead of details fragment or
people activity), so it works according to the current
tab esp for the phone
- Move group menu items into group detail fragment
- Remove custom "new contact" button
- Add some fixes for menu items / fragments going into and
out of search mode
Change-Id: I1f2a4d7e90b4e5d438bb271f0a66e21d8069b189
diff --git a/res/menu-xlarge/actions.xml b/res/menu-xlarge/actions.xml
new file mode 100644
index 0000000..60788e0
--- /dev/null
+++ b/res/menu-xlarge/actions.xml
@@ -0,0 +1,54 @@
+<?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:showAsAction="always"
+ android:actionViewClass="android.widget.SearchView" />
+
+ <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:showAsAction="withText|always" />
+
+ <item
+ android:id="@+id/menu_add_group"
+ android:icon="@drawable/ic_menu_display_all_holo_light"
+ android:title="@string/menu_new_contact_action_bar"
+ android:showAsAction="withText|always" />
+
+ <item
+ android:id="@+id/menu_contacts_filter"
+ android:icon="@drawable/ic_menu_settings_holo_light"
+ android:title="@string/menu_contacts_filter" />
+
+ <item
+ android:id="@+id/menu_settings"
+ android:icon="@drawable/ic_menu_settings_holo_light"
+ android:title="@string/menu_settings" />
+
+ <item
+ android:id="@+id/menu_accounts"
+ android:icon="@drawable/ic_menu_accounts_holo_light"
+ android:title="@string/menu_accounts" />
+
+ <item
+ android:id="@+id/menu_import_export"
+ android:icon="@drawable/ic_menu_import_export_holo_light"
+ android:title="@string/menu_import_export" />
+
+</menu>
diff --git a/res/menu/view.xml b/res/menu-xlarge/view_contact.xml
similarity index 100%
rename from res/menu/view.xml
rename to res/menu-xlarge/view_contact.xml
diff --git a/res/menu-xlarge/view_group.xml b/res/menu-xlarge/view_group.xml
new file mode 100644
index 0000000..8b0867b
--- /dev/null
+++ b/res/menu-xlarge/view_group.xml
@@ -0,0 +1,34 @@
+<?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_light"
+ android:title="@string/menu_editGroup"
+ android:alphabeticShortcut="e"
+ android:showAsAction="always" />
+
+ <item
+ android:id="@+id/menu_rename_group"
+ android:icon="@drawable/ic_menu_settings_holo_light"
+ android:title="@string/menu_renameGroup" />
+
+ <item
+ android:id="@+id/menu_delete_group"
+ android:icon="@drawable/ic_menu_trash_holo_light"
+ android:title="@string/menu_deleteGroup" />
+</menu>
diff --git a/res/menu/actions.xml b/res/menu/actions.xml
index 083d352..98d36a5 100644
--- a/res/menu/actions.xml
+++ b/res/menu/actions.xml
@@ -20,8 +20,14 @@
android:actionViewClass="android.widget.SearchView" />
<item
- android:id="@+id/menu_add"
- android:showAsAction="always" />
+ android:id="@+id/menu_add_contact"
+ android:icon="@drawable/ic_menu_add_contact_holo_light"
+ android:title="@string/menu_new_contact_action_bar" />
+
+ <item
+ android:id="@+id/menu_add_group"
+ android:icon="@drawable/ic_menu_display_all_holo_light"
+ android:title="@string/menu_new_contact_action_bar" />
<item
android:id="@+id/menu_contacts_filter"
@@ -43,13 +49,4 @@
android:icon="@drawable/ic_menu_import_export_holo_light"
android:title="@string/menu_import_export" />
- <item
- android:id="@+id/menu_rename_group"
- android:icon="@drawable/ic_menu_settings_holo_light"
- android:title="@string/menu_renameGroup" />
-
- <item
- android:id="@+id/menu_delete_group"
- android:icon="@drawable/ic_menu_trash_holo_light"
- android:title="@string/menu_deleteGroup" />
</menu>
diff --git a/res/menu/view_contact.xml b/res/menu/view_contact.xml
new file mode 100644
index 0000000..7cf17d6
--- /dev/null
+++ b/res/menu/view_contact.xml
@@ -0,0 +1,39 @@
+<?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"
+ android:icon="@drawable/ic_menu_compose_holo_light"
+ android:title="@string/menu_editContact"
+ android:alphabeticShortcut="e" />
+
+ <item
+ android:id="@+id/menu_share"
+ android:icon="@drawable/ic_menu_share_holo_light"
+ android:title="@string/menu_share"
+ android:alphabeticShortcut="s" />
+
+ <item
+ android:id="@+id/menu_options"
+ android:icon="@drawable/ic_menu_mark"
+ android:title="@string/menu_contactOptions" />
+
+ <item
+ android:id="@+id/menu_delete"
+ android:icon="@drawable/ic_menu_trash_holo_light"
+ android:title="@string/menu_deleteContact" />
+</menu>
diff --git a/res/menu/view_group.xml b/res/menu/view_group.xml
new file mode 100644
index 0000000..3ff6ac6
--- /dev/null
+++ b/res/menu/view_group.xml
@@ -0,0 +1,33 @@
+<?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_light"
+ android:title="@string/menu_editGroup"
+ android:alphabeticShortcut="e" />
+
+ <item
+ android:id="@+id/menu_rename_group"
+ android:icon="@drawable/ic_menu_settings_holo_light"
+ android:title="@string/menu_renameGroup" />
+
+ <item
+ android:id="@+id/menu_delete_group"
+ android:icon="@drawable/ic_menu_trash_holo_light"
+ android:title="@string/menu_deleteGroup" />
+</menu>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 52facac..52eab2f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -118,6 +118,9 @@
<!-- Menu item that splits an item from the contact detail into a separate aggregate -->
<string name="menu_splitAggregate">Separate</string>
+ <!-- Menu item that edits the currently selected group [CHAR LIMIT=30] -->
+ <string name="menu_editGroup">Edit group</string>
+
<!-- Menu item that renames the currently selected group [CHAR LIMIT=30] -->
<string name="menu_renameGroup">Rename group</string>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 4b0f0e4..9e325cf 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -133,19 +133,22 @@
private ContactListFilterController mContactListFilterController;
- private View mAddContactImageView;
-
private ContactsUnavailableFragment mContactsUnavailableFragment;
private ProviderStatusLoader mProviderStatusLoader;
private int mProviderStatus = -1;
private boolean mOptionsMenuContactsAvailable;
- private boolean mOptionsMenuGroupActionsEnabled;
private DefaultContactBrowseListFragment mContactsFragment;
private StrequentContactListFragment mFavoritesFragment;
private GroupBrowseListFragment mGroupsFragment;
+ private enum TabState {
+ FAVORITES, CONTACTS, GROUPS
+ }
+
+ private TabState mSelectedTab;
+
public PeopleActivity() {
mIntentResolver = new ContactsIntentResolver(this);
// TODO: Get rid of the ContactListFilterController class because there aren't any
@@ -190,17 +193,6 @@
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
- mAddContactImageView = getLayoutInflater().inflate(
- R.layout.add_contact_menu_item, null, false);
- View item = mAddContactImageView.findViewById(R.id.menu_item);
- item.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
- }
- });
-
configureContentView(true, savedState);
}
@@ -273,19 +265,19 @@
Tab favoritesTab = actionBar.newTab();
favoritesTab.setText(getString(R.string.strequentList));
favoritesTab.setTabListener(new TabChangeListener(mFavoritesFragment,
- mContactDetailFragment));
+ mContactDetailFragment, TabState.FAVORITES));
actionBar.addTab(favoritesTab);
Tab peopleTab = actionBar.newTab();
peopleTab.setText(getString(R.string.people));
peopleTab.setTabListener(new TabChangeListener(mContactsFragment,
- mContactDetailFragment));
+ mContactDetailFragment, TabState.CONTACTS));
actionBar.addTab(peopleTab);
Tab groupsTab = actionBar.newTab();
groupsTab.setText(getString(R.string.contactsGroupsLabel));
groupsTab.setTabListener(new TabChangeListener(mGroupsFragment,
- mGroupDetailFragment));
+ mGroupDetailFragment, TabState.GROUPS));
actionBar.addTab(groupsTab);
actionBar.setDisplayShowTitleEnabled(true);
@@ -293,7 +285,7 @@
boolean showHomeIcon = a.getBoolean(R.styleable.ActionBarHomeIcon_show_home_icon, true);
actionBar.setDisplayShowHomeEnabled(showHomeIcon);
- invalidateOptionsMenu();
+ invalidateOptionsMenuIfNeeded();
}
configureFragments(savedState == null);
@@ -312,10 +304,12 @@
* null for smaller screen sizes).
*/
private final Fragment mDetailFragment;
+ private final TabState mTabState;
- public TabChangeListener(Fragment listFragment, Fragment detailFragment) {
+ public TabChangeListener(Fragment listFragment, Fragment detailFragment, TabState state) {
mBrowseListFragment = listFragment;
mDetailFragment = detailFragment;
+ mTabState = state;
}
@Override
@@ -332,6 +326,8 @@
if (mDetailFragment != null) {
ft.show(mDetailFragment);
}
+ setSelectedTab(mTabState);
+ invalidateOptionsMenu();
}
@Override
@@ -339,6 +335,10 @@
}
}
+ private void setSelectedTab(TabState tab) {
+ mSelectedTab = tab;
+ }
+
@Override
protected void onPause() {
if (mActionBarAdapter != null) {
@@ -346,7 +346,6 @@
}
mOptionsMenuContactsAvailable = false;
- mOptionsMenuGroupActionsEnabled = false;
mProviderStatus = -1;
mProviderStatusLoader.setProviderStatusListener(null);
@@ -417,7 +416,7 @@
configureContactListFragment();
configureGroupListFragment();
- invalidateOptionsMenu();
+ invalidateOptionsMenuIfNeeded();
}
@Override
@@ -428,7 +427,7 @@
mListFragment.setFilter(mContactListFilterController.getFilter());
- invalidateOptionsMenu();
+ invalidateOptionsMenuIfNeeded();
}
@Override
@@ -439,7 +438,7 @@
mListFragment.setFilter(mContactListFilterController.getFilter());
- invalidateOptionsMenu();
+ invalidateOptionsMenuIfNeeded();
}
@Override
@@ -450,10 +449,12 @@
private void setupContactDetailFragment(final Uri contactLookupUri) {
mContactDetailFragment.loadUri(contactLookupUri);
+ invalidateOptionsMenuIfNeeded();
}
private void setupGroupDetailFragment(Uri groupUri) {
mGroupDetailFragment.loadGroup(groupUri);
+ invalidateOptionsMenuIfNeeded();
}
/**
@@ -463,22 +464,44 @@
public void onAction(Action action) {
switch (action) {
case START_SEARCH_MODE:
- // Bring the contact list fragment to the front.
+ // Bring the contact list fragment (and detail fragment if applicable) to the front
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.show(mContactsFragment);
+ if (mContactDetailFragment != null) ft.show(mContactDetailFragment);
ft.commit();
+ clearSearch();
break;
case STOP_SEARCH_MODE:
+ // Refresh the fragments because search mode was using them to display search
+ // results.
+ clearSearch();
+
+ // If the last selected tab was not the "All contacts" tab, then hide these
+ // fragments because we need to show favorites or groups.
+ if (mSelectedTab != null && !mSelectedTab.equals(TabState.CONTACTS)) {
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ transaction.hide(mContactsFragment);
+ if (mContactDetailFragment != null) transaction.hide(mContactDetailFragment);
+ transaction.commit();
+ }
+ break;
case CHANGE_SEARCH_QUERY:
- // Refresh the contact list fragment.
- configureFragments(false /* from request */);
- mListFragment.setQueryString(mActionBarAdapter.getQueryString(), true);
+ loadSearch(mActionBarAdapter.getQueryString());
break;
default:
throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action);
}
}
+ private void clearSearch() {
+ loadSearch("");
+ }
+
+ private void loadSearch(String query) {
+ configureFragments(false /* from request */);
+ mListFragment.setQueryString(query, true);
+ }
+
private void configureContactListFragmentForRequest() {
Uri contactUri = mRequest.getContactUri();
if (contactUri != null) {
@@ -564,7 +587,7 @@
}
}
- invalidateOptionsMenu();
+ invalidateOptionsMenuIfNeeded();
}
private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
@@ -789,18 +812,12 @@
mActionBarAdapter.setSearchView(searchView);
}
}
-
- // TODO: Can remove this as a custom view because the account selector is in the editor now.
- // Change add contact button to button with a custom view
- final MenuItem addContact = menu.findItem(R.id.menu_add);
- addContact.setActionView(mAddContactImageView);
return true;
}
- @Override
- public void invalidateOptionsMenu() {
+ private void invalidateOptionsMenuIfNeeded() {
if (isOptionsMenuChanged()) {
- super.invalidateOptionsMenu();
+ invalidateOptionsMenu();
}
}
@@ -809,10 +826,6 @@
return true;
}
- if (mOptionsMenuGroupActionsEnabled != areGroupActionsEnabled()) {
- return true;
- }
-
if (mListFragment != null && mListFragment.isOptionsMenuChanged()) {
return true;
}
@@ -821,6 +834,10 @@
return true;
}
+ if (mGroupDetailFragment != null && mGroupDetailFragment.isOptionsMenuChanged()) {
+ return true;
+ }
+
return false;
}
@@ -831,39 +848,36 @@
return false;
}
+ final MenuItem addContactMenu = menu.findItem(R.id.menu_add_contact);
+ final MenuItem addGroupMenu = menu.findItem(R.id.menu_add_group);
+
+ if (mActionBarAdapter.isSearchMode()) {
+ addContactMenu.setVisible(false);
+ addGroupMenu.setVisible(false);
+ } else {
+ switch (mSelectedTab) {
+ case FAVORITES:
+ // TODO: Fall through until we determine what the menu items should be for
+ // this tab
+ case CONTACTS:
+ addContactMenu.setVisible(true);
+ addGroupMenu.setVisible(false);
+ break;
+ case GROUPS:
+ addContactMenu.setVisible(false);
+ addGroupMenu.setVisible(true);
+ break;
+ }
+ }
+
MenuItem settings = menu.findItem(R.id.menu_settings);
if (settings != null) {
settings.setVisible(!ContactsPreferenceActivity.isEmpty(this));
}
- mOptionsMenuGroupActionsEnabled = areGroupActionsEnabled();
-
- MenuItem renameGroup = menu.findItem(R.id.menu_rename_group);
- if (renameGroup != null) {
- renameGroup.setVisible(mOptionsMenuGroupActionsEnabled);
- }
-
- MenuItem deleteGroup = menu.findItem(R.id.menu_delete_group);
- if (deleteGroup != null) {
- deleteGroup.setVisible(mOptionsMenuGroupActionsEnabled);
- }
-
return true;
}
- private boolean areGroupActionsEnabled() {
- boolean groupActionsEnabled = false;
- if (mListFragment != null) {
- ContactListFilter filter = mListFragment.getFilter();
- if (filter != null
- && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP
- && !filter.groupReadOnly) {
- groupActionsEnabled = true;
- }
- }
- return groupActionsEnabled;
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -881,11 +895,16 @@
onSearchRequested();
return true;
}
- case R.id.menu_add: {
+ case R.id.menu_add_contact: {
final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
return true;
}
+ case R.id.menu_add_group: {
+ // TODO: Hook up "new group" functionality
+ Toast.makeText(this, "NEW GROUP", Toast.LENGTH_SHORT).show();
+ return true;
+ }
case R.id.menu_import_export: {
ImportExportDialogFragment.show(getFragmentManager());
return true;
@@ -899,18 +918,6 @@
startActivity(intent);
return true;
}
- case R.id.menu_rename_group: {
- ContactListFilter filter = mListFragment.getFilter();
- GroupRenamingDialogFragment.show(getFragmentManager(), filter.groupId,
- filter.title);
- return true;
- }
- case R.id.menu_delete_group: {
- ContactListFilter filter = mListFragment.getFilter();
- GroupDeletionDialogFragment.show(getFragmentManager(), filter.groupId,
- filter.title);
- return true;
- }
}
return false;
}
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index f3a4805..41ac0ad 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -1159,7 +1159,7 @@
@Override
public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
- inflater.inflate(R.menu.view, menu);
+ inflater.inflate(R.menu.view_contact, menu);
}
public boolean isOptionsMenuChanged() {
diff --git a/src/com/android/contacts/group/GroupBrowseListAdapter.java b/src/com/android/contacts/group/GroupBrowseListAdapter.java
index b836ab9..f530186 100644
--- a/src/com/android/contacts/group/GroupBrowseListAdapter.java
+++ b/src/com/android/contacts/group/GroupBrowseListAdapter.java
@@ -185,7 +185,7 @@
public static GroupListEntry createEntryForGroup(GroupMetaData groupMetaData) {
if (groupMetaData == null) {
- throw new IllegalStateException("Cannot create list entry for a hull group");
+ throw new IllegalStateException("Cannot create list entry for a null group");
}
return new GroupListEntry(ViewType.ITEM, null, 0, groupMetaData,
groupMetaData.getGroupId());
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index 8cffd05..8d049d5 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -17,23 +17,21 @@
package com.android.contacts.group;
import com.android.contacts.ContactPhotoManager;
-import com.android.contacts.GroupMetaData;
import com.android.contacts.GroupMetaDataLoader;
import com.android.contacts.R;
-import com.android.contacts.activities.GroupDetailActivity;
+import com.android.contacts.interactions.GroupDeletionDialogFragment;
+import com.android.contacts.interactions.GroupRenamingDialogFragment;
import com.android.contacts.list.ContactListAdapter;
import com.android.contacts.list.ContactListFilter;
import com.android.contacts.list.DefaultContactListAdapter;
+import com.android.contacts.util.PhoneCapabilityTester;
-import android.accounts.Account;
import android.app.Activity;
import android.app.Fragment;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ContentValues;
import android.content.Context;
import android.content.CursorLoader;
-import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
@@ -41,6 +39,9 @@
import android.provider.ContactsContract;
import android.provider.ContactsContract.Directory;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
@@ -49,8 +50,7 @@
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
-
-import java.util.ArrayList;
+import android.widget.Toast;
/**
* Displays the details of a group and shows a list of actions possible for the group.
@@ -88,6 +88,9 @@
private Uri mGroupUri;
private long mGroupId;
+ private String mGroupName;
+
+ private boolean mOptionsMenuEditable;
public GroupDetailFragment() {
}
@@ -107,6 +110,7 @@
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
+ setHasOptionsMenu(true);
mRootView = inflater.inflate(R.layout.group_detail_fragment, container, false);
mGroupTitle = (TextView) mRootView.findViewById(R.id.group_title);
mGroupSize = (TextView) mRootView.findViewById(R.id.group_size);
@@ -224,7 +228,8 @@
cursor.moveToPosition(-1);
if (cursor.moveToNext()) {
mGroupId = cursor.getLong(GroupMetaDataLoader.GROUP_ID);
- updateTitle(cursor.getString(GroupMetaDataLoader.TITLE));
+ mGroupName = cursor.getString(GroupMetaDataLoader.TITLE);
+ updateTitle(mGroupName);
}
}
@@ -257,4 +262,53 @@
mPhotoManager.resume();
}
}
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
+ inflater.inflate(R.menu.view_group, menu);
+ }
+
+ public boolean isOptionsMenuChanged() {
+ return mOptionsMenuEditable != isGroupEditable();
+ }
+
+ public boolean isGroupEditable() {
+ // TODO: This should check the group_is_read_only flag. Modify GroupMetaDataLoader.
+ // Bug: 4601729.
+ return mGroupUri != null;
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ mOptionsMenuEditable = isGroupEditable();
+
+ final MenuItem editMenu = menu.findItem(R.id.menu_edit_group);
+ editMenu.setVisible(mOptionsMenuEditable);
+
+ final MenuItem renameMenu = menu.findItem(R.id.menu_rename_group);
+ renameMenu.setVisible(mOptionsMenuEditable);
+
+ final MenuItem deleteMenu = menu.findItem(R.id.menu_delete_group);
+ deleteMenu.setVisible(mOptionsMenuEditable);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_edit_group: {
+ // TODO: Open group editor
+ Toast.makeText(mContext, "EDIT GROUP", Toast.LENGTH_SHORT).show();
+ break;
+ }
+ case R.id.menu_rename_group: {
+ GroupRenamingDialogFragment.show(getFragmentManager(), mGroupId, mGroupName);
+ return true;
+ }
+ case R.id.menu_delete_group: {
+ GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName);
+ return true;
+ }
+ }
+ return false;
+ }
}