camerauis/cameraapp/generic/src/CamVolumeKeyObserver.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 0 1ddebce53859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamVolumeKeyObserver.cpp	Wed Sep 01 12:30:54 2010 +0100
@@ -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