PeopleActivity.java revision 7aa9b2888e4f630c6311458ea27ecbc13a527b00
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 1927834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovimport com.android.contacts.R; 209692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport com.android.contacts.interactions.ContactDeletionInteraction; 21aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikovimport com.android.contacts.interactions.ImportExportInteraction; 22b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikovimport com.android.contacts.interactions.PhoneNumberInteraction; 23416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikovimport com.android.contacts.list.ContactBrowseListContextMenuAdapter; 2408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment; 2559fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport com.android.contacts.list.ContactEntryListFragment; 260906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovimport com.android.contacts.list.ContactsIntentResolver; 271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 28238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikovimport com.android.contacts.list.DefaultContactBrowseListFragment; 29732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.list.OnContactBrowserActionListener; 30238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikovimport com.android.contacts.list.StrequentContactListFragment; 311ea45f2fa000d6f35b3b2918d4d22dc5aa7b8f4fDmitri Plotnikovimport com.android.contacts.ui.ContactsPreferencesActivity; 323391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmannimport com.android.contacts.util.DialogManager; 33424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport com.android.contacts.views.detail.ContactDetailFragment; 34c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikovimport com.android.contacts.views.detail.ContactNoneFragment; 35424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport com.android.contacts.views.editor.ContactEditorFragment; 361323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikovimport com.android.contacts.widget.ContextMenuAdapter; 3757cf30f316b8013e172150d1ad0e197be6b46b87Tadashi G. Takaoka 384af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.app.ActionBar; 397aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.app.Activity; 4049d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkeyimport android.app.Dialog; 4192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikovimport android.app.Fragment; 427aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.ContentValues; 437aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.Intent; 447aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.net.Uri; 457aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.os.Bundle; 46d7c4af2b932ffc65476fb1ac6d74feac74b48f3cDmitri Plotnikovimport android.provider.ContactsContract; 47e05296673449dc6686c4fec4dd2e98ab47a78056Jeff Hamiltonimport android.provider.ContactsContract.Contacts; 489692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport android.provider.Settings; 49424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.text.TextUtils; 507aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.KeyEvent; 517aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.Menu; 52d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkeyimport android.view.MenuInflater; 537aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.MenuItem; 547aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.View; 554af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.view.Window; 56424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.widget.Toast; 577aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 587aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/** 59bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * Displays a list to browse contacts. For xlarge screens, this also displays a detail-pane on 60bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * the right 617aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */ 62cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikovpublic class ContactBrowserActivity extends Activity 63fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener, 643391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann DialogManager.DialogShowingViewActivity { 6557d27da940983fba40d8e3a6d8b99a57b48419eaDmitri Plotnikov 66bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann private static final String TAG = "ContactBrowserActivity"; 677aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 6892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private static final String KEY_MODE = "mode"; 6992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 7022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann private static final int SUBACTIVITY_NEW_CONTACT = 2; 717aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann private static final int SUBACTIVITY_DISPLAY_GROUP = 3; 72032bb36086d55529b59cbd6ea03d2f9b6cfe36afDmitri Plotnikov 733b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann private DialogManager mDialogManager = new DialogManager(this); 743391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann 75ac0f783adb82ee8056e742fae4994e848e82ea3dDmitri Plotnikov private ContactsIntentResolver mIntentResolver; 76fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactsRequest mRequest; 77caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov 78fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private boolean mHasActionBar; 79fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ActionBarAdapter mActionBarAdapter; 807c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov 81fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov /** 82fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Contact browser mode, see {@link ContactBrowserMode}. 83fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov */ 84fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private int mMode = -1; 85fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov 86fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactBrowseListFragment mListFragment; 87c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov private ContactNoneFragment mEmptyFragment; 88c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 89fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private boolean mContactContentDisplayed; 90424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private ContactDetailFragment mDetailFragment; 91424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private DetailFragmentListener mDetailFragmentListener = new DetailFragmentListener(); 92424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 93424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private ContactEditorFragment mEditorFragment; 94424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private EditorFragmentListener mEditorFragmentListener = new EditorFragmentListener(); 95424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 96fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private PhoneNumberInteraction mPhoneNumberCallInteraction; 97fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private PhoneNumberInteraction mSendTextMessageInteraction; 98fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ContactDeletionInteraction mContactDeletionInteraction; 99fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private ImportExportInteraction mImportExportInteraction; 1004af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov 101fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov private boolean mSearchInitiated; 102e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov 103cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikov public ContactBrowserActivity() { 1041540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov mIntentResolver = new ContactsIntentResolver(this); 1056178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1066178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 1077aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 10892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov public void onAttachFragment(Fragment fragment) { 10992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (fragment instanceof ContactBrowseListFragment) { 11092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment = (ContactBrowseListFragment)fragment; 11192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment.setOnContactListActionListener(new ContactBrowserActionListener()); 112d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } else if (fragment instanceof ContactNoneFragment) { 113d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mEmptyFragment = (ContactNoneFragment)fragment; 114d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } else if (fragment instanceof ContactDetailFragment) { 115d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mDetailFragment = (ContactDetailFragment)fragment; 116d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mDetailFragment.setListener(mDetailFragmentListener); 117d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } else if (fragment instanceof ContactEditorFragment) { 118d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mEditorFragment = (ContactEditorFragment)fragment; 119d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mEditorFragment.setListener(mEditorFragmentListener); 12092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 12192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 12292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 12392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov @Override 12408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov protected void onCreate(Bundle savedState) { 12508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov super.onCreate(savedState); 1267aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 12792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (savedState != null) { 12892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mMode = savedState.getInt(KEY_MODE); 12992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 13092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 1311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Extract relevant information from the intent 1321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov mRequest = mIntentResolver.resolveIntent(getIntent()); 1331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (!mRequest.isValid()) { 1346178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov setResult(RESULT_CANCELED); 1357aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project finish(); 1361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return; 1376178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1386178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 1391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Intent redirect = mRequest.getRedirectIntent(); 1401ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (redirect != null) { 1411ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Need to start a different activity 1426178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov startActivity(redirect); 1437aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project finish(); 1441ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return; 1457aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 1467aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 1471ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov setTitle(mRequest.getActivityTitle()); 148e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov setContentView(R.layout.contact_browser); 1491ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 150e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR); 15165ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov mContactContentDisplayed = findViewById(R.id.detail_container) != null; 15265ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov 153e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mHasActionBar) { 154fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter = new ActionBarAdapter(this); 155fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.onCreate(savedState, mRequest); 156fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.setListener(this); 15708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 158e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov ActionBar actionBar = getActionBar(); 159fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov View navBarView = mActionBarAdapter.onCreateView(getLayoutInflater()); 160e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov actionBar.setCustomNavigationMode(navBarView); 161d364314c460152db7089b304beec81b3675893baDmitri Plotnikov } 16208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 16308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov configureListFragment(); 16408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 165e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mContactContentDisplayed) { 166e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov setupContactDetailFragment(mListFragment.getSelectedContactUri()); 16708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 168e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 16908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 170e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov private void configureListFragment() { 171e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov int mode = -1; 172e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mHasActionBar) { 173fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mode = mActionBarAdapter.getMode(); 174fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mode == ContactBrowserMode.MODE_SEARCH 175fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov && TextUtils.isEmpty(mActionBarAdapter.getQueryString())) { 176fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mode = mActionBarAdapter.getDefaultMode(); 177e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 178e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } else { 179e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov int actionCode = mRequest.getActionCode(); 180e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (actionCode == ContactsRequest.ACTION_FREQUENT || 181e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov actionCode == ContactsRequest.ACTION_STARRED || 182e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov actionCode == ContactsRequest.ACTION_STREQUENT) { 183fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mode = ContactBrowserMode.MODE_FAVORITES; 184e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } else { 185fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mode = ContactBrowserMode.MODE_CONTACTS; 18608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 18808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 189e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov boolean replaceList = (mode != mMode); 190e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (replaceList) { 191e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov closeListFragment(); 192e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mMode = mode; 193e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov switch (mMode) { 194fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov case ContactBrowserMode.MODE_CONTACTS: { 195e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mListFragment = createListFragment(ContactsRequest.ACTION_DEFAULT); 196e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov break; 197e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 198fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov case ContactBrowserMode.MODE_FAVORITES: { 199e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov int favoritesAction = mRequest.getActionCode(); 200e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (favoritesAction == ContactsRequest.ACTION_DEFAULT) { 201e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov favoritesAction = ContactsRequest.ACTION_STREQUENT; 202e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 203e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mListFragment = createListFragment(favoritesAction); 204e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov break; 205e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 206fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov case ContactBrowserMode.MODE_SEARCH: { 207e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mListFragment = createContactSearchFragment(); 208e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov break; 20908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 21208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 213fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mMode == ContactBrowserMode.MODE_SEARCH) { 214fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mListFragment.setQueryString(mActionBarAdapter.getQueryString()); 215cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov } 216cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov 217e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mHasActionBar) { 218fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov Bundle savedStateForMode = mActionBarAdapter.getSavedStateForMode(mMode); 219e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (savedStateForMode != null) { 220e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mListFragment.restoreSavedState(savedStateForMode); 221e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 222e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 223cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov 224e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (replaceList) { 225e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov openFragmentTransaction() 226e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov .replace(R.id.list_container, mListFragment) 227e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov .commit(); 228e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov } 22908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 23008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 23192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov private void closeListFragment() { 23292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov if (mListFragment != null) { 23392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment.setOnContactListActionListener(null); 23492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 235e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mHasActionBar) { 23692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov Bundle state = new Bundle(); 23792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov mListFragment.onSaveInstanceState(state); 238fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.saveStateForMode(mMode, state); 23992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 240e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov 241e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov mListFragment = null; 24292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 24392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov } 24492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov 245d364314c460152db7089b304beec81b3675893baDmitri Plotnikov private void setupContactDetailFragment(Uri contactLookupUri) { 2469cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov 2479cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov // If we are already editing this URI - just continue editing 2489cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov if (mEditorFragment != null && contactLookupUri != null 2499cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov && contactLookupUri.equals(mEditorFragment.getUri())) { 2509cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov return; 2519cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov } 2529cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov 2539cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov if (mDetailFragment != null && contactLookupUri != null 2549cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov && contactLookupUri.equals(mDetailFragment.getUri())) { 2559cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov return; 2569cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov } 2579cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov 258424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov // No editor here 259ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann closeEditorFragment(true); 260424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 261d364314c460152db7089b304beec81b3675893baDmitri Plotnikov if (contactLookupUri != null) { 262c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov // Already showing? Nothing to do 263c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov if (mDetailFragment != null) { 264d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mDetailFragment.loadUri(contactLookupUri); 265c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov return; 266c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 267424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 268c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov closeEmptyFragment(); 269424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 270c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mDetailFragment = new ContactDetailFragment(); 271d364314c460152db7089b304beec81b3675893baDmitri Plotnikov mDetailFragment.loadUri(contactLookupUri); 272c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 273c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov // Nothing showing yet? Create (this happens during Activity-Startup) 274c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov openFragmentTransaction() 275e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov .replace(R.id.detail_container, mDetailFragment) 276c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov .commit(); 277c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } else { 278c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov closeDetailFragment(); 279c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 280c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mEmptyFragment = new ContactNoneFragment(); 281c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov openFragmentTransaction() 282e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov .replace(R.id.detail_container, mEmptyFragment) 283c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov .commit(); 284c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 285424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 286424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 28760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann private void setupContactEditorFragment(Uri contactLookupUri) { 288424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov // No detail view here 289c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov closeDetailFragment(); 290c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov closeEmptyFragment(); 291424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 292424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov // Already showing? Nothing to do 293424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov if (mEditorFragment != null) return; 294424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 295424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov mEditorFragment = new ContactEditorFragment(); 29660ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann mEditorFragment.load(Intent.ACTION_EDIT, contactLookupUri, 29760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann Contacts.CONTENT_ITEM_TYPE, new Bundle()); 298424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 299424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov // Nothing showing yet? Create (this happens during Activity-Startup) 300424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov openFragmentTransaction() 301e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov .replace(R.id.detail_container, mEditorFragment) 302424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov .commit(); 303424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 304424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 305c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov private void closeDetailFragment() { 306c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov if (mDetailFragment != null) { 307c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mDetailFragment.setListener(null); 308c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mDetailFragment = null; 309c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 310c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 311c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 312ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann /** 313ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann * Closes the editor, if it is currently open 314ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann * @param save Whether the changes should be saved. This should always be true, unless 315ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann * this is called from a Revert/Undo button 316ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann */ 317ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann private void closeEditorFragment(boolean save) { 318c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov if (mEditorFragment != null) { 319ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann if (save) mEditorFragment.save(); 320c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mEditorFragment.setListener(null); 321c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mEditorFragment = null; 322c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 323c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 324c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 325c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov private void closeEmptyFragment() { 326c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov mEmptyFragment = null; 327c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov } 328c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov 329fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov /** 330fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Handler for action bar actions. 331fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov */ 332fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov @Override 333fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov public void onAction() { 334e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov configureListFragment(); 335e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov setupContactDetailFragment(mListFragment.getSelectedContactUri()); 336fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov } 337fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov 338ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann @Override 339ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann protected void onPause() { 340ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann super.onPause(); 341ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann 342ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann // if anything was left unsaved, save it now 343ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann closeEditorFragment(true); 344ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann } 345ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann 3461ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov /** 34708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov * Creates the list fragment for the specified mode. 3481ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov */ 34908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private ContactBrowseListFragment createListFragment(int actionCode) { 35008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov switch (actionCode) { 351b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov case ContactsRequest.ACTION_DEFAULT: { 352238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment(); 35308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setContactsRequest(mRequest); 3541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setOnContactListActionListener(new ContactBrowserActionListener()); 3551ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption()); 3564cc85dd15d6546bcb2feb587691bfca3f1654d94Dmitri Plotnikov fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible()); 3571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment)); 3581ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setSearchMode(mRequest.isSearchMode()); 3591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setQueryString(mRequest.getQueryString()); 360e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov fragment.setDirectorySearchEnabled( 361e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov mRequest.isSearchMode() && mRequest.isDirectorySearchEnabled()); 36208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setAizyEnabled(!mRequest.isSearchMode()); 363e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov fragment.setSelectionVisible(mContactContentDisplayed); 36408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return fragment; 3651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 366238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 3671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov case ContactsRequest.ACTION_GROUP: { 3681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov throw new UnsupportedOperationException("Not yet implemented"); 3691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 370238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 3711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov case ContactsRequest.ACTION_STARRED: { 3721ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov StrequentContactListFragment fragment = new StrequentContactListFragment(); 3731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setOnContactListActionListener(new ContactBrowserActionListener()); 3741ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setFrequentlyContactedContactsIncluded(false); 3751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setStarredContactsIncluded(true); 376e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov fragment.setSelectionVisible(mContactContentDisplayed); 37708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return fragment; 3781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 379238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 3801ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov case ContactsRequest.ACTION_FREQUENT: { 3811ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov StrequentContactListFragment fragment = new StrequentContactListFragment(); 3821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setOnContactListActionListener(new ContactBrowserActionListener()); 3831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setFrequentlyContactedContactsIncluded(true); 3841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setStarredContactsIncluded(false); 385e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov fragment.setSelectionVisible(mContactContentDisplayed); 38608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return fragment; 3871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 388238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 3891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov case ContactsRequest.ACTION_STREQUENT: { 3901ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov StrequentContactListFragment fragment = new StrequentContactListFragment(); 3911ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setOnContactListActionListener(new ContactBrowserActionListener()); 3921ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setFrequentlyContactedContactsIncluded(true); 3931ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov fragment.setStarredContactsIncluded(true); 394e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov fragment.setSelectionVisible(mContactContentDisplayed); 39508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return fragment; 3961ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 397238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov 3981ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov default: 39908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov throw new IllegalStateException("Invalid action code: " + actionCode); 4001ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 40108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 40208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 40308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov private ContactBrowseListFragment createContactSearchFragment() { 40408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment(); 40508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setOnContactListActionListener(new ContactBrowserActionListener()); 40608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setDisplayWithPhonesOnlyOption(ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED); 40708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setVisibleContactsRestrictionEnabled(true); 40808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment)); 40908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setSearchMode(true); 41008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setDirectorySearchEnabled(true); 41108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov fragment.setAizyEnabled(false); 4120d5774911ea5885f0bbe6256c1d59719b3ca3e35Dmitri Plotnikov fragment.setSelectionVisible(true); 41308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov return fragment; 4141ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 4151323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikov 4161ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov private final class ContactBrowserActionListener implements OnContactBrowserActionListener { 41760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann public void onViewContactAction(Uri contactLookupUri, boolean force) { 418e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov if (mContactContentDisplayed) { 41960ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann if (force) closeEditorFragment(true); 420cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov mListFragment.setSelectedContactUri(contactLookupUri); 421d364314c460152db7089b304beec81b3675893baDmitri Plotnikov setupContactDetailFragment(contactLookupUri); 422424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } else { 423424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri)); 424424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 4251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 426e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov 4271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onCreateNewContactAction() { 4281ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 4291ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 4301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (extras != null) { 4311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov intent.putExtras(extras); 432416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov } 4331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov startActivity(intent); 4341ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 435416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 4361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onEditContactAction(Uri contactLookupUri) { 43760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann if (mContactContentDisplayed) { 43860ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann closeEditorFragment(true); 43960ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann mListFragment.setSelectedContactUri(contactLookupUri); 44060ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann setupContactEditorFragment(contactLookupUri); 44160ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann } else { 44260ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri); 44360ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann Bundle extras = getIntent().getExtras(); 44460ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann if (extras != null) { 44560ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann intent.putExtras(extras); 44660ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann } 44760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann startActivity(intent); 4481ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 4491ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 450413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov 4511ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onAddToFavoritesAction(Uri contactUri) { 4521ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContentValues values = new ContentValues(1); 4531ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov values.put(Contacts.STARRED, 1); 4541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov getContentResolver().update(contactUri, values, null, null); 4551ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 4568a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 4571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onRemoveFromFavoritesAction(Uri contactUri) { 4581ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContentValues values = new ContentValues(1); 4591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov values.put(Contacts.STARRED, 0); 4601ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov getContentResolver().update(contactUri, values, null, null); 4611ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 462416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 4631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onCallContactAction(Uri contactUri) { 464b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov getPhoneNumberCallInteraction().startInteraction(contactUri); 4651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 466416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 4671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onSmsContactAction(Uri contactUri) { 468b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov getSendTextMessageInteraction().startInteraction(contactUri); 4691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 470e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov 4711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onDeleteContactAction(Uri contactUri) { 4729692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov getContactDeletionInteraction().deleteContact(contactUri); 4731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 4748a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 4751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public void onFinishAction() { 4761ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov onBackPressed(); 4771ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 4781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 479416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov 480424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private class DetailFragmentListener implements ContactDetailFragment.Listener { 48169e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 482424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onContactNotFound() { 48369e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann setupContactDetailFragment(null); 484424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 485424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 48669e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 487424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onEditRequested(Uri contactLookupUri) { 48860ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann setupContactEditorFragment(contactLookupUri); 489424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 490424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 49169e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 492424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void onItemClicked(Intent intent) { 493424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov startActivity(intent); 494424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 495424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 49669e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann @Override 49769e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann public void onDeleteRequested(Uri contactLookupUri) { 49869e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann getContactDeletionInteraction().deleteContact(contactLookupUri); 499424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 500424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 501424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 502424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov private class EditorFragmentListener implements ContactEditorFragment.Listener { 503424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov @Override 50422fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann public void onReverted() { 505ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann final Uri uri = mEditorFragment.getUri(); 506ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann closeEditorFragment(false); 507ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann setupContactDetailFragment(uri); 508424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 509424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 510424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov @Override 51122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann public void onSaveFinished(int resultCode, Intent resultIntent) { 512ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann // it is already saved, so no need to save again here 513ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann final Uri uri = mEditorFragment.getUri(); 514ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann closeEditorFragment(false); 515ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann setupContactDetailFragment(uri); 516424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 517424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 518424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov @Override 51922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann public void onSplit() { 520ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann Toast.makeText(ContactBrowserActivity.this, "closeAfterSplit", 521ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann Toast.LENGTH_LONG).show(); 522424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 523424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 524424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov @Override 52522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann public void onAccountSelectorAborted() { 526cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikov Toast.makeText(ContactBrowserActivity.this, "closeBecauseAccountSelectorAborted", 527424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov Toast.LENGTH_LONG).show(); 528424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 529424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 530424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov @Override 53122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann public void onContactNotFound() { 532cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikov Toast.makeText(ContactBrowserActivity.this, "closeBecauseContactNotFound", 533424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov Toast.LENGTH_LONG).show(); 534424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 535424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 536424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov @Override 537424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov public void setTitleTo(int resourceId) { 538424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 539424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov } 540424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov 541732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov public void startActivityAndForwardResult(final Intent intent) { 542732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 543732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 544732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov // Forward extras to the new activity 545732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov Bundle extras = getIntent().getExtras(); 546732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov if (extras != null) { 547732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov intent.putExtras(extras); 548732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 549732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov startActivity(intent); 550732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov finish(); 551732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 552732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 5537aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 5547aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 555d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey super.onCreateOptionsMenu(menu); 556d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey 557d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov MenuInflater inflater = getMenuInflater(); 558fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mHasActionBar) { 5594af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov inflater.inflate(R.menu.actions, menu); 5604af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov return true; 56108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } else if (mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT || 56208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mRequest.getActionCode() == ContactsRequest.ACTION_STREQUENT) { 5631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov inflater.inflate(R.menu.list, menu); 564d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov return true; 565d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } else if (!mListFragment.isSearchMode()) { 566d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov inflater.inflate(R.menu.search, menu); 567d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov return true; 568d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } else { 569d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov return false; 5707aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 571d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 5727aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 573d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey @Override 574d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey public boolean onPrepareOptionsMenu(Menu menu) { 575d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov MenuItem displayGroups = menu.findItem(R.id.menu_display_groups); 576d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (displayGroups != null) { 577d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov displayGroups.setVisible( 57808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT); 5794af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov } 580d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 5817aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 5827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 5837aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 5847aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 5857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project switch (item.getItemId()) { 586d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_display_groups: { 5871ea45f2fa000d6f35b3b2918d4d22dc5aa7b8f4fDmitri Plotnikov final Intent intent = new Intent(this, ContactsPreferencesActivity.class); 588d5c5b9a8ec06b510066b8f814bda739a8fadcf7eJeff Sharkey startActivityForResult(intent, SUBACTIVITY_DISPLAY_GROUP); 5897aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 590d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 591d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_search: { 5928e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov onSearchRequested(); 5937aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 594d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 595d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_add: { 596d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 59722fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT); 598d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 599d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 60049d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey case R.id.menu_import_export: { 601aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov getImportExportInteraction().startInteraction(); 602d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 603d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 604d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey case R.id.menu_accounts: { 605d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS); 606fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { 607d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey ContactsContract.AUTHORITY 608d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey }); 609d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey startActivity(intent); 610d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey return true; 611d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey } 6127aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 6137aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return false; 6147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 6157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 6168e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov @Override 6178e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, 6188e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov boolean globalSearch) { 61912def9de851b8803b95038694563770104306864Dmitri Plotnikov// TODO 62012def9de851b8803b95038694563770104306864Dmitri Plotnikov// if (mProviderStatus != ProviderStatus.STATUS_NORMAL) { 62112def9de851b8803b95038694563770104306864Dmitri Plotnikov// return; 62212def9de851b8803b95038694563770104306864Dmitri Plotnikov// } 6233b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov 6248e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov if (globalSearch) { 6258e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch); 6268e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov } else { 627d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov mListFragment.startSearch(initialQuery); 628db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov } 629db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov } 630db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov 63149d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey @Override 6323b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov protected Dialog onCreateDialog(int id, Bundle bundle) { 6333b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, bundle); 6343391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann 6359692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov Dialog dialog = getContactDeletionInteraction().onCreateDialog(id, bundle); 6369692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov if (dialog != null) { 6379692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov return dialog; 6389692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov } 6399692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov 640b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov dialog = getPhoneNumberCallInteraction().onCreateDialog(id, bundle); 641b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (dialog != null) { 642b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return dialog; 643b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 644b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 645b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov dialog = getSendTextMessageInteraction().onCreateDialog(id, bundle); 646b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (dialog != null) { 647b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return dialog; 648b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 649b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 650aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov dialog = getImportExportInteraction().onCreateDialog(id, bundle); 651aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov if (dialog != null) { 652aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov return dialog; 65349d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey } 654aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov 6553b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov return super.onCreateDialog(id, bundle); 65649d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey } 65749d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey 6589692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov @Override 6599692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov protected void onPrepareDialog(int id, Dialog dialog, Bundle bundle) { 6609692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov if (getContactDeletionInteraction().onPrepareDialog(id, dialog, bundle)) { 6619692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov return; 6629692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov } 6639692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov 664b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (getPhoneNumberCallInteraction().onPrepareDialog(id, dialog, bundle)) { 665b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return; 666b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 667b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 668b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (getSendTextMessageInteraction().onPrepareDialog(id, dialog, bundle)) { 669b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return; 670b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 671b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 6729692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov super.onPrepareDialog(id, dialog, bundle); 6739692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov } 674d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey 675d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov @Override 676d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov protected void onActivityResult(int requestCode, int resultCode, Intent data) { 677d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov switch (requestCode) { 67822fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann case SUBACTIVITY_NEW_CONTACT: { 67922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann if (resultCode == RESULT_OK && mContactContentDisplayed) { 68022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann final Uri newContactUri = data.getData(); 68122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann mListFragment.setSelectedContactUri(newContactUri); 68222fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann setupContactDetailFragment(newContactUri); 68322fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann } 68422fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann break; 68522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann } 686d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 6877aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann case SUBACTIVITY_DISPLAY_GROUP: 6887aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // TODO: Force the ListFragment to reload its setting and update (don't lookup 6897aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // directories here) 6907aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann break; 6917aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann 6927aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // TODO: Using the new startActivityWithResultFromFragment API this should not be needed 6937aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann // anymore 694e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER: 695d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (resultCode == RESULT_OK) { 696e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.onPickerResult(data); 697d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 698d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 699d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// TODO fix or remove multipicker code 700d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) { 7011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// // Finish the activity if the sub activity was canceled as back key is used 7021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// // to confirm user selection in MODE_PICK_MULTIPLE_PHONES. 7031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// finish(); 7041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 7051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// break; 706d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 707d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 7087aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 7097aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 7107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 711502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov ContextMenuAdapter menuAdapter = mListFragment.getContextMenuAdapter(); 712502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov if (menuAdapter != null) { 713502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov return menuAdapter.onContextItemSelected(item); 7147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 7167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return super.onContextItemSelected(item); 7177aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7187aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 7197aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project @Override 7207aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 7211ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // TODO move to the fragment 7227aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project switch (keyCode) { 7231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// case KeyEvent.KEYCODE_CALL: { 7241ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (callSelection()) { 7251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// return true; 7261ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 7271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// break; 7281ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 729db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov 7307aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project case KeyEvent.KEYCODE_DEL: { 7316c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov if (deleteSelection()) { 7327aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return true; 7337aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7347aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project break; 7357aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7367bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann default: { 7377bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann // Bring up the search UI if the user starts typing 7387bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann final int unicodeChar = event.getUnicodeChar(); 7397bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann 7407bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann if (unicodeChar != 0) { 7417bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann String query = new String(new int[]{ unicodeChar }, 0, 1); 742fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mHasActionBar) { 743fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mActionBarAdapter.getMode() != ContactBrowserMode.MODE_SEARCH) { 744fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.setQueryString(query); 745fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.setMode(ContactBrowserMode.MODE_SEARCH); 7467bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann return true; 7477bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 7487bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } else if (!mRequest.isSearchMode()) { 7497bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann if (!mSearchInitiated) { 7507bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann mSearchInitiated = true; 7517bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann startSearch(query, false, null, false); 7527bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann return true; 7537bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 7547bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 7557bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 7567bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann } 7577aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7587aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 7597aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project return super.onKeyDown(keyCode, event); 7607aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project } 7617aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project 7626c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov private boolean deleteSelection() { 7631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // TODO move to the fragment 7641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (mActionCode == ContactsRequest.ACTION_DEFAULT) { 7651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// final int position = mListView.getSelectedItemPosition(); 7661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (position != ListView.INVALID_POSITION) { 7671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// Uri contactUri = getContactUri(position); 7681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (contactUri != null) { 7691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// doContactDelete(contactUri); 7701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// return true; 7711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 7721ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 7731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 7746c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov return false; 7756c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov } 7766c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov 77708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov @Override 77808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov protected void onSaveInstanceState(Bundle outState) { 77908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov super.onSaveInstanceState(outState); 78092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov outState.putInt(KEY_MODE, mMode); 781fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov if (mActionBarAdapter != null) { 782fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov mActionBarAdapter.onSaveInstanceState(outState); 78308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 78408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov } 78508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov 786b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov private PhoneNumberInteraction getPhoneNumberCallInteraction() { 787b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (mPhoneNumberCallInteraction == null) { 788b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov mPhoneNumberCallInteraction = new PhoneNumberInteraction(this, false, null); 789b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 790b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return mPhoneNumberCallInteraction; 791b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov } 792b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov 793b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov private PhoneNumberInteraction getSendTextMessageInteraction() { 794b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov if (mSendTextMessageInteraction == null) { 795b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov mSendTextMessageInteraction = new PhoneNumberInteraction(this, true, null); 7967c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov } 797b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov return mSendTextMessageInteraction; 7987c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov } 7999692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov 8009692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov private ContactDeletionInteraction getContactDeletionInteraction() { 8019692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov if (mContactDeletionInteraction == null) { 8029692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov mContactDeletionInteraction = new ContactDeletionInteraction(); 8039692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov mContactDeletionInteraction.attachToActivity(this); 8049692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov } 8059692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov return mContactDeletionInteraction; 8069692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov } 807aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov 808aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov private ImportExportInteraction getImportExportInteraction() { 809aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov if (mImportExportInteraction == null) { 810aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov mImportExportInteraction = new ImportExportInteraction(this); 811aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov } 812aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov return mImportExportInteraction; 813aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov } 8143391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann 8153391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann @Override 8163391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann public DialogManager getDialogManager() { 8173391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann return mDialogManager; 8183391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann } 8197aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project} 820