servicewidget/servicewidgetdatapublisher/src/cservicewidgetpresencehandler.cpp
branchRCL_3
changeset 28 3104fc151679
parent 27 2b7283837edb
child 29 9a48e301e94b
--- a/servicewidget/servicewidgetdatapublisher/src/cservicewidgetpresencehandler.cpp	Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,642 +0,0 @@
-/*
-* Copyright (c) 2008 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:  presene status handler 
- *                
- *
-*/
-
- 
-#include "cservicewidgetpresencehandler.h"
-
-#include "cservicewidgetbuddypresence.h"
-#include "servicewidgetcpglobals.h"
-#include "mservicewidgetobservers.h"
-#include "cservicewidgetimagedecoder.h"
-#include "swpdebugtrace.h"
-//ximp includes
-#include <ximpclient.h>
-#include <ximpcontext.h>
-#include <ximpobjectfactory.h>
-#include <ximpidentity.h>
-#include <ximpstatus.h>
-#include <ximpcontextstateevent.h>
-#include <ximprequestcompleteevent.h>
-#include <ximpcontextstate.h>
-#include <ximpobjectfactory.h>
-#include <ximpidentity.h>
-#include <ximpstatus.h>
-#include <presencegrantrequestlistevent.h>
-#include <presentitygroupcontentevent.h>
-#include <presentitygroupmemberinfo.h>
-#include <presencegrantrequestinfo.h>
-#include <presencefeatures.h>
-#include <presentitygroups.h>
-#include <ximpstatus.h> //Presence info test
-#include <presentitygroupcontentevent.h>
-#include <presentitygroupmemberinfo.h>
-#include <presenceauthorization.h>
-
-//ximpfw presence cache
-#include <presencecachereader2.h> // cache reader
-#include <presencebuddyinfolist.h>
-#include <presencebuddyinfo.h>
-#include <presenceinfofield.h>
-#include <personpresenceinfo.h>
-#include <presenceinfofieldvaluetext.h>
-#include <presenceinfofieldcollection.h>
-#include <ximpidentity.h>
-//presencecache event handler.
-#include <prescachereadhandler.h>
-#include <presenceinfo.h>
-
-#include <avabilitytext.h>
-
-#include "vimpstcustomcleanupapi.h" //For customized cleanup function
-
-_LIT( KListNameAllBuddy ,"buddylist" );
-const TInt KUriMaxLength = 255; 
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::CServiceWidgetPresenceHandler
-// ---------------------------------------------------------------------------
-// 
-CServiceWidgetPresenceHandler::CServiceWidgetPresenceHandler(MServiceWidgetPresenceObserver& aPresenceObserver )
-	:iPresenceObserver( aPresenceObserver ),
-	 iTotalCount( 0 ),
-	 iOperationId( EWSOperationUnknown ),
-	 iOwnStatus( EWSOnline )
-	   {
-	   TRACE_SWP(TXT("CServiceWidgetPresenceHandler::CServiceWidgetPresenceHandler()") );
-	   }
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::NewL
-// ---------------------------------------------------------------------------
-// 
-CServiceWidgetPresenceHandler* CServiceWidgetPresenceHandler::NewL(MServiceWidgetPresenceObserver& aPresenceObserver,
-															const TDesC& aServiceName,
-															const TDesC& aOwnId )
-    {
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewL() start") );
-    CServiceWidgetPresenceHandler* self = NewLC(aPresenceObserver, aServiceName, aOwnId );
-    CleanupStack::Pop(self);
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewL() end") );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::NewLC
-// ---------------------------------------------------------------------------
-// 
-CServiceWidgetPresenceHandler* CServiceWidgetPresenceHandler::NewLC(MServiceWidgetPresenceObserver& aPresenceObserver,
-													const TDesC& aServiceName,
-													const TDesC& aOwnId )
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewLC() start") );
-    CServiceWidgetPresenceHandler* self =
-        new (ELeave) CServiceWidgetPresenceHandler(aPresenceObserver);
-    CleanupStack::PushL(self);
-    self->ConstructL( aServiceName, aOwnId );
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewLC() end") );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::ConstructL
-// ---------------------------------------------------------------------------
-// 
-void CServiceWidgetPresenceHandler::ConstructL(const TDesC& aServiceName,const TDesC& aOwnId )
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() start") );
-    iServiceName = aServiceName.AllocL();
-    iOwnUserId =  aOwnId.AllocL();
-    iClient = MXIMPClient::NewClientL();  
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() iClient created") );             
-    //Create new sink to receive ximp context events
-	iPresenceCtx = iClient->NewPresenceContextLC();
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() iPresenceCtx created") );    
-	iFeatures = MPresenceFeatures::NewL(iPresenceCtx);
-	iAcceptedEventTypes.Reset();
-    iAcceptedEventTypes.AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
-    iAcceptedEventTypes.AppendL( MXIMPContextStateEvent::KInterfaceId );
-    iAcceptedEventTypes.AppendL( MPresentityGroupContentEvent::KInterfaceId );   
-    iAcceptedEventTypes.AppendL( MPresenceGrantRequestListEvent::KInterfaceId );
-    TArray< TInt32 > eventFilterArray = iAcceptedEventTypes.Array();
-	// register this to prsence context   
-	iPresenceCtx->RegisterObserverL( *this, &eventFilterArray );
-    // ignore code scanner warning, it gives panic
-    CleanupStack::Pop();// because of LC method    
-    //initialize the presence cache.
-    iPresenceCacheReader = MPresenceCacheReader2::CreateReaderL(); 	
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() iPresenceCacheReader created") );  													 
-    iPresenceCacheReader->SetObserverForSubscribedNotifications(this);
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() end") );
-    }
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler
-// ---------------------------------------------------------------------------
-// 
-CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler()
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler() start") );
-    iAcceptedEventTypes.Reset();
-    iOnlineBuddyArray.ResetAndDestroy();
-    delete iServiceName;
-    delete iOwnUserId;
-  	delete iPresenceCacheReader;
-  	delete iFeatures;
-    if(iPresenceCtx)
-        {
-        iPresenceCtx->UnregisterObserver( *this );
-        delete  iPresenceCtx;   
-        }
-    delete iClient; 
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler() end") );
-    }
-
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::GetConnectedSessionL
-// 
-// ---------------------------------------------------------
-void CServiceWidgetPresenceHandler::GetConnectedSessionL(TInt aProtocolUid,TInt aServiceId )
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetConnectedSessionL() start") );
-	iOperationId = EWSOperationBind;
-    iPresenceCtx->BindToL( TUid::Uid( aProtocolUid), aServiceId ) ;
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetConnectedSessionL() end") );
-    }
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::GetCompletedReqResult
-// 
-// ---------------------------------------------------------
-void CServiceWidgetPresenceHandler::ReleaseConnectionL()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReleaseConnectionL() start") );
-	iPresenceCtx->UnbindL() ;
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReleaseConnectionL() end") );
-	} 
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::SubscribePresenceL
-// 
-// ---------------------------------------------------------
-void CServiceWidgetPresenceHandler::SubscribePresenceL( const TDesC& aUserId )
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribePresenceL() start") );
-	 __ASSERT_ALWAYS( aUserId.Length(), User::Leave( KErrArgument ) );	
-	 //if anything is there with colon e.g. sip:user@presence1. strip the part before :
-	 TInt len = aUserId.Find(_L(":"));
-	 TPtrC buddyId = aUserId.Right( aUserId.Length() - len - KColon().Length() );
-
-    HBufC* name = HBufC::NewLC( buddyId.Length() + iServiceName->Length() + KColon().Length() );
-    TPtr namePtr( name->Des() );
-    namePtr.Zero();
-   // append the service name followed by user id ,seperated by colon
-    namePtr.Append(*iServiceName);
-    namePtr.Append(KColon);
-    namePtr.Append(buddyId);
-    iPresenceCacheReader->SubscribePresenceBuddyChangeL( *name );
-    CleanupStack::PopAndDestroy(); //  name   
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribePresenceL() end") );                                          
-	}
-
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::RetrieveSubscribedListL
-// ---------------------------------------------------------------------------
-//
-void CServiceWidgetPresenceHandler::RetrieveSubscribedListL()
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::RetrieveSubscribedListL() start") );
-    iOperationId = EWSOperationFetching;
-     //Create group id
-    TBuf<KUriMaxLength> buffer( KListNameAllBuddy );
-    MXIMPIdentity* groupList = iPresenceCtx->ObjectFactory().NewIdentityLC();
-     __ASSERT_ALWAYS( groupList , User::Leave( KErrNoMemory ) );		
-    groupList->SetIdentityL( buffer );
-    //Subscribe buddy list
-    TXIMPRequestId operationId = TXIMPRequestId::Null();
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ) ) ;
-    MPresentityGroups& groups = iFeatures->PresentityGroups() ;
-    groups.SubscribePresentityGroupContentL( *groupList );
-    CleanupStack::PopAndDestroy(); // groupList
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::RetrieveSubscribedListL() end") );
-    } 	
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::ReadPresenceFromCacheL
-// 
-// ---------------------------------------------------------	
-void CServiceWidgetPresenceHandler::ReadPresenceFromCacheL()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReadPresenceFromCache() start") );
-	iOnlineBuddyArray.ResetAndDestroy();
-	__ASSERT_ALWAYS( iServiceName, User::Leave( KErrArgument ) );
-    // passed the service id to see the member count
-    iPresenceCacheReader->BuddyCountInService(*iServiceName);
-    // passed the service to register for notification
-	iPresenceCacheReader->AllBuddiesPresenceInService(*iServiceName, this ); 
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReadPresenceFromCache() end") );
-	}
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::SubscribeForAuthorizationL
-//  
-// ---------------------------------------------------------    
-void  CServiceWidgetPresenceHandler::SubscribeForAuthorizationL()
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribeForAuthorizationL() start") );
-         __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ) ) ;
-    MPresenceAuthorization& authorization = iFeatures->PresenceAuthorization();
-     __ASSERT_ALWAYS( &authorization, User::Leave( KErrNotSupported ) ); 
-    authorization.SubscribePresenceGrantRequestListL();  
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribeForAuthorizationL() end") );
-    }
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::OnlineBuddyCount
-// 
-// ---------------------------------------------------------	
-TInt CServiceWidgetPresenceHandler::OnlineBuddyCount()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::OnlineBuddyCount()") );
-    return iOnlineBuddyArray.Count();
-	}
-	
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::AllBuddyCount
-// 
-// ---------------------------------------------------------	
-TInt CServiceWidgetPresenceHandler::AllBuddyCount()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::AllBuddyCount()") );
-    return iTotalCount;
-	}
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::GetInviteCountsL
-// 
-// ---------------------------------------------------------	
-TInt CServiceWidgetPresenceHandler::GetInviteCounts()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetInviteCountsL()") );
-    return iInvitationCount;
-	}
-
- // ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::GetOwnStatusL
-// 
-// ---------------------------------------------------------	
-TWSPresenceStatus CServiceWidgetPresenceHandler::GetOwnStatus()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetOwnStatusL()") );
-	// get the avatar image if not return the default image
-    return iOwnStatus;
-	}
-
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::GetOwnStatusL
-// 
-// ---------------------------------------------------------	
-TWServiceOperationId CServiceWidgetPresenceHandler::GetOngoingOperationId()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetOngoingOperationId()") );
-	// get the state of ongoing operation
-    return iOperationId;
-	}
-
-// ---------------------------------------------------------
-// CServiceWidgetPresenceHandler::HandlePresenceContextEvent
-// ---------------------------------------------------------
-void CServiceWidgetPresenceHandler::HandlePresenceContextEvent( 
-    const MXIMPContext& /*aContext*/,
-    const MXIMPBase& aEvent )
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceContextEvent() start") );
-	switch( aEvent.GetInterfaceId() )
-		{
-		case MXIMPRequestCompleteEvent::KInterfaceId:
-			{
-			TRACE_SWP(TXT("CServiceWidgetPresenceHandler:: MXIMPRequestCompleteEvent ") );
-			const MXIMPRequestCompleteEvent* complEvent = 
-			TXIMPGetInterface< const MXIMPRequestCompleteEvent >::From( 
-							aEvent, MXIMPBase::EPanicIfUnknown );
-			TXIMPRequestId reqId = complEvent->RequestId();
-			const MXIMPStatus& status = complEvent->CompletionResult() ;
-			TInt reqResult = complEvent->CompletionResult().ResultCode();
-			if( iOperationId == EWSOperationBind && reqResult == KErrNone )
-				{
-				TRACE_SWP(TXT("CServiceWidgetPresenceHandler::login completed ") );
-				iOwnStatus = EWSOnline;
-				TRAP_IGNORE(DoHandleBindCompleteL()) ;	
-				}
-			break;
-			}
-		case MPresentityGroupContentEvent::KInterfaceId:
-	       {
-	       TRACE_SWP(TXT("CServiceWidgetPresenceHandler::MPresentityGroupContentEvent ") );
-           TRAP_IGNORE(DoHandlePresentityGroupContentEventL( aEvent )) ;
-	       break;  
-	       }
-		case MPresenceGrantRequestListEvent::KInterfaceId:
-	       {
-	       TRACE_SWP(TXT("CServiceWidgetPresenceHandler:: MPresenceGrantRequestListEvent ") );
-	       TRAP_IGNORE(DoHandlePresenceGrantRequestListEventL(aEvent )) ;
-	       break;
-	       }
-		default:
-			{
-			break;
-			}
-		}
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceContextEvent() end") );
-	} 
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::HandlePresenceNotificationL
-// ---------------------------------------------------------------------------
-//  
-void CServiceWidgetPresenceHandler::HandlePresenceNotificationL(TInt /*aErrorCode*/,
-	        									MPresenceBuddyInfo2* aPresenceBuddyInfo)
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() start") );
-    if ( aPresenceBuddyInfo)
-        {
-        // we have the ownership of  aPresenceBuddyInfo ; Push into cleanup stack
-        CleanupDeletePushL( aPresenceBuddyInfo );
-        if (iServiceName )
-            {
-            // read the buddyID : returns in XSP format
-            TPtrC buddyXSPId = aPresenceBuddyInfo->BuddyId();
-            TPtrC buddyId = buddyXSPId.Right( buddyXSPId.Length() - iServiceName->Length() - KColon().Length());
-            // read the availability /presence state enum value 
-            MPresenceBuddyInfo2::TAvailabilityValues availabilityEnum = aPresenceBuddyInfo->Availability();
-            TPtrC avablityText = aPresenceBuddyInfo->AvailabilityText();
-            // convert the presence cache enum value to service tab enum 
-            TWSPresenceStatus status = ConvertPresenceCacheEnums( availabilityEnum, avablityText );
-
-            TPtrC statusMsg = aPresenceBuddyInfo->StatusMessage(); // read the  status message
-            TBool isOwnId = buddyId.Compare(*iOwnUserId) ? EFalse : ETrue ;
-
-            if( isOwnId )
-                {
-                TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() own status change") );
-                iOwnStatus = status;
-                iPresenceObserver.HandleOwnStatusChangeL( iOwnStatus );	
-                }
-            else
-                {
-                TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() buddy status change") );
-                CheckAndCacheBuddyAvailabilityL( buddyId, status );
-                iPresenceObserver.HandleBuddyPresenceChangeL(buddyId, status, statusMsg );
-                }
-            }
-        CleanupStack::PopAndDestroy(); //  aPresenceBuddyInfo
-        }
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() end") );
-    }
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::HandlePresenceReadL
-// ---------------------------------------------------------------------------
-//  
-void CServiceWidgetPresenceHandler::HandlePresenceReadL(TInt /*aErrorCode*/,
-	         									   RPointerArray<MPresenceBuddyInfo2>& aPresenceBuddyInfoList)
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() start") );
-    iOnlineBuddyArray.ResetAndDestroy(); // rest and destroy old data
-    // we have the ownership of  aPresenceBuddyInfoList : Push it to customize cleanupstack
-    // aPresenceBuddyInfoList is collection of owned object and each object need to be deleted    
-    CustomCleanupResetAndDestroyPushL(aPresenceBuddyInfoList);
-   
-    TInt buddyCount = aPresenceBuddyInfoList.Count();
-    for ( TInt i =0 ; i < buddyCount && iServiceName; ++i )
-        {
-        MPresenceBuddyInfo2* buddyinfo = aPresenceBuddyInfoList[i];
-        // read the buddyID : returns in XSP format
-        TPtrC buddyXSPId = buddyinfo->BuddyId();
-        TPtrC buddyId = buddyXSPId.Right( buddyXSPId.Length() - iServiceName->Length() - KColon().Length());
-        // read the availability /presence state enum value 
-        MPresenceBuddyInfo2::TAvailabilityValues availabilityEnum = buddyinfo->Availability();
-        TPtrC avablityText = buddyinfo->AvailabilityText();
-         // convert the presence cache enum value to service tab enum 
-        TWSPresenceStatus status = ConvertPresenceCacheEnums( availabilityEnum,avablityText );
-        //compare if its for own user id
-        TBool isOwnId = buddyId.Compare(*iOwnUserId) ? EFalse : ETrue ;
-        if( isOwnId )
-	        {
-	        TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() own status change") );
-	         iOwnStatus = status;
-	         iPresenceObserver.HandleOwnStatusChangeL( iOwnStatus );
-	         }
-        else 
-            {
-            TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() buddy status change") );
-            CheckAndCacheBuddyAvailabilityL( buddyId, status );
-            }
-         }
-    CleanupStack::PopAndDestroy();  //  aPresenceBuddyInfoList, calls LocalResetAndDestroy 
-    iPresenceObserver.HandleChangeL();
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() end") );	
-    }
-
- // ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::DoHandleBindCompleteL
-// ---------------------------------------------------------------------------
-//  
-void CServiceWidgetPresenceHandler::DoHandleBindCompleteL()
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandleBindCompleteL() start") );
-    __ASSERT_ALWAYS( iOwnUserId, User::Leave( KErrArgument ) );	
-	SubscribePresenceL(*iOwnUserId);
-	iInvitationCount = 0;
-	SubscribeForAuthorizationL();
-	// get the list.
-	RetrieveSubscribedListL();
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandleBindCompleteL() end") );
-	}
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler:: DoHandlePresentityGroupContentEventL
-// ---------------------------------------------------------------------------
-//
-void CServiceWidgetPresenceHandler::DoHandlePresentityGroupContentEventL( const MXIMPBase& aEvent )
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresentityGroupContentEventL() start") );
-    const MPresentityGroupContentEvent& event =	*TXIMPGetInterface< 
-    const MPresentityGroupContentEvent >::From(aEvent,MXIMPBase::EPanicIfUnknown );
-    TInt newCount = event.NewMembersCount();
-    TInt disapCount = event.DisappearedMembersCount();
-    
-    iTotalCount = iTotalCount + newCount; 
-    iTotalCount = iTotalCount - disapCount; 
-    if( iTotalCount <0 )
-	    {
-	    // if total count becomes < 0 assign to 0
-	    iTotalCount = 0;	
-	    }
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler iTotalCount %d "), iTotalCount );
-    HBufC* groupId = event.GroupId().Identity().AllocLC();   
-    if ( groupId && !groupId->Compare( KListNameAllBuddy ) )
-        {
-        for( TInt i =0; i < newCount; i++ )
-            {
-            const MPresentityGroupMemberInfo& subscribedEntitys =  event.NewMember(i);
-            const MXIMPIdentity& ident = subscribedEntitys.GroupMemberId();
-            HBufC* buddy = ident.Identity().AllocLC();
-            if( buddy )
-				{
-				SubscribePresenceL(*buddy);
-				CleanupStack::PopAndDestroy( buddy );
-				}
-            }
-        }
-    if( groupId)
-	    {
-	    CleanupStack::PopAndDestroy( groupId );
-        }
-    iOperationId = EWSOperationComplete;
-    iPresenceObserver.HandleChangeL();	
-    ReadPresenceFromCacheL();
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresentityGroupContentEventL() end") );
-    }
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler:: DoHandlePresenceGrantRequestListEventL
-// ---------------------------------------------------------------------------
-//
-void CServiceWidgetPresenceHandler::DoHandlePresenceGrantRequestListEventL( const MXIMPBase& aEvent )
-	{
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresenceGrantRequestListEventL() start") );
-	const MPresenceGrantRequestListEvent& event = *TXIMPGetInterface< const MPresenceGrantRequestListEvent >::From( 
-	   					 aEvent, MXIMPBase::EPanicIfUnknown );
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler iInvitationCount %d"), iInvitationCount );
-	TInt newcount    = event.NewRequestsCount();
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler newcount %d"), newcount );
-	TInt disapearCount  = event.DisappearedRequestsCount();
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::disapearCount %d "), disapearCount);
-    if(newcount)
-		{
-		iInvitationCount++; // one more inviation recieved
-		TRACE_SWP(TXT("CServiceWidgetPresenceHandler new invitation ,iInvitationCount %d"), iInvitationCount );
-		const MPresenceGrantRequestInfo& reqInfo = event.NewRequest ( 0 );// its always a new request
-		HBufC* requesterId = reqInfo.RequestorId().Identity().AllocLC();
-		if( requesterId )
-		    {
-		    iPresenceObserver.HandleAddRequestL(  *requesterId );
-			CleanupStack::PopAndDestroy( requesterId );
-		    }
-		}
-	else if( disapearCount )
-		{
-		iInvitationCount--;
-		if( iInvitationCount <0 )
-			{
-			// if <0  assign to 0
-			iInvitationCount = 0;	
-			}
-		TRACE_SWP(TXT("CServiceWidgetPresenceHandler accept/decline ,iInvitationCount %d"), iInvitationCount );
-		// there is some count changes
-		iPresenceObserver.HandleChangeL();	
-		}
-	TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresenceGrantRequestListEventL() end") );
-	}
-
-// ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::ConvertXimpToClientPresenceStatus
-// ---------------------------------------------------------------------------
-//  
-TWSPresenceStatus CServiceWidgetPresenceHandler::ConvertPresenceCacheEnums( MPresenceBuddyInfo2::TAvailabilityValues aAvailabilityEnum,TPtrC aAvabilityText)
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConvertPresenceCacheEnums() start") );
-    TWSPresenceStatus status = EWSUnknown ;
-    switch( aAvailabilityEnum )
-        {
-        case MPresenceBuddyInfo2::EBusy:
-            {
-            status  = EWSbusy;
-            if(0==aAvabilityText.Compare(KAwayState))
-                {
-                status  = EWSAway;
-                }
-            if(0==aAvabilityText.Compare(KOnPhoneState))
-                {
-                status  = EWSOnPhone;
-                }
-            if(0==aAvabilityText.Compare(KDndState))
-                {
-                status  = EWSDoNotDisturb;
-                }
-            break;
-            }
-        case MPresenceBuddyInfo2::EAvailable:
-            {
-            status  = EWSOnline;
-            break;
-            }
-        case MPresenceBuddyInfo2::ENotAvailable:
-            {
-            status  = EWSOffline;
-            break;
-            }
-        case MPresenceBuddyInfo2::EUnknownAvailability:
-            {
-            status  = EWSUnknown;
-            if(0==aAvabilityText.Compare(KInvisibleState))
-                {
-                status  = EWSInvisible;
-                }
-            break;
-            }
-        default:
-            {
-            status  = EWSUnknown;
-            break;
-            }    
-        }
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConvertPresenceCacheEnums() end") );
-    return status;
-    }
- // ---------------------------------------------------------------------------
-// CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL
-// ---------------------------------------------------------------------------
-//  
-void CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL( const TDesC& aUserId, TWSPresenceStatus aStatus )
-    {
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL() start") );
-    TBool needToAdd = ETrue;
-    TInt count = iOnlineBuddyArray.Count();
-    for( TInt i=0; i<count; i++ )
-	    {
-	    CServiceWidgetBuddyPresence* store = iOnlineBuddyArray[ i ];
-	    if( store && aUserId.Compare( store->BuddyId() ) == 0 )
-		    {
-		    if( aStatus == EWSUnknown || aStatus == EWSOffline )
-			    {
-			    // went offline remove from array
-			    iOnlineBuddyArray.Remove( i ); // do not use agian the loop ,may cuase to crash 
-			    delete store;
-			    store = NULL;
-			    iOnlineBuddyArray.Compress();
-			    }
-			else
-				{
-				store->SetPresenceStatus( aStatus );
-		   		}
-		  	needToAdd = EFalse;	
-		    break;	// break the loop 
-		    }
-	    }
-	if( needToAdd && ( aStatus != EWSUnknown ) && ( aStatus != EWSOffline ) )
-		{
-		// add only availabe buddies to list
-		CServiceWidgetBuddyPresence* store = CServiceWidgetBuddyPresence::NewL( aUserId, aStatus );
-        iOnlineBuddyArray.Append(store); // ownership given to array	
-		}
-    TRACE_SWP(TXT("CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL() end") );
-    }
-
-// end of file