diff -r a3a1ae9acec6 -r da5135c61bad emailcontacts/remotecontactlookup/engine/inc/cpbkxrclserviceuicontextimpl.h --- a/emailcontacts/remotecontactlookup/engine/inc/cpbkxrclserviceuicontextimpl.h Mon Mar 15 12:39:10 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,604 +0,0 @@ -/* -* Copyright (c) 2007 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: Definition of the class CPbkxRclServiceUiContext -* -*/ - -#ifndef CPBKXRCLSERVICEUICONTEXTIMPL_H -#define CPBKXRCLSERVICEUICONTEXTIMPL_H - -#include "cpbkxremotecontactlookupserviceuicontext.h" -#include "tpbkxremotecontactlookupprotocolaccountid.h" -#include "mpbkxremotecontactlookupprotocolsessionobserver.h" -#include "mpbkxrclcontactretrieval.h" -#include "cpbkxrcleventscheduler.h" - -#include - -class CPbkxRclSearchResultDlg; -class CPbkxRclResultInfoDlg; -class CPbkxRemoteContactLookupProtocolSession; -class CCoeEnv; -class CPbkContactEngine; -class CPbkxRemoteContactLookupProtocolAdapter; -class CPbkxRclProtocolEnvImpl; -class CPbkxRemoteContactLookupProtocolAccount; -class CPbkxRclActionServiceWrapper; - -/** -* Implementation class of service ui context. -* -* This class implements the RCL search logic and UI flow. -* -* @lib pbkxrclengine.lib -* @since S60 3.1 -*/ - -class CPbkxRclServiceUiContextImpl : - public CPbkxRemoteContactLookupServiceUiContext, - public MPbkxRemoteContactLookupProtocolSessionObserver, - public MPbkxRclContactRetrieval, - public MPbkxRclEventHandler, - public MEikCommandObserver, - public MProgressDialogCallback - { - -public: // constructors and destructor - - /** - * Constructs new object. - * - * @param aId Acccount id. - * @param aMode Mode in which context operates. - * @return Created object. - */ - - static CPbkxRclServiceUiContextImpl* NewL( - TPbkxRemoteContactLookupProtocolAccountId aId, - TMode aMode ); - - /** - * Constructs new object. - * - * Constructed object is leaved in cleanup stack. - * - * @param aId Acccount id. - * @param aMode Mode in which context operates. - * @return Created object. - */ - static CPbkxRclServiceUiContextImpl* NewLC( - TPbkxRemoteContactLookupProtocolAccountId aId, - TMode aMode ); - - - /** - * Destructor. - */ - virtual ~CPbkxRclServiceUiContextImpl(); - - -public: // methods from CPbkxRemoteContactLookupServiceUiContext - - /** - * Execute UI flow. - * - * @param aQueryText loose query text - * @param aResult remote lookup results - */ - virtual void ExecuteL( const TDesC& aQueryText, TResult& aResult ); - - -public: // from MPbkxRemoteContactLookupProtocolSessionObserver - - /** - * Notifies that the loose search has been completed. - * - * @param aStatus error code that tells how search went - * @param aResults search results, ownership is moved to the caller of the - * loose search. - */ - - virtual void LooseSearchCompleted( - TInt aStatus, - RPointerArray& aResults ); - - /** - * Notifies that the contact fields retrieval has been completed. - * - * @param aStatus error code that tells how retrieval went - */ - - virtual void ContactFieldsRetrievalCompleted( TInt aStatus ); - -public: // from MPbkxRclContactRetrieval - - /** - * Retrieves details of the contact with given index. - * - * @param aContactIndex Index of the contact for which details are retrieved. - * @param aWaitNoteText Text shown in wait note. - * @return ContactCard with details retrieved or NULL. NULL is returned - * when either contact retrieval failed or user cancelled - * contact retrieval. - */ - - virtual CContactCard* RetrieveDetailsL( - TInt aContactIndex, - const TDesC& aWaitNoteText ); - - /** - * Returns the number of contacts. - * - * @return The number of contacts. - */ - - virtual TInt ContactCount() const; - - /** - * Sets the index of currently selected contact. - * - * @param aIndex Index of the currently selected contact. - */ - - virtual void SetSelectedContactL( TInt aIndex ); - -public: // from MPbkxRclEventHandler - - /** - * Callback method from event scheduler. - * - * Operation is executed each time this method is called. - */ - - virtual void EventTriggered(); - -public: // methods from MEikCommandObserver - - /** - * Processes command from search result view or result information view. - * - * @param aCommand Command id. - */ - - virtual void ProcessCommandL( TInt aCommandId ); - -public: // from MProgressDialogCallback - - /** - * This method is called when wait note closed by either user pressing - * cancel or dialog closed by code. - */ - virtual void DialogDismissedL( TInt aButtonId ); - -private: // enumerations used internally - - - // Possible operations for context. - - enum TOperation - { - ENoOperation, // No operation - EOpenSearchResultDlg, // Opens search result dialog - EOpenResultInfoDlg, // Opens result info dialog - ECloseSearchResultDlg, // Closes search result dialog - ECloseResultInfoDlg, // Closes result info dialog - EOpenSearchQueryDefault, // Opens default search query - EOpenSearchQueryEmpty, // Opens empty search query - EExecuteSearchWithNoQuery, // Executes search without prompting query - EExit // Stop context execution - }; - - // Possible state values for context. - - enum TState - { - EInitial = 0x1, // Initial state - EResultDlgOnTop = 0x2, // Result dialog topmost - EInfoDlgOnTop = 0x4, // Info dialog topmost - EResultSelected = 0x8, // Result is selected - EReturnToCaller = 0x10 // Return to the calling application - }; - - - // Wait object indexes. - - enum TWaitObjectIndex - { - EMainWait = 0, // Main wait loop. - EContactRetrievalWait = 1 // Contact retrieval wait loop - }; - -private: // methods used internally - - /** - * Executes search. - * - * @param aShowQueryDialog Flag indicating whether search query dialog is - * shown. - * @param aQueryText Default value for query text. - */ - - void ExecuteSearchL( TBool aShowQueryDialog, const TDesC& aQueryText ); - - /** - * Displays wait dialog. - * - * @param aDialogResourceId Dialog resource id. - * @param aText Text shown in wait dialog. - */ - - void DisplayWaitDialogL( TInt aDialogResourceId, const TDesC& aText ); - - /** - * Displays note dialog. - * - * @param aDialogResourceId Dialog resource id. - * @param aText Text shown in dialog. - * @param aTimeout Flag indicating whether note has timeout. - * @return Possible return value from note. - */ - - TBool DisplayNoteDialogL( - TInt aDialogResourceId, - const TDesC& aText, - TBool aTimeout = EFalse ); - - /** - * Displays query dialog. - * - * @param aDialogResourceId Dialog resource id. - * @param aText Text shown in dialog. - * @return Possible return value from note. - */ - //Fix for: EASV-7KFGG3 - TBool DisplayQueryDialogL( - TInt aDialogResourceId, - const TDesC& aText ); - - /** - * Closes wait dialog. - */ - - void CloseWaitDialogL(); - - /** - * Displays search result dialog. - */ - - void DisplaySearchResultDialogL(); - - /** - * Displays result info dialog. - */ - - void DisplayResultInfoDialogL(); - - - /** - * Creates contact card array. - * - * Contact items are casted to contact cards. - */ - - void CreateContactCardArray(); - - /** - * Does actions after loose search has been completed. - * - * @param aStatus Status returned from adapter. - * @param aResults Search results. - */ - - void DoLooseSearchCompletedL( - TInt aStatus, - RPointerArray& aResults ); - - - /** - * Does actions after contact field retrieval has been completed. - * - * @param aStatus Status received from adapter. - */ - - void DoContactFieldsRetrievalCompletedL( TInt aStatus ); - - - /** - * Executes operation. - */ - - void DoHandleOperationL(); - - - - /** - * Handles actions after search result dialog is closed based - * on state of the context. - */ - - void HandleSearchResultDialogExitL(); - - - /** - * This method is called when we are about to exit the context. - * - * Exit reason is set and possible error note is shown. - */ - - void HandleContextExitL(); - - - /** - * Creates new contact item of the selected contact item. - * - * Ownership is transferred. - * - * @return Selected contact item. - */ - - CContactItem* GetSelectedContactL(); - - - /** - * Searches for a result which corresponding contact item has given index. - * - * This method is needed because contact items are sorted and they are - * in different order as results. So we must find a result which contains - * the contact item with given index. - * - * Ownership is not transferred. - * - * @param aIndex Index of the contact item which result is searched. - * @return Protocol result. - */ - - CPbkxRemoteContactLookupProtocolResult* GetResultByIndex( TInt aIndex ); - - /** - * Starts active wait. - * - * Execution is halted until corresponding stop is called. - * - * @param aIndex Index of the wait object to be started. - */ - - void StartActiveWaitL( TWaitObjectIndex aIndex ); - - - /** - * Stops active wait with given index. - * - * @param aIndex Index of the wait object to be stopped. - */ - - void StopActiveWait( TWaitObjectIndex aIndex ); - - - /** - * Changes the state of the context. - * - * @param aState The state in which context is set. - */ - - void SetState( TState aState ); - - - /** - * Unsets state. - * - * @param aState State to be unset. - */ - - void UnsetState( TState aState ); - - - /** - * Returns ETrue if given state is set. - * - * @param aState State which status is checked. - * @return ETrue if context is in given state, EFalse otherwise. - */ - - TBool IsStateSet( TState aState ); - - - /** - * Resets all state flags of context. - */ - - void ResetState(); - - /** - * Adds new operation to be executed. - * - * @param aOperation Operation to be added. - */ - - void AddOperation( TOperation aOperation ); - - - /** - * Handles fatal error based on current state. - * - * @param aError Occurred error. - */ - - void HandleError( TInt aError ); - - - /** - * Sorts contacts based on last name. - */ - - static TInt Sort( const CContactCard& aFirst, const CContactCard& aSecond ); - - /** - * Static callback for CPeriodic timer - */ - static TInt TimerCallBack(TAny* aAny); - - /** - * This method is called in TimerCallBack() when time is out - */ - void TimeOut(); - -private: // constructors - - /** - * Constructors. - * - * @param aId Protocol account id. - * @param aMode Mode. - */ - - CPbkxRclServiceUiContextImpl( - TPbkxRemoteContactLookupProtocolAccountId aId, - TMode aMode ); - - /** - * Second-phase constructor. - */ - - void ConstructL(); - -private: // data structure used internally - - class TOperationQueue - { - public: // constructor - - /** - * Constructor. - */ - - TOperationQueue(); - - public: // new methods - - /** - * Adds new operation to queue. - * - * @param aOperation Operation to be added. - */ - - void Add( TOperation aOperation ); - - /** - * Pops operation to be executed from the queue. - * - * @return Operation to be executed. - */ - - TOperation Pop(); - - - /** - * Returns number of the operations in the queue. - */ - - TInt Count() const; - - private: // data - - // Maximum number of operations. - static const TInt KMaxOperations = 10; - - // Current operation index. - TInt iCurrent; - - // Count of operations. - TInt iCount; - - // Fixed size operation array. - TOperation iOperations[KMaxOperations]; - }; - - -private: // data - - // Account id. - TPbkxRemoteContactLookupProtocolAccountId iAccountId; - - // State in which context is in. - TInt iState; - - // Resource file offset. - TInt iResourceFileOffset; - - // Original query criteria given to context. Owned. - RBuf iQueryCriteria; - - // Query text given to execute. Owned. - RBuf iQueryText; - - // Search mode. - TMode iMode; - - // Selected contact index. - TInt iSelectedIndex; - - // For waiting asynchronous operations to finish. Owned. - RPointerArray iWaitObjects; - - // Wait dialog. Owned. - CAknWaitDialog* iWaitDialog; - - // Search result dialog. Owned. - CPbkxRclSearchResultDlg* iSearchResultDialog; - - // Result information dialog. Owned. - CPbkxRclResultInfoDlg* iResultInfoDialog; - - // Remote contact query results. Owned. - RPointerArray iSearchResults; - - // Contact cards from the results. Not owned. - RPointerArray iContactCards; - - // Adapter used in searches. Owned. - CPbkxRemoteContactLookupProtocolAdapter* iAdapter; - - // Session used to execute remote searches. Owned. - CPbkxRemoteContactLookupProtocolSession* iSession; - - // Protocol environment given to adapter. Owned. - CPbkxRclProtocolEnvImpl* iEnvImpl; - - // Account which is used. Owned. - CPbkxRemoteContactLookupProtocolAccount* iAccount; - - // Search result. Not owned. - TResult* iResult; - - // Contact engine used to help create phone book contact items. Owned. - CPbkContactEngine* iContactEngine; - - // Action service wrapper used by search result dialog and - // result information dialog. Owned. - CPbkxRclActionServiceWrapper* iActionServiceWrapper; - - // For generating timed events. Owned. - CPbkxRclEventScheduler* iEventScheduler; - - // Operation queue. - TOperationQueue iOperations; - - // Context exit code. If something goes wrong, this code is set. - TInt iExitCode; - - // Timer for generating time out event - CPeriodic* iTimer; - }; - -#endif