phoneapp/phoneringingtoneplayer/src/cphoneringingtoneplayer.cpp
changeset 37 ba76fc04e6c2
child 45 6b911d05207e
equal deleted inserted replaced
36:2eacb6118286 37:ba76fc04e6c2
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include <cntdef.h>
       
    19 #include <f32file.h>
       
    20 #include <featmgr.h>
       
    21 #include <utility.h>
       
    22 #include <AudioPreference.h>
       
    23 #include <ProfileEngineDomainCRKeys.h>
       
    24 #include <DRMHelperServerInternalCRKeys.h>
       
    25 #include <DRMHelper.h>
       
    26 #include <activeidle2domainpskeys.h>
       
    27 #include <data_caging_path_literals.hrh>
       
    28 #include "cphoneringingtoneplayer.h"
       
    29 #include "cphoneaudioplayer.h"
       
    30 #include "cphoneringingtone.h"
       
    31 #include "phonelogger.h"
       
    32 #include "cphonecenrepproxy.h"
       
    33 #include "cphonepubsubproxy.h"
       
    34 #include "cphonetimer.h"
       
    35 #include "phoneconstants.h"
       
    36 #include "phoneui.pan"
       
    37 
       
    38 CPhoneRingingtonePlayer::CPhoneRingingtonePlayer():
       
    39 CActive( CActive::EPriorityStandard ), iAsyncDeletePlayers( EPlayerCount )
       
    40 {
       
    41     CActiveScheduler::Add( this );
       
    42 }
       
    43 
       
    44 CPhoneRingingtonePlayer::~CPhoneRingingtonePlayer()
       
    45     {
       
    46     iAsyncDeletePlayers.ResetAndDestroy();
       
    47     iAsyncDeletePlayers.Close();
       
    48         
       
    49     delete iTimer;
       
    50     
       
    51     CleanupPlayers();
       
    52     
       
    53     Cancel();
       
    54     }
       
    55 
       
    56 // -----------------------------------------------------------------------------
       
    57 // 
       
    58 // -----------------------------------------------------------------------------
       
    59 //
       
    60 void CPhoneRingingtonePlayer::CleanupPlayers()
       
    61     {
       
    62     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::CleanupPlayers()" );
       
    63     
       
    64     delete iAudioPlayer;
       
    65     iAudioPlayer = NULL;
       
    66     delete iDefaultPlayer;
       
    67     iDefaultPlayer = NULL;
       
    68     delete iBeepOncePlayer;
       
    69     iBeepOncePlayer = NULL;
       
    70     delete iSilentPlayer;
       
    71     iSilentPlayer = NULL;
       
    72     delete iBackupPlayer;
       
    73     iBackupPlayer = NULL;
       
    74     delete iMdaServer;
       
    75     iMdaServer = NULL;
       
    76     }
       
    77 // -----------------------------------------------------------------------------
       
    78 // 
       
    79 // -----------------------------------------------------------------------------
       
    80 //
       
    81 CPhoneRingingtonePlayer* CPhoneRingingtonePlayer::NewL()
       
    82     {
       
    83     CPhoneRingingtonePlayer* self = 
       
    84         new ( ELeave ) CPhoneRingingtonePlayer();
       
    85     
       
    86     CleanupStack::PushL( self );
       
    87     self->ConstructL();
       
    88     CleanupStack::Pop( self );
       
    89 
       
    90     return self;
       
    91     }
       
    92 
       
    93 // -----------------------------------------------------------------------------
       
    94 // 
       
    95 // -----------------------------------------------------------------------------
       
    96 //
       
    97 void CPhoneRingingtonePlayer::ConstructL()
       
    98     {
       
    99     
       
   100     // Construct timer.
       
   101     iTimer = CPhoneTimer::NewL();
       
   102     
       
   103     for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
       
   104         {
       
   105         User::LeaveIfError( 
       
   106             iAsyncDeletePlayers.Append( NULL ) );
       
   107         }
       
   108     
       
   109     //disabling the DRM for the TB10.1wk46 release. Lets see if need to put it back and how.
       
   110     //iExtSecNeeded = ( ( err == KErrNone ) && extSecNeeded ) ? ETrue : EFalse;
       
   111     iExtSecNeeded = EFalse; 
       
   112         
       
   113     // Construct players.
       
   114     if ( !iMdaServer )
       
   115         {
       
   116         iMdaServer = CMdaServer::NewL();
       
   117         }
       
   118     
       
   119     // Backup player. 
       
   120     ConstructBackupPlayer();
       
   121     ConstructDefaultPlayerL();
       
   122     }
       
   123 
       
   124 // -----------------------------------------------------------------------------
       
   125 // 
       
   126 // -----------------------------------------------------------------------------
       
   127 //
       
   128 void CPhoneRingingtonePlayer::PlayProfileBasedTone( CPhoneRingingTone* aAudioVideoRingingTone )
       
   129     {
       
   130     iAudioVideoRingingTone = aAudioVideoRingingTone;
       
   131     // Construct player for line 1.
       
   132      if ( !iAudioPlayer )
       
   133          {
       
   134          iAudioPlayer = ConstructTonePlayer( 
       
   135              *iAudioVideoRingingTone, 
       
   136              EPlayerAudio );
       
   137          if ( !iTimer->IsActive() )
       
   138              {
       
   139              // Start timer, since the player is constructed.
       
   140              iTimer->After( KPhoneMaxRingingWaiting, this );
       
   141              }
       
   142          }
       
   143 
       
   144      // Start playing.
       
   145      if ( !iAudioPlayer )
       
   146          {
       
   147          iTimer->Cancel();
       
   148          PlayDefaultTone( aAudioVideoRingingTone->Volume(), 
       
   149                           aAudioVideoRingingTone->RingingType() );
       
   150          }
       
   151      else
       
   152          {
       
   153          __PHONELOG( 
       
   154              EBasic, 
       
   155              EPhoneControl, 
       
   156              "CPhoneRingingtonePlayer::PlayAudioRingTone - Start playing audio" );
       
   157          iVolume = aAudioVideoRingingTone->Volume();
       
   158          iRingingType = aAudioVideoRingingTone->RingingType();
       
   159          //AddTtsPlaybackIfNeeded( aRingingType );
       
   160          iTonePlayingStatus = EAudioTonePlaying;
       
   161          iAudioPlayer->Play( 
       
   162              ConvertRingingType( aAudioVideoRingingTone->RingingType() ),
       
   163              aAudioVideoRingingTone->Volume(),
       
   164              aAudioVideoRingingTone->TtsToneToBePlayed());
       
   165          }
       
   166     }
       
   167 // -----------------------------------------------------------------------------
       
   168 // 
       
   169 // -----------------------------------------------------------------------------
       
   170 //
       
   171 void CPhoneRingingtonePlayer::PlayBeepOnce( TInt aVolume )
       
   172     {
       
   173     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::BeepOnce()" );
       
   174     __PHONELOG1( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::BeepOnce - aVolume(%d)",
       
   175         aVolume );
       
   176 
       
   177     if ( !iBeepOncePlayer )
       
   178         {
       
   179         ConstructSequencePlayer( EPlayerBeepOnce );
       
   180         }
       
   181 
       
   182     if ( iBeepOncePlayer )
       
   183         {
       
   184         __PHONELOG( 
       
   185             EBasic, 
       
   186             EPhoneControl, 
       
   187             "CPhoneRingingtonePlayer::BeepOnce - Play" );
       
   188         iTonePlayingStatus = EBeepOnce;
       
   189         iBeepOncePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce, 
       
   190             aVolume, EFalse );        
       
   191         }
       
   192     }
       
   193 
       
   194 // -----------------------------------------------------------------------------
       
   195 //
       
   196 // -----------------------------------------------------------------------------
       
   197 //
       
   198 void CPhoneRingingtonePlayer::PlaySilentTone()
       
   199     {
       
   200     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::PlaySilentTone()" );
       
   201 
       
   202     if ( !iSilentPlayer )
       
   203         {
       
   204         ConstructSequencePlayer( EPlayerSilent );
       
   205         }
       
   206 
       
   207     if ( iSilentPlayer )
       
   208         {
       
   209         __PHONELOG( 
       
   210             EBasic, 
       
   211             EPhoneControl, 
       
   212             "CPhoneRingingtonePlayer::PlaySilentTone - play" );
       
   213         iTonePlayingStatus = ESilentTonePlaying;
       
   214         iSilentPlayer->Play( CPhoneAudioPlayer::ETypeRinging, 0, EFalse );        
       
   215         }
       
   216     }
       
   217 
       
   218 // -----------------------------------------------------------------------------
       
   219 // 
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 void CPhoneRingingtonePlayer::PlayDefaultTone( 
       
   223     TInt aVolume, 
       
   224     TProfileRingingType aRingingType )
       
   225     {
       
   226     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone()" );
       
   227 
       
   228     if( aRingingType == EProfileRingingTypeSilent ||
       
   229         aRingingType == EProfileRingingTypeBeepOnce )
       
   230         {
       
   231         return;
       
   232         }
       
   233         
       
   234     if ( !iDefaultRingingTone )
       
   235         {
       
   236         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone - default tone does not exist, play backup..." );
       
   237         PlayBackupTone( aVolume, aRingingType );
       
   238         return;    
       
   239         }
       
   240 
       
   241     // Construct player.
       
   242     if ( !iDefaultPlayer )
       
   243         {
       
   244         iDefaultPlayer = ConstructTonePlayer( 
       
   245             *iDefaultRingingTone, 
       
   246             EPlayerDefault );
       
   247         if ( !iTimer->IsActive() )
       
   248             {
       
   249             iTimer->After( KPhoneMaxRingingWaiting, this );
       
   250             }
       
   251         }
       
   252 
       
   253     // Start playing backup.
       
   254     if ( !iDefaultPlayer )
       
   255         {
       
   256         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone - player not constructed, play backup..." );
       
   257         iTimer->Cancel();
       
   258         PlayBackupTone( aVolume, aRingingType );
       
   259         }
       
   260     else
       
   261         {
       
   262         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayDefaultTone - play" );
       
   263         iVolume = aVolume;
       
   264         iRingingType = aRingingType;
       
   265         iTonePlayingStatus = EDefaultTonePlaying;
       
   266         iDefaultPlayer->Play( 
       
   267             ConvertRingingType( aRingingType ), aVolume,
       
   268             iAudioVideoRingingTone->TtsToneToBePlayed());
       
   269         }
       
   270 
       
   271     }
       
   272 
       
   273 // -----------------------------------------------------------------------------
       
   274 // CPhoneRingingtonePlayer::PlayBackupTone
       
   275 // -----------------------------------------------------------------------------
       
   276 //
       
   277 void CPhoneRingingtonePlayer::PlayBackupTone( 
       
   278     TInt aVolume, 
       
   279     TProfileRingingType aRingingType )
       
   280     {
       
   281     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::PlayBackupTone()" );
       
   282     __ASSERT_DEBUG( iBackupPlayer, Panic( EPhoneViewGeneralError ) );
       
   283 
       
   284     if ( !iBackupPlayer )
       
   285         {
       
   286         ConstructBackupPlayer();
       
   287         }
       
   288 
       
   289     if ( iBackupPlayer )
       
   290         {
       
   291         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::PlayBackupTone - play" );
       
   292         iTonePlayingStatus = EBackupTonePlaying;
       
   293 /*
       
   294         // playing text-to-speech, if necessary
       
   295         iTtsToneToBePlayed = EFalse;
       
   296         iTTsTimeOutCounter = 0;
       
   297         iTtsDelayTimer->Cancel();
       
   298         if ( iTtsPlayer )
       
   299             {
       
   300             iTtsPlayer->StopPlaying();
       
   301             delete iTtsPlayer;
       
   302             iTtsPlayer = NULL;
       
   303             }*/
       
   304 
       
   305         iBackupPlayer->Play( 
       
   306             ConvertRingingType( aRingingType ), aVolume, EFalse );        
       
   307         }
       
   308     }
       
   309 
       
   310 
       
   311 // -----------------------------------------------------------------------------
       
   312 // 
       
   313 // -----------------------------------------------------------------------------
       
   314 //
       
   315 void CPhoneRingingtonePlayer::StopPlaying()
       
   316     {
       
   317     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::StopPlaying()" );
       
   318 
       
   319     iTimer->Cancel();
       
   320 
       
   321     switch( iTonePlayingStatus )
       
   322         {
       
   323         case EAudioTonePlaying:
       
   324             if( iAudioPlayer )
       
   325                 {
       
   326                 iAudioPlayer->StopPlaying();
       
   327                 delete iAudioPlayer;
       
   328                 iAudioPlayer = NULL;
       
   329                 }
       
   330             break;
       
   331         case EDefaultTonePlaying:
       
   332             if ( iDefaultPlayer )
       
   333                 {
       
   334                 iDefaultPlayer->StopPlaying();
       
   335                 delete iDefaultPlayer;
       
   336                 iDefaultPlayer = NULL;
       
   337                 }
       
   338             break;
       
   339         case EBeepOnce:
       
   340             if( iBeepOncePlayer )
       
   341                 {
       
   342                 iBeepOncePlayer->StopPlaying();
       
   343                 delete iBeepOncePlayer;
       
   344                 iBeepOncePlayer = NULL;
       
   345                 }
       
   346             break;
       
   347         case EBackupTonePlaying:
       
   348             if( iBackupPlayer )
       
   349                 {
       
   350                 iBackupPlayer->StopPlaying();
       
   351                 }
       
   352             break;
       
   353         case ESilentTonePlaying:
       
   354             if( iSilentPlayer )
       
   355                 {
       
   356                 iSilentPlayer->StopPlaying();
       
   357                 delete iSilentPlayer;
       
   358                 iSilentPlayer = NULL;
       
   359                 }
       
   360             break;
       
   361         case EVideoTonePlaying: // video ringing tone
       
   362         case EPersonalVideoTonePlaying:
       
   363         case ESilentVideoTonePlaying:
       
   364             if ( iBeepOncePlayer )
       
   365                 {
       
   366                 iBeepOncePlayer->StopPlaying();
       
   367                 delete iBeepOncePlayer;
       
   368                 iBeepOncePlayer = NULL;                    
       
   369                 }
       
   370                 
       
   371             if ( iSilentPlayer )
       
   372                 {
       
   373                 iSilentPlayer->StopPlaying();
       
   374                 delete iSilentPlayer;
       
   375                 iSilentPlayer = NULL;                    
       
   376                 }    
       
   377             /*if ( iVideoPlayer )
       
   378                 {
       
   379                 iVideoPlayer->StopVideoRingTone();
       
   380                 }*/
       
   381             if ( iAudioVideoRingingTone )
       
   382                 {
       
   383                 delete iAudioVideoRingingTone;
       
   384                 iAudioVideoRingingTone = NULL;    
       
   385                 }
       
   386             break;
       
   387         case EIdle:
       
   388             // Do nothing here.
       
   389             return;
       
   390         default:
       
   391             Panic( EPhoneViewCaseNotHandled );
       
   392             break;
       
   393         }
       
   394 
       
   395     iTonePlayingStatus = EIdle;
       
   396     }
       
   397 // -----------------------------------------------------------------------------
       
   398 // 
       
   399 // -----------------------------------------------------------------------------
       
   400 //
       
   401 CPhoneAudioPlayer* CPhoneRingingtonePlayer::ConstructTonePlayer( 
       
   402     const CPhoneRingingTone& aRingingTone,
       
   403     TInt aId )
       
   404     {
       
   405     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructTonePlayer()" );
       
   406     return CPhoneAudioPlayer::New(
       
   407         aRingingTone, 
       
   408         KAudioPriorityPhoneCall, 
       
   409         KAudioPrefIncomingCall,
       
   410         *this, 
       
   411         aId,
       
   412         iMdaServer,
       
   413         aId == EPlayerDefault ? EFalse : iExtSecNeeded );
       
   414     }
       
   415 
       
   416 // -----------------------------------------------------------------------------
       
   417 // 
       
   418 // -----------------------------------------------------------------------------
       
   419 //
       
   420 TInt CPhoneRingingtonePlayer::ConstructBackupPlayer()
       
   421     {
       
   422     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructBackupPlayer()" );
       
   423     TRAPD( err, ConstructBackupPlayerL() );
       
   424     return err;
       
   425     }
       
   426 // -----------------------------------------------------------------------------
       
   427 //
       
   428 // -----------------------------------------------------------------------------
       
   429 //
       
   430 void CPhoneRingingtonePlayer::ConstructBackupPlayerL()
       
   431     {
       
   432     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructBackupPlayerL()" );
       
   433 
       
   434     // Construct Backup player.
       
   435     if ( !iBackupPlayer )
       
   436         {
       
   437         TFileName defaultSoundFile( KDriveZ );
       
   438         defaultSoundFile.Append( KPhoneDefaultSoundFile );
       
   439         iBackupPlayer = CPhoneAudioPlayer::NewL( 
       
   440             defaultSoundFile,
       
   441             KAudioPriorityPhoneCall,
       
   442             KAudioPrefIncomingCall,
       
   443             *this,
       
   444             EPlayerBackup,
       
   445             iMdaServer 
       
   446             );
       
   447         }
       
   448     }
       
   449 
       
   450 // -----------------------------------------------------------------------------
       
   451 // 
       
   452 // -----------------------------------------------------------------------------
       
   453 //
       
   454 void CPhoneRingingtonePlayer::ConstructDefaultPlayerL()
       
   455     {
       
   456     // Construct the default ringing tone
       
   457     TBuf<KMaxFileName> defaultTone;
       
   458     defaultTone = _L("z:\\data\\sounds\\digital\\Nokia tune.aac");        
       
   459     TInt err(KErrNone);
       
   460     
       
   461     if ( err == KErrNone )
       
   462         {
       
   463         iDefaultRingingTone = CPhoneRingingTone::NewL( defaultTone );
       
   464         }
       
   465     }
       
   466 // -----------------------------------------------------------------------------
       
   467 // 
       
   468 // -----------------------------------------------------------------------------
       
   469 //
       
   470 void CPhoneRingingtonePlayer::ConstructSequencePlayer( TPlayerId aId )
       
   471     {
       
   472     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructSequencePlayer()" );
       
   473 
       
   474     // Construct players.
       
   475     TRAPD( err, ConstructSequencePlayerL( aId ) );
       
   476     if ( err )
       
   477         {
       
   478         __PHONELOG1( EBasic, EPhoneControl, 
       
   479         "CPhoneRingingtonePlayer::ConstructSequencePlayer - err(%d)", err );    
       
   480         }
       
   481     }
       
   482 // -----------------------------------------------------------------------------
       
   483 //
       
   484 // -----------------------------------------------------------------------------
       
   485 //
       
   486 void CPhoneRingingtonePlayer::ConstructSequencePlayerL( TPlayerId aId )
       
   487     {
       
   488     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConstructSequencePlayerL()" );
       
   489     // Construct beep once player
       
   490     if ( aId == EPlayerBeepOnce )
       
   491         {
       
   492 #ifdef __WINS__    
       
   493         TParse* fp = new (ELeave) TParse();
       
   494         fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
       
   495         TFileName fileName( fp->FullName() );
       
   496         delete fp;
       
   497 
       
   498         iBeepOncePlayer = CPhoneAudioPlayer::NewL(
       
   499             fileName, 
       
   500             KAudioPriorityPhoneCall,
       
   501             KAudioPrefIncomingCall,
       
   502             *this, 
       
   503             EPlayerBeepOnce );
       
   504 #else
       
   505         iBeepOncePlayer = CPhoneAudioPlayer::NewSeqL(
       
   506             KPhoneBeepSequence(),
       
   507             KAudioPriorityPhoneCall,
       
   508             KAudioPrefIncomingCall,
       
   509             *this, 
       
   510             EPlayerBeepOnce );
       
   511 #endif // __WINS__
       
   512         }
       
   513 
       
   514     // Construct Silent Player.
       
   515     else if ( aId == EPlayerSilent )
       
   516         {
       
   517 #ifdef __WINS__
       
   518         TParse* fp = new (ELeave) TParse();
       
   519         fp->Set( KPhoneSilentSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
       
   520         TFileName fileName( fp->FullName() );
       
   521         delete fp;
       
   522 
       
   523         iSilentPlayer = CPhoneAudioPlayer::NewL( 
       
   524             fileName, 
       
   525             KAudioPriorityPhoneCall,
       
   526             KAudioPrefIncomingCall,
       
   527             *this, 
       
   528             EPlayerSilent );
       
   529 #else
       
   530         iSilentPlayer = CPhoneAudioPlayer::NewSeqL(
       
   531             KPhoneNoSoundSequence(),
       
   532             KAudioPriorityPhoneCall,
       
   533             KAudioPrefIncomingCall,
       
   534             *this,
       
   535             EPlayerSilent );
       
   536 #endif // __WINS__
       
   537         }        
       
   538     }
       
   539 
       
   540 // -----------------------------------------------------------------------------
       
   541 // 
       
   542 // -----------------------------------------------------------------------------
       
   543 //
       
   544 void CPhoneRingingtonePlayer::HandleAudioPlayerError( 
       
   545     TPhoneAudioPlayerErrorEvent /*aEvent*/, 
       
   546     TInt aError, 
       
   547     TInt /*aId*/ )
       
   548     {
       
   549     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleAudioPlayerError()" );
       
   550     // This is called from CPhoneAudioPlayer - we do not 
       
   551     // want to delete instances from which this method
       
   552     // is called.
       
   553     
       
   554      __PHONELOG1( EBasic, 
       
   555                  EPhoneControl, 
       
   556                  "CPhoneRingingtonePlayer::HandleAudioPlayerError - error (%d)",
       
   557                  aError ); 
       
   558 
       
   559     const TBool deleteAll = ( aError == KErrServerTerminated );
       
   560 
       
   561     if ( deleteAll )
       
   562         {
       
   563         // KErrServerTerminated is considered as fatal error. So we
       
   564         // need to delete everything.
       
   565 
       
   566         for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
       
   567             {
       
   568             DeletePlayerAsync( static_cast< TPlayerId >( i ) );
       
   569             }
       
   570 
       
   571         // Now all member audio players point to NULL, except
       
   572         // those players in iAsyncDeletePlayers. Recreate 
       
   573         // players.
       
   574 
       
   575         ConstructBackupPlayer(); // Ignore error code.
       
   576         }
       
   577 
       
   578     iTimer->Cancel();
       
   579     DoHandlePlayerError( !deleteAll, EFalse );
       
   580     }
       
   581 
       
   582 // -----------------------------------------------------------------------------
       
   583 // 
       
   584 // -----------------------------------------------------------------------------
       
   585 //
       
   586 void CPhoneRingingtonePlayer::HandleAudioPlayerInitComplete( TInt aId )
       
   587     {
       
   588     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleAudioPlayerInitComplete()" );
       
   589     // This is called from CPhoneAudioPlayer - we do not 
       
   590     // want to delete instances from which this method
       
   591     // is called. 
       
   592 
       
   593     if ( iTonePlayingStatus == EAudioTonePlaying && aId == EPlayerAudio ||
       
   594         iTonePlayingStatus == EDefaultTonePlaying && aId == EPlayerDefault )
       
   595         {
       
   596         iTimer->Cancel();
       
   597         }
       
   598     }
       
   599 
       
   600 // -----------------------------------------------------------------------------
       
   601 // CPhoneRingingtonePlayer::HandlePlayingComplete
       
   602 // -----------------------------------------------------------------------------
       
   603 //
       
   604 void CPhoneRingingtonePlayer::HandlePlayingComplete( TInt /*aId*/ )
       
   605     {
       
   606     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandlePlayingComplete()" );
       
   607     // This is called from CPhoneAudioPlayer - we do not 
       
   608     // want to delete instances from which this method
       
   609     // is called. 
       
   610 
       
   611 
       
   612     __PHONELOG1( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::HandlePlayingComplete - delete player - iTonePlayingStatus(%d)",
       
   613         iTonePlayingStatus ); 
       
   614 /*    if (iAudioVideoRingingTone->TtsToneToBePlayed() &&
       
   615         iAudioVideoRingingTone->RingingType() == EProfileRingingTypeRinging )
       
   616         {
       
   617         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::HandlePlayingComplete - return" ); 
       
   618         return;
       
   619         }*/
       
   620     
       
   621     switch( iTonePlayingStatus )
       
   622         {
       
   623         case EAudioTonePlaying:
       
   624             DeletePlayerAsync( EPlayerAudio );
       
   625             iAudioPlayer = NULL;
       
   626             break;
       
   627             
       
   628         case EDefaultTonePlaying:
       
   629             DeletePlayerAsync( EPlayerDefault );
       
   630             iDefaultPlayer = NULL;
       
   631             break;
       
   632             
       
   633         case ESilentTonePlaying:
       
   634             DeletePlayerAsync( EPlayerSilent );
       
   635             iSilentPlayer = NULL;
       
   636             break;
       
   637             
       
   638         case EBeepOnce:
       
   639             DeletePlayerAsync( EPlayerBeepOnce );
       
   640             iBeepOncePlayer = NULL;
       
   641             break;
       
   642             
       
   643         case EVideoTonePlaying:
       
   644         case EPersonalVideoTonePlaying:
       
   645             DeletePlayerAsync( EPlayerBeepOnce );
       
   646             iBeepOncePlayer = NULL;
       
   647             return; // beep once + video
       
   648             
       
   649         case EBackupTonePlaying:
       
   650             break;
       
   651             
       
   652         default:
       
   653             Panic( EPhoneViewCaseNotHandled );
       
   654             break;
       
   655         }
       
   656 
       
   657     iTonePlayingStatus = EIdle;
       
   658     }
       
   659 
       
   660 // -----------------------------------------------------------------------------
       
   661 // 
       
   662 // -----------------------------------------------------------------------------
       
   663 //
       
   664 void CPhoneRingingtonePlayer::DeletePlayerAsync( TPlayerId aPlayer )
       
   665     {
       
   666     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::DeletePlayerAsync()" );
       
   667     __ASSERT_DEBUG( aPlayer >= EPlayerFirst && aPlayer < iAsyncDeletePlayers.Count(),
       
   668         Panic( EPhoneViewInvariant ) );
       
   669         
       
   670     // Player is not deleted here, but in RunL.
       
   671     Cancel();
       
   672 
       
   673     if ( iAsyncDeletePlayers[ aPlayer ] ) 
       
   674         {
       
   675         delete iAsyncDeletePlayers[ aPlayer ];
       
   676         iAsyncDeletePlayers[ aPlayer ] = NULL;
       
   677         }
       
   678 
       
   679     CPhoneAudioPlayer** players[] =
       
   680         {
       
   681         &iAudioPlayer,
       
   682         &iBeepOncePlayer,
       
   683         &iSilentPlayer,
       
   684         &iDefaultPlayer,
       
   685         &iBackupPlayer,
       
   686         &iTtsPlayer
       
   687         };
       
   688 
       
   689     __ASSERT_DEBUG( iAsyncDeletePlayers.Count() > aPlayer, Panic( EPhoneUtilsIndexOutOfBounds ) );
       
   690     iAsyncDeletePlayers[ aPlayer ] = 
       
   691         *(players[ aPlayer ]);
       
   692     *(players[ aPlayer ]) = NULL;
       
   693 
       
   694     iState = EDeletingAudioPlayer;
       
   695 
       
   696     TRequestStatus* status = &iStatus;
       
   697     User::RequestComplete( status, KErrNone );
       
   698     SetActive();
       
   699     }
       
   700 
       
   701 // -----------------------------------------------------------------------------
       
   702 //
       
   703 // -----------------------------------------------------------------------------
       
   704 //
       
   705 void CPhoneRingingtonePlayer::RunL()
       
   706     {
       
   707     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::RunL()" );
       
   708 
       
   709     switch ( iState )
       
   710         {
       
   711         case EDeletingAudioPlayer:
       
   712             {
       
   713             for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
       
   714                 {
       
   715                 delete iAsyncDeletePlayers[ i ];
       
   716                 iAsyncDeletePlayers[ i ] = NULL;
       
   717                 }
       
   718             }
       
   719             break;
       
   720 
       
   721       case EPlayingDefaultVideo:
       
   722             {
       
   723             //PlayAudioRingTone( iVolume, iRingingType );
       
   724             }
       
   725             break;
       
   726 
       
   727         case EIdleState:  
       
   728         default:
       
   729             break;
       
   730         } // switch iState
       
   731     
       
   732     iState = EIdleState;
       
   733     }
       
   734 // -----------------------------------------------------------------------------
       
   735 // 
       
   736 // -----------------------------------------------------------------------------
       
   737 //
       
   738 void CPhoneRingingtonePlayer::DoCancel()
       
   739     {
       
   740     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::DoCancel()" );
       
   741     // Request is completed immediately before SetActive.
       
   742     }
       
   743 
       
   744 
       
   745 // -----------------------------------------------------------
       
   746 // CPhoneRingingtonePlayer::HandleCenRepChangeL
       
   747 // -----------------------------------------------------------
       
   748 //
       
   749 void CPhoneRingingtonePlayer::HandleCenRepChangeL( 
       
   750     const TUid& aUid,
       
   751     const TUint /*aId*/ )
       
   752     {
       
   753     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleCenRepChangeL()");
       
   754     
       
   755     if ( aUid == KCRUidDRMHelperServer )
       
   756         {
       
   757         }
       
   758     }
       
   759 
       
   760 // -----------------------------------------------------------------------------
       
   761 // 
       
   762 // -----------------------------------------------------------------------------
       
   763 //
       
   764 void CPhoneRingingtonePlayer::HandleTimeOutL()
       
   765     {
       
   766     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::HandleTimeOutL()" );
       
   767    /* if( iActiveCoverUICommand )
       
   768         {
       
   769         iMediatorSender->CancelCommand( 
       
   770             EPhoneCmdCoverUiShowMultimediaRingingTone );
       
   771         PlayDefaultTone( iVolume, iRingingType );
       
   772         iActiveCoverUICommand = EFalse;
       
   773         }*/
       
   774 
       
   775     // Guarding timer for startup has expired
       
   776     if ( iTonePlayingStatus == EVideoTonePlaying ||
       
   777          iTonePlayingStatus == ESilentVideoTonePlaying ||   
       
   778          iTonePlayingStatus == EPersonalVideoTonePlaying )
       
   779         {
       
   780         //iVideoPlayer->CancelVideoRingTone(); // close video ringtone display
       
   781         PlayDefaultTone( iVolume, iRingingType );
       
   782         }
       
   783     else
       
   784         {
       
   785         // Start new audio player synchronously.
       
   786         DoHandlePlayerError( ETrue, ETrue );
       
   787         }           
       
   788     
       
   789     }
       
   790 // -----------------------------------------------------------------------------
       
   791 // 
       
   792 // -----------------------------------------------------------------------------
       
   793 //
       
   794 void CPhoneRingingtonePlayer::DoHandlePlayerError(TBool aDelete, TBool aSync )
       
   795     {
       
   796     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::DoHandlePlayerError()" );
       
   797     switch ( iTonePlayingStatus )
       
   798         {
       
   799         case EAudioTonePlaying:
       
   800             if ( aDelete )
       
   801                 {
       
   802                 if ( aSync )
       
   803                     {
       
   804                     delete iAudioPlayer;
       
   805                     }
       
   806                 else
       
   807                     {
       
   808                     DeletePlayerAsync( EPlayerAudio );
       
   809                     }
       
   810 
       
   811                 iAudioPlayer = NULL;
       
   812                 }
       
   813 
       
   814 #ifdef __WINS__
       
   815             //PlayAudioRingTone( iVolume, iRingingType );
       
   816             iTonePlayingStatus = EDefaultTonePlaying;
       
   817 #else
       
   818             PlayDefaultTone( iVolume, iRingingType );
       
   819 #endif
       
   820             break;
       
   821         case EDefaultTonePlaying:
       
   822             if ( aDelete )
       
   823                 {
       
   824                 if ( aSync )
       
   825                     {
       
   826                     delete iDefaultPlayer;
       
   827                     }
       
   828                 else
       
   829                     {
       
   830                     DeletePlayerAsync( EPlayerDefault );
       
   831                     }
       
   832 
       
   833                 iDefaultPlayer = NULL;
       
   834                 }
       
   835 
       
   836             PlayBackupTone( iVolume, iRingingType );
       
   837             break;
       
   838         case ESilentTonePlaying:
       
   839         case EBeepOnce:
       
   840         case EBackupTonePlaying:
       
   841             break;
       
   842         default:
       
   843             break;
       
   844         }
       
   845     }
       
   846 // -----------------------------------------------------------------------------
       
   847 // 
       
   848 // -----------------------------------------------------------------------------
       
   849 //
       
   850 CPhoneAudioPlayer::TRingingType CPhoneRingingtonePlayer::ConvertRingingType(
       
   851     TProfileRingingType aRingingType )
       
   852     {
       
   853     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ConvertRingingType()" );
       
   854 
       
   855     CPhoneAudioPlayer::TRingingType ringingType = 
       
   856         CPhoneAudioPlayer::ETypeRinging;
       
   857     switch ( aRingingType )
       
   858         {
       
   859         case EProfileRingingTypeRinging:
       
   860             ringingType = CPhoneAudioPlayer::ETypeRinging;
       
   861             break;
       
   862 
       
   863         case EProfileRingingTypeAscending:
       
   864             ringingType = CPhoneAudioPlayer::ETypeAscending;
       
   865             break;
       
   866 
       
   867         case EProfileRingingTypeRingingOnce:
       
   868             ringingType = CPhoneAudioPlayer::ETypeRingingOnce;
       
   869             break;
       
   870 
       
   871         default:
       
   872             break;
       
   873         }
       
   874     return ringingType;
       
   875     }
       
   876 
       
   877 // -----------------------------------------------------------------------------
       
   878 // 
       
   879 // -----------------------------------------------------------------------------
       
   880 //    
       
   881 CPhoneAudioPlayer* 
       
   882 CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayer()
       
   883     {    
       
   884     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs()" );
       
   885 
       
   886     if( iAudioPlayer )
       
   887         {
       
   888         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs - audio player" ); 
       
   889         return iAudioPlayer;         
       
   890         }
       
   891     else if ( iDefaultPlayer )
       
   892         {
       
   893         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs - default player" ); 
       
   894         return iDefaultPlayer;     
       
   895         }
       
   896     else if( iBackupPlayer )
       
   897         {
       
   898         __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingtonePlayer::GetCurrentlyActiveAudioPlayerWithTTs - backup player" ); 
       
   899         return iBackupPlayer;
       
   900         }
       
   901     else
       
   902         {
       
   903         return NULL;
       
   904         }
       
   905     }
       
   906 
       
   907 // -----------------------------------------------------------------------------
       
   908 // 
       
   909 // -----------------------------------------------------------------------------
       
   910 //
       
   911 void CPhoneRingingtonePlayer::MuteActiveAudioPlayer()
       
   912     {
       
   913     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingtonePlayer::ActiveAudioPlayer()" );
       
   914 
       
   915     switch( iTonePlayingStatus )
       
   916         {
       
   917         case EAudioTonePlaying:
       
   918             if( iAudioPlayer )
       
   919                 {
       
   920                 iAudioPlayer->MutePlaying();
       
   921                 }
       
   922             break;
       
   923             
       
   924         case EDefaultTonePlaying:
       
   925             if ( iDefaultPlayer )
       
   926                 {
       
   927                 return iDefaultPlayer->MutePlaying();
       
   928                 }
       
   929             break;
       
   930             
       
   931         case EBeepOnce:
       
   932             if( iBeepOncePlayer )
       
   933                 {
       
   934                 return iBeepOncePlayer->MutePlaying();
       
   935                 }
       
   936             break;
       
   937             
       
   938         case EBackupTonePlaying:
       
   939             if( iBackupPlayer )
       
   940                 {
       
   941                 return iBackupPlayer->MutePlaying();
       
   942                 }
       
   943             break;
       
   944             
       
   945         case ESilentTonePlaying:
       
   946             if( iSilentPlayer )
       
   947                 {
       
   948                 return iSilentPlayer->MutePlaying();
       
   949                 }
       
   950             break;
       
   951             
       
   952         case EVideoTonePlaying: // video ringing tone
       
   953         case EPersonalVideoTonePlaying:
       
   954         case ESilentVideoTonePlaying:
       
   955             if ( iBeepOncePlayer )
       
   956                 {
       
   957                 return iBeepOncePlayer->MutePlaying();                    
       
   958                 }    
       
   959             else if ( iSilentPlayer )
       
   960                 {
       
   961                 return iSilentPlayer->MutePlaying();                    
       
   962                 }    
       
   963             break;
       
   964             
       
   965         default:
       
   966             break;
       
   967         }      
       
   968     }