--- /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 <e32std.h>
+#include <badesca.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <mcontactpresence.h>
+#include <VPbkEng.rsg>
+
+#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 <MPresenceServiceIconInfo>& 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 <MPresenceServiceIconInfo>& 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 <MContactPresenceInfo> iPendings;
+
+ /**
+ * Temporary save for pending notification, C-classes to enable deletion
+ */
+ RPointerArray <CPresenceIconInfoRes> 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