1e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng/*
2e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Copyright (C) 2009 The Android Open Source Project
3e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng *
4e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
5e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * you may not use this file except in compliance with the License.
6e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * You may obtain a copy of the License at
7e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng *
8e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
9e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng *
10e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Unless required by applicable law or agreed to in writing, software
11e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
12e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * See the License for the specific language governing permissions and
14e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * limitations under the License.
15e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng */
16e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
1769c182afb0e6d82a341a28b4317aa703af768906Gary Maipackage com.android.contacts.model.account;
18e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
19e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.content.ContentValues;
20e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.content.Context;
21e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Email;
22e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Event;
23e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Im;
24e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Nickname;
25e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Note;
26e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Organization;
27e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Phone;
28e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Photo;
29e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
30e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
31e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Website;
32e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
333f6a2444e0134b7380cdb2e13abf4bf1163336d0Arthur Wangimport com.android.contacts.R;
3469c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.dataitem.DataKind;
3569c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.util.CommonDateUtils;
363a0b483ff715959b88d7ef20877a7c89d211fde2Walter Jangimport com.android.contactsbind.FeedbackHelper;
373a0b483ff715959b88d7ef20877a7c89d211fde2Walter Jang
38e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport com.google.common.collect.Lists;
39e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
40e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport java.util.Locale;
41e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
42e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengpublic class ExchangeAccountType extends BaseAccountType {
43e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    private static final String TAG = "ExchangeAccountType";
44e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
45419fed1b064078a9e6a5892db73a40c6d6f382b4Brian Attwell    private static final String ACCOUNT_TYPE_AOSP = "com.android.exchange";
46419fed1b064078a9e6a5892db73a40c6d6f382b4Brian Attwell    private static final String ACCOUNT_TYPE_GOOGLE_1 = "com.google.android.exchange";
47419fed1b064078a9e6a5892db73a40c6d6f382b4Brian Attwell    private static final String ACCOUNT_TYPE_GOOGLE_2 = "com.google.android.gm.exchange";
48e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
49e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    public ExchangeAccountType(Context context, String authenticatorPackageName, String type) {
50e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        this.accountType = type;
51e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        this.resourcePackageName = null;
52e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        this.syncAdapterPackageName = authenticatorPackageName;
53e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
54e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        try {
55e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindStructuredName(context);
567a6daea69ea47c31a1b838a423e7cdaceafae753Gary Mai            addDataKindName(context);
57e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindPhoneticName(context);
58e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindNickname(context);
59e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindPhone(context);
60e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindEmail(context);
61e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindStructuredPostal(context);
62e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindIm(context);
63e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindOrganization(context);
64e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindPhoto(context);
65e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindNote(context);
66e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindEvent(context);
67e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindWebsite(context);
68e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            addDataKindGroupMembership(context);
69e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
70e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            mIsInitialized = true;
71e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        } catch (DefinitionException e) {
723a0b483ff715959b88d7ef20877a7c89d211fde2Walter Jang            // TODO: Change this to fail fast if there are no feedback reports
733a0b483ff715959b88d7ef20877a7c89d211fde2Walter Jang            FeedbackHelper.sendFeedback(context, TAG, "Failed to build exchange account type", e);
74e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        }
75e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
76e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
77e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    public static boolean isExchangeType(String type) {
78419fed1b064078a9e6a5892db73a40c6d6f382b4Brian Attwell        return ACCOUNT_TYPE_AOSP.equals(type) || ACCOUNT_TYPE_GOOGLE_1.equals(type)
79419fed1b064078a9e6a5892db73a40c6d6f382b4Brian Attwell                || ACCOUNT_TYPE_GOOGLE_2.equals(type);
80e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
81e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
82e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
83e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
84e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
85913e18a7d53132fefb59229574cd329c9935b85fBrian Attwell                R.string.nameLabelsGroup, Weight.NONE, true));
86e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
87e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.actionBody = new SimpleInflater(Nickname.NAME);
88e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
89e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
90e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
91e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
92e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
93e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                FLAGS_PERSON_NAME).setOptional(true));
94e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
95e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_family, FLAGS_PERSON_NAME));
96e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
97e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_middle, FLAGS_PERSON_NAME));
98e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
99e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_given, FLAGS_PERSON_NAME));
100e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.SUFFIX,
101e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_suffix, FLAGS_PERSON_NAME));
102e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
103e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
104e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_phonetic_family, FLAGS_PHONETIC));
105e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
106e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_phonetic_given, FLAGS_PHONETIC));
107e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
108e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
109e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
110e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
111e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
112e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
113e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
114913e18a7d53132fefb59229574cd329c9935b85fBrian Attwell                R.string.name_phonetic, Weight.NONE, true));
115e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
116e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.actionBody = new SimpleInflater(Nickname.NAME);
117e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
118e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
119e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
120e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
121e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
122e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_phonetic_family, FLAGS_PHONETIC));
123e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
124e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                R.string.name_phonetic_given, FLAGS_PHONETIC));
125e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
126e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
127e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
128e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
129e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
130e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindNickname(Context context) throws DefinitionException {
131e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindNickname(context);
132e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
133e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
134e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
135e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
136e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
137e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                FLAGS_PERSON_NAME));
138e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
139e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
140e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
141e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
142e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
143e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
144e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindPhone(context);
145e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
146e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeColumn = Phone.TYPE;
147e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList = Lists.newArrayList();
148e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
149e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
150e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
151e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
152e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                .setSpecificMax(1));
153e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true)
154e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                .setSpecificMax(1));
155e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList
156e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                .add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true).setSpecificMax(1));
157e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true).setSpecificMax(1));
158e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true)
159e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                .setSpecificMax(1));
160e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true).setSpecificMax(1));
161e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList
162e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                .add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true).setSpecificMax(1));
163e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true)
164e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                .setSpecificMax(1));
165e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
166e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
167e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
168e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
169e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
170e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
171e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
172e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
173e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
174e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindEmail(context);
175e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
176e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 3;
177e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
178e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
179e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
180e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
181e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
182e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
183e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
184e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
185e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
186e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindStructuredPostal(context);
187e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
188e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final boolean useJapaneseOrder =
189e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
190e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeColumn = StructuredPostal.TYPE;
191e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList = Lists.newArrayList();
192e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
193e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
194e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
195e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
196e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
197e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        if (useJapaneseOrder) {
198e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
199e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
200e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
201e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_postcode, FLAGS_POSTAL));
202e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.REGION,
203e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_region, FLAGS_POSTAL));
204e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.CITY,
205e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_city,FLAGS_POSTAL));
206e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.STREET,
207e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_street, FLAGS_POSTAL));
208e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        } else {
209e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.STREET,
210e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_street, FLAGS_POSTAL));
211e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.CITY,
212e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_city,FLAGS_POSTAL));
213e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.REGION,
214e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_region, FLAGS_POSTAL));
215e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
216e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_postcode, FLAGS_POSTAL));
217e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
218e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
219e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        }
220e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
221e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
222e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
223e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
224e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
225e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindIm(Context context) throws DefinitionException {
226e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindIm(context);
227e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
228e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        // Types are not supported for IM. There can be 3 IMs, but OWA only shows only the first
229e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 3;
230e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
231e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.defaultValues = new ContentValues();
232e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
233e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
234e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
235e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
236e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
237e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
238e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
239e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
240e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
241e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
242e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindOrganization(context);
243e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
244e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
245e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
246e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
247e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
248e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                FLAGS_GENERIC_NAME));
249e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
250e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng                FLAGS_GENERIC_NAME));
251e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
252e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
253e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
254e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
255e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
256e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
257e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindPhoto(context);
258e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
259e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
260e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
261e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
262e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
263e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
264e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
265e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
266e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
267e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
268e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindNote(Context context) throws DefinitionException {
269e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindNote(context);
270e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
271e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
272e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
273e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
274e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
275e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
276e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
277e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindEvent(Context context) throws DefinitionException {
2784eff3d80a65d84cafbbb8ed146f40aeb5e4fed9dChiao Cheng        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE, R.string.eventLabelsGroup,
279913e18a7d53132fefb59229574cd329c9935b85fBrian Attwell                Weight.EVENT, true));
280e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.actionHeader = new EventActionInflater();
281e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.actionBody = new SimpleInflater(Event.START_DATE);
282e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
283e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
284e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
285e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeColumn = Event.TYPE;
286e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList = Lists.newArrayList();
287e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, false).setSpecificMax(1));
288e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
289e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
290e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
291e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
292e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
293e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
294e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
295e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
296e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
297e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
298e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
299e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        final DataKind kind = super.addDataKindWebsite(context);
300e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
301e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.typeOverallMax = 1;
302e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
303e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList = Lists.newArrayList();
304e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
305e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
306e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return kind;
307e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
308e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
309e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
310e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    public boolean isGroupMembershipEditable() {
311e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return true;
312e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
313e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng
314e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    @Override
315e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    public boolean areContactsWritable() {
316e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng        return true;
317e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng    }
318e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng}
319