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 19a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.app.ActionBar; 20a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.app.ActionBar.LayoutParams; 2137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuanimport android.app.Activity; 2284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikovimport android.app.Fragment; 23a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.content.Context; 24b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.content.Intent; 25b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.net.Uri; 26b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.os.Bundle; 27b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 2837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuanimport android.provider.ContactsContract.Intents.Insert; 294d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport android.text.TextUtils; 30a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.util.Log; 31a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.LayoutInflater; 32a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.Menu; 33a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.MenuInflater; 34b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.view.MenuItem; 35b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.view.View; 3663c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikovimport android.view.View.OnClickListener; 37a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.View.OnFocusChangeListener; 38a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.inputmethod.InputMethodManager; 394d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport android.widget.SearchView; 40a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.widget.SearchView.OnCloseListener; 41c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powellimport android.widget.SearchView.OnQueryTextListener; 42b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 43e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.ContactsActivity; 44e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 45821a657d618285c04cbb3c440f1777a08381f868Chiao Chengimport com.android.contacts.common.list.ContactEntryListFragment; 46e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactPickerFragment; 47e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactsIntentResolver; 48e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactsRequest; 49a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.list.DirectoryListLoader; 50e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.EmailAddressPickerFragment; 51a953aa785610afcda67a17a1c109d09c4773ca90Chiao Chengimport com.android.contacts.list.LegacyPhoneNumberPickerFragment; 52e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnContactPickerActionListener; 53e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnEmailAddressPickerActionListener; 54821a657d618285c04cbb3c440f1777a08381f868Chiao Chengimport com.android.contacts.common.list.OnPhoneNumberPickerActionListener; 55e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnPostalAddressPickerActionListener; 56821a657d618285c04cbb3c440f1777a08381f868Chiao Chengimport com.android.contacts.common.list.PhoneNumberPickerFragment; 57e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.PostalAddressPickerFragment; 58e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.google.common.collect.Sets; 59e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 6037bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuanimport java.util.Set; 6137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan 62b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov/** 63b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Displays a list of contacts (or phone numbers or postal addresses) for the 64b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * purposes of selecting one. 65b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */ 666f667b55687bf9193323802e8f3234f0ab254388Dmitri Plotnikovpublic class ContactSelectionActivity extends ContactsActivity 67a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa implements View.OnCreateContextMenuListener, OnQueryTextListener, OnClickListener, 68a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa OnCloseListener, OnFocusChangeListener { 69b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private static final String TAG = "ContactSelectionActivity"; 70b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 7137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan private static final int SUBACTIVITY_ADD_TO_EXISTING_CONTACT = 0; 7237bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan 7384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov private static final String KEY_ACTION_CODE = "actionCode"; 744d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20; 7584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 7642b314030c3c9b16afc5a84805a481225a6d9de9Dmitri Plotnikov // Delay to allow the UI to settle before making search view visible 7742b314030c3c9b16afc5a84805a481225a6d9de9Dmitri Plotnikov private static final int FOCUS_DELAY = 200; 7842b314030c3c9b16afc5a84805a481225a6d9de9Dmitri Plotnikov 79b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private ContactsIntentResolver mIntentResolver; 80b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov protected ContactEntryListFragment<?> mListFragment; 81b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 8284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov private int mActionCode = -1; 83b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 84b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private ContactsRequest mRequest; 854d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov private SearchView mSearchView; 86a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa /** 87a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa * Can be null. If null, the "Create New Contact" button should be on the menu. 88a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa */ 89594dc44c34396fc4a3acbe9bed836648b0ad6b09Daisuke Miyakawa private View mCreateNewContactButton; 90b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 91b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public ContactSelectionActivity() { 92b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mIntentResolver = new ContactsIntentResolver(this); 93b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 94b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 95b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov @Override 9684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov public void onAttachFragment(Fragment fragment) { 9784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov if (fragment instanceof ContactEntryListFragment<?>) { 9884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov mListFragment = (ContactEntryListFragment<?>) fragment; 9984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setupActionListener(); 10084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 10184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 10284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 10384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov @Override 10484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov protected void onCreate(Bundle savedState) { 10584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov super.onCreate(savedState); 10684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 10784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov if (savedState != null) { 10884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov mActionCode = savedState.getInt(KEY_ACTION_CODE); 10984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 110acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan 111b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov // Extract relevant information from the intent 112b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mRequest = mIntentResolver.resolveIntent(getIntent()); 113b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov if (!mRequest.isValid()) { 114b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov setResult(RESULT_CANCELED); 115b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov finish(); 116b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov return; 117b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 118b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 119b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov Intent redirect = mRequest.getRedirectIntent(); 120b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov if (redirect != null) { 121b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov // Need to start a different activity 122b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov startActivity(redirect); 123b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov finish(); 124b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov return; 125b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 126b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 12784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov configureActivityTitle(); 1284d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov 1294d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov setContentView(R.layout.contact_picker); 1304d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov 131a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (mActionCode != mRequest.getActionCode()) { 132a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mActionCode = mRequest.getActionCode(); 133a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa configureListFragment(); 134a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 135a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 136a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa prepareSearchViewAndActionBar(); 1374d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov 138594dc44c34396fc4a3acbe9bed836648b0ad6b09Daisuke Miyakawa mCreateNewContactButton = findViewById(R.id.new_contact); 139a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (mCreateNewContactButton != null) { 140a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (shouldShowCreateNewContactButton()) { 141a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mCreateNewContactButton.setVisibility(View.VISIBLE); 142a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mCreateNewContactButton.setOnClickListener(this); 143a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } else { 144a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mCreateNewContactButton.setVisibility(View.GONE); 145a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 146a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 147a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 14863c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov 149a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa private boolean shouldShowCreateNewContactButton() { 150a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return (mActionCode == ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT 151a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa || (mActionCode == ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT 152a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa && !mRequest.isSearchMode())); 153a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 154a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 155a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa private void prepareSearchViewAndActionBar() { 156d1af8adb1acc56f6c1709d38efe69be9497356a9Daniel Lehmann // Postal address pickers (and legacy pickers) don't support search, so just show 157d1af8adb1acc56f6c1709d38efe69be9497356a9Daniel Lehmann // "HomeAsUp" button and title. 158d1af8adb1acc56f6c1709d38efe69be9497356a9Daniel Lehmann if (mRequest.getActionCode() == ContactsRequest.ACTION_PICK_POSTAL || 159d1af8adb1acc56f6c1709d38efe69be9497356a9Daniel Lehmann mRequest.isLegacyCompatibilityMode()) { 160a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa findViewById(R.id.search_view).setVisibility(View.GONE); 161a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa final ActionBar actionBar = getActionBar(); 162a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (actionBar != null) { 163a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setDisplayShowHomeEnabled(true); 164a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setDisplayHomeAsUpEnabled(true); 165a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setDisplayShowTitleEnabled(true); 166a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 167a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return; 168a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 169a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 170a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // If ActionBar is available, show SearchView on it. If not, show SearchView inside the 171a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // Activity's layout. 172a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa final ActionBar actionBar = getActionBar(); 173a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (actionBar != null) { 174a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa final View searchViewOnLayout = findViewById(R.id.search_view); 175a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (searchViewOnLayout != null) { 176a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa searchViewOnLayout.setVisibility(View.GONE); 177a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 178a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 179a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa final View searchViewContainer = LayoutInflater.from(actionBar.getThemedContext()) 180a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa .inflate(R.layout.custom_action_bar, null); 181a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView = (SearchView) searchViewContainer.findViewById(R.id.search_view); 182a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 183a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // In order to make the SearchView look like "shown via search menu", we need to 184a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // manually setup its state. See also DialtactsActivity.java and ActionBarAdapter.java. 185a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setIconifiedByDefault(true); 186a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setQueryHint(getString(R.string.hint_findContacts)); 187a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setIconified(false); 188a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 189a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setOnQueryTextListener(this); 190a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setOnCloseListener(this); 191a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setOnQueryTextFocusChangeListener(this); 192a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 193a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setCustomView(searchViewContainer, 194a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 195a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setDisplayShowCustomEnabled(true); 196a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setDisplayShowHomeEnabled(true); 197a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa actionBar.setDisplayHomeAsUpEnabled(true); 198d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov } else { 199a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView = (SearchView) findViewById(R.id.search_view); 200a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setQueryHint(getString(R.string.hint_findContacts)); 201a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setOnQueryTextListener(this); 202a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 203d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov // This is a hack to prevent the search view from grabbing focus 204d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov // at this point. If search view were visible, it would always grabs focus 205d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov // because it is the first focusable widget in the window. 206d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov mSearchView.setVisibility(View.INVISIBLE); 20742b314030c3c9b16afc5a84805a481225a6d9de9Dmitri Plotnikov mSearchView.postDelayed(new Runnable() { 208d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov @Override 209d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov public void run() { 210d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov mSearchView.setVisibility(View.VISIBLE); 211d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov } 21242b314030c3c9b16afc5a84805a481225a6d9de9Dmitri Plotnikov }, FOCUS_DELAY); 213d66d4158d832ceec0e7754908b0c5541311613d4Dmitri Plotnikov } 214004a30319057436182d98e530fb424f185cd2adeDaisuke Miyakawa 215004a30319057436182d98e530fb424f185cd2adeDaisuke Miyakawa // Clear focus and suppress keyboard show-up. 216004a30319057436182d98e530fb424f185cd2adeDaisuke Miyakawa mSearchView.clearFocus(); 217a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 218a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 219a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa @Override 220a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public boolean onCreateOptionsMenu(Menu menu) { 221a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // If we want "Create New Contact" button but there's no such a button in the layout, 222a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // try showing a menu for it. 223a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (shouldShowCreateNewContactButton() && mCreateNewContactButton == null) { 224a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa MenuInflater inflater = getMenuInflater(); 225a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa inflater.inflate(R.menu.contact_picker_options, menu); 226a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 227a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return true; 228a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 229a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 230a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa @Override 231a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public boolean onOptionsItemSelected(MenuItem item) { 232a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa switch (item.getItemId()) { 233a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa case android.R.id.home: 234a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // Go back to previous screen, intending "cancel" 235a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa setResult(RESULT_CANCELED); 236a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa finish(); 237a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return true; 238a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa case R.id.create_new_contact: { 239a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa startCreateNewContactActivity(); 240a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return true; 241a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 242a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 243a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return super.onOptionsItemSelected(item); 24484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 245b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 24684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov @Override 24784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov protected void onSaveInstanceState(Bundle outState) { 24884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov super.onSaveInstanceState(outState); 24984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov outState.putInt(KEY_ACTION_CODE, mActionCode); 250b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 251b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 25284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov private void configureActivityTitle() { 253b7a1da621e7ba54a4e9c97a14f35b2650b8e7471Makoto Onuki if (!TextUtils.isEmpty(mRequest.getActivityTitle())) { 25484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(mRequest.getActivityTitle()); 25584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov return; 25684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 25784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 25884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov int actionCode = mRequest.getActionCode(); 25984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov switch (actionCode) { 26084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: { 26184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.contactPickerActivityTitle); 26284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 26384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 26484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 26584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_CONTACT: { 26684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.contactPickerActivityTitle); 26784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 26884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 26984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 27084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: { 27184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.contactPickerActivityTitle); 27284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 27384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 27484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 27584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: { 27684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.shortcutActivityTitle); 27784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 27884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 27984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 28084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_PHONE: { 28184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.contactPickerActivityTitle); 28284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 28384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 28484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 285c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann case ContactsRequest.ACTION_PICK_EMAIL: { 286c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann setTitle(R.string.contactPickerActivityTitle); 287c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann break; 288c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 289c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann 29084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: { 29184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.callShortcutActivityTitle); 29284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 29384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 29484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 29584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: { 29684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.messageShortcutActivityTitle); 29784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 29884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 29984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 30084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov case ContactsRequest.ACTION_PICK_POSTAL: { 30184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov setTitle(R.string.contactPickerActivityTitle); 30284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov break; 30384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 30484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 30584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 30684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 307b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov /** 308b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Creates the fragment based on the current request. 309b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */ 31084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov public void configureListFragment() { 311b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov switch (mActionCode) { 312b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: { 31386092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 31486092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov fragment.setEditMode(true); 31586092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE); 316b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 317b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 318b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 319b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 320b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_CONTACT: { 321b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 3220a4d2258411478c7c78790cd55ba25c99f588c26Dave Santoro fragment.setIncludeProfile(mRequest.shouldIncludeProfile()); 323b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 324b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 325b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 326b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 327b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: { 328b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 329b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 330b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 331b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 332b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 333b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: { 334b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov ContactPickerFragment fragment = new ContactPickerFragment(); 335b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov fragment.setShortcutRequested(true); 336b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 337b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 338b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 339b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 340b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_PHONE: { 341a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest); 342b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 343b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 344b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 345b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 346c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann case ContactsRequest.ACTION_PICK_EMAIL: { 347c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann mListFragment = new EmailAddressPickerFragment(); 348c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann break; 349c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 350c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann 351b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: { 352a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest); 353b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov fragment.setShortcutAction(Intent.ACTION_CALL); 354b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 355b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 356b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 357b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 358b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 359b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: { 360a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest); 361b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov fragment.setShortcutAction(Intent.ACTION_SENDTO); 362b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 363b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 364b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 365b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 366b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 367b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_PICK_POSTAL: { 368b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov PostalAddressPickerFragment fragment = new PostalAddressPickerFragment(); 369b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov mListFragment = fragment; 370b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov break; 371b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 372b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 373b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov default: 374b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov throw new IllegalStateException("Invalid action code: " + mActionCode); 375b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 37684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 377a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng // Setting compatibility is no longer needed for PhoneNumberPickerFragment since that logic 378a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng // has been separated into LegacyPhoneNumberPickerFragment. But we still need to set 379a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng // compatibility for other fragments. 38084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov mListFragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode()); 3814d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov mListFragment.setDirectoryResultLimit(DEFAULT_DIRECTORY_RESULT_LIMIT); 3824d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov 3833ed426c842a68895a759548fef87bac359f937bbDianne Hackborn getFragmentManager().beginTransaction() 38484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov .replace(R.id.list_container, mListFragment) 3854b25da79091157935042d2942a8961ceba92166fMinh Pham .commitAllowingStateLoss(); 38684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 38784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov 388a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng private PhoneNumberPickerFragment getPhoneNumberPickerFragment(ContactsRequest request) { 389a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng if (mRequest.isLegacyCompatibilityMode()) { 390a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng return new LegacyPhoneNumberPickerFragment(); 391a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng } else { 392a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng return new PhoneNumberPickerFragment(); 393a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng } 394a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng } 395a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng 39684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov public void setupActionListener() { 3976e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov if (mListFragment instanceof ContactPickerFragment) { 39884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov ((ContactPickerFragment) mListFragment).setOnContactPickerActionListener( 39984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov new ContactPickerActionListener()); 40084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } else if (mListFragment instanceof PhoneNumberPickerFragment) { 40184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov ((PhoneNumberPickerFragment) mListFragment).setOnPhoneNumberPickerActionListener( 40284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov new PhoneNumberPickerActionListener()); 40384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } else if (mListFragment instanceof PostalAddressPickerFragment) { 40484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov ((PostalAddressPickerFragment) mListFragment).setOnPostalAddressPickerActionListener( 40584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov new PostalAddressPickerActionListener()); 406c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } else if (mListFragment instanceof EmailAddressPickerFragment) { 407c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann ((EmailAddressPickerFragment) mListFragment).setOnEmailAddressPickerActionListener( 408c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann new EmailAddressPickerActionListener()); 40984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } else { 41084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov throw new IllegalStateException("Unsupported list fragment type: " + mListFragment); 41184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov } 412b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 413b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 414b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private final class ContactPickerActionListener implements OnContactPickerActionListener { 415e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 416b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onCreateNewContactAction() { 417a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa startCreateNewContactActivity(); 418b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 419b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 420e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 42186092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov public void onEditContactAction(Uri contactLookupUri) { 42237bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan Bundle extras = getIntent().getExtras(); 42337bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (launchAddToContactDialog(extras)) { 42437bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan // Show a confirmation dialog to add the value(s) to the existing contact. 42537bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan Intent intent = new Intent(ContactSelectionActivity.this, 42637bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan ConfirmAddDetailActivity.class); 42737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan intent.setData(contactLookupUri); 42837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (extras != null) { 429acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan // First remove name key if present because the dialog does not support name 430acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan // editing. This is fine because the user wants to add information to an 431acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan // existing contact, who should already have a name and we wouldn't want to 432acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan // override the name. 433acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan extras.remove(Insert.NAME); 43437bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan intent.putExtras(extras); 43537bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 436acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan 43737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan // Wait for the activity result because we want to keep the picker open (in case the 43837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan // user cancels adding the info to a contact and wants to pick someone else). 43937bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan startActivityForResult(intent, SUBACTIVITY_ADD_TO_EXISTING_CONTACT); 44037bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } else { 44137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan // Otherwise launch the full contact editor. 44237bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan startActivityAndForwardResult(new Intent(Intent.ACTION_EDIT, contactLookupUri)); 44337bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 44486092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov } 44586092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov 44686092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov @Override 447b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onPickContactAction(Uri contactUri) { 448d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(contactUri); 449b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 450b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 451e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 452b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onShortcutIntentCreated(Intent intent) { 453d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(intent); 454b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 45537bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan 45637bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan /** 45737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan * Returns true if is a single email or single phone number provided in the {@link Intent} 45837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan * extras bundle so that a pop-up confirmation dialog can be used to add the data to 45937bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan * a contact. Otherwise return false if there are other intent extras that require launching 460acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan * the full contact editor. Ignore extras with the key {@link Insert.NAME} because names 461acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan * are a special case and we typically don't want to replace the name of an existing 462acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan * contact. 46337bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan */ 46437bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan private boolean launchAddToContactDialog(Bundle extras) { 46537bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (extras == null) { 46637bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan return false; 46737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 468acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan 469acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan // Copy extras because the set may be modified in the next step 470acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan Set<String> intentExtraKeys = Sets.newHashSet(); 471acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan intentExtraKeys.addAll(extras.keySet()); 472acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan 473acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan // Ignore name key because this is an existing contact. 474acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan if (intentExtraKeys.contains(Insert.NAME)) { 475acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan intentExtraKeys.remove(Insert.NAME); 476acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan } 477acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan 47837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan int numIntentExtraKeys = intentExtraKeys.size(); 47937bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (numIntentExtraKeys == 2) { 48037bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan boolean hasPhone = intentExtraKeys.contains(Insert.PHONE) && 48137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan intentExtraKeys.contains(Insert.PHONE_TYPE); 48237bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan boolean hasEmail = intentExtraKeys.contains(Insert.EMAIL) && 48337bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan intentExtraKeys.contains(Insert.EMAIL_TYPE); 48437bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan return hasPhone || hasEmail; 48537bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } else if (numIntentExtraKeys == 1) { 48637bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan return intentExtraKeys.contains(Insert.PHONE) || 48737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan intentExtraKeys.contains(Insert.EMAIL); 48837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 48937bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan // Having 0 or more than 2 intent extra keys means that we should launch 49037bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan // the full contact editor to properly handle the intent extras. 49137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan return false; 49237bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 493b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 494b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 495b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private final class PhoneNumberPickerActionListener implements 496b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov OnPhoneNumberPickerActionListener { 497e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 498b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onPickPhoneNumberAction(Uri dataUri) { 499d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(dataUri); 500b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 501b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 502e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 503b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onShortcutIntentCreated(Intent intent) { 504d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(intent); 505b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 50688f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa 50788f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa public void onHomeInActionBarSelected() { 50888f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa ContactSelectionActivity.this.onBackPressed(); 50988f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa } 510b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 511b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 512b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private final class PostalAddressPickerActionListener implements 513b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov OnPostalAddressPickerActionListener { 514e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 515b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void onPickPostalAddressAction(Uri dataUri) { 516d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(dataUri); 517b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 518b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 519b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 520c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann private final class EmailAddressPickerActionListener implements 521c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann OnEmailAddressPickerActionListener { 522c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann @Override 523c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann public void onPickEmailAddressAction(Uri dataUri) { 524c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann returnPickerResult(dataUri); 525c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 526c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } 527c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann 528b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov public void startActivityAndForwardResult(final Intent intent) { 529b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 530b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 531b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov // Forward extras to the new activity 532b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 533b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov if (extras != null) { 534b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov intent.putExtras(extras); 535b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 536b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov startActivity(intent); 537b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov finish(); 538b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 539b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 540b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov @Override 541c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextChange(String newText) { 5425251884bbcdb92dad577d027126547527285fcceDmitri Plotnikov mListFragment.setQueryString(newText, true); 5434d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov return false; 544b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 545b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov 546b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov @Override 547c5792ae6760291d435e91e0fdd28ece6b3311439Adam Powell public boolean onQueryTextSubmit(String query) { 548b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov return false; 549b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov } 55063c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov 551a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa @Override 552a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public boolean onClose() { 553a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (!TextUtils.isEmpty(mSearchView.getQuery())) { 554a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa mSearchView.setQuery(null, true); 555a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 556a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa return true; 557a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 558a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 559a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa @Override 560a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public void onFocusChange(View view, boolean hasFocus) { 561a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa switch (view.getId()) { 562a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa case R.id.search_view: { 563a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (hasFocus) { 564a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa showInputMethod(mSearchView.findFocus()); 565a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 566a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 567a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 568a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 569a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 570d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov public void returnPickerResult(Uri data) { 571d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov Intent intent = new Intent(); 572d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov intent.setData(data); 573d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov returnPickerResult(intent); 574d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov } 575d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov 576d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov public void returnPickerResult(Intent intent) { 577d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 578d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov setResult(RESULT_OK, intent); 579d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov finish(); 580d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov } 581d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov 58263c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov @Override 583a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public void onClick(View view) { 584a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa switch (view.getId()) { 585a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa case R.id.new_contact: { 586a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa startCreateNewContactActivity(); 587a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa break; 588a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 589a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 590a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 591a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 592a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa private void startCreateNewContactActivity() { 593a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 59464cdc91cae0e08b7d225cd60a91cfc4db85c915dJosh Gargus intent.putExtra(ContactEditorActivity.INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true); 595a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa startActivityAndForwardResult(intent); 596a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 597a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa 598a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa private void showInputMethod(View view) { 599a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa final InputMethodManager imm = (InputMethodManager) 600a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa getSystemService(Context.INPUT_METHOD_SERVICE); 601a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (imm != null) { 602a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa if (!imm.showSoftInput(view, 0)) { 603a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa Log.w(TAG, "Failed to show soft input method."); 604a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa } 60563c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov } 60663c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov } 60737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan 60837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan @Override 60937bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan protected void onActivityResult(int requestCode, int resultCode, Intent data) { 61037bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan super.onActivityResult(requestCode, resultCode, data); 61137bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (requestCode == SUBACTIVITY_ADD_TO_EXISTING_CONTACT) { 61237bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (resultCode == Activity.RESULT_OK) { 61337bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan if (data != null) { 61437bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan startActivity(data); 61537bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 61637bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan finish(); 61737bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 61837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 61937bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan } 620b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov} 621