diff -r 6385c4c93049 -r 8e6fa1719340 browserplugins/browseraudiovideoplugin/src/BavpHwKeyEvents.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserplugins/browseraudiovideoplugin/src/BavpHwKeyEvents.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -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 +#include +#include // 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( aObject )->DoChangeVolume( ); + return KErrNone; + } + +// End of File + +