utilities/mpmediacontroller/src/mpmediakeyhandler_p.cpp
changeset 47 4cc1412daed0
--- /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
+}
+