diff -r 000000000000 -r e686773b3f54 pimprotocols/pbap/inc/pbapcontactdbviews.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pimprotocols/pbap/inc/pbapcontactdbviews.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,124 @@ +// Copyright (c) 2006-2009 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: +// + +#ifndef PBAPCONTACTDBVIEWS_H +#define PBAPCONTACTDBVIEWS_H + +#include +#include +#include +#include +#include +#include +#include + +#include "pbaprequest.h" + + +class MPbapContactDbViewsCallback + { +public: + virtual void HandleSearchAndSortComplete(TInt aError)=0; + }; + + +/** +Provides API to search database and sort the results into name or pronunciation +field order using contact database views +*/ +class CPbapContactDbViews : public CBase, public MContactViewObserver, public MIdleFindObserver + { +public: + static CPbapContactDbViews* NewL(CContactDatabase& aDatabase); + ~CPbapContactDbViews(); + +public: + HBufC* GetContactNameFromIdL(TContactItemId aContactId) const; + void GetContactIdsMatchingCriteriaL(SymbianPBAP::TOrder aOrder, SymbianPBAP::TSearchAttribute aSearchAttribute, const TDesC& aSearchValue, CContactIdArray& aResults, MPbapContactDbViewsCallback& aCallback); + void CancelSearchAndSortRequest(); + + void CloseAllViews(); + +private: + CPbapContactDbViews(CContactDatabase& aDatabase); + + void CreateNameViewL(); + void CreatePhoneticViewL(); + + void AppendField(HBufC* aBuf, TUid aUid, const CContactItemFieldSet& aFieldSet, TBool aLast = EFalse) const; + + CContactIdArray* GetContactIdsInViewL(CContactViewBase& aView); + TBool IsPhoneticViewRequired() const; + + static TInt SearchAndSortCallback(TAny* aAny); + void DoSearchAndSortL(); + void DoSortL(); + void DoSearchAndSortCallback(); + + void FindInViewL(CContactViewBase& aView); + void FindInPhoneFieldsL(); + + void HandleIdleFindCompleteL(); + void HandleFindInViewCompleteL(); + + void DoSortSearchResultsL(CContactIdArray& aContactIds); + void ResortIdsInViewOrderL(CContactIdArray& aContactIds, CContactViewBase& aView); + void CopyToResultsArrayL(const CContactIdArray& aContactIds); + + void NotifySearchAndSortComplete(TInt aError); + void CancelAndCleanup(); + +private: + //from MContactViewObserver + void HandleContactViewEvent(const CContactViewBase &aView, const TContactViewEvent &aEvent); + + //from MIdleFindObserver + void IdleFindCallback(); + +private: + enum TSearchAndSortOpState + { + EIdle, + EPendingSearch, + ESearching, + ESorting + }; +private: + CContactDatabase& iDatabase; + + CContactLocalView* iNameView; + CContactLocalView* iPhoneticView; + TBool iNameViewReady; + TBool iPhoneticViewReady; + + TSearchAndSortOpState iOpState; + SymbianPBAP::TOrder iOrder; + SymbianPBAP::TSearchAttribute iSearchAttribute; + HBufC* iSearchValue; + + CContactFindView* iFindView; + CPtrCArray* iSearchValueArray; + + CIdleFinder* iIdleFinder; + CContactItemFieldDef* iFindFieldDef; + + CAsyncCallBack* iAsyncCallback; + +private: + MPbapContactDbViewsCallback* iCallback; // not owned + CContactIdArray* iResults; // not owned + }; + +#endif //PBAPCONTACTDBVIEWS_H