PeopleActivity.java revision b1f0e5e8a4de69bd80276742900441e930fa4c86
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 1979700889dad553dcde9e22a2fd23df768f68080fKatherine Kuanimport com.android.contacts.ContactLoader; 2018ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovimport com.android.contacts.ContactSaveService; 216f667b55687bf9193323802e8f3234f0ab254388Dmitri Plotnikovimport com.android.contacts.ContactsActivity; 2227834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovimport com.android.contacts.R; 2318ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovimport com.android.contacts.detail.ContactDetailFragment; 24b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.group.GroupBrowseListFragment; 25be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport com.android.contacts.group.GroupBrowseListFragment.OnGroupBrowserActionListener; 26be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport com.android.contacts.group.GroupDetailFragment; 279692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport com.android.contacts.interactions.ContactDeletionInteraction; 28261cd5650d07fbc41ea8f19d4e422094612d1454Daniel Lehmannimport com.android.contacts.interactions.ImportExportDialogFragment; 29b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikovimport com.android.contacts.interactions.PhoneNumberInteraction; 30416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikovimport com.android.contacts.list.ContactBrowseListContextMenuAdapter; 3108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment; 3259fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport com.android.contacts.list.ContactEntryListFragment; 33009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikovimport com.android.contacts.list.ContactListFilter; 3415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController; 350906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovimport com.android.contacts.list.ContactsIntentResolver; 361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 378b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ContactsUnavailableFragment; 386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikovimport com.android.contacts.list.CustomContactListFilterActivity; 39b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.list.DefaultContactBrowseListFragment; 404d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport com.android.contacts.list.DirectoryListLoader; 41732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.list.OnContactBrowserActionListener; 428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.OnContactsUnavailableActionListener; 438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ProviderStatusLoader; 448b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ProviderStatusLoader.ProviderStatusListener; 45b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.list.StrequentContactListFragment; 46c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport com.android.contacts.preference.ContactsPreferenceActivity; 478b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.util.AccountSelectionUtil; 483391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmannimport com.android.contacts.util.DialogManager; 491323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikovimport com.android.contacts.widget.ContextMenuAdapter; 5057cf30f316b8013e172150d1ad0e197be6b46b87Tadashi G. Takaoka 51caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikovimport android.accounts.Account; 523d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikovimport android.app.ActionBar; 53b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.ActionBar.Tab; 54b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.ActionBar.TabListener; 557aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.app.Activity; 5649d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkeyimport android.app.Dialog; 5792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikovimport android.app.Fragment; 58b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.FragmentManager; 59b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.FragmentTransaction; 6060be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmannimport android.content.ActivityNotFoundException; 617aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.ContentValues; 627aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.Intent; 63b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.content.res.TypedArray; 647aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.net.Uri; 657aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.os.Bundle; 66d7c4af2b932ffc65476fb1ac6d74feac74b48f3cDmitri Plotnikovimport android.provider.ContactsContract; 67e05296673449dc6686c4fec4dd2e98ab47a78056Jeff Hamiltonimport android.provider.ContactsContract.Contacts; 688b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport android.provider.ContactsContract.ProviderStatus; 699692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport android.provider.Settings; 70a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.util.Log; 717aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.KeyEvent; 727aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.Menu; 73d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkeyimport android.view.MenuInflater; 747aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.MenuItem; 757aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.View; 764af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.view.Window; 77b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.widget.SearchView; 78424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.widget.Toast; 797aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 80caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikovimport java.util.ArrayList; 81caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov 827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/** 83bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * Displays a list to browse contacts. For xlarge screens, this also displays a detail-pane on 84a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov * the right. 857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */ 869856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivity extends ContactsActivity 87fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener, 886e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov DialogManager.DialogShowingViewActivity, 898b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov ContactListFilterController.ContactListFilterListener, ProviderStatusListener { 9057d27da940983fba40d8e3a6d8b99a57b48419eaDmitri Plotnikov 915e684a424e7036ba3d379221d1889b4dd7265021Dave Santoro private static final String TAG = "PeopleActivity"; 927aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9322fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann private static final int SUBACTIVITY_NEW_CONTACT = 2; 94c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann private static final int SUBACTIVITY_EDIT_CONTACT = 3; 95c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 4; 963c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov 9715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private static final String KEY_SEARCH_MODE = "searchMode"; 9815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov 993b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann private DialogManager mDialogManager = new DialogManager(this); 1003391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann 101ac0f783adb82ee8056e742fae4994e848e82ea3dDmitri Plotnikov private ContactsIntentResolver mIntentResolver; 102fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactsRequest mRequest; 103caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov 104fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ActionBarAdapter mActionBarAdapter; 1057c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov 10615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private boolean mSearchMode; 107fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov 108fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactBrowseListFragment mListFragment; 1090dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro 1100dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro /** 111be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * Whether we have a right-side contact or group detail pane for displaying info on that 112be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * contact or group while browsing. Generally means "this is a tablet". 1130dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro */ 114be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private boolean mContentPaneDisplayed; 1150dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro 116be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private ContactDetailFragment mContactDetailFragment; 117be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private ContactDetailFragmentListener mContactDetailFragmentListener = 118be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan new ContactDetailFragmentListener(); 119be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 120be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private GroupDetailFragment mGroupDetailFragment; 121424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 122fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private boolean mSearchInitiated; 123e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov 12415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov private ContactListFilterController mContactListFilterController; 1253c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov 1268b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private ContactsUnavailableFragment mContactsUnavailableFragment; 1278b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private ProviderStatusLoader mProviderStatusLoader; 1288b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private int mProviderStatus = -1; 1298b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1300cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov private boolean mOptionsMenuContactsAvailable; 1310cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 132b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private DefaultContactBrowseListFragment mContactsFragment; 133b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private StrequentContactListFragment mFavoritesFragment; 134b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private GroupBrowseListFragment mGroupsFragment; 135b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 1368268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private enum TabState { 1378268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan FAVORITES, CONTACTS, GROUPS 1388268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 1398268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 1408268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private TabState mSelectedTab; 1418268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 1429856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan public PeopleActivity() { 1431540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov mIntentResolver = new ContactsIntentResolver(this); 144b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // TODO: Get rid of the ContactListFilterController class because there aren't any 145b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // dropdown filters anymore. Just store the selected filter as a member variable. 14615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov mContactListFilterController = new ContactListFilterController(this); 1476e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov mContactListFilterController.addListener(this); 1488b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatusLoader = new ProviderStatusLoader(this); 1496178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1506178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 1518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public boolean areContactsAvailable() { 1528b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return mProviderStatus == ProviderStatus.STATUS_NORMAL; 1538b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 1548b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 1557aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 15692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov public void onAttachFragment(Fragment fragment) { 15792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (fragment instanceof ContactBrowseListFragment) { 15892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment = (ContactBrowseListFragment)fragment; 15992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment.setOnContactListActionListener(new ContactBrowserActionListener()); 160a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov if (!getWindow().hasFeature(Window.FEATURE_ACTION_BAR)) { 161fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setContextMenuAdapter( 162fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov new ContactBrowseListContextMenuAdapter(mListFragment)); 1638daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov } 164be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } else if (fragment instanceof GroupBrowseListFragment) { 165be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupsFragment = (GroupBrowseListFragment) fragment; 166be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupsFragment.setListener(new GroupBrowserActionListener()); 167d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } else if (fragment instanceof ContactDetailFragment) { 168be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContactDetailFragment = (ContactDetailFragment) fragment; 169be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContactDetailFragment.setListener(mContactDetailFragmentListener); 170be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContentPaneDisplayed = true; 1718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else if (fragment instanceof ContactsUnavailableFragment) { 1728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment; 1738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader); 1748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setOnContactsUnavailableActionListener( 1758b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov new ContactsUnavailableFragmentListener()); 176be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } else if (fragment instanceof GroupDetailFragment) { 177be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupDetailFragment = (GroupDetailFragment) fragment; 178be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContentPaneDisplayed = true; 17992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 18092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 18192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 18292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov @Override 18308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov protected void onCreate(Bundle savedState) { 18408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov super.onCreate(savedState); 1857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 186fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureContentView(true, savedState); 187fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 188fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 189fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov @Override 190fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov protected void onNewIntent(Intent intent) { 191fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov setIntent(intent); 192fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureContentView(false, null); 193fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 194fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 195fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov private void configureContentView(boolean createContentView, Bundle savedState) { 1961ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Extract relevant information from the intent 1971ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov mRequest = mIntentResolver.resolveIntent(getIntent()); 1981ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (!mRequest.isValid()) { 1996178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov setResult(RESULT_CANCELED); 2007aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project finish(); 2011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return; 2026178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2036178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 2041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Intent redirect = mRequest.getRedirectIntent(); 2051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (redirect != null) { 2061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Need to start a different activity 2076178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov startActivity(redirect); 2087aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project finish(); 2091ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return; 2107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 2117aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 212fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (createContentView) { 2139856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan setContentView(R.layout.people_activity); 214b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 215b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final FragmentManager fragmentManager = getFragmentManager(); 216b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mFavoritesFragment = (StrequentContactListFragment) fragmentManager 217b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan .findFragmentById(R.id.favorites_fragment); 218b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mContactsFragment = (DefaultContactBrowseListFragment) fragmentManager 219b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan .findFragmentById(R.id.contacts_fragment); 220b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mGroupsFragment = (GroupBrowseListFragment) fragmentManager 221b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan .findFragmentById(R.id.groups_fragment); 222b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 223b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan // Hide all tabs (the current tab will later be reshown once a tab is selected) 224b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final FragmentTransaction transaction = fragmentManager.beginTransaction(); 225b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.hide(mFavoritesFragment); 226b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.hide(mContactsFragment); 227b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.hide(mGroupsFragment); 228be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mContactDetailFragment != null) { 229be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan transaction.hide(mContactDetailFragment); 230be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 231be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mGroupDetailFragment != null) { 232be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan transaction.hide(mGroupDetailFragment); 233be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 234b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan transaction.commit(); 235fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 23665ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov 23790715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT 238be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan && !mContentPaneDisplayed) { 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(); 2491ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBarAdapter = new ActionBarAdapter(this, this); 2501ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan mActionBarAdapter.onCreate(savedState, mRequest, getActionBar(), !mContentPaneDisplayed); 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)); 257be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan favoritesTab.setTabListener(new TabChangeListener(mFavoritesFragment, 2588268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mContactDetailFragment, TabState.FAVORITES)); 259b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.addTab(favoritesTab); 2603d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikov 261b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan Tab peopleTab = actionBar.newTab(); 262b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan peopleTab.setText(getString(R.string.people)); 263be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan peopleTab.setTabListener(new TabChangeListener(mContactsFragment, 2648268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mContactDetailFragment, TabState.CONTACTS)); 265b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.addTab(peopleTab); 266b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 267b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan Tab groupsTab = actionBar.newTab(); 268b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan groupsTab.setText(getString(R.string.contactsGroupsLabel)); 269be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan groupsTab.setTabListener(new TabChangeListener(mGroupsFragment, 2708268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mGroupDetailFragment, TabState.GROUPS)); 271b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.addTab(groupsTab); 272b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.setDisplayShowTitleEnabled(true); 273b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 274b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan TypedArray a = obtainStyledAttributes(null, R.styleable.ActionBarHomeIcon); 275b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan boolean showHomeIcon = a.getBoolean(R.styleable.ActionBarHomeIcon_show_home_icon, true); 276b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan actionBar.setDisplayShowHomeEnabled(showHomeIcon); 277b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 2788268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 279d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } 28008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 281fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov configureFragments(savedState == null); 2823c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov } 2833c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov 284b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan /** 285b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan * Tab change listener that is instantiated once for each tab. Handles showing/hiding fragments. 286b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan * TODO: Use ViewPager so that tabs can be swiped left and right. Figure out how to use the 287b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan * support library in our app. 288b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan */ 289b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan private class TabChangeListener implements TabListener { 290be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private final Fragment mBrowseListFragment; 291be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 292be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan /** 293be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * Right pane fragment that is present on larger screen sizes (can be 294be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * null for smaller screen sizes). 295be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan */ 296be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private final Fragment mDetailFragment; 2978268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private final TabState mTabState; 298b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 2998268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan public TabChangeListener(Fragment listFragment, Fragment detailFragment, TabState state) { 300be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mBrowseListFragment = listFragment; 301be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mDetailFragment = detailFragment; 3028268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mTabState = state; 303b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 304b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 305b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan @Override 306b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onTabUnselected(Tab tab, FragmentTransaction ft) { 307be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ft.hide(mBrowseListFragment); 308be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mDetailFragment != null) { 309be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ft.hide(mDetailFragment); 310be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 311b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 312b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 313b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan @Override 314b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onTabSelected(Tab tab, FragmentTransaction ft) { 315be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ft.show(mBrowseListFragment); 316be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mDetailFragment != null) { 317be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ft.show(mDetailFragment); 318be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 3198268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan setSelectedTab(mTabState); 3208268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenu(); 321b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 322b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 323b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan @Override 324b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onTabReselected(Tab tab, FragmentTransaction ft) { 325b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 326b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 327b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 3288268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private void setSelectedTab(TabState tab) { 3298268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mSelectedTab = tab; 3308268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 3318268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 3326e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 333174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov protected void onPause() { 334174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov if (mActionBarAdapter != null) { 335174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov mActionBarAdapter.setListener(null); 336174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 337fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 338fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mOptionsMenuContactsAvailable = false; 339fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 340fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mProviderStatus = -1; 3418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatusLoader.setProviderStatusListener(null); 342174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov super.onPause(); 343174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 344174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 345174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov @Override 346174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov protected void onResume() { 347174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov super.onResume(); 348174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov if (mActionBarAdapter != null) { 349174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov mActionBarAdapter.setListener(this); 350174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 3518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatusLoader.setProviderStatusListener(this); 3528b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov updateFragmentVisibility(); 353174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 354174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 355174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov @Override 3566e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov protected void onStart() { 357e4e52199057ffb57bad42caa33e6b402fd80697aDmitri Plotnikov mContactListFilterController.onStart(); 3586e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov super.onStart(); 359caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov } 360caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov 361955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov private void configureFragments(boolean fromRequest) { 362009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov if (fromRequest) { 36391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov ContactListFilter filter = null; 36491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov int actionCode = mRequest.getActionCode(); 36591ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov switch (actionCode) { 36691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_ALL_CONTACTS: 367be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan filter = ContactListFilter.createFilterWithType( 368be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS); 36991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov break; 37091ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_CONTACTS_WITH_PHONES: 371be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan filter = ContactListFilter.createFilterWithType( 37291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY); 37391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov break; 37491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov 37591ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov // TODO: handle FREQUENT and STREQUENT according to the spec 37691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_FREQUENT: 37791ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_STREQUENT: 37891ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov // For now they are treated the same as STARRED 37991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov case ContactsRequest.ACTION_STARRED: 380be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan filter = ContactListFilter.createFilterWithType( 381be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ContactListFilter.FILTER_TYPE_STARRED); 38291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov break; 38391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov } 38491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov 3850edd4071ddcb23bf2a7b95582df0657de9ff0c60Dmitri Plotnikov mSearchMode = mRequest.isSearchMode(); 38691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov if (filter != null) { 38791ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov mContactListFilterController.setContactListFilter(filter, false); 388fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = false; 38948cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov } else if (mRequest.getActionCode() == ContactsRequest.ACTION_ALL_CONTACTS) { 390be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContactListFilterController.setContactListFilter( 391be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ContactListFilter.createFilterWithType( 39248cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), false); 393009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov } 394d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov 395d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov if (mRequest.getContactUri() != null) { 396fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = false; 397d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov } 398d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov 399fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setContactsRequest(mRequest); 4000ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan configureContactListFragmentForRequest(); 401a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov 402b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } else { 403a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov mSearchMode = mActionBarAdapter.isSearchMode(); 404fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 405fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 4060ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan configureContactListFragment(); 4070ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan configureGroupListFragment(); 408fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 4098268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 4106e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 4116e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov 4126e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 413d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onContactListFiltersLoaded() { 4148daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov if (mListFragment == null || !mListFragment.isAdded()) { 415955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov return; 416955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov } 417955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov 418d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mListFragment.setFilter(mContactListFilterController.getFilter()); 419bc5bc44eb0e6f86a093929885547fe37efe60a54Dmitri Plotnikov 4208268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 421174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov } 422174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov 423d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov @Override 424d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onContactListFilterChanged() { 4258daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov if (mListFragment == null || !mListFragment.isAdded()) { 426d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov return; 427d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov } 428d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov 429d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mListFragment.setFilter(mContactListFilterController.getFilter()); 430e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 4318268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 4323ad2f35559f81e0d1b5ff362795ae77c0493bd0aDmitri Plotnikov } 4333ad2f35559f81e0d1b5ff362795ae77c0493bd0aDmitri Plotnikov 4346e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 4356e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov public void onContactListFilterCustomizationRequest() { 4366e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov startActivityForResult(new Intent(this, CustomContactListFilterActivity.class), 4376e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov SUBACTIVITY_CUSTOMIZE_FILTER); 4386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 4396e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov 440a6c2198bc5ad37119500c4857125ad732548c402Dmitri Plotnikov private void setupContactDetailFragment(final Uri contactLookupUri) { 441be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContactDetailFragment.loadUri(contactLookupUri); 4428268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 443be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 444be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 445be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private void setupGroupDetailFragment(Uri groupUri) { 446be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mGroupDetailFragment.loadGroup(groupUri); 4478268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 448c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 449c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 450fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov /** 451fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Handler for action bar actions. 452fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov */ 453fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov @Override 454b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan public void onAction(Action action) { 455b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan switch (action) { 456b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case START_SEARCH_MODE: 4578268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // Bring the contact list fragment (and detail fragment if applicable) to the front 458b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan FragmentTransaction ft = getFragmentManager().beginTransaction(); 459b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ft.show(mContactsFragment); 4608268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mContactDetailFragment != null) ft.show(mContactDetailFragment); 461b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan ft.commit(); 4628268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan clearSearch(); 463b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan break; 464b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case STOP_SEARCH_MODE: 4658268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // Refresh the fragments because search mode was using them to display search 4668268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // results. 4678268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan clearSearch(); 4688268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4698268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // If the last selected tab was not the "All contacts" tab, then hide these 4708268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // fragments because we need to show favorites or groups. 4718268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mSelectedTab != null && !mSelectedTab.equals(TabState.CONTACTS)) { 4728268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan FragmentTransaction transaction = getFragmentManager().beginTransaction(); 4738268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan transaction.hide(mContactsFragment); 4748268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mContactDetailFragment != null) transaction.hide(mContactDetailFragment); 4758268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan transaction.commit(); 4768268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4778268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan break; 478b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case CHANGE_SEARCH_QUERY: 4798268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan loadSearch(mActionBarAdapter.getQueryString()); 480b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan break; 481b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan default: 482b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action); 483b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 484fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov } 485fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov 4868268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private void clearSearch() { 4878268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan loadSearch(""); 4888268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4898268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4908268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private void loadSearch(String query) { 4918268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan configureFragments(false /* from request */); 4928268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan mListFragment.setQueryString(query, true); 4938268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 4948268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan 4950ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan private void configureContactListFragmentForRequest() { 496fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov Uri contactUri = mRequest.getContactUri(); 497fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (contactUri != null) { 498fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setSelectedContactUri(contactUri); 499fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 500238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 5010edd4071ddcb23bf2a7b95582df0657de9ff0c60Dmitri Plotnikov mListFragment.setSearchMode(mRequest.isSearchMode()); 5025251884bbcdb92dad577d027126547527285fcceDmitri Plotnikov mListFragment.setQueryString(mRequest.getQueryString(), false); 503238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 504fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (mRequest.isDirectorySearchEnabled()) { 505fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT); 506fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } else { 507fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE); 508fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 509238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 510fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (mContactListFilterController.isLoaded()) { 511fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setFilter(mContactListFilterController.getFilter()); 5121ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 51308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 51408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 5150ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan private void configureContactListFragment() { 516fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setSearchMode(mSearchMode); 517fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 518fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setVisibleScrollbarEnabled(!mSearchMode); 519fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mListFragment.setVerticalScrollbarPosition( 520be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mContentPaneDisplayed 5215245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov ? View.SCROLLBAR_POSITION_LEFT 5225245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov : View.SCROLLBAR_POSITION_RIGHT); 523be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mListFragment.setSelectionVisible(mContentPaneDisplayed); 524be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan mListFragment.setQuickContactEnabled(!mContentPaneDisplayed); 5251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 5261323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikov 5270ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan private void configureGroupListFragment() { 5280ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan mGroupsFragment.setVerticalScrollbarPosition( 5290ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan mContentPaneDisplayed 5300ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan ? View.SCROLLBAR_POSITION_LEFT 5310ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan : View.SCROLLBAR_POSITION_RIGHT); 5320ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan mGroupsFragment.setSelectionVisible(mContentPaneDisplayed); 5330ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan } 5340ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan 5358b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 5368b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onProviderStatusChange() { 5378b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov updateFragmentVisibility(); 5388b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5398b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5408b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private void updateFragmentVisibility() { 5418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov int providerStatus = mProviderStatusLoader.getProviderStatus(); 5428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (providerStatus == mProviderStatus) { 5438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return; 5448b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5458b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5468b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mProviderStatus = providerStatus; 5478b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5488b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view); 5498b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov View mainView = findViewById(R.id.main_view); 5508b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mProviderStatus == ProviderStatus.STATUS_NORMAL) { 552c3f2a52067b799e223f0964207a2d1957165e960Dmitri Plotnikov contactsUnavailableView.setVisibility(View.GONE); 553b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mainView != null) { 554b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mainView.setVisibility(View.VISIBLE); 555b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 5568b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mListFragment != null) { 5578b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mListFragment.setEnabled(true); 5588b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5598b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else { 5608b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mListFragment != null) { 5618b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mListFragment.setEnabled(false); 5628b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5638b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (mContactsUnavailableFragment == null) { 5648b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment = new ContactsUnavailableFragment(); 5658b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader); 5668b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.setOnContactsUnavailableActionListener( 5678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov new ContactsUnavailableFragmentListener()); 5683ed426c842a68895a759548fef87bac359f937bbDianne Hackborn getFragmentManager().beginTransaction() 5698b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov .replace(R.id.contacts_unavailable_container, mContactsUnavailableFragment) 5708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov .commit(); 5718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } else { 5728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov mContactsUnavailableFragment.update(); 5738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov contactsUnavailableView.setVisibility(View.VISIBLE); 575b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mainView != null) { 576b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mainView.setVisibility(View.INVISIBLE); 577b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 5788b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5798b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5808268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenuIfNeeded(); 5818b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 5828b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 5831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov private final class ContactBrowserActionListener implements OnContactBrowserActionListener { 584d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov 585e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 586d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onSelectionChange() { 587be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mContentPaneDisplayed) { 588d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov setupContactDetailFragment(mListFragment.getSelectedContactUri()); 589d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov } 590d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov } 591e5f1e4d30929783b26e285b3ddfbf9bc07bdef58Dmitri Plotnikov 592d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov @Override 593d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov public void onViewContactAction(Uri contactLookupUri) { 594be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mContentPaneDisplayed) { 595d364314c460152db7089b304beec81b3675893baDmitri Plotnikov setupContactDetailFragment(contactLookupUri); 596424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } else { 597424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri)); 598424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 5991ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 600e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov 601e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onCreateNewContactAction() { 6031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 6041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 6051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (extras != null) { 6061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov intent.putExtras(extras); 607416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov } 6081ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov startActivity(intent); 6091ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 610416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 611e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6121ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onEditContactAction(Uri contactLookupUri) { 613e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri); 614e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann Bundle extras = getIntent().getExtras(); 615e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann if (extras != null) { 616e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann intent.putExtras(extras); 6171ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 618e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann startActivityForResult(intent, SUBACTIVITY_EDIT_CONTACT); 6191ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 620413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov 621e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6221ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onAddToFavoritesAction(Uri contactUri) { 6231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContentValues values = new ContentValues(1); 6241ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov values.put(Contacts.STARRED, 1); 6251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov getContentResolver().update(contactUri, values, null, null); 6261ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 6278a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 628e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6291ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onRemoveFromFavoritesAction(Uri contactUri) { 6301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContentValues values = new ContentValues(1); 6311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov values.put(Contacts.STARRED, 0); 6321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov getContentResolver().update(contactUri, values, null, null); 6331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 634416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 635e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onCallContactAction(Uri contactUri) { 637b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa PhoneNumberInteraction.startInteractionForPhoneCall(PeopleActivity.this, contactUri); 6381ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 639416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 640e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6411ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onSmsContactAction(Uri contactUri) { 642b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa PhoneNumberInteraction.startInteractionForTextMessage(PeopleActivity.this, contactUri); 6431ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 644e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov 645e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6461ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onDeleteContactAction(Uri contactUri) { 6479856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false); 6481ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 6498a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 650e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann @Override 6511ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onFinishAction() { 6521ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov onBackPressed(); 6531ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 6546e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov 6556e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov @Override 6566e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov public void onInvalidSelection() { 6578fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov ContactListFilter filter; 6588fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov ContactListFilter currentFilter = mListFragment.getFilter(); 6598fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov if (currentFilter != null 6608fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) { 661be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan filter = ContactListFilter.createFilterWithType( 662be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS); 6638fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov mListFragment.setFilter(filter); 6648fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov } else { 665be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan filter = ContactListFilter.createFilterWithType( 666be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan ContactListFilter.FILTER_TYPE_SINGLE_CONTACT); 6678fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov mListFragment.setFilter(filter, false); 6688fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov } 669d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov mContactListFilterController.setContactListFilter(filter, true); 6706e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 6711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 672416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 673be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private class ContactDetailFragmentListener implements ContactDetailFragment.Listener { 67469e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 675424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onContactNotFound() { 676d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov // Nothing needs to be done here 677424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 678424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 67969e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 68079700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan public void onDetailsLoaded(ContactLoader.Result result) { 68179700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan // Nothing needs to be done here 68279700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan } 68379700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan 68479700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan @Override 685424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onEditRequested(Uri contactLookupUri) { 6868c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov startActivityForResult( 6878c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov new Intent(Intent.ACTION_EDIT, contactLookupUri), SUBACTIVITY_EDIT_CONTACT); 688424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 689424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 69069e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 691424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onItemClicked(Intent intent) { 69260be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann try { 69360be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann startActivity(intent); 69460be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann } catch (ActivityNotFoundException e) { 69560be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann Log.e(TAG, "No activity found for intent: " + intent); 69660be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann } 697424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 698424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 69969e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 70066bca8f360c9e21b6a47006f21db7b46b6b46340Dmitri Plotnikov public void onDeleteRequested(Uri contactUri) { 7019856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false); 702424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 703caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov 704caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov @Override 705caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov public void onCreateRawContactRequested(ArrayList<ContentValues> values, Account account) { 7069856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan Toast.makeText(PeopleActivity.this, R.string.toast_making_personal_copy, 707caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov Toast.LENGTH_LONG).show(); 708caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov Intent serviceIntent = ContactSaveService.createNewRawContactIntent( 7099856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan PeopleActivity.this, values, account, 7109856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan PeopleActivity.class, Intent.ACTION_VIEW); 711caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov startService(serviceIntent); 712caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov } 713424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 714424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 7158b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov private class ContactsUnavailableFragmentListener 7168b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov implements OnContactsUnavailableActionListener { 7178b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7188b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7198b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onCreateNewContactAction() { 7208b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI)); 7218b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7228b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7238b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7248b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onAddAccountAction() { 7258b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT); 7261fbcbd1053c72e165009ad9a7d735dd2c0755c36Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 7278b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov intent.putExtra(Settings.EXTRA_AUTHORITIES, 7288b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov new String[] { ContactsContract.AUTHORITY }); 7298b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov startActivity(intent); 7308b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7318b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7328b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7338b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onImportContactsFromFileAction() { 7349856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan AccountSelectionUtil.doImportFromSdCard(PeopleActivity.this, null); 7358b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7368b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7378b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7388b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public void onFreeInternalStorageAction() { 7398b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov startActivity(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS)); 7408b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 743be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan private final class GroupBrowserActionListener implements OnGroupBrowserActionListener { 744be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 745be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan @Override 746be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan public void onViewGroupAction(Uri groupUri) { 747be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (mContentPaneDisplayed) { 748be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan setupGroupDetailFragment(groupUri); 749be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } else { 750be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan Intent intent = new Intent(PeopleActivity.this, GroupDetailActivity.class); 751be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan intent.setData(groupUri); 752be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan startActivity(intent); 753be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 754be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 755be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan } 756be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan 757732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov public void startActivityAndForwardResult(final Intent intent) { 758732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 759732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 760732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov // Forward extras to the new activity 761732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 762732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov if (extras != null) { 763732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov intent.putExtras(extras); 764732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 765732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov startActivity(intent); 766732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov finish(); 767732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 768732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 7697aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 7708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public boolean onCreatePanelMenu(int featureId, Menu menu) { 7718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov // No menu if contacts are unavailable 7728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!areContactsAvailable()) { 7738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 7748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7758b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7768b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return super.onCreatePanelMenu(featureId, menu); 7778b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7788b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7798b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7808b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov public boolean onPreparePanel(int featureId, View view, Menu menu) { 7818b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov // No menu if contacts are unavailable 7828b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!areContactsAvailable()) { 7838b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 7848b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7858b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7868b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return super.onPreparePanel(featureId, view, menu); 7878b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 7888b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 7898b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov @Override 7907aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 7918b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov if (!areContactsAvailable()) { 7928b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 7938b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 794d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey super.onCreateOptionsMenu(menu); 795d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey 796d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov MenuInflater inflater = getMenuInflater(); 797b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan inflater.inflate(R.menu.actions, menu); 798b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan MenuItem searchMenuItem = menu.findItem(R.id.menu_search); 799b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (searchMenuItem != null && searchMenuItem.getActionView() instanceof SearchView) { 800b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan SearchView searchView = (SearchView) searchMenuItem.getActionView(); 801b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan searchView.setQueryHint(getString(R.string.hint_findContacts)); 802b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan searchView.setIconifiedByDefault(false); 803b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan 804b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (mActionBarAdapter != null) { 805b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setSearchView(searchView); 806b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 8077aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 808b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return true; 809d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 8107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 8118268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan private void invalidateOptionsMenuIfNeeded() { 8120cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (isOptionsMenuChanged()) { 8138268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan invalidateOptionsMenu(); 8140cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8150cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8160cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8170cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov public boolean isOptionsMenuChanged() { 8180cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (mOptionsMenuContactsAvailable != areContactsAvailable()) { 8190cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 8200cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8210cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8228268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mListFragment != null && mListFragment.isOptionsMenuChanged()) { 8230cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 8240cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8250cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8268268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mContactDetailFragment != null && mContactDetailFragment.isOptionsMenuChanged()) { 8270cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 8280cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8290cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8308268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mGroupDetailFragment != null && mGroupDetailFragment.isOptionsMenuChanged()) { 8310cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return true; 8320cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8330cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8340cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov return false; 8350cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov } 8360cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov 8370cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov @Override 838d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey public boolean onPrepareOptionsMenu(Menu menu) { 8390cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov mOptionsMenuContactsAvailable = areContactsAvailable(); 8400cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov if (!mOptionsMenuContactsAvailable) { 8418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov return false; 8428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov } 8438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov 8448268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan final MenuItem addContactMenu = menu.findItem(R.id.menu_add_contact); 8458268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan final MenuItem addGroupMenu = menu.findItem(R.id.menu_add_group); 8461ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan final MenuItem searchMenu = menu.findItem(R.id.menu_search); 847e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 8488268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (mActionBarAdapter.isSearchMode()) { 8498268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan addContactMenu.setVisible(false); 8508268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan addGroupMenu.setVisible(false); 8511ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan // If search is normally in the overflow menu, when we are in search 8521ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan // mode, hide this option. 8531ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan if (mActionBarAdapter.isSearchInOverflowMenu()) { 8541ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan searchMenu.setVisible(false); 8551ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan } 8568268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } else { 8578268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan switch (mSelectedTab) { 8588268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case FAVORITES: 8598268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // TODO: Fall through until we determine what the menu items should be for 8608268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // this tab 8618268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case CONTACTS: 8628268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan addContactMenu.setVisible(true); 8638268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan addGroupMenu.setVisible(false); 8648268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan break; 8658268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case GROUPS: 8668268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan addContactMenu.setVisible(false); 8678268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan addGroupMenu.setVisible(true); 8688268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan break; 8698268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 870e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov } 871e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 8728268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan MenuItem settings = menu.findItem(R.id.menu_settings); 8738268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan if (settings != null) { 8748268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan settings.setVisible(!ContactsPreferenceActivity.isEmpty(this)); 875e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov } 876e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov 877d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 8787aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 8797aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 8807aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 8817aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 8827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project switch (item.getItemId()) { 883c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov case R.id.menu_settings: { 884c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov final Intent intent = new Intent(this, ContactsPreferenceActivity.class); 885c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann startActivity(intent); 8867aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 887d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 888b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan case R.id.menu_contacts_filter: { 889b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan final Intent intent = new Intent(this, CustomContactListFilterActivity.class); 890b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER); 891b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return true; 892b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan } 893d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_search: { 8948e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov onSearchRequested(); 8957aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 896d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 8978268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case R.id.menu_add_contact: { 898d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 89922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT); 900d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 901d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 9028268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan case R.id.menu_add_group: { 9038268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan // TODO: Hook up "new group" functionality 9048268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan Toast.makeText(this, "NEW GROUP", Toast.LENGTH_SHORT).show(); 9058268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan return true; 9068268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan } 90749d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey case R.id.menu_import_export: { 908261cd5650d07fbc41ea8f19d4e422094612d1454Daniel Lehmann ImportExportDialogFragment.show(getFragmentManager()); 909d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 910d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 911d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_accounts: { 912d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS); 913fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { 914d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey ContactsContract.AUTHORITY 915d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey }); 9161fbcbd1053c72e165009ad9a7d735dd2c0755c36Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 917d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey startActivity(intent); 918d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 919d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 9207aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9217aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return false; 9227aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9237aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9248e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov @Override 9258e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, 9268e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov boolean globalSearch) { 927691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov if (mListFragment != null && mListFragment.isAdded() && !globalSearch) { 928d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov mListFragment.startSearch(initialQuery); 929691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov } else { 930691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch); 931db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov } 932db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov } 933db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov 93449d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey @Override 935d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov protected void onActivityResult(int requestCode, int resultCode, Intent data) { 936d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov switch (requestCode) { 9376e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov case SUBACTIVITY_CUSTOMIZE_FILTER: { 9386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov if (resultCode == Activity.RESULT_OK) { 9396e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov mContactListFilterController.selectCustomFilter(); 9406e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 9416e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov break; 9426e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov } 9438c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov 944d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov case SUBACTIVITY_EDIT_CONTACT: 94522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann case SUBACTIVITY_NEW_CONTACT: { 946be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan if (resultCode == RESULT_OK && mContentPaneDisplayed) { 9476e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov mRequest.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT); 948a5a2744ab8102cf4ff5fbd3e1fa074a45257b3ddDmitri Plotnikov mListFragment.reloadDataAndSetSelectedUri(data.getData()); 94922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann } 95022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann break; 95122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann } 952d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 9537aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // TODO: Using the new startActivityWithResultFromFragment API this should not be needed 9547aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // anymore 955e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER: 956d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (resultCode == RESULT_OK) { 957e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.onPickerResult(data); 958d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 959d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 960d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// TODO fix or remove multipicker code 961d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) { 9621ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// // Finish the activity if the sub activity was canceled as back key is used 9631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// // to confirm user selection in MODE_PICK_MULTIPLE_PHONES. 9641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// finish(); 9651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// break; 967d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 968d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 9697aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9707aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 9717aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 972502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov ContextMenuAdapter menuAdapter = mListFragment.getContextMenuAdapter(); 973502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov if (menuAdapter != null) { 974502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov return menuAdapter.onContextItemSelected(item); 9757aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9767aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9777aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return super.onContextItemSelected(item); 9787aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9797aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 9807aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 9817aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 9821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // TODO move to the fragment 9837aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project switch (keyCode) { 9841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// case KeyEvent.KEYCODE_CALL: { 9851ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (callSelection()) { 9861ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// return true; 9871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 9881ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// break; 9891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 990db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov 9917aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project case KeyEvent.KEYCODE_DEL: { 9926c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov if (deleteSelection()) { 9937aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 9947aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9957aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project break; 9967aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 9977bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann default: { 9987bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann // Bring up the search UI if the user starts typing 9997bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann final int unicodeChar = event.getUnicodeChar(); 10004f3aa85131e16594fef22ca60439f4320016767fDaniel Lehmann if (unicodeChar != 0 && !Character.isWhitespace(unicodeChar)) { 10017bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann String query = new String(new int[]{ unicodeChar }, 0, 1); 1002b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan if (!mActionBarAdapter.isSearchMode()) { 1003b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setQueryString(query); 1004b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan mActionBarAdapter.setSearchMode(true); 1005b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan return true; 10067bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } else if (!mRequest.isSearchMode()) { 10077bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann if (!mSearchInitiated) { 10087bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann mSearchInitiated = true; 10097bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann startSearch(query, false, null, false); 10107bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann return true; 10117bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 10127bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 10137bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 10147bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 10157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 10167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 10177aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return super.onKeyDown(keyCode, event); 10187aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 1019ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov 1020ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov @Override 1021ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov public void onBackPressed() { 1022ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov if (mSearchMode && mActionBarAdapter != null) { 1023ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov mActionBarAdapter.setSearchMode(false); 1024ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } else { 1025ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov super.onBackPressed(); 1026ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 1027ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov } 10287aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 10296c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov private boolean deleteSelection() { 10301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // TODO move to the fragment 10311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (mActionCode == ContactsRequest.ACTION_DEFAULT) { 10321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// final int position = mListView.getSelectedItemPosition(); 10331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (position != ListView.INVALID_POSITION) { 10341ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// Uri contactUri = getContactUri(position); 10351ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (contactUri != null) { 10361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// doContactDelete(contactUri); 10371ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// return true; 10381ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 10391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 10401ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 10416c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov return false; 10426c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov } 10436c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov 104408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 104508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov protected void onSaveInstanceState(Bundle outState) { 104608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov super.onSaveInstanceState(outState); 104715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov outState.putBoolean(KEY_SEARCH_MODE, mSearchMode); 1048fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mActionBarAdapter != null) { 1049fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.onSaveInstanceState(outState); 105008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 105108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 105208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 1053fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov @Override 1054fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov protected void onRestoreInstanceState(Bundle inState) { 1055fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov super.onRestoreInstanceState(inState); 1056fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mSearchMode = inState.getBoolean(KEY_SEARCH_MODE); 1057fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov if (mActionBarAdapter != null) { 1058fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov mActionBarAdapter.onRestoreInstanceState(inState); 1059fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 1060fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov } 1061fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov 10623391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann @Override 10633391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann public DialogManager getDialogManager() { 10643391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann return mDialogManager; 10653391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann } 1066ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 1067ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov // Visible for testing 1068ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov public ContactBrowseListFragment getListFragment() { 1069ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov return mListFragment; 1070ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 1071ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 1072ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov // Visible for testing 1073ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov public ContactDetailFragment getDetailFragment() { 1074be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan return mContactDetailFragment; 1075ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 10767aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project} 1077