Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2016 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | package com.android.contacts.list; |
| 17 | |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 18 | import android.app.Activity; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 19 | import android.content.Loader; |
| 20 | import android.database.Cursor; |
| 21 | import android.database.CursorWrapper; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 22 | import android.os.Bundle; |
Wenyi Wang | 104e93a | 2016-06-22 18:26:30 -0700 | [diff] [blame] | 23 | import android.provider.ContactsContract.Contacts; |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 24 | import android.util.Log; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 25 | import android.view.LayoutInflater; |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 26 | import android.view.Menu; |
| 27 | import android.view.MenuInflater; |
| 28 | import android.view.MenuItem; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 29 | import android.view.View; |
| 30 | import android.view.ViewGroup; |
| 31 | |
Arthur Wang | 3f6a244 | 2016-12-05 14:51:59 -0800 | [diff] [blame] | 32 | import com.android.contacts.R; |
Gary Mai | 0a49afa | 2016-12-05 15:53:58 -0800 | [diff] [blame] | 33 | import com.android.contacts.activities.ContactSelectionActivity; |
| 34 | import com.android.contacts.group.GroupUtil; |
Gary Mai | 69c182a | 2016-12-05 13:07:03 -0800 | [diff] [blame] | 35 | import com.android.contacts.list.ContactListAdapter.ContactQuery; |
| 36 | import com.android.contacts.model.account.AccountWithDataSet; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 37 | |
| 38 | import java.util.ArrayList; |
Wenyi Wang | 104e93a | 2016-06-22 18:26:30 -0700 | [diff] [blame] | 39 | import java.util.List; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 40 | |
| 41 | /** |
| 42 | * Fragment containing raw contacts for a specified account that are not already in a group. |
| 43 | */ |
| 44 | public class GroupMemberPickerFragment extends |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 45 | MultiSelectContactsListFragment<DefaultContactListAdapter> { |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 46 | |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 47 | public static final String TAG = "GroupMemberPicker"; |
| 48 | |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 49 | private static final String KEY_ACCOUNT_NAME = "accountName"; |
| 50 | private static final String KEY_ACCOUNT_TYPE = "accountType"; |
| 51 | private static final String KEY_ACCOUNT_DATA_SET = "accountDataSet"; |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 52 | private static final String KEY_CONTACT_IDS = "contactIds"; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 53 | |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 54 | private static final String ARG_ACCOUNT_NAME = "accountName"; |
| 55 | private static final String ARG_ACCOUNT_TYPE = "accountType"; |
| 56 | private static final String ARG_ACCOUNT_DATA_SET = "accountDataSet"; |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 57 | private static final String ARG_CONTACT_IDS = "contactIds"; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 58 | |
| 59 | /** Callbacks for host of {@link GroupMemberPickerFragment}. */ |
| 60 | public interface Listener { |
| 61 | |
| 62 | /** Invoked when a potential group member is selected. */ |
Walter Jang | 16c2959 | 2016-06-14 15:34:39 -0700 | [diff] [blame] | 63 | void onGroupMemberClicked(long contactId); |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 64 | |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 65 | /** Invoked when user has initiated multiple selection mode. */ |
| 66 | void onSelectGroupMembers(); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 67 | } |
| 68 | |
Walter Jang | 2552c11 | 2016-06-17 14:29:09 -0700 | [diff] [blame] | 69 | /** Filters out raw contacts that are already in the group. */ |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 70 | private class FilterCursorWrapper extends CursorWrapper { |
| 71 | |
| 72 | private int[] mIndex; |
| 73 | private int mCount = 0; |
| 74 | private int mPos = 0; |
| 75 | |
| 76 | public FilterCursorWrapper(Cursor cursor) { |
| 77 | super(cursor); |
| 78 | |
| 79 | mCount = super.getCount(); |
| 80 | mIndex = new int[mCount]; |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 81 | |
Wenyi Wang | 38860a5 | 2016-06-24 17:47:34 -0700 | [diff] [blame] | 82 | final List<Integer> indicesToFilter = new ArrayList<>(); |
| 83 | |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 84 | if (Log.isLoggable(TAG, Log.VERBOSE)) { |
Walter Jang | 2552c11 | 2016-06-17 14:29:09 -0700 | [diff] [blame] | 85 | Log.v(TAG, "RawContacts CursorWrapper start: " + mCount); |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 86 | } |
| 87 | |
Wenyi Wang | 104e93a | 2016-06-22 18:26:30 -0700 | [diff] [blame] | 88 | final Bundle bundle = cursor.getExtras(); |
Wenyi Wang | 38860a5 | 2016-06-24 17:47:34 -0700 | [diff] [blame] | 89 | final String sections[] = bundle.getStringArray(Contacts |
| 90 | .EXTRA_ADDRESS_BOOK_INDEX_TITLES); |
| 91 | final int counts[] = bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS); |
| 92 | final ContactsSectionIndexer indexer = (sections == null || counts == null) |
| 93 | ? null : new ContactsSectionIndexer(sections, counts); |
Wenyi Wang | 104e93a | 2016-06-22 18:26:30 -0700 | [diff] [blame] | 94 | |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 95 | for (int i = 0; i < mCount; i++) { |
| 96 | super.moveToPosition(i); |
Walter Jang | 16c2959 | 2016-06-14 15:34:39 -0700 | [diff] [blame] | 97 | final String contactId = getString(ContactQuery.CONTACT_ID); |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 98 | if (!mContactIds.contains(contactId)) { |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 99 | mIndex[mPos++] = i; |
Wenyi Wang | 38860a5 | 2016-06-24 17:47:34 -0700 | [diff] [blame] | 100 | } else { |
| 101 | indicesToFilter.add(i); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 102 | } |
| 103 | } |
Wenyi Wang | 104e93a | 2016-06-22 18:26:30 -0700 | [diff] [blame] | 104 | |
Wenyi Wang | 38860a5 | 2016-06-24 17:47:34 -0700 | [diff] [blame] | 105 | if (indexer != null && GroupUtil.needTrimming(mCount, counts, indexer.getPositions())) { |
| 106 | GroupUtil.updateBundle(bundle, indexer, indicesToFilter, sections, counts); |
Wenyi Wang | 104e93a | 2016-06-22 18:26:30 -0700 | [diff] [blame] | 107 | } |
| 108 | |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 109 | mCount = mPos; |
| 110 | mPos = 0; |
| 111 | super.moveToFirst(); |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 112 | |
| 113 | if (Log.isLoggable(TAG, Log.VERBOSE)) { |
Walter Jang | 2552c11 | 2016-06-17 14:29:09 -0700 | [diff] [blame] | 114 | Log.v(TAG, "RawContacts CursorWrapper end: " + mCount); |
Walter Jang | efb1cbe | 2016-05-28 13:54:12 -0700 | [diff] [blame] | 115 | } |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | @Override |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 119 | public boolean move(int offset) { |
| 120 | return moveToPosition(mPos + offset); |
| 121 | } |
| 122 | |
| 123 | @Override |
| 124 | public boolean moveToNext() { |
| 125 | return moveToPosition(mPos + 1); |
| 126 | } |
| 127 | |
| 128 | @Override |
| 129 | public boolean moveToPrevious() { |
| 130 | return moveToPosition(mPos - 1); |
| 131 | } |
| 132 | |
| 133 | @Override |
| 134 | public boolean moveToFirst() { |
| 135 | return moveToPosition(0); |
| 136 | } |
| 137 | |
| 138 | @Override |
| 139 | public boolean moveToLast() { |
| 140 | return moveToPosition(mCount - 1); |
| 141 | } |
| 142 | |
| 143 | @Override |
| 144 | public boolean moveToPosition(int position) { |
John Shao | 2b0d298 | 2016-07-26 14:50:05 -0700 | [diff] [blame] | 145 | if (position >= mCount) { |
| 146 | mPos = mCount; |
| 147 | return false; |
| 148 | } else if (position < 0) { |
| 149 | mPos = -1; |
| 150 | return false; |
| 151 | } |
| 152 | mPos = mIndex[position]; |
| 153 | return super.moveToPosition(mPos); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 154 | } |
| 155 | |
| 156 | @Override |
| 157 | public int getCount() { |
| 158 | return mCount; |
| 159 | } |
| 160 | |
| 161 | @Override |
| 162 | public int getPosition() { |
| 163 | return mPos; |
| 164 | } |
| 165 | } |
| 166 | |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 167 | private String mAccountName; |
| 168 | private String mAccountType; |
| 169 | private String mAccountDataSet; |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 170 | private ArrayList<String> mContactIds; |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 171 | private Listener mListener; |
| 172 | |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 173 | public static GroupMemberPickerFragment newInstance(String accountName, String accountType, |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 174 | String accountDataSet, ArrayList<String> contactIds) { |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 175 | final Bundle args = new Bundle(); |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 176 | args.putString(ARG_ACCOUNT_NAME, accountName); |
| 177 | args.putString(ARG_ACCOUNT_TYPE, accountType); |
| 178 | args.putString(ARG_ACCOUNT_DATA_SET, accountDataSet); |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 179 | args.putStringArrayList(ARG_CONTACT_IDS, contactIds); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 180 | |
| 181 | final GroupMemberPickerFragment fragment = new GroupMemberPickerFragment(); |
| 182 | fragment.setArguments(args); |
| 183 | return fragment; |
| 184 | } |
| 185 | |
| 186 | public GroupMemberPickerFragment() { |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 187 | setPhotoLoaderEnabled(true); |
Walter Jang | debf9da | 2016-06-20 12:42:27 -0700 | [diff] [blame] | 188 | setSectionHeaderDisplayEnabled(true); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 189 | setHasOptionsMenu(true); |
Tingting Wang | 6406adb | 2016-06-27 17:47:03 -0700 | [diff] [blame] | 190 | setDisplayDirectoryHeader(false); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 191 | } |
| 192 | |
| 193 | @Override |
| 194 | public void onCreate(Bundle savedState) { |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 195 | if (savedState == null) { |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 196 | mAccountName = getArguments().getString(ARG_ACCOUNT_NAME); |
| 197 | mAccountType = getArguments().getString(ARG_ACCOUNT_TYPE); |
| 198 | mAccountDataSet = getArguments().getString(ARG_ACCOUNT_DATA_SET); |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 199 | mContactIds = getArguments().getStringArrayList(ARG_CONTACT_IDS); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 200 | } else { |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 201 | mAccountName = savedState.getString(KEY_ACCOUNT_NAME); |
| 202 | mAccountType = savedState.getString(KEY_ACCOUNT_TYPE); |
| 203 | mAccountDataSet = savedState.getString(KEY_ACCOUNT_DATA_SET); |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 204 | mContactIds = savedState.getStringArrayList(KEY_CONTACT_IDS); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 205 | } |
Walter Jang | 16c2959 | 2016-06-14 15:34:39 -0700 | [diff] [blame] | 206 | super.onCreate(savedState); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 207 | } |
| 208 | |
| 209 | @Override |
| 210 | public void onSaveInstanceState(Bundle outState) { |
| 211 | super.onSaveInstanceState(outState); |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 212 | outState.putString(KEY_ACCOUNT_NAME, mAccountName); |
| 213 | outState.putString(KEY_ACCOUNT_TYPE, mAccountType); |
| 214 | outState.putString(KEY_ACCOUNT_DATA_SET, mAccountDataSet); |
Walter Jang | dd2d8e2 | 2016-09-09 11:07:37 -0700 | [diff] [blame] | 215 | outState.putStringArrayList(KEY_CONTACT_IDS, mContactIds); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 216 | } |
| 217 | |
| 218 | public void setListener(Listener listener) { |
| 219 | mListener = listener; |
| 220 | } |
| 221 | |
| 222 | @Override |
| 223 | protected View inflateView(LayoutInflater inflater, ViewGroup container) { |
| 224 | return inflater.inflate(R.layout.contact_list_content, null); |
| 225 | } |
| 226 | |
| 227 | @Override |
| 228 | public void onLoadFinished(Loader<Cursor> loader, Cursor data) { |
Wenyi Wang | ecc222b | 2016-06-06 14:35:51 -0700 | [diff] [blame] | 229 | if (data != null) { |
Walter Jang | debf9da | 2016-06-20 12:42:27 -0700 | [diff] [blame] | 230 | // Wait until contacts are loaded before showing the scrollbar |
| 231 | setVisibleScrollbarEnabled(true); |
| 232 | |
Wenyi Wang | 1114fde | 2016-07-11 21:44:02 -0700 | [diff] [blame] | 233 | final FilterCursorWrapper cursorWrapper = new FilterCursorWrapper(data); |
Tingting Wang | 6406adb | 2016-06-27 17:47:03 -0700 | [diff] [blame] | 234 | final View accountFilterContainer = getView().findViewById( |
| 235 | R.id.account_filter_header_container); |
Wenyi Wang | 1114fde | 2016-07-11 21:44:02 -0700 | [diff] [blame] | 236 | final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(mAccountName, |
| 237 | mAccountType, mAccountDataSet); |
| 238 | bindListHeader(getContext(), getListView(), accountFilterContainer, |
| 239 | accountWithDataSet, cursorWrapper.getCount()); |
Tingting Wang | 6406adb | 2016-06-27 17:47:03 -0700 | [diff] [blame] | 240 | |
Wenyi Wang | 1114fde | 2016-07-11 21:44:02 -0700 | [diff] [blame] | 241 | super.onLoadFinished(loader, cursorWrapper); |
Wenyi Wang | ecc222b | 2016-06-06 14:35:51 -0700 | [diff] [blame] | 242 | } |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 243 | } |
| 244 | |
| 245 | @Override |
Walter Jang | 16c2959 | 2016-06-14 15:34:39 -0700 | [diff] [blame] | 246 | protected DefaultContactListAdapter createListAdapter() { |
| 247 | final DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity()); |
| 248 | adapter.setFilter(ContactListFilter.createGroupMembersFilter( |
Walter Jang | 6c5a558 | 2016-06-16 11:26:53 -0700 | [diff] [blame] | 249 | mAccountType, mAccountName, mAccountDataSet)); |
Walter Jang | 16c2959 | 2016-06-14 15:34:39 -0700 | [diff] [blame] | 250 | adapter.setSectionHeaderDisplayEnabled(true); |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 251 | adapter.setDisplayPhotos(true); |
| 252 | return adapter; |
| 253 | } |
| 254 | |
| 255 | @Override |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 256 | protected void onItemClick(int position, long id) { |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 257 | if (getAdapter().isDisplayingCheckBoxes()) { |
| 258 | super.onItemClick(position, id); |
| 259 | return; |
| 260 | } |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 261 | if (mListener != null) { |
Walter Jang | 16c2959 | 2016-06-14 15:34:39 -0700 | [diff] [blame] | 262 | final long contactId = getAdapter().getContactId(position); |
| 263 | if (contactId > 0) { |
| 264 | mListener.onGroupMemberClicked(contactId); |
| 265 | } |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 266 | } |
| 267 | } |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 268 | |
| 269 | @Override |
| 270 | public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) { |
| 271 | super.onCreateOptionsMenu(menu, menuInflater); |
| 272 | menuInflater.inflate(R.menu.group_member_picker, menu); |
| 273 | } |
| 274 | |
| 275 | @Override |
| 276 | public void onPrepareOptionsMenu(Menu menu) { |
| 277 | final ContactSelectionActivity activity = getContactSelectionActivity(); |
Sean Midford | e6342c6 | 2016-10-20 15:11:19 -0700 | [diff] [blame] | 278 | final boolean hasContacts = mContactIds == null ? false : mContactIds.size() > 0; |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 279 | final boolean isSearchMode = activity == null ? false : activity.isSearchMode(); |
| 280 | final boolean isSelectionMode = activity == null ? false : activity.isSelectionMode(); |
| 281 | |
| 282 | // Added in ContactSelectionActivity but we must account for selection mode |
| 283 | setVisible(menu, R.id.menu_search, !isSearchMode && !isSelectionMode); |
Sean Midford | e6342c6 | 2016-10-20 15:11:19 -0700 | [diff] [blame] | 284 | setVisible(menu, R.id.menu_select, hasContacts && !isSearchMode && !isSelectionMode); |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 285 | } |
| 286 | |
| 287 | private ContactSelectionActivity getContactSelectionActivity() { |
| 288 | final Activity activity = getActivity(); |
| 289 | if (activity != null && activity instanceof ContactSelectionActivity) { |
| 290 | return (ContactSelectionActivity) activity; |
| 291 | } |
| 292 | return null; |
| 293 | } |
| 294 | |
| 295 | private static void setVisible(Menu menu, int id, boolean visible) { |
| 296 | final MenuItem menuItem = menu.findItem(id); |
| 297 | if (menuItem != null) { |
| 298 | menuItem.setVisible(visible); |
| 299 | } |
| 300 | } |
| 301 | |
| 302 | @Override |
| 303 | public boolean onOptionsItemSelected(MenuItem item) { |
| 304 | switch (item.getItemId()) { |
| 305 | case android.R.id.home: { |
| 306 | final Activity activity = getActivity(); |
| 307 | if (activity != null) { |
| 308 | activity.onBackPressed(); |
| 309 | } |
| 310 | return true; |
| 311 | } |
Walter Jang | a489721 | 2016-06-21 19:02:23 -0700 | [diff] [blame] | 312 | case R.id.menu_select: { |
| 313 | if (mListener != null) { |
| 314 | mListener.onSelectGroupMembers(); |
| 315 | } |
| 316 | return true; |
| 317 | } |
| 318 | } |
| 319 | return super.onOptionsItemSelected(item); |
| 320 | } |
Walter Jang | f9779ef | 2016-05-25 12:23:05 -0700 | [diff] [blame] | 321 | } |