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