1c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov/* 2c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 3c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * 4c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * you may not use this file except in compliance with the License. 6c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * You may obtain a copy of the License at 7c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * 8c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * 10c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * See the License for the specific language governing permissions and 14c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * limitations under the License. 15c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov */ 16c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovpackage com.android.contacts.list; 17c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 18c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.content.ContentUris; 19c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.content.Context; 203c46291ef057eaf7b7f8ca5971e59bebe734a660Jeff Hamiltonimport android.content.CursorLoader; 21c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.database.Cursor; 22c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.net.Uri; 23c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.provider.Contacts.ContactMethods; 24c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.provider.Contacts.People; 25c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 26c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.view.View; 27c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovimport android.view.ViewGroup; 28c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 29c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov/** 30c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov * A cursor adapter for the ContactMethods.CONTENT_TYPE content type. 31c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov */ 32c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov@SuppressWarnings("deprecation") 33c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikovpublic class LegacyPostalAddressListAdapter extends ContactEntryListAdapter { 34c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 35c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov static final String[] POSTALS_PROJECTION = new String[] { 36c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov ContactMethods._ID, // 0 37c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov ContactMethods.TYPE, // 1 38c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov ContactMethods.LABEL, // 2 39c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov ContactMethods.DATA, // 3 40c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov People.DISPLAY_NAME, // 4 41c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov People.PHONETIC_NAME, // 5 42c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov }; 43c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 44c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public static final int POSTAL_ID_COLUMN_INDEX = 0; 45c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public static final int POSTAL_TYPE_COLUMN_INDEX = 1; 46c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public static final int POSTAL_LABEL_COLUMN_INDEX = 2; 47c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public static final int POSTAL_NUMBER_COLUMN_INDEX = 3; 48c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public static final int POSTAL_DISPLAY_NAME_COLUMN_INDEX = 4; 49c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public static final int POSTAL_PHONETIC_NAME_COLUMN_INDEX = 5; 50c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 51c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov private CharSequence mUnknownNameText; 52c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 53c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov public LegacyPostalAddressListAdapter(Context context) { 54c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov super(context); 55c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov mUnknownNameText = context.getText(android.R.string.unknownName); 56c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 57c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 58c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov @Override 59d5061fe322880ee993ea18db331fbc1110ddc538Dmitri Plotnikov public void configureLoader(CursorLoader loader, long directoryId) { 60c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov loader.setUri(ContactMethods.CONTENT_URI); 61c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov loader.setProjection(POSTALS_PROJECTION); 62c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov loader.setSortOrder(People.DISPLAY_NAME); 63c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov loader.setSelection(ContactMethods.KIND + "=" + android.provider.Contacts.KIND_POSTAL); 64c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 65c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 66c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov @Override 67e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public String getContactDisplayName(int position) { 68e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov return ((Cursor)getItem(position)).getString(POSTAL_DISPLAY_NAME_COLUMN_INDEX); 69c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 70c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 71e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov public Uri getContactMethodUri(int position) { 72e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov Cursor cursor = ((Cursor)getItem(position)); 73c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov long id = cursor.getLong(POSTAL_ID_COLUMN_INDEX); 74c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov return ContentUris.withAppendedId(ContactMethods.CONTENT_URI, id); 75c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 76c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 77c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov @Override 78e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected View newView(Context context, int partition, Cursor cursor, int position, 79e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov ViewGroup parent) { 80c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov final ContactListItemView view = new ContactListItemView(context, null); 81c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov view.setUnknownNameText(mUnknownNameText); 82c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov return view; 83c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 84c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 85c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov @Override 86e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov protected void bindView(View itemView, int partition, Cursor cursor, int position) { 87c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov ContactListItemView view = (ContactListItemView)itemView; 88c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov bindName(view, cursor); 89c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov bindPostalAddress(view, cursor); 90c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 91c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 92c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov protected void bindName(final ContactListItemView view, Cursor cursor) { 93ed90ea54323f212d87b27b04d7d627192afa6665Daisuke Miyakawa view.showDisplayName(cursor, POSTAL_DISPLAY_NAME_COLUMN_INDEX, 94da5bf1cf60beef3de5e651a569fa544293683926Dave Santoro getContactNameDisplayOrder()); 95c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov view.showPhoneticName(cursor, POSTAL_PHONETIC_NAME_COLUMN_INDEX); 96c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 97c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 98c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov protected void bindPostalAddress(ContactListItemView view, Cursor cursor) { 99c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov CharSequence label = null; 100c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov if (!cursor.isNull(POSTAL_TYPE_COLUMN_INDEX)) { 101c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov final int type = cursor.getInt(POSTAL_TYPE_COLUMN_INDEX); 102c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov final String customLabel = cursor.getString(POSTAL_LABEL_COLUMN_INDEX); 103c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov 104c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov // TODO cache 105c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov label = StructuredPostal.getTypeLabel(getContext().getResources(), type, customLabel); 106c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 107c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov view.setLabel(label); 108c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov view.showData(cursor, POSTAL_NUMBER_COLUMN_INDEX); 109c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov } 110c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov} 111