1ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey/*
2ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * Copyright (C) 2009 The Android Open Source Project
3ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey *
4ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * you may not use this file except in compliance with the License.
6ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * You may obtain a copy of the License at
7ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey *
8ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey *
10ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
11ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * See the License for the specific language governing permissions and
14ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey * limitations under the License.
15ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey */
16ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
17ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeypackage com.android.contacts.model;
18ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
19ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport com.android.contacts.R;
2086ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onukiimport com.android.contacts.model.AccountType.DefinitionException;
21392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.util.DateUtils;
22ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport com.google.android.collect.Lists;
23ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
24ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.content.ContentValues;
25ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.content.Context;
26ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Email;
27392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.provider.ContactsContract.CommonDataKinds.Event;
28ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Im;
29ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Nickname;
30ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Note;
31ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Organization;
32ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Phone;
33ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Photo;
34ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
35ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
36ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.Website;
3786ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onukiimport android.util.Log;
38ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
39f4ac04628763d8df783768b86d5e7b162a9a3d38Daisuke Miyakawaimport java.util.Locale;
40f4ac04628763d8df783768b86d5e7b162a9a3d38Daisuke Miyakawa
411dc28bef7d5353310359c3711b6cdac390d8a2e0Dmitri Plotnikovpublic class ExchangeAccountType extends BaseAccountType {
4286ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    private static final String TAG = "ExchangeAccountType";
43ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
44ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    public static final String ACCOUNT_TYPE = "com.android.exchange";
45ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
46b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov    public ExchangeAccountType(Context context, String resPackageName) {
47ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        this.accountType = ACCOUNT_TYPE;
48ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        this.resPackageName = null;
49ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        this.summaryResPackageName = resPackageName;
50ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
5186ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki        try {
5286ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindStructuredName(context);
5386ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindDisplayName(context);
5486ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindPhoneticName(context);
5586ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindNickname(context);
5686ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindPhone(context);
5786ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindEmail(context);
5886ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindStructuredPostal(context);
5986ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindIm(context);
6086ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindOrganization(context);
6186ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindPhoto(context);
6286ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindNote(context);
6386ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindEvent(context);
6486ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindWebsite(context);
6586ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            addDataKindGroupMembership(context);
6686ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki
6786ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            mIsInitialized = true;
6886ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki        } catch (DefinitionException e) {
6986ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki            Log.e(TAG, "Problem building account type", e);
7086ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki        }
71ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
72ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
73ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
7486ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
755ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
7650a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki                R.string.nameLabelsGroup, -1, true, R.layout.structured_name_editor_view));
775ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
785ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.actionBody = new SimpleInflater(Nickname.NAME);
795ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
805ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.typeOverallMax = 1;
815ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
825ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
835ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
845ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                FLAGS_PERSON_NAME).setOptional(true));
855ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
865ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_family, FLAGS_PERSON_NAME));
875ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
885ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_middle, FLAGS_PERSON_NAME));
895ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
905ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_given, FLAGS_PERSON_NAME));
915ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.SUFFIX,
925ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_suffix, FLAGS_PERSON_NAME));
935ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
945ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
955ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_phonetic_family, FLAGS_PHONETIC));
965ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
975ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_phonetic_given, FLAGS_PHONETIC));
985ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
995ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        return kind;
1005ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov    }
1015ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
1025ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov    @Override
10386ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindDisplayName(Context context) throws DefinitionException {
1045ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME,
10550a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki                R.string.nameLabelsGroup, -1, true, R.layout.text_fields_editor_view));
106b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov
107b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        boolean displayOrderPrimary =
108b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
109b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeOverallMax = 1;
110b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov
111b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
112b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
113b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                FLAGS_PERSON_NAME).setOptional(true));
114b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        if (!displayOrderPrimary) {
115b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
116b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.name_family, FLAGS_PERSON_NAME));
117b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
118b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.name_middle, FLAGS_PERSON_NAME).setOptional(true));
119b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
120b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.name_given, FLAGS_PERSON_NAME));
121b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        } else {
122b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
123b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.name_given, FLAGS_PERSON_NAME));
124b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
125b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.name_middle, FLAGS_PERSON_NAME).setOptional(true));
126b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
127b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.name_family, FLAGS_PERSON_NAME));
128ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        }
1295ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.SUFFIX,
1305ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true));
1315ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
1325ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        return kind;
1335ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov    }
134ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
1355ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov    @Override
13686ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
1375ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
13850a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki                R.string.name_phonetic, -1, true, R.layout.phonetic_name_editor_view));
1395ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
1405ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.actionBody = new SimpleInflater(Nickname.NAME);
1415ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
1425ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.typeOverallMax = 1;
1435ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov
1445ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
14527e78563c1f04490ffa8b850a0442715482d1f2cDmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
1465ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_phonetic_family, FLAGS_PHONETIC));
14727e78563c1f04490ffa8b850a0442715482d1f2cDmitri Plotnikov        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
1485ec40b04041818bc042c0671cb1a43b54f650e25Dmitri Plotnikov                R.string.name_phonetic_given, FLAGS_PHONETIC));
14927e78563c1f04490ffa8b850a0442715482d1f2cDmitri Plotnikov
150ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
151ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
152ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
153ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
15486ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindNickname(Context context) throws DefinitionException {
155b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindNickname(context);
156ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
15750a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki        kind.typeOverallMax = 1;
158ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
159b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
160b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
161b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                FLAGS_PERSON_NAME));
162ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
163ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
164ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
165ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
166ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
16786ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
168b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindPhone(context);
169b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov
170b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeColumn = Phone.TYPE;
171b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList = Lists.newArrayList();
172b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
173b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
174b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
175b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
176b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                .setSpecificMax(1));
177b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true)
178b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                .setSpecificMax(1));
179b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList
180b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                .add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true).setSpecificMax(1));
181b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true).setSpecificMax(1));
182b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true)
183b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                .setSpecificMax(1));
184b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true).setSpecificMax(1));
185b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList
186b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                .add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true).setSpecificMax(1));
187b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true)
188b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                .setSpecificMax(1));
189b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov
190b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
191b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
192ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
193ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
194ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
195ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
196ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
19786ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
198b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindEmail(context);
199ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
200b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeOverallMax = 3;
201ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
202b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
203b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
204ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
205ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
206ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
207ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
208ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
20986ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
210b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindStructuredPostal(context);
211b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov
212b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final boolean useJapaneseOrder =
213b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
214b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeColumn = StructuredPostal.TYPE;
215b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList = Lists.newArrayList();
216b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
217b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
218b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
219b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov
220b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
221b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        if (useJapaneseOrder) {
222b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
223b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
224b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
225b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_postcode, FLAGS_POSTAL));
226b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.REGION,
227b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_region, FLAGS_POSTAL));
228b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.CITY,
229b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_city,FLAGS_POSTAL));
230b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.STREET,
231b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_street, FLAGS_POSTAL));
232b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        } else {
233b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.STREET,
234b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_street, FLAGS_POSTAL));
235b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.CITY,
236b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_city,FLAGS_POSTAL));
237b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.REGION,
238b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_region, FLAGS_POSTAL));
239b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
240b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_postcode, FLAGS_POSTAL));
241b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
242b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
243ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        }
244ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
245ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
246ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
247ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
248ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
24986ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindIm(Context context) throws DefinitionException {
250b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindIm(context);
251ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
252b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        // Types are not supported for IM. There can be 3 IMs, but OWA only shows only the first
253b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeOverallMax = 3;
254ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
255b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.defaultValues = new ContentValues();
256b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
257ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
258b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
259b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
260ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
261ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
262ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
263ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
264ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
26586ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
266b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindOrganization(context);
267ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
26850a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki        kind.typeOverallMax = 1;
269ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
270b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
271b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
272b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                FLAGS_GENERIC_NAME));
273b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
274b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov                FLAGS_GENERIC_NAME));
275ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
276ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
277ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
278ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
279ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
28086ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
281b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindPhoto(context);
282ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
283b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeOverallMax = 1;
284ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
285b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
286b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
287ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
288ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
289ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
290ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
291ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
29286ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindNote(Context context) throws DefinitionException {
293b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindNote(context);
294ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
295b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
296b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
297ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
298ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
299ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
300ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
30186ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindEvent(Context context) throws DefinitionException {
302b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        DataKind kind = addKind(
303ee05dcdd4b066ad909322c10919fb1812214673bKatherine Kuan                new DataKind(Event.CONTENT_ITEM_TYPE, R.string.eventLabelsGroup, 150, true,
30450a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki                R.layout.event_field_editor_view));
305b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.actionHeader = new EventActionInflater();
306b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.actionBody = new SimpleInflater(Event.START_DATE);
307392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
30850a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki        kind.typeOverallMax = 1;
309392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
310b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeColumn = Event.TYPE;
311b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList = Lists.newArrayList();
312b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, false).setSpecificMax(1));
313392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
314b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.dateFormatWithYear = DateUtils.DATE_AND_TIME_FORMAT;
315392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
316b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
317b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
318392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
319392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        return kind;
320392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
321392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
322ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    @Override
32386ccb6ce2ff6078b06add93aab489951ef83bc72Makoto Onuki    protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
324b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        final DataKind kind = super.addDataKindWebsite(context);
325ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
32650a27b70581b0191995969c63edd1f6a3db3d1b7Makoto Onuki        kind.typeOverallMax = 1;
327ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
328b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList = Lists.newArrayList();
329b77be6d2ad06edfd8751f55043e4aa9fd9f36015Dmitri Plotnikov        kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
330ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey
331ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey        return kind;
332ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey    }
3335297c6af41f3fd2f08cff5b84105af4efd1ab79fJeff Hamilton
3345297c6af41f3fd2f08cff5b84105af4efd1ab79fJeff Hamilton    @Override
335fd33cc3ab956222dffa6b669a13a614747a5cdffKatherine Kuan    public boolean isGroupMembershipEditable() {
336fd33cc3ab956222dffa6b669a13a614747a5cdffKatherine Kuan        return true;
337fd33cc3ab956222dffa6b669a13a614747a5cdffKatherine Kuan    }
33896e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann
33996e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann    @Override
34096e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann    public boolean areContactsWritable() {
34196e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann        return true;
34296e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann    }
343ab066931efd4b6408b5f57026b421eb4a7934a39Jeff Sharkey}
344