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