vtuis/videotelui/src/features/volume/cvtuivolumecontrol.cpp
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/features/volume/cvtuivolumecontrol.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 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:  Implementation of the cvtuivolumecontrol class.
+*
+*/
+
+
+#include    "cvtuivolumecontrol.h"
+#include    "MVtUiEngineCommandManager.h"
+#include    <mvtengcommandhandler.h>
+#include    <cvtlogger.h>
+#include    "cvtuivolume.h"
+#include    "cvtuifeaturemanager.h"
+
+// -----------------------------------------------------------------------------
+// CVtUiVolumeControl::CVtUiVolumeControl
+// -----------------------------------------------------------------------------
+//
+CVtUiVolumeControl::CVtUiVolumeControl(
+        MVtEngCommandHandler& aCommandHandler,
+        MVtEngAudio& aAudio,
+        MVtUiEngineCommandManager& aCommandManager,
+        CVtUiFeatureManager& aFeatureManager )
+    :  iCommandHandler( aCommandHandler ),
+      iAudio( aAudio ),
+      iCommandManager( aCommandManager ),
+      iVolumePtr( (TUint8*)&iVolume, sizeof( TVolume ) ),
+      iFeatureManager( aFeatureManager )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiVolumeControl::~CVtUiVolumeControl
+// -----------------------------------------------------------------------------
+//
+CVtUiVolumeControl::~CVtUiVolumeControl()
+    {
+    if ( iIsActive )
+        {
+        iCommandHandler.CancelCommand( KVtEngSetAudioVolume ); // ignore error
+        }
+    iCommandManager.RemoveObserver( *this );               
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiVolumeControl::ExecuteDialogLD
+// -----------------------------------------------------------------------------
+//
+void CVtUiVolumeControl::ConstructL()
+    {
+    CleanupStack::PushL( this );
+    iCommandManager.AddObserverL( *this );
+    CleanupStack::Pop( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiVolumeControl::SetVoAdjustVolumeL
+// -----------------------------------------------------------------------------
+//
+void CVtUiVolumeControl::AdjustVolumeL( TVolume aVolume  )
+    {
+    __VTPRINTENTER( "VtUiVolCtrl.AdjustVolumeL")
+    if ( iIsActive )
+        {
+        __VTPRINTENTER( "VtUiVolCtrl.AdjustVolumeL.Isactive")
+        return;
+        }
+    iIsActive = ETrue;         
+    iVolume = aVolume;
+    iCommandHandler.ExecuteL( KVtEngSetAudioVolume, &iVolumePtr );
+    __VTPRINTEXIT( "VtUiVolCtrl.AdjustVolumeL")
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiVolumeControl::HandleVTCommandPerformedL
+// -----------------------------------------------------------------------------
+//
+void CVtUiVolumeControl::HandleVTCommandPerformedL(
+        TVtEngCommandId aCommand,
+        const TInt aError )
+    {
+    __VTPRINTENTER( "VtUiVolCtrl.HandleVTCommandPerformedL")
+    if ( aCommand == KVtEngSetAudioVolume )
+        {
+        __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.perf" )
+        TInt error = aError;
+        // If volume has been changed, then try to set volume again.
+        //iIsActive = ETrue;
+        if ( IsVolumeChangedL() )
+            {
+            __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.retry" )
+            TRAP( error,
+               iCommandHandler.ExecuteL(
+                   KVtEngSetAudioVolume,
+                   &iVolumePtr ) );
+            __VTPRINT2( DEBUG_GEN, "VtUiVolCtrl.err.%d", error )
+            iIsActive = ( error == KErrNone );
+            }
+        else
+            {
+             __VTPRINT( DEBUG_GEN,
+              "VtUiVolCtrl.HandleVTCommandPerformedL iIsActive = EFalse; " )
+            iIsActive = EFalse; 
+            }            
+      
+        }
+    __VTPRINTEXIT( "VtUiVolCtrl.HandleVTCommandPerformedL")        
+    }
+
+// -----------------------------------------------------------------------------
+// CVtUiVolumeControl::IsVolumeChangedL
+// -----------------------------------------------------------------------------
+//
+TBool CVtUiVolumeControl::IsVolumeChangedL()
+    {
+    __VTPRINTENTER( "VtUiVolCtrl.IsVolumeChangedL" )
+    MVtEngAudio::TAudioRoutingState audioRouting;
+    User::LeaveIfError( iAudio.GetRoutingState( audioRouting ) );
+    const TInt volume( iAudio.OutputVolume(
+        !( audioRouting == MVtEngAudio::EAudioLoudspeaker ) ) );
+     
+    CVtUiVolume* vp = static_cast< CVtUiVolume* >(
+    iFeatureManager.GetFeatureById( EVtUiFeatureIdVolume ) );
+    TInt sliderVolume( volume );
+    if ( vp )
+        {
+        sliderVolume = vp->GetVolumeValue();
+        // update correct volume
+        if ( audioRouting == MVtEngAudio::EAudioLoudspeaker )
+            {
+            __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.IsVolumeChangedL.LS")
+            iVolume.iHandsfreeVolume = sliderVolume;
+            }
+        else
+            {
+            __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.IsVolumeChangedL.HS")
+            iVolume.iHandsetVolume = sliderVolume;
+            }
+        }
+        
+    __VTPRINT2( DEBUG_GEN, "VtUiVolCtrl.vol %d", volume )        
+    __VTPRINT2( DEBUG_GEN, "VtUiVolCtrl.slidvol %d", sliderVolume )
+    __VTPRINTEXITR( "VtUiVolCtrl.IsVolumeChangedL %d", sliderVolume == volume )    
+    return sliderVolume == volume ? EFalse : ETrue; 
+    }
+//  End of File