diff -r 41a7f70b3818 -r 5266b1f337bd phoneengine/PhoneCntFinder/ContactService/inc/CPhCntMatcherImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneengine/PhoneCntFinder/ContactService/inc/CPhCntMatcherImpl.h Wed Sep 01 12:30:10 2010 +0100 @@ -0,0 +1,268 @@ +/* +* 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: Matcher implementation +* +*/ + +#ifndef CPHCNTCNTMATCHERIMPL_H +#define CPHCNTCNTMATCHERIMPL_H + +#include +#include "CPhCntMatcher.h" +#include "MVPbkContactLink.h" +#include "MPhCntContactManager.h" +#include "tphcntcontactselectionstrategy.h" + +class MPhCntContactStores; +class CPhCntContactManager; +class CPhCntContact; +class CPhCntMatchContact; +class CPhCntFetchContact; +class MVPbkContactLink; +class CPhCntFoundContacts; +class CCntNumberParser; +class MPhoneCntPbkOwner; +class MPhCntContactMatchStrategy; +class CVPbkContactStoreUriArray; + + +/** + * CPhCntMatcher implementation. + * + * @since S60 v3.1 + * @lib PhoneCntFinder.lib. + */ +NONSHARABLE_CLASS( CPhCntMatcherImpl ) : public CPhCntMatcher + { +public: + + /** + * Static constructor. + * + * @since S60 v3.1 + * @param aOwner Phonebook owner. + */ + static CPhCntMatcherImpl* NewL( const MPhoneCntPbkOwner& aOwner ); + + /** + * Destructor. + * + * @since S60 v3.1 + */ + ~CPhCntMatcherImpl(); + +// From base class CPhCntMatcher + + /** + * From base class CPhCntMatcher + * + * @since S60 v3.1 + * @see CPhCntMatcher. + */ + TInt MatchNumber( + MPhCntMatch*& aMatch, + const TDesC& aTelNumber ); + + /** + * From base class CPhCntMatcher + * + * @since S60 v3.1 + * @see CPhCntMatcher. + */ + TInt MatchNumber( + MPhCntMatch*& aMatch, + const TDesC& aTelNumber, + const CPhCntContactId& aContactId ); + + +// NOT USED BY ANYONE? + /** + * Match number to phonebook. + * @param aMatch Found match, owership tranferred. NULL if not found any. + * @param aTelNumber Number to match against. + * @param aContactId Current contact. + * @param aFieldId Current field id (index from CnmModel); + * @return Error code: KErrNone - one match found + * KErrNotFound - no matches found + * KErrAlreadyExists - several matches -> no match + * KErrUnderflow - Number too short for matching + * KErrAccessDenied - Can't get phonebook instance + * other - normal Symbian OS error + */ + TInt MatchNumber( + MPhCntMatch*& /*aMatch*/, + const TDesC& /*aTelNumber*/, + const CPhCntContactId& /*aContactId*/, + MPhCntMatch::TNumberType /*aNumberType*/ ) + { + return KErrNotFound; + }; + + /** + * Match number to phonebook. + * @param aMatch Found match, owership tranferred. NULL if not found any. + * @param aMatchString Number to match against. + * @return Error code: KErrNone - one match found + * KErrNotFound - no matches found + * other - normal Symbian OS error + */ + TInt MatchVoipNumber( + MPhCntMatch*& aMatch, + const TDesC& aMatchString, + TBool aAllowUserNameMatch, + MDesCArray* aContactStoreUris, + TInt aCharsForMatching = 0 ); + + /** + * From CPhCntMatcher, gets VoIP call contact info from phonebook + * by contact id. + * @since Series60 3.0 + * @param aMatch for found match, owership tranferred. Empty if not found. + * @param aMatchString Number to match against. + * @param aContactId for current contact. + * @return Error code: KErrNone - VoIP call contact found + * KErrNotFound - no VoIP call contact found + * other - normal Symbian OS error + */ + TInt MatchVoipNumber( + MPhCntMatch*& aMatch, + const TDesC& aMatchString, + const CPhCntContactId& aContactId ); + + + /** + * From CPhCntMatcher + * Determines if contact has other type of numbers than + * voip numbers. + * + * @since S60 v3.2. + * @param aContactId Id of the contact. + * @return ETrue - CS numbers found from contact. + * EFalse - No CS numbers found from contact. + */ + TBool HasCSNumbers( + const CPhCntContactId& aContactId ); + +private: + + /** + * Tries to get a contact with known number. + * + * @since S60 v3.1 + * @param aMatch Contact + * @param aTelNumber Phone number. + * @return Error code. + */ + TInt GetContactL( + MPhCntMatch*& aMatch, + const TDesC& aTelNumber ); + + /** + * Matches contacts + */ + TInt MatchContactL( + const MVPbkContactLinkArray*& aContactLinkArray, + const TDesC& aTelNumber, + MPhCntContactManager::TDuplicateRemovalStrategy aRemoveDuplicatesStrategy ); + +protected: + + CPhCntMatcherImpl( const MPhoneCntPbkOwner& aOwner ); + + void ConstructL(); + + /** + * Delayed on-demand based construction (grabs leaves). + * Should be called from functions where a member attribute + * (those constructed here) is referenced. + */ + TInt CreateMatcher(); + + /** + * Delayed on-demand based construction (leaving). + */ + void DoCreateMatcherL(); + + /** + * Fetches contact pointed by aContactLink from + * contact stores. + * + * @since S60 v3.1 + * @param aMatch Fetched contact. Is null if contact was not found. + * @param aContactLink Link to the contact. + * @param aOrigNumber Phone number that was used + * to find the contact. + * @return Error code. + */ + TInt FetchContact( + CPhCntContact*& aMatch, + const MVPbkContactLink& aContactLink, + const TDesC& aOrigNumber ); + + + +protected: // Data + + /** + * Already found contacs. + * Own. + */ + CPhCntFoundContacts* iFoundContacts; + + /** + * Contact mathching operation. + * Own. + */ + CPhCntMatchContact* iMatchContact; + + + /** + * Contact fetching operation. + * Own. + */ + CPhCntFetchContact* iFetchContact; + + + /** + * Contact manager. + * Not own. + */ + CPhCntContactManager& iContactManager; + +private: // Data + + /** + * Contact stores + * Own. + */ + MPhCntContactStores* iContactStores; + + /** + * Owner of phone book. + * Not own. + */ + const MPhoneCntPbkOwner& iPbkOwner; + + /** + * Match strategy used for CS calls. + * Own. + */ + MPhCntContactMatchStrategy* iCSMatchStrategy; + + + TPhCntContactSelectionStrategy iContactSelectionStrategy; + + }; + +#endif // CPHCNTCNTMATCHERIMPL_H