--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/src/mpmediakeyhandler_p.cpp Fri Aug 06 16:51:36 2010 -0500
@@ -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 <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+
+#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
+}
+