--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuilderpluginextension/inc/cesmrcontacthandler.h Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2007-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: ESMR Contact Handler for fetching contacts for attendee field
+*
+*/
+
+#ifndef CESMRCONTACTHANDLER_H
+#define CESMRCONTACTHANDLER_H
+
+// Includes
+#include <e32base.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <AiwCommon.h>
+//<cmail>
+#include "cpbkxremotecontactlookupserviceuicontext.h"
+//</cmail>
+#include "resmrstatic.h"
+#include "mesmrclslistsobserver.h"
+#include "cesmrcontactmanagerhandler.h"
+#include "resmrpluginextensionstatic.h"
+
+// Forward declarations
+class CFSMailBox;
+class CESMRClsListsHandler;
+class CVPbkContactManager;
+class CESMRClsItem;
+class MVPbkContactOperationBase;
+class MVPbkStoreContact;
+class MESMRContactHandlerObserver;
+class MVPbkContactOperationBase;
+class MVPbkContactLinkArray;
+class CAiwServiceHandler;
+class CESMRClsItem;
+class CContactItem;
+
+/**
+ * Command to execute by contact handler
+ */
+enum TContactHandlerCmd
+ {
+ EGetAddressesFromPhonebook = 1,
+ ESearchContacts
+ };
+
+/**
+ * Implements remote look up and contact search related functionality.
+ * It will launch AIW service (virtual phonebook provided) to create those views
+ */
+class CESMRContactHandler:
+ public CBase,
+ public MESMRClsListsObserver,
+ public MVPbkSingleContactOperationObserver,
+ public MAiwNotifyCallback,
+ public MESMRContactManagerObserver
+{
+public: // Construction & Deconstruction
+ /**
+ * Two-phased constructor. Creates and initializes
+ * CESMRContactHandler object.
+ * @return Pointer to object.
+ */
+ static CESMRContactHandler* NewL();
+
+ /**
+ * Two-phased constructor. Creates and initializes
+ * CESMRContactHandler object, which is left on
+ * the cleanupstack
+ * @return Pointer to object.
+ */
+ static CESMRContactHandler* NewLC();
+
+ /**
+ * Shows the popup on the screen.
+ */
+ ~CESMRContactHandler();
+
+public: // Interface
+ /**
+ * Search for contacts by PCS engine. This is asynchronous call, and results are in
+ * ArrayUpdated( resultsArray )
+ *
+ * @param aText = new search text.
+ * @param aClsListObserver = observer to collect results
+ */
+ void SearchMatchesL( const TDesC& aText,
+ MESMRContactHandlerObserver* aObserver );
+
+ /**
+ * Launches remote lookup query window (remote lookup UI)
+ * @param aQueryString search string for search engines
+ * @param aDisplayname displayed name of contact
+ * @param aEmailAddress email address of contact
+ * @return not used
+ */
+ TBool LaunchRemoteLookupL( const TDesC& aQueryString,
+ TDes& aDisplayname,
+ TDes& aEmailAddress );
+
+ /**
+ * get last name found with search
+ * aEmailAddress email address of contact
+ * @return display name of contact
+ */
+ HBufC* GetLastSearchNameLC( const TDesC& aEmailAddress );
+
+ /**
+ * Get pointer to contact manager (handles phone book stores)
+ * @return pointer to contact manager
+ */
+ CVPbkContactManager* GetContactManager();
+
+ /**
+ * Lauches multiple item fetch dialog through AIW launcher framework.
+ * Results are returned to observer
+ * @param aObserver = observer to collect results
+ */
+ void GetAddressesFromPhonebookL( MESMRContactHandlerObserver* aObserver );
+
+ TBool RemoteLookupSupportedL();
+
+public: // from MESMRClsListsObserver
+ void ArrayUpdatedL( RPointerArray<CESMRClsItem>& aMatchingItems );
+ void OperationErrorL( TInt aErrorCode );
+
+public: // from MVPbkSingleContactOperationObserver
+ void VPbkSingleContactOperationComplete( MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact );
+
+ void VPbkSingleContactOperationFailed( MVPbkContactOperationBase& aOperation,
+ TInt aError );
+
+public: // from MAiwNotifyCallback
+ TInt HandleNotifyL( TInt aCmdId,
+ TInt aEventId,
+ CAiwGenericParamList& aEventParamList,
+ const CAiwGenericParamList& aInParamList);
+
+public: // from MESMRContactManagerObserver
+ void ContactManagerReady();
+
+private: // Implementation
+ CESMRContactHandler();
+ void ConstructL();
+ TBool IsRemoteLookupSupported();
+ void GetNameAndEmail( TDes& aName, TDes& aEmail, CContactItem& aItem );
+ void VPbkSingleContactOperationFailedL( MVPbkContactOperationBase& aOperation, TInt aError );
+ void VPbkSingleContactOperationCompleteL( MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact );
+ void GetContactFieldsL( RArray<TInt>& aFieldIds,
+ RPointerArray<HBufC>& aNumbers,
+ MVPbkStoreContact* aContact );
+ void DoRemoteLookupL( const TDesC& aQueryString,
+ CPbkxRemoteContactLookupServiceUiContext::TResult& aResult,
+ CPbkxRemoteContactLookupServiceUiContext::TMode aContext =
+ CPbkxRemoteContactLookupServiceUiContext::EModeContactSelector );
+ CFSMailBox& DelayedMailBoxL();
+
+private: // data
+ RESMRStatic iESMRStatic;//not own, reference counted
+ CESMRClsListsHandler* iClsListHandler;//own
+ CESMRClsItem* iSearchMatch;//own
+ MESMRContactHandlerObserver* iHandlerObserver;//not own
+ CFSMailBox* iMailBox;//not own
+ CVPbkContactManager* iContactManager; //not own
+ MVPbkContactOperationBase* iLinkOperationFetch;//own
+ const MVPbkContactLink* iCurrentLink;//own
+ MVPbkContactLinkArray* iLinksSet;//own
+ CAiwServiceHandler* iServiceHandler;//own
+ /**
+ * Static TLS stored pointer to fsmailbox.
+ */
+ RESMRPluginExtensionStatic iESMRMailBoxStatic;
+ TBool iESMRMailBoxStaticCalled;
+ TBool iRemoteLookupSupported;
+
+ /**
+ * State of contact handlers asynchronous processing
+ */
+ enum TContactHandlerState
+ {
+ EContactHandlerIdle = 1,
+ EContactHandlerSearchMatches,
+ EContactHandlerGetAddressesFromPhonebook
+ };
+ TContactHandlerState iState;
+
+ //internal arrays on the stack
+ RPointerArray<CESMRClsItem> iContactObjects;
+ RArray<TInt> iLastnameFields;
+ RArray<TInt> iFirstnameFields;
+ RArray<TInt> iEmailFields;
+};
+
+#endif