contextframework/cfw/inc/cfcontextsourcemanager/CFContextSourceManager.h
changeset 0 2e3d3ce01487
child 24 a72ff4214918
--- /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 <cfcontextsourcesetting.h>
+
+#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<TCFContextSourceInfo> 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<CAsyncCallBack> iLoaders;
+        
+    // Counter for loaded plug-ins
+    TInt iLoadedCount;
+
+        // Event handler, not own, can be NULL
+        MCFStarterEventHandler* iEventHandler;
+    };
+
+#endif