featuremgmt/featureregistry/src/api/featreg_wrapper.cpp
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featureregistry/src/api/featreg_wrapper.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,304 @@
+// 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:
+// Implementation of wrapper API for querying support for features on a device, It 
+// internally uses Feature Manager query APIs.
+// 
+//
+
+#include <e32uid.h>
+#include <featdiscovery.h>  
+#include "featregpan.h"
+#include "featreg.h"
+#include "featregcmn.h"
+
+// Class to hold pointers to Cleanup stack & Feature Manager CFeatureDiscovery
+// virtual methods from CBase that result in these _TZ entries being generated.
+//NONSHARABLE_CLASS is used to remove _ZTI & _ZTV entry from def file . 
+NONSHARABLE_CLASS (CImplFeatDisc ) : public CBase
+	{
+	public:
+		static CImplFeatDisc* NewL();
+		~CImplFeatDisc();
+	private:
+		CImplFeatDisc();
+		void ConstructL();
+	
+	public:
+	
+	CFeatureDiscovery *iFeatDis;
+	CTrapCleanup * iCleanup;
+	};
+	
+
+CImplFeatDisc::CImplFeatDisc() :   
+	iFeatDis( NULL ), 
+	iCleanup(NULL)
+	{
+		
+	}
+	
+CImplFeatDisc::~CImplFeatDisc()
+	{
+	delete iFeatDis;
+	iFeatDis = 0;
+	
+	delete iCleanup;
+	iCleanup = 0;
+	}
+
+void CImplFeatDisc::ConstructL()
+    {
+    iFeatDis = CFeatureDiscovery::NewL();
+    }
+	
+
+CImplFeatDisc* CImplFeatDisc::NewL()
+    {
+    CImplFeatDisc* self = new( ELeave ) CImplFeatDisc();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+
+/**
+ * Dummy feature registry implementation object - never instantiated.
+ * @internalComponent
+ */
+class RFeatureRegistry::TImpl
+	{
+	TUint32 iDummy;
+	};
+
+/**
+ * Opens connection to the Feature Registry for making non-static queries.
+ * Note all non-static queries return state at the time Open() was called;
+ * Feature Registry changes are not observed until instance closed and re-opened.
+ *
+ * @return KErrNone if successful, negative system-wide error code if fails
+ * @publishedPartner
+ * @deprecated
+ */
+EXPORT_C TInt RFeatureRegistry::Open()
+	{
+	__ASSERT_ALWAYS(iImpl == NULL, Panic(EFeatRegInvalidUse));
+	
+	CTrapCleanup *cleanup = NULL;
+	
+	if(User::TrapHandler() == NULL)
+		{
+		cleanup = CTrapCleanup::New();	
+		if(cleanup == NULL)
+	        {
+	        return KErrNoMemory;
+	        }
+		}
+	
+	CImplFeatDisc  *ptrh = NULL; 	
+	TRAPD( err,  ptrh = CImplFeatDisc::NewL() );
+    if ( err == KErrNone )
+        {
+    	ptrh->iCleanup = cleanup;
+        iImpl = reinterpret_cast<TImpl*> (ptrh);
+        }
+    else
+    	delete cleanup;
+	return err;
+	}
+
+/**
+ * Queries support for feature on the device.
+ * Non-static version requiring open instance of class.
+ * Recommended when making multiple queries.
+ * Note: returns support for feature from the time Open() was called.
+ *
+ * @param aFeatureUid Unique identifier of feature being queried
+ * @return positive value if feature is supported, zero if feature is not supported,
+ *     or negative system-wide error code if could not be determined.
+ * @pre this registry instance is open
+ * @panic FeatReg EFeatRegInvalidUse if this registry instance is not open
+ * @publishedPartner
+ * @deprecated
+ */
+EXPORT_C TInt RFeatureRegistry::QuerySupport(TUid aFeatureUid)
+	{
+	
+	TUint32 dummyInfo;
+	return QuerySupport(aFeatureUid, dummyInfo);
+	}
+
+/**
+ * Queries support for feature on the device.
+ * Non-static version requiring open instance of class.
+ * Recommended when making multiple queries.
+ * Note: returns support for feature from the time Open() was called.
+ *
+ * @param aFeatureUid Unique identifier of feature being queried
+ * @param aInfo addition status information about feature
+ * @return positive value if feature is supported, zero if feature is not supported,
+ *     or negative system-wide error code if could not be determined.
+ * @pre this registry instance is open
+ * @panic FeatReg EFeatRegInvalidUse if this registry instance is not open
+ * @publishedPartner
+ * @deprecated
+ */
+EXPORT_C TInt RFeatureRegistry::QuerySupport(TUid aFeatureUid, TUint32& aInfo)
+	{
+	__ASSERT_ALWAYS(iImpl != NULL, Panic(EFeatRegInvalidUse));
+
+	CImplFeatDisc *ptrh  = reinterpret_cast<CImplFeatDisc*> (iImpl);
+	
+	if(ptrh->iFeatDis->IsSupported(aFeatureUid))
+		{
+		
+		//FeatReg support only ROM features so EStatusUpgradableBit has no meaning
+		//So aInfo always set to EStatusSupportBit in this wrapper
+		aInfo = EStatusSupportBit;
+		return EStatusSupportBit;		
+		}
+
+	// feature not supported
+	aInfo =0;
+	return 0;
+	}
+
+/**
+ * Closes this registry instance.
+ * @publishedPartner
+ * @deprecated
+ */
+EXPORT_C void RFeatureRegistry::Close()
+	{
+	CImplFeatDisc *ptrh  = reinterpret_cast<CImplFeatDisc*> (iImpl);
+	delete ptrh;
+	ptrh = 0;
+	}
+
+/**
+ * Queries support for feature on the device.
+ * Static version recommended for single queries.
+ *
+ * @param aFeatureUid Unique identifier of feature being queried
+ * @return positive value if feature is supported, zero if feature is not supported,
+ *     or negative system-wide error code if could not be determined.
+ * @publishedPartner
+ * @deprecated
+ */
+EXPORT_C TInt RFeatureRegistry::QuerySupportS(TUid aFeatureUid)
+	{
+	TUint32 dummyInfo;
+	return QuerySupportS(aFeatureUid, dummyInfo);
+	}
+
+/**
+ * Queries support for feature on the device.
+ * Static version recommended for single queries.
+ *
+ * @param aFeatureUid Unique identifier of feature being queried
+ * @param aInfo addition status information about feature
+ * @return positive value if feature is supported, zero if feature is not supported,
+ *     or negative system-wide error code if could not be determined.
+ * @publishedPartner
+ * @deprecated
+ */
+EXPORT_C TInt RFeatureRegistry::QuerySupportS(TUid aFeatureUid, TUint32& aInfo)
+	{
+	CTrapCleanup * cleanup = NULL;
+	if(User::TrapHandler() == NULL)
+		{
+		cleanup = CTrapCleanup::New();
+		if(cleanup == NULL)
+	        {
+	        return KErrNoMemory;
+	        }
+		}
+	TBool supported = EFalse;
+	TRAPD( err,  supported = CFeatureDiscovery::IsFeatureSupportedL(aFeatureUid) );
+	
+	if(cleanup != NULL)
+		delete cleanup;
+     
+	if (err != KErrNone)
+		{
+		return err;
+		}
+		
+    if ( supported)
+        {
+		//FeatReg support only ROM features so EStatusUpgradableBit has no meaning
+		//So aInfo always set to EStatusSupportBit in this wrapper
+		aInfo = EStatusSupportBit;
+		return EStatusSupportBit;		
+        }
+   
+	// feature not supported
+	aInfo =0;
+	return 0;
+
+	}
+	
+
+// CLASS DECLARATION
+
+/**
+Dummy class. Contains placeholder for a removed RFeatureRegistryNotify function to prevent BC break.
+@internalComponent
+*/
+class Dummy
+    {
+
+    public: // New functions
+
+        IMPORT_C static void Dummy1();
+        IMPORT_C static void Dummy2();
+        IMPORT_C static TInt Dummy3();
+        IMPORT_C static void Dummy4(TRequestStatus &);
+    };
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+/**
+Dummy method
+@internalComponent
+*/
+EXPORT_C void Dummy::Dummy1() { }
+
+/**
+Dummy method
+@internalComponent
+*/
+EXPORT_C void Dummy::Dummy2() {  }
+/**
+Dummy method
+@internalComponent
+@return KErrNotSupported
+*/
+EXPORT_C TInt Dummy::Dummy3() 
+{  
+return KErrNotSupported;
+}
+
+/**
+Dummy method
+@internalComponent
+*/
+EXPORT_C void Dummy::Dummy4(TRequestStatus &) {  }
+
+
+
+
+