diff -r 000000000000 -r 8466d47a6819 emailcontacts/contactactionservice/sendplugin/inc/cfscsendpluginimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailcontacts/contactactionservice/sendplugin/inc/cfscsendpluginimpl.h Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,450 @@ +/* +* 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 CFscSendPluginImpl. +* +*/ + + +#ifndef CFSCSENDPLUGINIMPL_H +#define CFSCSENDPLUGINIMPL_H + +// +#include "cfsccontactactionplugin.h" +#include "mfscreasoncallback.h" +#include "mfsccontactsetobserver.h" +// + +// FORWARD DECLARATIONS +class CSendUi; +class CFscAttachmentFile; +class CMessageData; +class MFscContactActionPluginObserver; + +/** + * Send plugin implementation. + * Contains implementation of send actions. + * + * @lib fscsendplugin.lib + * @since S60 3.1 + */ +class CFscSendPluginImpl : public CFscContactActionPlugin, + public MFscReasonCallback, + public MFscContactSetObserver + { + + /** + * States of operations + */ + enum TActionPluginLastEvent + { + EActionEventIdle, + EActionEventCanExecuteLaunched, + EActionEventCanExecuteProcessContact, + EActionEventCanExecuteProcessGroup, + EActionEventCanExecuteProcessGroupMember, + EActionEventCanExecuteFinished, + EActionEventCanExecuteContactRetrieve, + EActionEventCanExecuteGroupRetrieve, + EActionEventContactAvailableLaunched, + EActionEventContactAvailableProcess, + EActionEventContactAvailableFinished, + EActionEventContactAvailableContactRetrieve, + EActionEventExecuteContactRetrieve, + EActionEventExecuteGroupRetrieve, + EActionEventExecuteProcessContact, + EActionEventExecuteProcessGroup, + EActionEventExecuteProcessGroupMember, + EActionEventExecuteFinished, + EActionEventCanceled + }; + + +public: + + /** + * Two-phased constructor. + * + * @param aParams contact action plugin parameters + * @return New instance of CFscSendPluginImpl + */ + static CFscSendPluginImpl* NewL( TAny* aParams ); + + /** + * Destructor. + */ + virtual ~CFscSendPluginImpl(); + +public: // From CFscContactActionPlugin + + /** + * @see CFscContactActionPlugin::Uid + */ + virtual TUid Uid() const; + + /** + * @see CFscContactActionPlugin::ActionList + */ + virtual const CArrayFix* 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::ExecuteL + */ + virtual void ExecuteL( + TUid aActionUid, + MFscContactSet& aContactSet, + MFscContactActionPluginObserver* aObserver ); + +public: // From MFscReasonCallback + + /** + * @see MFscReasonCallback::GetReasonL + */ + virtual void GetReasonL( + TUid aActionUid, + TInt aReasonId, + HBufC*& aReason ) const; + +public: //From base class 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 ); + + /** + * @see CFscContactActionPlugin::CancelPriorityForContactSet + */ + virtual void CancelPriorityForContactSet(); + + /** + * @see CFscContactActionPlugin::CancelExecute + */ + virtual void CancelExecute(); + +private: // methods + + /** + * Sends unified/audio message using SEND UI API + * + * @param aActionUid Uid of action to be performed + * @param aMessageData list of addresses + */ + void SendToSelectedMembersL( + TUid aActionUid, + const CMessageData* aAddressList ); + + /** + * Returns true if aContactSet contains atleast one contact + * + * @param aContactSet contact set to process + */ + void ContactAvailableL( MFscContactSet& aContactSet ); + + /** + * 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 + * @return KErrNone if action can be executed, + * otherwise system wide error code + */ + void CanExecuteL( + TUid aActionUid, + MFscContactSet& aContactSet ); + + /** + * Updates action icons + * + * @param aActionId Action Id + */ + void UpdateActionIconL( TUid aActionUid ); + + /** + * Add contact + * + * @param aActionId Action Id + * @param aAddressList list of addresses + * @param aContact Contact data + */ + TInt AddContactL( + TUid aActionUid, + CMessageData& aAddressList, + MVPbkStoreContact& aContact ); + + /** + * Add postcard contact + * + * @param aAddressList list of contacts + * @param aContact Contact data + */ + void AddPostcardContactL( + CMessageData& aAddressList, + const MVPbkStoreContact& aContact ); + + /** + * Write data to postcard attachment file + * + * @param aContact Contact data + * @param aAttachmentFile attachment file + */ + void WritePostcardAttachmentContentL( + const MVPbkStoreContact& aContact, + CFscAttachmentFile& aAttachmentFile ); + +private: // constructors + + /** + * Constructor. + * + * @param aParams contact action plugin parameters + */ + CFscSendPluginImpl( + const TFscContactActionPluginParams& aParams ); + + /** + * Second phase constructor. + */ + void ConstructL(); + + /** + * Restores members related to state machine + */ + void ResetData(); + + /** + * Checks action priority and informs observer + * + * @param aActionUid action UID + */ + void CheckPriority( TUid aActionUid ); + + /** + * Move Group iterator to specified index + * + * @param aContactSet - set of contacts + * @param aIndex - specified index + * @param aError - result + */ + void MoveGroupToIndexL( MFscContactSet& aContactSet, + TInt aIndex, TInt& aError ); + + /** + * Checks if contact is member of selected groups + */ + TBool IsAnyGroupMemberL( MVPbkStoreContact& aContact ); + + /** + * Check maximum recipients value + */ + TInt MaxMsgRecipientsL(); + + +private: // data + + /** + * Action plugin parameters + */ + TFscContactActionPluginParams iParams; + + /** + * Resource handle + */ + TInt iResourceHandle; + + /** + * Own: SMS and MMS action + */ + CFscContactAction* iContactMsgAction; + + /** + * Own: Audio message action + */ + CFscContactAction* iContactAudioMsgAction; + + /** + * Own: Send Postcard action + */ + CFscContactAction* iContactPostcardAction; + + /** + * Own: Send Email action + */ + CFscContactAction* iContactEmailAction; + + /** + * Own: Contact action array + */ + CArrayFixFlat* iActionList; + + /** + * CFscAttachmentFile + */ + CFscAttachmentFile* iAttachmentFile; + + /** + * Action Uid + */ + TUid iActionUid; + + /** + * Can display action + */ + TInt iCanDisplay; + + /** + * Is contact available + */ + TBool iIsContactAvailable; + + //TBool is + + /** + * Retrieved store contact + */ + MVPbkStoreContact* iRetrievedStoreContact; + + /** + * Retrieved store contact + */ + MVPbkStoreContact* iRetrievedStoreGroup; + + /** + * Retrieved group member - own + */ + MVPbkStoreContact* iRetrievedGroupMember; + + /* + * Count of current group + */ + TInt iGroupMembersCount; + + /* + * Current group member index + */ + TInt iGroupMemberIndex; + + /** + * Action menu visbility + */ + TFscContactActionVisibility* iActionMenuVisibility; + + /** + * Options menu visbility + */ + TFscContactActionVisibility* iOptionsMenuVisibility; + + /** + * Contact set + */ + MFscContactSet* iContactSet; + + /** + * Plug-in observer + */ + MFscContactActionPluginObserver* iPluginObserver; + + /** + * Current state of state machine + */ + TActionPluginLastEvent iLastEvent; + + /** + * Action priority + */ + TInt iActionPriority; + + /** + * Is ExecuteL or PriorityForContactSetL launched + */ + TBool iIsExecute; + + /** + * Number type + */ + TContactNumberType iNumberType; + + /** + * List of recipients addresses + */ + CMessageData* iAddressList; + + /** + * Missing contacts counter + */ + TInt iMissingCount; + + /** + * Last proccessed group in interator + */ + MVPbkContactLink* iLastGroupLink; + + /** + * Group iterator index + */ + TInt iGroupIteratorPosition; + + /** + * Maximum message recipients + */ + TInt iMaxRecipients; + + /** + * Recipients counter + */ + TInt iRecipientsCounter; + }; + +#endif // CFSCSENDPLUGINIMPL_H