mobilemessaging/mmsui/viewersrc/UniMmsSvkEvents.cpp
changeset 0 72b543305e3a
--- /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 <remconcoreapitarget.h>
+#include <remconcoreapitargetobserver.h>
+#include <remconinterfaceselector.h>
+#include <aknconsts.h>                      // 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<CMmsSvkEvents*>( aObject )->DoChangeVolume( );
+    return KErrNone;
+    }
+
+// End of File