--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneringingtoneplayer/src/cphoneringingtoneplayer.cpp Fri Mar 19 09:28:42 2010 +0200
@@ -0,0 +1,1059 @@
+/*
+* 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 <cntdef.h>
+#include <f32file.h>
+#include <featmgr.h>
+#include <utility.h>
+#include <AudioPreference.h>
+#include <ProfileEngineDomainCRKeys.h>
+// <-- QT PHONE START -->
+//#include <musicplayerdomaincrkeys.h>
+// <-- QT PHONE END -->
+#include <DRMHelperServerInternalCRKeys.h>
+#include <DRMHelper.h>
+#include <activeidle2domainpskeys.h>
+#include <data_caging_path_literals.hrh>
+#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"
+
+// CONSTANTS
+
+// <-- QT PHONE START -->
+// Minimum acceptable length of parsed DRM message.
+
+//const TInt KPhoneMinDRMTextLength = 3;
+// <-- QT PHONE END -->
+
+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 ) );
+ }
+
+
+ // <-- QT PHONE START -->
+ // Checks if DRM extend security is needed
+ //TInt extSecNeeded = KErrNone;
+/*
+ TInt err = CPhoneCenRepProxy::Instance()->GetInt(
+ KCRUidMusicPlayerFeatures,
+ KRequireDRMInPlayback,
+ extSecNeeded );
+*/
+
+ //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;
+
+
+ /*CPhoneCenRepProxy::Instance()->NotifyChangeL(
+ KCRUidDRMHelperServer,
+ KDRMHelperServerNotificationPassive,
+ this );*/
+ // <-- QT PHONE END-->
+
+ // Construct players.
+ if ( !iMdaServer )
+ {
+ iMdaServer = CMdaServer::NewL();
+ }
+
+ // Backup player.
+ ConstructBackupPlayer();
+ // <-- QT PHONE START-->
+ ConstructDefaultPlayerL();
+ // <-- QT PHONE END-->
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+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<KMaxFileName> defaultTone;
+// <-- QT PHONE START-->
+ /*TInt err = CPhoneCenRepProxy::Instance()->GetString(
+ KCRUidProfileEngine,
+ KProEngDefaultRingingTone,
+ defaultTone );*/
+ defaultTone = _L("z:\\data\\sounds\\digital\\Nokia tune.aac");
+ TInt err(KErrNone);
+// <-- QT PHONE END-->
+
+ 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 )
+ {
+// <-- QT PHONE START -->
+ /*
+ TBuf<256> tempBuf16( KNullDesC );
+
+ User::LeaveIfError( CPhoneCenRepProxy::Instance()->GetString(
+ KCRUidDRMHelperServer,
+ KDRMHelperServerNotificationPassive,
+ tempBuf16 ) );
+
+ const TBool idleIsTopApp = CPhonePubSubProxy::Instance()->Value(
+ KPSUidAiInformation, KActiveIdleState ) == EPSAiForeground;
+
+ // Quick validity check and
+ // The first Tuint8 is the times the content has been informed.
+ // Note should not shown until Idle.
+ if ( idleIsTopApp && tempBuf16.Length() >= KPhoneMinDRMTextLength )
+ {
+ TBuf8<256> tempBuf8;
+ TPtrC8 ptr((TUint8*)tempBuf16.Ptr(), tempBuf16.Size());
+ HBufC8* buf8 = HBufC8::NewLC( 256 );
+ buf8->Des().Copy(ptr);
+ // Extract URI etc.
+ // buf8 format:
+ //<TUint8 aTimes><TUint8 aExpirationMark>
+ //<TUint8 aPermissionType>
+ //<TUint8 aAutomatedContentType><TDesC8 aContentID>
+ TInt8 count = (TInt8)(*(buf8->Ptr()));
+ TChar mark = (TChar)(*(buf8->Ptr()+1));
+ TInt8 permtype = (TChar)(*(buf8->Ptr()+2));
+ TInt8 automcontenttype = (TChar)(*(buf8->Ptr()+3));
+ TBuf8<256> curi = buf8->Right( buf8->Length()-4);
+
+ if (curi.Ptr()[curi.Size()-1] == 0)
+ {
+ // The last character in the descriptor is 0, which means
+ // that the original 16-bit desc was padded so
+ // remove the last char...
+ curi.SetLength(curi.Size()-1);
+ }
+
+ // Create DRM helper.
+ CDRMHelper* drmHelper = CDRMHelper::NewLC();
+ // Show notification.
+ drmHelper->SetAutomatedType( (CDRMHelper::TDRMHelperAutomatedType)automcontenttype );
+ TInt error = drmHelper->CheckRightsAmountL( curi );
+
+ __PHONELOG1( EBasic, EPhoneControl,
+ "CPhoneRingingtonePlayer::HandleCenRepChangeL > CheckRightsAmountL, error: %d"
+ , error );
+
+ CleanupStack::PopAndDestroy( drmHelper );
+ CleanupStack::PopAndDestroy( buf8 );
+ } */
+// <-- QT PHONE END -->
+ }
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+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;
+ }
+ }