vtuis/videotelui/src/features/volume/cvtuivolumecontrol.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:12 +0100
branchRCL_3
changeset 35 779871d1e4f4
parent 0 ed9695c8bcbe
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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