--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/deprecate/senduiservices/inc/SendUiImpl.h Fri Apr 16 15:27:42 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 <f32file.h>
+#include <e32base.h>
+#include <e32property.h>
+#include <badesca.h>
+#include <ConeResLoader.h>
+#include <apaserverapp.h>
+#include <msvapi.h>
+
+#include <TSendingCapabilities.h>
+#include <sendui.h>
+#include <SendUiConsts.h>
+
+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<TUid>* 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<TUid>* 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<CSendingServiceInfo>& 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<TUid>& 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<TUid>& 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<TUid>& 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<TUid>* iServicesToDim;
+
+ /**
+ * Resource file name and path.
+ * Own.
+ */
+ TFileName iResourceFileName;
+
+
+ TBool iEmailClientIntegration;
+ /**
+ * Array of available sending service
+ * Own.
+ */
+ RPointerArray<CSendingServiceInfo> iSendingServices;
+
+ /**
+ * IPC client with SendUiLauncherApp
+ * Own.
+ */
+ RSendUiServiceClient* iSendUiClient;
+
+ /**
+ * The requested order of sending services in the menu.
+ * Read from resources.
+ * Own.
+ */
+ CArrayFixFlat<TInt32>* iSendUiServicesOrderArray;
+
+ TBool iServerAppLaunch;
+
+ CPropertyObserver* iPropertyObserver;
+
+ };
+
+#endif // C_CSENDUIIMPL_H