diff -r 000000000000 -r 5f000ab63145 phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactfieldsresolver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactfieldsresolver.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,434 @@ +/* +* Copyright (c) 2006 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: Resolves contact's fields +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MPhCntContactManager.h" +#include "cphcntcontactfieldsresolver.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CPhCntContactFieldsResolver::CPhCntContactFieldsResolver( + MVPbkContactLink* aContactLink, + MVPbkStoreContact* aContact, + MPhCntContactManager& aContactManager ) : + iFirstNameResolver( R_VPBK_FIELD_TYPE_FIRSTNAME ), + iLastNameResolver(R_VPBK_FIELD_TYPE_LASTNAME), + iCompanyNameResolver( R_VPBK_FIELD_TYPE_COMPANYNAME ), + iSecondNameResolver( R_VPBK_FIELD_TYPE_SECONDNAME ), + iRingingToneResolver( R_VPBK_FIELD_TYPE_RINGTONE ), + iFirstNamePronunciationResolver( R_VPBK_FIELD_TYPE_FIRSTNAMEREADING ), + iLastNamePronunciationResolver( R_VPBK_FIELD_TYPE_LASTNAMEREADING ), + iCompanyNamePronunciationResolver( R_VPBK_FIELD_TYPE_COMPANYNAME ), + iCallImageResolver( R_VPBK_FIELD_TYPE_CALLEROBJIMG ), + iCallTextResolver( R_VPBK_FIELD_TYPE_CALLEROBJTEXT ), + iDtmfResolver( R_VPBK_FIELD_TYPE_DTMFSTRING ), + iContactLink( aContactLink ), + iContact( aContact ), + iContactManager( aContactManager ), + iNameFormatter( aContactManager.ContactNameFormatter() ) + { + + } + + +// --------------------------------------------------------------------------- +// Secondphase constructor. +// --------------------------------------------------------------------------- +// +void CPhCntContactFieldsResolver::ConstructL() + { + iAllDtmfNumbers = new ( ELeave ) CDesCArrayFlat( 2 ); + // Check if contactlink is pointing directly to some contact field. + // If there is pointed field, then it is going to be in resolved contact fields. + // For example there migth be many phonenumbers in contact, but the + // we want to have only the pointed number resolved. + MVPbkStoreContactField* field = iContact->Fields(). + RetrieveField( *iContactLink ); + if( field != NULL ) + { + ResolveFieldL( *field, ETrue ); + } + + // Go through the contact's field and resolve the fields. + MVPbkStoreContactFieldCollection& fields = iContact->Fields(); + const TInt fieldCount( fields.FieldCount() ); + for( TInt i = 0; i < fieldCount; i++ ) + { + MVPbkStoreContactField& field = fields.FieldAt( i ); + ResolveFieldL( field, EFalse ); + } + } + +// --------------------------------------------------------------------------- +// Resolves contact's fields +// --------------------------------------------------------------------------- +// +void CPhCntContactFieldsResolver::ResolveFieldL( + MVPbkStoreContactField& aContactField, + TBool aFieldPointedByContactLink ) + { + MVPbkContactFieldData& fieldData = aContactField.FieldData(); + + const MVPbkFieldType* fieldType = aContactField.BestMatchingFieldType(); + if( fieldType ) + { + const TInt fieldId( fieldType->FieldTypeResId() ); + if( fieldData.DataType() == EVPbkFieldStorageTypeText ) + { + const TPtrC fieldTextData = + MVPbkContactFieldTextData::Cast( fieldData ).Text(); + + ResolveFieldDataL( aContactField, + fieldTextData, + aFieldPointedByContactLink ); + + // DTMF field is only used if the contact link was pointing to it. + if( aFieldPointedByContactLink ) + { + iDtmfResolver.Resolve( + fieldId, + fieldTextData, + aFieldPointedByContactLink ); + } + + if ( fieldId == R_VPBK_FIELD_TYPE_DTMFSTRING ) + { + TRAP_IGNORE( iAllDtmfNumbers->AppendL( fieldTextData ) ); + } + } + else if ( fieldData.DataType() == EVPbkFieldStorageTypeUri ) + { + MVPbkContactFieldUriData& textData = + MVPbkContactFieldUriData::Cast( fieldData ); + TPtrC fieldTextData = textData.Text(); + + ResolveFieldDataL( aContactField, + fieldTextData, + aFieldPointedByContactLink ); + + } + + // Check for thumbnail field. + if( fieldId == R_VPBK_FIELD_TYPE_THUMBNAILPIC ) + { + iThumbnailField = fieldType; + } + + } + } + +// --------------------------------------------------------------------------- +// Resolves contact's fields +// --------------------------------------------------------------------------- +// +void CPhCntContactFieldsResolver::ResolveFieldDataL( + MVPbkStoreContactField& aContactField, + const TPtrC aFieldTextData, + TBool aFieldPointedByContactLink ) + { + MVPbkContactFieldData& fieldData = aContactField.FieldData(); + + const MVPbkFieldType* fieldType = aContactField.BestMatchingFieldType(); + const TInt fieldId( fieldType->FieldTypeResId() ); + + iPhoneNumberResolver.ResolveL( fieldId, aFieldTextData, + aFieldPointedByContactLink, iContactManager, aContactField ); + iFirstNameResolver.Resolve( fieldId, aFieldTextData, + aFieldPointedByContactLink ); + iLastNameResolver.Resolve( fieldId, aFieldTextData, + aFieldPointedByContactLink ); + iCompanyNameResolver.Resolve( fieldId, aFieldTextData, + aFieldPointedByContactLink ); + iSecondNameResolver.Resolve( fieldId, aFieldTextData, + aFieldPointedByContactLink ); + iRingingToneResolver.Resolve( fieldId, aFieldTextData, + aFieldPointedByContactLink ); + iFirstNamePronunciationResolver.Resolve( fieldId, aFieldTextData, + aFieldPointedByContactLink ); + iLastNamePronunciationResolver.Resolve( fieldId, + aFieldTextData, aFieldPointedByContactLink ); + iCompanyNamePronunciationResolver.Resolve( fieldId, + aFieldTextData, aFieldPointedByContactLink ); + + iCallImageResolver.Resolve( fieldId, + aFieldTextData, + aFieldPointedByContactLink ); + + iCallTextResolver.Resolve( fieldId, + aFieldTextData, + aFieldPointedByContactLink ); + + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CPhCntContactFieldsResolver* CPhCntContactFieldsResolver::NewL( + MVPbkContactLink* aContactLink, + MVPbkStoreContact* aContact, + MPhCntContactManager& aContactManager ) + { + CPhCntContactFieldsResolver* self = + CPhCntContactFieldsResolver::NewLC( + aContactLink, aContact, aContactManager ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Static constructor +// --------------------------------------------------------------------------- +// +CPhCntContactFieldsResolver* CPhCntContactFieldsResolver::NewLC( + MVPbkContactLink* aContactLink, + MVPbkStoreContact* aContact, + MPhCntContactManager& aContactManager ) + { + CPhCntContactFieldsResolver* self = + new( ELeave ) CPhCntContactFieldsResolver( + aContactLink, + aContact, + aContactManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CPhCntContactFieldsResolver::~CPhCntContactFieldsResolver() + { + delete iContact; + delete iContactLink; + delete iAllDtmfNumbers; + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +MVPbkContactLink* CPhCntContactFieldsResolver::ContactLink() const + { + return iContactLink; + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +MPhCntMatch::TNumberType + CPhCntContactFieldsResolver::NumberType() const + { + return iPhoneNumberResolver.Number().Type(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::FirstName() const + { + return iFirstNameResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::LastName() const + { + return iLastNameResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::CompanyName() const + { + return iCompanyNameResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::Number() const + { + return iPhoneNumberResolver.Number().Number(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::Dtmf() const + { + return iDtmfResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::PersonalRingingTone() const + { + return iRingingToneResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::SecondName() const + { + return iSecondNameResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::FirstNamePronunciation() const + { + return iFirstNamePronunciationResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::LastNamePronunciation() const + { + return iLastNamePronunciationResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::CompanyNamePronunciation() const + { + return iCompanyNamePronunciationResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +HBufC* CPhCntContactFieldsResolver::GetContactTitleL() + { + return iNameFormatter.GetContactTitleOrNullL( + iContact->Fields(), + MPbk2ContactNameFormatter::EPreserveLeadingSpaces | + MPbk2ContactNameFormatter::EUseSeparator | + MPbk2ContactNameFormatter::EReplaceNonGraphicChars ); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +MVPbkContactLinkArray* CPhCntContactFieldsResolver::ContactGroupsLC() const + { + return iContact->GroupsJoinedLC(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// + MVPbkStoreContact& CPhCntContactFieldsResolver::StoreContact() const + { + return *iContact; + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +const MVPbkFieldType* CPhCntContactFieldsResolver::ThumbnailField() const + { + return iThumbnailField; + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::CallImage() const + { + return iCallImageResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TPtrC CPhCntContactFieldsResolver::CallText() const + { + return iCallTextResolver.Data(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +TBool CPhCntContactFieldsResolver::HasThumbnail() const + { + return ( iThumbnailField != NULL ); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +const RArray& CPhCntContactFieldsResolver::AllNumbers() const + { + return iPhoneNumberResolver.AllNumbers(); + } + +// --------------------------------------------------------------------------- +// From class MPhCntContactFields +// --------------------------------------------------------------------------- +// +CDesCArray* CPhCntContactFieldsResolver::AllDtmfNumbers() const + { + return iAllDtmfNumbers; + }