harvester/common/inc/propertywatcher.h
changeset 0 c53acadfccc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvester/common/inc/propertywatcher.h	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2006-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:  Definition of CPropertyWatcher class.*
+*/
+
+
+#ifndef PROPERTYWATCHER_H
+#define PROPERTYWATCHER_H
+
+// SYSTEM INCLUDE
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CListener;
+class MKeyObserver;
+class MKeyAndStatusObserver;
+
+// CLASS DECLARATION
+/**
+ *  An instance of the CPropertyWatcher object - singleton.
+ *  Create listeners for RProperty key changes. This class
+ *  uses TLS implementation. 
+ *
+ *  @code
+ *	
+ * // Get instance
+ * iPropertyWatcher = CPropertyWatcher::GetInstanceL();
+ *	
+ * // Set wanted key, give gategory's uid, observed key and this pointer.
+ * iPropertyWatcher->ListenKeyChangesL( KUidSystemCategory,
+ *  	conn::KUidBackupRestoreKey, this );
+ *	iPropertyWatcher->ListenKeyChangesL( KPSUidScreenSaver,
+ *  	KScreenSaverOn, this );
+ *
+ * ...
+ *  // Implement NotifyKeyL for key canges or NotifyKeyAndStatusL for
+ *  // key and status changes. 
+ *  void CRestoreWatcher::NotifyKeyL( 
+ *		const TInt aKeyValue,
+ *		const TUid aPropertyCategory,
+ *		const TUint aKey)
+ *	{
+ *	
+ *	// In interface check key's category. 
+ *	if( aPropertyCategory == KUidSystemCategory &&
+ *		aKey == conn::KUidBackupRestoreKey )
+ *		{
+ *		TInt backupStateValue = aKeyValue;
+ *		backupStateValue &= conn::KBURPartTypeMask;
+ *		
+ *		if ( backupStateValue >= conn::EBURRestoreFull )
+ *			{
+ *			// Handle backup here
+ *			}
+ *		}
+ *	
+ *	if( aPropertyCategory == KPSUidScreenSaver && aKey == KScreenSaverOn )
+ *		{
+ *		//Handle screensaver activity here 
+ *		}	
+ *	}
+ * 
+ *  // Destruction
+ * 
+ * 	if( iPropertyWatcher )
+ *		{
+ *		iPropertyWatcher->StopListeningKeyChanges( 
+			KUidSystemCategory,
+			conn::KUidBackupRestoreKey, this );
+ *		
+ *		iPropertyWatcher->Delete(); // Release connection to TLS object.
+ *		} 
+ * 
+ * @endcode
+ */
+NONSHARABLE_CLASS( CPropertyWatcher ) : public CBase
+    {
+ public: // Exported.
+		
+	/*!
+	@function GetInstanceL
+	@Create a CPropertyWatcher object, 
+	@result a pointer to the created instance of CPropertyWatcher.
+	*/
+	IMPORT_C static CPropertyWatcher* GetInstanceL();
+	
+	/*!
+	@function Delete
+	@Release an instance of this singleton.
+	*/
+	IMPORT_C void Delete();
+		
+	/*!
+	@function ListenKeyChanges
+	@Registers to watcher and get events from watcher via MKeyObserver interface.
+	@param aPropertyCategory observed key's category.       
+	@param aKey observed key.
+	@aValueObserver client's pointer. Notive that this is not taking ownership.
+	*/
+	IMPORT_C void ListenKeyChangesL( const TUid aPropertyCategory,
+			 const TUint aKey,
+			 const MKeyObserver* aValueObserver
+			);
+   /*
+	@function ListenKeyAndStatusChangesL
+	@Registers to watcher and get events from watcher via MKeyAndStatusObserver interface.
+	@param aPropertyCategory observed key's category.       
+	@param aKey observed key.
+	@aStatusObserver client's pointer. Notive that this is not taking ownership.
+	*/
+   IMPORT_C void ListenKeyAndStatusChangesL( const TUid aPropertyCategory,
+			const TUint aKey,
+			const MKeyAndStatusObserver* aStatusObserver );
+
+   /*
+	@function StopListeningKeyChanges
+	@Stops listening key changes. 
+	@param aPropertyCategory observed key's category.       
+	@param aKey observed key.
+	@aValueObserver client's pointer.
+	*/
+   IMPORT_C void StopListeningKeyChanges( 
+			const TUid aPropertyCategory,
+			const TUint aKey,
+			const MKeyObserver* aKeyObserver );
+   
+   /*
+	@function StopListeningKeyAndStatusChanges
+	@Stops listening key and status changes. MDS need this to stop Active sheduler during restore.
+	@param aPropertyCategory observed key's category.       
+	@param aKey observed key.
+	@aValueObserver client's pointer.
+	*/
+    IMPORT_C void StopListeningKeyAndStatusChanges( 
+			const TUid aPropertyCategory,
+			const TUint aKey,
+			MKeyAndStatusObserver* aStatusObserver );
+ 
+private:  
+   /*!
+	@function ~CPropertyWatcher
+	@Destroy the object and release all memory objects.
+	*/
+	~CPropertyWatcher();  
+
+private:
+	/*!
+	@function FindListener
+	@Find if there is allredy listener which matches
+	@aPropertyCategory and aKey.
+	@return listener index, KErrNotFound if not exists.
+	*/    	
+	TInt FindListener( const TUid aPropertyCategory, const TUint aKey ) const;
+  
+private:
+  
+	/*!@iListenersArray - all listeners for different key values.
+	 * Owned by this class.
+	 */
+	RPointerArray<CListener> iListenersArray;    
+    };
+
+#endif // PROPERTYWATCHER
+