diff -r 000000000000 -r e686773b3f54 ccservices/cmsservices/contactpresence/inc/presenceiconinfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ccservices/cmsservices/contactpresence/inc/presenceiconinfo.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,332 @@ +/* +* Copyright (c) 2007 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: Presence in pbonebook +* +*/ + + +#ifndef PRESENCEICONINFO_H +#define PRESENCEICONINFO_H + +#include +#include +#include +#include +#include + +#include "mpresencetrafficlightsobs.h" +#include "presenceiconinfolistener.h" + + +class MContactPresenceObs; +class MPresenceTrafficLights; +class CVPbkContactLinkArray; +class MVPbkContactOperationBase; +class MContactPresenceInfo; +class CPresenceIconInfoRes; +class MPresenceServiceIconInfo; + +//The types for chat +const TInt KPresenceFieldGroup[] = { R_VPBK_FIELD_TYPE_IMPP }; + +/** + * CPresenceInfoInfo + * + * Presence in phonebook + * + * @lib contactpresence + * @since s60 v5.0 + */ +NONSHARABLE_CLASS( CPresenceIconInfo ) : public CBase, + public MVPbkSingleContactOperationObserver, public MPresenceIconNotifier + { +public: + + /** + * Constructor. + * @param aObs callback observer + * @param aPackedContactId contact id + */ + static CPresenceIconInfo* NewL( + CPresenceIconInfoListener& aParent, + MContactPresenceObs& aObs, + const TDesC8& aPackedContactId, + MPresenceTrafficLights& aIcons, + TBool aIsSubscription, + TInt aOpId ); + + virtual ~CPresenceIconInfo(); + + /** + * Destructor plus remove from queue + */ + void Destroy(); + + /** + * start to get icon info + * @param aPpId operation id used in response + */ + void StartGetIconInfoL( ); + + /** + * start to get icon info once + */ + // void StartGetIconInfoOnceL( TInt aOpId ); + + /** + * contact link accessor + * @return contact link + */ + TPtrC8 ContactLink(); + + /** + * Is this request running or waiting + * @Return ETrue if waiting + */ + TBool IsWaiting(); + + /** + * Send empty Notification to tell that there is no valid presence status anymore + * This is called when contact link is modified or deleted + */ + void SendEmptyNotification(); + + /** + * Is this subscritpion or get method + */ + TBool IsSubscription(); + + /** + * Operation id accessor + * @return operation id + */ + TInt OpId(); + + /** + * Send error callback method and delete this instance + * @param aError error code + */ + void SendErrorCallback( TInt aError ); + + inline static TInt LinkOffset(); + +public: // from base class MPresenceIconNotifier + + void NewIconForContact( + MVPbkContactLink* aLink, + const TDesC8& aBrandId, + const TDesC8& aElementId, + TInt aId, + TInt aBrandLanguage ); + + void NewIconsForContact( + MVPbkContactLink* aLink, + RPointerArray & aInfoArray, + TInt aId ); + + +private: + + +// from MVPbkSingleContactOperationObserver + + /** + * Called when operation is completed. + * + * @param aOperation the completed operation. + * @param aContact the contact returned by the operation. + * Client must take the ownership immediately. + * + * !!! NOTICE !!! + * If you use Cleanupstack for MVPbkStoreContact + * Use MVPbkStoreContact::PushL or + * CleanupDeletePushL from e32base.h. + * (Do Not Use CleanupStack::PushL(TAny*) because + * then the virtual destructor of the M-class + * won't be called when the object is deleted). + */ + void VPbkSingleContactOperationComplete( MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ); + + /** + * Called if the operation fails. + * + * @param aOperation the failed operation. + * @param aError error code of the failure. + */ + void VPbkSingleContactOperationFailed( MVPbkContactOperationBase& aOperation, TInt aError ); + +private: + + /** + * constructor + */ + CPresenceIconInfo( + CPresenceIconInfoListener& aParent, + MContactPresenceObs& aObs, + MPresenceTrafficLights& aIcons, + TBool aIsSubscription, + TInt aOpId ); + + /** + * constructor + */ + void ConstructL( const TDesC8& aPackedContactId ); + +private: + + // void OpenCmsConnectionsL(); + + /** + * Fetch contact data + */ + void FetchContactL( ); + + /** + * Reset members + */ + void ResetData(); + + /** + * Reset members + */ + void ResetData( MVPbkContactOperationBase& aOperation ); + + void DoVPbkSingleContactOperationCompleteL( MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ); + + + /** + * Fetch relevant fields + * @param aContact open store contact + * @return array of field values + */ + CDesCArrayFlat* FetchContactFieldsLC( MVPbkStoreContact* aContact ); + + /** + * Fetch a single field + * @param aResourceId resource id + * @param aArray array where to put findings + * @param aContact open store contact + */ + void FetchContactFieldL( TInt aResourceId, CDesCArrayFlat& aArray, MVPbkStoreContact* aContact ); + + /** + * Temporary save of first notification data + */ + void AllocatePendingNotifyL( + const TDesC8& aBrandId, + const TDesC8& aElementId ); + + /** + * Send pending callback method call + */ + void SendPendingCallback(); + + void DoCopyInfosL( + MVPbkContactLink* aLink, + RPointerArray & aInfoArray, + TInt aId ); + + + +private: // Data + + /** + * Parent + */ + CPresenceIconInfoListener& iParent; + + TDblQueLink iLink; + + /** + * callback observer + */ + MContactPresenceObs& iObs; + + + /** + * Packed Contact link + * Own. + */ + HBufC8* iContactLink; + + /** + * Pointer to stack variable to detect the deletion of the heap + * instance. This case takes place if a client + * calls destructor in callback method. + * Own. + */ + TBool* iDestroyedPtr; + + /** + * traffic light icon provider + */ + MPresenceTrafficLights& iIcons; + + /** + * Waiting store open + */ + TBool iWaiting; + + /** + * links + * OWN + */ + CVPbkContactLinkArray* iLinkArray; + + MVPbkContactOperationBase* iOperation; + + /** + * Contact link + * OWN + */ + MVPbkContactLink* iPbkContactLink; + + /** + * Are we in intialization, then we have to wait before sending data to callback method + */ + TBool iInitialization; + + /** + * Temporary save for pending notification, M-classes + */ + RPointerArray iPendings; + + /** + * Temporary save for pending notification, C-classes to enable deletion + */ + RPointerArray iPendings2; + + TBool iNotifyPending; + + /** + * Subscription or get method + */ + TBool iSubscription; + + /** + * Operation id used in get once method + */ + TInt iOpId; + + }; + + TInt CPresenceIconInfo::LinkOffset() + { + return _FOFF(CPresenceIconInfo, iLink); + } + + +#endif // PRESENCEICONINFO_H