diff -r 2b7283837edb -r 3104fc151679 uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailspresencehandler.cpp --- a/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailspresencehandler.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,447 +0,0 @@ -/* -* Copyright (c) 2008-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: Implementation of the presence handler -* -*/ - - -#include "cvimpstdetailspresencehandler.h" - -#include "tvimpstconsts.h" - -//presence cache header -#include // cache reader -#include - -// ximpfw -#include -#include -#include -#include -#include "uiservicetabtracer.h" - -// --------------------------------------------------------------------------- -// NewL, two-phase construction -// --------------------------------------------------------------------------- -// -CVIMPSTDetailsPresenceHandler* CVIMPSTDetailsPresenceHandler::NewL(const TDesC& aServiceName , - MVIMPSTDetailsPresenceObserver& aObserver, - TBool aPresenceSupported ) - { - CVIMPSTDetailsPresenceHandler* self= new (ELeave) CVIMPSTDetailsPresenceHandler( aObserver, aPresenceSupported ); - CleanupStack::PushL(self); - self->ConstructL( aServiceName ); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// C++ (first phase) constructor -// --------------------------------------------------------------------------- -// -CVIMPSTDetailsPresenceHandler::CVIMPSTDetailsPresenceHandler(MVIMPSTDetailsPresenceObserver& aObserver, - TBool aPresenceSupported) - : iPresenceObserver( aObserver ), - iStatus( TVIMPSTEnums::EOffline ), - iPresenceSupported( aPresenceSupported ) - { - // No implementation required - } - -// --------------------------------------------------------------------------- -// ConstructL, second phase constructor -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::ConstructL(const TDesC& aServiceName ) - { - TRACER_AUTO; - iServiceName = aServiceName.AllocL(); - - - iXIMClient = MXIMPClient::NewClientL(); - //Create new sink to receive ximp context events - iPresenceContext = iXIMClient->NewPresenceContextLC(); - CleanupStack::Pop(); // iPresenceContext - - //initialize the presence cache. - iPresenceCacheReader = MPresenceCacheReader2::CreateReaderL(); - iPresenceCacheReader->SetObserverForSubscribedNotifications(this); - iUserId = NULL; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CVIMPSTDetailsPresenceHandler::~CVIMPSTDetailsPresenceHandler() - { - delete iStatusMessage; - delete iUserId; - delete iStatusText; - delete iServiceName; - delete iPresenceCacheReader; - delete iPresenceContext; - delete iXIMClient; - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::SubscribePresenceL -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::SubscribePresenceL(const TDesC& aUserId ) - { - TRACER_AUTO; - if( iUserId ) - { - delete iUserId; - iUserId = NULL; - } - iUserId = aUserId.AllocL(); - iStatus = TVIMPSTEnums::EOffline; - if( !iPresenceSupported ) - { - return; - } - HBufC* name = HBufC::NewLC( aUserId.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(aUserId); - - iPresenceCacheReader->SubscribePresenceBuddyChangeL(namePtr); - MPresenceBuddyInfo2* presenceBuddyInfo = iPresenceCacheReader->PresenceInfoLC(namePtr); - - if ( presenceBuddyInfo ) - { - TPtrC buddyXSPId = presenceBuddyInfo->BuddyId(); // read the buddyID : returns in XSP format - TPtrC buddyId = buddyXSPId.Right( buddyXSPId.Length() - iServiceName->Length() - KColon().Length()); - // read the availability /presence state enum value - MPresenceBuddyInfo2::TAvailabilityValues availabilityEnum = presenceBuddyInfo->Availability(); - TPtrC avablityText = presenceBuddyInfo->AvailabilityText(); - ConvertPresenceCacheEnums( availabilityEnum ,avablityText ); // convert the presence cache enum value to service tab enum - if(TVIMPSTEnums::EUnknown == iStatus) - { - //get the blocked and pending state - GetKeyFieldsAndValuesL(*presenceBuddyInfo); - } - TPtrC statusMsg = presenceBuddyInfo->StatusMessage(); // read the status message - ProcessStatusMesssageL( statusMsg ); - CleanupStack::PopAndDestroy(); // presenceBuddyInfo - } - CleanupStack::PopAndDestroy(); // name - } - - - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::HandlePresenceReadL -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::HandlePresenceReadL(TInt /*aErrorCode*/, - RPointerArray& /*aPresenceBuddyInfoList*/) - { - //Not required as we are not subcribing to all buddies presence - - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::HandlePresenceNotificationL -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::HandlePresenceNotificationL(TInt /*aErrorCode*/, - MPresenceBuddyInfo2* aPresenceBuddyInfo) - { - TRACER_AUTO; - if ( aPresenceBuddyInfo ) - { - CleanupDeletePushL( aPresenceBuddyInfo ); - TPtrC buddyXSPId = aPresenceBuddyInfo->BuddyId(); // read the buddyID : returns in XSP format - 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 - ConvertPresenceCacheEnums( availabilityEnum ,avablityText ); - - // its either blocked or pending stats, hence get the corrrect state - if(TVIMPSTEnums::EUnknown == iStatus) - { - //get the blocked and pending state - GetKeyFieldsAndValuesL(*aPresenceBuddyInfo); - } - - TPtrC statusMsg = aPresenceBuddyInfo->StatusMessage(); // read the status message - ProcessStatusMesssageL( statusMsg ); - CleanupStack::PopAndDestroy(); // aPresenceBuddyInfo - } - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::ConvertPresenceCacheEnums -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::ConvertPresenceCacheEnums(MPresenceBuddyInfo2::TAvailabilityValues aAvailabilityEnum, TPtrC aAvabilityText) - { - // convert the presence cache enums to UI enumvalues - // by default if the enum doesnot match then its TVIMPSTEnums::UnKnown - switch( aAvailabilityEnum ) - { - case MPresenceBuddyInfo2::EBusy: - { - if(0==aAvabilityText.Compare(KAwayState)) - { - iStatus = TVIMPSTEnums::EAway; - } - else if(0==aAvabilityText.Compare(KOnPhoneState)) - { - iStatus = TVIMPSTEnums::EOnPhone; - } - else if(0==aAvabilityText.Compare(KDndState)) - { - iStatus = TVIMPSTEnums::EDoNotDisturb; - } - else - { - iStatus = TVIMPSTEnums::EBusy; - } - break; - } - case MPresenceBuddyInfo2::EAvailable: - { - iStatus = TVIMPSTEnums::EOnline; - break; - } - case MPresenceBuddyInfo2::ENotAvailable: - { - iStatus = TVIMPSTEnums::EOffline; - break; - } - case MPresenceBuddyInfo2::EUnknownAvailability: - { - iStatus = TVIMPSTEnums::EUnknown; - if(0==aAvabilityText.Compare(KInvisibleState)) - { - iStatus = TVIMPSTEnums::EInvisible; - } - - break; - } - default: - { - iStatus = TVIMPSTEnums::EOffline; - break; - } - } - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::ProcessStatusMesssageL -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::ProcessStatusMesssageL(const TDesC& aStatusMessage ) - { - TRACER_AUTO; - if( iStatusMessage ) - { - delete iStatusMessage ; - iStatusMessage = NULL; - } - if( aStatusMessage.Length() > 0 ) - { - // MAx length of KStatusMsgMaxLength is allocated - // if status message is longer than KStatusMsgMaxLength - iStatusMessage = aStatusMessage.Left( KStatusMsgMaxLength ).AllocL(); - } - iPresenceObserver.HandlePresenceChangedL(); - } - -// -------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::GetPresenceStatus -// -------------------------------------------------------------------------- -// -TVIMPSTEnums::TOnlineStatus CVIMPSTDetailsPresenceHandler::GetPresenceStatus() - { - if(!iUserId) - { - return TVIMPSTEnums::EUnknown; - } - return iStatus; - } - -// -------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::GetHeaderLabelDataL -// -------------------------------------------------------------------------- -// -const TDesC& CVIMPSTDetailsPresenceHandler::GetHeaderLabelDataL( TInt aIndex ) - { - TRACER_AUTO; - if( aIndex == 0 && iServiceName ) // first label data - { - return *iServiceName; - } - else if( aIndex == 2 && iPresenceSupported ) // second label data - { - return GetStatusTextL(); - } - return KNullDesC; // return empty string for index 1 (label 2) for line in between the service name and presence - } - -// -------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::GetStatusMessageL -// -------------------------------------------------------------------------- -// -const TDesC& CVIMPSTDetailsPresenceHandler::GetStatusMessageL() - { - TRACER_AUTO; - if( iStatusMessage && iStatusMessage->Length() ) - { - return *iStatusMessage; - } - return GetStatusTextL(); - } - - -// -------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::IsSupported -// -------------------------------------------------------------------------- -// -TBool CVIMPSTDetailsPresenceHandler::IsSupported() const - { - return iPresenceSupported; - } - // -------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::GetStatusTextL -// -------------------------------------------------------------------------- -// -const TDesC& CVIMPSTDetailsPresenceHandler::GetStatusTextL() - { - TRACER_AUTO; - TInt resourceId = R_SERVDETAIL_STATUSTEXT_OFFLINE; - - switch( iStatus ) - { - case TVIMPSTEnums::EOffline: - { - resourceId = R_SERVDETAIL_STATUSTEXT_OFFLINE; - break; - } - case TVIMPSTEnums::EBusy: - { - resourceId = R_SERVDETAIL_STATUSTEXT_BUSY; - break; - } - case TVIMPSTEnums::EOnline: - { - resourceId = R_SERVDETAIL_STATUSTEXT_ONLINE; - break; - } - case TVIMPSTEnums::EInvisible: - { - resourceId = R_SERVDETAIL_STATUSTEXT_DND; - break; - } - case TVIMPSTEnums::EOnPhone: - { - resourceId = R_SERVDETAIL_STATUSTEXT_ONTHEPHONE; - break; - } - case TVIMPSTEnums::EDoNotDisturb: - { - resourceId = R_SERVDETAIL_STATUSTEXT_DND; - break; - } - case TVIMPSTEnums::EAway: - { - resourceId = R_SERVDETAIL_STATUSTEXT_AWAY; - break; - } - case TVIMPSTEnums::EBlocked: - { - resourceId = R_SERVDETAIL_STATUSTEXT_BLOCKED; - break; - } - case TVIMPSTEnums::EPending: - { - resourceId = R_SERVDETAIL_STATUSTEXT_PENDING; - break; - } - case TVIMPSTEnums::ECallForward: - { - resourceId = R_SERVDETAIL_STATUSTEXT_CALLFORWARD; - break; - } - case TVIMPSTEnums::EUnknown: - case TVIMPSTEnums::EServiceOut: - default: - { - break; - } - } - if( iStatusText ) - { - delete iStatusText; - iStatusText = NULL; - } - - if( CCoeEnv::Static() && TVIMPSTEnums::EServiceOut != iStatus - && TVIMPSTEnums::EUnknown != iStatus ) - { - iStatusText = StringLoader::LoadL( resourceId ); - } - if( iStatusText ) - { - return *iStatusText; - } - return KNullDesC; - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsPresenceHandler::GetKeyFieldsAndValuesL -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsPresenceHandler::GetKeyFieldsAndValuesL(MPresenceBuddyInfo2& aPresenceBuddyInfo) - { - TRACER_AUTO; - // At any point of time fro remote and blocked contact only one of the keys - // KPendingRequestExtensionValue/KBlockedExtensionValue will be assigned, and not both the keys. - TPtrC8 value = aPresenceBuddyInfo.GetAnyField( KExtensionKey() ) ; - if(value.Compare( KPendingRequestExtensionValue ) == 0) - { - iStatus = TVIMPSTEnums::EPending; - } - else if(value.Compare( KBlockedExtensionValue ) == 0) - { - iStatus = TVIMPSTEnums::EBlocked; - } - else if(value.Compare( KServiceExtensionValue ) == 0) - { - iStatus = TVIMPSTEnums::EServiceOut; - } - else if(value.Compare( KCallForwardExtensionValue ) == 0) - { - iStatus = TVIMPSTEnums::ECallForward; - } - else - { - iStatus = TVIMPSTEnums::EOffline; - } - } - -// end of file - - -