featuremgmt/featuremgr/inc/featurenotifier.h
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featuremgr/inc/featurenotifier.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,210 @@
+/*
+* 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 FEATURENOTIFIER_H
+#define FEATURENOTIFIER_H
+
+//  INCLUDES
+#include <e32svr.h>
+#include <babitflags.h>
+#include <featmgr/featurecmn.h>
+
+// FORWARD DECLARATIONS
+class RFeatMgrClient;
+
+// DEFINES
+
+// CLASS DECLARATION
+
+// CONSTANTS
+
+/**
+ Class provides a callback interface for handling notifification of
+ changes in features. The client derives a class from this interface
+ and implements the HandleNotifyChange-methods that interest it.
+
+ Feature Notifier API consists of the classes CFeatureNotifier and 
+ MFeatureObserver. TFeatureEntry and TFeatureChangeType are defined
+ in featurecmn.h.
+@publishedPartner
+@released
+*/
+class MFeatureObserver
+    {
+    public:
+        /** 
+         This callback method is used to notify the client about
+         the change in a feature.
+        
+         @param aType Type of the change.
+         @param aFeature The changed feature.  Note that although aFeature is a 
+         		TFeatureEntry object, only the iFeatureID field is set by the server.
+        
+         @see TFeatureChangeType
+         @see TFeatureEntry
+        */
+        virtual void HandleNotifyChange( TFeatureChangeType aType, TFeatureEntry aFeature ) = 0;
+        
+        /** 
+         This callback method is used to notify the client about errors
+         in the CFeatureNotifier. Any error in the notifier causes the notifier 
+         to stop handling of notifications. Handling can be restarted with
+         a call to aNotifier->NotifyRequest(), if the error is non-fatal.
+        
+         @param aError One of the Symbian OS error codes.
+        */
+        virtual void HandleNotifyError( TInt aError ) = 0; 
+    };
+
+/**
+ Active object for obtaining notification of changes in features.
+ Feature Notifier automatically resubscribes to the notification and 
+ fetches the status and data of the changed feature.
+
+ Feature Notifier API consists of the classes CFeatureNotifier and 
+ MFeatureObserver. The array RFeatureUidArray is defined in featurecmn.h.
+ The user of this class needs to implement MFeatureObserver interface 
+ methods to receive notifications. 
+ 
+@publishedPartner
+@released 
+*/
+NONSHARABLE_CLASS(CFeatureNotifier) : public CActive
+	{
+	public:
+	    /**
+         This is a two-phase constructor method that is used to create a new
+         instance for listening to the changes in features. 
+        
+         @param aObserver A reference to an observer instance.
+         @return A pointer to a new instance of the CFeatureNotifier class.
+        
+		 @leave Any One of the Symbian OS system-wide error codes
+        */
+        IMPORT_C static CFeatureNotifier* NewL( MFeatureObserver& aObserver );
+        
+        /**
+         Destructor.
+        */
+        IMPORT_C ~CFeatureNotifier();
+  
+        /** 
+         This method is used to request notification for one feature.
+        
+         @param aFeature Feature UID.
+		 @return KErrAlreadyExists if a notification has already been requested
+	             and is outstanding.  Otherwise one of the Symbian OS error 
+	             codes. 
+	             
+		 @see CActive
+        */
+		IMPORT_C TInt NotifyRequest( TUid aFeature );
+
+        /** 
+         This method is used to request notification for a subset of features.
+        
+         @param aFeatures A reference to a client owned UID-array
+                          of requested features.
+		 @return KErrAlreadyExists if a notification has already been requested
+		   		 and is outstanding.  Otherwise one of the Symbian OS error codes.
+		
+		 @see RFeatureUidArray
+		 @see CActive
+        */
+		IMPORT_C TInt NotifyRequest( RFeatureUidArray& aFeatures );
+
+        /** 
+         Cancels notification request for one feature.
+        
+         @param aFeatures Feature UID.
+		 @return KErrNotFound if the feature does not exist
+		         in the list of previously requested features.
+	             Otherwise one of the Symbian error codes. 
+        */
+        IMPORT_C TInt NotifyCancel( TUid aFeature );
+        
+        /** 
+         Cancels notification requests for all features.
+        
+		 @return One of the Symbian OS system-wide error codes.
+        */
+		IMPORT_C TInt NotifyCancelAll();
+
+    private:
+	    /**
+	     C++ default constructor.
+	    */
+	    CFeatureNotifier();
+	    
+	    /**
+ 	     @param aObserver A reference to an observer instance.
+	    */
+        CFeatureNotifier( MFeatureObserver& aObserver );
+        
+        /**
+	     By default Symbian OS constructor is private.
+	    */
+	    void ConstructL();
+
+    protected:
+        /**
+         Implements CActive.
+        */    
+        void RunL();
+        
+        /**
+         Implements CActive.
+         @param aError The error returned.
+         @return One of the Symbian OS system-wide error codes.
+        */
+        TInt RunError( TInt aError );
+        
+        /**
+         Implements CActive.
+        */  
+        void DoCancel();
+ 
+    private:
+        /**
+         A reference to the callback/observer instance.
+        */
+        MFeatureObserver& iObserver;
+        
+        /** Holds UID-array of features being requested. */
+        RFeatureUidArray iFeatures; 
+        
+        /** Server sets changed feature before signaling. */
+        TUid iFeatureChanged;
+
+		// Feature Manager server client 
+		RFeatMgrClient* iFeatMgrClient;
+
+
+	public: // @internalComponent APIs
+		// These APIs are for internal testing purposes only.
+
+		IMPORT_C TInt NumberOfNotifyFeatures();
+
+		IMPORT_C TInt CountAllocCells();
+	};
+
+
+#endif      // FEATURENOTIFIER_H
+            
+// End of File