featuremgmt/featuremgr/inc/featdiscovery.h
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featuremgr/inc/featdiscovery.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,307 @@
+/*
+* 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 FEATDISCOVERY_H
+#define FEATDISCOVERY_H
+
+//  INCLUDES
+#include <e32base.h>
+
+class CFeatureDiscoveryImpl;
+
+/**
+Wrapper class used for multiple feature queries.
+@publishedAll
+@released
+*/
+
+class TFeatureSet
+    {
+    public:
+
+		/**
+		Constructor
+	    */
+        IMPORT_C TFeatureSet();
+
+		/**
+		Destructor
+	    */
+        IMPORT_C ~TFeatureSet();
+
+		/**
+		 Method to add features before querying support statuses. This
+		 method must be called to initialize feature array before querying
+		 support statuses from server with FeaturesSupported(L) and finally
+		 check the status with a call to IsFeatureSupported or AreAllFeaturesSupported.
+
+	     @return KErrNone if feature addition succeded.
+	             Otherwise one of the Symbian OS error codes
+	    */
+	    IMPORT_C TInt Append( TUid aFeature );
+
+		/**
+	     Method to check feature's support status.
+
+	     @param aFeature is the feature UID of the feature that is queried.
+		 @return a TBool indicating whether the feature is supported (ETrue)
+		 or not (EFalse). If the feature does not exist, the return value is
+		 EFalse.
+	    */
+        IMPORT_C TBool IsFeatureSupported( TUid aFeature ) const;
+
+		/**
+		 Method to check whether all features queried are supported.
+
+	     @return ETrue if all features queried are supported or no features have been queried.
+	             Otherwise EFalse.
+	    */
+	    IMPORT_C TBool AreAllFeaturesSupported() const;
+
+    public: // For CFeatureDiscoveryImpl internal use
+
+        // Count number of features in TFeatureStat array.
+        TInt Count();
+
+        // Return id of feature in requested index from TFeatureStat array.
+        TUid FeatureId( TInt aIndex ) const;
+
+        // Reset TFeatureStat array.
+        void Reset();
+
+        // Append feature and status object into TFeatureStat array
+        TInt Append( TUid aFeature, TBool aSupported );
+
+    private:
+        struct TFeatureStat
+        {
+            TUid iFeatureID;
+            TBool iSupported;
+        };
+
+    private:
+        // Feature id, status array
+        RArray<TFeatureStat> iStatus;
+
+        // Counter for checking feature count before and after query
+        TInt iCount;
+
+        // Reserved for future use.
+        TUint32 iReserved;
+    };
+
+/**
+ The feature discovery API provides methods which are used to query which
+ features are supported in the environment.
+
+@publishedAll
+@released
+*/
+class CFeatureDiscovery : public CBase
+    {
+    public:
+
+	    /**
+	     This is a two-phase constructor method that is used to create
+	     a new instance of the CFeatureDiscovery class.
+
+	     @return a pointer to a new instance of the CFeatureDiscovery class.
+
+	     @leave Any One of the Symbian OS system-wide error codes
+	    */
+		IMPORT_C static CFeatureDiscovery* NewL();
+
+	    /**
+	     This is a two-phase constructor method that is used to create
+	     a new instance of the CFeatureDiscovery class. This method leaves
+	     the instance of the object on the cleanup stack.
+
+	     @return a pointer to a new instance of the CFeatureDiscovery class.
+
+	      @leave Any One of the Symbian OS system-wide error codes
+	    */
+		IMPORT_C static CFeatureDiscovery* NewLC();
+
+	    /**
+	     Destructor.
+	    */
+		virtual ~CFeatureDiscovery();
+
+		/**
+		 Static method to query the supported status of a feature on the
+		 device.
+
+		 @deprecated Use IsFeatureSupportedL(TUid aFeature) instead.
+
+		 @param aFeature is the feature ID of the feature that is queried.
+		 @return a TBool indicating whether the feature is supported (ETrue)
+		 or not (EFalse). If the feature does not exist, the return value is
+		 EFalse.
+
+		  @leave Any One of the Symbian OS system-wide error codes
+		*/
+		IMPORT_C static TBool IsFeatureSupportedL( TInt aFeature );
+
+		/**
+	     Dynamic method to query the supported status of a feature on the
+	     device. Before calling the method an instance of the CFeatureDiscovery
+	     class must be created by using one of the factory methods,
+	     NewL() or NewLC(). The created instance must be deleted after use.
+
+	     @deprecated Use IsSupported(TUid aFeature) instead.
+
+	     @param aFeature is the feature ID of the feature that is queried.
+	     @return a TBool indicating whether the feature is supported (ETrue)
+	     or not (EFalse). If the feature does not exist, the return value is
+	     EFalse.
+	    */
+		IMPORT_C TBool IsSupported( TInt aFeature ) const ;
+
+		/**
+	     Static method to query the supported status of a feature on the device.
+
+	     @param aFeature is the feature UID of the feature that is queried.
+	     @return a TBool indicating whether the feature is supported (ETrue)
+	     or not (EFalse). If the feature does not exist, the return value is
+	     EFalse.
+
+	     @leave Any One of the Symbian OS system-wide error codes
+	    */
+	    IMPORT_C static TBool IsFeatureSupportedL( TUid aFeature );
+
+		/**
+	     Dynamic method to query the supported status of a feature on the device.
+
+	     Before calling the method an instance of the CFeatureDiscovery class must
+	     be created by using one of the factory methods, NewL() or NewLC().
+	     The created instance must be deleted after use.
+
+	     @param aFeature is the feature UID of the feature that is queried.
+	     @return a TBool indicating whether the feature is supported (ETrue)
+	     or not (EFalse). If the feature does not exist, the return value is
+	     EFalse.
+	    */
+		IMPORT_C TBool IsSupported( TUid aFeature ) const ;
+
+		/**
+		 Static method to query the supported status of a set of features
+		 on the device.
+
+		 @param aFeatures is the wrapper class for feature array queried.
+
+		 @leave Any One of the Symbian OS system-wide error codes
+		*/
+		IMPORT_C static void FeaturesSupportedL( TFeatureSet& aFeatures );
+
+		/**
+	     Dynamic method to query the supported status of a set of features
+	     on the device. Before calling the method an instance of the
+	     CFeatureDiscovery class need to be created by using one of the
+	     factory methods, NewL() or NewLC(). The created instance must be
+	     deleted after use.
+
+	     @param aFeatures is the wrapper class for feature array queried.
+	     @return KErrNone if status query succeeded.
+	             Otherwise one of the Symbian OS error codes
+	    */
+		IMPORT_C TInt FeaturesSupported( TFeatureSet& aFeatures ) const;
+
+    private:
+
+	    /**
+	     C++ default constructor.
+	    */
+		CFeatureDiscovery();
+
+	    /**
+	     By default Symbian OS constructor is private.
+	    */
+	    void ConstructL();
+
+    private:
+
+		// Feature discovery implementation class
+		CFeatureDiscoveryImpl* iImpl;
+    } ;
+
+/**
+ Usage:
+
+ @code
+  #include <featdiscovery.h>
+  #include <featureinfo.h> // for feature definitions
+
+  // replace <featureUIDx> with a real UID )
+
+  // If querying only one feature, it is more efficient to use the class
+  // via the static method, IsFeatureSupportedL().
+  // When querying more than one feature, it is more efficient to use the
+  // class by creating an instance and calling the IsSupported() method.
+
+  // Static way of using the class:
+  TBool isSupported = CFeatureDiscovery::IsFeatureSupportedL(<featureUIDx>);
+
+  // Dynamic way of using the class using NewL():
+
+  // Call NewL() to create an instance of CFeatureDiscovery.
+  CFeatureDiscovery* testA = CFeatureDiscovery::NewL();
+
+  // Call the exported IsSupported() method to query whether features
+  // are supported in the current environment or not.
+  TBool usbSupported = testA->IsSupported(<featureUIDx>);
+  TBool mmcSupported = testA->IsSupported(<featureUIDx>);
+
+  // Delete the created instance of CFeatureDiscovery.
+  delete testA;
+
+  // Dynamic way of using the class using NewLC():
+
+  // Call NewLC() to create an instance of CFeatureDiscovery.
+  // The method leaves the instance of the object on the cleanup stack.
+  CFeatureDiscovery* testB = CFeatureDiscovery::NewLC();
+
+  // Call the exported IsSupported() method to query whether features
+  // are supported in the current environment or not.
+  TBool wcdmaSupported = testB->IsSupported(<featureUIDx>);
+  TBool gsmSupported = testB->IsSupported(<featureUIDx>);
+
+  // Dynamic way of using multiple feature query. This is preferred
+  // way to fetch support statuses if there are several features to be
+  // queried, because it involves less inter-process communication.
+
+  TFeatureSet featset;
+  User::LeaveIfError( featset.Append( <featureUIDx> ) );
+  User::LeaveIfError( featset.Append( <featureUIDx> ) );
+  TInt err = testB->FeaturesSupported( featset );
+	if(!err)
+		{
+			TBool uid1Supported = featset.IsFeatureSupported(<featureUIDx>);
+			TBool uid2Supported = featset.IsFeatureSupported(<featureUIDx>);
+			// ... or whether all QUERIED features are supported
+			TBool allSupported = featset.AreAllFeaturesSupported();
+		}
+  // featset cleans array up in destructor on scope exit
+
+  // Pop and delete the created instance of CFeatureDiscovery.
+  CleanupStack::PopAndDestroy();
+ @endcode
+*/
+#endif  // FEATDISCOVERY_H
+
+// End of File