--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/PhoneCntFinder/ContactService/src/tphcntcontactfield.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,261 @@
+/*
+* Copyright (c) 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: Implementation of TPhCntContactField class.
+*
+*/
+
+
+#include <VPbkFieldType.hrh>
+#include <TVPbkFieldTypeParameters.h>
+#include <VPbkEng.rsg>
+#include <MVPbkStoreContactField.h>
+
+#include "MPhCntContactManager.h"
+#include "tphcntcontactfield.h"
+#include "PhCntTrace.h"
+
+// Speed dial related constants
+const TInt KPhCntPositionNotSet = 0;
+const TInt KPhCntPositionMin = 1;
+const TInt KPhCntPositionMax = 9;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+TPhCntContactField::TPhCntContactField() :
+ iDataPointedByContactLink( EFalse ),
+ iContactFieldId( 0 )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+TPhCntContactField::TPhCntContactField(
+ TInt aContactFieldId ) :
+ iDataPointedByContactLink( EFalse ),
+ iContactFieldId( aContactFieldId )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+TPhCntContactField::~TPhCntContactField()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// Gives the contact field data.
+// ---------------------------------------------------------------------------
+//
+const TDesC& TPhCntContactField::Data() const
+ {
+ return iContactFieldData;
+ }
+
+// ---------------------------------------------------------------------------
+// Checks if this resolver is received datas resolver. If so then sets
+// the contact field data.
+// ---------------------------------------------------------------------------
+//
+void TPhCntContactField::Resolve(
+ TInt aContactFieldId,
+ const TDesC& aFieldData,
+ TBool aPointedData )
+ {
+ if( iContactFieldId == aContactFieldId )
+ {
+ SetData( aFieldData, aPointedData );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the contact field data if the possible earlier data is not
+// data which has been pointed by contact link.
+// ---------------------------------------------------------------------------
+//
+void TPhCntContactField::SetData(
+ const TDesC& aData,
+ TBool aPointedData )
+ {
+ if( !iDataPointedByContactLink )
+ {
+ iDataPointedByContactLink = aPointedData;
+ PRINTF( "PhCnt: ContactField.SetData: %S", &aData );
+ iContactFieldData.Set( aData );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+TPhCntPhoneNumber::TPhCntPhoneNumber() :
+ TPhCntContactField( EVPbkVersitNameTEL )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+TPhCntPhoneNumber::~TPhCntPhoneNumber()
+ {
+ iAllNumbers.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// Gives the phone number pointed by contact link
+// ---------------------------------------------------------------------------
+//
+const TPhCntNumber& TPhCntPhoneNumber::Number() const
+ {
+ return iPointedNumber;
+ }
+
+// ---------------------------------------------------------------------------
+// Gives all numbers resolved.
+// ---------------------------------------------------------------------------
+//
+const RArray<TPhCntNumber>& TPhCntPhoneNumber::AllNumbers() const
+ {
+ return iAllNumbers;
+ }
+
+// ---------------------------------------------------------------------------
+// Resolves phone number and its type.
+// ---------------------------------------------------------------------------
+//
+void TPhCntPhoneNumber::ResolveL(
+ TInt aContactFieldId,
+ const TDesC& aFieldData,
+ TBool aPointedData,
+ MPhCntContactManager& aContactManager,
+ MVPbkStoreContactField& aContactField )
+ {
+
+ // Evaluate fields type information
+ const MPhCntMatch::TNumberType numberType = PhoneNumberType( aContactFieldId );
+ if ( numberType != MPhCntMatch::ENone )
+ {
+ TBool speedDial = EFalse;
+ // Test all speed dial positions
+ for( TInt positionIndex = KPhCntPositionMin; positionIndex <= KPhCntPositionMax; positionIndex++ )
+ {
+ if ( aContactManager.HasSpeedDialL( positionIndex, aContactField ) )
+ {
+ speedDial = ETrue;
+ // Add phone number & position specific entry
+ SetNumber( aFieldData, numberType, aPointedData, positionIndex );
+ }
+ }
+ if ( !speedDial )
+ {
+ // Add at least one phone number entry without any positions
+ SetNumber( aFieldData, numberType, aPointedData, KPhCntPositionNotSet );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Evaluates the type of a phone number field.
+// ---------------------------------------------------------------------------
+//
+MPhCntMatch::TNumberType TPhCntPhoneNumber::PhoneNumberType(
+ TInt aContactFieldId )
+ {
+ MPhCntMatch::TNumberType numberType = MPhCntMatch::ENone;
+
+ switch( aContactFieldId )
+ {
+ case R_VPBK_FIELD_TYPE_MOBILEPHONEGEN:
+ case R_VPBK_FIELD_TYPE_MOBILEPHONEWORK:
+ case R_VPBK_FIELD_TYPE_MOBILEPHONEHOME:
+ numberType = MPhCntMatch::EMobileNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_VOIPHOME:
+ case R_VPBK_FIELD_TYPE_VOIPWORK:
+ case R_VPBK_FIELD_TYPE_VOIPGEN:
+ case R_VPBK_FIELD_TYPE_IMPP:
+ case R_VPBK_FIELD_TYPE_SIP:
+ numberType = MPhCntMatch::EVoipNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_LANDPHONEHOME:
+ case R_VPBK_FIELD_TYPE_LANDPHONEWORK:
+ case R_VPBK_FIELD_TYPE_LANDPHONEGEN:
+
+ numberType = MPhCntMatch::EStandardNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_PAGERNUMBER:
+ numberType = MPhCntMatch::EPagerNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_FAXNUMBERGEN:
+ case R_VPBK_FIELD_TYPE_FAXNUMBERHOME:
+ case R_VPBK_FIELD_TYPE_FAXNUMBERWORK:
+ numberType = MPhCntMatch::EFaxNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_VIDEONUMBERHOME:
+ case R_VPBK_FIELD_TYPE_VIDEONUMBERWORK:
+ case R_VPBK_FIELD_TYPE_VIDEONUMBERGEN:
+ numberType = MPhCntMatch::EVideoNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_ASSTPHONE:
+ numberType = MPhCntMatch::EAssistantNumber;
+ break;
+
+ case R_VPBK_FIELD_TYPE_CARPHONE:
+ numberType = MPhCntMatch::ECarNumber;
+ break;
+
+ default:
+ // Not a phone number.
+ break;
+ }
+ return numberType;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets number
+// ---------------------------------------------------------------------------
+//
+void TPhCntPhoneNumber::SetNumber(
+ const TDesC& aNumber,
+ MPhCntMatch::TNumberType aNumberType,
+ TBool aPointedField,
+ TInt aSpeedDialPosition )
+ {
+ if( aPointedField && !iDataPointedByContactLink )
+ {
+ iDataPointedByContactLink = ETrue;
+ iPointedNumber.Set( aNumber, aNumberType, aSpeedDialPosition );
+ }
+ iAllNumbers.Append( TPhCntNumber( aNumber, aNumberType, aSpeedDialPosition ) );
+ }
+
+