diff -r e5b3a2155e1a -r d2c4c66342f3 messagingfw/deprecate/senduiservices/inc/SendUiImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/deprecate/senduiservices/inc/SendUiImpl.h Tue Aug 31 15:41:11 2010 +0300 @@ -0,0 +1,473 @@ +/* +* Copyright (c) 2002-2006 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: SendUI API implementation +* +*/ + + + + + +#ifndef C_CSENDUIIMPL_H +#define C_CSENDUIIMPL_H + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +class CEikMenuPane; +class CSendNormalUi; +class CMessageData; +class CSendingServiceManager; +class CSendingServiceInfo; +class RSendUiServiceClient; +class CPropertyObserver; +class TDataType; +class CSendUiSingleton; + +/** + * Implementation of SendUI API + * + * Can be used to show "Send" list query and to create and send + * messages via available services. Sending services can be based + * on the MTM or ECom architecture. Created messages are sent + * directly or message editor is opened for editing, depending on + * the type of selected service. + * @lib sendui.lib + * @since S60 v3.0 + */ +class CSendUiImpl : public CBase + { + friend class UT_CSendUiImpl; +public: + + static CSendUiImpl* NewL(); + + virtual ~CSendUiImpl(); + +public: + + /** + * Adds menu item of given type to menupane. + * + * @since Series 60 3.0 + * @param aMenuType Type of the menu, e.g. "ESendMenu" or "EWriteMenu" + * @param aMenuPane Menupane where the menu item should be added. + * @param aIndex The place of the menu item in menupane. + * @param aCommandId Command id for the menu item. + * @param aRequiredCapabilities Capabilities required by services to be + * shown in "Send" list query. If no capabilities are required + * (KCapabilitiesForAllServices), all available services are + * shown in "Send" list query. + * @return None. + */ + void AddTypedMenuItemL( + CSendUi::TSendUiMenuType aMenuType, + CEikMenuPane& aMenuPane, + TInt aIndex, + TInt aCommandId, + TSendingCapabilities aRequiredCapabilities = KCapabilitiesForAllServices ); + + /** + * First displays list query and then creates the message. + * Editor is launched for editing the message or the message is sent + * directly without opening the editor. Functionality depends on the + * type of selected service. + * + * List query can be manipulated in three ways. All three methods can be + * used or just some of those. + * + * The first option is to set the required capabilities for services. + * Eg. attachments supported. Sending services not matching to required + * capabilities are filtered away. Capabilities are defined in + * TSendingCapabilities.h. + * + * The second option is content based filtering. Filtering is based on + * the files intended to send. Those files can be set as part of message + * data. Filtering is done according the predefined rules. + * + * The third option is to set the array of service uids not wanted to + * be shown in list query. Uid can be the technology type, service provider or + * service id. These sending services are filtered away + * even if those match to required capabilities. + * + * @since Series 60 3.0 + * @param aMenuType Type of the menu, e.g. "ESendMenu" or "EWriteMenu" + * @param aMessageData Data for the message. + * @param aRequiredCapabilities Capabilities required by sending services + * to be shown in "Send" pop-up list query. If no capabilities are + * required (KCapabilitiesForAllServices), all available services + * are shown in "Send" pop-up list query. + * @param aServicesToDim Array of service uids (service uid, service + * provider's uid or service's TechnologyType) _NOT_ wanted to "Send" + * list query. + * See predefined sending service uids in SendUiConsts.h . + * @param aLaunchEditorEmbedded ETrue if the editor should be launched + * embedded. Otherwise the editor is launched stand-alone. + * Note: some services sends the messages without launching the + * editor at all. + * @param aTitleText Title of the list query. If no title is defined, + * then the localised default title is used, e.g. "Send" or + * "Write". + * @return None. + */ + void ShowTypedQueryAndSendL( + CSendUi::TSendUiMenuType aMenuType, + const CMessageData* aMessageData, + TSendingCapabilities aRequiredCapabilities = KCapabilitiesForAllServices, + CArrayFix* aServicesToDim = NULL, + TBool aLaunchEditorEmbedded = ETrue, + const TDesC& aTitleText = KNullDesC ); + + /** + * Displays list query and returns the user selection. + * + * List query can be manipulated in three ways. All three methods can be + * used or just some of those. + * + * The first option is to set the required capabilities for services. + * Eg. attachments supported. Sending services not matching to required + * capabilities are filtered away. Capabilities are defined in + * TSendingCapabilities.h. + * + * The second option is content based filtering. Filtering is based on + * the files intended to send. Those files can be set as part of message + * data. Filtering is done according the predefined rules. + * + * The third option is to set the array of service uids not wanted to + * be shown in list query. These sending services are filtered away + * even if those match to required capabilities. + * + * @since Series 60 3.0 + * @param aMenuType Type of the menu, e.g. "ESendMenu" or "EWriteMenu" + * @param aMessageData Data for the message. Attachments are used for + * content based filtering. + * @param aRequiredCapabilities Capabilities required by sending services + * to be shown in list query. If no capabilities are required + * (KCapabilitiesForAllServices), all available services are + * shown in list query. + * @param aServicesToDim Array of service uids (service uid, service + * provider's uid or service's TechnologyType) _NOT_ wanted to "Send" + * list query. + * See predefined sending service uids in SendUiConsts.h . + * @param aTitleText Title of the list query. If no title is defined, + * then the localised default title is used, e.g. "Send" or + * "Write" + * @return Uid of the selected service (MTM or ECom). + * KNullId is returned if user selects cancel. + */ + TUid ShowTypedQueryL( + CSendUi::TSendUiMenuType aMenuType, + const CMessageData* aMessageData = NULL, + TSendingCapabilities aRequiredCapabilities = KCapabilitiesForAllServices, + CArrayFix* aServicesToDim = NULL, + const TDesC& aTitleText = KNullDesC ); + + /** + * Creates the message and launches the editor for editing the message + * or sends the message directly without opening the editor. + * Functionality depends on the type of selected service. + * + * @since Series 60 3.2 + * @param aServiceUid Uid of the sending service. + * @param aMessageData Data for the message. + * @return None. + */ + TInt SendMessageL( + TUid aServiceUid, + const CMessageData* aMessageData, + TBool aLaunchEditorEmbedded ); + + /** + * Launches server application, which will eventually call SendMessageL + * with the same parameters. + * + * @since Series 60 3.2 + * @param aServiceUid Uid of the sending service. + * @param aMessageData Data for the message. + * @return None. + */ + void SendMessageViaServerL( + TUid aServiceUid, + const CMessageData* aMessageData, + TBool aLaunchEditorEmbedded ); + /** + * Creates the message and launches the editor for editing the message + * or sends the message directly without opening the editor. + * Functionality depends on the type of selected service. + * + * @since Series 60 3.0 + * @param aServiceUid Uid of the sending service. + * @param aMessageData Data for the message. + * @return None. + */ + void CreateAndSendMessageL( + TUid aServiceUid, + const CMessageData* aMessageData, + TBool aLaunchEditorEmbedded = ETrue ); + + /** + * Returns sending capabilities of the sending service. + * @since Series 60 3.0 + * @param aServiceUid Uid of the sending service. + * @param aServiceCapabilities TSendingCapabilities of the sending + * service as a return value. + * @return Return KErrNone if successful, or one of the system wide + * errors if unsuccessful. + */ + TInt ServiceCapabilities( + TUid aServiceUid, + TSendingCapabilities& aServiceCapabilities ); + + /** + * Populates given list with the information about services + * provided by specified ECom service provider. + * Each service provider can provide 1..n services. + * Ownership of the pointed objects are transfered to caller. + * + * Can be used for ex. when creating own "Send" menu, which needs to + * include ECom based services. + * + * NOTE: Can be used only for ECom based services, also for MTMs + * + * @since Series 60 2.8 + * @param aServiceList Service list to be populated. + * @param aServiceProvider Id of the specified service provider. + * KNullId means all service providers. + * Service providers are defined in SendUiConsts.h + * @return none + */ + void AvailableServicesL( + RPointerArray& aServiceList, + TUid aServiceProvider = KNullUid); + + /** + * Returns the technology type of a service + * + * @since Series 60 3.0 + * @param aServiceId Service of interest + * @return Technology type of the provided service. NULL if Mtm + * service doesn't exist or service is ECOM based. + */ + TUid TechnologyType( TUid aServiceUid ); + + /** + * Returns the index of the service in service array + * + * @since Series 60 3.2 + * @param aServiceId Service of interest + * @return Index of a found service. Otherwise KErrNotFound. + */ + TInt ResolveServiceIndex( TUid aUid ); + + /** + * Compares service capabilities with the required capabilities + * + * @since S60 v3.2 + * @param aServiceIndex Index of the service + * @param aRequiredCapabilities Required capabilities + * @return ETrue, if service has required or more capabilities. + * EFalse, if service does not have the required capabilities + * or service does not exist. + */ + TBool QueryCapabilities( + TInt aServiceIndex, + TSendingCapabilities aCap ); + + /** + * Copies sending service information from Central Repository to local data + * + * @since S60 v3.2 + */ + void GetServicesL( ); + +private: + + + /** + * + * @since Series 60 3.0 + * @param aListItems + * @param aTitleText Title of the pop-up list query. If no title + * is defined, then the localised default title is used. + * @return: User selection. + */ + TUid ShowListQueryL( + MDesCArray* aListItems, + const CArrayFix& aListItemUids, + const TDesC& aTitleText, + CSendUi::TSendUiMenuType aMenuType ); + + /** + * Filtering services by their content + * + * @since Series 60 3.0 + * @param aServiceUid + * @param aServiceProviderUid + * @param aMessageData Message data, which is base of the content filtering. + * @param aMimeType The mimetype of the first attachment. + * @return: True, if given service can send specified content + */ + TBool CanSendContentL( + TUid aServiceUid, + TUid aServiceProviderUid, + const CMessageData* aMessageData, + TDataType* aMimeType ); + + /** + * + * @since Series 60 3.0 + * @param aListItemUids + * @param aListItemUids + * @param aRequiredCapabilities + * @param aContentArray + * @param aServicesToDim + * @return: None. + */ + void FilterServicesL( + CDesCArrayFlat& aListItems, + CArrayFix& aListItemUids, + TSendingCapabilities aRequiredCapabilities, + const CMessageData* aMessageData, + CSendUi::TSendUiMenuType aMenuType ); + + /** + * Sorts service lists + * + * @since S60 v3.0 + * @param aListItems Names of items in array + * @param aListItemUids Uids of items in array + * @return: Sorted array + */ + void SortListL( + CDesCArrayFlat& aListItems, + CArrayFix& aListItemUids ); + + /** + * Resets sending state flag. + * @since Series 60 3.0 + * @return None. + */ + static void ResetIsSending( TAny* aAny ); + + /** + * Compares ECom service sending capabilities to required capabilities. + * @since Series 60 3.0 + * @param aServiceUid Uid of the sending service. + * @param aRequiredCapabilities Capabilities required for the sending + * service. + * @return: ETrue if service sending capabilities matches to + * required capabilities, otherwise EFalse. + */ + TBool CheckServiceCapabilities( + TUid aServiceUid, + TSendingCapabilities aRequiredCapabilities ); + + /** + * Checks if the feature is supported by feature manager. + * @since Series 60 3.2.3 + * @param aFeature Feature manager id of the sending service. + * @param aNewFeatures To keep track of which feature is modified + * @param aFeatureFlag Uid of the sending service used for central repository storage. + * @return None + */ + void FeatureStatus( + TInt aFeature, + TInt &aNewFeatures, + TInt aFeatureFlag ); +private: + + CSendUiImpl(); + + void ConstructL(); + +private: // data + + /** + * Pointer to Control environment + * Not own. + */ + CCoeEnv* iCoeEnv; + + /** + * Pointer to File Server Session. Initialized from CCoeEnv->FsSession. + * Not own. + */ + RFs& iFs; + + /** + * Pointer to CSendUiSingleton + * Own. + */ + CSendUiSingleton* iSingleton; + + /** + * Indicates whether or not the sending process is in progress. + */ + TBool iIsSending; + + /** + * For UI resource loading + * Own. + */ + RConeResourceLoader iResourceLoader; + + /** + * Services to be dimmed + * Own. + */ + CArrayFixFlat* iServicesToDim; + + /** + * Resource file name and path. + * Own. + */ + TFileName iResourceFileName; + + + TBool iEmailClientIntegration; + /** + * Array of available sending service + * Own. + */ + RPointerArray iSendingServices; + + /** + * IPC client with SendUiLauncherApp + * Own. + */ + RSendUiServiceClient* iSendUiClient; + + /** + * The requested order of sending services in the menu. + * Read from resources. + * Own. + */ + CArrayFixFlat* iSendUiServicesOrderArray; + + TBool iServerAppLaunch; + + CPropertyObserver* iPropertyObserver; + + }; + +#endif // C_CSENDUIIMPL_H