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