JoinContactListAdapter.java revision d5061fe322880ee993ea18db331fbc1110ddc538
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; 29e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.text.TextUtils; 306e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.LayoutInflater; 316e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.View; 326e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.ViewGroup; 336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.widget.TextView; 346e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 35e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovpublic class JoinContactListAdapter extends ContactListAdapter { 36e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 37e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov /** Maximum number of suggestions shown for joining aggregates */ 38e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private static final int MAX_SUGGESTIONS = 4; 39e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 40e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_SUGGESTIONS = 0; 41e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_SHOW_ALL_CONTACTS = 1; 42e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_ALL_CONTACTS = 2; 43e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 44e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private long mTargetContactId; 456e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 46e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov private int mShowAllContactsViewType; 47e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 486e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov /** 496e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * Determines whether we display a list item with the label 506e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov * "Show all contacts" or actually show all contacts 516e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov */ 52e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private boolean mAllContactsListShown; 536e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 54e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 55e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public JoinContactListAdapter(Context context) { 566e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov super(context); 57e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov setPinnedPartitionHeadersEnabled(true); 58e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov setSectionHeaderDisplayEnabled(true); 59e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov setIndexedPartition(PARTITION_ALL_CONTACTS); 60e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov mShowAllContactsViewType = super.getViewTypeCount(); 61e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 62e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 63e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov @Override 64e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void addPartitions() { 65e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 66e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 0: suggestions 67e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov addPartition(false, true); 68e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 69e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 1: "Show all contacts" 70e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov addPartition(false, false); 71e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 72e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 2: All contacts 73e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov addPartition(false, true); 746e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 756e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 76e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setTargetContactId(long targetContactId) { 77e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov this.mTargetContactId = targetContactId; 786e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 796e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 80e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 81d5061fe322880ee993ea18db331fbc1110ddc538Dmitri Plotnikov public void configureLoader(CursorLoader cursorLoader, long directoryId) { 82e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov JoinContactLoader loader = (JoinContactLoader)cursorLoader; 83e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov loader.setLoadSuggestionsAndAllContacts(mAllContactsListShown); 84e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 85e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov Builder builder = Contacts.CONTENT_URI.buildUpon(); 86e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(String.valueOf(mTargetContactId)); 87e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(AggregationSuggestions.CONTENT_DIRECTORY); 88e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 89e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov String filter = getQueryString(); 90e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov if (!TextUtils.isEmpty(filter)) { 91e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(Uri.encode(filter)); 92e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 93e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 94e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendQueryParameter("limit", String.valueOf(MAX_SUGGESTIONS)); 95e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 96e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov loader.setSuggestionUri(builder.build()); 97e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 98e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov // TODO simplify projection 99e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov loader.setProjection(PROJECTION); 100e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setUri(buildSectionIndexerUri(Contacts.CONTENT_URI)); 101e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND " + Contacts._ID + "!=?"); 102e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSelectionArgs(new String[]{String.valueOf(mTargetContactId)}); 103e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) { 104e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSortOrder(Contacts.SORT_KEY_PRIMARY); 105e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } else { 106e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSortOrder(Contacts.SORT_KEY_ALTERNATIVE); 107e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 108e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 109e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 110e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 111e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public boolean isEmpty() { 112e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return false; 113e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 114e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 115e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public boolean isAllContactsListShown() { 116e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return mAllContactsListShown; 117e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 118e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 119e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setAllContactsListShown(boolean flag) { 120e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov mAllContactsListShown = flag; 1216e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1226e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1236e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov public void setSuggestionsCursor(Cursor cursor) { 124e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SUGGESTIONS, cursor); 125e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (cursor != null && cursor.getCount() != 0 && !mAllContactsListShown) { 126e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SHOW_ALL_CONTACTS, getShowAllContactsLabelCursor()); 1276e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } else { 128e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SHOW_ALL_CONTACTS, null); 129e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 130e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 131e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1326e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 1336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov public void changeCursor(Cursor cursor) { 134e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_ALL_CONTACTS, cursor); 1356e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 136e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1376e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 138e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public int getViewTypeCount() { 139e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.getViewTypeCount() + 1; 1406e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1416e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 142e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 143e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected int getItemViewType(int partition, int position) { 144e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov if (partition == PARTITION_SHOW_ALL_CONTACTS) { 145e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return mShowAllContactsViewType; 1466e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 147e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.getItemViewType(partition, position); 148e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 149e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 150e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 151e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected View newHeaderView(Context context, int partition, Cursor cursor, 152e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov ViewGroup parent) { 153e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 154e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: { 155e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov TextView view = (TextView) inflate(R.layout.list_separator, parent); 156e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov view.setText(R.string.separatorJoinAggregateSuggestions); 157e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return view; 158e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 159e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: { 160e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov TextView view = (TextView) inflate(R.layout.list_separator, parent); 161e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov view.setText(R.string.separatorJoinAggregateAll); 162e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return view; 163e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 1646e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1656e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 166e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return null; 1676e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1686e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1696e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 170e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected View newView(Context context, int partition, Cursor cursor, int position, 171e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov ViewGroup parent) { 172e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 173e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: 174e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: 175e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.newView(context, partition, cursor, position, parent); 176e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SHOW_ALL_CONTACTS: 177e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return inflate(R.layout.contacts_list_show_all_item, parent); 1786e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 179e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return null; 1806e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1816e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 182e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov private View inflate(int layoutId, ViewGroup parent) { 183e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return LayoutInflater.from(getContext()).inflate(layoutId, parent, false); 1846e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1856e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1866e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 187e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void bindView(View itemView, int partition, Cursor cursor, int position) { 188e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 189e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: { 190e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov final ContactListItemView view = (ContactListItemView)itemView; 191e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindPhoto(view, cursor); 192e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindName(view, cursor); 193e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 194e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 195e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SHOW_ALL_CONTACTS: { 196e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 197e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 198e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: { 199e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov final ContactListItemView view = (ContactListItemView)itemView; 200e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindSectionHeaderAndDivider(view, position); 201e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindPhoto(view, cursor); 202e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov bindName(view, cursor); 203e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 2046e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2056e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2066e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2076e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 208e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public Cursor getShowAllContactsLabelCursor() { 209e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov MatrixCursor matrixCursor = new MatrixCursor(PROJECTION); 210e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov Object[] row = new Object[PROJECTION.length]; 211e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov matrixCursor.addRow(row); 212e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return matrixCursor; 2136e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2146e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 215e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov @Override 216e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public Uri getContactUri(Cursor cursor) { 217e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX); 218e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX); 219e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return Contacts.getLookupUri(contactId, lookupKey); 2206e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 221e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov} 222