diff -r 1fc85118c3ae -r 870918037e16 eventsui/eventshandlerui/eventshandlerserver/src/evtnotifierhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eventsui/eventshandlerui/eventshandlerserver/src/evtnotifierhandler.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,280 @@ +/* +* 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: Handler for notifier on Event +* +*/ + + +// INCLUDE FILES +#include +#include // CAknGlobalNote + +#include "evtdebug.h" +#include "evtnotifierhandler.h" +#include "evtnotifierobserver.h" +#include "evttoneaction.h" +#include "evtglobalquery.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +//S60 Event Notifier plugin id +const TUid KEvtNotifierUidS60 = { 0x2001E66C }; + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::NewL +// ----------------------------------------------------------------------------- +CEvtNotifierHandler* CEvtNotifierHandler::NewL( + MEvtNotifierObserver& aNotifierObserver, + TEvtEventInfo aEventInfo ) + { + CEvtNotifierHandler* self = new ( ELeave ) CEvtNotifierHandler( aNotifierObserver, aEventInfo ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::CEvtNotifierHandler +// ----------------------------------------------------------------------------- +CEvtNotifierHandler::CEvtNotifierHandler( + MEvtNotifierObserver& aNotifierObserver, TEvtEventInfo aEventInfo ) + : CActive( EPriorityStandard ), + iNotifierObserver( aNotifierObserver ),iEventInfo(aEventInfo) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::~CEvtNotifierHandler +// ----------------------------------------------------------------------------- +CEvtNotifierHandler::~CEvtNotifierHandler() + { + delete iInputParam; + delete iInputBuffer; + + Cancel(); + + if(iEvtGlobalQuery) + { + delete iEvtGlobalQuery; + iEvtGlobalQuery = NULL; + } + + iNotifier.Close(); + + delete iEvent; + delete iEventManager; + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::ConstructL +// ----------------------------------------------------------------------------- +void CEvtNotifierHandler::ConstructL() + { + EVTUIDEBUG("+ CEvtNotifierHandler::ConstructL"); + iInputBuffer = CBufFlat::NewL( KEvtNotifierBufferLength ); + iInputParam = CEvtInfoNoteInputParam::NewL(); + iResponseBuffer.Zero(); + iResponseBuffer.SetLength( KEventIdLength ); + iEventManager = CEvtEventManager::NewL(); + EVTUIDEBUG( "- CEvtNotifierHandler::ConstructL" ); + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::IsLaunchable +// ----------------------------------------------------------------------------- +TBool CEvtNotifierHandler::IsLaunchable() + { + EVTUIDEBUG( "+ CEvtNotifierHandler::IsLaunchable" ); + TBool launchable = EFalse; + + TRAPD( evtErr, iEvent = iEventManager->GetEventL( iEventInfo.iEventId ) ); + if( !evtErr && iEvent && iEvent->EventStatus() == EActive ) + { + launchable = ETrue; + } + + return launchable; + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::StartEvtNotifier +// ----------------------------------------------------------------------------- +void CEvtNotifierHandler::StartEvtNotifierL() + { + EVTUIDEBUG( "+ CEvtNotifierHandler::StartEvtNotifierL" ); + + if( iEvent ) + { + CEvtInfoNoteInputParam::TEvtTriggerAccuracy accuracy; + accuracy = static_cast< CEvtInfoNoteInputParam::TEvtTriggerAccuracy>(iEventInfo.iAccuracy); + // set the subject and description of notifier + iInputParam->SetSubjectL( iEvent->Subject() ); + iInputParam->SetDescriptionL( iEvent->Description() ); + iInputParam->SetTrigerringAccuracy( accuracy ); + iInputParam->SetToneEnabled( iEventInfo.iPlayTone ); + iInputParam->SetShowSnooze( iEventInfo.iSnooze ); + if( iEventInfo.iPlayTone && iEvent->HasAction() ) + { + // Populate the Tone. + CEvtToneAction* tone = CEvtToneAction::NewLC(); + tone->InternalizeL( iEvent->Action() ); + iInputParam->SetToneL( tone->FileName() ); + iInputParam->SetToneRepeat( tone->ToneLoop() ); + CleanupStack::PopAndDestroy(tone); + } + + EVTUIDEBUG( "Trigger Fired Event" ); + + if(iEvent->Subject().Length()) + { + TPtrC subject( iEvent->Subject() ); + EVTUIDEBUG1( "Subject = %S", &subject ); + } + EVTUIDEBUG1( "Tigger ID = %d", iEvent->EventId() ); + + RBufWriteStream writeStream( *iInputBuffer, 0 ); + CleanupClosePushL( writeStream ); + + iInputParam->ExternalizeL( writeStream ); + + TPtr8 bufPtr( const_cast< TUint8 *>( iInputBuffer->Ptr( 0 ).Ptr() ), + iInputBuffer->Ptr( 0 ).Length(), + iInputBuffer->Ptr( 0 ).Length() ); + + iHandlerType = EHandlerNotifier; + User::LeaveIfError( iNotifier.Connect()); + iNotifier.StartNotifierAndGetResponse( iStatus, KEvtNotifierUidS60, bufPtr, iResponseBuffer ); + SetActive(); + + CleanupStack::Pop(); // writeStream + } + EVTUIDEBUG( "- CEvtNotifierHandler::StartEvtNotifierL" ); + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::RunL +// ----------------------------------------------------------------------------- +void CEvtNotifierHandler::RunL() + { + EVTUIDEBUG1( "+ CEvtNotifierHandler::RunL %d", iStatus.Int() ); + TEvtInfoNoteResult result = ECloseInfoNote; + switch( iStatus.Int() ) + { + case KErrNone: + { + TInt retVal = 0; + TLex8 lexer( iResponseBuffer ); + TInt error = lexer.Val( retVal ); + + EVTUIDEBUG1( "Event %d", retVal ); + switch( retVal ) + { + case EOpenTrigger: + { + result = EOpenTrigger; + break; + } + case EShowDetails: + { + result = EShowDetails; + break; + } + case ESnoozeTrigger: + { + result = ESnoozeTrigger; + break; + } + case ECloseInfoNote: + default: + { + result = ECloseInfoNote; + break; + } + } + // Complete the event note launching + iNotifierObserver.HandlerCompleteL( result, iEvent ); + break; + } + default: + { + if(iHandlerType == EHandlerNotifier) + { + iHandlerType = EHandlerGlobalNote; + iStatus = KRequestPending; + if(iEvtGlobalQuery) + { + delete iEvtGlobalQuery; + iEvtGlobalQuery = NULL; + } + iEvtGlobalQuery = CEvtGlobalQuery::NewL(*iInputParam); + iEvtGlobalQuery->StartGlobalQueryL( iStatus, iResponseBuffer ); + SetActive(); + } + else + { + // Complete the event note launching + iNotifierObserver.HandlerCompleteL( result, iEvent ); + } + break; + } + } + + EVTUIDEBUG( "- CEvtNotifierHandler::RunL" ); + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::DoCancel +// ----------------------------------------------------------------------------- +void CEvtNotifierHandler::DoCancel() + { + EVTUIDEBUG( "+ CEvtNotifierHandler::DoCancel()" ); + if(iHandlerType == EHandlerNotifier) + { + iNotifier.CancelNotifier( KEvtNotifierUidS60 ); + } + else + { + iEvtGlobalQuery->CancelDialog(); + } + EVTUIDEBUG( "- CEvtNotifierHandler::DoCancel()" ); + } + +// ----------------------------------------------------------------------------- +// CEvtNotifierHandler::RunError +// ----------------------------------------------------------------------------- +TInt CEvtNotifierHandler::RunError( TInt /*aError*/ ) + { + return KErrNone; + } + +// End of File