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 18e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.content.Context; 193c46291ef057eaf7b7f8ca5971e59bebe734a660Jeff Hamiltonimport android.content.CursorLoader; 206e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.database.Cursor; 21e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.net.Uri; 22e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.net.Uri.Builder; 23e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract; 24e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 25e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts.AggregationSuggestions; 2623411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikovimport android.provider.ContactsContract.Directory; 27e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.text.TextUtils; 286e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.LayoutInflater; 296e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.View; 306e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.ViewGroup; 316e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.widget.TextView; 326e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 33e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 34a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.list.ContactListAdapter; 35a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.list.ContactListItemView; 36a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.list.DirectoryListLoader; 37c9bb2179ab321461f88f54d49e9d41f2f6b19fe3Yorke Leeimport com.android.contacts.common.preference.ContactsPreferences; 38e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 39e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovpublic class JoinContactListAdapter extends ContactListAdapter { 40e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 41e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov /** Maximum number of suggestions shown for joining aggregates */ 42e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private static final int MAX_SUGGESTIONS = 4; 43e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 44e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public static final int PARTITION_SUGGESTIONS = 0; 45a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa public static final int PARTITION_ALL_CONTACTS = 1; 46e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 47e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov private long mTargetContactId; 486e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 49e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public JoinContactListAdapter(Context context) { 506e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov super(context); 51e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov setPinnedPartitionHeadersEnabled(true); 52e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov setSectionHeaderDisplayEnabled(true); 53e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov setIndexedPartition(PARTITION_ALL_CONTACTS); 544d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE); 55e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 56e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 57e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov @Override 58e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void addPartitions() { 59e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov // Partition 0: suggestions 60e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov addPartition(false, true); 61e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov 62a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa // Partition 1: All contacts 63e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov addPartition(createDefaultDirectoryPartition()); 646e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 656e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 66e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void setTargetContactId(long targetContactId) { 67e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov this.mTargetContactId = targetContactId; 686e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 696e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 70e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 71d5061fe322880ee993ea18db331fbc1110ddc538Dmitri Plotnikov public void configureLoader(CursorLoader cursorLoader, long directoryId) { 726da2a2d472d562443a70f3d6a84ff6546dfcbc01Daisuke Miyakawa JoinContactLoader loader = (JoinContactLoader) cursorLoader; 73e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 74ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa final Builder builder = Contacts.CONTENT_URI.buildUpon(); 75e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(String.valueOf(mTargetContactId)); 76e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(AggregationSuggestions.CONTENT_DIRECTORY); 77e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 78ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa final String filter = getQueryString(); 79e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov if (!TextUtils.isEmpty(filter)) { 80e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendEncodedPath(Uri.encode(filter)); 81e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 82e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 83e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov builder.appendQueryParameter("limit", String.valueOf(MAX_SUGGESTIONS)); 84e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 85e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov loader.setSuggestionUri(builder.build()); 86e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 87e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov // TODO simplify projection 886da2a2d472d562443a70f3d6a84ff6546dfcbc01Daisuke Miyakawa loader.setProjection(getProjection(false)); 89ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa final Uri allContactsUri; 90ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa if (!TextUtils.isEmpty(filter)) { 91ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_FILTER_URI).buildUpon() 92ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa .appendEncodedPath(Uri.encode(filter)) 9323411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov .appendQueryParameter( 9423411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)) 9523411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov .build(); 96ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa } else { 97ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_URI).buildUpon() 98ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa .appendQueryParameter( 99ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)) 100ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa .build(); 101ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa } 10223411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov loader.setUri(allContactsUri); 10323411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov loader.setSelection(Contacts._ID + "!=?"); 104ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa loader.setSelectionArgs(new String[]{ String.valueOf(mTargetContactId) }); 105c9bb2179ab321461f88f54d49e9d41f2f6b19fe3Yorke Lee if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) { 106e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSortOrder(Contacts.SORT_KEY_PRIMARY); 107e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } else { 108e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov loader.setSortOrder(Contacts.SORT_KEY_ALTERNATIVE); 109e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 110e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 111e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 112e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 113e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public boolean isEmpty() { 114e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return false; 115e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 116e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1176e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov public void setSuggestionsCursor(Cursor cursor) { 118e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_SUGGESTIONS, cursor); 119e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 120e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1216e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 1226e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov public void changeCursor(Cursor cursor) { 123e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov changeCursor(PARTITION_ALL_CONTACTS, cursor); 1246e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 125e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 1266e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 127e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) { 128e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov // Don't change default partition parameters from these defaults 129e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov super.configureDefaultPartition(false, true); 130e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 131e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 132e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 1332475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov public int getViewTypeCount() { 134ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa return super.getViewTypeCount(); 1356e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1366e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 137e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 1382475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov public int getItemViewType(int partition, int position) { 139e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.getItemViewType(partition, position); 140e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 141e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 142e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov @Override 143e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected View newHeaderView(Context context, int partition, Cursor cursor, 144e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov ViewGroup parent) { 145e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 146e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: { 147a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa View view = inflate(R.layout.join_contact_picker_section_header, parent); 148d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov ((TextView) view.findViewById(R.id.text)).setText( 149d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov R.string.separatorJoinAggregateSuggestions); 150d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov return view; 151e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 152e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: { 153a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa View view = inflate(R.layout.join_contact_picker_section_header, parent); 154d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov ((TextView) view.findViewById(R.id.text)).setText( 155d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov R.string.separatorJoinAggregateAll); 156d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov return view; 157e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov } 1586e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1596e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 160e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return null; 1616e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1626e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1636e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 164e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) { 165e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov // Header views are static - nothing needs to be bound 166e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 167e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 168e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 169551da17c65c434dae14365888996f9157068d800Andrew Lee protected ContactListItemView newView( 170551da17c65c434dae14365888996f9157068d800Andrew Lee Context context, int partition, Cursor cursor, int position, ViewGroup parent) { 171e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 172e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: 173e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: 174e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return super.newView(context, partition, cursor, position, parent); 1756e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 176e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return null; 1776e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1786e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 179e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov private View inflate(int layoutId, ViewGroup parent) { 180e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return LayoutInflater.from(getContext()).inflate(layoutId, parent, false); 1816e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 1826e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 1836e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov @Override 184e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void bindView(View itemView, int partition, Cursor cursor, int position) { 185c9e810710a7624d645e33ec22e5fb90e30c7780bBrian Attwell super.bindView(itemView, partition, cursor, position); 186e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov switch (partition) { 187e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_SUGGESTIONS: { 188ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa final ContactListItemView view = (ContactListItemView) itemView; 189d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov view.setSectionHeader(null); 1901228c817c5b4850a1ea52a95a860fe6a329462b1Dmitri Plotnikov bindPhoto(view, partition, cursor); 19156151b82c3dac3908ac8776a2a71f107fb4ecdbcBrian Attwell bindNameAndViewId(view, cursor); 192e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 193e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 194e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov case PARTITION_ALL_CONTACTS: { 195ecd392b81d65a5dd5511b2f96bbedfb5b8157ae7Daisuke Miyakawa final ContactListItemView view = (ContactListItemView) itemView; 196ead19c5eafee0ffb43b02a4ae75ac5244ad3f853Isaac Katzenelson bindSectionHeaderAndDivider(view, position, cursor); 1971228c817c5b4850a1ea52a95a860fe6a329462b1Dmitri Plotnikov bindPhoto(view, partition, cursor); 19856151b82c3dac3908ac8776a2a71f107fb4ecdbcBrian Attwell bindNameAndViewId(view, cursor); 199e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov break; 2006e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2016e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2026e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 2036e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 204e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov @Override 2058773bcb491d18e88b4e3d1f9cf7c57f6bc8e69edDmitri Plotnikov public Uri getContactUri(int partitionIndex, Cursor cursor) { 206ed90ea54323f212d87b27b04d7d627192afa6665Daisuke Miyakawa long contactId = cursor.getLong(ContactQuery.CONTACT_ID); 207ed90ea54323f212d87b27b04d7d627192afa6665Daisuke Miyakawa String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY); 208e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return Contacts.getLookupUri(contactId, lookupKey); 2096e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov } 210e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov} 211