1fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan/* 2fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * Copyright (C) 2011 The Android Open Source Project 3fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * 4fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * Licensed under the Apache License, Version 2.0 (the "License"); 5fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * you may not use this file except in compliance with the License. 6fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * You may obtain a copy of the License at 7fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * 8fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * http://www.apache.org/licenses/LICENSE-2.0 9fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * 10fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * Unless required by applicable law or agreed to in writing, software 11fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * distributed under the License is distributed on an "AS IS" BASIS, 12fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * See the License for the specific language governing permissions and 14fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * limitations under the License 15fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan */ 16fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 17fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanpackage com.android.contacts.group; 18fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 19fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.app.Activity; 20fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.app.Fragment; 21fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.app.LoaderManager; 22fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.app.LoaderManager.LoaderCallbacks; 23d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmannimport android.content.ContentUris; 24fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.content.Context; 25fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.content.CursorLoader; 26703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuanimport android.content.Intent; 27fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.content.Loader; 28e5d06f534d58baa27fe6b1091b9724f81fd258c9Frank Sposaroimport android.content.res.Resources; 29fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.database.Cursor; 307a700cf798a19a8452b8671f643a05336f63f611Katherine Kuanimport android.graphics.Rect; 31be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport android.net.Uri; 32fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.os.Bundle; 33d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmannimport android.provider.ContactsContract.Groups; 34703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuanimport android.text.TextUtils; 354e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargusimport android.util.Log; 36fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.view.LayoutInflater; 378268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuanimport android.view.Menu; 388268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuanimport android.view.MenuInflater; 398268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuanimport android.view.MenuItem; 40fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.view.View; 41703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuanimport android.view.View.OnClickListener; 42fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.view.ViewGroup; 43fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.widget.AbsListView; 44fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.widget.AbsListView.OnScrollListener; 45fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanimport android.widget.ListView; 46be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport android.widget.TextView; 47fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 48e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.GroupMemberLoader; 49e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.GroupMetaDataLoader; 50e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 5150a7deaf3b45211807ef2319810edaa2b5d85db3Chiao Chengimport com.android.contacts.common.ContactPhotoManager; 52e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.interactions.GroupDeletionDialogFragment; 53e776d0366d5bf2f93a0cd0f14e48804e564bccf2Chiao Chengimport com.android.contacts.common.list.ContactTileAdapter; 54e776d0366d5bf2f93a0cd0f14e48804e564bccf2Chiao Chengimport com.android.contacts.common.list.ContactTileView; 5550a7deaf3b45211807ef2319810edaa2b5d85db3Chiao Chengimport com.android.contacts.list.GroupMemberTileAdapter; 560d5588da244d0992c3ff8f25d0875fdf95a8c644Chiao Chengimport com.android.contacts.common.model.AccountTypeManager; 57428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType; 58e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 59fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan/** 60fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * Displays the details of a group and shows a list of actions possible for the group. 61fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan */ 62fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuanpublic class GroupDetailFragment extends Fragment implements OnScrollListener { 63fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 64be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public static interface Listener { 65be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan /** 66be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * The group title has been loaded 67be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan */ 68be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void onGroupTitleUpdated(String title); 69be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 70be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan /** 71be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * The number of group members has been determined 72be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan */ 73be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void onGroupSizeUpdated(String size); 74c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 75c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan /** 76d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann * The account type and dataset have been determined. 77703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan */ 78d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann public void onAccountTypeUpdated(String accountTypeString, String dataSet); 79703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan 80703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan /** 81c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * User decided to go to Edit-Mode 82c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan */ 83c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public void onEditRequested(Uri groupUri); 844e2bb32000f391ceb0de7309a159bee5d8e04fc5Frank Sposaro 854e2bb32000f391ceb0de7309a159bee5d8e04fc5Frank Sposaro /** 864e2bb32000f391ceb0de7309a159bee5d8e04fc5Frank Sposaro * Contact is selected and should launch details page 874e2bb32000f391ceb0de7309a159bee5d8e04fc5Frank Sposaro */ 884e2bb32000f391ceb0de7309a159bee5d8e04fc5Frank Sposaro public void onContactSelected(Uri contactUri); 89be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 90be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 91fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private static final String TAG = "GroupDetailFragment"; 92fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 93be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private static final int LOADER_METADATA = 0; 94be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private static final int LOADER_MEMBERS = 1; 95fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 96fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private Context mContext; 97fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 98fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private View mRootView; 99703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan private ViewGroup mGroupSourceViewContainer; 100703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan private View mGroupSourceView; 101be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private TextView mGroupTitle; 102be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private TextView mGroupSize; 103fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private ListView mMemberListView; 1044270aa76bb02cd76f77170f93fcd6ed3db897bd4Katherine Kuan private View mEmptyView; 105fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 106be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private Listener mListener; 107be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 1085f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro private ContactTileAdapter mAdapter; 109fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private ContactPhotoManager mPhotoManager; 1102b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan private AccountTypeManager mAccountTypeManager; 111fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 112be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private Uri mGroupUri; 113be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private long mGroupId; 1148268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private String mGroupName; 1152b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan private String mAccountTypeString; 1162b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro private String mDataSet; 117e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson private boolean mIsReadOnly; 118127c1ca913353da59cde560275975f4b1457be2dYorke Lee private boolean mIsMembershipEditable; 1198268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 120703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan private boolean mShowGroupActionInActionBar; 12104e6b557e45cc645c4fca1578358b63945452975Katherine Kuan private boolean mOptionsMenuGroupDeletable; 122127c1ca913353da59cde560275975f4b1457be2dYorke Lee private boolean mOptionsMenuGroupEditable; 123267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson private boolean mCloseActivityAfterDelete; 124be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 125fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public GroupDetailFragment() { 126fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 127fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 128fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 129fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public void onAttach(Activity activity) { 130fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan super.onAttach(activity); 131fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mContext = activity; 1322b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan mAccountTypeManager = AccountTypeManager.getInstance(mContext); 133e5d06f534d58baa27fe6b1091b9724f81fd258c9Frank Sposaro 134e5d06f534d58baa27fe6b1091b9724f81fd258c9Frank Sposaro Resources res = getResources(); 135e5d06f534d58baa27fe6b1091b9724f81fd258c9Frank Sposaro int columnCount = res.getInteger(R.integer.contact_tile_column_count); 136e5d06f534d58baa27fe6b1091b9724f81fd258c9Frank Sposaro 13750a7deaf3b45211807ef2319810edaa2b5d85db3Chiao Cheng mAdapter = new GroupMemberTileAdapter(activity, mContactTileListener, columnCount); 1389e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro 139fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan configurePhotoLoader(); 140fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 141fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 142fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 143fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public void onDetach() { 144fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan super.onDetach(); 145fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mContext = null; 146fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 147fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 148fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 149fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { 1508268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan setHasOptionsMenu(true); 151fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mRootView = inflater.inflate(R.layout.group_detail_fragment, container, false); 152be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupTitle = (TextView) mRootView.findViewById(R.id.group_title); 153be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupSize = (TextView) mRootView.findViewById(R.id.group_size); 154703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mGroupSourceViewContainer = (ViewGroup) mRootView.findViewById( 155703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan R.id.group_source_view_container); 1564270aa76bb02cd76f77170f93fcd6ed3db897bd4Katherine Kuan mEmptyView = mRootView.findViewById(android.R.id.empty); 157be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mMemberListView = (ListView) mRootView.findViewById(android.R.id.list); 158f63bfe6ff43827b22674a7131929db382c71c00bYorke Lee mMemberListView.setItemsCanFocus(true); 1591fcb853d2cf6670db9b4eecc492f4676894d4becMakoto Onuki mMemberListView.setAdapter(mAdapter); 1605f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro 161fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan return mRootView; 162fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 163fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 164be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void loadGroup(Uri groupUri) { 165be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupUri= groupUri; 166be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan startGroupMetadataLoader(); 167fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 168fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 1699e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro public void setQuickContact(boolean enableQuickContact) { 1707979ea27c046dfc2d9305b3282233046acef6ec4Frank Sposaro mAdapter.enableQuickContact(enableQuickContact); 1719e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro } 1729e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro 173fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private void configurePhotoLoader() { 174fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan if (mContext != null) { 175fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan if (mPhotoManager == null) { 176fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mPhotoManager = ContactPhotoManager.getInstance(mContext); 177fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 178fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan if (mMemberListView != null) { 179fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mMemberListView.setOnScrollListener(this); 180fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 181fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan if (mAdapter != null) { 182fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mAdapter.setPhotoLoader(mPhotoManager); 183fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 184fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 185fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 186fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 187be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void setListener(Listener value) { 188be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mListener = value; 189be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 190be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 191703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan public void setShowGroupSourceInActionBar(boolean show) { 192703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mShowGroupActionInActionBar = show; 193703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 194703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan 195cf3d9f04955a8ec3cb405b8a4ddcaddcece2a245Daniel Lehmann public Uri getGroupUri() { 196cf3d9f04955a8ec3cb405b8a4ddcaddcece2a245Daniel Lehmann return mGroupUri; 197cf3d9f04955a8ec3cb405b8a4ddcaddcece2a245Daniel Lehmann } 198cf3d9f04955a8ec3cb405b8a4ddcaddcece2a245Daniel Lehmann 199be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan /** 200be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * Start the loader to retrieve the metadata for this group. 201be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan */ 202be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private void startGroupMetadataLoader() { 203be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan getLoaderManager().restartLoader(LOADER_METADATA, null, mGroupMetadataLoaderListener); 204be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 205be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 206fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan /** 207fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * Start the loader to retrieve the list of group members. 208fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan */ 209fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private void startGroupMembersLoader() { 210fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan getLoaderManager().restartLoader(LOADER_MEMBERS, null, mGroupMemberListLoaderListener); 211fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 212fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 2134e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus private final ContactTileView.Listener mContactTileListener = 2144e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus new ContactTileView.Listener() { 2155f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro 2165f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro @Override 2177a700cf798a19a8452b8671f643a05336f63f611Katherine Kuan public void onContactSelected(Uri contactUri, Rect targetRect) { 2184e2bb32000f391ceb0de7309a159bee5d8e04fc5Frank Sposaro mListener.onContactSelected(contactUri); 2195f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro } 2204e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus 2214e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus @Override 2224e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus public void onCallNumberDirectly(String phoneNumber) { 2234e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus // No need to call phone number directly from People app. 2244e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus Log.w(TAG, "unexpected invocation of onCallNumberDirectly()"); 2254e05a29c9b05c8cb74972aa5b9fe55fe35d7f45dJosh Gargus } 2262f77c85543e6c497e63cd0e216b70e58c1d13ec3Daniel Lehmann 2272f77c85543e6c497e63cd0e216b70e58c1d13ec3Daniel Lehmann @Override 2282f77c85543e6c497e63cd0e216b70e58c1d13ec3Daniel Lehmann public int getApproximateTileWidth() { 2292f77c85543e6c497e63cd0e216b70e58c1d13ec3Daniel Lehmann return getView().getWidth() / mAdapter.getColumnCount(); 2302f77c85543e6c497e63cd0e216b70e58c1d13ec3Daniel Lehmann } 2315f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro }; 2325f34b2e20ad4a41b6dd3fd0703d59e085bffeb1cFrank Sposaro 233fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan /** 234be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * The listener for the group metadata loader. 235be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan */ 236be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private final LoaderManager.LoaderCallbacks<Cursor> mGroupMetadataLoaderListener = 237be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan new LoaderCallbacks<Cursor>() { 238be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 239be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan @Override 240be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public CursorLoader onCreateLoader(int id, Bundle args) { 241be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan return new GroupMetaDataLoader(mContext, mGroupUri); 242be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 243be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 244be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan @Override 245be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 246267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson data.moveToPosition(-1); 247267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson if (data.moveToNext()) { 248267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson boolean deleted = data.getInt(GroupMetaDataLoader.DELETED) == 1; 249267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson if (!deleted) { 250267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson bindGroupMetaData(data); 251267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson 252267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson // Retrieve the list of members 253267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson startGroupMembersLoader(); 254267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson return; 255267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson } 256267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson } 2572b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan updateSize(-1); 258267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson updateTitle(null); 259be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 260be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 261be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan @Override 262be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void onLoaderReset(Loader<Cursor> loader) {} 263be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan }; 264be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 265be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan /** 266fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan * The listener for the group members list loader 267fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan */ 268fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan private final LoaderManager.LoaderCallbacks<Cursor> mGroupMemberListLoaderListener = 269fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan new LoaderCallbacks<Cursor>() { 270fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 271fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 272fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public CursorLoader onCreateLoader(int id, Bundle args) { 273a939372643a86688ae196cce03cf4f6f70864d93Daisuke Miyakawa return GroupMemberLoader.constructLoaderForGroupDetailQuery(mContext, mGroupId); 274fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 275fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 276fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 277fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 2782b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan updateSize(data.getCount()); 2797979ea27c046dfc2d9305b3282233046acef6ec4Frank Sposaro mAdapter.setContactCursor(data); 2804270aa76bb02cd76f77170f93fcd6ed3db897bd4Katherine Kuan mMemberListView.setEmptyView(mEmptyView); 281fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 282fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 283fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 284fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public void onLoaderReset(Loader<Cursor> loader) {} 285fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan }; 286fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 287be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private void bindGroupMetaData(Cursor cursor) { 288be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan cursor.moveToPosition(-1); 289be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (cursor.moveToNext()) { 2902b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan mAccountTypeString = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE); 2912b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro mDataSet = cursor.getString(GroupMetaDataLoader.DATA_SET); 292be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupId = cursor.getLong(GroupMetaDataLoader.GROUP_ID); 2938268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mGroupName = cursor.getString(GroupMetaDataLoader.TITLE); 294e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson mIsReadOnly = cursor.getInt(GroupMetaDataLoader.IS_READ_ONLY) == 1; 2958268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan updateTitle(mGroupName); 296e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson // Must call invalidate so that the option menu will get updated 297e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson getActivity().invalidateOptionsMenu (); 2987f61eba2cddfdd99f155c851eaa490f73358d031Daniel Lehmann 299703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan final String accountTypeString = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE); 3002b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro final String dataSet = cursor.getString(GroupMetaDataLoader.DATA_SET); 301d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann updateAccountType(accountTypeString, dataSet); 302be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 303be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 304be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 305be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private void updateTitle(String title) { 306be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mGroupTitle != null) { 307be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupTitle.setText(title); 308be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } else { 309be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mListener.onGroupTitleUpdated(title); 310be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 311be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 312be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 3132b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan /** 3142b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan * Display the count of the number of group members. 3152b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan * @param size of the group (can be -1 if no size could be determined) 3162b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan */ 3172b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan private void updateSize(int size) { 3182b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan String groupSizeString; 3192b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan if (size == -1) { 3202b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan groupSizeString = null; 3212b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan } else { 3222b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan String groupSizeTemplateString = getResources().getQuantityString( 3232b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan R.plurals.num_contacts_in_group, size); 3242b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro AccountType accountType = mAccountTypeManager.getAccountType(mAccountTypeString, 3252b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro mDataSet); 3262b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan groupSizeString = String.format(groupSizeTemplateString, size, 3272b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan accountType.getDisplayLabel(mContext)); 3282b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan } 3292b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan 330be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mGroupSize != null) { 3312b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan mGroupSize.setText(groupSizeString); 332be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } else { 3332b431c0384a7638b91478eef521125cdf0b51b11Katherine Kuan mListener.onGroupSizeUpdated(groupSizeString); 334be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 335be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 336be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 337703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan /** 338703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan * Once the account type, group source action, and group source URI have been determined 339703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan * (based on the result from the {@link Loader}), then we can display this to the user in 1 of 340f5f8430538efb5636bdd2385f742ec1b23d10b17Katherine Kuan * 2 ways depending on screen size and orientation: either as a button in the action bar or as 341f5f8430538efb5636bdd2385f742ec1b23d10b17Katherine Kuan * a button in a static header on the page. 342127c1ca913353da59cde560275975f4b1457be2dYorke Lee * We also use isGroupMembershipEditable() of accountType to determine whether or not we should 343127c1ca913353da59cde560275975f4b1457be2dYorke Lee * display the Edit option in the Actionbar. 344703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan */ 345d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann private void updateAccountType(final String accountTypeString, final String dataSet) { 346127c1ca913353da59cde560275975f4b1457be2dYorke Lee final AccountTypeManager manager = AccountTypeManager.getInstance(getActivity()); 347127c1ca913353da59cde560275975f4b1457be2dYorke Lee final AccountType accountType = 348127c1ca913353da59cde560275975f4b1457be2dYorke Lee manager.getAccountType(accountTypeString, dataSet); 349127c1ca913353da59cde560275975f4b1457be2dYorke Lee 350127c1ca913353da59cde560275975f4b1457be2dYorke Lee mIsMembershipEditable = accountType.isGroupMembershipEditable(); 351703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan 352703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // If the group action should be shown in the action bar, then pass the data to the 353703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // listener who will take care of setting up the view and click listener. There is nothing 354703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // else to be done by this {@link Fragment}. 355703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan if (mShowGroupActionInActionBar) { 356d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann mListener.onAccountTypeUpdated(accountTypeString, dataSet); 357703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan return; 358703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 359703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan 360703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // Otherwise, if the {@link Fragment} needs to create and setup the button, then first 361703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // verify that there is a valid action. 362d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann if (!TextUtils.isEmpty(accountType.getViewGroupActivity())) { 363703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan if (mGroupSourceView == null) { 364703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mGroupSourceView = GroupDetailDisplayUtils.getNewGroupSourceView(mContext); 365703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // Figure out how to add the view to the fragment. 366703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // If there is a static header with a container for the group source view, insert 367703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // the view there. 368703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan if (mGroupSourceViewContainer != null) { 369703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mGroupSourceViewContainer.addView(mGroupSourceView); 370703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 371703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 372703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan 373703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan // Rebind the data since this action can change if the loader returns updated data 374703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mGroupSourceView.setVisibility(View.VISIBLE); 375703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan GroupDetailDisplayUtils.bindGroupSourceView(mContext, mGroupSourceView, 3762b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro accountTypeString, dataSet); 377703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mGroupSourceView.setOnClickListener(new OnClickListener() { 378703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan @Override 379703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan public void onClick(View v) { 380d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann final Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, mGroupId); 381d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann final Intent intent = new Intent(Intent.ACTION_VIEW, uri); 38282a4f4408b74e193b43a12dc8e16c946a93bae4aMakoto Onuki intent.setClassName(accountType.syncAdapterPackageName, 383d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann accountType.getViewGroupActivity()); 384d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann startActivity(intent); 385703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 386703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan }); 387703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } else if (mGroupSourceView != null) { 388703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan mGroupSourceView.setVisibility(View.GONE); 389703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 390703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan } 391703cda7119b710446f7abc38843043b7cbbf3a47Katherine Kuan 392fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 393fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, 394fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan int totalItemCount) { 395fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 396fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan 397fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan @Override 398fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan public void onScrollStateChanged(AbsListView view, int scrollState) { 399fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan if (scrollState == OnScrollListener.SCROLL_STATE_FLING) { 400fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mPhotoManager.pause(); 401fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } else { 402fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan mPhotoManager.resume(); 403fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 404fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan } 4058268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4068268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan @Override 4078268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) { 4088268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan inflater.inflate(R.menu.view_group, menu); 4098268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4108268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4118268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan public boolean isOptionsMenuChanged() { 41204e6b557e45cc645c4fca1578358b63945452975Katherine Kuan return mOptionsMenuGroupDeletable != isGroupDeletable() && 413127c1ca913353da59cde560275975f4b1457be2dYorke Lee mOptionsMenuGroupEditable != isGroupEditableAndPresent(); 4148268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4158268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 41604e6b557e45cc645c4fca1578358b63945452975Katherine Kuan public boolean isGroupDeletable() { 417e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson return mGroupUri != null && !mIsReadOnly; 418e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson } 419e962aaf7c3d00baa27cd8f1965e00aaf7c13e557Isaac Katzenelson 420127c1ca913353da59cde560275975f4b1457be2dYorke Lee public boolean isGroupEditableAndPresent() { 421127c1ca913353da59cde560275975f4b1457be2dYorke Lee return mGroupUri != null && mIsMembershipEditable; 4228268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4238268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4248268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan @Override 4258268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan public void onPrepareOptionsMenu(Menu menu) { 42604e6b557e45cc645c4fca1578358b63945452975Katherine Kuan mOptionsMenuGroupDeletable = isGroupDeletable() && isVisible(); 427127c1ca913353da59cde560275975f4b1457be2dYorke Lee mOptionsMenuGroupEditable = isGroupEditableAndPresent() && isVisible(); 4288268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4298268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan final MenuItem editMenu = menu.findItem(R.id.menu_edit_group); 430127c1ca913353da59cde560275975f4b1457be2dYorke Lee editMenu.setVisible(mOptionsMenuGroupEditable); 4318268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4328268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan final MenuItem deleteMenu = menu.findItem(R.id.menu_delete_group); 43304e6b557e45cc645c4fca1578358b63945452975Katherine Kuan deleteMenu.setVisible(mOptionsMenuGroupDeletable); 4348268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4358268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4368268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan @Override 4378268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan public boolean onOptionsItemSelected(MenuItem item) { 4388268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan switch (item.getItemId()) { 4398268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case R.id.menu_edit_group: { 440c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan if (mListener != null) mListener.onEditRequested(mGroupUri); 4418268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan break; 4428268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4438268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case R.id.menu_delete_group: { 444267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName, 445267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson mCloseActivityAfterDelete); 4468268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan return true; 4478268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4488268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4498268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan return false; 4508268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 451267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson 452267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson public void closeActivityAfterDelete(boolean closeActivity) { 453267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson mCloseActivityAfterDelete = closeActivity; 454267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson } 455d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann 456d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann public long getGroupId() { 457d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann return mGroupId; 458d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann } 459fd8cdedb816cb1fc5894e2e3c5e144ff16b90b7cKatherine Kuan} 460