diff -r 000000000000 -r c53acadfccc6 contextengine/inc/contextengineao.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextengine/inc/contextengineao.h Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2007-2009 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: +* +*/ + + +#ifndef CONTEXTENGINEAO_H +#define CONTEXTENGINEAO_H + +// system include +#include + +// user include +#include "contextplugin.h" +#include "mpropertyobserver.h" + +// forward declarations +class CContextSnapshotItem; +class MContextInitializationObserver; +class MContextSnapshotObserver; +class CMdESession; +class CPropertyWatcher; + +/** +* This class implements an active object for collecting context metadata +* asyncronously from the context plugins. +*/ +NONSHARABLE_CLASS( CContextEngineAO ) : public CActive, + public MContextPluginObserver, + public MKeyObserver + { +public: + + /** + * State for context engine (=this active object). + * Possible states: Ready for snapshot, initializing plugins or taking a snapshot. + */ + enum TContextEngineState { EReady = 0, EInitialization, ESnapshot }; + + /** + * Creates and constructs a new instance of CContextEngineAO. + * + * @return A pointer to the new instance. + */ + static CContextEngineAO* NewL( MContextInitializationObserver* aInitObserver, + MContextSnapshotObserver* aSnapshotObserver ); + + /** + * Destructor. + */ + virtual ~CContextEngineAO(); + +public: + /** + * Set a pointer to MdESession. The pointer is given forward to context plugins. + * Session must be set in order to successfully harvest context data. + * + * @param aSession Session pointer to set. + */ + void SetMdeSession( CMdESession* aSession ); + + /** + * Start taking a context snapshot (for multiple objects). + * + * @param aItem Observer to inform about snapshot completion + * and MdE objects the snapshot is taken to. + */ + void StartSnapshot( CContextSnapshotItem* aItem ); + + /** + * Method used to clarify how many plug-ins are loaded. + * + * @return Amount of plug-ins loaded. + */ + TInt PluginCount(); + +public: // from base class CActive + + /** + * From CActive. + * Every call takes a context snapshot from one plug-in. + */ + void RunL(); + + /** + * From CActive. + * Handles a leave occurring in the request completion event handler RunL(). + * + * @param aError An error code. + * @return An error code. + */ + TInt RunError( TInt aError ); + + /** + * From CActive. + * Cancels ????. + */ + void DoCancel(); + +public: // from MContextPluginObserver + + /** + * From MContextPluginObserver. + * This is derived from MContextPluginObserver and it is called + * by each plug-in when they have initialized. + * Error code for the first encountered error is returned as a parameter. + * + * @param aErrorCode Error code for the first error occurred during initialization. + */ + void PluginInitializationStatus( TInt aErrorCode ); + + /** + * From MContextPluginObserver. + * This is derived from MContextPluginObserver and it is called + * by each plug-in when they have taken the context snapshot. + * Error code for the first encountered error is returned as a parameter. + * + * @param aErrorCode Error code for the first error occurred while taking the snapshot. + */ + void PluginSnapshotStatus( CHarvesterData* aHD ); + +public: // From MKeyObserver. + + /** + * Method NotifyKeyL from MKeyObserver get notifications when + * property key has changed. + */ + void NotifyKeyL( + const TInt aKeyValue, + const TUid aPropertyCategory, + const TUint aKey ); + +private: + + /** + * Default constructor, implicitly called by NewL(). + */ + CContextEngineAO( MContextInitializationObserver* aInitObserver, + MContextSnapshotObserver* aSnapshotObserver ); + + /** + * 2nd phase construction, called by NewL(). + */ + void ConstructL(); + + /** + * Load context plugins. + */ + void LoadPluginsL(); + + /** + * Initialize this object. Thus load and initialize context plugins. + */ + void InitializeL(); + + /** + * Called when + * Backup&Restore is backing up or restoring. + */ + void BackupRestoreStart(); + + /** + * Called when + * Backup&Restore has finished backup or restore. + */ + void BackupRestoreReady(); + + /** + * Method HandleBackupRestoreKeyActionL. + * If user make full restore sets restore flag on. + */ + void HandleBackupRestoreKeyAction( const TUint aKeyValue ); + +private: // data + + /** + * This observer is used to inform the client application about + * finishing plug-in initializations. + */ + MContextInitializationObserver* iInitializationObserver; + + /** + * This observer is used to inform Context Engine about + * finishing a context snapshot. + */ + MContextSnapshotObserver* iContextSnapshotObserver; + + /** + * Plug-in array contains the plug-ins. + */ + RPointerArray iPlugins; + + /** + * Number of plug-ins currently not being initialized yet. + */ + TInt iUninitializedPluginsCount; + + /** + * Number of HDs currently not completed the snapshot yet. + */ + TInt iPluginSnapshotsLacking; + + /** + * Item to which we are currently doing a snapshot for. + */ + CContextSnapshotItem* iItem; + + /** + * State of this active object. + */ + TContextEngineState iState; + + /** First error code encountered in initialization is cached here and returned later. */ + TInt iInitializationError; + + /** First error code encountered in snapshot is cached here and returned later. */ + TInt iSnapshotError; + + /** + * iMdESession - MDE session. + */ + CMdESession* iMdESession; + + /** + * iPropertyWatcher - constains observed key's, owned by this class. + */ + CPropertyWatcher* iPropertyWatcher; + + /** + * iPropertyWatcher - used to check if only one plugin has not finished work. + */ + TBool iLastPlugin; + }; + +#endif // CONTEXTENGINEAO_H