JoinContactListAdapter.java revision d8f84e076b762f063ae498c297d6f02574099dd2
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 186e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport com.android.contacts.R; 196e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 20e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.content.Context; 213c46291ef057eaf7b7f8ca5971e59bebe734a660Jeff Hamiltonimport android.content.CursorLoader; 226e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.database.Cursor; 23e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.database.MatrixCursor; 24e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.net.Uri; 25e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.net.Uri.Builder; 26e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract; 27e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 28e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts.AggregationSuggestions; 2923411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikovimport android.provider.ContactsContract.Directory; 30e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.text.TextUtils; 316e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.LayoutInflater; 326e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.View; 336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.ViewGroup; 346e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.widget.TextView; 356e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 36e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovpublic class JoinContactListAdapter extends ContactListAdapter { 37e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 38e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov /** Maximum number of suggestions shown for joining aggregates */ 39e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private static final int MAX_SUGGESTIONS = 4; 40e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 41e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_SUGGESTIONS = 0; 42e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_SHOW_ALL_CONTACTS = 1; 43e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_ALL_CONTACTS = 2; 44e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 45e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private long mTargetContactId; 466e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 47e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov private int mShowAllContactsViewType; 48e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 496e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov /** 506e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * Determines whether we display a list item with the label 516e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * "Show all contacts" or actually show all contacts 526e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov */ 53e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private boolean mAllContactsListShown; 546e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 55e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 56e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public JoinContactListAdapter(Context context) { 576e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov super(context); 58e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov setPinnedPartitionHeadersEnabled(true); 59e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov setSectionHeaderDisplayEnabled(true); 60e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov setIndexedPartition(PARTITION_ALL_CONTACTS); 614d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE); 622475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov mShowAllContactsViewType = getViewTypeCount() - 1; 63e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 64e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 65e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov @Override 66e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void addPartitions() { 67e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 68e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 0: suggestions 69e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov addPartition(false, true); 70e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 71e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 1: "Show all contacts" 72e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov addPartition(false, false); 73e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 74e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 2: All contacts 75e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov addPartition(createDefaultDirectoryPartition()); 766e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 776e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 78e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setTargetContactId(long targetContactId) { 79e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov this.mTargetContactId = targetContactId; 806e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 816e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 82e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 83d5061fe322880ee993ea18db331fbc1110ddc538Dmitri Plotnikov public void configureLoader(CursorLoader cursorLoader, long directoryId) { 84e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov JoinContactLoader loader = (JoinContactLoader)cursorLoader; 85e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov loader.setLoadSuggestionsAndAllContacts(mAllContactsListShown); 86e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 87e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov Builder builder = Contacts.CONTENT_URI.buildUpon(); 88e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(String.valueOf(mTargetContactId)); 89e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(AggregationSuggestions.CONTENT_DIRECTORY); 90e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 91e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov String filter = getQueryString(); 92e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov if (!TextUtils.isEmpty(filter)) { 93e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(Uri.encode(filter)); 94e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 95e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 96e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendQueryParameter("limit", String.valueOf(MAX_SUGGESTIONS)); 97e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 98e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov loader.setSuggestionUri(builder.build()); 99e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 100e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov // TODO simplify projection 101f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov loader.setProjection(PROJECTION_CONTACT); 10223411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov Uri allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_URI).buildUpon() 10323411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov .appendQueryParameter( 10423411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)) 10523411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov .build(); 10623411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov loader.setUri(allContactsUri); 10723411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov loader.setSelection(Contacts._ID + "!=?"); 108e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSelectionArgs(new String[]{String.valueOf(mTargetContactId)}); 109e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) { 110e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSortOrder(Contacts.SORT_KEY_PRIMARY); 111e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } else { 112e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSortOrder(Contacts.SORT_KEY_ALTERNATIVE); 113e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 114e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 115e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 116e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 117e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public boolean isEmpty() { 118e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return false; 119e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 120e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 121e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public boolean isAllContactsListShown() { 122e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return mAllContactsListShown; 123e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 124e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 125e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setAllContactsListShown(boolean flag) { 126e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov mAllContactsListShown = flag; 1276e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1286e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1296e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov public void setSuggestionsCursor(Cursor cursor) { 130e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SUGGESTIONS, cursor); 131e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (cursor != null && cursor.getCount() != 0 && !mAllContactsListShown) { 132e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SHOW_ALL_CONTACTS, getShowAllContactsLabelCursor()); 1336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } else { 134e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SHOW_ALL_CONTACTS, null); 135e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 136e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 137e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1386e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 1396e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov public void changeCursor(Cursor cursor) { 140e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_ALL_CONTACTS, cursor); 1416e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 142e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1436e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 144e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) { 145e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov // Don't change default partition parameters from these defaults 146e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov super.configureDefaultPartition(false, true); 147e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 148e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 149e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 1502475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov public int getViewTypeCount() { 1512475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov return super.getViewTypeCount() + 1; 1526e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1536e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 154e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 1552475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov public int getItemViewType(int partition, int position) { 156e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (partition == PARTITION_SHOW_ALL_CONTACTS) { 157e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return mShowAllContactsViewType; 1586e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 159e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.getItemViewType(partition, position); 160e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 161e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 162e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 163e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected View newHeaderView(Context context, int partition, Cursor cursor, 164e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov ViewGroup parent) { 165e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 166e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: { 167d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov View view = inflate(R.layout.join_contact_picker_section, parent); 168d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov ((TextView) view.findViewById(R.id.text)).setText( 169d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov R.string.separatorJoinAggregateSuggestions); 170d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov return view; 171e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 172e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: { 173d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov View view = inflate(R.layout.join_contact_picker_section, parent); 174d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov ((TextView) view.findViewById(R.id.text)).setText( 175d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov R.string.separatorJoinAggregateAll); 176d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov return view; 177e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 1786e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1796e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 180e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return null; 1816e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1826e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1836e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 184e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) { 185e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov // Header views are static - nothing needs to be bound 186e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 187e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 188e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 189e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected View newView(Context context, int partition, Cursor cursor, int position, 190e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov ViewGroup parent) { 191e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 192e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: 193e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: 194e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.newView(context, partition, cursor, position, parent); 195e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SHOW_ALL_CONTACTS: 196d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov return inflate(R.layout.join_contact_picker_show_all, parent); 1976e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 198e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return null; 1996e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2006e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 201e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov private View inflate(int layoutId, ViewGroup parent) { 202e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return LayoutInflater.from(getContext()).inflate(layoutId, parent, false); 2036e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2046e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 2056e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 206e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void bindView(View itemView, int partition, Cursor cursor, int position) { 207e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 208e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: { 209e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov final ContactListItemView view = (ContactListItemView)itemView; 210d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov view.setSectionHeader(null); 2111228c817c5b4850a1ea52a95a860fe6a329462b1Dmitri Plotnikov bindPhoto(view, partition, cursor); 212e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindName(view, cursor); 213e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 214e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 215e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SHOW_ALL_CONTACTS: { 216e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 217e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 218e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: { 219e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov final ContactListItemView view = (ContactListItemView)itemView; 220e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindSectionHeaderAndDivider(view, position); 2211228c817c5b4850a1ea52a95a860fe6a329462b1Dmitri Plotnikov bindPhoto(view, partition, cursor); 222e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindName(view, cursor); 223e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 2246e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2256e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2266e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2276e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 228e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public Cursor getShowAllContactsLabelCursor() { 229f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov MatrixCursor matrixCursor = new MatrixCursor(PROJECTION_CONTACT); 230f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov Object[] row = new Object[PROJECTION_CONTACT.length]; 231e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov matrixCursor.addRow(row); 232e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return matrixCursor; 2336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2346e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 235e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov @Override 2368773bcb491d18e88b4e3d1f9cf7c57f6bc8e69edDmitri Plotnikov public Uri getContactUri(int partitionIndex, Cursor cursor) { 237e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX); 238e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX); 239e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return Contacts.getLookupUri(contactId, lookupKey); 2406e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 241e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov} 242