meetingrequest/mrgui/mrfieldbuilderpluginextension/inc/cesmrcontacthandler.h
changeset 0 8466d47a6819
child 10 f5907b1a1053
--- /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