JoinContactListAdapter.java revision d8f84e076b762f063ae498c297d6f02574099dd2
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
186e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport com.android.contacts.R;
196e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
20e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.content.Context;
213c46291ef057eaf7b7f8ca5971e59bebe734a660Jeff Hamiltonimport android.content.CursorLoader;
226e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.database.Cursor;
23e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.database.MatrixCursor;
24e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.net.Uri;
25e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.net.Uri.Builder;
26e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract;
27e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts;
28e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.provider.ContactsContract.Contacts.AggregationSuggestions;
2923411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikovimport android.provider.ContactsContract.Directory;
30e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.text.TextUtils;
316e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.LayoutInflater;
326e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.View;
336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.view.ViewGroup;
346e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikovimport android.widget.TextView;
356e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
36e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovpublic class JoinContactListAdapter extends ContactListAdapter {
37e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
38e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    /** Maximum number of suggestions shown for joining aggregates */
39e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    private static final int MAX_SUGGESTIONS = 4;
40e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
41e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    public static final int PARTITION_SUGGESTIONS = 0;
42e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    public static final int PARTITION_SHOW_ALL_CONTACTS = 1;
43e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    public static final int PARTITION_ALL_CONTACTS = 2;
44e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
45e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    private long mTargetContactId;
466e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
47e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    private int mShowAllContactsViewType;
48e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
496e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    /**
506e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov     * Determines whether we display a list item with the label
516e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov     * "Show all contacts" or actually show all contacts
526e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov     */
53e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    private boolean mAllContactsListShown;
546e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
55e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
56e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    public JoinContactListAdapter(Context context) {
576e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov        super(context);
58e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        setPinnedPartitionHeadersEnabled(true);
59e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        setSectionHeaderDisplayEnabled(true);
60e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        setIndexedPartition(PARTITION_ALL_CONTACTS);
614d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov        setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
622475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov        mShowAllContactsViewType = getViewTypeCount() - 1;
63e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    }
64e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
65e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    @Override
66e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    protected void addPartitions() {
67e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
68e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        // Partition 0: suggestions
69e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        addPartition(false, true);
70e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
71e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        // Partition 1: "Show all contacts"
72e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        addPartition(false, false);
73e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov
74e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        // Partition 2: All contacts
75e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov        addPartition(createDefaultDirectoryPartition());
766e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
776e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
78e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    public void setTargetContactId(long targetContactId) {
79e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        this.mTargetContactId = targetContactId;
806e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
816e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
82e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    @Override
83d5061fe322880ee993ea18db331fbc1110ddc538Dmitri Plotnikov    public void configureLoader(CursorLoader cursorLoader, long directoryId) {
84e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        JoinContactLoader loader = (JoinContactLoader)cursorLoader;
85e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        loader.setLoadSuggestionsAndAllContacts(mAllContactsListShown);
86e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
87e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        Builder builder = Contacts.CONTENT_URI.buildUpon();
88e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        builder.appendEncodedPath(String.valueOf(mTargetContactId));
89e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        builder.appendEncodedPath(AggregationSuggestions.CONTENT_DIRECTORY);
90e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
91e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        String filter = getQueryString();
92e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        if (!TextUtils.isEmpty(filter)) {
93e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov            builder.appendEncodedPath(Uri.encode(filter));
94e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        }
95e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
96e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        builder.appendQueryParameter("limit", String.valueOf(MAX_SUGGESTIONS));
97e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
98e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        loader.setSuggestionUri(builder.build());
99e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
100e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        // TODO simplify projection
101f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        loader.setProjection(PROJECTION_CONTACT);
10223411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov        Uri allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_URI).buildUpon()
10323411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov                .appendQueryParameter(
10423411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
10523411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov                .build();
10623411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov        loader.setUri(allContactsUri);
10723411b233966730de4e23d07edb871238cf891f2Dmitri Plotnikov        loader.setSelection(Contacts._ID + "!=?");
108e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        loader.setSelectionArgs(new String[]{String.valueOf(mTargetContactId)});
109e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        if (getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) {
110e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            loader.setSortOrder(Contacts.SORT_KEY_PRIMARY);
111e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        } else {
112e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            loader.setSortOrder(Contacts.SORT_KEY_ALTERNATIVE);
113e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        }
114e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    }
115e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
116e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    @Override
117e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    public boolean isEmpty() {
118e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        return false;
119e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    }
120e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
121e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    public boolean isAllContactsListShown() {
122e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        return mAllContactsListShown;
123e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    }
124e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
125e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    public void setAllContactsListShown(boolean flag) {
126e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        mAllContactsListShown = flag;
1276e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
1286e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
1296e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    public void setSuggestionsCursor(Cursor cursor) {
130e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        changeCursor(PARTITION_SUGGESTIONS, cursor);
131e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        if (cursor != null && cursor.getCount() != 0 && !mAllContactsListShown) {
132e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            changeCursor(PARTITION_SHOW_ALL_CONTACTS, getShowAllContactsLabelCursor());
1336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov        } else {
134e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            changeCursor(PARTITION_SHOW_ALL_CONTACTS, null);
135e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        }
136e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    }
137e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
1386e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    @Override
1396e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    public void changeCursor(Cursor cursor) {
140e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        changeCursor(PARTITION_ALL_CONTACTS, cursor);
1416e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
142e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
1436e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    @Override
144e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov    public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) {
145e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov         // Don't change default partition parameters from these defaults
146e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov        super.configureDefaultPartition(false, true);
147e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov    }
148e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov
149e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov    @Override
1502475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov    public int getViewTypeCount() {
1512475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov        return super.getViewTypeCount() + 1;
1526e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
1536e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
154e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    @Override
1552475ac851b5d8e6d1cc19c53d04163630be490a0Dmitri Plotnikov    public int getItemViewType(int partition, int position) {
156e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        if (partition == PARTITION_SHOW_ALL_CONTACTS) {
157e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            return mShowAllContactsViewType;
1586e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov        }
159e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        return super.getItemViewType(partition, position);
160e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    }
161e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov
162e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov    @Override
163e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    protected View newHeaderView(Context context, int partition, Cursor cursor,
164e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            ViewGroup parent) {
165e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        switch (partition) {
166e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_SUGGESTIONS: {
167d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                View view = inflate(R.layout.join_contact_picker_section, parent);
168d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                ((TextView) view.findViewById(R.id.text)).setText(
169d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                        R.string.separatorJoinAggregateSuggestions);
170d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                return view;
171e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            }
172e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_ALL_CONTACTS: {
173d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                View view = inflate(R.layout.join_contact_picker_section, parent);
174d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                ((TextView) view.findViewById(R.id.text)).setText(
175d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                        R.string.separatorJoinAggregateAll);
176d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                return view;
177e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            }
1786e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov        }
1796e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
180e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        return null;
1816e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
1826e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
1836e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    @Override
184e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov    protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) {
185e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov        // Header views are static - nothing needs to be bound
186e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov    }
187e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov
188e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov    @Override
189e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    protected View newView(Context context, int partition, Cursor cursor, int position,
190e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            ViewGroup parent) {
191e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        switch (partition) {
192e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_SUGGESTIONS:
193e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_ALL_CONTACTS:
194e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                return super.newView(context, partition, cursor, position, parent);
195e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_SHOW_ALL_CONTACTS:
196d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                return inflate(R.layout.join_contact_picker_show_all, parent);
1976e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov        }
198e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        return null;
1996e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
2006e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
201e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    private View inflate(int layoutId, ViewGroup parent) {
202e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        return LayoutInflater.from(getContext()).inflate(layoutId, parent, false);
2036e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
2046e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
2056e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    @Override
206e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
207e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        switch (partition) {
208e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_SUGGESTIONS: {
209e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                final ContactListItemView view = (ContactListItemView)itemView;
210d8f84e076b762f063ae498c297d6f02574099dd2Dmitri Plotnikov                view.setSectionHeader(null);
2111228c817c5b4850a1ea52a95a860fe6a329462b1Dmitri Plotnikov                bindPhoto(view, partition, cursor);
212e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                bindName(view, cursor);
213e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                break;
214e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov            }
215e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_SHOW_ALL_CONTACTS: {
216e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                break;
217e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            }
218e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov            case PARTITION_ALL_CONTACTS: {
219e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                final ContactListItemView view = (ContactListItemView)itemView;
220e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                bindSectionHeaderAndDivider(view, position);
2211228c817c5b4850a1ea52a95a860fe6a329462b1Dmitri Plotnikov                bindPhoto(view, partition, cursor);
222e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                bindName(view, cursor);
223e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov                break;
2246e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov            }
2256e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov        }
2266e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
2276e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
228e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    public Cursor getShowAllContactsLabelCursor() {
229f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        MatrixCursor matrixCursor = new MatrixCursor(PROJECTION_CONTACT);
230f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        Object[] row = new Object[PROJECTION_CONTACT.length];
231e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        matrixCursor.addRow(row);
232e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov        return matrixCursor;
2336e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
2346e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov
235e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov    @Override
2368773bcb491d18e88b4e3d1f9cf7c57f6bc8e69edDmitri Plotnikov    public Uri getContactUri(int partitionIndex, Cursor cursor) {
237e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
238e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
239e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov        return Contacts.getLookupUri(contactId, lookupKey);
2406e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov    }
241e124722daa8a4b31308d53e3f0457c3b66a20ae5Dmitri Plotnikov}
242