diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/inc/cfcontextsourcemanager/CFContextSourceManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/inc/cfcontextsourcemanager/CFContextSourceManager.h Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,293 @@ +/* +* Copyright (c) 2006-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: CFContextSourceManager class declaration. + * +*/ + + +#ifndef C_CFCONTEXTSOURCEMANAGER_H +#define C_CFCONTEXTSOURCEMANAGER_H + +#include + +#include "cfecompluginmanager.h" +#include "cfstarterobserver.h" +#include "cfstateobserver.h" +#include "cfstartereventhandler.h" + +class CAsyncCallBack; +class CCFContextSourcePlugIn; +class CCFContextSourceSettingsManager; +class CCFContextSourceSettingArray; +class MCFExtendedContextInterface; +class MCFContextSourceUpgrade; +class RFs; +class TCFContextSourceInfo; +class TContextSourceInitParams; +class CImplementationInformation; +class CCFContextSourceCommand; +class MCFContextSource; +class TCFClientContextSourceInfo; + + +/** + * Context source manager. + * + * Context source manager is responsible for loading all the + * context source plug-ins that are currently installed. + * + * @lib CFContextSourceManager.lib + * @since S60 4.0 + */ +NONSHARABLE_CLASS( CCFContextSourceManager ): public CCFEComPluginManager, +public MCFStarterObserver, +public MCFStateObserver + { +public: + + // Two phased constrcutors + IMPORT_C static CCFContextSourceManager* NewL( + MCFExtendedContextInterface& aCF, + RFs& aFs ); + IMPORT_C static CCFContextSourceManager* NewLC( + MCFExtendedContextInterface& aCF, + RFs& aFs ); + + // Destructor + IMPORT_C virtual ~CCFContextSourceManager(); + +public: // New functions + + /** + * Installs a context source setting. + * Setting is stored for a plugin if install succeeds. + * + * @since S60 5.0 + * @param aSettingFile Setting file opened as EFileRead. + * @param aContextSourceUid Implementation UID of the context source to + * receive setting. + * @param aClientThread Client thread making the request. + * @return None. Possible leave codes: + * - KErrBadHandle, context source not found/loaded. + * - KErrExtensionNotSupported, context source does not support + * installing settings. + * - Otherwise system-wide error code. + */ + IMPORT_C void InstallSettingL( RFile& aSettingFile, + const TUid& aContextSourceUid, + RThread& aClientThread ); + + /** + * Uninstalls a context source setting. + * Setting is removed if uninstall succeeds. + * + * @since S60 5.0 + * @param aSettingFilename Filename (without path) that was used to + * install the setting. + * @param aContextSourceUid Implementation UID of the context source. + * @param aClientThread Client thread making the request. + * @return None. Possible leave codes: + * - KErrNotFound, specified setting file not found. + * - KErrBadHandle, context source not found/loaded. + * - KErrExtensionNotSupported, context source does not support + * uninstalling settings. + * - Otherwise system-wide error code. + */ + IMPORT_C void UninstallSettingL( const TDesC& aSettingFilename, + const TUid& aContextSourceUid, + RThread& aClientThread ); + + /** + * Uninstalls context source settings registered by a client. + * Uninstalls all settings ever registered by the client for the context + * source. Settings are removed if uninstall succeeds. + * + * @since S60 5.0 + * @param aContextSourceUid Implementation UID of the context source. + * @param aClientThread Client thread making the request. + * @return None. Possible leave codes: + * - KErrBadHandle, context source not found/loaded. + * - KErrExtensionNotSupported, context source does not support + * uninstalling settings. + * - Otherwise system-wide error code. + */ + IMPORT_C void UninstallSettingsL( const TUid& aContextSourceUid, + RThread& aClientThread ); + + /** + * Handles context source command. + * + * @since S60 5.0 + * @param aCommand Context source command. + * @return None. Possible leave codes: + * - KErrBadHandle, context source not found/loaded. + * - KErrExtensionNotSupported, context source does not support commands. + * - Otherwise system-wide error code. + */ + IMPORT_C void HandleContextSourceCommandL( + const CCFContextSourceCommand& aCommand ); + + /** + * Registers client as a context source. + * Must be called for enabling client to receive source commands. + * + * @since S60 5.0 + * @param aPublisher Context source interface of the publisher client. + * @param aPublisherUid Uid (secure id) of the publisher client. + * @return KErrNone if successful, otherwise system-wide error code. + */ + IMPORT_C TInt RegisterClientContextSource( MCFContextSource* aPublisher, + const TUid& aPublisherUid ); + + /** + * Deregisters client as a context source. + * Must be called when a registered client cannot receive source commands + * anymore, i.e. when client session is deleted. + * + * @since S60 5.0 + * @param aPublisher Context source interface of the publisher client. + * @return None. + */ + IMPORT_C void DeregisterClientContextSource( + const MCFContextSource& aPublisher ); + +private: // From base classes + + // @see MCFInitialize + void InitializePhaseL( CCFPhaseBase::TCFPhaseId aPhase ); + + // from MCFStateObserver + void UpdatePlugInsL(); + + // @see MCFStarterObserver + void SetEventHandler( MCFStarterEventHandler& aEventHandler ); + +private: // New methods + + // Releases plugin dependencies before deleting + void ReleasePlugIn( CCFContextSourcePlugIn*& aPlugIn ); + + // Call back function for asynchronous plug-in loading + static TInt LoaderCallBack( TAny* aLoaderInfo ); + + // Prepares plug-in loaders + void PrepareLoaderL( CImplementationInformation* aImplementationInfo ); + + // Execute function for plug-in load + void ExecuteLoaders(); + +private: + + CCFContextSourceManager( MCFExtendedContextInterface& aCF, RFs& aFs ); + void ConstructL(); + +private: // New methods + + // Loads and initialized plug-in + CCFContextSourcePlugIn* CreateAndInitializePlugInL( + const TUid& aImplementationUid, + TContextSourceInitParams& aParams ); + + // Init starting phase + void InitDeviceStartingPhaseL(); + + // Init loading plugins phase + void InitLoadingPluginsPhaseL(); + + // Loads plug-ins and appends it into array + void LoadPluginL( TUid aUid, TInt aImplVersion ); + + // Configures setting folder to rom + // Returns ETrue if setting file found + TBool ConfigureRomSettingFolder( TDes& aFolder, const TUid& aUid ); + + // Configures setting folder to ram + // Returns ETrue if setting file found + TBool ConfigureRamSettingFolder( TDes& aFolder, const TUid& aUid ); + + // Searches the plugin setting folder from setting + // files and parses them + void ParsePlugInSettingsL( const TDesC& aFolder, + CCFContextSourceSettingArray& aSettings ); + + // Returns parsed plugin settings for a plugin + CCFContextSourceSettingArray* PlugInSettingsL( + const TUid& aImplementationUid ); + + /** + * Gets context source plugin supporting MCFContextSourceUpgrade + * interface. + * @param aContextSourceUid Implementation UID of the context source. + * @return Pointer to plugin's MCFContextSourceUpgrade interface. + * Possible leave codes: + * - KErrBadHandle, context source not found/loaded. + * - KErrExtensionNotSupported, context source does not support + * MCFContextSourceUpgrade interface. + */ + MCFContextSourceUpgrade* PlugInL( const TUid& aContextSourceUid ) const; + + /** + * Copies setting file into RAM setting folder of a context source. + * Overwrites previous setting file by the same name if it exists. + * @param aSettingFile Open file handle indicating the file to be copied. + * @param aContextSourceUid Implementation UID of the context source to + * receive setting. + * @param aClientThread Client thread making the request. + * @return None. + */ + void CopySettingFileL( const RFile& aSettingFile, + const TUid& aContextSourceUid, + RThread& aClientThread ); + + /** + * Deletes setting file(s) from RAM setting folder of a context source. + * @param aSettingFile Filename of the setting to be deleted. Use + * wildcards to delete more than one file. + * @param aContextSourceUid Implementation UID of the context source + * whose setting file(s) is to be deleted. + * @param aClientThread Client thread making the request. + * @return None. + */ + void DeleteSettingFileL( const TDesC& aSettingFile, + const TUid& aContextSourceUid, + RThread& aClientThread ); + +private: // data + + // Own: Context source settings manager + CCFContextSourceSettingsManager* iSettingsManager; + + // Own: Context source plugin info array + RArray iPlugIns; + + // Ref: Context framework API + MCFExtendedContextInterface& iCF; + + // Ref: File server session + RFs& iFs; + + // Own: Array of context sources implemented by clients (no duplicates) + RArray< TCFClientContextSourceInfo > iClientContextSources; + + // Loaders for plug-in loading + RPointerArray iLoaders; + + // Counter for loaded plug-ins + TInt iLoadedCount; + + // Event handler, not own, can be NULL + MCFStarterEventHandler* iEventHandler; + }; + +#endif