diff -r 79c49924ae23 -r af3740e3753f utilities/mpmediacontroller/src/mpmediakeyhandler_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utilities/mpmediacontroller/src/mpmediakeyhandler_p.cpp Wed Aug 18 09:46:20 2010 +0300 @@ -0,0 +1,264 @@ +/* +* Copyright (c) 2009 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: Music Player media key handler - private implementation. +* +*/ + + +//symbian header files +#include +#include + +#include "mpmediakeyhandler_p.h" +#include "mpmediakeyhandler.h" +#include "mpmediakeyremconresponse.h" +#include "mpenginefactory.h" +#include "mpcommondefs.h" +#include "mptrace.h" + + +/*! + \internal + */ +MpMediaKeyHandlerPrivate::MpMediaKeyHandlerPrivate( MpMediaKeyHandler *wrapper ) + : q_ptr( wrapper ), + iInterfaceSelector(NULL), + iResponseHandler(NULL), + iMpEngine(NULL), + iSideKeyAlreadyClicked(false) +{ + TX_LOG +} + +/*! + \internal + */ +MpMediaKeyHandlerPrivate::~MpMediaKeyHandlerPrivate() +{ + TX_ENTRY + delete iResponseHandler; + delete iInterfaceSelector; + TX_EXIT +} + +/*! + \internal + */ +void MpMediaKeyHandlerPrivate::init() +{ + TX_ENTRY + TRAPD(err, DoInitL()); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT + +} + +/*! + From MRemConCoreApiTargetObserver + A command has been received. + */ +void MpMediaKeyHandlerPrivate::MrccatoCommand( + TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ) +{ + TX_ENTRY_ARGS( " aOperationId=" << aOperationId << " aButtonAct=" << aButtonAct ); + + switch ( aOperationId ) { + case ERemConCoreApiPausePlayFunction: + if ( aButtonAct == ERemConCoreApiButtonClick ) { + iMpEngine->playPause(); + } + break; + case ERemConCoreApiPlay: + if ( aButtonAct == ERemConCoreApiButtonClick + || aButtonAct == ERemConCoreApiButtonPress ) { + iMpEngine->play(); + } + break; + case ERemConCoreApiStop: + if ( aButtonAct == ERemConCoreApiButtonClick + || aButtonAct == ERemConCoreApiButtonPress ) { + iMpEngine->stop(); + } + break; + case ERemConCoreApiPause: + if ( aButtonAct == ERemConCoreApiButtonClick + || aButtonAct == ERemConCoreApiButtonPress ) { + iMpEngine->pause(); + } + break; + case ERemConCoreApiRewind: + switch ( aButtonAct ) { + case ERemConCoreApiButtonPress: + iMpEngine->startSeekBackward(); + break; + case ERemConCoreApiButtonRelease: + iMpEngine->stopSeeking(); + break; + default: + break; + } + break; + case ERemConCoreApiFastForward: + switch ( aButtonAct ) { + case ERemConCoreApiButtonPress: + iMpEngine->startSeekForward(); + break; + case ERemConCoreApiButtonRelease: + iMpEngine->stopSeeking(); + break; + default: + break; + } + break; + case ERemConCoreApiBackward: + if ( aButtonAct == ERemConCoreApiButtonClick ) { + iMpEngine->skipBackward(); + } + break; + case ERemConCoreApiForward: + if ( aButtonAct == ERemConCoreApiButtonClick ) { + iMpEngine->skipForward(); + } + break; + // Pressing headset volume key only generates ButtonPress, however pressing and holding hardware side key + // generates ButtonClick and after a while ButtonPressed, we should make sure increase/decrease only once + case ERemConCoreApiVolumeUp: + if ( aButtonAct == ERemConCoreApiButtonClick || + ( aButtonAct == ERemConCoreApiButtonPress && !iSideKeyAlreadyClicked ) ) { + iSideKeyAlreadyClicked = true; + iMpEngine->increaseVolume(); + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) { + iSideKeyAlreadyClicked = false; + } + break; + case ERemConCoreApiVolumeDown: + if ( aButtonAct == ERemConCoreApiButtonClick || + ( aButtonAct == ERemConCoreApiButtonPress && !iSideKeyAlreadyClicked ) ) { + iSideKeyAlreadyClicked = true; + iMpEngine->decreaseVolume(); + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) { + iSideKeyAlreadyClicked = false; + } + break; + default: + break; + } + iResponseHandler->CompleteAnyKey( aOperationId ); + TX_EXIT +} + +/*! + From MRemConCoreApiTargetObserver + A 'play' command has been received. + */ +void MpMediaKeyHandlerPrivate::MrccatoPlay( + TRemConCoreApiPlaybackSpeed aSpeed, + TRemConCoreApiButtonAction aButtonAct ) +{ + TX_ENTRY_ARGS( "aButtonAct=" << aButtonAct ); + Q_UNUSED(aSpeed); + + if ( ( aButtonAct == ERemConCoreApiButtonClick ) || + ( aButtonAct == ERemConCoreApiButtonPress ) ) { + iMpEngine->play(); + } + iResponseHandler->CompleteAnyKey( ERemConCoreApiPlay ); + TX_EXIT +} + +/*! + From MRemConCoreApiTargetObserver + A 'tune function' command has been received. + */ +void MpMediaKeyHandlerPrivate::MrccatoTuneFunction( + TBool aTwoPart, + TUint aMajorChannel, + TUint aMinorChannel, + TRemConCoreApiButtonAction aButtonAct ) +{ + Q_UNUSED(aTwoPart); + Q_UNUSED(aMajorChannel); + Q_UNUSED(aMinorChannel); + Q_UNUSED(aButtonAct); + + iResponseHandler->CompleteAnyKey( ERemConCoreApiTuneFunction ); +} + +/*! + From MRemConCoreApiTargetObserver + A 'select disk function' has been received. + */ +void MpMediaKeyHandlerPrivate::MrccatoSelectDiskFunction( + TUint aDisk, + TRemConCoreApiButtonAction aButtonAct ) +{ + Q_UNUSED(aDisk); + Q_UNUSED(aButtonAct); + + iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectDiskFunction ); +} + +/*! + From MRemConCoreApiTargetObserver + A 'select AV input function' has been received. + */ +void MpMediaKeyHandlerPrivate::MrccatoSelectAvInputFunction( + TUint8 aAvInputSignalNumber, + TRemConCoreApiButtonAction aButtonAct ) +{ + Q_UNUSED(aAvInputSignalNumber); + Q_UNUSED(aButtonAct); + + iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectAvInputFunction ); + +} + +/*! + From MRemConCoreApiTargetObserver + A 'select audio input function' has been received. +*/ +void MpMediaKeyHandlerPrivate::MrccatoSelectAudioInputFunction( + TUint8 aAudioInputSignalNumber, + TRemConCoreApiButtonAction aButtonAct ) +{ + Q_UNUSED(aAudioInputSignalNumber); + Q_UNUSED(aButtonAct); + + iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectAudioInputFunction ); + +} + +/*! + \internal + */ +void MpMediaKeyHandlerPrivate::DoInitL() +{ + TX_ENTRY + // Register to remote control framework + iInterfaceSelector = CRemConInterfaceSelector::NewL(); + CRemConCoreApiTarget *coreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this ); + CleanupStack::PushL( coreTarget ); + iInterfaceSelector->OpenTargetL(); + iResponseHandler = MpMediaKeyRemConResponse::NewL( *coreTarget ); + CleanupStack::Pop(coreTarget); + + iMpEngine = MpEngineFactory::sharedEngine(); + TX_EXIT +} +