JoinContactListFragment.java revision fec29c7320c6c45aff69dbd6ec0edb267fb402f4
16e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov/* 26e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 36e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * 46e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 56e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * you may not use this file except in compliance with the License. 66e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * You may obtain a copy of the License at 76e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * 86e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 96e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * 106e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 116e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 126e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * See the License for the specific language governing permissions and 146e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * limitations under the License. 156e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov */ 166e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovpackage com.android.contacts.list; 176e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 18e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport com.android.contacts.ContactsSearchManager; 19caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikovimport com.android.contacts.R; 206e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 21e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.app.Activity; 22e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikovimport android.app.LoaderManager.LoaderCallbacks; 23e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.content.ContentUris; 243c46291ef057eaf7b7f8ca5971e59bebe734a660Jeff Hamiltonimport android.content.CursorLoader; 25e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport android.content.Intent; 263c46291ef057eaf7b7f8ca5971e59bebe734a660Jeff Hamiltonimport android.content.Loader; 27e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.database.Cursor; 28e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.os.Bundle; 29e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 30caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikovimport android.view.LayoutInflater; 31caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikovimport android.view.View; 3259fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport android.view.ViewGroup; 33e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.widget.TextView; 346e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 356e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov/** 3659fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikov * Fragment for the Join Contact list. 376e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov */ 38e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovpublic class JoinContactListFragment extends ContactEntryListFragment<JoinContactListAdapter> { 39e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 40e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov private static final int DISPLAY_NAME_LOADER = -2; 41e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 42e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private OnContactPickerActionListener mListener; 43e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private long mTargetContactId; 44e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private boolean mAllContactsListShown = false; 45e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 46e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov private LoaderCallbacks<Cursor> mLoaderCallbacks = new LoaderCallbacks<Cursor>() { 47e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov 48e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov @Override 49e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov public Loader<Cursor> onCreateLoader(int id, Bundle args) { 50e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov switch (id) { 51e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov case DISPLAY_NAME_LOADER: { 52e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov // Loader for the display name of the target contact 53e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov return new CursorLoader(getActivity(), 54e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov ContentUris.withAppendedId(Contacts.CONTENT_URI, mTargetContactId), 55e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov new String[] { Contacts.DISPLAY_NAME }, null, null, null); 56e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 57e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov case JoinContactListAdapter.PARTITION_ALL_CONTACTS: { 58e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov JoinContactLoader loader = new JoinContactLoader(getActivity()); 59e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov JoinContactListAdapter adapter = getAdapter(); 60e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov if (adapter != null) { 61e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov adapter.configureLoader(loader, 0); 62e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 63e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov return loader; 64e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 65e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 66e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov throw new IllegalArgumentException("No loader for ID=" + id); 67e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 68e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov 69e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov @Override 70e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 71e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov switch (loader.getId()) { 72e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov case DISPLAY_NAME_LOADER: { 73e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov if (data != null && data.moveToFirst()) { 74e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov showTargetContactName(data.getString(0)); 75e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 76e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov break; 77e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 78e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov case JoinContactListAdapter.PARTITION_ALL_CONTACTS: { 79e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov setAizyEnabled(mAllContactsListShown); 80e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov 81e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov JoinContactListAdapter adapter = getAdapter(); 82e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov Cursor suggestionsCursor = ((JoinContactLoader)loader).getSuggestionsCursor(); 83e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov adapter.setSuggestionsCursor(suggestionsCursor); 84e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov onPartitionLoaded(JoinContactListAdapter.PARTITION_ALL_CONTACTS, data); 85e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov break; 86e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 87e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 88e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov } 89e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov }; 90e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov 91e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public JoinContactListFragment() { 92e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov setPhotoLoaderEnabled(true); 93e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov setSectionHeaderDisplayEnabled(true); 94e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov setAizyEnabled(false); 95e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 96e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 97e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setOnContactPickerActionListener(OnContactPickerActionListener listener) { 98e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov mListener = listener; 99e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 100e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 101e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 102fec29c7320c6c45aff69dbd6ec0edb267fb402f4Daniel Lehmann protected void startLoading() { 103e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov getLoaderManager().initLoader(DISPLAY_NAME_LOADER, null, mLoaderCallbacks); 104e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov getLoaderManager().initLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS, 105e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov null, mLoaderCallbacks); 106e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 107e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 108e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov private void showTargetContactName(String displayName) { 109e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov Activity activity = getActivity(); 110e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov TextView blurbView = (TextView)activity.findViewById(R.id.join_contact_blurb); 111e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov String blurb = activity.getString(R.string.blurbJoinContactDataWith, displayName); 112e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov blurbView.setText(blurb); 113e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 114e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 115e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setTargetContactId(long targetContactId) { 116e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov mTargetContactId = targetContactId; 117e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 118e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 119e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 120e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public JoinContactListAdapter createListAdapter() { 121e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return new JoinContactListAdapter(getActivity()); 122e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 1236e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1246e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 125e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov protected void configureAdapter() { 126e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov super.configureAdapter(); 127e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov JoinContactListAdapter adapter = getAdapter(); 128e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov adapter.setAllContactsListShown(mAllContactsListShown); 129e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov adapter.setTargetContactId(mTargetContactId); 1306e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1316e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1326e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 13359fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikov protected View inflateView(LayoutInflater inflater, ViewGroup container) { 13459fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikov return inflater.inflate(R.layout.contacts_list_content_join, null); 1356e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 136caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov 137caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov @Override 13859fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikov protected void onItemClick(int position, long id) { 139e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov JoinContactListAdapter adapter = getAdapter(); 140e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov int partition = adapter.getPartitionForPosition(position); 141e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (partition == JoinContactListAdapter.PARTITION_SHOW_ALL_CONTACTS) { 142e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov mAllContactsListShown = true; 143e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov configureAdapter(); 144e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov getLoaderManager().restartLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS, 145e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov null, mLoaderCallbacks); 146e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } else { 147e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov mListener.onPickContactAction(adapter.getContactUri(position)); 148e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 149caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov } 150e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 151e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 152e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public void startSearch(String initialQuery) { 153e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov ContactsRequest request = new ContactsRequest(); 154e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_CONTACT); 1551c5c8e23849ac3babb2bdec65ec63c190a5c40dfDmitri Plotnikov request.setDirectorySearchEnabled(false); 156e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov ContactsSearchManager.startSearchForResult(getActivity(), initialQuery, 157e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov ACTIVITY_REQUEST_CODE_PICKER, request); 158e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 159e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 160e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 161e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public void onPickerResult(Intent data) { 162e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListener.onPickContactAction(data.getData()); 163e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 1646e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov} 165