1b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov/* 2b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Copyright (C) 2007 The Android Open Source Project 3b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * 4b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * you may not use this file except in compliance with the License. 6b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * You may obtain a copy of the License at 7b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * 8b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * 10b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * See the License for the specific language governing permissions and 14b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * limitations under the License. 15b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */ 16b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 17b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovpackage com.android.contacts.activities; 18b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 1984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikovimport android.app.Fragment; 201d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shraunerimport android.content.ActivityNotFoundException; 21b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.content.Intent; 22bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shaoimport android.graphics.PorterDuff; 23bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shaoimport android.graphics.drawable.Drawable; 24b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.net.Uri; 25b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.os.Bundle; 26b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 27bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shaoimport android.support.v4.content.ContextCompat; 28a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport android.support.v7.widget.Toolbar; 294d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport android.text.TextUtils; 30a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.util.Log; 3181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwellimport android.view.Menu; 3281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwellimport android.view.MenuInflater; 33b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.view.MenuItem; 34b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.view.View; 3563c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikovimport android.view.View.OnClickListener; 36a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.View.OnFocusChangeListener; 37f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wangimport android.widget.TextView; 381d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shraunerimport android.widget.Toast; 39b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 40a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.AppCompatContactsActivity; 41e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 42ac679af994faece43536f1e8b2613f30c50300e1Walter Jangimport com.android.contacts.editor.EditorIntents; 430a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.ContactEntryListFragment; 44e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactPickerFragment; 45e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactsIntentResolver; 46e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactsRequest; 470a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.DirectoryListLoader; 48e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.EmailAddressPickerFragment; 49a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.GroupMemberPickerFragment; 5081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwellimport com.android.contacts.list.JoinContactListFragment; 51a953aa785610afcda67a17a1c109d09c4773ca90Chiao Chengimport com.android.contacts.list.LegacyPhoneNumberPickerFragment; 52a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.MultiSelectContactsListFragment; 53a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener; 540a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.MultiSelectEmailAddressesListFragment; 550a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.MultiSelectPhoneNumbersListFragment; 56e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnContactPickerActionListener; 57e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnEmailAddressPickerActionListener; 580a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.OnPhoneNumberPickerActionListener; 59e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnPostalAddressPickerActionListener; 600a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.PhoneNumberPickerFragment; 61e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.PostalAddressPickerFragment; 62a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.UiIntentActions; 630a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.logging.ListEvent; 640a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.util.ImplicitIntentsUtil; 650a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.util.ViewUtil; 66e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 67f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jangimport java.util.ArrayList; 6837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan 69b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov/** 70b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Displays a list of contacts (or phone numbers or postal addresses) for the 71b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * purposes of selecting one. 72b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */ 73a489721e65c5f549ab26272af08eb2d05a869976Walter Jangpublic class ContactSelectionActivity extends AppCompatContactsActivity implements 74a489721e65c5f549ab26272af08eb2d05a869976Walter Jang View.OnCreateContextMenuListener, ActionBarAdapter.Listener, OnClickListener, 75a489721e65c5f549ab26272af08eb2d05a869976Walter Jang OnFocusChangeListener, OnCheckBoxListActionListener { 76a489721e65c5f549ab26272af08eb2d05a869976Walter Jang private static final String TAG = "ContactSelection"; 77b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 7884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov private static final String KEY_ACTION_CODE = "actionCode"; 7981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell private static final String KEY_SEARCH_MODE = "searchMode"; 804d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20; 8184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 82b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private ContactsIntentResolver mIntentResolver; 83b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov protected ContactEntryListFragment<?> mListFragment; 84b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 8584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov private int mActionCode = -1; 8681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell private boolean mIsSearchMode; 87fde48de9ab7f1fb6e2037a32437e4f70716c719bBrian Attwell private boolean mIsSearchSupported; 88b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 89b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private ContactsRequest mRequest; 90a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 91a489721e65c5f549ab26272af08eb2d05a869976Walter Jang private ActionBarAdapter mActionBarAdapter; 92a489721e65c5f549ab26272af08eb2d05a869976Walter Jang private Toolbar mToolbar; 93b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 94b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public ContactSelectionActivity() { 95b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mIntentResolver = new ContactsIntentResolver(this); 96b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 97b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 98b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov @Override 9984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov public void onAttachFragment(Fragment fragment) { 10084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov if (fragment instanceof ContactEntryListFragment<?>) { 10184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov mListFragment = (ContactEntryListFragment<?>) fragment; 10284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setupActionListener(); 10384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 10484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 10584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 10684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov @Override 10784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov protected void onCreate(Bundle savedState) { 10884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov super.onCreate(savedState); 10984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 1101e899dc127a212bfd2198fe7adba5c33eb4cd751Gary Mai RequestPermissionsActivity.startPermissionActivityIfNeeded(this); 111bdd32641ae2c2bc6214608cc5712dfb2b96e0305Brian Attwell 11284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov if (savedState != null) { 11384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov mActionCode = savedState.getInt(KEY_ACTION_CODE); 11481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell mIsSearchMode = savedState.getBoolean(KEY_SEARCH_MODE); 11584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 116acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan 117b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov // Extract relevant information from the intent 118b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mRequest = mIntentResolver.resolveIntent(getIntent()); 119b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov if (!mRequest.isValid()) { 120b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov setResult(RESULT_CANCELED); 121b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov finish(); 122b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov return; 123b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 124b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 1254d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov setContentView(R.layout.contact_picker); 1264d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov 127a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (mActionCode != mRequest.getActionCode()) { 128a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mActionCode = mRequest.getActionCode(); 129a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa configureListFragment(); 130a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 131a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 132a489721e65c5f549ab26272af08eb2d05a869976Walter Jang prepareSearchViewAndActionBar(savedState); 133a489721e65c5f549ab26272af08eb2d05a869976Walter Jang configureActivityTitle(); 134a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 135a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 136a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public boolean isSelectionMode() { 137a489721e65c5f549ab26272af08eb2d05a869976Walter Jang return mActionBarAdapter.isSelectionMode(); 138a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 139a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 140a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public boolean isSearchMode() { 141a489721e65c5f549ab26272af08eb2d05a869976Walter Jang return mActionBarAdapter.isSearchMode(); 142a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 143a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 144a489721e65c5f549ab26272af08eb2d05a869976Walter Jang private void prepareSearchViewAndActionBar(Bundle savedState) { 145a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mToolbar = getView(R.id.toolbar); 146a489721e65c5f549ab26272af08eb2d05a869976Walter Jang setSupportActionBar(mToolbar); 147a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 148a489721e65c5f549ab26272af08eb2d05a869976Walter Jang // Add a shadow under the toolbar. 149a489721e65c5f549ab26272af08eb2d05a869976Walter Jang ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources()); 150a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 151ca6018dbd827d72730d6564b3d65b7dfc8f5f347Wenyi Wang mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(), mToolbar, 152a489721e65c5f549ab26272af08eb2d05a869976Walter Jang R.string.enter_contact_name); 153a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setShowHomeIcon(true); 154a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setShowHomeAsUp(true); 155a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.initialize(savedState, mRequest); 156bbd220183e9bc6d0b056af3c68fa4a31f5b747f2Brian Attwell 15716c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang // Postal address pickers (and legacy pickers) don't support search, so just show 158d1af8adb1acc56f6c1709d38efe69be9497356a9Daniel Lehmann // "HomeAsUp" button and title. 159ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford mIsSearchSupported = mRequest.getActionCode() != ContactsRequest.ACTION_PICK_POSTAL 160ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford && mRequest.getActionCode() != ContactsRequest.ACTION_PICK_EMAILS 161ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford && mRequest.getActionCode() != ContactsRequest.ACTION_PICK_PHONES 162ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford && !mRequest.isLegacyCompatibilityMode(); 16381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell configureSearchMode(); 16481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 16581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 16681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell private void configureSearchMode() { 167a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setSearchMode(mIsSearchMode); 16881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell invalidateOptionsMenu(); 169a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 170a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 171a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa @Override 172a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public boolean onOptionsItemSelected(MenuItem item) { 173b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott final int id = item.getItemId(); 174b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott if (id == android.R.id.home) {// Go back to previous screen, intending "cancel" 175b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott setResult(RESULT_CANCELED); 176b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott onBackPressed(); 177b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott } else if (id == R.id.menu_search) { 178b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott mIsSearchMode = !mIsSearchMode; 179b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott configureSearchMode(); 180b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott } else { 181b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott return super.onOptionsItemSelected(item); 182a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 183b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott return true; 18484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 185b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 18684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov @Override 18784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov protected void onSaveInstanceState(Bundle outState) { 18884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov super.onSaveInstanceState(outState); 18984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov outState.putInt(KEY_ACTION_CODE, mActionCode); 19081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell outState.putBoolean(KEY_SEARCH_MODE, mIsSearchMode); 1910ef05187bc9a6457b2e172ca869a475420efe115Walter Jang if (mActionBarAdapter != null) { 1920ef05187bc9a6457b2e172ca869a475420efe115Walter Jang mActionBarAdapter.onSaveInstanceState(outState); 1930ef05187bc9a6457b2e172ca869a475420efe115Walter Jang } 194b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 195b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 19684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov private void configureActivityTitle() { 197b7a1da621e7ba54a4e9c97a14f35b2650b8e7471Makoto Onuki if (!TextUtils.isEmpty(mRequest.getActivityTitle())) { 198a489721e65c5f549ab26272af08eb2d05a869976Walter Jang getSupportActionBar().setTitle(mRequest.getActivityTitle()); 19984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov return; 20084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 201a489721e65c5f549ab26272af08eb2d05a869976Walter Jang int titleResId = -1; 20284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov int actionCode = mRequest.getActionCode(); 20384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov switch (actionCode) { 20484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: { 205a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.contactInsertOrEditActivityTitle; 20684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 20784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 20884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_CONTACT: { 209a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.contactPickerActivityTitle; 21084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 21184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 21284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: { 213a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.contactPickerActivityTitle; 21484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 21584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 21684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: { 217a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.shortcutActivityTitle; 21884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 21984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 22084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_PHONE: { 221a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.contactPickerActivityTitle; 22284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 22384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 224c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann case ContactsRequest.ACTION_PICK_EMAIL: { 225a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.contactPickerActivityTitle; 226c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann break; 227c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 228ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford case ContactsRequest.ACTION_PICK_PHONES: { 229ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford titleResId = R.string.pickerSelectContactsActivityTitle; 230ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford break; 231ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford } 232ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford case ContactsRequest.ACTION_PICK_EMAILS: { 233ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford titleResId = R.string.pickerSelectContactsActivityTitle; 234ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford break; 235ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford } 23684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: { 237f5faebf8c19dfac33b4a04811a3383842995e3f7Walter Jang titleResId = R.string.shortcutActivityTitle; 23884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 23984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 24084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: { 241f5faebf8c19dfac33b4a04811a3383842995e3f7Walter Jang titleResId = R.string.shortcutActivityTitle; 24284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 24384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 24484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_POSTAL: { 245a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.contactPickerActivityTitle; 24684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 24784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 24881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell case ContactsRequest.ACTION_PICK_JOIN: { 249a489721e65c5f549ab26272af08eb2d05a869976Walter Jang titleResId = R.string.titleJoinContactDataWith; 25081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell break; 25181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 252f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: { 253ec807e1cb7eb8f607b1dafa4475e7a30776ce538Walter Jang titleResId = R.string.groupMemberPickerActivityTitle; 254f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang break; 255f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang } 25684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 257a489721e65c5f549ab26272af08eb2d05a869976Walter Jang if (titleResId > 0) { 258a489721e65c5f549ab26272af08eb2d05a869976Walter Jang getSupportActionBar().setTitle(titleResId); 259a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 26084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 26184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 262b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov /** 263b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Creates the fragment based on the current request. 264b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */ 26584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov public void configureListFragment() { 266b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov switch (mActionCode) { 267b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: { 26886092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 26986092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov fragment.setEditMode(true); 27086092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE); 271bbd220183e9bc6d0b056af3c68fa4a31f5b747f2Brian Attwell fragment.setCreateContactEnabled(!mRequest.isSearchMode()); 2726158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_CONTACT); 273b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 274b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 275b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 276b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 27798609ec4faea054971938f440438bad792596e99Jay Shrauner case ContactsRequest.ACTION_DEFAULT: 278b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_CONTACT: { 279b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 2807b6bb0043357ca156924cdcd3f29180585dbae9eWenyi Wang fragment.setIncludeFavorites(mRequest.shouldIncludeFavorites()); 2816158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_CONTACT); 282b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 283b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 284b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 285b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 286b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: { 287b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 288bbd220183e9bc6d0b056af3c68fa4a31f5b747f2Brian Attwell fragment.setCreateContactEnabled(!mRequest.isSearchMode()); 2896158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_CONTACT); 290b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 291b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 292b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 293b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 294b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: { 295b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 296b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov fragment.setShortcutRequested(true); 2976158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT); 298b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 299b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 300b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 301b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 302b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_PHONE: { 303a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest); 3046158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_PHONE); 305b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 306b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 307b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 308b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 309c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann case ContactsRequest.ACTION_PICK_EMAIL: { 310c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann mListFragment = new EmailAddressPickerFragment(); 3116158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang mListFragment.setListType(ListEvent.ListType.PICK_EMAIL); 312c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann break; 313c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 314c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann 315ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford case ContactsRequest.ACTION_PICK_PHONES: { 316ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford mListFragment = new MultiSelectPhoneNumbersListFragment(); 317ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford mListFragment.setArguments(getIntent().getExtras()); 318ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford break; 319ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford } 320ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford 321ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford case ContactsRequest.ACTION_PICK_EMAILS: { 322ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford mListFragment = new MultiSelectEmailAddressesListFragment(); 323ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford mListFragment.setArguments(getIntent().getExtras()); 324ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford break; 325ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford } 326b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: { 327a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest); 328b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov fragment.setShortcutAction(Intent.ACTION_CALL); 3296158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT); 330b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 331b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 332b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 333b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 334b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: { 335a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest); 336b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov fragment.setShortcutAction(Intent.ACTION_SENDTO); 3376158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT); 338b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 339b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 340b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 341b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 342b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_POSTAL: { 343b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov PostalAddressPickerFragment fragment = new PostalAddressPickerFragment(); 3446158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang fragment.setListType(ListEvent.ListType.PICK_POSTAL); 345b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 346b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 347b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 348b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 34981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell case ContactsRequest.ACTION_PICK_JOIN: { 35081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell JoinContactListFragment joinFragment = new JoinContactListFragment(); 35181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell joinFragment.setTargetContactId(getTargetContactId()); 3526158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang joinFragment.setListType(ListEvent.ListType.PICK_JOIN); 35381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell mListFragment = joinFragment; 35481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell break; 35581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 35681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 357f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: { 3586c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang final String accountName = getIntent().getStringExtra( 3596c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang UiIntentActions.GROUP_ACCOUNT_NAME); 3606c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang final String accountType = getIntent().getStringExtra( 3616c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang UiIntentActions.GROUP_ACCOUNT_TYPE); 3626c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang final String accountDataSet = getIntent().getStringExtra( 3636c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang UiIntentActions.GROUP_ACCOUNT_DATA_SET); 36416c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang final ArrayList<String> contactIds = getIntent().getStringArrayListExtra( 36516c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang UiIntentActions.GROUP_CONTACT_IDS); 3666c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang mListFragment = GroupMemberPickerFragment.newInstance( 3676c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang accountName, accountType, accountDataSet, contactIds); 3686158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang mListFragment.setListType(ListEvent.ListType.PICK_GROUP_MEMBERS); 369f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang break; 370f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang } 371f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang 372b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov default: 373b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov throw new IllegalStateException("Invalid action code: " + mActionCode); 374b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 37584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 376a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng // Setting compatibility is no longer needed for PhoneNumberPickerFragment since that logic 377a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng // has been separated into LegacyPhoneNumberPickerFragment. But we still need to set 378a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng // compatibility for other fragments. 37984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov mListFragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode()); 3804d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov mListFragment.setDirectoryResultLimit(DEFAULT_DIRECTORY_RESULT_LIMIT); 3814d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov 3823ed426c842a68895a759548fef87bac359f937bbDianne Hackborn getFragmentManager().beginTransaction() 38384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov .replace(R.id.list_container, mListFragment) 3844b25da79091157935042d2942a8961ceba92166fMinh Pham .commitAllowingStateLoss(); 38584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 38684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 387a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng private PhoneNumberPickerFragment getPhoneNumberPickerFragment(ContactsRequest request) { 388a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng if (mRequest.isLegacyCompatibilityMode()) { 389a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng return new LegacyPhoneNumberPickerFragment(); 390a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng } else { 391a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng return new PhoneNumberPickerFragment(); 392a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng } 393a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng } 394a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng 39584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov public void setupActionListener() { 3966e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov if (mListFragment instanceof ContactPickerFragment) { 39784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov ((ContactPickerFragment) mListFragment).setOnContactPickerActionListener( 39884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov new ContactPickerActionListener()); 39984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } else if (mListFragment instanceof PhoneNumberPickerFragment) { 40084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov ((PhoneNumberPickerFragment) mListFragment).setOnPhoneNumberPickerActionListener( 40184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov new PhoneNumberPickerActionListener()); 40284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } else if (mListFragment instanceof PostalAddressPickerFragment) { 40384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov ((PostalAddressPickerFragment) mListFragment).setOnPostalAddressPickerActionListener( 40484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov new PostalAddressPickerActionListener()); 405c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } else if (mListFragment instanceof EmailAddressPickerFragment) { 406c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann ((EmailAddressPickerFragment) mListFragment).setOnEmailAddressPickerActionListener( 407c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann new EmailAddressPickerActionListener()); 408ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford } else if (mListFragment instanceof MultiSelectEmailAddressesListFragment) { 409ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford ((MultiSelectEmailAddressesListFragment) mListFragment).setCheckBoxListListener(this); 410ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford } else if (mListFragment instanceof MultiSelectPhoneNumbersListFragment) { 411ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford ((MultiSelectPhoneNumbersListFragment) mListFragment).setCheckBoxListListener(this); 41281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } else if (mListFragment instanceof JoinContactListFragment) { 41381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell ((JoinContactListFragment) mListFragment).setOnContactPickerActionListener( 41481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell new JoinContactActionListener()); 415f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang } else if (mListFragment instanceof GroupMemberPickerFragment) { 416f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang ((GroupMemberPickerFragment) mListFragment).setListener( 417f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang new GroupMemberPickerListener()); 418a489721e65c5f549ab26272af08eb2d05a869976Walter Jang getMultiSelectListFragment().setCheckBoxListListener(this); 41984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } else { 42084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov throw new IllegalStateException("Unsupported list fragment type: " + mListFragment); 42184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 422b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 423b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 424a489721e65c5f549ab26272af08eb2d05a869976Walter Jang private MultiSelectContactsListFragment getMultiSelectListFragment() { 425a489721e65c5f549ab26272af08eb2d05a869976Walter Jang if (mListFragment instanceof MultiSelectContactsListFragment) { 426a489721e65c5f549ab26272af08eb2d05a869976Walter Jang return (MultiSelectContactsListFragment) mListFragment; 427a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 428a489721e65c5f549ab26272af08eb2d05a869976Walter Jang return null; 429a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 430a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 431a489721e65c5f549ab26272af08eb2d05a869976Walter Jang @Override 432a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public void onAction(int action) { 433a489721e65c5f549ab26272af08eb2d05a869976Walter Jang switch (action) { 434a489721e65c5f549ab26272af08eb2d05a869976Walter Jang case ActionBarAdapter.Listener.Action.START_SEARCH_MODE: 435a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mIsSearchMode = true; 436a489721e65c5f549ab26272af08eb2d05a869976Walter Jang configureSearchMode(); 437a489721e65c5f549ab26272af08eb2d05a869976Walter Jang break; 438a489721e65c5f549ab26272af08eb2d05a869976Walter Jang case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY: 439a489721e65c5f549ab26272af08eb2d05a869976Walter Jang final String queryString = mActionBarAdapter.getQueryString(); 440a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mListFragment.setQueryString(queryString, /* delaySelection */ false); 441a489721e65c5f549ab26272af08eb2d05a869976Walter Jang break; 442a489721e65c5f549ab26272af08eb2d05a869976Walter Jang case ActionBarAdapter.Listener.Action.START_SELECTION_MODE: 443a489721e65c5f549ab26272af08eb2d05a869976Walter Jang if (getMultiSelectListFragment() != null) { 444a489721e65c5f549ab26272af08eb2d05a869976Walter Jang getMultiSelectListFragment().displayCheckBoxes(true); 445a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 446a489721e65c5f549ab26272af08eb2d05a869976Walter Jang invalidateOptionsMenu(); 447a489721e65c5f549ab26272af08eb2d05a869976Walter Jang break; 448a489721e65c5f549ab26272af08eb2d05a869976Walter Jang case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE: 449b236b7c8ecd881795f8fff06210c0e89bcb2e99eWenyi Wang mListFragment.setQueryString("", /* delaySelection */ false); 450a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setSearchMode(false); 451a489721e65c5f549ab26272af08eb2d05a869976Walter Jang if (getMultiSelectListFragment() != null) { 452a489721e65c5f549ab26272af08eb2d05a869976Walter Jang getMultiSelectListFragment().displayCheckBoxes(false); 453a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 454a489721e65c5f549ab26272af08eb2d05a869976Walter Jang invalidateOptionsMenu(); 455a489721e65c5f549ab26272af08eb2d05a869976Walter Jang break; 456a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 457a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 458a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 459a489721e65c5f549ab26272af08eb2d05a869976Walter Jang @Override 460a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public void onUpButtonPressed() { 461a489721e65c5f549ab26272af08eb2d05a869976Walter Jang onBackPressed(); 462a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 463a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 464a489721e65c5f549ab26272af08eb2d05a869976Walter Jang @Override 465a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public void onStartDisplayingCheckBoxes() { 466a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setSelectionMode(true); 467a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 468a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 469a489721e65c5f549ab26272af08eb2d05a869976Walter Jang @Override 470a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public void onSelectedContactIdsChanged() { 471a489721e65c5f549ab26272af08eb2d05a869976Walter Jang if (mListFragment instanceof MultiSelectContactsListFragment) { 472f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang final int count = getMultiSelectListFragment().getSelectedContactIds().size(); 473f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang mActionBarAdapter.setSelectionCount(count); 474f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang updateAddContactsButton(count); 475f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang 476a489721e65c5f549ab26272af08eb2d05a869976Walter Jang // Show or hide the multi select "Done" button 477a489721e65c5f549ab26272af08eb2d05a869976Walter Jang invalidateOptionsMenu(); 478a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 479a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 480a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 481f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang private void updateAddContactsButton(int count) { 482f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang final TextView textView = (TextView) mActionBarAdapter.getSelectionContainer() 483f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang .findViewById(R.id.add_contacts); 484f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang if (count > 0) { 485f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang textView.setVisibility(View.VISIBLE); 486f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang textView.setAllCaps(true); 487f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang textView.setOnClickListener(new OnClickListener() { 488f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang @Override 489f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang public void onClick(View v) { 490f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang final long[] contactIds = 491f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang getMultiSelectListFragment().getSelectedContactIdsArray(); 492f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang returnSelectedContacts(contactIds); 493f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang } 494f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang }); 495f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang } else { 496f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang textView.setVisibility(View.GONE); 497f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang } 498f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang } 499f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang 500a489721e65c5f549ab26272af08eb2d05a869976Walter Jang @Override 501a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public void onStopDisplayingCheckBoxes() { 502a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setSelectionMode(false); 503a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 504a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 505b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private final class ContactPickerActionListener implements OnContactPickerActionListener { 506e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 507b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onCreateNewContactAction() { 508a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa startCreateNewContactActivity(); 509b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 510b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 511e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 51286092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov public void onEditContactAction(Uri contactLookupUri) { 513363af60ea23e5a3b945005712a16564ab69db18bGary Mai startActivityAndForwardResult(EditorIntents.createEditContactIntent( 51441c6886cabf68370f160ccd68d173bd6a59a1a07John Shao ContactSelectionActivity.this, contactLookupUri, /* materialPalette =*/ null, 51541c6886cabf68370f160ccd68d173bd6a59a1a07John Shao /* photoId =*/ -1)); 51686092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov } 51786092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov 51886092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov @Override 519b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onPickContactAction(Uri contactUri) { 520d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(contactUri); 521b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 522b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 523e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 524b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onShortcutIntentCreated(Intent intent) { 525d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(intent); 526b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 527b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 528b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 529b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private final class PhoneNumberPickerActionListener implements 530b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov OnPhoneNumberPickerActionListener { 531e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5320a8f9736d1af8903674c412cf88c1233b60a156eTyler Gunn public void onPickDataUri(Uri dataUri, boolean isVideoCall, int callInitiationType) { 533d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(dataUri); 534b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 535b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 536e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 537a6e7230bdb514b9d0871db8af9e38e38e2f97977Anne Rong public void onPickPhoneNumber(String phoneNumber, boolean isVideoCall, 538a6e7230bdb514b9d0871db8af9e38e38e2f97977Anne Rong int callInitiationType) { 53986c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee Log.w(TAG, "Unsupported call."); 54086c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee } 54186c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee 54286c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee @Override 543b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onShortcutIntentCreated(Intent intent) { 544d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(intent); 545b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 54688f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa 547dd3d2a4fed04b1d9bc450fbca6967be4622ba944Yorke Lee @Override 54888f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa public void onHomeInActionBarSelected() { 54988f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa ContactSelectionActivity.this.onBackPressed(); 55088f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa } 551b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 552b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 55381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell private final class JoinContactActionListener implements OnContactPickerActionListener { 55481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell @Override 55581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell public void onPickContactAction(Uri contactUri) { 55681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell Intent intent = new Intent(null, contactUri); 55781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell setResult(RESULT_OK, intent); 55881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell finish(); 55981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 56081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 56181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell @Override 56281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell public void onShortcutIntentCreated(Intent intent) { 56381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 56481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 56581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell @Override 56681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell public void onCreateNewContactAction() { 56781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 56881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 56981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell @Override 57081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell public void onEditContactAction(Uri contactLookupUri) { 57181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 57281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 57381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 574f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang private final class GroupMemberPickerListener implements GroupMemberPickerFragment.Listener { 575f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang 576f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang @Override 57716c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang public void onGroupMemberClicked(long contactId) { 57816c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang final Intent intent = new Intent(); 57916c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, contactId); 58016c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang returnPickerResult(intent); 581f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang } 582a489721e65c5f549ab26272af08eb2d05a869976Walter Jang 583a489721e65c5f549ab26272af08eb2d05a869976Walter Jang @Override 584a489721e65c5f549ab26272af08eb2d05a869976Walter Jang public void onSelectGroupMembers() { 585a489721e65c5f549ab26272af08eb2d05a869976Walter Jang mActionBarAdapter.setSelectionMode(true); 586a489721e65c5f549ab26272af08eb2d05a869976Walter Jang } 587f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang } 588f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang 589f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang private void returnSelectedContacts(long[] contactIds) { 590f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang final Intent intent = new Intent(); 591f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY, contactIds); 592f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang returnPickerResult(intent); 593f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang } 594f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang 595b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private final class PostalAddressPickerActionListener implements 596b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov OnPostalAddressPickerActionListener { 597e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 598b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onPickPostalAddressAction(Uri dataUri) { 599d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(dataUri); 600b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 601b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 602b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 603c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann private final class EmailAddressPickerActionListener implements 604c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann OnEmailAddressPickerActionListener { 605c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann @Override 606c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann public void onPickEmailAddressAction(Uri dataUri) { 607c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann returnPickerResult(dataUri); 608c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 609c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 610c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann 611b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void startActivityAndForwardResult(final Intent intent) { 612b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 613b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 614b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov // Forward extras to the new activity 615b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 616b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov if (extras != null) { 617b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov intent.putExtras(extras); 618b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 6191d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner try { 62041c6886cabf68370f160ccd68d173bd6a59a1a07John Shao ImplicitIntentsUtil.startActivityInApp(ContactSelectionActivity.this, intent); 6211d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner } catch (ActivityNotFoundException e) { 6221d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner Log.e(TAG, "startActivity() failed: " + e); 6231d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner Toast.makeText(ContactSelectionActivity.this, R.string.missing_app, 6241d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner Toast.LENGTH_SHORT).show(); 6251d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner } 626b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov finish(); 627b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 628b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 629b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov @Override 630a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public void onFocusChange(View view, boolean hasFocus) { 631b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott if (view.getId() == R.id.search_view) { 632b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott if (hasFocus) { 633b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott mActionBarAdapter.setFocusOnSearchView(); 634a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 635a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 636a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 637a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 638d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov public void returnPickerResult(Uri data) { 639d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov Intent intent = new Intent(); 640d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov intent.setData(data); 641d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(intent); 642d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov } 643d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov 644d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov public void returnPickerResult(Intent intent) { 645d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 646d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov setResult(RESULT_OK, intent); 647d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov finish(); 648d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov } 649d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov 65063c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov @Override 651a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public void onClick(View view) { 652b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott if (view.getId() == R.id.floating_action_button) { 653b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott startCreateNewContactActivity(); 654a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 655a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 656a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 65781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell private long getTargetContactId() { 65881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell Intent intent = getIntent(); 659c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell final long targetContactId = intent.getLongExtra( 660c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1); 66181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell if (targetContactId == -1) { 66281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell Log.e(TAG, "Intent " + intent.getAction() + " is missing required extra: " 663c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell + UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY); 66481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell setResult(RESULT_CANCELED); 66581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell finish(); 66681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell return -1; 66781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 66881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell return targetContactId; 66981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 67081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 671a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa private void startCreateNewContactActivity() { 672a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 673363af60ea23e5a3b945005712a16564ab69db18bGary Mai intent.putExtra(ContactEditorActivity. 6748d45cdbd4e1e0b37d705fd1dca3d8f941f75e772Walter Jang INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true); 675a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa startActivityAndForwardResult(intent); 676a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 677a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 67837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan @Override 67981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell public boolean onCreateOptionsMenu(Menu menu) { 68081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell super.onCreateOptionsMenu(menu); 68181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 68281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell final MenuInflater inflater = getMenuInflater(); 68381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell inflater.inflate(R.menu.search_menu, menu); 68481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 68581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell final MenuItem searchItem = menu.findItem(R.id.menu_search); 686fde48de9ab7f1fb6e2037a32437e4f70716c719bBrian Attwell searchItem.setVisible(!mIsSearchMode && mIsSearchSupported); 687bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao 688bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao final Drawable searchIcon = searchItem.getIcon(); 689bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao if (searchIcon != null) { 690bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao searchIcon.mutate().setColorFilter(ContextCompat.getColor(this, 691bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP); 692bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao } 69381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell return true; 69481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 69581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell 69681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell @Override 69781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell public void onBackPressed() { 6987712aef22da432331a67c710cfc18bce2c493887Jay Shrauner if (!isSafeToCommitTransactions()) { 69935e174560845d19c6b2c179a9233a2e89e0e47eaJay Shrauner return; 70035e174560845d19c6b2c179a9233a2e89e0e47eaJay Shrauner } 70135e174560845d19c6b2c179a9233a2e89e0e47eaJay Shrauner 702794dbd0aa20eb6f291750adf7e88b0d6163659d6Walter Jang if (isSelectionMode()) { 703794dbd0aa20eb6f291750adf7e88b0d6163659d6Walter Jang mActionBarAdapter.setSelectionMode(false); 7045a48cd9118d6abaca6c345a7140b71ba92d2d95eWenyi Wang if (getMultiSelectListFragment() != null) { 7055a48cd9118d6abaca6c345a7140b71ba92d2d95eWenyi Wang getMultiSelectListFragment().displayCheckBoxes(false); 7065a48cd9118d6abaca6c345a7140b71ba92d2d95eWenyi Wang } 707794dbd0aa20eb6f291750adf7e88b0d6163659d6Walter Jang } else if (mIsSearchMode) { 70881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell mIsSearchMode = false; 70981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell configureSearchMode(); 71081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } else { 71181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell super.onBackPressed(); 71281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 71381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell } 714b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov} 715