--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamVolumeKeyObserver.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,358 @@
+/*
+* Copyright (c) 2007-2008 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: Receives buton presses from volume keys*
+*/
+
+
+// INCLUDE FILES
+
+#include "CamVolumeKeyObserver.h"
+#include <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+#include "CamUtility.h"
+#include "CamAppUi.h"
+#include "CamZoomPane.h"
+#include <AknDef.h>
+#include <aknconsts.h>
+
+
+
+/**
+* Helper class for sending response back to
+* Remote Controller Framework
+*
+* @since 3.1
+*/
+class CCamRemConKeyResponse : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * aparam Remote Controller instance
+ * @return new instance.
+ */
+ static CCamRemConKeyResponse* NewL( CRemConCoreApiTarget&
+ aRemConCoreApiTarget );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCamRemConKeyResponse();
+
+ public: // new function
+
+ /**
+ * Send the any key response back to Remcon server
+ * @since 3.1
+ * @param aOperationId Remcon operation
+ */
+ void CompleteAnyKeyL( TRemConCoreApiOperationId aOperationId );
+
+ private: //from base class
+
+ /**
+ * From CActive
+ * Called on completion of a request
+ * @since 3.1
+ */
+ void RunL();
+
+ /**
+ * From CActive
+ * Cancels an outstanding request
+ * @since 3.1
+ */
+ void DoCancel();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ * @since 3.1
+ * aparam Remote Controller instance
+ */
+ CCamRemConKeyResponse( CRemConCoreApiTarget& aRemConCoreApiTarget );
+
+ private:
+
+ // Response array
+ RArray<TRemConCoreApiOperationId> iResponseArray;
+
+ // Remote controller
+ CRemConCoreApiTarget& iRemConCoreApiTarget;
+ };
+
+
+// -----------------------------------------------------------------------------
+// CCamRemConKeyResponse::CCamRemConKeyResponse
+// default C++ constructor
+// -----------------------------------------------------------------------------
+//
+CCamRemConKeyResponse::CCamRemConKeyResponse( CRemConCoreApiTarget&
+ aRemConCoreApiTarget )
+ : CActive ( EPriorityNormal ),
+ iRemConCoreApiTarget ( aRemConCoreApiTarget )
+
+ {
+ CActiveScheduler::Add( this );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCamRemConKeyResponse::NewL
+// -----------------------------------------------------------------------------
+//
+CCamRemConKeyResponse* CCamRemConKeyResponse::NewL(CRemConCoreApiTarget&
+ aRemConCoreApiTarget)
+ {
+ CCamRemConKeyResponse* self =
+ new (ELeave) CCamRemConKeyResponse( aRemConCoreApiTarget );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CCamRemConKeyResponse::~CCamRemConKeyResponse
+// -----------------------------------------------------------------------------
+//
+CCamRemConKeyResponse::~CCamRemConKeyResponse()
+ {
+ PRINT( _L("Camera => ~CCamRemConKeyResponse::~CCamRemConKeyResponse"))
+ Cancel();
+ PRINT( _L("Camera => ~CCamRemConKeyResponse::~CCamRemConKeyResponse B"))
+ iResponseArray.Reset();
+ PRINT( _L("Camera => ~CCamRemConKeyResponse::~CCamRemConKeyResponse C"))
+ iResponseArray.Close();
+ PRINT( _L("Camera <= ~CCamRemConKeyResponse::~CCamRemConKeyResponse"))
+ }
+
+// -----------------------------------------------------------------------------
+// CCamRemConKeyResponse::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CCamRemConKeyResponse::DoCancel()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCamRemConKeyResponse::RunL
+// -----------------------------------------------------------------------------
+//
+void CCamRemConKeyResponse::RunL()
+ {
+ // if any existing -> Send response
+ if ( iResponseArray.Count() )
+ {
+ CompleteAnyKeyL( iResponseArray[0] );
+ // Remove already completed key
+ iResponseArray.Remove(0);
+ iResponseArray.Compress();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCamConKeyResponse::CompleteAnyKeyL
+// -----------------------------------------------------------------------------
+//
+void CCamRemConKeyResponse::CompleteAnyKeyL( TRemConCoreApiOperationId
+ aOperationId )
+ {
+ PRINT(_L("Camera => CCamRemConKeyResponse::CompleteAnyKeyL"))
+ if ( !IsActive() )
+ {
+ switch ( aOperationId )
+ {
+ case ERemConCoreApiVolumeUp:
+ {
+ PRINT( _L("CCamRemConKeyResponse::CompleteAnyKeyL operation volume up") );
+ iRemConCoreApiTarget.VolumeUpResponse( iStatus, KErrNone );
+ SetActive();
+ }
+ break;
+ case ERemConCoreApiVolumeDown:
+ {
+ PRINT( _L("CCamRemConKeyResponse::CompleteAnyKeyL operation volume down") );
+ iRemConCoreApiTarget.VolumeDownResponse( iStatus, KErrNone );
+ SetActive();
+ }
+ break;
+ default:
+ {
+ PRINT( _L("CCamRemConKeyResponse::CompleteAnyKeyL operation - other operation") );
+ // Send general response for 'other' keys
+ iRemConCoreApiTarget.SendResponse( iStatus, aOperationId, KErrNone );
+ SetActive();
+ }
+ break;
+ }
+ }
+ // already active. Append to array and complete later.
+ else
+ {
+ User::LeaveIfError( iResponseArray.Append( aOperationId ) );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCamRemConObserver::NewL
+// -----------------------------------------------------------------------------
+//
+CCamRemConObserver* CCamRemConObserver::NewL( MCamVolumeKeyObserver &aObserver )
+ {
+ CCamRemConObserver* self = new ( ELeave ) CCamRemConObserver( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::~CPhoneRemConObserver
+// destructor
+// -----------------------------------------------------------------------------
+//
+CCamRemConObserver::~CCamRemConObserver()
+ {
+ PRINT( _L("Camera => CCamRemConObserver::~CCamRemConObserver"))
+ delete iActiveRemCon;
+
+ delete iInterfaceSelector;
+
+ PRINT( _L("Camera <= CCamRemConObserver::~CCamRemConObserver"))
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::CPhoneRemConObserver
+// C++ default constructor
+// -----------------------------------------------------------------------------
+//
+CCamRemConObserver::CCamRemConObserver( MCamVolumeKeyObserver& aObserver ):
+ iObserver ( aObserver )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::ConstructL
+// Symbian 2nd phase constructor
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::ConstructL()
+ {
+ iInterfaceSelector = CRemConInterfaceSelector::NewL();
+
+ // owned by CRemConInterfaceSelector instance
+ iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
+
+ iActiveRemCon = CCamRemConKeyResponse::NewL( *iCoreTarget );
+
+ iInterfaceSelector->OpenTargetL();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::MrccatoCommand
+// A command has been received.
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::MrccatoCommand(
+ TRemConCoreApiOperationId aOperationId,
+ TRemConCoreApiButtonAction aButtonAct )
+ {
+ PRINT2( _L("Camera => CCamRemConObserver::MrccatoCommand op (%d) act (%d)"), aOperationId, aButtonAct )
+ switch ( aOperationId )
+ {
+ case ERemConCoreApiVolumeUp:
+ {
+ // send the response back to Remcon server
+ TRAP_IGNORE( iActiveRemCon->CompleteAnyKeyL( aOperationId ) );
+
+ // send button press to zoom pane
+ iObserver.HandleVolumeKeyEvent( aOperationId, aButtonAct );
+ }
+ break;
+ case ERemConCoreApiVolumeDown:
+ {
+ TRAP_IGNORE( iActiveRemCon->CompleteAnyKeyL( aOperationId ) );
+ iObserver.HandleVolumeKeyEvent( aOperationId, aButtonAct );
+ }
+ break;
+ default:
+ {
+ // Complete any other operation id
+ TRAP_IGNORE( iActiveRemCon->CompleteAnyKeyL( aOperationId ) );
+ }
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::MrccatoPlay
+// not used
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::MrccatoPlay( TRemConCoreApiPlaybackSpeed /*aSpeed*/,
+ TRemConCoreApiButtonAction /*aButtonAct*/ )
+ {
+ // not used
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::MrccatoTuneFunction
+// not used
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::MrccatoTuneFunction( TBool /*aTwoPart*/,
+ TUint /*aMajorChannel*/,
+ TUint /*aMinorChannel*/,
+ TRemConCoreApiButtonAction /*aButtonAct*/ )
+ {
+ // not used
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::MrccatoSelectDiskFunction
+// not used
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::MrccatoSelectDiskFunction( TUint /*aDisk*/,
+ TRemConCoreApiButtonAction /*aButtonAct*/ )
+ {
+ // not used
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::MrccatoSelectAvInputFunction
+// not used
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::MrccatoSelectAvInputFunction( TUint8 /*aAvInputSignalNumber*/,
+ TRemConCoreApiButtonAction /*aButtonAct*/ )
+ {
+ // not used
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneRemConObserver::MrccatoSelectAudioInputFunction
+// not used
+// -----------------------------------------------------------------------------
+//
+void CCamRemConObserver::MrccatoSelectAudioInputFunction( TUint8 /*aAudioInputSignalNumber*/,
+ TRemConCoreApiButtonAction /*aButtonAct*/ )
+ {
+ // not used
+ }
+
+// End of File