diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwservicehandlerimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwservicehandlerimpl.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,431 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Implementation class for CLiwServiceHandler. +* See also LiwServiceHandler.h. +* +*/ + + + + + + + +#ifndef LIW_SERVICE_HANDLER_IMPL_H +#define LIW_SERVICE_HANDLER_IMPL_H + +// INCLUDES +#include +#include +#include +#include "liwtlsdata.h" +#include +#include + +// CONSTANTS + +// MACROS + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CLiwMenuBinding; +class CLiwMenuPane; +class CLiwServiceIfMenu; +class CLiwServiceIfBase; +class CLiwEcomMonitor; +class CRTSecMgrScriptSession; + +// CLASS DECLARATION + +/** +* Internal implementation class for CLiwServiceHandler. +* +* Contains the actual implementation logic for Service Handler, whereas the +* CLiwServiceHandler class provides only the public API. +* +* @see CLiwServiceHandler for API documentation. +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS(CLiwServiceHandlerImpl) : + public CBase, + public MLiwNotifyCallback, + public MEikMenuObserver, + public MLiwMenuLaunchObserver + { + public: // Construction & destruction + /** + * Constructs CLiwServiceHandlerImpl instance. + * + * @return Pointer to the new instance. + */ + static CLiwServiceHandlerImpl* NewL(); + + /** + * Destructor. + */ + virtual ~CLiwServiceHandlerImpl(); + + public: // Management + /** + * @see CLiwServiceHandler::Reset() + */ + void Reset(); + + /** + * @see CLiwServiceHandler::NbrOfProviders() + */ + TInt NbrOfProviders(const CLiwCriteriaItem* aCriteria); + + + + public: // Interest handling + /** + * @see CLiwServiceHandler::AttachL() + */ + void AttachL(TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::AttachL() + */ + TInt AttachL(const RCriteriaArray& aInterest); + + TInt AttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession* aSecMgrScriptSession); + /** + * @see CLiwServiceHandler::QueryImplementationL() + */ + void QueryImplementationL(CLiwCriteriaItem* aItem, RCriteriaArray& aProviderList); + void GetCapabilitiesL(RArray& secMgrCapList,CLiwGenericParamList* pMetaData); + + /** + * @see CLiwServiceHandler::GetInterest() + */ + void GetInterest(RCriteriaArray& aInterest); + + /** + * @see CLiwServiceHandler::DetachL() + */ + void DetachL(const RCriteriaArray& aInterest); + + /** + * @see CLiwServiceHandler::DetachL() + */ + void DetachL(TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::GetCriteria() + */ + const CLiwCriteriaItem* GetCriteria(TInt aId); + + /** + * @see CLiwServiceHandler::InParamListL() + */ + CLiwGenericParamList& InParamListL(); + + /** + * @see CLiwServiceHandler::OutParamListL() + */ + CLiwGenericParamList& OutParamListL(); + + public: // Menu handling + /** + * @see CLiwServiceHandler::InitializeMenuPaneL() + */ + void InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList); + /** + * @see CLiwServiceHandler::InitializeMenuPaneL() + */ + void InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList, + TBool aUseSubmenuTextsIfAvailable); + + /** + * @see CLiwServiceHandler::ServiceCmdByMenuCmd() + */ + TInt ServiceCmdByMenuCmd(TInt aMenuCmdId) const; + + /** + * @see CLiwServiceHandler::ExecuteMenuCmdL() + */ + void ExecuteMenuCmdL( + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback= NULL); + + /** + * @see CLiwServiceHandler::AttachMenuL() + */ + void AttachMenuL(TInt aMenuResourceId, TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::AttachMenuL() + */ + void AttachMenuL(TInt aMenuResourceId, TResourceReader& aReader); + + /** + * @see CLiwServiceHandler::AttachMenuL() + */ + void AttachMenuL(TInt aMenuResourceId, const RCriteriaArray& aInterest); + + /** + * Attach menu related criteria items to given menu. + * + * @param aMenuEntries List of menu command ids. + * @param aMenuResourceId Menu to be attached. + * @param aInterest Interest list. + */ + void AttachMenuL(RArray& aMenuEntries, TInt aMenuResourceId, RCriteriaArray& aInterest); + + /** + * Attach menu related criteria items to given menu. + * + * @param aMenuResourceId Resource reader pointing + * to menu to be attached. + */ + + //void AttachMenuL(TResourceReader& aReader, TInt aMenuId, RCriteriaArray& aInterest); + + /** + * @see CLiwServiceHandler::DetachMenu() + */ + void DetachMenu(TInt aMenuResourceId, TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::IsSubMenuEmpty() + */ + TBool IsSubMenuEmpty(TInt aSubMenuId); + + /** + * @see CLiwServiceHandler::IsLiwMenu() + */ + TBool IsLiwMenu(TInt aMenuResourceId); + + /** + * @see CLiwServiceHandler::HandleSubmenuL() + */ + TBool HandleSubmenuL(CEikMenuPane& aPane); + + public: // Generic service command handling + /** + * @see CLiwServiceHandler::ExecuteServiceCmdL() + */ + void ExecuteServiceCmdL( + const TInt& aCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0); + + /** + * @see CLiwServiceHandler::ExecuteServiceCmdL() + */ + void ExecuteServiceCmdL( + const CLiwCriteriaItem& aCmd, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0); + + /** + * @see CLiwServiceHandler::MenuCmdId() + */ + TInt MenuCmdId(TInt aMenuCmdId) const; + + public: // Other new methods + /** + * Called by CLiwEcomMonitor. + * + * @param aImpl An object representing this class. + * @return An error code. KErrNone if successful. + */ + static TInt SynchronizeCallBack(TAny* aImpl); + + public: // From MLiwNotifyCallback + TInt HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& aInParamList); + + public: // From MEikMenuObserver + void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); + + public: // From MEikCommandObserver (via MEikMenuObserver) + void ProcessCommandL(TInt aCommandId); + + void GetProviderCapability(CLiwCriteriaItem* aItem,RCriteriaArray& aOutItem); + + private: // From MLiwMenuLaunchObserver + void MenuLaunched(); + + private: + // Possible placeholder types. + enum TLiwPlaceholderType + { + ELiwPlaceholderNormal, + ELiwPlaceholderCascade, + ELiwPlaceholderIntelligentCascade + }; + + private: + CLiwServiceHandlerImpl(); + void ConstructL(); + + // Attach menu related criteria items to given menu. + void DoAttachMenuL(TResourceReader& aReader, TInt aMenuId, RCriteriaArray& aInterest); + + TInt DoAttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession* aScriptSession); + void DoAttachL(const RCriteriaArray& aInterest); + + void ReadInterestListL(TResourceReader& aReader, RPointerArray& aResult); + TInt ResolveProvidersL(CLiwBinding* aBinding, CLiwCriteriaItem* aItem, CRTSecMgrScriptSession* aScriptSession); + TInt ResolveProvidersL(CLiwBinding* aBinding, CLiwCriteriaItem* aItem); + + TBool IsCached(CLiwServiceIfBase* aProvider); + + CLiwMenuPane* CreateEmptyLiwMenuPaneL(TInt aBaseMenuCmdId, TInt aResourceId); + void DeleteLiwMenuPane(CLiwMenuPane* aLiwPane); + + TInt ResourceIdForNextFreeSlot(); + void CopyMenuItemsL(CLiwMenuPane* aSource, CEikMenuPane& aDest, TInt aStartIndex, + TBool aIsSubmenu); + TInt SlotItemCmd(CEikMenuPane& aPane); + CLiwMenuPane* MenuPaneForSlotCmd(TInt aCmdId); + TLiwPlaceholderType PlaceholderType(CEikMenuPane& aPane, TInt aCmd, TBool& aTitleLocked); + void ConvertPlaceholderL(CEikMenuPane& aPane, TInt aCmd, CLiwMenuPane& aLiwPane, + const TDesC& aTitle); + void UnCascadeL(CEikMenuPane& aPane, TInt aCmd, CLiwMenuPane& aLiwPane); + void SkipMenuFields(TResourceReader& aReader); + TBool IsInLastInitialized(CLiwMenuPane* liwPane) const; + TBool GetSubmenuTitle(CEikMenuPane& aPane, TDes& aResult); + TBool IsCriteriaAlreadyInInterest(CLiwCriteriaItem& aItem, + RPointerArray& aInterest) const; + CLiwCriteriaItem* ConvertCriteriaItemPointerL(CLiwCriteriaItem* aCandidate); + void FilterInterestListL(RPointerArray& aOrginal, + RPointerArray& aFiltered); + void FilterInfoArray(RImplInfoPtrArray& aArray, RArray& aArrayPlugin, + CLiwCriteriaItem* aItem); + CLiwMenuBinding* AlreadyBound(TInt aMenuId, TInt aMenuCmd, TInt aMenuItemIndex) const; + void SynchronizeDbL(); + void ListProvidersForCriteriaL(RArray& aResult, CLiwCriteriaItem& aItem); + void HandleRemovedProviders(RArray& aInMemory, RImplInfoPtrArray& aOnSystem); + void HandleNewProvidersL(RArray& aInMemory, RImplInfoPtrArray& aOnSystem, + CLiwCriteriaItem* aItem); + void RemoveProvider(TInt aImplUid); + void AddProviderL(TUid aImplUid, CLiwCriteriaItem* aItem); + inline void ClearMenuPaneArray(); + void AttachServiceManagerPluginsL(); + void ServiceManagerPlugin_ListImplementationsL(RArray& aArray, CLiwCriteriaItem* aItem); + CLiwServiceIfBase* ServiceManagerPlugin_CreateImplementationL(TInt32 aImplUid); + TInt NumAlreadyInitializedPaneIdsL() const; + + // Leaving helper method. Handler cleanupstack issues and calls ReadInterestListL(). + void ReadInterestL(RCriteriaArray& aInterest, TInt aInterestResourceId); + + // Detaches all items from given menu. + void DoDetachMenu(TInt aMenuResourceId); + + // Detaches only those items from a given menu, which match the given interest. + + + void DoDetachMenu(TInt aMenuResourceId, RCriteriaArray& aInterest); + + // Removes unnecessary criteria items from Service Handler. + void RemoveObsoleteCriteriaItems(); + + // Removes unnecessary providers from Service Handler. + void RemoveObsoleteProviders(); + + /* Parses the metadata information stored in the opaque_data field + * of service provider registration information \c REGISTRY_INFO. + * + * The metadata information is seprated from the service command definition + * in the opaque_data field using a separator "::". + * + * @param aOpaque the opaque_data values specified in the registration information + * @param aMetaData the parsed metadata entries will be stored in this variable + * + */ + void ParseMetaData(const TDesC8& aOpaque, TDes8& aMetaData); + + //To fetch the infoArray + void QueryImplementationL(CLiwCriteriaItem* aItem, RImplInfoPtrArray& aInfoArray); + + TCapability GetServiceCapability(const TDesC& aCapName); + + //To fetch the version range specified by the consumer while creating Criteria + TBool GetVersionRange(CLiwCriteriaItem* aItem,TReal& aMinVersion, TReal& aMaxVersion); + + //To fetch the version range specified by the consumer while creating Criteria + TBool GetVersion (CLiwCriteriaItem* aItem,TReal& aVersion); + + //To fetch the implementation version specified in provider metadata + void ComputeIntfVersion(CLiwServiceData* pProvMetaData,TReal& aIntfVersion); + + private: + // Pointer to the control environment. + CCoeEnv* iCoeEnv; + + // Owns all the attached criteria items. + RPointerArray iInterestList; + + // Criteria -> provider bindings for base service providers. + RPointerArray iBaseBindings; + + // Criteria -> provider bindings for menu service providers. + RPointerArray iMenuBindings; + + // Contains the LIW menu panes. + RPointerArray iMenuPanes; + + // Input parameter list which can be given to the consumer application. + CLiwGenericParamList* iInParams; + + // Output parameter list which can be given to the consumer application. + CLiwGenericParamList* iOutParams; + + // Resource offset for LiwServiceHandler.rsc. + TInt iResourceOffset; + + // Owns all the providers currently in memory. + RPointerArray iProviders; + + TInt iNextFreeSlot; + RPointerArray iLastInitialized; + CLiwMenuPane* iSubmenu; + TInt iSubmenuCmd; + CLiwEcomMonitor* iEcomMonitor; + TBool iTlsDataOpened; + }; + + +inline void CLiwServiceHandlerImpl::ClearMenuPaneArray() + { + iMenuPanes.ResetAndDestroy(); + } + +#endif // LIW_SERVICE_HANDLER_IMPL_H + +// END of File + +