diff -r 000000000000 -r f0cf47e981f9 mmshplugins/mmshaoplugin/src/muscallconferenceeventmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/src/muscallconferenceeventmonitor.cpp Thu Dec 17 08:44:37 2009 +0200 @@ -0,0 +1,226 @@ +/* +* Copyright (c) 2005-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: Monitor the status of CS Conference call +* +*/ + + +#include "mussesseioninformationapi.h" +#include "muslogger.h" +#include "muscallconferenceeventmonitor.h" + +#include +#include +#include +#include + + +// ----------------------------------------------------------------------------- +// Symbian two-phase constructor. +// ----------------------------------------------------------------------------- +// +CMusCallConferenceEventMonitor* CMusCallConferenceEventMonitor::NewL( RMobilePhone& aPhone, + RMobileLine& aLine, + RPointerArray& aCallMonitorArray ) + { + MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::NewL" ) + CMusCallConferenceEventMonitor* self = new (ELeave) + CMusCallConferenceEventMonitor(aLine,aCallMonitorArray); + CleanupStack::PushL( self ); + self->ConstructL( aPhone ); + CleanupStack::Pop( self ); + MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::NewL" ) + return self; + } + + +// ----------------------------------------------------------------------------- +// C++ destructor. +// ----------------------------------------------------------------------------- +// +CMusCallConferenceEventMonitor::~CMusCallConferenceEventMonitor() + { + MUS_LOG( "mus: [MUSAO] -> \ + CMusCallConferenceEventMonitor::~CMusCallConferenceEventMonitor" ) + Cancel(); + iConfCall.Close(); + MUS_LOG( "mus: [MUSAO] <- \ + CMusCallConferenceEventMonitor::~CMusCallConferenceEventMonitor" ) + } + +// ----------------------------------------------------------------------------- +// Symbian second-phase constructor. +// ----------------------------------------------------------------------------- +// +void CMusCallConferenceEventMonitor::ConstructL( RMobilePhone& aPhone ) + { + MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::ConstructL" ) + CActiveScheduler::Add( this ); + User::LeaveIfError(iConfCall.Open(aPhone)); + iConfCall.NotifyConferenceEvent(iStatus,iConfEvent,iCallName); + SetActive(); + MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::ConstructL" ) + } + + +// ----------------------------------------------------------------------------- +// C++ constructor. +// ----------------------------------------------------------------------------- +// +CMusCallConferenceEventMonitor::CMusCallConferenceEventMonitor(RMobileLine& aLine, + RPointerArray& aCallMonitorArray) + : CActive( EPriorityNormal ), + iLine(aLine), + iCallMonitorArray(aCallMonitorArray) + + + { + } + + +// -------------------------------------------------------------------------------- +// CMusCallConferenceEventMonitor::RunL() +// Implemented for CActive.It will be called any NotifyMobileLineStatusChange +// Event happens. +// -------------------------------------------------------------------------------- +// +void CMusCallConferenceEventMonitor::RunL() + { + MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::RunL" ) + iConfCall.NotifyConferenceEvent(iStatus,iConfEvent,iCallName); + SetActive(); + MUS_LOG1( "mus: [MUSAO] Conference->iConfEvent = %d", iConfEvent ) + switch(iConfEvent) + { + case RMobileConferenceCall::EConferenceCallAdded: + SetStateL( NMusSessionInformationApi::EConferenceCall ); + break; + case RMobileConferenceCall::EConferenceCallRemoved: + MonitorCallL(); + break; + case RMobileConferenceCall::EConferenceBuilt: + SetStateL( NMusSessionInformationApi::EConferenceCall ); + break; + case RMobileConferenceCall::EConferenceTerminated: + MonitorCallL(); + break; + case RMobileConferenceCall::EConferenceSwapped: + SetStateL( NMusSessionInformationApi::EConferenceCall ); + break; + case RMobileConferenceCall::EConferenceSplit: + SetStateL( NMusSessionInformationApi::EConferenceCall ); + break; + default: + break; + } + MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::RunL" ) + } + + +// -------------------------------------------------------------------------------- +// CMusCallConferenceEventMonitor::DoCancel() +// Implemented for CActive. +// Will be called when Cancel() method is called. +// -------------------------------------------------------------------------------- +// +void CMusCallConferenceEventMonitor::DoCancel() + { + MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::DoCancel" ) + iConfCall.CancelAsyncRequest( EMobileConferenceCallNotifyConferenceEvent ); + MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::DoCancel" ) + } + +// -------------------------------------------------------------------------------- +// CMusCallConferenceEventMonitor::RunError( TInt aError ) +// Implemented for CActive. +// Will be called automatically by framework when RunL Leaves. +// -------------------------------------------------------------------------------- +// + +TInt CMusCallConferenceEventMonitor::RunError( TInt aError ) + { + MUS_LOG1( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::RunError, aError %d", \ + aError ) + aError = KErrNone; + MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::RunError" ) + return aError; + } + +// -------------------------------------------------------------------------------- +// CMusCallConferenceEventMonitor::SetStateL( TInt aError ) +// Sets the Call State to Property +// -------------------------------------------------------------------------------- +// +void CMusCallConferenceEventMonitor::SetStateL( + NMusSessionInformationApi::TMusCallEvent aVal) + { + MUS_LOG1( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::SetStateL, aVal %d",\ + aVal ) + TInt currentVal; + User::LeaveIfError(RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent,currentVal)); + if(currentVal != (TInt)aVal) + { + User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + aVal )); + } + else + { + // No point of reporting it . + } + MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::SetStateL" ) + } + +// -------------------------------------------------------------------------------- +// CMusCallConferenceEventMonitor::MonitorCallL() +// If the call in conference is dropped that has to be removed. +// from call monitoring array.and start monitoring. +// -------------------------------------------------------------------------------- +// +void CMusCallConferenceEventMonitor::MonitorCallL() + { + MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::MonitorCallL") + TInt callCount; + iLine.EnumerateCall(callCount); + MUS_LOG1( "mus: [MUSAO] -> callCount = %d",callCount) + RLine::TCallInfo callInfo; + for(TInt i=0;iIsEqual( callInfo.iCallName ) ) + { + iCallMonitorArray[0]->StopMonitor(); + delete iCallMonitorArray[j]; + iCallMonitorArray.Remove(j); + break; + } + } + } + MUS_LOG( "mus: [MUSAO] -----------------------------------\n" ) + } + MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceEventMonitor::CheckCallStatus") + } + +// End of file + +