phonesrv_plat/call_information_api/tsrc/src/T_TelephonyAudioRouting.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:11:09 +0200
changeset 0 ff3b6d0fd310
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2009 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:
*
*/
// T_TelephonyAudioRouting.cpp

// INCLUDE FILES

#include "T_TelephonyAudioRouting.h"
#include "talogger.h"
#include "MTelephonyAudioRoutingObserver.h"


// -----------------------------------------------------------------------------
// CTelephonyAudioRouting::CTelephonyAudioRouting
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CStubTelephonyAudioRouting::CStubTelephonyAudioRouting( 
        MTelephonyAudioRoutingObserver& aObserver        
        ) : iObserver( aObserver ), iAvailableOutputsTArr(0, NULL, NULL)
    {    
    iOutput = CTelephonyAudioRouting::ENotActive;
    iPreviousOutput = CTelephonyAudioRouting::ENotActive;
    }


// -----------------------------------------------------------------------------
// CTelephonyAudioRouting::ConstructL
// Symbian OS default constructor may leave.
// -----------------------------------------------------------------------------
//
void CStubTelephonyAudioRouting::ConstructL()
    {    
    TEFLOGSTRING( KTAOBJECT, "T_AudioH CTelephonyAudioRouting::ConstructL()" );    
    
    iAudioRoutingObserverCallBack = CIdle::NewL( CActive::EPriorityHigh );
        
    //iAvailableOutputs = new (ELeave) CArrayFixFlat<CTelephonyAudioRouting::TAudioOutput>(5);   
    }


// -----------------------------------------------------------------------------
// CTelephonyAudioRouting::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CStubTelephonyAudioRouting* CStubTelephonyAudioRouting::NewL(
	MTelephonyAudioRoutingObserver& aObserver)
    {
    
    CStubTelephonyAudioRouting* telephonyAudioRouting;
    
    // Check thread local storage:
	if ( Dll::Tls() == NULL )
		{
		telephonyAudioRouting = new ( ELeave ) CStubTelephonyAudioRouting( aObserver );		
		CleanupStack::PushL( telephonyAudioRouting );
		telephonyAudioRouting->ConstructL();
		CleanupStack::Pop( telephonyAudioRouting );
	
		// Store a pointer to the new instance in thread local storage:
		TInt err = Dll::SetTls( static_cast<TAny*>( telephonyAudioRouting ) );
		if ( err == KErrNone )
			{
			return telephonyAudioRouting;
			}
		else
			{
			delete telephonyAudioRouting;
			User::Leave( err );
			return NULL;
			}
		}
	else // CStubTelephonyAudioRouting has been instantiated once already
		{		
		telephonyAudioRouting = static_cast<CStubTelephonyAudioRouting*>( Dll::Tls() );
		return telephonyAudioRouting;
		}
    }
    

// -----------------------------------------------------------------------------
// CTelephonyAudioRouting::NewL
// Two-phased constructor. Leaves if the class does not exist in TLS because 
// this version does not take observer as parameter.
// -----------------------------------------------------------------------------
//
CStubTelephonyAudioRouting* CStubTelephonyAudioRouting::NewL()
    {
    
    CStubTelephonyAudioRouting* telephonyAudioRouting;
    
    // Check thread local storage:
	if ( Dll::Tls() == NULL )
		{
		User::Leave( KErrNotFound );
		return NULL;		
		}
	else // CStubTelephonyAudioRouting has been instantiated once already
		{		
		telephonyAudioRouting = static_cast<CStubTelephonyAudioRouting*>( Dll::Tls() );
		return telephonyAudioRouting;
		}
    }    
    

CStubTelephonyAudioRouting::~CStubTelephonyAudioRouting()     
{

Dll::SetTls( NULL ) ;
iAvailableOutputs.Close();

delete iAudioRoutingObserverCallBack;      
}  
    
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//    
const TArray<CTelephonyAudioRouting::TAudioOutput>& CStubTelephonyAudioRouting::AvailableOutputs()
	{
	iAvailableOutputsTArr = iAvailableOutputs.Array();
	return iAvailableOutputsTArr;
	}
	
	
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//    
CTelephonyAudioRouting::TAudioOutput CStubTelephonyAudioRouting::Output()
{
	return iOutput;
}
	

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  	
void CStubTelephonyAudioRouting::SetOutputL( CTelephonyAudioRouting::TAudioOutput aOutput)
{
	iPreviousOutput = iOutput;
	iOutput = aOutput;
	
	/* if callback has not been called already */
	iAudioRoutingObserverCallBack->Cancel();
	
	//Todo: call observers SetOutputComplete() 
	iAudioRoutingObserverCallBack->Start( TCallBack( DoSetOutputComplete, this ) );
}


// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
TInt CStubTelephonyAudioRouting::DoSetOutputComplete( TAny* aAny )
{
	CStubTelephonyAudioRouting* self = 
        static_cast< CStubTelephonyAudioRouting* >( aAny );
    
   
    self->iObserver.SetOutputComplete( *self, KErrNone);   
    return KErrNone;	
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  	
void CStubTelephonyAudioRouting::CommitAvailableOutputsChanged()	
{
	iObserver.AvailableOutputsChanged( *this );   
	return;
}
	
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  	
CTelephonyAudioRouting::TAudioOutput CStubTelephonyAudioRouting::PreviousOutput()	
{
	return iPreviousOutput;
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
TInt CStubTelephonyAudioRouting::SetShowNote( TBool aMode )
{
	iShowNote = aMode;
	return 0;
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
TInt CStubTelephonyAudioRouting::GetShowNote( TBool& aMode )
{
	aMode = iShowNote;
	return 0;
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
MTelephonyAudioRoutingObserver& CStubTelephonyAudioRouting::AudioRoutingObserver()
{
	return iObserver;
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
void CStubTelephonyAudioRouting::AddAvailableOutput( TAudioOutput aOutput )
{
	iAvailableOutputs.Append(aOutput);
	return;	
}


// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
void CStubTelephonyAudioRouting::ResetAvailableOutputs( )
{
	iAvailableOutputs.Reset();
	iAvailableOutputs.Append(CTelephonyAudioRouting::EHandset);
	iAvailableOutputs.Append(CTelephonyAudioRouting::ELoudspeaker);
	
	return;	
}

CStubAudioFactory* CStubAudioFactory::NewL()
    {
    return new( ELeave )CStubAudioFactory();
    }

CStubAudioFactory::CStubAudioFactory()
    {
    
    }

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//  
CStubAudioToneUtility* CStubAudioToneUtility::NewL()
    {
    return new( ELeave )CStubAudioToneUtility();
    }
    
CStubAudioToneUtility::CStubAudioToneUtility()
    {
       
    }

void CStubAudioToneUtility::Reset()
    {
    iPrepareToPlayDesSequenceCalled = EFalse;
    iCancelPlayCallCount = 0;
    }

TBool CStubAudioToneUtility::IsPrepareToPlayDesSequenceCalled() const
    {
    return iPrepareToPlayDesSequenceCalled;
    }

TBool CStubAudioToneUtility::IsCancelPlayCalled() const
    {
    return iCancelPlayCallCount;
    }

TBool CStubAudioToneUtility::IsCancelPlayCalled( TInt aCallCount ) const
    {
    return aCallCount == iCancelPlayCallCount;
    }

void CStubAudioToneUtility::PrepareToPlayDesSequence(const TDesC8& /*aSequence*/)
    {
    iPrepareToPlayDesSequenceCalled = ETrue;
    }

TMdaAudioToneUtilityState CStubAudioToneUtility::State()
    {
    // T_CallHandling test "Test name: MO call, network changes alerting tone status between connecting and
    // connected state" is counting on that state is in EMdaAudioToneUtilityPlaying during the test.
    // 
    return EMdaAudioToneUtilityPlaying;
    }
void CStubAudioToneUtility::CancelPlay()
    {
    iCancelPlayCallCount++;
    }
TInt CStubAudioToneUtility::MaxVolume()
    {
    return 10;
    }

void CStubAudioToneUtility::SetVolume(
    TInt /*aVolume*/ )
    {
    
    }
void CStubAudioToneUtility::SetRepeats(
    TInt /*aRepeatNumberOfTimes*/, 
    const TTimeIntervalMicroSeconds& /*aTrailingSilence*/)
    {
    
    }

void CStubAudioToneUtility::SetPriority(
    TInt /*aPriority*/,
    TMdaPriorityPreference /*aPref*/)
    {
    
    }

void CStubAudioToneUtility::Play()
    {
    
    }

void CStubAudioToneUtility::SetVolumeRamp( 
    const TTimeIntervalMicroSeconds& /*aRampDuration*/)
    {
    
    }

void CStubAudioToneUtility::CancelPrepare()
    {
    
    }

// -----------------------------------------------------------------------------
// TStubAudioFactory::CreateTelephonyAudioRoutingL
// creates stub CTelephonyAudioRouting instance, defined in T_AudoHandlingMT.dll
// -----------------------------------------------------------------------------
//   
CTelephonyAudioRouting* CStubAudioFactory::CreateTelephonyAudioRoutingL( MTelephonyAudioRoutingObserver& aAudioRoutingObserver )      
    {
	return CStubTelephonyAudioRouting::NewL( aAudioRoutingObserver );
    }

CPEAudioToneUtility* CStubAudioFactory::CreateAudioToneUtilityL(
    MMdaAudioToneObserver& /*aToneObserver*/ )
    {
    iStubUtility = CStubAudioToneUtility::NewL();
    return iStubUtility;
    }

CStubAudioToneUtility* CStubAudioFactory::StubUtility() const
    {
    return iStubUtility;
    }