diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/inc/cfservices/CFContextSubscriptionImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/inc/cfservices/CFContextSubscriptionImpl.h Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,241 @@ +/* +* Copyright (c) 2002-2006 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: ?Description +* +*/ + + +#ifndef C_CFCONTEXTSUBSCRIPTIONIMPL_H +#define C_CFCONTEXTSUBSCRIPTIONIMPL_H + +#include "cfcontextsubscription.h" + +// FORWARD DECLARATIONS + +class MCFContextSubscriptionListener; +class CCFContextQueryImpl; +class CCFContextObject; +class CCFContextDataObject; +class RWriteStream; + +/** +* Subscription for observing context value changes for certain +* context type or a subtree of context types coming from certain +* source or all sources. +* +* Information about context changes will be sent to object implementing +* MCFListener-interface. +* +* @since S60 5.0 +* @lib cfservices.lib +*/ +NONSHARABLE_CLASS( CCFContextSubscriptionImpl ): public CCFContextSubscription + { + public: + + /** + * Two phased construction. + * + * @since S60 5.0 + * @param None. + * @return CCFContextSubscriptionImpl* + */ + IMPORT_C static CCFContextSubscriptionImpl* NewL(); + IMPORT_C static CCFContextSubscriptionImpl* NewLC(); + + /** + * Two phased construction with parameters. + * + * @since S60 5.0 + * @param aStream Stream where to initialize. + * @return CCFContextSubscriptionImpl* + */ + IMPORT_C static CCFContextSubscriptionImpl* NewL ( + RReadStream& aStream); + IMPORT_C static CCFContextSubscriptionImpl* NewLC ( + RReadStream& aStream); + + // Destructor. + ~CCFContextSubscriptionImpl(); + + public: // From base classes + + // @see CCFContextSubscription + void SetContextTypeL( const TDesC& aContextType ); + + // @see CCFContextSubscription + const TDesC& ContextType() const; + + // @see CCFContextSubscription + void SetContextSourceL( const TDesC& aSource ); + + // @see CCFContextSubscription + const TDesC& ContextSource() const; + + // @see CCFContextSubscription + TBool SubTypeMatch() const; + + // @see CCFContextSubscription + void SetSubTypeMatch( TBool aMatchSubTypes ); + + // @see CCFContextSubscription + TBool OnlyChangesIndicated() const; + + // @see CCFContextSubscription + void SetOnlyChangesIndicated( TBool aIndicateChangesOnly ); + + // @see CCFContextSubscription + void SetDataObjectEnabled( TBool aEnabled ); + + // @see CCFContextSubscription + TBool DataObjectEnabled() const; + + public: // New methods + + /** + * Internalizes object. + * + * @since S60 5.0 + * @param aStream Stream from which to internalize. + * @return None. + */ + IMPORT_C void InternalizeL( RReadStream& aStream ); + + /** + * Externalizes object. + * + * @since S60 5.0 + * @param aStream Stream where to externalize. + * @return None + */ + IMPORT_C void ExternalizeL( RWriteStream& aStream ); + + /** + * Gets object size in bytes. + * + * @since S60 5.0 + * @param None + * @return TInt + */ + IMPORT_C TInt Size() const; + + /** + * Returns subscriber of this subscription. + * + * @since S60 5.0 + * @param None. + * @return MCFContextSubscriptionListener& + */ + IMPORT_C MCFContextSubscriptionListener& SubscriptionListener() const; + + /** + * Sets a subscriber for this subscription. + * + * @since S60 5.0 + * @param aListener Call back to subscriber. + * @return None. + */ + IMPORT_C void SetSubscriptionListener( + MCFContextSubscriptionListener& aListener ); + + /** + * Evaluates context change event coming from data manager and sends + * indication to the subscriber if it matches this subscription. + * + * @since S60 5.0 + * @param aOldContext Previous context. + * @param aNewContext Current context. + * @return + */ + IMPORT_C void EvaluateContextChangeL( + const CCFContextObject& aNewContext, + const CCFContextObject& aOldContext, TBool aValueChanged ) const; + + /** + * Tells whether this instance is the same as the argument. + * Comparison is made based on client session, subscribed context source + * and type. + * + * @return ETrue if this instance equals the argument. Otherwise, EFalse. + */ + IMPORT_C TBool IsSame( + const CCFContextSubscriptionImpl& aSubscription) const; + + /** + * Checks if a context type matches with this subscription. + * + * @since S60 5.0 + * @param aContextType Context type to match. + * @return ETrue if a match. + */ + IMPORT_C TBool Matches( const TDesC& aContextType ) const; + + /** + * Checks if a context source and a context type matches + * this subscription. + * + * @since S60 5.0 + * @param aContextType Context type to match. + * @param aContextSource Context source to match. + * @return ETrue if a match. + */ + IMPORT_C TBool Matches( const TDesC& aContextType, + const TDesC& aContextSource ) const; + + /** + * Evaluates context change event coming from data manager and sends + * indication to the subscriber if it matches this subscription. + * + * @since S60 5.0 + * @param aNewContext Current context. + * @param aData Data object associated with the context. + * @param aValueChanged Value changed. + * @return + */ + IMPORT_C void EvaluateContextChangeL( + const CCFContextObject& aNewContext, + CCFContextDataObject& aData, + TBool aValueChanged ) const; + + private: + + // Check if a context notification is needed. + TBool NotificationNeeded( const CCFContextObject& aNewContext, + TBool aValueChanged ) const; + + private: + + // C++ constructor + CCFContextSubscriptionImpl(); + + // 2nd phase constructors + void ConstructL(); + void ConstructL( RReadStream& aStream ); + + private: + + /** Context query related to subscription */ + CCFContextQueryImpl* iContextQuery; + + /** A call back interface to the subscriber */ + MCFContextSubscriptionListener* iSubscriptionListener; + + /** Flag indicating whether only changes in context value are indicated */ + TBool iOnlyChangesIndicated; + + /** Flag indicating that subscriber wants also data objects */ + TBool iDataObjectEnabled; + }; + +#endif