diff -r 000000000000 -r 08ec8eefde2f featuremgmt/featureregistry/src/api/featreg_wrapper.cpp --- /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 +#include +#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 (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 (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 (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 &) { } + + + + +