diff -r 594d59766373 -r 7d48bed6ce0c phonecmdhandler/phonecmdhnlr/src/PhoneHandlerCallState.cpp --- a/phonecmdhandler/phonecmdhnlr/src/PhoneHandlerCallState.cpp Thu Aug 19 10:28:14 2010 +0300 +++ b/phonecmdhandler/phonecmdhnlr/src/PhoneHandlerCallState.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -17,16 +17,11 @@ // INCLUDE FILES -#include "PhoneHandlerCallState.h" -#include "PhoneHandlerControl.h" -#include "PhoneHandlerDebug.h" +#include "phonehandlercallstate.h" +#include "phonehandlercontrol.h" +#include "phonehandlerdebug.h" #include -#include -#include -#include - - // EXTERNAL DATA STRUCTURES // EXTERNAL FUNCTION PROTOTYPES @@ -55,9 +50,11 @@ // ----------------------------------------------------------------------------- // CPhoneHandlerCallState::CPhoneHandlerCallState( CPhoneHandlerControl& aControl ) -: iControl( aControl ) - { - } +: CActive(CActive::EPriorityStandard), + iControl( aControl ) + { + CActiveScheduler::Add(this); + } // ----------------------------------------------------------------------------- // CPhoneHandlerCallState::ConstructL @@ -65,70 +62,94 @@ // ----------------------------------------------------------------------------- // void CPhoneHandlerCallState::ConstructL() - { - COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::ConstructL() start" ); - - // Allows CPhoneHandlerCallState to start to listen call states. - iInfo = CCallInformation::NewL(); - iInfo->NotifyCallInformationChanges(*this); - - COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::ConstructL() end" ); - } + { + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::ConstructL() start" ); + + // Allows CPhoneHandlerCallState to start to listen S60 call states. + User::LeaveIfError( + iProperty.Attach( KPSUidCtsyCallInformation, KCTsyCallState ) ); + + Subscribe(); + + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::ConstructL() end" ); + } // ----------------------------------------------------------------------------- // CPhoneHandlerCallState::NewL // Two-phased constructor. // ----------------------------------------------------------------------------- CPhoneHandlerCallState* CPhoneHandlerCallState::NewL( CPhoneHandlerControl& aControl ) - { - COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::NewL()" ); - - CPhoneHandlerCallState* self = new(ELeave) CPhoneHandlerCallState( aControl ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } + { + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::NewL()" ); + + CPhoneHandlerCallState* self = new(ELeave) CPhoneHandlerCallState( aControl ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } // Destructor CPhoneHandlerCallState::~CPhoneHandlerCallState() - { - COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::~CPhoneHandlerCallState() start" ); - - if ( iInfo ) - { - iInfo->CancelNotification(); - delete iInfo; - } - - COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::~CPhoneHandlerCallState() end" ); - } - -// ----------------------------------------------------------------------------- -// CPhoneHandlerCallState::CallInformationChanged -// ----------------------------------------------------------------------------- -// -void CPhoneHandlerCallState::CallInformationChanged() - { - TRAP_IGNORE( CallInformationChangedL() ); + { + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::~CPhoneHandlerCallState() start" ); + + Cancel(); + iProperty.Cancel(); + iProperty.Close(); + + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::~CPhoneHandlerCallState() end" ); } // ----------------------------------------------------------------------------- -// CPhoneHandlerCallState::CallInformationChangedL +// CPhoneHandlerCallState::RunL() +// Informs caller of an asynchronous request that it has been completed. +// (other items were commented in a header). // ----------------------------------------------------------------------------- // -void CPhoneHandlerCallState::CallInformationChangedL() +void CPhoneHandlerCallState::RunL() { - CCallInfoIter& iter = iInfo->GetCallsL(); - for( iter.First(); !iter.IsDone(); iter.Next() ) - { - const MCall* call ( &iter.Current() ); - if ( call ) - { - iControl.NotifyCallStateL( call ); - } - } + COM_TRACE_1( "[PHONECMDHANDLER] CPhoneHandlerCallState::RunL() - return code = %d", iStatus.Int() ); + + TInt state( 0 ); + iProperty.Get( state ); + + COM_TRACE_1( "[PHONECMDHANDLER] CPhoneHandlerCallState - KTelephonyCallState = %d", state ); + + if( iStatus.Int() == KErrNone ) + { + iControl.NotifyCallState( state ); + } + + Subscribe(); } +// ----------------------------------------------------------------------------- +// CPhoneHandlerCallState::DoCancel +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPhoneHandlerCallState::DoCancel() + { + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::DoCancel()" ); + + iProperty.Cancel(); + } + +// ----------------------------------------------------------------------------- +// CPhoneHandlerCallState::Subscribe +// Start to listen changes in call state. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPhoneHandlerCallState::Subscribe() + { + COM_TRACE_( "[PHONECMDHANDLER] CPhoneHandlerCallState::Subscribe()" ); + + iProperty.Subscribe( iStatus ); + SetActive(); + } + +// // End of file