diff -r f5050f1da672 -r 04becd199f91 javaextensions/pim/cntadapter/src.s60/cpimcontactfieldinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/pim/cntadapter/src.s60/cpimcontactfieldinfo.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,761 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Helper class to map Contacts Model fields + * +*/ + + +// CLASS HEADER +#include "cpimcontactfieldinfo.h" + +// INTERNAL INCLUDES +#include "pimpanics.h" +#include "logger.h" + +// EXTERNAL INCLUDES +#include +#include + +// UNNAMED LOCAL NAMESPACE +namespace +{ +// Voip field Phonebook default identifier +const TInt KPIMIntPbkDefaultFieldVoip = 0x101F8863; +// SMS field Phonebook default ideintifier +const TInt KPIMIntPbkDefaultFieldSms = 0x101f4cf1; + +// PIM attribute vs Contacts Model field vCard map element size +const TInt KPIMFieldAttributeMapElementSize = 2; +// PIM attribute vs Contacts Model field vCard map map. This array +// maps PIM attributes to Contacts Model field vCard maps and vice versa +const TInt KPIMFieldAttributeMap[][KPIMFieldAttributeMapElementSize] = +{ + { EPIMContactAttrHome, KIntContactFieldVCardMapHOME }, + { EPIMContactAttrWork, KIntContactFieldVCardMapWORK }, + { EPIMContactAttrPreferred, KIntContactFieldVCardMapPREF }, + { EPIMContactAttrMobile, KIntContactFieldVCardMapCELL }, + { EPIMContactAttrPager, KIntContactFieldVCardMapPAGER }, + { EPIMContactAttrSms, KPIMIntPbkDefaultFieldSms }, + { EPIMContactAttrAsst, KIntContactFieldVCardMapAssistantTel }, + { EPIMContactAttrAuto, KIntContactFieldVCardMapCAR }, + { EPIMContactAttrExtVideoCall, KIntContactFieldVCardMapVIDEO }, + { EPIMContactAttrPreferred, KPIMIntPbkDefaultFieldVoip } +}; + +// PIM attribute vs. Contacts Model field vCard map map size +const TInt KPIMFieldAttributeMapSize = sizeof(KPIMFieldAttributeMap) + / (sizeof(TInt) * KPIMFieldAttributeMapElementSize); +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::NewL +// Two-phase constructor +// --------------------------------------------------------------------------- +// +CPIMContactFieldInfo* CPIMContactFieldInfo::NewL() +{ + JELOG2(EPim); + CPIMContactFieldInfo* self = CPIMContactFieldInfo::NewLC(); + CleanupStack::Pop(self); + return self; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::NewLC +// Two-phase constructor +// --------------------------------------------------------------------------- +// +CPIMContactFieldInfo* CPIMContactFieldInfo::NewLC() +{ + JELOG2(EPim); + CPIMContactFieldInfo* self = new(ELeave) CPIMContactFieldInfo; + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::~CPIMContactFieldInfo +// Destructor +// --------------------------------------------------------------------------- +// +CPIMContactFieldInfo::~CPIMContactFieldInfo() +{ + JELOG2(EPim); + delete iFieldsInfo; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::MatchContactField +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TPIMContactField CPIMContactFieldInfo::MatchContactField( + TInt aContactsModelFieldType) const +{ + JELOG2(EPim); + TInt count = iFieldsInfo->Count(); + for (TInt i = 0; i < count; i++) + { + const TPIMFieldInfo& fieldInfo = (*iFieldsInfo)[i]; + if (fieldInfo.iContactsModelField == aContactsModelFieldType) + { + return fieldInfo.iPIMField; + } + } + return EPIMContactInvalidField; // Invalid field +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::MatchPIMField +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CArrayFix* CPIMContactFieldInfo::MatchPIMFieldL( + TPIMContactField aContactField) const +{ + JELOG2(EPim); + CArrayFix* fieldArray = new(ELeave) CArrayFixFlat (7); + CleanupStack::PushL(fieldArray); + TInt count = iFieldsInfo->Count(); + for (TInt i = 0; i < count; i++) + { + const TPIMFieldInfo& fieldInfo = (*iFieldsInfo)[i]; + if (fieldInfo.iPIMField == aContactField) + { + fieldArray->AppendL(fieldInfo.iContactsModelField); + } + } + CleanupStack::Pop(fieldArray); + return fieldArray; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::MatchContactNameElement +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TInt CPIMContactFieldInfo::MatchContactArrayElement( + TInt aContactsModelFieldType) const +{ + JELOG2(EPim); + TInt count = iFieldsInfo->Count(); + for (TInt i = 0; i < count; i++) + { + const TPIMFieldInfo& fieldInfo = (*iFieldsInfo)[i]; + if (fieldInfo.iContactsModelField == aContactsModelFieldType) + { + return fieldInfo.iSubElement; + } + } + return -1; // Invalid field +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::FieldAttributes +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TPIMAttribute CPIMContactFieldInfo::FieldAttributes( + const CContentType& aContentType) const +{ + JELOG2(EPim); + TPIMAttribute retVal = KPIMAttrNone; + for (TInt i = 0; i < KPIMFieldAttributeMapSize; i++) + { + // Generate uid from the specified Contacts Model field id + TUid uid = + { KPIMFieldAttributeMap[i][1] }; + // Match if this content type contains certain PIM attribute + if (aContentType.ContainsFieldType(uid)) + { + retVal |= KPIMFieldAttributeMap[i][0]; + } + } + return retVal; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::FieldInternalAttributes +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CPIMContactFieldInfo::GetFieldInternalAttributesL( + const CContentType& aContentType, CArrayFix& aArrayOfAttributes) const +{ + JELOG2(EPim); + TInt fieldCount = aContentType.FieldTypeCount(); + for (TInt i = 0; i < fieldCount; i++) + { + TFieldType fieldType = aContentType.FieldType(i); + TBool isSupported = EFalse; + for (TInt j = 0; j < KPIMFieldAttributeMapSize && !isSupported; j++) + { + // Generate uid from the specified Contacts Model field id + TUid uid = + { KPIMFieldAttributeMap[j][1] }; + + // Add this attribute to internal attributes array if + // it is not supported. This covers all unknow attributes + // that those won't be lost when a database item is modified + if (fieldType == uid) + { + isSupported = ETrue; + } + } + // Check that if field info array knows this Uid + TInt fieldInfoCount = iFieldsInfo->Count(); + for (TInt j = 0; j < fieldInfoCount && !isSupported; j++) + { + const TPIMFieldInfo& fieldInfo = (*iFieldsInfo)[j]; + // Contacts Model field type values are defined as field types + // So the following mappings is equal to check with the field type + TUid uid = + { fieldInfo.iContactsModelField }; + if (fieldType == uid) + { + isSupported = ETrue; + } + } + // Not supported, add to internal attributes + if (!isSupported) + { + aArrayOfAttributes.AppendL(fieldType); + } + } +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::AddressContentTypeL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CContentType* CPIMContactFieldInfo::AddressContentTypeL( + TPIMContactAddrElement aElement, EContactFieldCategory aCategory) const +{ + JELOG2(EPim); + CContentType* type = NULL; + switch (aElement) + { + case EPIMContactAddrPoBox: + { + type = CContentType::NewL(KUidContactFieldPostOffice, + KUidContactFieldVCardMapPOSTOFFICE); + break; + } + case EPIMContactAddrExtra: + { + type = CContentType::NewL(KUidContactFieldExtendedAddress, + KUidContactFieldVCardMapEXTENDEDADR); + break; + } + case EPIMContactAddrStreet: + { + type = CContentType::NewL(KUidContactFieldAddress, + KUidContactFieldVCardMapADR); + break; + } + case EPIMContactAddrLocality: + { + type = CContentType::NewL(KUidContactFieldLocality, + KUidContactFieldVCardMapLOCALITY); + break; + } + case EPIMContactAddrRegion: + { + type = CContentType::NewL(KUidContactFieldRegion, + KUidContactFieldVCardMapREGION); + break; + } + case EPIMContactAddrPostalCode: + { + type = CContentType::NewL(KUidContactFieldPostcode, + KUidContactFieldVCardMapPOSTCODE); + break; + } + case EPIMContactAddrCountry: + { + type = CContentType::NewL(KUidContactFieldCountry, + KUidContactFieldVCardMapCOUNTRY); + break; + } + default: + { + User::Leave(KErrArgument); + } + } + CleanupStack::PushL(type); + + // Add category + if (EContactCategoryHome == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapHOME); + } + else if (EContactCategoryWork == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapWORK); + } + + CleanupStack::Pop(type); + return type; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::NameContentTypeL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CContentType* CPIMContactFieldInfo::NameContentTypeL( + TPIMContactNameElement aElement) const +{ + JELOG2(EPim); + CContentType* type = NULL; + switch (aElement) + { + case EPIMContactNameFamily: + { + type = CContentType::NewL(KUidContactFieldFamilyName, + KUidContactFieldVCardMapUnusedN); + break; + } + case EPIMContactNameGiven: + { + type = CContentType::NewL(KUidContactFieldGivenName, + KUidContactFieldVCardMapUnusedN); + break; + } + case EPIMContactNameOther: + { + type = CContentType::NewL(KUidContactFieldAdditionalName, + KUidContactFieldVCardMapUnusedN); + break; + } + case EPIMContactNameSuffix: + { + type = CContentType::NewL(KUidContactFieldSuffixName, + KUidContactFieldVCardMapUnusedN); + break; + } + case EPIMContactNamePrefix: + { + type = CContentType::NewL(KUidContactFieldPrefixName, + KUidContactFieldVCardMapUnusedN); + break; + } + case EPIMContactExtFamilyNameReading: + { + type = CContentType::NewL(KUidContactFieldFamilyNamePronunciation, + KUidContactFieldVCardMapUnusedN); + break; + } + case EPIMContactExtGivenNameReading: + { + type = CContentType::NewL(KUidContactFieldGivenNamePronunciation, + KUidContactFieldVCardMapUnusedN); + break; + } + default: + { + User::Leave(KErrArgument); + } + } + return type; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::StringFieldContentTypeL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CContentType* CPIMContactFieldInfo::StringFieldContentTypeL( + const TPIMContactField aContactField, const TPIMAttribute aAttributes, + EContactFieldCategory& aCategory) const +{ + JELOG2(EPim); + CContentType* type = NULL; + + switch (aContactField) + { + case EPIMContactEmail: + { + type = CContentType::NewL(KUidContactFieldEMail, + KUidContactFieldVCardMapEMAILINTERNET); + CleanupStack::PushL(type); + + if (EContactCategoryHome == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapHOME); + } + if (EContactCategoryWork == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapWORK); + } + if ((aAttributes & EPIMContactAttrPreferred) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapPREF); + } + CleanupStack::Pop(type); + break; + } + case EPIMContactNote: + { + type = CContentType::NewL(KUidContactFieldNote, + KUidContactFieldVCardMapNOTE); + aCategory = EContactCategoryOther; + break; + } + case EPIMContactOrg: + { + type = CContentType::NewL(KUidContactFieldCompanyName, + KUidContactFieldVCardMapORG); + aCategory = EContactCategoryWork; + break; + } + case EPIMContactTel: + { + // PIM API Contact.TEL field is mapped to either a + // telephone or a fax field in Contacts Model according to + // PIM API attributes + if ((aAttributes & EPIMContactAttrFax) != 0) + { + type = CContentType::NewL(KUidContactFieldFax, + KUidContactFieldVCardMapTEL); + } + else + { + type = CContentType::NewL(KUidContactFieldPhoneNumber, + KUidContactFieldVCardMapTEL); + } + CleanupStack::PushL(type); + + // PIM API attributes are further mapped to details in + // Contacts Model fields. + // Fax, pager and mobile numbers are preferred in this order + // (rarest first). + if ((aAttributes & EPIMContactAttrFax) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapFAX); + } + else if ((aAttributes & EPIMContactAttrPager) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapPAGER); + aCategory = EContactCategoryNone; + } + else if ((aAttributes & EPIMContactAttrMobile) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapCELL); + } + else if ((aAttributes & EPIMContactAttrAuto) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapCAR); + aCategory = EContactCategoryNone; + } + else if ((aAttributes & EPIMContactAttrAsst) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapAssistantTel); + // Assistant Phone is not mapped as a Telephone field in Pbk + // so we have to set the mapping to match it + type->SetMapping(KUidContactFieldVCardMapAssistantTel); + } + else if ((aAttributes & EPIMContactAttrExtVideoCall) != 0) + { + type ->AddFieldTypeL(KUidContactFieldVCardMapVIDEO); + } + else if ((aAttributes & EPIMContactAttrOther) != 0) + { + // Discard ATTR_OTHER because contacts model doesn't + // provide anything where we could map this attribute + } + else + { + type->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + } + + if (EContactCategoryHome == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapHOME); + } + if (EContactCategoryWork == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapWORK); + } + if ((aAttributes & EPIMContactAttrPreferred) != 0) + { + type->AddFieldTypeL(KUidContactFieldVCardMapPREF); + } + if ((aAttributes & EPIMContactAttrSms) != 0) + { + TUid uid = + { KPIMIntPbkDefaultFieldSms }; + type->AddFieldTypeL(uid); + } + CleanupStack::Pop(type); + break; + } + case EPIMContactTitle: + { + type = CContentType::NewL(KUidContactFieldJobTitle, + KUidContactFieldVCardMapTITLE); + aCategory = EContactCategoryWork; + break; + } + case EPIMContactNickname: + { + type = CContentType::NewL(KUidContactFieldSecondName, + KUidContactFieldVCardMapSECONDNAME); + break; + } + case EPIMContactUrl: + { + type = CContentType::NewL(KUidContactFieldUrl, + KUidContactFieldVCardMapURL); + CleanupStack::PushL(type); + if (EContactCategoryHome == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapHOME); + } + if (EContactCategoryWork == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapWORK); + } + CleanupStack::Pop(type); + break; + } + case EPIMContactExtSip: + { + type = CContentType::NewL(KUidContactFieldSIPID, + KUidContactFieldVCardMapSIPID); + CleanupStack::PushL(type); + // Phonebook needs this field to separate SIP field from VOIP field + type->AddFieldTypeL(KUidContactFieldVCardMapSIPID); + CleanupStack::Pop(type); + break; + } + case EPIMContactExtDtmf: + { + // Note: DTMF is not imported or exported in vCards + type = CContentType::NewL(KUidContactFieldDTMF, + KUidContactFieldVCardMapUnknown); + break; + } + case EPIMContactExtWvUserId: + { + type = CContentType::NewL(KUidContactFieldIMAddress, + KUidContactFieldVCardMapWV); + break; + } + case EPIMContactExtDepartment: + { + type = CContentType::NewL(KUidContactFieldDepartmentName, + KUidContactFieldVCardMapDepartment); + break; + } + case EPIMContactExtAssistantName: + { + type = CContentType::NewL(KUidContactFieldAssistant, + KUidContactFieldVCardMapAssistant); + break; + } + case EPIMContactExtChildren: + { + type = CContentType::NewL(KUidContactFieldChildren, + KUidContactFieldVCardMapChildren); + break; + } + case EPIMContactExtSpouse: + { + type = CContentType::NewL(KUidContactFieldSpouse, + KUidContactFieldVCardMapSpouse); + break; + } + case EPIMContactExtVoip: + { + type = CContentType::NewL(KUidContactFieldSIPID, + KUidContactFieldVCardMapVOIP); + CleanupStack::PushL(type); + if (EContactCategoryHome == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapHOME); + } + if (EContactCategoryWork == aCategory) + { + type->AddFieldTypeL(KUidContactFieldVCardMapWORK); + } + if ((aAttributes & EPIMContactAttrPreferred) != 0) + { + TUid uid = + { KPIMIntPbkDefaultFieldVoip }; + type->AddFieldTypeL(uid); + } + CleanupStack::Pop(type); + break; + } + case EPIMContactExtPTT: + { + type = CContentType::NewL(KUidContactFieldSIPID, + KUidContactFieldVCardMapPOC); + CleanupStack::PushL(type); + // Phonebook needs this field to separate SIP field from PTT field + type->AddFieldTypeL(KUidContactFieldVCardMapPOC); + CleanupStack::Pop(type); + break; + } + case EPIMContactExtSWIS: + { + type = CContentType::NewL(KUidContactFieldSIPID, + KUidContactFieldVCardMapSWIS); + CleanupStack::PushL(type); + // Phonebook needs this field to separate SIP field from SWIS field + type->AddFieldTypeL(KUidContactFieldVCardMapSWIS); + CleanupStack::Pop(type); + break; + } + default: + { + __ASSERT_DEBUG(EFalse, User::Panic(KPIMPanicCategory, + EPIMPanicUnsupportedField)); + } + } + + return type; +} + +// --------------------------------------------------------------------------- +// CPIMContactFieldInfo::CPIMContactFieldInfo +// Default C++ constructor +// --------------------------------------------------------------------------- +// +inline CPIMContactFieldInfo::CPIMContactFieldInfo() +{ + JELOG2(EPim); +} + +void CPIMContactFieldInfo::ConstructL() +{ + JELOG2(EPim); + // 5 for array granularity + iFieldsInfo = new(ELeave) CArrayFixFlat (5); + + // Add fields to the array + // Name fields and sub-elements + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldFamilyNameValue, + EPIMContactName, EPIMContactNameFamily)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldGivenNameValue, + EPIMContactName, EPIMContactNameGiven)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldAdditionalNameValue, + EPIMContactName, EPIMContactNameOther)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSuffixNameValue, + EPIMContactName, EPIMContactNameSuffix)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldPrefixNameValue, + EPIMContactName, EPIMContactNamePrefix)); + iFieldsInfo->AppendL(TPIMFieldInfo( + KUidContactFieldFamilyNamePronunciationValue, EPIMContactName, + EPIMContactExtFamilyNameReading)); + iFieldsInfo->AppendL(TPIMFieldInfo( + KUidContactFieldGivenNamePronunciationValue, EPIMContactName, + EPIMContactExtGivenNameReading)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSecondNameValue, + EPIMContactNickname)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldPhoneNumberValue, + EPIMContactTel)); + + iFieldsInfo->AppendL( + TPIMFieldInfo(KUidContactFieldFaxValue, EPIMContactTel)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldEMailValue, + EPIMContactEmail)); + + iFieldsInfo->AppendL( + TPIMFieldInfo(KUidContactFieldUrlValue, EPIMContactUrl)); + + // Address fields and sub-elements + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldAddressValue, + EPIMContactAddr, EPIMContactAddrStreet)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldPostOfficeValue, + EPIMContactAddr, EPIMContactAddrPoBox)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldExtendedAddressValue, + EPIMContactAddr, EPIMContactAddrExtra)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldPostCodeValue, + EPIMContactAddr, EPIMContactAddrPostalCode)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldLocalityValue, + EPIMContactAddr, EPIMContactAddrLocality)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldRegionValue, + EPIMContactAddr, EPIMContactAddrRegion)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldCountryValue, + EPIMContactAddr, EPIMContactAddrCountry)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldCompanyNameValue, + EPIMContactOrg)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldNoteValue, + EPIMContactNote)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldJobTitleValue, + EPIMContactTitle)); + // VOIP, SIP and PoC are mapped under the same Contacts Model field + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSIPIDValue, + EPIMContactExtSip)); + + // PTT is recognized with KIntContactFieldVCardMapPOC and SIPID + iFieldsInfo->AppendL(TPIMFieldInfo(KIntContactFieldVCardMapPOC, + EPIMContactExtPTT)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSIPIDValue, + EPIMContactExtPTT)); + + // SWIS is recognized with KIntContactFieldVCardMapSWIS and SIPID + iFieldsInfo->AppendL(TPIMFieldInfo(KIntContactFieldVCardMapSWIS, + EPIMContactExtSWIS)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSIPIDValue, + EPIMContactExtSWIS)); + + // VOIP is recognized with KIntContactFieldVCardMapVOIP and SIPID + iFieldsInfo->AppendL(TPIMFieldInfo(KIntContactFieldVCardMapVOIP, + EPIMContactExtVoip)); + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSIPIDValue, + EPIMContactExtVoip)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldDTMFValue, + EPIMContactExtDtmf)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldIMAddressValue, + EPIMContactExtWvUserId)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldAssistantValue, + EPIMContactExtAssistantName)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldSpouseValue, + EPIMContactExtSpouse)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldChildrenValue, + EPIMContactExtChildren)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldDepartmentNameValue, + EPIMContactExtDepartment)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldAnniversaryValue, + EPIMContactExtAnniversary)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldBirthdayValue, + EPIMContactBirthday)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldClassValue, + EPIMContactClass)); + + iFieldsInfo->AppendL(TPIMFieldInfo(KUidContactFieldPictureValue, + EPIMContactPhoto)); +} + +// End of file