diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/viewersrc/UniMmsSvkEvents.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/mmsui/viewersrc/UniMmsSvkEvents.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2005-2006 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: +* Class which implements handling Side Volume Key events (SVK). +* This class implements methods of MRemConCoreApiTargetObserver +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include // KAknStandardKeyboardRepeatRate + +#include "UniMmsSvkEvents.h" + + +// CONSTANTS +const TInt KVolumeFirstChangePeriod = KAknStandardKeyboardRepeatRate; +const TInt KVolumeChangePeriod = KAknStandardKeyboardRepeatRate; +const TInt KVolumeChangeUp = 1; +const TInt KVolumeChangeDown = -1; + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CMmsSvkEvents +// ---------------------------------------------------------------------------- +// +CMmsSvkEvents* CMmsSvkEvents::NewL( MMmsSvkEventsObserver& aObserver ) + { + CMmsSvkEvents* self = + new ( ELeave ) CMmsSvkEvents( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CMmsSvkEvents +// ---------------------------------------------------------------------------- +// +CMmsSvkEvents::CMmsSvkEvents( MMmsSvkEventsObserver& aObserver ) : + iObserver( aObserver ) + { + } + + +// ---------------------------------------------------------------------------- +// CMmsSvkEvents::~CMmsSvkEvents +// ---------------------------------------------------------------------------- +// +CMmsSvkEvents::~CMmsSvkEvents() + { + if ( iVolumeTimer ) + { + iVolumeTimer->Cancel(); + delete iVolumeTimer; + } + + delete iInterfaceSelector; + iCoreTarget = NULL; // For LINT. Owned by iInterfaceSelector + } + +// ---------------------------------------------------------------------------- +// ConstructL +// ---------------------------------------------------------------------------- +// +void CMmsSvkEvents::ConstructL( ) + { + iInterfaceSelector = CRemConInterfaceSelector::NewL(); + + // owned by iInterfaceSelector + iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this ); + + iInterfaceSelector->OpenTargetL(); + + // Remote control server command repeat timer. + iVolumeTimer = CPeriodic::NewL( EPriorityNormal ); + } + +// ---------------------------------------------------------------------------- +// CMmsSvkEvents::MrccatoCommand +// Handles side volume key events. +// ---------------------------------------------------------------------------- +// +void CMmsSvkEvents::MrccatoCommand( TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ) + { + TRequestStatus stat; + switch ( aOperationId ) + { + case ERemConCoreApiVolumeUp: // Volume Up + { + switch ( aButtonAct ) + { + case ERemConCoreApiButtonPress: + { + // Volume up hold down for 0,6 seconds + DoChangeVolume( ); + iVolumeTimer->Cancel(); + iVolumeTimer->Start( KVolumeFirstChangePeriod, + KVolumeChangePeriod, + TCallBack( ChangeVolume, this ) ); + break; + } + case ERemConCoreApiButtonRelease: + { + iVolumeTimer->Cancel(); + break; + } + case ERemConCoreApiButtonClick: + { + // Volume up clicked + iChange = KVolumeChangeUp; + DoChangeVolume( ); + break; + } + default: + { + // Never hits this + break; + } + } + iCoreTarget->VolumeUpResponse(stat, KErrNone); + break; + } + case ERemConCoreApiVolumeDown: // Volume Down + { + switch ( aButtonAct ) + { + case ERemConCoreApiButtonPress: + { + // Volume down hold for 0,6 seconds + DoChangeVolume( ); + iVolumeTimer->Cancel(); + iVolumeTimer->Start( KVolumeFirstChangePeriod, + KVolumeChangePeriod, + TCallBack( ChangeVolume, this ) ); + break; + } + case ERemConCoreApiButtonRelease: + { + iVolumeTimer->Cancel(); + break; + } + case ERemConCoreApiButtonClick: + { + // Volume down clicked + iChange = KVolumeChangeDown; + DoChangeVolume( ); + break; + } + default: + { + // Never hits this + break; + } + } + iCoreTarget->VolumeDownResponse(stat, KErrNone); + break; + } + default : + { + iCoreTarget->SendResponse( stat, aOperationId, KErrNone ); + break; + } + } + + User::WaitForRequest( stat ); + } + +// ---------------------------------------------------------------------------- +// ChangeVolumeL +// +// ---------------------------------------------------------------------------- +// +void CMmsSvkEvents::DoChangeVolume( ) + { + TRAP_IGNORE( iObserver.MmsSvkChangeVolumeL( iChange ) ); + } + +// ---------------------------------------------------------------------------- +// ChangeVolume +// +// ---------------------------------------------------------------------------- +// +TInt CMmsSvkEvents::ChangeVolume( TAny* aObject ) + { + // cast, and call non-static function + static_cast( aObject )->DoChangeVolume( ); + return KErrNone; + } + +// End of File