diff -r b31261fd4e04 -r ccd8e69b5392 mmsharing/mmshengine/src/musengtelephoneutils.cpp --- a/mmsharing/mmshengine/src/musengtelephoneutils.cpp Tue Feb 02 00:09:07 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,441 +0,0 @@ -/* -* Copyright (c) 2005 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: -* -*/ - - -// USER -#include "musengtelephoneutils.h" -#include "musengaudioroutingobserver.h" -#include "musengmcesession.h" -#include "muslogger.h" - -// SYSTEM -#include -#include -#include -#include -#include // for CPhCltCommandHandler - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngTelephoneUtils* CMusEngTelephoneUtils::NewL() - { - CMusEngTelephoneUtils* self = new( ELeave ) CMusEngTelephoneUtils(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngTelephoneUtils::~CMusEngTelephoneUtils() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::~CMusEngTelephoneUtils()" ) - - Cancel(); - - delete iPhoneCommandHandler; - - if( iTelephonyAudioRouting ) // If 2nd phase construction has succeeded - { - CTelephonyAudioRouting::TAudioOutput currentMode = - iTelephonyAudioRouting->Output(); - if( currentMode != iAudioOutputAtStartup ) - { - // As going down, let audiorouting api to show notification - iTelephonyAudioRouting->SetShowNote( ETrue ); - TRAPD( err, DoSetOutputL( iAudioOutputAtStartup ) ); - MUS_LOG1( "mus: [ENGINE] final route change completed: %d", err ) - err++; - } - } - - delete iRepository; - delete iTelephonyAudioRouting; - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::~CMusEngTelephoneUtils()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngTelephoneUtils::AudioRoutingCanBeChanged() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::AudioRoutingCanBeChanged" ) - - TBool retValue = ( iTelephonyAudioRouting->Output() != - CTelephonyAudioRouting::EWiredAudioAccessory && - iTelephonyAudioRouting->Output() != - CTelephonyAudioRouting::EBTAudioAccessory && - iTelephonyAudioRouting->Output() != - CTelephonyAudioRouting::ETTY ); - - MUS_LOG1( "mus: [ENGINE] <- CMusEngTelephoneUtils::AudioRoutingCanBeChanged: %d", - retValue ) - - return retValue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::LoudspeakerL( TBool aEnable, TBool aShowDialog ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::LoudspeakerL(%d)", - aEnable ) - - if ( aEnable ) - { - if ( iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::EHandset ) - { - // Disable note shown by audiorouting api as it causes - // application going to background for a while. Instead, display - // note by ourselves once setting output completes. This mechanism - // is needed only for loudspeaker enabling as going to background - // causes problems only at beginning of sharing session. - if ( aShowDialog ) - { - iTelephonyAudioRouting->SetShowNote( EFalse ); - - iShowDialog = aShowDialog; - } - - DoSetOutputL( CTelephonyAudioRouting::ELoudspeaker ); - } - } - else - { - iTelephonyAudioRouting->SetShowNote( aShowDialog ); - - if ( iAudioOutputAtStartup == CTelephonyAudioRouting::ELoudspeaker ) - { - DoSetOutputL( CTelephonyAudioRouting::EHandset ); - } - else - { - DoSetOutputL( iAudioOutputAtStartup ); - } - } - - - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::LoudspeakerL(...)" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngTelephoneUtils::IsLoudSpeakerEnabled() const - { - return ( iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::ELoudspeaker ); - } - - -// ----------------------------------------------------------------------------- -// Gets the CS call volume level. -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -TInt CMusEngTelephoneUtils::GetVolumeL() const - { - TInt currentVolume = 0; - if ( IsLoudSpeakerEnabled() ) - { - User::LeaveIfError( iRepository->Get( KTelIncallLoudspeakerVolume, - currentVolume ) ); - } - else - { - User::LeaveIfError( iRepository->Get( KTelIncallEarVolume, - currentVolume ) ); - } - - return ValidateVolume( currentVolume ); - } - - -// ----------------------------------------------------------------------------- -// Sets the CS call volume level. -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::SetVolumeL( TInt aVolume ) - { - TInt newVolume = ValidateVolume( aVolume ); - - if ( GetVolumeL() != newVolume ) - { - if ( IsLoudSpeakerEnabled() ) - { - User::LeaveIfError( iRepository->Set( KTelIncallLoudspeakerVolume, - newVolume ) ); - } - else - { - User::LeaveIfError( iRepository->Set( KTelIncallEarVolume, - newVolume ) ); - } - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::MuteMicL( TBool aMute ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::MuteMicL(%d)", aMute ) - - if ( IsActive() ) - { - MUS_LOG( "mus: [ENGINE] Cancel pending request" ) - Cancel(); - } - - iPhoneCommandHandler->MuteMicrophone( iStatus, aMute ); - SetActive(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::MuteMicL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngTelephoneUtils::IsMicMutedL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::IsMicMutedL()" ) - - TInt psVal; - User::LeaveIfError( RProperty::Get( KPSUidTelMicrophoneMuteStatus, - KTelMicrophoneMuteState, - psVal ) ); - - MUS_LOG1( "mus: [ENGINE] Mute status in PS is (%d)", psVal ) - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::IsMicMutedL()" ) - - return ( psVal == EPSTelMicMuteOn ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::SetAudioRoutingObserver( - MMusEngAudioRoutingObserver* aObserver ) - { - iAudioRoutingObserver = aObserver; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::RunL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::RunL()" ) - - // NOP, since we really cannot do anything but log the result - MUS_LOG1( "mus: [ENGINE] Asynchronous call completed with code %d", - iStatus.Int() ) - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::RunL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::DoCancel() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::DoCancel()" ) - - if ( iPhoneCommandHandler ) - { - iPhoneCommandHandler->CancelAsyncRequest( EPhCltCommandMuteMic ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::DoCancel()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::AvailableOutputsChanged( - CTelephonyAudioRouting& /*aTelephonyAudioRouting*/ ) - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::OutputChanged( - CTelephonyAudioRouting& aTelephonyAudioRouting ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::OutputChanged()" ) - - // Some other application has changed audio output routing. We consider - // this as a last will of a user and return to this state after sharing - - iAudioOutputAtStartup = aTelephonyAudioRouting.Output(); - - MUS_LOG1( "mus: [ENGINE] New audio routing is %d", iAudioOutputAtStartup ) - - if ( iAudioRoutingObserver ) - { - iAudioRoutingObserver->AudioRoutingChanged( EFalse ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::OutputChanged()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::SetOutputComplete( - CTelephonyAudioRouting& /*aTelephonyAudioRouting*/, - TInt aError ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::SetOutputComplete()" ) - - if ( aError == KErrNone && iAudioRoutingObserver ) - { - // If audio routing api didn't shown note and show dialog mode is on, - // we know that this completion is for such setoutput call for which - // we need to show the note. Show note mode is turned off only in that - // case. - TBool dialogShownByUs( EFalse ); - TBool dialogShownByAudioRouting( EFalse ); - aError = iTelephonyAudioRouting->GetShowNote( dialogShownByAudioRouting ); - if ( aError == KErrNone && !dialogShownByAudioRouting && iShowDialog ) - { - dialogShownByUs = iShowDialog; - iShowDialog = EFalse; - } - - iAudioRoutingObserver->AudioRoutingChanged( dialogShownByUs ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::SetOutputComplete()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngTelephoneUtils::CMusEngTelephoneUtils() - : CActive( CActive::EPriorityStandard ) - { - iAudioOutputAtStartup = CTelephonyAudioRouting::ENotActive; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::ConstructL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::ConstructL()" ) - - // Volume control - iRepository = CRepository::NewL( KCRUidInCallVolume ); - - // Audio routing control - iTelephonyAudioRouting = CTelephonyAudioRouting::NewL( *this ); - - iAudioOutputAtStartup = iTelephonyAudioRouting->Output(); - - // Phone - MUS_LOG( "mus: [ENGINE] Use static DLL" ) - iPhoneCommandHandler = CPhCltCommandHandler::NewL(); - - CActiveScheduler::Add( this ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::ConstructL()" ) - } - - -// ----------------------------------------------------------------------------- -// Validates that requested volume level is valid (between 1-10) and if it is -// not, modifies requested volume level to be valid. Returns validated volume. -// ----------------------------------------------------------------------------- -// -TInt CMusEngTelephoneUtils::ValidateVolume( const TInt aVolume ) const - { - if ( aVolume < KMusEngMinVolume ) - { - return KMusEngMinVolume; - } - else if ( aVolume > KMusEngMaxVolume ) - { - return KMusEngMaxVolume; - } - else - { - // NOP, to keep PC-Lint happy - } - - return aVolume; - } - - -// ----------------------------------------------------------------------------- -// Set output if setting is currently allowed. -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::DoSetOutputL( - CTelephonyAudioRouting::TAudioOutput aAudioOutput ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::DoSetOutputL()" ) - if ( iAudioRoutingObserver && !iAudioRoutingObserver->AudioRouteChangeAllowed() ) - { - MUS_LOG( "mus: [ENGINE] change not allowed!" ) - User::Leave( KErrAccessDenied ); - } - iTelephonyAudioRouting->SetOutputL( aAudioOutput ); - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::DoSetOutputL()" ) - } - -