--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpHwKeyEvents.cpp Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Class which implements handling Hardware Volume Key events.
+* This class implements methods of MRemConCoreApiTargetObserver
+*
+*/
+
+
+// INCLUDE FILES
+#include <RemConCoreApiTarget.h>
+#include <remconinterfaceselector.h>
+#include <aknconsts.h> // KAknStandardKeyboardRepeatRate
+
+#include "BavpHwKeyEvents.h"
+#include "BavpLogger.h"
+
+// CONSTANTS
+const TInt KVolumeFirstChangePeriod = KAknKeyboardRepeatInitialDelay;
+const TInt KVolumeChangePeriod = KAknStandardKeyboardRepeatRate;
+const TInt KVolumeChangeUp = 1;
+const TInt KVolumeChangeDown = -1;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBavpHwKeyEvents::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CBavpHwKeyEvents* CBavpHwKeyEvents::NewL( MBavpHwKeyEventsObserver& aObserver )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::NewL") );
+
+ CBavpHwKeyEvents* self = new ( ELeave ) CBavpHwKeyEvents( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::~CBavpHwKeyEvents
+// Destructor
+// ----------------------------------------------------------------------------
+CBavpHwKeyEvents::~CBavpHwKeyEvents()
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::~CBavpHwKeyEvents") );
+
+ if ( iVolumeTimer )
+ {
+ iVolumeTimer->Cancel();
+ delete iVolumeTimer;
+ }
+
+ delete iInterfaceSelector;
+ iCoreTarget = NULL; // For LINT. Owned by iInterfaceSelector
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::CBavpHwKeyEvents
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CBavpHwKeyEvents::CBavpHwKeyEvents( MBavpHwKeyEventsObserver& aObserver )
+ : iObserver( aObserver )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpHwKeyEvents::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpHwKeyEvents::ConstructL( )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::ConstructL") );
+
+ iInterfaceSelector = CRemConInterfaceSelector::NewL();
+
+ // Owned by iInterfaceSelector
+ iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
+ iInterfaceSelector->OpenTargetL();
+
+ // Volume key pressed and held (repeat) timer.
+ iVolumeTimer = CPeriodic::NewL( EPriorityNormal );
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::MrccatoCommand
+// Handles hardware key events. The volume up/down keys can be clicked once,
+// for volume to increase/decrease one increment, or held down and the volume
+// will increase/decrease gradually until the limit is reached. The transport
+// keys (play, pause,..) will call the HandleCommandL method on the controller.
+// ----------------------------------------------------------------------------
+void CBavpHwKeyEvents::MrccatoCommand( TRemConCoreApiOperationId aOperationId,
+ TRemConCoreApiButtonAction aButtonAct )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::MrccatoCommand, OpID"), aOperationId );
+
+ switch ( aOperationId )
+ {
+ case ERemConCoreApiVolumeUp:
+ {
+ switch ( aButtonAct )
+ {
+ case ERemConCoreApiButtonPress:
+ {
+ // Volume up held down for 0.6 seconds
+ iChange = KVolumeChangeUp;
+ iVolumeTimer->Start( KVolumeFirstChangePeriod,
+ KVolumeChangePeriod,
+ TCallBack( VolumeTimerCallback, this ) );
+ break;
+ }
+ case ERemConCoreApiButtonClick:
+ {
+ // Volume up clicked once
+ iChange = KVolumeChangeUp;
+ DoChangeVolume();
+ break;
+ }
+ case ERemConCoreApiButtonRelease:
+ {
+ // Volume up key released, stop timer
+ iVolumeTimer->Cancel();
+ break;
+ }
+ default:
+ {
+ // Never hits this
+ break;
+ }
+ }
+ break;
+ }
+ case ERemConCoreApiVolumeDown:
+ {
+ switch ( aButtonAct )
+ {
+ case ERemConCoreApiButtonPress:
+ {
+ // Volume down key held for 0.6 seconds
+ iChange = KVolumeChangeDown;
+ iVolumeTimer->Start( KVolumeFirstChangePeriod,
+ KVolumeChangePeriod,
+ TCallBack( VolumeTimerCallback, this ) );
+ break;
+ }
+ case ERemConCoreApiButtonClick:
+ {
+ // Volume down clicked once
+ iChange = KVolumeChangeDown;
+ DoChangeVolume();
+ break;
+ }
+ case ERemConCoreApiButtonRelease:
+ {
+ // Volume down key released, stop timer
+ iVolumeTimer->Cancel();
+ break;
+ }
+ default:
+ {
+ // Never hits this
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ // Don’t do anything here.
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::DoChangeVolume( )
+// Change volume depending on the level of increase or decrease
+// ----------------------------------------------------------------------------
+void CBavpHwKeyEvents::DoChangeVolume( )
+ {
+ Log( EFalse, _L("CBavpHwKeyEvents::DoChangeVolume") );
+
+ iObserver.BavpHwKeyVolumeChange( iChange );
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpHwKeyEvents::ChangeVolume
+// Method call to change volume
+// ----------------------------------------------------------------------------
+TInt CBavpHwKeyEvents::VolumeTimerCallback( TAny* aObject )
+ {
+ // cast, and call non-static function
+ static_cast<CBavpHwKeyEvents*>( aObject )->DoChangeVolume( );
+ return KErrNone;
+ }
+
+// End of File
+
+