phoneengine/PhoneCntFinder/ContactService/src/tphcntcontactfield.cpp
changeset 0 5f000ab63145
--- /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 ) );
+    }
+    
+