phonebookui/Phonebook2/remotecontactlookup/contactactionservice/saveascontactplugin/inc/cfscsaveascontactpluginimpl.h
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/remotecontactlookup/contactactionservice/saveascontactplugin/inc/cfscsaveascontactpluginimpl.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 2008 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 CFscSaveAsContactPluginImpl.
+ *
+*/
+
+
+#ifndef CFSCSAVEASCONTACTPLUGINIMPL_H
+#define CFSCSAVEASCONTACTPLUGINIMPL_H
+
+#include "cfsccontactactionplugin.h"
+#include <MVPbkContactObserver.h>
+#include <MVPbkContactStoreObserver.h>
+#include "mfscreasoncallback.h"
+#include "mfsccontactsetobserver.h"
+#include "FscActionPluginUtils.h"
+
+// FORWARD DECLARATIONS
+class CFscContactAction;
+class CAknWaitDialog;
+
+/**
+ *  SaveAsContact plugin implementation.
+ *  Contains implementation of Save as contact action plugin.
+ *
+ *  @lib fscsaveascontactplugin.lib
+ *  @since S60 3.1
+ */
+class CFscSaveAsContactPluginImpl : public CFscContactActionPlugin,
+									public MFscReasonCallback, 
+									public MFscContactSetObserver,
+									public MVPbkContactObserver,
+									public MVPbkContactStoreObserver
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aParams contact action plugin parameters
+     * @return New instance of CFscSaveAsContactPluginImpl
+     */
+    static CFscSaveAsContactPluginImpl* NewL(
+            TAny* aParams);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CFscSaveAsContactPluginImpl();
+
+public:
+    // From CFscContactActionPlugin
+
+    /**
+     * @see CFscContactActionPlugin::Uid
+     */
+    virtual TUid Uid() const;
+
+    /**
+     * @see CFscContactActionPlugin::ActionList
+     */
+    virtual const CArrayFix<TUid>* ActionList() const;
+
+    /**
+     * @see CFscContactActionPlugin::GetActionL
+     */
+    virtual const MFscContactAction& GetActionL(
+            TUid aActionUid) const;
+
+    /**
+     * @see CFscContactActionPlugin::PriorityForContactSetL
+     */
+    virtual void PriorityForContactSetL(
+            TUid aActionUid,
+            MFscContactSet& aContactSet,
+            TFscContactActionVisibility& aActionMenuVisibility,
+            TFscContactActionVisibility& aOptionsMenuVisibility,
+            MFscContactActionPluginObserver* aObserver);
+
+    /**
+     * @see CFscContactActionPlugin::CancelPriorityForContactSet
+     */
+    virtual void CancelPriorityForContactSet();
+
+    /**
+     * @see CFscContactActionPlugin::ExecuteL
+     */
+    virtual void ExecuteL(
+            TUid aActionUid,
+            MFscContactSet& aContactSet,
+            MFscContactActionPluginObserver* aObserver);
+
+    /**
+     * @see CFscContactActionPlugin::CancelExecute
+     */
+    virtual void CancelExecute();
+public:
+    // From MFscReasonCallback
+
+    /**
+     * @see MFscReasonCallback::GetReasonL
+     */
+    virtual void GetReasonL(
+            TUid aActionUid,
+            TInt aReasonId,
+            HBufC*& aReason) const;
+
+public:
+    // From MFscContactSetObserver
+    /**
+     * @see MFscContactSetObserver::NextContactComplete
+     */
+    virtual void NextContactComplete(
+            MVPbkStoreContact* aContact);
+
+    /**
+     * @see MFscContactSetObserver::NextContactFailed
+     */
+    virtual void NextContactFailed(
+            TInt aError);
+
+    /**
+     * @see MFscContactSetObserver::NextGroupComplete
+     */
+    virtual void NextGroupComplete(
+            MVPbkStoreContact* aContact);
+
+    /**
+     * @see MFscContactSetObserver::NextGroupFailed
+     *
+     */
+    virtual void NextGroupFailed(
+            TInt aError);
+
+    /**
+     * @see MFscContactSetObserver::GetGroupContactComplete
+     */
+    virtual void GetGroupContactComplete(
+            MVPbkStoreContact* aContact);
+
+    /**
+     * @see MFscContactSetObserver::GetGroupContactFailed
+     */
+    virtual void GetGroupContactFailed(
+            TInt aError);
+public:
+	
+	//From MVPbkContactStoreObserver
+	
+	/**
+	 * @see MVPbkContactStoreObserver::StoreReady
+	 */
+     void StoreReady(MVPbkContactStore& aContactStore);
+
+     /**
+	  * @see MVPbkContactStoreObserver::StoreUnavailable
+	  */
+     void StoreUnavailable(MVPbkContactStore& aContactStore, 
+             TInt aReason);
+
+     /**
+	  * @see MVPbkContactStoreObserver::StoreUnavailable
+	  */
+     void HandleStoreEventL(
+             MVPbkContactStore& aContactStore, 
+             TVPbkContactStoreEvent aStoreEvent);
+     
+private:
+    // methods
+
+    /**
+     * Saves contact to default Pbk2 store
+     *
+     * @param aContactStore to be saved into contact database
+     */
+    void SaveToContactDatabaseL(
+            MVPbkStoreContact* aStoreContact);
+
+    /**
+     * Prepares store for update
+     */
+    void PrepareStoreL();
+    
+    /**
+     * Checks if store is valid for saving contacts from RCL
+     */
+    TBool IsValidStoreL();
+
+    /**
+     * Helper method to check if action can be executed with 
+     * given contacts in current context
+     *
+     * @param aActionId Action Id
+     * @param aContactSet contains contact list and group lists
+     */
+    void CanExecuteL(
+            TUid aActionUid,
+            MFscContactSet& aContactSet);
+
+    /**
+     * Updates action icon
+     *
+     * @param aActionId Action Id
+     */
+    void UpdateActionIconL(
+            TUid aActionUid);
+
+    /**
+     * @see MVPbkContactObserver::ContactOperationCompleted
+     * 
+     */
+
+    virtual void ContactOperationCompleted(
+            TContactOpResult aResult);
+
+    /**
+     * @see MVPbkContactObserver::ContactOperationFailed
+     * 
+     */
+
+    virtual void ContactOperationFailed(
+            TContactOp aOpCode,
+            TInt aErrorCode,
+            TBool aErrorNotified);
+private:
+
+    /**
+     * Constructor.
+     *
+     * @param aParams contact action plugin parameters
+     */
+    CFscSaveAsContactPluginImpl(
+            const TFscContactActionPluginParams& aParams);
+
+    /**
+     * Second phase constructor.
+     */
+    void ConstructL();
+    
+    /**
+     * Restores members related to state machine
+     */
+    void ResetData();
+    
+    /**
+     * Resumes plugin processing
+     * Resumes ExecuteL or PriorityForContactSetL execution
+     * 
+     * @param aActionUid action UID
+     * @param aContactSet set of contacts
+     * @param aIsExecute is ExecuteL or PriorityForContactSetL launched
+     */
+    void ResumeAsync(
+            TUid aActionUid,
+            MFscContactSet& aContactSet,
+            TBool aIsExecute );
+    
+private:
+    // data
+
+    /**
+     * Action plugin parameters
+     */
+    TFscContactActionPluginParams iParams;
+
+    /**
+     * Resource handle
+     */
+    TInt iResourceHandle;
+
+    /**
+     * Own: save as contact action
+     */
+    CFscContactAction* iContactSaveAsContactAction;
+
+    /**
+     * Own: Contact action array
+     */
+    CArrayFixFlat<TUid>* iActionList;
+
+    // For async implementation
+    
+    /**
+     * Action Uid
+     */
+    TUid iActionUid;
+    
+    /**
+     * Contact set
+     */
+    MFscContactSet* iContactSet;
+    
+    /**
+     * Action menu visbility
+     */
+    TFscContactActionVisibility* iActionMenuVisibility;
+    
+    /**
+     * Options menu visbility
+     */
+    TFscContactActionVisibility* iOptionsMenuVisibility;
+    
+    /**
+     * Plug-in observer
+     */
+    MFscContactActionPluginObserver* iPluginObserver;
+    
+    /**
+     * Current state of state machine 
+     */
+    TActionPluginLastEvent iLastEvent;
+    
+    /**
+     * Action priority
+     */
+    TInt iActionPriority;
+    
+    /**
+     * Can display action
+     */
+    TInt iCanDisplay;
+
+    /**
+     * Retrieved store contact
+     */
+    MVPbkStoreContact* iRetrievedStoreContact;
+
+    /**
+     * New contact which will be saved to the phone memory
+     */
+    MVPbkStoreContact* iNewStoreContact;
+    
+    /**
+     * Is ExecuteL or PriorityForContactSetL launched
+     */
+    TBool iIsExecute;
+    
+    /**
+     * Waiting dialog launched when contact is being saved to the database
+     */
+    CAknWaitDialog* iWaitDialog;
+    
+    /**
+     * Ref: Target store
+     */
+	MVPbkContactStore* iTargetStore;
+    };
+
+#endif // CFSCSAVEASCONTACTPLUGINIMPL_H