diff -r 2eacb6118286 -r ba76fc04e6c2 phoneapp/phoneringingtoneplayer/src/cphoneringingtoneplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneringingtoneplayer/src/cphoneringingtoneplayer.cpp Fri Jun 04 10:19:18 2010 +0100 @@ -0,0 +1,968 @@ +/* +* 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: +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cphoneringingtoneplayer.h" +#include "cphoneaudioplayer.h" +#include "cphoneringingtone.h" +#include "phonelogger.h" +#include "cphonecenrepproxy.h" +#include "cphonepubsubproxy.h" +#include "cphonetimer.h" +#include "phoneconstants.h" +#include "phoneui.pan" + +CPhoneRingingtonePlayer::CPhoneRingingtonePlayer(): +CActive( CActive::EPriorityStandard ), iAsyncDeletePlayers( EPlayerCount ) +{ + CActiveScheduler::Add( this ); +} + +CPhoneRingingtonePlayer::~CPhoneRingingtonePlayer() + { + iAsyncDeletePlayers.ResetAndDestroy(); + iAsyncDeletePlayers.Close(); + + delete iTimer; + + CleanupPlayers(); + + Cancel(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::CleanupPlayers() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::CleanupPlayers()" ); + + delete iAudioPlayer; + iAudioPlayer = NULL; + delete iDefaultPlayer; + iDefaultPlayer = NULL; + delete iBeepOncePlayer; + iBeepOncePlayer = NULL; + delete iSilentPlayer; + iSilentPlayer = NULL; + delete iBackupPlayer; + iBackupPlayer = NULL; + delete iMdaServer; + iMdaServer = NULL; + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CPhoneRingingtonePlayer* CPhoneRingingtonePlayer::NewL() + { + CPhoneRingingtonePlayer* self = + new ( ELeave ) CPhoneRingingtonePlayer(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::ConstructL() + { + + // Construct timer. + iTimer = CPhoneTimer::NewL(); + + for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ ) + { + User::LeaveIfError( + iAsyncDeletePlayers.Append( NULL ) ); + } + + //disabling the DRM for the TB10.1wk46 release. Lets see if need to put it back and how. + //iExtSecNeeded = ( ( err == KErrNone ) && extSecNeeded ) ? ETrue : EFalse; + iExtSecNeeded = EFalse; + + // Construct players. + if ( !iMdaServer ) + { + iMdaServer = CMdaServer::NewL(); + } + + // Backup player. + ConstructBackupPlayer(); + ConstructDefaultPlayerL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::PlayProfileBasedTone( CPhoneRingingTone* aAudioVideoRingingTone ) + { + iAudioVideoRingingTone = aAudioVideoRingingTone; + // Construct player for line 1. + if ( !iAudioPlayer ) + { + iAudioPlayer = ConstructTonePlayer( + *iAudioVideoRingingTone, + EPlayerAudio ); + if ( !iTimer->IsActive() ) + { + // Start timer, since the player is constructed. + iTimer->After( KPhoneMaxRingingWaiting, this ); + } + } + + // Start playing. + if ( !iAudioPlayer ) + { + iTimer->Cancel(); + PlayDefaultTone( aAudioVideoRingingTone->Volume(), + aAudioVideoRingingTone->RingingType() ); + } + else + { + __PHONELOG( + EBasic, + EPhoneControl, + "CPhoneRingingtonePlayer::PlayAudioRingTone - Start playing audio" ); + iVolume = aAudioVideoRingingTone->Volume(); + iRingingType = aAudioVideoRingingTone->RingingType(); + //AddTtsPlaybackIfNeeded( aRingingType ); + iTonePlayingStatus = EAudioTonePlaying; + iAudioPlayer->Play( + ConvertRingingType( aAudioVideoRingingTone->RingingType() ), + aAudioVideoRingingTone->Volume(), + aAudioVideoRingingTone->TtsToneToBePlayed()); + } + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::PlayBeepOnce( TInt aVolume ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::BeepOnce()" ); + __PHONELOG1( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::BeepOnce - aVolume(%d)", + aVolume ); + + if ( !iBeepOncePlayer ) + { + ConstructSequencePlayer( EPlayerBeepOnce ); + } + + if ( iBeepOncePlayer ) + { + __PHONELOG( + EBasic, + EPhoneControl, + "CPhoneRingingtonePlayer::BeepOnce - Play" ); + iTonePlayingStatus = EBeepOnce; + iBeepOncePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce, + aVolume, EFalse ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::PlaySilentTone() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::PlaySilentTone()" ); + + if ( !iSilentPlayer ) + { + ConstructSequencePlayer( EPlayerSilent ); + } + + if ( iSilentPlayer ) + { + __PHONELOG( + EBasic, + EPhoneControl, + "CPhoneRingingtonePlayer::PlaySilentTone - play" ); + iTonePlayingStatus = ESilentTonePlaying; + iSilentPlayer->Play( CPhoneAudioPlayer::ETypeRinging, 0, EFalse ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::PlayDefaultTone( + TInt aVolume, + TProfileRingingType aRingingType ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone()" ); + + if( aRingingType == EProfileRingingTypeSilent || + aRingingType == EProfileRingingTypeBeepOnce ) + { + return; + } + + if ( !iDefaultRingingTone ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone - default tone does not exist, play backup..." ); + PlayBackupTone( aVolume, aRingingType ); + return; + } + + // Construct player. + if ( !iDefaultPlayer ) + { + iDefaultPlayer = ConstructTonePlayer( + *iDefaultRingingTone, + EPlayerDefault ); + if ( !iTimer->IsActive() ) + { + iTimer->After( KPhoneMaxRingingWaiting, this ); + } + } + + // Start playing backup. + if ( !iDefaultPlayer ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone - player not constructed, play backup..." ); + iTimer->Cancel(); + PlayBackupTone( aVolume, aRingingType ); + } + else + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone - play" ); + iVolume = aVolume; + iRingingType = aRingingType; + iTonePlayingStatus = EDefaultTonePlaying; + iDefaultPlayer->Play( + ConvertRingingType( aRingingType ), aVolume, + iAudioVideoRingingTone->TtsToneToBePlayed()); + } + + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingtonePlayer::PlayBackupTone +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::PlayBackupTone( + TInt aVolume, + TProfileRingingType aRingingType ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::PlayBackupTone()" ); + __ASSERT_DEBUG( iBackupPlayer, Panic( EPhoneViewGeneralError ) ); + + if ( !iBackupPlayer ) + { + ConstructBackupPlayer(); + } + + if ( iBackupPlayer ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayBackupTone - play" ); + iTonePlayingStatus = EBackupTonePlaying; +/* + // playing text-to-speech, if necessary + iTtsToneToBePlayed = EFalse; + iTTsTimeOutCounter = 0; + iTtsDelayTimer->Cancel(); + if ( iTtsPlayer ) + { + iTtsPlayer->StopPlaying(); + delete iTtsPlayer; + iTtsPlayer = NULL; + }*/ + + iBackupPlayer->Play( + ConvertRingingType( aRingingType ), aVolume, EFalse ); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::StopPlaying() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::StopPlaying()" ); + + iTimer->Cancel(); + + switch( iTonePlayingStatus ) + { + case EAudioTonePlaying: + if( iAudioPlayer ) + { + iAudioPlayer->StopPlaying(); + delete iAudioPlayer; + iAudioPlayer = NULL; + } + break; + case EDefaultTonePlaying: + if ( iDefaultPlayer ) + { + iDefaultPlayer->StopPlaying(); + delete iDefaultPlayer; + iDefaultPlayer = NULL; + } + break; + case EBeepOnce: + if( iBeepOncePlayer ) + { + iBeepOncePlayer->StopPlaying(); + delete iBeepOncePlayer; + iBeepOncePlayer = NULL; + } + break; + case EBackupTonePlaying: + if( iBackupPlayer ) + { + iBackupPlayer->StopPlaying(); + } + break; + case ESilentTonePlaying: + if( iSilentPlayer ) + { + iSilentPlayer->StopPlaying(); + delete iSilentPlayer; + iSilentPlayer = NULL; + } + break; + case EVideoTonePlaying: // video ringing tone + case EPersonalVideoTonePlaying: + case ESilentVideoTonePlaying: + if ( iBeepOncePlayer ) + { + iBeepOncePlayer->StopPlaying(); + delete iBeepOncePlayer; + iBeepOncePlayer = NULL; + } + + if ( iSilentPlayer ) + { + iSilentPlayer->StopPlaying(); + delete iSilentPlayer; + iSilentPlayer = NULL; + } + /*if ( iVideoPlayer ) + { + iVideoPlayer->StopVideoRingTone(); + }*/ + if ( iAudioVideoRingingTone ) + { + delete iAudioVideoRingingTone; + iAudioVideoRingingTone = NULL; + } + break; + case EIdle: + // Do nothing here. + return; + default: + Panic( EPhoneViewCaseNotHandled ); + break; + } + + iTonePlayingStatus = EIdle; + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CPhoneAudioPlayer* CPhoneRingingtonePlayer::ConstructTonePlayer( + const CPhoneRingingTone& aRingingTone, + TInt aId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructTonePlayer()" ); + return CPhoneAudioPlayer::New( + aRingingTone, + KAudioPriorityPhoneCall, + KAudioPrefIncomingCall, + *this, + aId, + iMdaServer, + aId == EPlayerDefault ? EFalse : iExtSecNeeded ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CPhoneRingingtonePlayer::ConstructBackupPlayer() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructBackupPlayer()" ); + TRAPD( err, ConstructBackupPlayerL() ); + return err; + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::ConstructBackupPlayerL() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructBackupPlayerL()" ); + + // Construct Backup player. + if ( !iBackupPlayer ) + { + TFileName defaultSoundFile( KDriveZ ); + defaultSoundFile.Append( KPhoneDefaultSoundFile ); + iBackupPlayer = CPhoneAudioPlayer::NewL( + defaultSoundFile, + KAudioPriorityPhoneCall, + KAudioPrefIncomingCall, + *this, + EPlayerBackup, + iMdaServer + ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::ConstructDefaultPlayerL() + { + // Construct the default ringing tone + TBuf defaultTone; + defaultTone = _L("z:\\data\\sounds\\digital\\Nokia tune.aac"); + TInt err(KErrNone); + + if ( err == KErrNone ) + { + iDefaultRingingTone = CPhoneRingingTone::NewL( defaultTone ); + } + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::ConstructSequencePlayer( TPlayerId aId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructSequencePlayer()" ); + + // Construct players. + TRAPD( err, ConstructSequencePlayerL( aId ) ); + if ( err ) + { + __PHONELOG1( EBasic, EPhoneControl, + "CPhoneRingingtonePlayer::ConstructSequencePlayer - err(%d)", err ); + } + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::ConstructSequencePlayerL( TPlayerId aId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructSequencePlayerL()" ); + // Construct beep once player + if ( aId == EPlayerBeepOnce ) + { +#ifdef __WINS__ + TParse* fp = new (ELeave) TParse(); + fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); + TFileName fileName( fp->FullName() ); + delete fp; + + iBeepOncePlayer = CPhoneAudioPlayer::NewL( + fileName, + KAudioPriorityPhoneCall, + KAudioPrefIncomingCall, + *this, + EPlayerBeepOnce ); +#else + iBeepOncePlayer = CPhoneAudioPlayer::NewSeqL( + KPhoneBeepSequence(), + KAudioPriorityPhoneCall, + KAudioPrefIncomingCall, + *this, + EPlayerBeepOnce ); +#endif // __WINS__ + } + + // Construct Silent Player. + else if ( aId == EPlayerSilent ) + { +#ifdef __WINS__ + TParse* fp = new (ELeave) TParse(); + fp->Set( KPhoneSilentSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); + TFileName fileName( fp->FullName() ); + delete fp; + + iSilentPlayer = CPhoneAudioPlayer::NewL( + fileName, + KAudioPriorityPhoneCall, + KAudioPrefIncomingCall, + *this, + EPlayerSilent ); +#else + iSilentPlayer = CPhoneAudioPlayer::NewSeqL( + KPhoneNoSoundSequence(), + KAudioPriorityPhoneCall, + KAudioPrefIncomingCall, + *this, + EPlayerSilent ); +#endif // __WINS__ + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::HandleAudioPlayerError( + TPhoneAudioPlayerErrorEvent /*aEvent*/, + TInt aError, + TInt /*aId*/ ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleAudioPlayerError()" ); + // This is called from CPhoneAudioPlayer - we do not + // want to delete instances from which this method + // is called. + + __PHONELOG1( EBasic, + EPhoneControl, + "CPhoneRingingtonePlayer::HandleAudioPlayerError - error (%d)", + aError ); + + const TBool deleteAll = ( aError == KErrServerTerminated ); + + if ( deleteAll ) + { + // KErrServerTerminated is considered as fatal error. So we + // need to delete everything. + + for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ ) + { + DeletePlayerAsync( static_cast< TPlayerId >( i ) ); + } + + // Now all member audio players point to NULL, except + // those players in iAsyncDeletePlayers. Recreate + // players. + + ConstructBackupPlayer(); // Ignore error code. + } + + iTimer->Cancel(); + DoHandlePlayerError( !deleteAll, EFalse ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::HandleAudioPlayerInitComplete( TInt aId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleAudioPlayerInitComplete()" ); + // This is called from CPhoneAudioPlayer - we do not + // want to delete instances from which this method + // is called. + + if ( iTonePlayingStatus == EAudioTonePlaying && aId == EPlayerAudio || + iTonePlayingStatus == EDefaultTonePlaying && aId == EPlayerDefault ) + { + iTimer->Cancel(); + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingtonePlayer::HandlePlayingComplete +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::HandlePlayingComplete( TInt /*aId*/ ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandlePlayingComplete()" ); + // This is called from CPhoneAudioPlayer - we do not + // want to delete instances from which this method + // is called. + + + __PHONELOG1( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::HandlePlayingComplete - delete player - iTonePlayingStatus(%d)", + iTonePlayingStatus ); +/* if (iAudioVideoRingingTone->TtsToneToBePlayed() && + iAudioVideoRingingTone->RingingType() == EProfileRingingTypeRinging ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::HandlePlayingComplete - return" ); + return; + }*/ + + switch( iTonePlayingStatus ) + { + case EAudioTonePlaying: + DeletePlayerAsync( EPlayerAudio ); + iAudioPlayer = NULL; + break; + + case EDefaultTonePlaying: + DeletePlayerAsync( EPlayerDefault ); + iDefaultPlayer = NULL; + break; + + case ESilentTonePlaying: + DeletePlayerAsync( EPlayerSilent ); + iSilentPlayer = NULL; + break; + + case EBeepOnce: + DeletePlayerAsync( EPlayerBeepOnce ); + iBeepOncePlayer = NULL; + break; + + case EVideoTonePlaying: + case EPersonalVideoTonePlaying: + DeletePlayerAsync( EPlayerBeepOnce ); + iBeepOncePlayer = NULL; + return; // beep once + video + + case EBackupTonePlaying: + break; + + default: + Panic( EPhoneViewCaseNotHandled ); + break; + } + + iTonePlayingStatus = EIdle; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::DeletePlayerAsync( TPlayerId aPlayer ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::DeletePlayerAsync()" ); + __ASSERT_DEBUG( aPlayer >= EPlayerFirst && aPlayer < iAsyncDeletePlayers.Count(), + Panic( EPhoneViewInvariant ) ); + + // Player is not deleted here, but in RunL. + Cancel(); + + if ( iAsyncDeletePlayers[ aPlayer ] ) + { + delete iAsyncDeletePlayers[ aPlayer ]; + iAsyncDeletePlayers[ aPlayer ] = NULL; + } + + CPhoneAudioPlayer** players[] = + { + &iAudioPlayer, + &iBeepOncePlayer, + &iSilentPlayer, + &iDefaultPlayer, + &iBackupPlayer, + &iTtsPlayer + }; + + __ASSERT_DEBUG( iAsyncDeletePlayers.Count() > aPlayer, Panic( EPhoneUtilsIndexOutOfBounds ) ); + iAsyncDeletePlayers[ aPlayer ] = + *(players[ aPlayer ]); + *(players[ aPlayer ]) = NULL; + + iState = EDeletingAudioPlayer; + + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::RunL() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::RunL()" ); + + switch ( iState ) + { + case EDeletingAudioPlayer: + { + for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ ) + { + delete iAsyncDeletePlayers[ i ]; + iAsyncDeletePlayers[ i ] = NULL; + } + } + break; + + case EPlayingDefaultVideo: + { + //PlayAudioRingTone( iVolume, iRingingType ); + } + break; + + case EIdleState: + default: + break; + } // switch iState + + iState = EIdleState; + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::DoCancel() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::DoCancel()" ); + // Request is completed immediately before SetActive. + } + + +// ----------------------------------------------------------- +// CPhoneRingingtonePlayer::HandleCenRepChangeL +// ----------------------------------------------------------- +// +void CPhoneRingingtonePlayer::HandleCenRepChangeL( + const TUid& aUid, + const TUint /*aId*/ ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleCenRepChangeL()"); + + if ( aUid == KCRUidDRMHelperServer ) + { + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::HandleTimeOutL() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleTimeOutL()" ); + /* if( iActiveCoverUICommand ) + { + iMediatorSender->CancelCommand( + EPhoneCmdCoverUiShowMultimediaRingingTone ); + PlayDefaultTone( iVolume, iRingingType ); + iActiveCoverUICommand = EFalse; + }*/ + + // Guarding timer for startup has expired + if ( iTonePlayingStatus == EVideoTonePlaying || + iTonePlayingStatus == ESilentVideoTonePlaying || + iTonePlayingStatus == EPersonalVideoTonePlaying ) + { + //iVideoPlayer->CancelVideoRingTone(); // close video ringtone display + PlayDefaultTone( iVolume, iRingingType ); + } + else + { + // Start new audio player synchronously. + DoHandlePlayerError( ETrue, ETrue ); + } + + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::DoHandlePlayerError(TBool aDelete, TBool aSync ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::DoHandlePlayerError()" ); + switch ( iTonePlayingStatus ) + { + case EAudioTonePlaying: + if ( aDelete ) + { + if ( aSync ) + { + delete iAudioPlayer; + } + else + { + DeletePlayerAsync( EPlayerAudio ); + } + + iAudioPlayer = NULL; + } + +#ifdef __WINS__ + //PlayAudioRingTone( iVolume, iRingingType ); + iTonePlayingStatus = EDefaultTonePlaying; +#else + PlayDefaultTone( iVolume, iRingingType ); +#endif + break; + case EDefaultTonePlaying: + if ( aDelete ) + { + if ( aSync ) + { + delete iDefaultPlayer; + } + else + { + DeletePlayerAsync( EPlayerDefault ); + } + + iDefaultPlayer = NULL; + } + + PlayBackupTone( iVolume, iRingingType ); + break; + case ESilentTonePlaying: + case EBeepOnce: + case EBackupTonePlaying: + break; + default: + break; + } + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CPhoneAudioPlayer::TRingingType CPhoneRingingtonePlayer::ConvertRingingType( + TProfileRingingType aRingingType ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConvertRingingType()" ); + + CPhoneAudioPlayer::TRingingType ringingType = + CPhoneAudioPlayer::ETypeRinging; + switch ( aRingingType ) + { + case EProfileRingingTypeRinging: + ringingType = CPhoneAudioPlayer::ETypeRinging; + break; + + case EProfileRingingTypeAscending: + ringingType = CPhoneAudioPlayer::ETypeAscending; + break; + + case EProfileRingingTypeRingingOnce: + ringingType = CPhoneAudioPlayer::ETypeRingingOnce; + break; + + default: + break; + } + return ringingType; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CPhoneAudioPlayer* +CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayer() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs()" ); + + if( iAudioPlayer ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs - audio player" ); + return iAudioPlayer; + } + else if ( iDefaultPlayer ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs - default player" ); + return iDefaultPlayer; + } + else if( iBackupPlayer ) + { + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs - backup player" ); + return iBackupPlayer; + } + else + { + return NULL; + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CPhoneRingingtonePlayer::MuteActiveAudioPlayer() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ActiveAudioPlayer()" ); + + switch( iTonePlayingStatus ) + { + case EAudioTonePlaying: + if( iAudioPlayer ) + { + iAudioPlayer->MutePlaying(); + } + break; + + case EDefaultTonePlaying: + if ( iDefaultPlayer ) + { + return iDefaultPlayer->MutePlaying(); + } + break; + + case EBeepOnce: + if( iBeepOncePlayer ) + { + return iBeepOncePlayer->MutePlaying(); + } + break; + + case EBackupTonePlaying: + if( iBackupPlayer ) + { + return iBackupPlayer->MutePlaying(); + } + break; + + case ESilentTonePlaying: + if( iSilentPlayer ) + { + return iSilentPlayer->MutePlaying(); + } + break; + + case EVideoTonePlaying: // video ringing tone + case EPersonalVideoTonePlaying: + case ESilentVideoTonePlaying: + if ( iBeepOncePlayer ) + { + return iBeepOncePlayer->MutePlaying(); + } + else if ( iSilentPlayer ) + { + return iSilentPlayer->MutePlaying(); + } + break; + + default: + break; + } + }