diff -r 000000000000 -r 5f000ab63145 phoneapp/phoneuicontrol/src/cphoneremotecontrolhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuicontrol/src/cphoneremotecontrolhandler.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,194 @@ +/* +* Copyright (c) 2002 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: CPhoneRemoteControlHandler implementation. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include "cphoneremotecontrolhandler.h" +#include "phoneconstants.h" +#include "phonelogger.h" + +// ================= MEMBER FUNCTIONS ======================= + +CPhoneRemoteControlHandler::CPhoneRemoteControlHandler( + MPhoneStateMachine* aStateMachine ) : + iStateMachine( aStateMachine ) + { + } + +// ----------------------------------------------------------- +// CPhoneRemoteControlHandler::ConstructL() +// Constructor +// (other items were commented in a header). +// ----------------------------------------------------------- +// +void CPhoneRemoteControlHandler::ConstructL() + { + iInterfaceSelector = CRemConInterfaceSelector::NewL(); + + iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this ); + + iPhoneHandler = CPhoneHandler::NewL( *iInterfaceSelector ); + + iInterfaceSelector->OpenTargetL(); + + iButtonRepeatTimer = CPeriodic::NewL( CActive::EPriorityHigh ); + } + +// ----------------------------------------------------------- +// CPhoneRemoteControlHandler::NewL() +// Constructor +// (other items were commented in a header). +// ----------------------------------------------------------- +// +CPhoneRemoteControlHandler* CPhoneRemoteControlHandler::NewL( + MPhoneStateMachine* aStateMachine ) + { + CPhoneRemoteControlHandler* self = + new (ELeave) CPhoneRemoteControlHandler( aStateMachine ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CPhoneRemoteControlHandler::~CPhoneRemoteControlHandler +// ----------------------------------------------------------------------------- +// +CPhoneRemoteControlHandler::~CPhoneRemoteControlHandler() + { + delete iInterfaceSelector; // it intern deletes iCoreTarget + + if(iButtonRepeatTimer) + { + if( iButtonRepeatTimer->IsActive() ) + { + iButtonRepeatTimer->Cancel(); + } + delete iButtonRepeatTimer; + } + + delete iPhoneHandler; + } + +// ----------------------------------------------------------------------------- +// CPhoneRemoteControlHandler::MrccatoCommand +// +// A command has been received. +// ----------------------------------------------------------------------------- +// +void CPhoneRemoteControlHandler::MrccatoCommand( + TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ) + { + __PHONELOG2( EBasic, EPhoneControl, "CPhoneRemoteControlHandler::MrccatoCommand - aOperationId(%d) aButtonAct(%d)", + aOperationId, aButtonAct ); + // Save the current command parameters + iOperationId = aOperationId; + iButtonAct = aButtonAct; + + TBool handled = EFalse; + + // Act on the button + switch ( aButtonAct ) + { + case ERemConCoreApiButtonClick: + { + // Pass the remote control operation to the current state + TRAP_IGNORE( handled = + iStateMachine->State()-> + HandleRemConCommandL( aOperationId, aButtonAct ) ); + break; + } + case ERemConCoreApiButtonPress: + { + // Pass the remote control operation to the current state + TRAP_IGNORE( handled = + iStateMachine->State()-> + HandleRemConCommandL( aOperationId, aButtonAct ) ); + // Start the button repeat timer + if( iButtonRepeatTimer->IsActive() ) + { + iButtonRepeatTimer->Cancel(); + } + iButtonRepeatTimer->Start( + KPhoneButtonRepeatDelay, + KPhoneButtonRepeatDelay, + TCallBack( DoHandleButtonRepeat, this ) ); + break; + } + case ERemConCoreApiButtonRelease: + { + // Cancel the button repeat timer + if( iButtonRepeatTimer->IsActive() ) + { + iButtonRepeatTimer->Cancel(); + } + break; + } + default: + break; + } + + // send a response if the operation was handled + if ( handled ) + { + TRequestStatus status; + + switch ( aOperationId ) + { + case ERemConCoreApiVolumeUp: + iCoreTarget->VolumeDownResponse( status, KErrNone ); + User::WaitForRequest( status ); + break; + + case ERemConCoreApiVolumeDown: + iCoreTarget->VolumeUpResponse( status, KErrNone ); + User::WaitForRequest( status ); + break; + + default: + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRemoteControlHandler::DoHandleButtonRepeat +// ----------------------------------------------------------------------------- +// +TInt CPhoneRemoteControlHandler::DoHandleButtonRepeat( TAny* aAny ) + { + CPhoneRemoteControlHandler* self = + reinterpret_cast( aAny ); + + __PHONELOG2( EBasic, EPhoneControl, "CPhoneRemoteControlHandler::DoHandleButtonRepeat iOperationId(%d) iButtonAct(%d)", + self->iOperationId, self->iButtonAct ); + // Pass the remote control operation to the current state + TRAP_IGNORE( self->iStateMachine->State()-> + HandleRemConCommandL( self->iOperationId, + self->iButtonAct ) ); + + return KErrNone; + } + +// End of File