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
29a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.list.ContactEntryListAdapter;
30a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.list.ContactListItemView;
31a0233a048858f1593ea4924e9c5036f39aedbcddChiao Cheng
32a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov/**
33a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov * A cursor adapter for the Phones.CONTENT_TYPE content type.
34a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov */
35a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov@SuppressWarnings("deprecation")
36a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikovpublic class LegacyPhoneNumberListAdapter extends ContactEntryListAdapter {
37a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
38c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final String[] PHONES_PROJECTION = new String[] {
39a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        Phones._ID,             // 0
40a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        Phones.TYPE,            // 1
41a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        Phones.LABEL,           // 2
42a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        Phones.NUMBER,          // 3
43a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        People.DISPLAY_NAME,    // 4
44a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        People.PHONETIC_NAME,   // 5
45a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    };
46a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
47c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final int PHONE_ID_COLUMN_INDEX = 0;
48c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final int PHONE_TYPE_COLUMN_INDEX = 1;
49c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final int PHONE_LABEL_COLUMN_INDEX = 2;
50c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final int PHONE_NUMBER_COLUMN_INDEX = 3;
51c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final int PHONE_DISPLAY_NAME_COLUMN_INDEX = 4;
52c28390b65183a2e1bf85f381ba27bf846706c04aDmitri Plotnikov    private static final int PHONE_PHONETIC_NAME_COLUMN_INDEX = 5;
53a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
54a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    private CharSequence mUnknownNameText;
55a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
56a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    public LegacyPhoneNumberListAdapter(Context context) {
57a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        super(context);
58a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        mUnknownNameText = context.getText(android.R.string.unknownName);
59a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    }
60a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
61a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    @Override
62d5061fe322880ee993ea18db331fbc1110ddc538Dmitri Plotnikov    public void configureLoader(CursorLoader loader, long directoryId) {
63a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        loader.setUri(Phones.CONTENT_URI);
64a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        loader.setProjection(PHONES_PROJECTION);
65a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        loader.setSortOrder(Phones.DISPLAY_NAME);
66a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    }
67a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
68a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    @Override
69e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    public String getContactDisplayName(int position) {
70e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        return ((Cursor)getItem(position)).getString(PHONE_DISPLAY_NAME_COLUMN_INDEX);
71a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    }
72a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
73e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    public Uri getPhoneUri(int position) {
74e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        Cursor cursor = ((Cursor)getItem(position));
75a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        long id = cursor.getLong(PHONE_ID_COLUMN_INDEX);
76a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        return ContentUris.withAppendedId(Phones.CONTENT_URI, id);
77a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    }
78a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
79a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    @Override
80e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    protected View newView(Context context, int partition, Cursor cursor, int position,
81e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            ViewGroup parent) {
82a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        final ContactListItemView view = new ContactListItemView(context, null);
83a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        view.setUnknownNameText(mUnknownNameText);
84a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        return view;
85a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    }
86a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov
87a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    @Override
88e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
89a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        ContactListItemView view = (ContactListItemView)itemView;
90a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov        bindName(view, cursor);
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);
1093f3b8933ab6eeb04a2165c5fc190244dd7e307c5Jay Shrauner        view.showPhoneNumber(cursor, PHONE_NUMBER_COLUMN_INDEX);
110a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov    }
111a3569b2e2c9eed2c09449ec8ed64909337462f14Dmitri Plotnikov}
112