ContactPickerFragment.java revision d3758b00601ce3ff8c4336b45cc1249806e52c13
1732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov/* 2732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 3732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * 4732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * you may not use this file except in compliance with the License. 6732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * You may obtain a copy of the License at 7732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * 8732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * 10732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * See the License for the specific language governing permissions and 14732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * limitations under the License. 15732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov */ 16732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovpackage com.android.contacts.list; 17732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 18d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikovimport com.android.contacts.ContactsSearchManager; 19732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.R; 208a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikovimport com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener; 21732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 228a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikovimport android.content.Intent; 238a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikovimport android.net.Uri; 24732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport android.view.LayoutInflater; 25732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport android.view.View; 26732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport android.view.ViewGroup; 27b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikovimport android.widget.AdapterView; 28732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 29732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov/** 30416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov * Fragment for the contact list used for browsing contacts (as compared to 31416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov * picking a contact with one of the PICK or SHORTCUT intents). 32732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov */ 33413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikovpublic class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter> 348a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov implements OnShortcutIntentCreatedListener { 35732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 36416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov private OnContactPickerActionListener mListener; 37732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov private boolean mCreateContactEnabled; 388a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov private boolean mShortcutRequested; 39732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 40d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov public ContactPickerFragment() { 41d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov setPhotoLoaderEnabled(true); 42d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov setSectionHeaderDisplayEnabled(true); 43d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov setAizyEnabled(true); 44d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov } 45d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov 46416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov public void setOnContactPickerActionListener(OnContactPickerActionListener listener) { 47732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov mListener = listener; 48732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 49732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 508a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov public boolean isCreateContactEnabled() { 518a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov return mCreateContactEnabled; 528a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov } 538a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 54b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov public void setCreateContactEnabled(boolean flag) { 55b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov this.mCreateContactEnabled = flag; 56b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } 57b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov 588a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov public boolean isShortcutRequested() { 598a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov return mShortcutRequested; 608a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov } 618a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 628a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov public void setShortcutRequested(boolean flag) { 638a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov mShortcutRequested = flag; 64b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } 65b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov 66b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov @Override 67bba62ac4a2d519be8e4896261d14b168fa49fbdfDmitri Plotnikov protected void onCreateView(LayoutInflater inflater, ViewGroup container) { 68bba62ac4a2d519be8e4896261d14b168fa49fbdfDmitri Plotnikov super.onCreateView(inflater, container); 69b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov if (mCreateContactEnabled) { 70b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov getListView().addHeaderView(inflater.inflate(R.layout.create_new_contact, null, false)); 71b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } 72b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } 73b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov 74732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov @Override 75b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 76b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov if (position == 0 && !isSearchMode() && mCreateContactEnabled) { 77b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov mListener.onCreateNewContactAction(); 78b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } else { 79b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov super.onItemClick(parent, view, position, id); 80b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } 81b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov } 82b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov 83b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov @Override 84732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov protected void onItemClick(int position, long id) { 85d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov Uri uri; 86d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (isLegacyCompatibilityMode()) { 87d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position); 88416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov } else { 89d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov uri = ((ContactListAdapter)getAdapter()).getContactUri(position); 90d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 91d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (mShortcutRequested) { 92d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this); 93d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov builder.createContactShortcutIntent(uri); 94d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } else { 95d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov mListener.onPickContactAction(uri); 96732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 97732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 98732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 99732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov @Override 100413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov protected ContactEntryListAdapter createListAdapter() { 1011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (!isLegacyCompatibilityMode()) { 102413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov ContactListAdapter adapter = new DefaultContactListAdapter(getActivity()); 103413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov adapter.setSectionHeaderDisplayEnabled(true); 104413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov adapter.setDisplayPhotos(true); 105413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov adapter.setQuickContactEnabled(false); 106413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov return adapter; 107413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov } else { 108413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity()); 109413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov adapter.setSectionHeaderDisplayEnabled(false); 110413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov adapter.setDisplayPhotos(false); 111413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov return adapter; 112413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov } 113413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov } 114b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov 115413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov @Override 116413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov protected void configureAdapter() { 117413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov super.configureAdapter(); 118d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 119413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov ContactEntryListAdapter adapter = getAdapter(); 120d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov if (adapter instanceof DefaultContactListAdapter) { 121d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov ((DefaultContactListAdapter)adapter).setVisibleContactsOnly(true); 122d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 123e44b043f8a49c0974bd2f705f98ac3277aaf1b67Dmitri Plotnikov 12468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov // If "Create new contact" is shown, don't display the empty list UI 12568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov adapter.setEmptyListEnabled(!isCreateContactEnabled()); 126732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 127732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov 128732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov @Override 129732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov protected View inflateView(LayoutInflater inflater, ViewGroup container) { 130d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov return inflater.inflate(R.layout.contacts_list_content, null); 131732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov } 1328a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov 13368e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov @Override 13468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov protected void prepareEmptyView() { 13568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov if (isSearchMode()) { 13668e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov return; 13768e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else if (isSearchResultsMode()) { 13868e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noMatchingContacts); 13968e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else if (isSyncActive()) { 14068e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov if (mShortcutRequested) { 14168e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov // Help text is the same no matter whether there is SIM or not. 14268e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noContactsHelpTextWithSyncForCreateShortcut); 14368e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else if (hasIccCard()) { 14468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noContactsHelpTextWithSync); 14568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else { 14668e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noContactsNoSimHelpTextWithSync); 14768e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } 14868e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else { 14968e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov if (mShortcutRequested) { 15068e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov // Help text is the same no matter whether there is SIM or not. 15168e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noContactsHelpTextWithSyncForCreateShortcut); 15268e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else if (hasIccCard()) { 15368e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noContactsHelpText); 15468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } else { 15568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov setEmptyText(R.string.noContactsNoSimHelpText); 15668e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } 15768e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } 15868e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov } 15968e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov 1608a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) { 1618a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov mListener.onShortcutIntentCreated(shortcutIntent); 1628a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov } 163d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov 164d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov @Override 165d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov public void startSearch(String initialQuery) { 166d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov ContactsSearchManager.startSearchForResult(getActivity(), initialQuery, 167d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov ACTIVITY_REQUEST_CODE_FILTER, getContactsRequest()); 168d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov } 169732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov} 170