ExchangeSource.java revision 2aee0983597c8b0e65766c4b278d4b1c7d13605f
1/*
2 * Copyright (C) 2009 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 */
16
17package com.android.loaderapp.model;
18
19import com.android.loaderapp.R;
20import com.google.android.collect.Lists;
21
22import android.content.ContentValues;
23import android.content.Context;
24import android.provider.ContactsContract.CommonDataKinds.Email;
25import android.provider.ContactsContract.CommonDataKinds.Im;
26import android.provider.ContactsContract.CommonDataKinds.Nickname;
27import android.provider.ContactsContract.CommonDataKinds.Note;
28import android.provider.ContactsContract.CommonDataKinds.Organization;
29import android.provider.ContactsContract.CommonDataKinds.Phone;
30import android.provider.ContactsContract.CommonDataKinds.Photo;
31import android.provider.ContactsContract.CommonDataKinds.StructuredName;
32import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
33import android.provider.ContactsContract.CommonDataKinds.Website;
34
35import java.util.Locale;
36
37public class ExchangeSource extends FallbackSource {
38
39    public static final String ACCOUNT_TYPE = "com.android.exchange";
40
41    public ExchangeSource(String resPackageName) {
42        this.accountType = ACCOUNT_TYPE;
43        this.resPackageName = null;
44        this.summaryResPackageName = resPackageName;
45    }
46
47    @Override
48    protected void inflate(Context context, int inflateLevel) {
49
50        inflateStructuredName(context, inflateLevel);
51        inflateNickname(context, inflateLevel);
52        inflatePhone(context, inflateLevel);
53        inflateEmail(context, inflateLevel);
54        inflateStructuredPostal(context, inflateLevel);
55        inflateIm(context, inflateLevel);
56        inflateOrganization(context, inflateLevel);
57        inflatePhoto(context, inflateLevel);
58        inflateNote(context, inflateLevel);
59        inflateWebsite(context, inflateLevel);
60
61        setInflatedLevel(inflateLevel);
62    }
63
64    @Override
65    protected DataKind inflateStructuredName(Context context, int inflateLevel) {
66        final DataKind kind = super.inflateStructuredName(context, ContactsSource.LEVEL_MIMETYPES);
67
68        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
69            final boolean useJapaneseOrder =
70                Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
71            kind.typeOverallMax = 1;
72
73            kind.fieldList = Lists.newArrayList();
74            kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
75                    FLAGS_PERSON_NAME).setOptional(true));
76            if (useJapaneseOrder) {
77                kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
78                        R.string.name_family, FLAGS_PERSON_NAME));
79                kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
80                        R.string.name_middle, FLAGS_PERSON_NAME).setOptional(true));
81                kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
82                        R.string.name_given, FLAGS_PERSON_NAME));
83                kind.fieldList.add(new EditField(StructuredName.SUFFIX,
84                        R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true));
85                kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
86                        R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
87                kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
88                        R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
89            } else {
90                kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
91                        R.string.name_given, FLAGS_PERSON_NAME));
92                kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
93                        R.string.name_middle, FLAGS_PERSON_NAME).setOptional(true));
94                kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
95                        R.string.name_family, FLAGS_PERSON_NAME));
96                kind.fieldList.add(new EditField(StructuredName.SUFFIX,
97                        R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true));
98                kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
99                        R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
100                kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
101                        R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
102            }
103        }
104
105        return kind;
106    }
107
108    @Override
109    protected DataKind inflateNickname(Context context, int inflateLevel) {
110        final DataKind kind = super.inflateNickname(context, ContactsSource.LEVEL_MIMETYPES);
111
112        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
113            kind.isList = false;
114
115            kind.fieldList = Lists.newArrayList();
116            kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
117                    FLAGS_PERSON_NAME));
118        }
119
120        return kind;
121    }
122
123    @Override
124    protected DataKind inflatePhone(Context context, int inflateLevel) {
125        final DataKind kind = super.inflatePhone(context, ContactsSource.LEVEL_MIMETYPES);
126
127        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
128            kind.typeColumn = Phone.TYPE;
129            kind.typeList = Lists.newArrayList();
130            kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
131            kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
132            kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
133            kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
134                    .setSpecificMax(1));
135            kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true)
136                    .setSpecificMax(1));
137            kind.typeList
138                    .add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true).setSpecificMax(1));
139            kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true).setSpecificMax(1));
140            kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true)
141                    .setSpecificMax(1));
142            kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true).setSpecificMax(1));
143            kind.typeList
144                    .add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true).setSpecificMax(1));
145            kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true)
146                    .setSpecificMax(1).setCustomColumn(Phone.LABEL));
147
148            kind.fieldList = Lists.newArrayList();
149            kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
150        }
151
152        return kind;
153    }
154
155    @Override
156    protected DataKind inflateEmail(Context context, int inflateLevel) {
157        final DataKind kind = super.inflateEmail(context, ContactsSource.LEVEL_MIMETYPES);
158
159        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
160            kind.typeOverallMax = 3;
161
162            kind.fieldList = Lists.newArrayList();
163            kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
164        }
165
166        return kind;
167    }
168
169    @Override
170    protected DataKind inflateStructuredPostal(Context context, int inflateLevel) {
171        final DataKind kind = super.inflateStructuredPostal(context, ContactsSource.LEVEL_MIMETYPES);
172
173        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
174            final boolean useJapaneseOrder =
175                Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
176            kind.typeColumn = StructuredPostal.TYPE;
177            kind.typeList = Lists.newArrayList();
178            kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
179            kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
180            kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
181
182            kind.fieldList = Lists.newArrayList();
183            if (useJapaneseOrder) {
184                kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
185                        R.string.postal_country, FLAGS_POSTAL).setOptional(true));
186                kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
187                        R.string.postal_postcode, FLAGS_POSTAL));
188                kind.fieldList.add(new EditField(StructuredPostal.REGION,
189                        R.string.postal_region, FLAGS_POSTAL));
190                kind.fieldList.add(new EditField(StructuredPostal.CITY,
191                        R.string.postal_city,FLAGS_POSTAL));
192                kind.fieldList.add(new EditField(StructuredPostal.STREET,
193                        R.string.postal_street, FLAGS_POSTAL));
194            } else {
195                kind.fieldList.add(new EditField(StructuredPostal.STREET,
196                        R.string.postal_street, FLAGS_POSTAL));
197                kind.fieldList.add(new EditField(StructuredPostal.CITY,
198                        R.string.postal_city,FLAGS_POSTAL));
199                kind.fieldList.add(new EditField(StructuredPostal.REGION,
200                        R.string.postal_region, FLAGS_POSTAL));
201                kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
202                        R.string.postal_postcode, FLAGS_POSTAL));
203                kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
204                        R.string.postal_country, FLAGS_POSTAL).setOptional(true));
205            }
206        }
207
208        return kind;
209    }
210
211    @Override
212    protected DataKind inflateIm(Context context, int inflateLevel) {
213        final DataKind kind = super.inflateIm(context, ContactsSource.LEVEL_MIMETYPES);
214
215        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
216            kind.typeOverallMax = 3;
217
218            // NOTE: even though a traditional "type" exists, for editing
219            // purposes we're using the protocol to pick labels
220
221            kind.defaultValues = new ContentValues();
222            kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
223
224            kind.typeColumn = Im.PROTOCOL;
225            kind.typeList = Lists.newArrayList();
226            kind.typeList.add(buildImType(Im.PROTOCOL_AIM));
227            kind.typeList.add(buildImType(Im.PROTOCOL_MSN));
228            kind.typeList.add(buildImType(Im.PROTOCOL_YAHOO));
229            kind.typeList.add(buildImType(Im.PROTOCOL_SKYPE));
230            kind.typeList.add(buildImType(Im.PROTOCOL_QQ));
231            kind.typeList.add(buildImType(Im.PROTOCOL_GOOGLE_TALK));
232            kind.typeList.add(buildImType(Im.PROTOCOL_ICQ));
233            kind.typeList.add(buildImType(Im.PROTOCOL_JABBER));
234            kind.typeList.add(buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true).setCustomColumn(
235                    Im.CUSTOM_PROTOCOL));
236
237            kind.fieldList = Lists.newArrayList();
238            kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
239        }
240
241        return kind;
242    }
243
244    @Override
245    protected DataKind inflateOrganization(Context context, int inflateLevel) {
246        final DataKind kind = super.inflateOrganization(context, ContactsSource.LEVEL_MIMETYPES);
247
248        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
249            kind.isList = false;
250            kind.typeColumn = Organization.TYPE;
251            kind.typeList = Lists.newArrayList();
252            kind.typeList.add(buildOrgType(Organization.TYPE_WORK).setSpecificMax(1));
253            kind.typeList.add(buildOrgType(Organization.TYPE_OTHER).setSpecificMax(1));
254            kind.typeList.add(buildOrgType(Organization.TYPE_CUSTOM).setSecondary(true)
255                    .setSpecificMax(1));
256
257            kind.fieldList = Lists.newArrayList();
258            kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
259                    FLAGS_GENERIC_NAME));
260            kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
261                    FLAGS_GENERIC_NAME));
262        }
263
264        return kind;
265    }
266
267    @Override
268    protected DataKind inflatePhoto(Context context, int inflateLevel) {
269        final DataKind kind = super.inflatePhoto(context, ContactsSource.LEVEL_MIMETYPES);
270
271        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
272            kind.typeOverallMax = 1;
273
274            kind.fieldList = Lists.newArrayList();
275            kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
276        }
277
278        return kind;
279    }
280
281    @Override
282    protected DataKind inflateNote(Context context, int inflateLevel) {
283        final DataKind kind = super.inflateNote(context, ContactsSource.LEVEL_MIMETYPES);
284
285        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
286            kind.fieldList = Lists.newArrayList();
287            kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
288        }
289
290        return kind;
291    }
292
293    @Override
294    protected DataKind inflateWebsite(Context context, int inflateLevel) {
295        final DataKind kind = super.inflateWebsite(context, ContactsSource.LEVEL_MIMETYPES);
296
297        if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
298            kind.isList = false;
299
300            kind.fieldList = Lists.newArrayList();
301            kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
302        }
303
304        return kind;
305    }
306
307    @Override
308    public int getHeaderColor(Context context) {
309        return 0xffd5ba96;
310    }
311
312    @Override
313    public int getSideBarColor(Context context) {
314        return 0xffb58e59;
315    }
316}
317