Home | History | Annotate | Download | only in account
      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 
     17 package com.android.contacts.common.model.account;
     18 
     19 import android.content.ContentValues;
     20 import android.content.Context;
     21 import android.provider.ContactsContract.CommonDataKinds.Email;
     22 import android.provider.ContactsContract.CommonDataKinds.Event;
     23 import android.provider.ContactsContract.CommonDataKinds.Phone;
     24 import android.provider.ContactsContract.CommonDataKinds.Relation;
     25 import android.util.Log;
     26 
     27 import com.android.contacts.common.R;
     28 import com.android.contacts.common.model.dataitem.DataKind;
     29 import com.android.contacts.common.util.CommonDateUtils;
     30 import com.google.common.collect.Lists;
     31 
     32 import java.util.List;
     33 
     34 public class GoogleAccountType extends BaseAccountType {
     35     private static final String TAG = "GoogleAccountType";
     36 
     37     /**
     38      * The package name that we should load contacts.xml from and rely on to handle
     39      * G+ account actions. Even though this points to gms, in some cases gms will still hand
     40      * off responsibility to the G+ app.
     41      */
     42     public static final String PLUS_EXTENSION_PACKAGE_NAME = "com.google.android.gms";
     43 
     44     public static final String ACCOUNT_TYPE = "com.google";
     45 
     46     private static final List<String> mExtensionPackages =
     47             Lists.newArrayList(PLUS_EXTENSION_PACKAGE_NAME);
     48 
     49     public GoogleAccountType(Context context, String authenticatorPackageName) {
     50         this.accountType = ACCOUNT_TYPE;
     51         this.resourcePackageName = null;
     52         this.syncAdapterPackageName = authenticatorPackageName;
     53 
     54         try {
     55             addDataKindStructuredName(context);
     56             addDataKindDisplayName(context);
     57             addDataKindPhoneticName(context);
     58             addDataKindNickname(context);
     59             addDataKindPhone(context);
     60             addDataKindEmail(context);
     61             addDataKindStructuredPostal(context);
     62             addDataKindIm(context);
     63             addDataKindOrganization(context);
     64             addDataKindPhoto(context);
     65             addDataKindNote(context);
     66             addDataKindWebsite(context);
     67             addDataKindSipAddress(context);
     68             addDataKindGroupMembership(context);
     69             addDataKindRelation(context);
     70             addDataKindEvent(context);
     71 
     72             mIsInitialized = true;
     73         } catch (DefinitionException e) {
     74             Log.e(TAG, "Problem building account type", e);
     75         }
     76     }
     77 
     78     @Override
     79     public List<String> getExtensionPackageNames() {
     80         return mExtensionPackages;
     81     }
     82 
     83     @Override
     84     protected DataKind addDataKindPhone(Context context) throws DefinitionException {
     85         final DataKind kind = super.addDataKindPhone(context);
     86 
     87         kind.typeColumn = Phone.TYPE;
     88         kind.typeList = Lists.newArrayList();
     89         kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
     90         kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
     91         kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
     92         kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
     93         kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
     94         kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
     95         kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
     96         kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
     97         kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
     98                 .setCustomColumn(Phone.LABEL));
     99 
    100         kind.fieldList = Lists.newArrayList();
    101         kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
    102 
    103         return kind;
    104     }
    105 
    106     @Override
    107     protected DataKind addDataKindEmail(Context context) throws DefinitionException {
    108         final DataKind kind = super.addDataKindEmail(context);
    109 
    110         kind.typeColumn = Email.TYPE;
    111         kind.typeList = Lists.newArrayList();
    112         kind.typeList.add(buildEmailType(Email.TYPE_HOME));
    113         kind.typeList.add(buildEmailType(Email.TYPE_WORK));
    114         kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
    115         kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
    116                 Email.LABEL));
    117 
    118         kind.fieldList = Lists.newArrayList();
    119         kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
    120 
    121         return kind;
    122     }
    123 
    124     private DataKind addDataKindRelation(Context context) throws DefinitionException {
    125         DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
    126                 R.string.relationLabelsGroup, Weight.RELATIONSHIP, true));
    127         kind.actionHeader = new RelationActionInflater();
    128         kind.actionBody = new SimpleInflater(Relation.NAME);
    129 
    130         kind.typeColumn = Relation.TYPE;
    131         kind.typeList = Lists.newArrayList();
    132         kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
    133         kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
    134         kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
    135         kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
    136         kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
    137         kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
    138         kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
    139         kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
    140         kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
    141         kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
    142         kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
    143         kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
    144         kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
    145         kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
    146         kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
    147                 .setCustomColumn(Relation.LABEL));
    148 
    149         kind.defaultValues = new ContentValues();
    150         kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
    151 
    152         kind.fieldList = Lists.newArrayList();
    153         kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
    154                 FLAGS_RELATION));
    155 
    156         return kind;
    157     }
    158 
    159     private DataKind addDataKindEvent(Context context) throws DefinitionException {
    160         DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
    161                     R.string.eventLabelsGroup, Weight.EVENT, true));
    162         kind.actionHeader = new EventActionInflater();
    163         kind.actionBody = new SimpleInflater(Event.START_DATE);
    164 
    165         kind.typeColumn = Event.TYPE;
    166         kind.typeList = Lists.newArrayList();
    167         kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
    168         kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
    169         kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
    170         kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
    171         kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
    172         kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
    173                 .setCustomColumn(Event.LABEL));
    174 
    175         kind.defaultValues = new ContentValues();
    176         kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
    177 
    178         kind.fieldList = Lists.newArrayList();
    179         kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
    180 
    181         return kind;
    182     }
    183 
    184     @Override
    185     public boolean isGroupMembershipEditable() {
    186         return true;
    187     }
    188 
    189     @Override
    190     public boolean areContactsWritable() {
    191         return true;
    192     }
    193 
    194     @Override
    195     public String getViewContactNotifyServiceClassName() {
    196         return "com.google.android.syncadapters.contacts." +
    197                 "SyncHighResPhotoIntentService";
    198     }
    199 
    200     @Override
    201     public String getViewContactNotifyServicePackageName() {
    202         return "com.google.android.syncadapters.contacts";
    203     }
    204 }
    205