PeopleActivity.java revision b5760b94bbf56ce348876ec36f4669d20a1530f5
17aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/* 2fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 37aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * 47aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * you may not use this file except in compliance with the License. 67aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * You may obtain a copy of the License at 77aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * 87aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * 107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * See the License for the specific language governing permissions and 147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * limitations under the License. 157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */ 167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 1727834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovpackage com.android.contacts.activities; 187aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 1918ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovimport com.android.contacts.ContactSaveService; 206f667b55687bf9193323802e8f3234f0ab254388Dmitri Plotnikovimport com.android.contacts.ContactsActivity; 2127834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovimport com.android.contacts.R; 22b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.calllog.CallLogFragment; 2318ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovimport com.android.contacts.detail.ContactDetailFragment; 24b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.dialpad.DialpadFragment; 25b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.group.GroupBrowseListFragment; 269692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport com.android.contacts.interactions.ContactDeletionInteraction; 27e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikovimport com.android.contacts.interactions.GroupDeletionDialogFragment; 28e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikovimport com.android.contacts.interactions.GroupRenamingDialogFragment; 29261cd5650d07fbc41ea8f19d4e422094612d1454Daniel Lehmannimport com.android.contacts.interactions.ImportExportDialogFragment; 30b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikovimport com.android.contacts.interactions.PhoneNumberInteraction; 31416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikovimport com.android.contacts.list.ContactBrowseListContextMenuAdapter; 3208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment; 3359fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport com.android.contacts.list.ContactEntryListFragment; 34009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikovimport com.android.contacts.list.ContactListFilter; 3515ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController; 360906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovimport com.android.contacts.list.ContactsIntentResolver; 371ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 388b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ContactsUnavailableFragment; 396e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikovimport com.android.contacts.list.CustomContactListFilterActivity; 40b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.list.DefaultContactBrowseListFragment; 414d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport com.android.contacts.list.DirectoryListLoader; 42732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.list.OnContactBrowserActionListener; 438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.OnContactsUnavailableActionListener; 448b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ProviderStatusLoader; 458b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ProviderStatusLoader.ProviderStatusListener; 46b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.list.StrequentContactListFragment; 47a07fa5f37031e4c5cd2933de02d2db41ec153e2bDmitri Plotnikovimport com.android.contacts.model.AccountTypeManager; 48c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport com.android.contacts.preference.ContactsPreferenceActivity; 498b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.util.AccountSelectionUtil; 503391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmannimport com.android.contacts.util.DialogManager; 511323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikovimport com.android.contacts.widget.ContextMenuAdapter; 5257cf30f316b8013e172150d1ad0e197be6b46b87Tadashi G. Takaoka 53caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikovimport android.accounts.Account; 543d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikovimport android.app.ActionBar; 55b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.ActionBar.Tab; 56b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.ActionBar.TabListener; 577aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.app.Activity; 5849d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkeyimport android.app.Dialog; 5992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikovimport android.app.Fragment; 60b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.FragmentManager; 61b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.FragmentTransaction; 6260be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmannimport android.content.ActivityNotFoundException; 637aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.ContentValues; 647aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.Intent; 65b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.content.res.TypedArray; 667aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.net.Uri; 677aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.os.Bundle; 68d7c4af2b932ffc65476fb1ac6d74feac74b48f3cDmitri Plotnikovimport android.provider.ContactsContract; 69e05296673449dc6686c4fec4dd2e98ab47a78056Jeff Hamiltonimport android.provider.ContactsContract.Contacts; 702013058703aa110a1d7aac87ef408c96a3919472Daniel Lehmannimport android.provider.ContactsContract.Intents; 718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport android.provider.ContactsContract.ProviderStatus; 729692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport android.provider.Settings; 73a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.util.Log; 747aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.KeyEvent; 757aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.Menu; 76d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkeyimport android.view.MenuInflater; 777aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.MenuItem; 787aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.View; 792013058703aa110a1d7aac87ef408c96a3919472Daniel Lehmannimport android.view.View.OnClickListener; 804af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.view.Window; 81b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.widget.SearchView; 82424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.widget.Toast; 837aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 84caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikovimport java.util.ArrayList; 85caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov 867aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/** 87bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * Displays a list to browse contacts. For xlarge screens, this also displays a detail-pane on 88a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov * the right. 897aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */ 909856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivity extends ContactsActivity 91fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener, 926e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov DialogManager.DialogShowingViewActivity, 938b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov ContactListFilterController.ContactListFilterListener, ProviderStatusListener { 9457d27da940983fba40d8e3a6d8b99a57b48419eaDmitri Plotnikov 95bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann private static final String TAG = "ContactBrowserActivity"; 967aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9722fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann private static final int SUBACTIVITY_NEW_CONTACT = 2; 98c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann private static final int SUBACTIVITY_EDIT_CONTACT = 3; 99c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 4; 1003c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov 10115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private static final String KEY_SEARCH_MODE = "searchMode"; 10215ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 1033b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann private DialogManager mDialogManager = new DialogManager(this); 1043391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann 105ac0f783adb82ee8056e742fae4994e848e82ea3dDmitri Plotnikov private ContactsIntentResolver mIntentResolver; 106fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactsRequest mRequest; 107caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov 108fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ActionBarAdapter mActionBarAdapter; 1097c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov 11015ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private boolean mSearchMode; 111fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov 112fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactBrowseListFragment mListFragment; 1130dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro 1140dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro /** 1150dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro * Whether we have a right-side contact pane for displaying contact info while browsing. 1160dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro * Generally means "this is a tablet". 1170dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro */ 118fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private boolean mContactContentDisplayed; 1190dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro 120424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private ContactDetailFragment mDetailFragment; 121424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private DetailFragmentListener mDetailFragmentListener = new DetailFragmentListener(); 122424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 123fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private PhoneNumberInteraction mPhoneNumberCallInteraction; 124fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private PhoneNumberInteraction mSendTextMessageInteraction; 1254af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov 126fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private boolean mSearchInitiated; 127e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov 12815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private ContactListFilterController mContactListFilterController; 1293c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov 1303d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikov private View mAddContactImageView; 1312013058703aa110a1d7aac87ef408c96a3919472Daniel Lehmann 1328b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private ContactsUnavailableFragment mContactsUnavailableFragment; 1338b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private ProviderStatusLoader mProviderStatusLoader; 1348b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private int mProviderStatus = -1; 1358b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1360cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov private boolean mOptionsMenuContactsAvailable; 1370cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov private boolean mOptionsMenuGroupActionsEnabled; 1380cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 139b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private DefaultContactBrowseListFragment mContactsFragment; 140b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private StrequentContactListFragment mFavoritesFragment; 141b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private GroupBrowseListFragment mGroupsFragment; 142b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 1439856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan public PeopleActivity() { 1441540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov mIntentResolver = new ContactsIntentResolver(this); 145b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Get rid of the ContactListFilterController class because there aren't any 146b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // dropdown filters anymore. Just store the selected filter as a member variable. 14715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mContactListFilterController = new ContactListFilterController(this); 1486e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov mContactListFilterController.addListener(this); 1498b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatusLoader = new ProviderStatusLoader(this); 1506178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1516178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 1528b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public boolean areContactsAvailable() { 1538b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return mProviderStatus == ProviderStatus.STATUS_NORMAL; 1548b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1558b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1567aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 15792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov public void onAttachFragment(Fragment fragment) { 15892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (fragment instanceof ContactBrowseListFragment) { 15992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment = (ContactBrowseListFragment)fragment; 16092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment.setOnContactListActionListener(new ContactBrowserActionListener()); 161a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov if (!getWindow().hasFeature(Window.FEATURE_ACTION_BAR)) { 162fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setContextMenuAdapter( 163fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov new ContactBrowseListContextMenuAdapter(mListFragment)); 1648daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov } 165d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } else if (fragment instanceof ContactDetailFragment) { 166d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mDetailFragment = (ContactDetailFragment)fragment; 167d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mDetailFragment.setListener(mDetailFragmentListener); 168a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov mContactContentDisplayed = true; 1698b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else if (fragment instanceof ContactsUnavailableFragment) { 1708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment; 1718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader); 1728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setOnContactsUnavailableActionListener( 1738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov new ContactsUnavailableFragmentListener()); 17492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 17592a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 17692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 17792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov @Override 17808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov protected void onCreate(Bundle savedState) { 17908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov super.onCreate(savedState); 1807aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 181fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mAddContactImageView = getLayoutInflater().inflate( 182fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov R.layout.add_contact_menu_item, null, false); 183fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov View item = mAddContactImageView.findViewById(R.id.menu_item); 184fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov item.setOnClickListener(new OnClickListener() { 185fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov @Override 186fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov public void onClick(View v) { 18751e8d634f2d16aeaed73b6fba42d02a1c2d48b20Daniel Lehmann final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 18851e8d634f2d16aeaed73b6fba42d02a1c2d48b20Daniel Lehmann startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT); 189fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 190fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov }); 19192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 192fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureContentView(true, savedState); 193fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 194fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 195fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov @Override 196fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov protected void onNewIntent(Intent intent) { 197fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov setIntent(intent); 198fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureContentView(false, null); 199fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 200fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 201fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov private void configureContentView(boolean createContentView, Bundle savedState) { 2021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Extract relevant information from the intent 2031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov mRequest = mIntentResolver.resolveIntent(getIntent()); 2041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (!mRequest.isValid()) { 2056178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov setResult(RESULT_CANCELED); 2067aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project finish(); 2071ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return; 2086178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2096178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 2101ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Intent redirect = mRequest.getRedirectIntent(); 2111ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (redirect != null) { 2121ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Need to start a different activity 2136178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov startActivity(redirect); 2147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project finish(); 2151ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return; 2167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 2177aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 218fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (createContentView) { 2199856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan setContentView(R.layout.people_activity); 220b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 221b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final FragmentManager fragmentManager = getFragmentManager(); 222b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mFavoritesFragment = (StrequentContactListFragment) fragmentManager 223b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan .findFragmentById(R.id.favorites_fragment); 224b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mContactsFragment = (DefaultContactBrowseListFragment) fragmentManager 225b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan .findFragmentById(R.id.contacts_fragment); 226b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mGroupsFragment = (GroupBrowseListFragment) fragmentManager 227b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan .findFragmentById(R.id.groups_fragment); 228b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 229b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // Hide all tabs (the current tab will later be reshown once a tab is selected) 230b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final FragmentTransaction transaction = fragmentManager.beginTransaction(); 231b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.hide(mFavoritesFragment); 232b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.hide(mContactsFragment); 233b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.hide(mGroupsFragment); 234b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.commit(); 235fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 23665ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov 23790715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT 23890715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov && !mContactContentDisplayed) { 23990715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov redirect = new Intent(this, ContactDetailActivity.class); 24090715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov redirect.setAction(Intent.ACTION_VIEW); 24190715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov redirect.setData(mRequest.getContactUri()); 24290715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov startActivity(redirect); 24390715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov finish(); 24490715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov return; 24527b97bca14c84b3f830c7a433e14ae5c180a32c3Dmitri Plotnikov } 24627b97bca14c84b3f830c7a433e14ae5c180a32c3Dmitri Plotnikov 24790715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov setTitle(mRequest.getActivityTitle()); 248b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ActionBar actionBar = getActionBar(); 249b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter = new ActionBarAdapter(this); 250b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.onCreate(savedState, mRequest, getActionBar()); 251b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setContactListFilterController(mContactListFilterController); 252fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 2533bf12640a267146a6a0134367f7236401db8e754Daniel Lehmann if (createContentView) { 254b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.removeAllTabs(); 255b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan Tab favoritesTab = actionBar.newTab(); 256b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan favoritesTab.setText(getString(R.string.strequentList)); 257b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan favoritesTab.setTabListener(new TabChangeListener(mFavoritesFragment)); 258b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.addTab(favoritesTab); 2593d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikov 260b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan Tab peopleTab = actionBar.newTab(); 261b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan peopleTab.setText(getString(R.string.people)); 262b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan peopleTab.setTabListener(new TabChangeListener(mContactsFragment)); 263b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.addTab(peopleTab); 264b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 265b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan Tab groupsTab = actionBar.newTab(); 266b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan groupsTab.setText(getString(R.string.contactsGroupsLabel)); 267b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan groupsTab.setTabListener(new TabChangeListener(mGroupsFragment)); 268b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.addTab(groupsTab); 269b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.setDisplayShowTitleEnabled(true); 270b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 271b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan TypedArray a = obtainStyledAttributes(null, R.styleable.ActionBarHomeIcon); 272b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan boolean showHomeIcon = a.getBoolean(R.styleable.ActionBarHomeIcon_show_home_icon, true); 273b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.setDisplayShowHomeEnabled(showHomeIcon); 274b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 275b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan invalidateOptionsMenu(); 276d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } 27708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 278fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureFragments(savedState == null); 2793c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov } 2803c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov 281b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan /** 282b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan * Tab change listener that is instantiated once for each tab. Handles showing/hiding fragments. 283b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan * TODO: Use ViewPager so that tabs can be swiped left and right. Figure out how to use the 284b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan * support library in our app. 285b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan */ 286b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private class TabChangeListener implements TabListener { 287b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private final Fragment mFragment; 288b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 289b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public TabChangeListener(Fragment fragment) { 290b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mFragment = fragment; 291b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 292b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 293b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan @Override 294b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onTabUnselected(Tab tab, FragmentTransaction ft) { 295b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ft.hide(mFragment); 296b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 297b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 298b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan @Override 299b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onTabSelected(Tab tab, FragmentTransaction ft) { 300b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ft.show(mFragment); 301b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 302b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 303b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan @Override 304b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onTabReselected(Tab tab, FragmentTransaction ft) { 305b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 306b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 307b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 3086e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 309174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov protected void onPause() { 310174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov if (mActionBarAdapter != null) { 311174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov mActionBarAdapter.setListener(null); 312174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 313fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 314fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mOptionsMenuContactsAvailable = false; 315fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mOptionsMenuGroupActionsEnabled = false; 316fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 317fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mProviderStatus = -1; 3188b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatusLoader.setProviderStatusListener(null); 319174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov super.onPause(); 320174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 321174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 322174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov @Override 323174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov protected void onResume() { 324174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov super.onResume(); 325174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov if (mActionBarAdapter != null) { 326174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov mActionBarAdapter.setListener(this); 327174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 3288b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatusLoader.setProviderStatusListener(this); 3298b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov updateFragmentVisibility(); 330174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 331174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 332174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov @Override 3336e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov protected void onStart() { 334e4e52199057ffb57bad42caa33e6b402fd80697aDmitri Plotnikov mContactListFilterController.onStart(); 3356e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov super.onStart(); 336caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov } 337caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov 338955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov private void configureFragments(boolean fromRequest) { 339009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov if (fromRequest) { 34091ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov ContactListFilter filter = null; 34191ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov int actionCode = mRequest.getActionCode(); 34291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov switch (actionCode) { 34391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_ALL_CONTACTS: 34491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS); 34591ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov break; 34691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_CONTACTS_WITH_PHONES: 34791ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov filter = new ContactListFilter( 34891ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY); 34991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov break; 35091ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov 35191ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov // TODO: handle FREQUENT and STREQUENT according to the spec 35291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_FREQUENT: 35391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_STREQUENT: 35491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov // For now they are treated the same as STARRED 35591ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_STARRED: 35691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_STARRED); 35791ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov break; 35891ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov } 35991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov 3600edd4071ddcb23bf2a7b95582df0657de9ff0c60Dmitri Plotnikov mSearchMode = mRequest.isSearchMode(); 36191ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov if (filter != null) { 36291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov mContactListFilterController.setContactListFilter(filter, false); 363fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = false; 36448cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov } else if (mRequest.getActionCode() == ContactsRequest.ACTION_ALL_CONTACTS) { 36548cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov mContactListFilterController.setContactListFilter(new ContactListFilter( 36648cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), false); 367009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov } 368d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov 369d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov if (mRequest.getContactUri() != null) { 370fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = false; 371d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov } 372d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov 373fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setContactsRequest(mRequest); 374fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureListFragmentForRequest(); 375a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov 376b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } else { 377a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov mSearchMode = mActionBarAdapter.isSearchMode(); 378fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 379fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 380fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureListFragment(); 381fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 382fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov invalidateOptionsMenu(); 3836e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 3846e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov 3856e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 386d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onContactListFiltersLoaded() { 3878daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov if (mListFragment == null || !mListFragment.isAdded()) { 388955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov return; 389955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov } 390955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov 391d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mListFragment.setFilter(mContactListFilterController.getFilter()); 392bc5bc44eb0e6f86a093929885547fe37efe60a54Dmitri Plotnikov 393e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov invalidateOptionsMenu(); 394174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 395174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 396d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov @Override 397d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onContactListFilterChanged() { 3988daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov if (mListFragment == null || !mListFragment.isAdded()) { 399d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov return; 400d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov } 401d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov 402d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mListFragment.setFilter(mContactListFilterController.getFilter()); 403e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 404e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov invalidateOptionsMenu(); 4053ad2f35559f81e0d1b5ff362795ae77c0493bd0aDmitri Plotnikov } 4063ad2f35559f81e0d1b5ff362795ae77c0493bd0aDmitri Plotnikov 4076e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 4086e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 4096e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov startActivityForResult(new Intent(this, CustomContactListFilterActivity.class), 4106e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov SUBACTIVITY_CUSTOMIZE_FILTER); 4116e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 4126e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov 413a6c2198bc5ad37119500c4857125ad732548c402Dmitri Plotnikov private void setupContactDetailFragment(final Uri contactLookupUri) { 414d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mDetailFragment.loadUri(contactLookupUri); 415c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 416c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 417fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov /** 418fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Handler for action bar actions. 419fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov */ 420fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov @Override 421b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onAction(Action action) { 422b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan switch (action) { 423b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case START_SEARCH_MODE: 424b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // Bring the contact list fragment to the front. 425b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan FragmentTransaction ft = getFragmentManager().beginTransaction(); 426b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ft.show(mContactsFragment); 427b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ft.commit(); 428b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan break; 429b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case STOP_SEARCH_MODE: 430b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case CHANGE_SEARCH_QUERY: 431b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // Refresh the contact list fragment. 432b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan configureFragments(false /* from request */); 433b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mListFragment.setQueryString(mActionBarAdapter.getQueryString(), true); 434b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan break; 435b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan default: 436b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action); 437b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 438fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov } 439fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov 440fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov private void configureListFragmentForRequest() { 441fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov Uri contactUri = mRequest.getContactUri(); 442fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (contactUri != null) { 443fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setSelectedContactUri(contactUri); 444fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 445238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 4460edd4071ddcb23bf2a7b95582df0657de9ff0c60Dmitri Plotnikov mListFragment.setSearchMode(mRequest.isSearchMode()); 4475251884bbcdb92dad577d027126547527285fcceDmitri Plotnikov mListFragment.setQueryString(mRequest.getQueryString(), false); 448238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 449fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (mRequest.isDirectorySearchEnabled()) { 450fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT); 451fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } else { 452fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE); 453fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 454238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 455fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (mContactListFilterController.isLoaded()) { 456fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setFilter(mContactListFilterController.getFilter()); 4571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 45808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 45908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 460fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov private void configureListFragment() { 461fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setSearchMode(mSearchMode); 462fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 463fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setVisibleScrollbarEnabled(!mSearchMode); 464fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setVerticalScrollbarPosition( 4655245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov mContactContentDisplayed 4665245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov ? View.SCROLLBAR_POSITION_LEFT 4675245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov : View.SCROLLBAR_POSITION_RIGHT); 468fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setSelectionVisible(mContactContentDisplayed); 469fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setQuickContactEnabled(!mContactContentDisplayed); 4701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 4711323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikov 4728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 4738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onProviderStatusChange() { 4748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov updateFragmentVisibility(); 4758b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 4768b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 4778b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private void updateFragmentVisibility() { 4788b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov int providerStatus = mProviderStatusLoader.getProviderStatus(); 4798b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (providerStatus == mProviderStatus) { 4808b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return; 4818b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 4828b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 4838b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatus = providerStatus; 4848b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 4858b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view); 4868b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov View mainView = findViewById(R.id.main_view); 4878b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 4888b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mProviderStatus == ProviderStatus.STATUS_NORMAL) { 489c3f2a52067b799e223f0964207a2d1957165e960Dmitri Plotnikov contactsUnavailableView.setVisibility(View.GONE); 490b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mainView != null) { 491b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mainView.setVisibility(View.VISIBLE); 492b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 4938b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mListFragment != null) { 4948b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mListFragment.setEnabled(true); 4958b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 4968b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else { 4978b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mListFragment != null) { 4988b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mListFragment.setEnabled(false); 4998b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5008b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mContactsUnavailableFragment == null) { 5018b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment = new ContactsUnavailableFragment(); 5028b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader); 5038b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setOnContactsUnavailableActionListener( 5048b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov new ContactsUnavailableFragmentListener()); 5053ed426c842a68895a759548fef87bac359f937bbDianne Hackborn getFragmentManager().beginTransaction() 5068b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov .replace(R.id.contacts_unavailable_container, mContactsUnavailableFragment) 5078b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov .commit(); 5088b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else { 5098b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.update(); 5108b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5118b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov contactsUnavailableView.setVisibility(View.VISIBLE); 512b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mainView != null) { 513b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mainView.setVisibility(View.INVISIBLE); 514b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 5158b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5168b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5178b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov invalidateOptionsMenu(); 5188b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5198b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5201ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov private final class ContactBrowserActionListener implements OnContactBrowserActionListener { 521d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov 522e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 523d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onSelectionChange() { 524e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mContactContentDisplayed) { 525d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov setupContactDetailFragment(mListFragment.getSelectedContactUri()); 526d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov } 527d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov } 528e5f1e4d30929783b26e285b3ddfbf9bc07bdef58Dmitri Plotnikov 529d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov @Override 530d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onViewContactAction(Uri contactLookupUri) { 531d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov if (mContactContentDisplayed) { 532d364314c460152db7089b304beec81b3675893baDmitri Plotnikov setupContactDetailFragment(contactLookupUri); 533424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } else { 534424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri)); 535424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 5361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 537e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov 538e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onCreateNewContactAction() { 5401ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 5411ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 5421ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (extras != null) { 5431ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov intent.putExtras(extras); 544416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov } 5451ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov startActivity(intent); 5461ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 547416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 548e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5491ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onEditContactAction(Uri contactLookupUri) { 550e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri); 551e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann Bundle extras = getIntent().getExtras(); 552e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann if (extras != null) { 553e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann intent.putExtras(extras); 5541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 555e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann startActivityForResult(intent, SUBACTIVITY_EDIT_CONTACT); 5561ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 557413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov 558e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onAddToFavoritesAction(Uri contactUri) { 5601ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContentValues values = new ContentValues(1); 5611ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov values.put(Contacts.STARRED, 1); 5621ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov getContentResolver().update(contactUri, values, null, null); 5631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 5648a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 565e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onRemoveFromFavoritesAction(Uri contactUri) { 5671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContentValues values = new ContentValues(1); 5681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov values.put(Contacts.STARRED, 0); 5691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov getContentResolver().update(contactUri, values, null, null); 5701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 571416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 572e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onCallContactAction(Uri contactUri) { 574b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov getPhoneNumberCallInteraction().startInteraction(contactUri); 5751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 576416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 577e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onSmsContactAction(Uri contactUri) { 579b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov getSendTextMessageInteraction().startInteraction(contactUri); 5801ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 581e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov 582e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onDeleteContactAction(Uri contactUri) { 5849856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false); 5851ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 5868a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 587e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 5881ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onFinishAction() { 5891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov onBackPressed(); 5901ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 5916e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov 5926e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 5936e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov public void onInvalidSelection() { 5948fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov ContactListFilter filter; 5958fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov ContactListFilter currentFilter = mListFragment.getFilter(); 5968fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov if (currentFilter != null 5978fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) { 5988fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS); 5998fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov mListFragment.setFilter(filter); 6008fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov } else { 6018fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_SINGLE_CONTACT); 6028fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov mListFragment.setFilter(filter, false); 6038fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov } 604d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mContactListFilterController.setContactListFilter(filter, true); 6056e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 6061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 607416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 608424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private class DetailFragmentListener implements ContactDetailFragment.Listener { 60969e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 610424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onContactNotFound() { 611d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov // Nothing needs to be done here 612424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 613424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 61469e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 615424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onEditRequested(Uri contactLookupUri) { 6168c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov startActivityForResult( 6178c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov new Intent(Intent.ACTION_EDIT, contactLookupUri), SUBACTIVITY_EDIT_CONTACT); 618424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 619424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 62069e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 621424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onItemClicked(Intent intent) { 62260be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann try { 62360be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann startActivity(intent); 62460be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann } catch (ActivityNotFoundException e) { 62560be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann Log.e(TAG, "No activity found for intent: " + intent); 62660be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann } 627424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 628424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 62969e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 63066bca8f360c9e21b6a47006f21db7b46b6b46340Dmitri Plotnikov public void onDeleteRequested(Uri contactUri) { 6319856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false); 632424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 633caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov 634caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov @Override 635caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov public void onCreateRawContactRequested(ArrayList<ContentValues> values, Account account) { 6369856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan Toast.makeText(PeopleActivity.this, R.string.toast_making_personal_copy, 637caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov Toast.LENGTH_LONG).show(); 638caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov Intent serviceIntent = ContactSaveService.createNewRawContactIntent( 6399856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan PeopleActivity.this, values, account, 6409856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan PeopleActivity.class, Intent.ACTION_VIEW); 641caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov startService(serviceIntent); 642caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov } 643424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 644424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 6458b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private class ContactsUnavailableFragmentListener 6468b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov implements OnContactsUnavailableActionListener { 6478b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 6488b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 6498b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onCreateNewContactAction() { 6508b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI)); 6518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6528b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 6538b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 6548b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onAddAccountAction() { 6558b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT); 6561fbcbd1053c72e165009ad9a7d735dd2c0755c36Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 6578b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov intent.putExtra(Settings.EXTRA_AUTHORITIES, 6588b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov new String[] { ContactsContract.AUTHORITY }); 6598b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov startActivity(intent); 6608b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6618b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 6628b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 6638b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onImportContactsFromFileAction() { 6649856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan AccountSelectionUtil.doImportFromSdCard(PeopleActivity.this, null); 6658b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6668b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 6678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 6688b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onFreeInternalStorageAction() { 6698b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov startActivity(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS)); 6708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 673732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov public void startActivityAndForwardResult(final Intent intent) { 674732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 675732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 676732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov // Forward extras to the new activity 677732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 678732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov if (extras != null) { 679732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov intent.putExtras(extras); 680732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 681732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov startActivity(intent); 682732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov finish(); 683732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 684732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 6857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 6868b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public boolean onCreatePanelMenu(int featureId, Menu menu) { 6878b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov // No menu if contacts are unavailable 6888b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!areContactsAvailable()) { 6898b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 6908b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6918b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 6928b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return super.onCreatePanelMenu(featureId, menu); 6938b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 6948b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 6958b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 6968b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public boolean onPreparePanel(int featureId, View view, Menu menu) { 6978b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov // No menu if contacts are unavailable 6988b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!areContactsAvailable()) { 6998b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 7008b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7018b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7028b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return super.onPreparePanel(featureId, view, menu); 7038b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7048b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7058b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7067aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 7078b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!areContactsAvailable()) { 7088b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 7098b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 710d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey super.onCreateOptionsMenu(menu); 711d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey 712d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov MenuInflater inflater = getMenuInflater(); 713b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan inflater.inflate(R.menu.actions, menu); 714b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Figure out if R.menu.list or R.menu.search are necessary according to the overflow 715b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // menus on the UX mocks. 716b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan MenuItem searchMenuItem = menu.findItem(R.id.menu_search); 717b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (searchMenuItem != null && searchMenuItem.getActionView() instanceof SearchView) { 718b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan SearchView searchView = (SearchView) searchMenuItem.getActionView(); 719b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan searchView.setQueryHint(getString(R.string.hint_findContacts)); 720b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan searchView.setIconifiedByDefault(false); 721b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 722b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mActionBarAdapter != null) { 723b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setSearchView(searchView); 724b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 7257aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 726b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 727b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Can remove this as a custom view because the account selector is in the editor now. 728b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // Change add contact button to button with a custom view 729b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final MenuItem addContact = menu.findItem(R.id.menu_add); 730b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan addContact.setActionView(mAddContactImageView); 731b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return true; 732d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 7337aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 734d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey @Override 7350cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov public void invalidateOptionsMenu() { 7360cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (isOptionsMenuChanged()) { 7370cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov super.invalidateOptionsMenu(); 7380cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7390cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7400cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 7410cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov public boolean isOptionsMenuChanged() { 7420cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (mOptionsMenuContactsAvailable != areContactsAvailable()) { 7430cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 7440cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7450cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 7460cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (mOptionsMenuGroupActionsEnabled != areGroupActionsEnabled()) { 7470cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 7480cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7490cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 7500cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (mListFragment != null && mListFragment.isOptionsMenuChanged()) { 7510cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 7520cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7530cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 7540cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (mDetailFragment != null && mDetailFragment.isOptionsMenuChanged()) { 7550cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 7560cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7570cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 7580cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return false; 7590cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7600cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 7610cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov @Override 762d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey public boolean onPrepareOptionsMenu(Menu menu) { 7630cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov mOptionsMenuContactsAvailable = areContactsAvailable(); 7640cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (!mOptionsMenuContactsAvailable) { 7658b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 7668b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 768a053d61c4bc694061f449e00cb1b620b855739bbDmitri Plotnikov MenuItem settings = menu.findItem(R.id.menu_settings); 7690f1f66a79bf676959d4e0fcfda70c08121ae0c57Daniel Lehmann if (settings != null) { 7700f1f66a79bf676959d4e0fcfda70c08121ae0c57Daniel Lehmann settings.setVisible(!ContactsPreferenceActivity.isEmpty(this)); 7710f1f66a79bf676959d4e0fcfda70c08121ae0c57Daniel Lehmann } 772a053d61c4bc694061f449e00cb1b620b855739bbDmitri Plotnikov 7730cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov mOptionsMenuGroupActionsEnabled = areGroupActionsEnabled(); 774e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 775e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov MenuItem renameGroup = menu.findItem(R.id.menu_rename_group); 776e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov if (renameGroup != null) { 7770cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov renameGroup.setVisible(mOptionsMenuGroupActionsEnabled); 778e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov } 779e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 780e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov MenuItem deleteGroup = menu.findItem(R.id.menu_delete_group); 781e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov if (deleteGroup != null) { 7820cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov deleteGroup.setVisible(mOptionsMenuGroupActionsEnabled); 783e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov } 784e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 785d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 7867aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7877aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 7880cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov private boolean areGroupActionsEnabled() { 7890cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov boolean groupActionsEnabled = false; 7900cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (mListFragment != null) { 7910cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov ContactListFilter filter = mListFragment.getFilter(); 7920cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (filter != null 7930cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP 7940cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov && !filter.groupReadOnly) { 7950cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov groupActionsEnabled = true; 7960cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7970cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 7980cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return groupActionsEnabled; 7990cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8000cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8017aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 8027aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 8037aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project switch (item.getItemId()) { 804c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov case R.id.menu_settings: { 805c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov final Intent intent = new Intent(this, ContactsPreferenceActivity.class); 806c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann startActivity(intent); 8077aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 808d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 809b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case R.id.menu_contacts_filter: { 810b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final Intent intent = new Intent(this, CustomContactListFilterActivity.class); 811b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER); 812b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return true; 813b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 814d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_search: { 8158e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov onSearchRequested(); 8167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 817d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 818d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_add: { 819d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 82022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT); 821d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 822d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 82349d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey case R.id.menu_import_export: { 824261cd5650d07fbc41ea8f19d4e422094612d1454Daniel Lehmann ImportExportDialogFragment.show(getFragmentManager()); 825d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 826d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 827d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_accounts: { 828d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS); 829fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { 830d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey ContactsContract.AUTHORITY 831d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey }); 8321fbcbd1053c72e165009ad9a7d735dd2c0755c36Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 833d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey startActivity(intent); 834d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 835d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 836e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov case R.id.menu_rename_group: { 837d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov ContactListFilter filter = mListFragment.getFilter(); 838e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov GroupRenamingDialogFragment.show(getFragmentManager(), filter.groupId, 839e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov filter.title); 840e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov return true; 841e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov } 842e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov case R.id.menu_delete_group: { 843d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov ContactListFilter filter = mListFragment.getFilter(); 844e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov GroupDeletionDialogFragment.show(getFragmentManager(), filter.groupId, 845e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov filter.title); 846e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov return true; 847e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov } 8487aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 8497aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return false; 8507aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 8517aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 8528e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov @Override 8538e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, 8548e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov boolean globalSearch) { 855691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov if (mListFragment != null && mListFragment.isAdded() && !globalSearch) { 856d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov mListFragment.startSearch(initialQuery); 857691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov } else { 858691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch); 859db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov } 860db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov } 861db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov 86249d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey @Override 8633b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov protected Dialog onCreateDialog(int id, Bundle bundle) { 8643b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, bundle); 8653391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann 86666bca8f360c9e21b6a47006f21db7b46b6b46340Dmitri Plotnikov Dialog dialog = getPhoneNumberCallInteraction().onCreateDialog(id, bundle); 867a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann if (dialog != null) return dialog; 868b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 869b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov dialog = getSendTextMessageInteraction().onCreateDialog(id, bundle); 870a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann if (dialog != null) return dialog; 871b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 8723b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov return super.onCreateDialog(id, bundle); 87349d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey } 87449d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey 8759692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov @Override 8769692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov protected void onPrepareDialog(int id, Dialog dialog, Bundle bundle) { 877b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (getPhoneNumberCallInteraction().onPrepareDialog(id, dialog, bundle)) { 878b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return; 879b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 880b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 881b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (getSendTextMessageInteraction().onPrepareDialog(id, dialog, bundle)) { 882b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return; 883b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 884b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 8859692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov super.onPrepareDialog(id, dialog, bundle); 8869692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov } 887d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey 888d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov @Override 889d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov protected void onActivityResult(int requestCode, int resultCode, Intent data) { 890d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov switch (requestCode) { 8916e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov case SUBACTIVITY_CUSTOMIZE_FILTER: { 8926e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov if (resultCode == Activity.RESULT_OK) { 8936e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov mContactListFilterController.selectCustomFilter(); 8946e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 8956e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov break; 8966e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 8978c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov 898d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov case SUBACTIVITY_EDIT_CONTACT: 89922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann case SUBACTIVITY_NEW_CONTACT: { 9000dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro if (resultCode == RESULT_OK && mContactContentDisplayed) { 9016e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov mRequest.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT); 902a5a2744ab8102cf4ff5fbd3e1fa074a45257b3ddDmitri Plotnikov mListFragment.reloadDataAndSetSelectedUri(data.getData()); 90322fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann } 90422fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann break; 90522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann } 906d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 9077aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // TODO: Using the new startActivityWithResultFromFragment API this should not be needed 9087aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // anymore 909e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER: 910d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (resultCode == RESULT_OK) { 911e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.onPickerResult(data); 912d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 913d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 914d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// TODO fix or remove multipicker code 915d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) { 9161ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// // Finish the activity if the sub activity was canceled as back key is used 9171ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// // to confirm user selection in MODE_PICK_MULTIPLE_PHONES. 9181ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// finish(); 9191ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9201ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// break; 921d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 922d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 9237aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9247aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 9257aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 926502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov ContextMenuAdapter menuAdapter = mListFragment.getContextMenuAdapter(); 927502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov if (menuAdapter != null) { 928502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov return menuAdapter.onContextItemSelected(item); 9297aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9307aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9317aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return super.onContextItemSelected(item); 9327aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9337aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9347aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 9357aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 9361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // TODO move to the fragment 9377aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project switch (keyCode) { 9381ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// case KeyEvent.KEYCODE_CALL: { 9391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (callSelection()) { 9401ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// return true; 9411ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9421ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// break; 9431ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 944db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov 9457aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project case KeyEvent.KEYCODE_DEL: { 9466c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov if (deleteSelection()) { 9477aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 9487aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9497aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project break; 9507aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9517bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann default: { 9527bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann // Bring up the search UI if the user starts typing 9537bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann final int unicodeChar = event.getUnicodeChar(); 9544f3aa85131e16594fef22ca60439f4320016767fDaniel Lehmann if (unicodeChar != 0 && !Character.isWhitespace(unicodeChar)) { 9557bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann String query = new String(new int[]{ unicodeChar }, 0, 1); 956b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (!mActionBarAdapter.isSearchMode()) { 957b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setQueryString(query); 958b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setSearchMode(true); 959b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return true; 9607bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } else if (!mRequest.isSearchMode()) { 9617bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann if (!mSearchInitiated) { 9627bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann mSearchInitiated = true; 9637bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann startSearch(query, false, null, false); 9647bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann return true; 9657bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 9667bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 9677bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 9687bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 9697aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9707aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9717aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return super.onKeyDown(keyCode, event); 9727aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 973ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 974ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov @Override 975ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov public void onBackPressed() { 976ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (mSearchMode && mActionBarAdapter != null) { 977ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mActionBarAdapter.setSearchMode(false); 978ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 979ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov super.onBackPressed(); 980ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 981ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 9827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9836c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov private boolean deleteSelection() { 9841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // TODO move to the fragment 9851ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (mActionCode == ContactsRequest.ACTION_DEFAULT) { 9861ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// final int position = mListView.getSelectedItemPosition(); 9871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (position != ListView.INVALID_POSITION) { 9881ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// Uri contactUri = getContactUri(position); 9891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (contactUri != null) { 9901ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// doContactDelete(contactUri); 9911ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// return true; 9921ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9931ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9941ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9956c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov return false; 9966c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov } 9976c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov 99808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 99908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov protected void onSaveInstanceState(Bundle outState) { 100008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov super.onSaveInstanceState(outState); 100115ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(KEY_SEARCH_MODE, mSearchMode); 1002fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mActionBarAdapter != null) { 1003fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.onSaveInstanceState(outState); 100408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 100508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 100608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 1007fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov @Override 1008fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov protected void onRestoreInstanceState(Bundle inState) { 1009fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov super.onRestoreInstanceState(inState); 1010fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = inState.getBoolean(KEY_SEARCH_MODE); 1011fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (mActionBarAdapter != null) { 1012fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mActionBarAdapter.onRestoreInstanceState(inState); 1013fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 1014fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 1015fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 1016b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov private PhoneNumberInteraction getPhoneNumberCallInteraction() { 1017b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (mPhoneNumberCallInteraction == null) { 1018b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov mPhoneNumberCallInteraction = new PhoneNumberInteraction(this, false, null); 1019b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 1020b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return mPhoneNumberCallInteraction; 1021b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 1022b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 1023b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov private PhoneNumberInteraction getSendTextMessageInteraction() { 1024b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (mSendTextMessageInteraction == null) { 1025b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov mSendTextMessageInteraction = new PhoneNumberInteraction(this, true, null); 10267c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov } 1027b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return mSendTextMessageInteraction; 10287c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov } 10299692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov 10303391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann @Override 10313391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann public DialogManager getDialogManager() { 10323391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann return mDialogManager; 10333391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann } 1034ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 1035ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov // Visible for testing 1036ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov public ContactBrowseListFragment getListFragment() { 1037ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov return mListFragment; 1038ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 1039ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 1040ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov // Visible for testing 1041ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov public ContactDetailFragment getDetailFragment() { 1042ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov return mDetailFragment; 1043ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 10447aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project} 1045