diff -r 000000000000 -r f979ecb2b13e alarmui/src/alarmremconeventshandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/alarmui/src/alarmremconeventshandler.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,380 @@ +/* +* Copyright (c) 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: This class takes care of accessory events that should be +* handled in alarm. I.e. stopping alarm using accessory end key. +* +*/ + + + +#include "alarmremconeventshandler.h" + +#include "AlmAlarmControl.h" +#include +#include +#include + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +CAlarmRemConEventsHandler* CAlarmRemConEventsHandler::NewL(CAlmAlarmControl& aAlarmUI) + { + TRACE_ENTRY_POINT; + CAlarmRemConEventsHandler* self = new( ELeave )CAlarmRemConEventsHandler( aAlarmUI ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + TRACE_EXIT_POINT; + return self; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +CAlarmRemConEventsHandler::~CAlarmRemConEventsHandler() + { + TRACE_ENTRY_POINT; + // cancel the AO and delete all data + Cancel(); + Cleanup(); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// from base class CActive +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::DoCancel() + { + TRACE_ENTRY_POINT; + Cleanup(); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// from base class CActive +// --------------------------------------------------------------------------- +// +TInt CAlarmRemConEventsHandler::RunError(TInt /*aError*/) + { + TRACE_ENTRY_POINT; + Cleanup(); + TRACE_EXIT_POINT; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// from base class CActive +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::RunL() + { + TRACE_ENTRY_POINT; + TBool sendResponse( EFalse ); + + switch( iState ) + { + case EStateIdle: + case EStateWaitingCommand: + // do nothing + break; + + case EStateHandleEndCallCommand: + { + // stop the alarm after sending the response + iState = EStateStopAlarm; + sendResponse = ETrue; + } + break; + + case EStateIgnoreCommand: + { + // command was ignored, keep waiting for more commands + iState = EStateWaitingCommand; + sendResponse = ETrue; + } + break; + + case EStateStopAlarm: + { + // stop the alarm and keep waiting for more commands + iState = EStateWaitingCommand; + iAlarmUI.ExternalStopAlarm(); + } + break; + + default: + { + ASSERT( EFalse ); + } + } + + if( sendResponse ) + { + // send the response + TInt status = iStatus.Int(); + SetActive(); + iRemConCallHandlingTarget->SendResponse( iStatus, iRemConOperationID, status ); + } + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::EndCall() + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtEndCall ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::AnswerEndCall() + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtAnswerEnd ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::AnswerCall() + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtAnswerCall ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::VoiceDial(const TBool /*aActivate*/) + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtVoiceDial ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::LastNumberRedial() + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtLastNumberRedial ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::DialCall(const TDesC8& /*aTelNumber*/) + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtDialCall ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::MultipartyCalling(const TDesC8& /*aData*/) + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExt3WaysCalling ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::GenerateDTMF(const TChar /*aChar*/) + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtGenerateDTMF ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// From MRemConCallHandlingTargetObserver. +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::SpeedDial(const TInt /*aIndex*/) + { + TRACE_ENTRY_POINT; + HandleRemConCommand( ERemConExtSpeedDial ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CAlarmRemConEventsHandler::CAlarmRemConEventsHandler(CAlmAlarmControl& aAlarmUI) +: CActive( CActive::EPriorityStandard ), + iState( EStateIdle ), + iRemConOperationID( -1 ), + iAlarmUI( aAlarmUI ) + { + TRACE_ENTRY_POINT; + /** no implementation **/ + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::ConstructL() + { + TRACE_ENTRY_POINT; + CActiveScheduler::Add( this ); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::HandleRemConCommand(TInt aCommand) + { + TRACE_ENTRY_POINT; + ASSERT( iState == EStateWaitingCommand && IsAdded() && !IsActive() ); + + // there shouldn't be new commands while we're still handling the previous one + if( iState == EStateWaitingCommand ) + { + iRemConOperationID = aCommand; + + switch( iRemConOperationID ) + { + case ERemConExtEndCall: + case ERemConExtAnswerEnd: + // handle message (stop the alarm) + iState = EStateHandleEndCallCommand; + break; + + case ERemConExtAnswerCall: + case ERemConExtVoiceDial: + case ERemConExtLastNumberRedial: + case ERemConExtDialCall: + case ERemConExt3WaysCalling: + case ERemConExtGenerateDTMF: + case ERemConExtSpeedDial: + // no event handling...just send the response + iState = EStateIgnoreCommand; + break; + + default: + ASSERT( EFalse ); + } + // start the AO + CompleteSelf(); + } + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::CompleteSelf() + { + TRACE_ENTRY_POINT; + TRequestStatus* pStat = &iStatus; + User::RequestComplete( pStat, KErrNone ); + + if( IsAdded() && !IsActive() ) + { + SetActive(); + } + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::StartL() + { + TRACE_ENTRY_POINT; + if( !iRemConInterfaceSelector && !iRemConCallHandlingTarget ) + { + // create the RemCon interface selector + CRemConInterfaceSelector* selector = CRemConInterfaceSelector::NewL(); + CleanupStack::PushL( selector ); + + // create the RemCon target + CRemConCallHandlingTarget* target = CRemConCallHandlingTarget::NewL( *selector, *this ); + CleanupStack::PushL( target ); + + // open a target session to RemCon + selector->OpenTargetL(); + CleanupStack::Pop( 2, selector ); + + // RemCon initialisation ok + iRemConCallHandlingTarget = target; + iRemConInterfaceSelector = selector; + + iState = EStateWaitingCommand; + } + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::Stop() + { + TRACE_ENTRY_POINT; + Cancel(); + Cleanup(); + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CAlarmRemConEventsHandler::Cleanup() + { + TRACE_ENTRY_POINT; + iState = EStateIdle; + iRemConOperationID = -1; + iRemConCallHandlingTarget = NULL; // owned by iRemConInterfaceSelector + delete iRemConInterfaceSelector; + iRemConInterfaceSelector = NULL; + TRACE_EXIT_POINT; + } + + +// End of File