--- /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 <MVPbkContactLink.h>
+#include <MVPbkStoreContact.h>
+#include <MPbk2ContactNameFormatter.h>
+#include <MVPbkStoreContactFieldCollection.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkContactFieldData.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactFieldUriData.h>
+#include <TVPbkFieldVersitProperty.h>
+#include <VPbkEng.rsg>
+#include <badesca.h>
+
+#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<TPhCntNumber>& CPhCntContactFieldsResolver::AllNumbers() const
+ {
+ return iPhoneNumberResolver.AllNumbers();
+ }
+
+// ---------------------------------------------------------------------------
+// From class MPhCntContactFields
+// ---------------------------------------------------------------------------
+//
+CDesCArray* CPhCntContactFieldsResolver::AllDtmfNumbers() const
+ {
+ return iAllDtmfNumbers;
+ }