blob: 951a933fa9d4229a25d4f28045e38065fe427c43 [file] [log] [blame]
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.contacts.list;
17
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070018import android.content.ContentUris;
19import android.content.Context;
Jeff Hamilton3c462912010-05-15 02:20:01 -050020import android.content.CursorLoader;
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070021import android.database.Cursor;
22import android.net.Uri;
Daisuke Miyakawae231f192011-11-18 10:52:25 -080023import android.net.Uri.Builder;
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070024import android.provider.ContactsContract;
Daisuke Miyakawae231f192011-11-18 10:52:25 -080025import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070026import android.provider.ContactsContract.Data;
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070027import android.view.View;
28import android.view.ViewGroup;
29
Yorke Leef6774502014-02-20 10:21:26 -080030import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
Chiao Chenga0233a02012-11-01 16:41:08 -070031import com.android.contacts.common.list.ContactEntryListAdapter;
32import com.android.contacts.common.list.ContactListItemView;
Yorke Leec9bb2172014-07-10 11:38:34 -070033import com.android.contacts.common.preference.ContactsPreferences;
Chiao Chenga0233a02012-11-01 16:41:08 -070034
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070035/**
36 * A cursor adapter for the {@link StructuredPostal#CONTENT_TYPE} content type.
37 */
38public class PostalAddressListAdapter extends ContactEntryListAdapter {
39
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070040 protected static class PostalQuery {
41 private static final String[] PROJECTION_PRIMARY = new String[] {
42 StructuredPostal._ID, // 0
43 StructuredPostal.TYPE, // 1
44 StructuredPostal.LABEL, // 2
45 StructuredPostal.DATA, // 3
46 StructuredPostal.PHOTO_ID, // 4
Yorke Leef6774502014-02-20 10:21:26 -080047 StructuredPostal.LOOKUP_KEY, // 5
48 StructuredPostal.DISPLAY_NAME_PRIMARY, // 6
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070049 };
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070050
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070051 private static final String[] PROJECTION_ALTERNATIVE = new String[] {
52 StructuredPostal._ID, // 0
53 StructuredPostal.TYPE, // 1
54 StructuredPostal.LABEL, // 2
55 StructuredPostal.DATA, // 3
56 StructuredPostal.PHOTO_ID, // 4
Yorke Leef6774502014-02-20 10:21:26 -080057 StructuredPostal.LOOKUP_KEY, // 5
58 StructuredPostal.DISPLAY_NAME_ALTERNATIVE, // 6
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070059 };
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070060
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070061 public static final int POSTAL_ID = 0;
62 public static final int POSTAL_TYPE = 1;
63 public static final int POSTAL_LABEL = 2;
64 public static final int POSTAL_ADDRESS = 3;
65 public static final int POSTAL_PHOTO_ID = 4;
Yorke Leef6774502014-02-20 10:21:26 -080066 public static final int POSTAL_LOOKUP_KEY = 5;
67 public static final int POSTAL_DISPLAY_NAME = 6;
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070068 }
69
70 private final CharSequence mUnknownNameText;
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070071
72 public PostalAddressListAdapter(Context context) {
73 super(context);
74
75 mUnknownNameText = context.getText(android.R.string.unknownName);
76 }
77
78 @Override
Dmitri Plotnikovd5061fe2010-06-07 15:06:58 -070079 public void configureLoader(CursorLoader loader, long directoryId) {
Daisuke Miyakawae231f192011-11-18 10:52:25 -080080 final Builder builder = StructuredPostal.CONTENT_URI.buildUpon()
81 .appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true");
82 if (isSectionHeaderDisplayEnabled()) {
Yorke Lee9d2b6d52014-09-04 14:58:56 -070083 builder.appendQueryParameter(StructuredPostal.EXTRA_ADDRESS_BOOK_INDEX, "true");
Daisuke Miyakawae231f192011-11-18 10:52:25 -080084 }
85 loader.setUri(builder.build());
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070086
Yorke Leec9bb2172014-07-10 11:38:34 -070087 if (getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -070088 loader.setProjection(PostalQuery.PROJECTION_PRIMARY);
89 } else {
90 loader.setProjection(PostalQuery.PROJECTION_ALTERNATIVE);
91 }
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070092
Yorke Leec9bb2172014-07-10 11:38:34 -070093 if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -070094 loader.setSortOrder(StructuredPostal.SORT_KEY_PRIMARY);
95 } else {
96 loader.setSortOrder(StructuredPostal.SORT_KEY_ALTERNATIVE);
97 }
98 }
99
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700100 @Override
Dmitri Plotnikove1247222010-06-02 18:14:21 -0700101 public String getContactDisplayName(int position) {
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -0700102 return ((Cursor) getItem(position)).getString(PostalQuery.POSTAL_DISPLAY_NAME);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700103 }
104
105 /**
106 * Builds a {@link Data#CONTENT_URI} for the current cursor
107 * position.
108 */
Dmitri Plotnikove1247222010-06-02 18:14:21 -0700109 public Uri getDataUri(int position) {
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -0700110 long id = ((Cursor)getItem(position)).getLong(PostalQuery.POSTAL_ID);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700111 return ContentUris.withAppendedId(Data.CONTENT_URI, id);
112 }
113
114 @Override
Andrew Lee551da172014-04-28 11:43:47 -0700115 protected ContactListItemView newView(
116 Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
117 ContactListItemView view = super.newView(context, partition, cursor, position, parent);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700118 view.setUnknownNameText(mUnknownNameText);
Dmitri Plotnikov98fa1b02011-01-13 16:54:29 -0800119 view.setQuickContactEnabled(isQuickContactEnabled());
Andrew Lee551da172014-04-28 11:43:47 -0700120 view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700121 return view;
122 }
123
124 @Override
Dmitri Plotnikove1247222010-06-02 18:14:21 -0700125 protected void bindView(View itemView, int partition, Cursor cursor, int position) {
Brian Attwellc9e81072014-09-15 11:08:19 -0700126 super.bindView(itemView, partition, cursor, position);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700127 ContactListItemView view = (ContactListItemView)itemView;
Dmitri Plotnikove1247222010-06-02 18:14:21 -0700128 bindSectionHeaderAndDivider(view, position);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700129 bindName(view, cursor);
Brian Attwell56151b82014-09-03 20:14:47 -0700130 bindViewId(view, cursor, PostalQuery.POSTAL_ID);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700131 bindPhoto(view, cursor);
132 bindPostalAddress(view, cursor);
133 }
134
135 protected void bindPostalAddress(ContactListItemView view, Cursor cursor) {
136 CharSequence label = null;
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -0700137 if (!cursor.isNull(PostalQuery.POSTAL_TYPE)) {
138 final int type = cursor.getInt(PostalQuery.POSTAL_TYPE);
139 final String customLabel = cursor.getString(PostalQuery.POSTAL_LABEL);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700140
141 // TODO cache
Daniel Lehmannc86ace72011-03-23 21:04:29 -0700142 label = StructuredPostal.getTypeLabel(getContext().getResources(), type, customLabel);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700143 }
144 view.setLabel(label);
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -0700145 view.showData(cursor, PostalQuery.POSTAL_ADDRESS);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700146 }
147
Dmitri Plotnikove1247222010-06-02 18:14:21 -0700148 protected void bindSectionHeaderAndDivider(final ContactListItemView view, int position) {
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700149 final int section = getSectionForPosition(position);
150 if (getPositionForSection(section) == position) {
151 String title = (String)getSections()[section];
152 view.setSectionHeader(title);
153 } else {
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700154 view.setSectionHeader(null);
155 }
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700156 }
157
158 protected void bindName(final ContactListItemView view, Cursor cursor) {
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -0700159 view.showDisplayName(cursor, PostalQuery.POSTAL_DISPLAY_NAME, getContactNameDisplayOrder());
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700160 }
161
162 protected void bindPhoto(final ContactListItemView view, Cursor cursor) {
163 long photoId = 0;
Daisuke Miyakawaed90ea52011-10-31 09:22:52 -0700164 if (!cursor.isNull(PostalQuery.POSTAL_PHOTO_ID)) {
165 photoId = cursor.getLong(PostalQuery.POSTAL_PHOTO_ID);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700166 }
167
Yorke Leef6774502014-02-20 10:21:26 -0800168 DefaultImageRequest request = null;
169 if (photoId == 0) {
170 request = getDefaultImageRequestFromCursor(cursor, PostalQuery.POSTAL_DISPLAY_NAME,
171 PostalQuery.POSTAL_LOOKUP_KEY);
172 }
173
Yorke Lee41369d72014-04-28 18:17:51 -0700174 getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false, getCircularPhotos(),
175 request);
Dmitri Plotnikovd820cdb2010-05-06 14:11:55 -0700176 }
177//
178// protected void bindSearchSnippet(final ContactListItemView view, Cursor cursor) {
179// view.showSnippet(cursor, SUMMARY_SNIPPET_MIMETYPE_COLUMN_INDEX,
180// SUMMARY_SNIPPET_DATA1_COLUMN_INDEX, SUMMARY_SNIPPET_DATA4_COLUMN_INDEX);
181// }
182
183}