phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp
changeset 0 5f000ab63145
child 9 8871b09be73b
equal deleted inserted replaced
-1:000000000000 0:5f000ab63145
       
     1 /*
       
     2 * Copyright (c) 2002-2005,2007 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:  Ringing tone player.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "cphoneringingtoneplayerao.h"
       
    21 
       
    22 #include <cntdef.h>
       
    23 #include <f32file.h>
       
    24 #include <featmgr.h>
       
    25 #include <utility.h>
       
    26 #include <AudioPreference.h>
       
    27 #include <data_caging_path_literals.hrh>
       
    28 #include <MusicPlayerInternalCRKeys.h>
       
    29 #include <ProfileEngineDomainCRKeys.h>
       
    30 #include <telephonyvariant.hrh>
       
    31 #include <UikonInternalPSKeys.h>
       
    32 #include <DRMHelperServerInternalCRKeys.h>
       
    33 #include <DRMHelper.h>
       
    34 #include <activeidle2domainpskeys.h>
       
    35 
       
    36 #include "phoneui.pan"
       
    37 #include "phoneui.hrh"
       
    38 #include "mphoneringingtoneobserver.h"
       
    39 #include "cphonetimer.h"
       
    40 #include "cphonecenrepproxy.h"
       
    41 #include "phoneconstants.h"
       
    42 #include "phonelogger.h"
       
    43 #include "cphoneringingtone.h"
       
    44 #include "tphonecmdparamringtone.h"
       
    45 #include "cphonepubsubproxy.h"
       
    46 #include "cphonecenrepproxy.h"
       
    47 #include "cphonemediatorsender.h"
       
    48 
       
    49 // CONSTANTS
       
    50 
       
    51 // Minimum acceptable length of parsed DRM message.
       
    52 const TInt KPhoneMinDRMTextLength = 3;
       
    53 // Value field of parsed DRM string.
       
    54 
       
    55 // ============================ MEMBER FUNCTIONS ===============================
       
    56 
       
    57 // -----------------------------------------------------------------------------
       
    58 // CPhoneRingingTonePlayerAO::NewL
       
    59 // -----------------------------------------------------------------------------
       
    60 //
       
    61 CPhoneRingingTonePlayerAO* CPhoneRingingTonePlayerAO::NewL()
       
    62     {
       
    63     CPhoneRingingTonePlayerAO* self = 
       
    64         new ( ELeave ) CPhoneRingingTonePlayerAO();
       
    65     
       
    66     CleanupStack::PushL( self );
       
    67     self->ConstructL();
       
    68     CleanupStack::Pop( self );
       
    69 
       
    70     return self;
       
    71     }
       
    72 
       
    73 // -----------------------------------------------------------------------------
       
    74 // CPhoneRingingTonePlayerAO::CPhoneRingingTonePlayerAO
       
    75 // -----------------------------------------------------------------------------
       
    76 //
       
    77 CPhoneRingingTonePlayerAO::CPhoneRingingTonePlayerAO() :
       
    78     CActive( CActive::EPriorityStandard ),
       
    79     iAsyncDeletePlayers( EPlayerCount )
       
    80     {
       
    81     CActiveScheduler::Add( this );
       
    82     }
       
    83 
       
    84 // -----------------------------------------------------------------------------
       
    85 // CPhoneRingingTonePlayerAO::ConstructL
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 void CPhoneRingingTonePlayerAO::ConstructL()
       
    89     {
       
    90     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructL()" );
       
    91     
       
    92     for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
       
    93         {
       
    94         User::LeaveIfError( 
       
    95             iAsyncDeletePlayers.Append( NULL ) );
       
    96         }
       
    97 
       
    98     // Construct timer.
       
    99     iTimer = CPhoneTimer::NewL();
       
   100     iTtsDelayTimer = CPhoneTimer::NewL();
       
   101 
       
   102     // Checks if DRM extend security is needed
       
   103     TInt extSecNeeded = KErrNone;
       
   104     TInt err = CPhoneCenRepProxy::Instance()->GetInt(
       
   105         KCRUidMusicPlayerFeatures,
       
   106         KRequireDRMInPlayback,
       
   107         extSecNeeded );
       
   108  
       
   109     iExtSecNeeded = ( ( err == KErrNone ) && extSecNeeded ) ? ETrue : EFalse;
       
   110     
       
   111     
       
   112     CPhoneCenRepProxy::Instance()->NotifyChangeL(
       
   113         KCRUidDRMHelperServer, 
       
   114         KDRMHelperServerNotificationPassive,
       
   115         this );
       
   116     
       
   117 
       
   118     // Check video player configuration.
       
   119     iArbitraryVideoScaling = 
       
   120     CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported( 
       
   121             KTelephonyLVFlagArbitraryVideoScaling );
       
   122  
       
   123     // Construct the default ringing tone
       
   124     TBuf<KMaxFileName> defaultTone;
       
   125     err = CPhoneCenRepProxy::Instance()->GetString(            
       
   126         KCRUidProfileEngine,
       
   127         KProEngDefaultRingingTone,
       
   128         defaultTone );
       
   129 
       
   130     if ( err == KErrNone )
       
   131         {
       
   132         iDefaultRingingTone = CPhoneRingingTone::NewL( defaultTone );
       
   133         }
       
   134 
       
   135     ConstructPlayers();
       
   136     
       
   137     GetMaxToneFileSizeL( iToneFileSizeLimitKB );
       
   138     }
       
   139 
       
   140 // -----------------------------------------------------------------------------
       
   141 // CPhoneRingingTonePlayerAO::~CPhoneRingingTonePlayerAO
       
   142 // -----------------------------------------------------------------------------
       
   143 //
       
   144 CPhoneRingingTonePlayerAO::~CPhoneRingingTonePlayerAO()
       
   145     {
       
   146     Cancel();
       
   147     
       
   148     iAsyncDeletePlayers.ResetAndDestroy();
       
   149     iAsyncDeletePlayers.Close();
       
   150         
       
   151     CleanupPlayers();
       
   152 
       
   153     delete iTimer;
       
   154     delete iTtsDelayTimer;
       
   155     delete iDefaultRingingTone;
       
   156     delete iAudioVideoRingingTone;
       
   157     }
       
   158 
       
   159 // -----------------------------------------------------------------------------
       
   160 // CPhoneRingingTonePlayerAO::PlayRingToneL
       
   161 // -----------------------------------------------------------------------------
       
   162 //
       
   163 void CPhoneRingingTonePlayerAO::PlayRingToneL( 
       
   164     TPhoneCommandParam* aCommandParam )
       
   165     {
       
   166     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayRingToneL()" );
       
   167 
       
   168     if ( aCommandParam->ParamId() == 
       
   169         TPhoneCommandParam::EPhoneParamIdRingTone )
       
   170         {
       
   171         TPhoneCmdParamRingTone* ringToneParam = 
       
   172             static_cast<TPhoneCmdParamRingTone*>( aCommandParam );
       
   173 
       
   174         const TInt volume = ringToneParam->Volume();
       
   175         TProfileRingingType ringingType = 
       
   176             static_cast<TProfileRingingType>( ringToneParam->RingingType() );
       
   177         
       
   178         if ( !iAudioVideoRingingTone )
       
   179             {
       
   180             iAudioVideoRingingTone = CPhoneRingingTone::NewL(
       
   181                 ringToneParam->RingTone() );
       
   182             }
       
   183         else if ( iAudioVideoRingingTone->FileName().Compare(
       
   184             ringToneParam->RingTone() ) ) 
       
   185             {
       
   186             iAudioVideoRingingTone->SetFileName(
       
   187                 ringToneParam->RingTone() );
       
   188             }
       
   189         
       
   190         // Caller contact text and image and image has
       
   191         // higher priority than video ringing tone set for caller.
       
   192         if ( iAudioVideoRingingTone->IsVideoRingingTone() &&
       
   193              ringToneParam->IsCallerImage() )
       
   194             {
       
   195             // Play only audio from video ringingtone
       
   196             PlayAudioRingTone(
       
   197                     volume,
       
   198                     ringingType );
       
   199             }
       
   200         else if ( iAudioVideoRingingTone->IsVideoRingingTone() &&
       
   201                 !ringToneParam->IsCallerText() )
       
   202             {            
       
   203             // Play video ring tone
       
   204             const TBool ringToneIsPersonal = ringToneParam->Type() ==
       
   205                 EPhoneRingTonePersonal;
       
   206             PlayVideoRingingTone( 
       
   207                 *iAudioVideoRingingTone, 
       
   208                 volume, 
       
   209                 ringingType,
       
   210                 ringToneIsPersonal );
       
   211             }
       
   212         else
       
   213             {
       
   214             // Play text to speech, if available
       
   215             if ( ringToneParam->TextToSay().Length() )
       
   216                 {
       
   217                 PlayTtsTone(
       
   218                     ringToneParam->TextToSay(),
       
   219                     volume,
       
   220                     ringingType );
       
   221                 }
       
   222             // Play audio ring tone
       
   223             PlayAudioRingTone( 
       
   224                 volume, 
       
   225                 ringingType );
       
   226             }
       
   227         }
       
   228     }
       
   229 
       
   230 // -----------------------------------------------------------------------------
       
   231 // CPhoneRingingTonePlayerAO::PlayAudioRingTone
       
   232 // -----------------------------------------------------------------------------
       
   233 //
       
   234 void CPhoneRingingTonePlayerAO::PlayAudioRingTone( 
       
   235     TInt aVolume, 
       
   236     TProfileRingingType aRingingType )
       
   237     {
       
   238     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayAudioRingTone()" );
       
   239     __PHONELOG2( 
       
   240         EBasic,
       
   241         EPhoneUIView, 
       
   242         "CPhoneRingingTonePlayerAO::PlayAudioRingTone - aVolume(%d), aRingingType(%d)",
       
   243         aVolume,
       
   244         aRingingType );
       
   245  
       
   246     if ( !iAudioVideoRingingTone ||
       
   247          !CheckAndHandleToneSizeLimit( iAudioVideoRingingTone ) )
       
   248         {
       
   249         PlayDefaultTone( aVolume, aRingingType );
       
   250         }
       
   251     else if ( aRingingType == EProfileRingingTypeSilent )
       
   252         {
       
   253         PlaySilentTone();
       
   254         }
       
   255     else if ( aRingingType == EProfileRingingTypeBeepOnce )
       
   256         {
       
   257         BeepOnce( aVolume );
       
   258         }
       
   259     else
       
   260         {
       
   261         // Construct player for line 1.
       
   262         if ( !iAudioPlayer )
       
   263             {
       
   264             iAudioPlayer = ConstructTonePlayer( 
       
   265                 *iAudioVideoRingingTone, 
       
   266                 EPlayerAudio );
       
   267             if ( !iTimer->IsActive() )
       
   268                 {
       
   269                 // Start timer, since the player is constructed.
       
   270                 iTimer->After( KPhoneMaxRingingWaiting, this );
       
   271                 }
       
   272             }
       
   273 
       
   274         // Start playing.
       
   275         if ( !iAudioPlayer )
       
   276             {
       
   277             iTimer->Cancel();
       
   278             PlayDefaultTone( aVolume, aRingingType );
       
   279             }
       
   280         else
       
   281             {
       
   282             __PHONELOG( 
       
   283                 EBasic, 
       
   284                 EPhoneUIView, 
       
   285                 "CPhoneRingingTonePlayerAO::PlayAudioRingTone - Start playing audio" );
       
   286             iVolume = aVolume;
       
   287             iRingingType = aRingingType;
       
   288             AddTtsPlaybackIfNeeded( aRingingType );
       
   289             iTonePlayingStatus = EAudioTonePlaying;
       
   290             iAudioPlayer->Play( 
       
   291                 ConvertRingingType( aRingingType ),
       
   292                 aVolume,
       
   293                 iTtsToneToBePlayed );
       
   294             }
       
   295         }
       
   296     }
       
   297 
       
   298 // -----------------------------------------------------------------------------
       
   299 // CPhoneRingingTonePlayerAO::BeepOnce
       
   300 // -----------------------------------------------------------------------------
       
   301 //
       
   302 void CPhoneRingingTonePlayerAO::BeepOnce( TInt aVolume )
       
   303     {
       
   304     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::BeepOnce()" );
       
   305     __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::BeepOnce - aVolume(%d)",
       
   306         aVolume );
       
   307 
       
   308     if ( !iBeepOncePlayer )
       
   309         {
       
   310         ConstructSequencePlayer( EPlayerBeepOnce );
       
   311         }
       
   312 
       
   313     if ( iBeepOncePlayer )
       
   314         {
       
   315         __PHONELOG( 
       
   316             EBasic, 
       
   317             EPhoneUIView, 
       
   318             "CPhoneRingingTonePlayerAO::BeepOnce - Play" );
       
   319         iTonePlayingStatus = EBeepOnce;
       
   320         iBeepOncePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce, 
       
   321             aVolume, EFalse );        
       
   322         }
       
   323     }
       
   324 
       
   325 // -----------------------------------------------------------------------------
       
   326 // CPhoneRingingTonePlayerAO::PlaySilentTone
       
   327 // -----------------------------------------------------------------------------
       
   328 //
       
   329 void CPhoneRingingTonePlayerAO::PlaySilentTone()
       
   330     {
       
   331     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlaySilentTone()" );
       
   332 
       
   333     if ( !iSilentPlayer )
       
   334         {
       
   335         ConstructSequencePlayer( EPlayerSilent );
       
   336         }
       
   337 
       
   338     __ASSERT_DEBUG( iSilentPlayer, Panic( EPhoneViewGeneralError ) );
       
   339 
       
   340     if ( iSilentPlayer )
       
   341         {
       
   342         __PHONELOG( 
       
   343             EBasic, 
       
   344             EPhoneUIView, 
       
   345             "CPhoneRingingTonePlayerAO::PlaySilentTone - play" );
       
   346         iTonePlayingStatus = ESilentTonePlaying;
       
   347         iSilentPlayer->Play( CPhoneAudioPlayer::ETypeRinging, 0, EFalse );        
       
   348         }
       
   349     }
       
   350 
       
   351 // -----------------------------------------------------------------------------
       
   352 // CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone
       
   353 // -----------------------------------------------------------------------------
       
   354 //
       
   355 void CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone()
       
   356     {
       
   357     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone()" );
       
   358     if ( !iUnsecureVoIPTonePlayer )
       
   359         {
       
   360         ConstructSequencePlayer( EPlayerUnsecureVoIP );
       
   361         }
       
   362     __ASSERT_DEBUG( iUnsecureVoIPTonePlayer, Panic( EPhoneViewGeneralError ) );
       
   363 
       
   364     if ( iUnsecureVoIPTonePlayer )
       
   365         {
       
   366         iTonePlayingStatus = EUnsecureVoIPTonePlaying;
       
   367         iUnsecureVoIPTonePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce,
       
   368             KPhoneDefaultVolume, EFalse );
       
   369         }
       
   370     }
       
   371 
       
   372 // -----------------------------------------------------------------------------
       
   373 // CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer
       
   374 // -----------------------------------------------------------------------------
       
   375 //
       
   376 void CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()
       
   377     {
       
   378     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()" );
       
   379     
       
   380     if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying ||
       
   381          iTonePlayingStatus == EPersonalVideoTonePlaying )
       
   382         {
       
   383         // Mute the video audio
       
   384         iVideoPlayer->MuteVideoRingTone();
       
   385         iTonePlayingStatus = ESilentVideoTonePlaying;
       
   386         iVolume = 0;
       
   387         }
       
   388     else
       
   389         {
       
   390         DoMuteRingingTone();
       
   391         }
       
   392     }
       
   393 
       
   394 // -----------------------------------------------------------------------------
       
   395 // CPhoneRingingTonePlayerAO::MuteRingingTone
       
   396 // -----------------------------------------------------------------------------
       
   397 //
       
   398 void CPhoneRingingTonePlayerAO::MuteRingingTone()
       
   399     {
       
   400     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingTone()" );
       
   401     
       
   402     if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying ||
       
   403          iTonePlayingStatus == EPersonalVideoTonePlaying )
       
   404         {
       
   405         // Mute the video audio
       
   406         iVideoPlayer->MuteVideoRingTone();
       
   407         iTonePlayingStatus = ESilentVideoTonePlaying;
       
   408         iVolume = 0;
       
   409         }
       
   410     else
       
   411         {
       
   412         StopPlaying();
       
   413         }
       
   414     }
       
   415 
       
   416 // -----------------------------------------------------------------------------
       
   417 // CPhoneRingingTonePlayerAO::StopPlaying
       
   418 // -----------------------------------------------------------------------------
       
   419 //
       
   420 void CPhoneRingingTonePlayerAO::StopPlaying()
       
   421     {
       
   422     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::StopPlaying()" );
       
   423 
       
   424     iTtsToneToBePlayed = EFalse;
       
   425     iTTsTimeOutCounter = 0;
       
   426     iTtsDelayTimer->Cancel();
       
   427     if ( iTtsPlayer )
       
   428         {
       
   429         iTtsPlayer->StopPlaying();
       
   430         delete iTtsPlayer;
       
   431         iTtsPlayer = NULL;
       
   432         }
       
   433     iTimer->Cancel();
       
   434 
       
   435     switch( iTonePlayingStatus )
       
   436         {
       
   437         case EAudioTonePlaying:
       
   438             if( iAudioPlayer )
       
   439                 {
       
   440                 // Commented stopping out, since with this, the screen is jammed
       
   441                 // when REComSession::FinalClose() is reached in 
       
   442                 // CPhoneAudioPlayer's destructor.
       
   443                 // Audio player is stopped anyway in its destructor.
       
   444                 // Fixes EKKI-7WYG2G and JKAN-7XNGQU.
       
   445                 // iAudioPlayer->StopPlaying();                
       
   446                 delete iAudioPlayer;
       
   447                 iAudioPlayer = NULL;
       
   448                 }
       
   449             break;
       
   450         case EDefaultTonePlaying:
       
   451             if ( iDefaultPlayer )
       
   452                 {
       
   453                 iDefaultPlayer->StopPlaying();
       
   454                 delete iDefaultPlayer;
       
   455                 iDefaultPlayer = NULL;
       
   456                 }
       
   457             break;
       
   458         case EBeepOnce:
       
   459             if( iBeepOncePlayer )
       
   460                 {
       
   461                 iBeepOncePlayer->StopPlaying();
       
   462                 delete iBeepOncePlayer;
       
   463                 iBeepOncePlayer = NULL;
       
   464                 }
       
   465             break;
       
   466         case EBackupTonePlaying:
       
   467             if( iBackupPlayer )
       
   468                 {
       
   469                 iBackupPlayer->StopPlaying();
       
   470                 }
       
   471             break;
       
   472         case ESilentTonePlaying:
       
   473             if( iSilentPlayer )
       
   474                 {
       
   475                 iSilentPlayer->StopPlaying();
       
   476                 delete iSilentPlayer;
       
   477                 iSilentPlayer = NULL;
       
   478                 }
       
   479             break;
       
   480         case EUnsecureVoIPTonePlaying:
       
   481             if( iUnsecureVoIPTonePlayer )
       
   482                 {
       
   483                 iUnsecureVoIPTonePlayer->StopPlaying();
       
   484                 delete iUnsecureVoIPTonePlayer;
       
   485                 iUnsecureVoIPTonePlayer = NULL;
       
   486                 }
       
   487             break;
       
   488         case EVideoTonePlaying: // video ringing tone
       
   489         case EPersonalVideoTonePlaying:
       
   490         case ESilentVideoTonePlaying:
       
   491             if ( iBeepOncePlayer != NULL )
       
   492                 {
       
   493                 iBeepOncePlayer->StopPlaying();
       
   494                 delete iBeepOncePlayer;
       
   495                 iBeepOncePlayer = NULL;                    
       
   496                 }
       
   497                 
       
   498             if ( iSilentPlayer != NULL )
       
   499                 {
       
   500                 iSilentPlayer->StopPlaying();
       
   501                 delete iSilentPlayer;
       
   502                 iSilentPlayer = NULL;                    
       
   503                 }    
       
   504             if ( iVideoPlayer )
       
   505                 {
       
   506                 iVideoPlayer->StopVideoRingTone();
       
   507                 }
       
   508             if ( iAudioVideoRingingTone )
       
   509                 {
       
   510                 delete iAudioVideoRingingTone;
       
   511                 iAudioVideoRingingTone = NULL;    
       
   512                 }
       
   513             break;
       
   514         case EIdle:
       
   515             // Do nothing here.
       
   516             return;
       
   517         default:
       
   518             Panic( EPhoneViewCaseNotHandled );
       
   519             break;
       
   520         }
       
   521 
       
   522     iTonePlayingStatus = EIdle;
       
   523     }
       
   524 
       
   525 // -----------------------------------------------------------------------------
       
   526 // CPhoneRingingTonePlayerAO::PlayTtsTone
       
   527 // -----------------------------------------------------------------------------
       
   528 //
       
   529 void CPhoneRingingTonePlayerAO::PlayTtsTone( 
       
   530     const TDesC& aTextToSay, 
       
   531     TInt aVolume,
       
   532     TProfileRingingType aRingingType )
       
   533     {
       
   534     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayTtsTone()" );
       
   535     __PHONELOG2( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayTtsTone - aVolume(%d), aRingingType(%d)",
       
   536         aVolume, aRingingType );
       
   537 
       
   538     if ( iTtsPlayer )
       
   539         {
       
   540         delete iTtsPlayer;
       
   541         iTtsPlayer = NULL;
       
   542         }
       
   543 
       
   544     //Set ringingtype for Tts.
       
   545     iTtsRingingType = aRingingType;
       
   546     iTtsVolume = aVolume;
       
   547 
       
   548     // TTS should be a bit louder, than main component.
       
   549     // No need to check for overflows, they are handled in SET_PHONE_VOLUME macro.
       
   550     
       
   551     TPtrC ttsHeader( KPhoneTtsHeader );
       
   552     HBufC* preparedString = 
       
   553         HBufC::New( aTextToSay.Length() + ttsHeader.Length() );
       
   554 
       
   555     if ( preparedString )
       
   556         {
       
   557         TPtr pPreparedString = preparedString->Des();
       
   558         pPreparedString.Append( ttsHeader );
       
   559         pPreparedString.Append( aTextToSay );
       
   560            
       
   561         __PHONELOG1( 
       
   562             EBasic, 
       
   563             EPhoneUIView, 
       
   564             "CPhoneRingingTonePlayerAO::PlayTtsTone - about to say %S",
       
   565             &pPreparedString );
       
   566 
       
   567         TRAPD( 
       
   568             error, 
       
   569             iTtsPlayer = CPhoneAudioPlayer::NewTtsL( 
       
   570                *preparedString, 
       
   571                KAudioPriorityPhoneCall, 
       
   572                KAudioPrefTextToSpeechCallHardCoded,
       
   573                *this, 
       
   574                EPlayerTts ) );
       
   575         if( error == KErrNone ) 
       
   576             {
       
   577             // To be played when default or personal tone will be played
       
   578             iTtsToneToBePlayed = ETrue;
       
   579             }
       
   580         __PHONELOG2(
       
   581             EBasic,
       
   582             EPhoneUIView,
       
   583             "CPhoneRingingTonePlayerAO::PlayTtsTone - error(%d), iTtsPhoneToBePlayed(%d)",
       
   584             error, 
       
   585             iTtsToneToBePlayed );
       
   586 
       
   587         delete preparedString;  
       
   588         }
       
   589     }
       
   590 
       
   591 // -----------------------------------------------------------------------------
       
   592 // CPhoneRingingTonePlayerAO::HandleAudioPlayerError
       
   593 // -----------------------------------------------------------------------------
       
   594 //
       
   595 void CPhoneRingingTonePlayerAO::HandleAudioPlayerError( 
       
   596     TPhoneAudioPlayerErrorEvent /*aEvent*/, 
       
   597     TInt aError, 
       
   598     TInt /*aId*/ )
       
   599     {
       
   600     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleAudioPlayerError()" );
       
   601     // This is called from CPhoneAudioPlayer - we do not 
       
   602     // want to delete instances from which this method
       
   603     // is called.
       
   604     
       
   605      __PHONELOG1( EBasic, 
       
   606                  EPhoneUIView, 
       
   607                  "CPhoneRingingTonePlayerAO::HandleAudioPlayerError - error (%d)",
       
   608                  aError ); 
       
   609 
       
   610     const TBool deleteAll = ( aError == KErrServerTerminated );
       
   611 
       
   612     if ( deleteAll )
       
   613         {
       
   614         // KErrServerTerminated is considered as fatal error. So we
       
   615         // need to delete everything.
       
   616 
       
   617         for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
       
   618             {
       
   619             DeletePlayerAsync( static_cast< TPlayerId >( i ) );
       
   620             }
       
   621 
       
   622         // Now all member audio players point to NULL, except
       
   623         // those players in iAsyncDeletePlayers. Recreate 
       
   624         // players.
       
   625 
       
   626         ConstructPlayers(); // Ignore error code.
       
   627         }
       
   628 
       
   629     iTimer->Cancel();
       
   630     DoHandlePlayerError( !deleteAll, EFalse );
       
   631     }
       
   632 
       
   633 // -----------------------------------------------------------------------------
       
   634 // CPhoneRingingTonePlayerAO::HandleAudioPlayerInitComplete
       
   635 // -----------------------------------------------------------------------------
       
   636 //
       
   637 void CPhoneRingingTonePlayerAO::HandleAudioPlayerInitComplete( TInt aId )
       
   638     {
       
   639     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleAudioPlayerInitComplete()" );
       
   640     // This is called from CPhoneAudioPlayer - we do not 
       
   641     // want to delete instances from which this method
       
   642     // is called. 
       
   643 
       
   644     if ( iTonePlayingStatus == EAudioTonePlaying && aId == EPlayerAudio ||
       
   645         iTonePlayingStatus == EDefaultTonePlaying && aId == EPlayerDefault )
       
   646         {
       
   647         iTimer->Cancel();
       
   648         }
       
   649    
       
   650     if( iTtsToneToBePlayed && ( aId != EPlayerTts ) )  
       
   651         {
       
   652         // Start TTS timer just before "normal ringtone component" starts 
       
   653         // playing, i.e. after init completed.
       
   654         if ( iTtsDelayIndex < iTtsDelaysCount )  
       
   655             {
       
   656             if ( !iTtsDelayTimer->IsActive() )
       
   657                 {
       
   658                 // There are TTS iterations to be played yet.
       
   659                 iTtsDelayTimer->After( 
       
   660                     KPhoneTtsDelays[iTtsDelayIndex], 
       
   661                     TCallBack( HandleTtsDelayTimeout, this ) );
       
   662                 }
       
   663             }
       
   664         }
       
   665     }
       
   666 
       
   667 // -----------------------------------------------------------------------------
       
   668 // CPhoneRingingTonePlayerAO::HandlePlayingComplete
       
   669 // -----------------------------------------------------------------------------
       
   670 //
       
   671 void CPhoneRingingTonePlayerAO::HandlePlayingComplete( TInt aId )
       
   672     {
       
   673     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete()" );
       
   674     // This is called from CPhoneAudioPlayer - we do not 
       
   675     // want to delete instances from which this method
       
   676     // is called. 
       
   677 
       
   678     __PHONELOG2(
       
   679         EBasic, 
       
   680         EPhoneUIView,
       
   681         "CPhoneRingingTonePlayerAO::HandlePlayingComplete - aId(%d), iRingingType(%d)",
       
   682         aId,
       
   683         iRingingType );
       
   684     __PHONELOG2(
       
   685         EBasic, 
       
   686         EPhoneUIView,
       
   687         "CPhoneRingingTonePlayerAO::HandlePlayingComplete - iTtsToneToBePlayed(%d), iTtsDelayIndex(%d)",
       
   688         iTtsToneToBePlayed,
       
   689         iTtsDelayIndex );
       
   690 
       
   691     if ( aId == EPlayerTts ) 
       
   692         {
       
   693         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - resuming after TTS" );
       
   694 
       
   695         // TTS playing complete, normal tone player should volume up.
       
   696         if ( ( iTtsToneToBePlayed ) && ( ++iTtsDelayIndex < iTtsDelaysCount ) )  
       
   697             {
       
   698             __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - resuming after TTS first time" );
       
   699             //Callers name is said once. increase tone player volume.    
       
   700             SolveNewVolumeAndRamptime( ESaidOnce );
       
   701             
       
   702             if ( !iTtsDelayTimer->IsActive() )
       
   703                 {
       
   704                 // There are TTS iterations to be played yet.
       
   705                 iTtsDelayTimer->After( KPhoneTtsDelays[iTtsDelayIndex], 
       
   706                     TCallBack( HandleTtsDelayTimeout,this ) );
       
   707                 }
       
   708             }
       
   709         else
       
   710             {
       
   711             __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - resuming after TTS second time" );
       
   712             SolveNewVolumeAndRamptime( ESaidTwice );
       
   713             }
       
   714         
       
   715         // No further processing. All TTS player-related events are not 
       
   716         // "real" ringtone playing completions.
       
   717         return;
       
   718         }
       
   719     //Case: RingintonePlayer has completed playing with following set: ring once and
       
   720     // TTS is activated   
       
   721     else if ( iRingingType == EProfileRingingTypeRingingOnce && 
       
   722         iTtsToneToBePlayed )   
       
   723         {
       
   724         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - ring once and TTS" );
       
   725          if ( iTtsDelayIndex < iTtsDelaysCount )
       
   726             {
       
   727             ReStartRingingTonePlayer();
       
   728             //Do not destroy player yet. Return.
       
   729             return;            
       
   730             }
       
   731         }
       
   732     //Case: RingintonePlayer has completed playing with following set: ringing 
       
   733     //and TTS is activated. We need  to restart ringintoneplayer and new TTS
       
   734     //iterations are required.
       
   735     else if ( iRingingType == EProfileRingingTypeRinging && iTtsToneToBePlayed )
       
   736         {  
       
   737         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - ringing and TTS" );
       
   738         if ( iTtsDelayIndex == iTtsDelaysCount )
       
   739             {
       
   740             //Case: Ringingtype is EProfileRingingTypeRinging. New TTS
       
   741             //iterations are required.    
       
   742             __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - need to restart TTS sequence" );
       
   743             //TTS has completed its iterations,set index to zero. 
       
   744             iTtsDelayIndex = 0;
       
   745             if ( !iTtsDelayTimer->IsActive() )
       
   746                 {
       
   747                 //Restart TTS sequence
       
   748                 iTtsDelayTimer->After( 
       
   749                     KPhoneTtsDelays[iTtsDelayIndex], 
       
   750                     TCallBack( HandleTtsDelayTimeout, this ) ); 
       
   751                 }
       
   752             }
       
   753         
       
   754         ReStartRingingTonePlayer();
       
   755         //Do not destroy player yet. Return
       
   756         return;  
       
   757         }
       
   758 
       
   759     __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - delete player - iTonePlayingStatus(%d)",
       
   760         iTonePlayingStatus );    
       
   761     switch( iTonePlayingStatus )
       
   762         {
       
   763         case EAudioTonePlaying:
       
   764             DeletePlayerAsync( EPlayerAudio );
       
   765             iAudioPlayer = NULL;
       
   766             break;
       
   767             
       
   768         case EDefaultTonePlaying:
       
   769             DeletePlayerAsync( EPlayerDefault );
       
   770             iDefaultPlayer = NULL;
       
   771             break;
       
   772             
       
   773         case ESilentTonePlaying:
       
   774             DeletePlayerAsync( EPlayerSilent );
       
   775             iSilentPlayer = NULL;
       
   776             break;
       
   777 
       
   778         case EUnsecureVoIPTonePlaying:
       
   779             DeletePlayerAsync( EPlayerUnsecureVoIP );
       
   780             iUnsecureVoIPTonePlayer = NULL;
       
   781             break;
       
   782 
       
   783         case EBeepOnce:
       
   784             DeletePlayerAsync( EPlayerBeepOnce );
       
   785             iBeepOncePlayer = NULL;
       
   786             break;
       
   787             
       
   788         case EVideoTonePlaying:
       
   789         case EPersonalVideoTonePlaying:
       
   790             DeletePlayerAsync( EPlayerBeepOnce );
       
   791             iBeepOncePlayer = NULL;
       
   792             return; // beep once + video
       
   793             
       
   794         case EBackupTonePlaying:
       
   795             break;
       
   796             
       
   797         default:
       
   798             Panic( EPhoneViewCaseNotHandled );
       
   799             break;
       
   800         }
       
   801 
       
   802     iTonePlayingStatus = EIdle;
       
   803     }
       
   804 
       
   805 // -----------------------------------------------------------------------------
       
   806 // CPhoneRingingTonePlayerAO::HandleTimeOutL
       
   807 // -----------------------------------------------------------------------------
       
   808 //
       
   809 void CPhoneRingingTonePlayerAO::HandleTimeOutL()
       
   810     {
       
   811     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleTimeOutL()" );
       
   812 
       
   813     // Guarding timer for startup has expired
       
   814     if ( iTonePlayingStatus == EVideoTonePlaying ||
       
   815        iTonePlayingStatus == ESilentVideoTonePlaying ||   
       
   816        iTonePlayingStatus == EPersonalVideoTonePlaying )
       
   817       {
       
   818         iVideoPlayer->CancelVideoRingTone(); // close video ringtone display
       
   819        PlayDefaultTone( iVolume, iRingingType );
       
   820       }
       
   821     else
       
   822       {
       
   823       // Start new audio player synchronously.
       
   824       DoHandlePlayerError( ETrue, ETrue );
       
   825       }			
       
   826 		
       
   827     }
       
   828 
       
   829 // -----------------------------------------------------------------------------
       
   830 // CPhoneRingingTonePlayerAO::DoHandlePlayerError
       
   831 // -----------------------------------------------------------------------------
       
   832 //
       
   833 void CPhoneRingingTonePlayerAO::DoHandlePlayerError(
       
   834     TBool aDelete,
       
   835     TBool aSync )
       
   836     {
       
   837     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandlePlayerError()" );
       
   838     switch ( iTonePlayingStatus )
       
   839         {
       
   840         case EAudioTonePlaying:
       
   841             if ( aDelete )
       
   842                 {
       
   843                 if ( aSync )
       
   844                     {
       
   845                     delete iAudioPlayer;
       
   846                     }
       
   847                 else
       
   848                     {
       
   849                     DeletePlayerAsync( EPlayerAudio );
       
   850                     }
       
   851 
       
   852                 iAudioPlayer = NULL;
       
   853                 }
       
   854 
       
   855 #ifdef __WINS__
       
   856             PlayAudioRingTone( iVolume, iRingingType );
       
   857             iTonePlayingStatus = EDefaultTonePlaying;
       
   858 #else
       
   859             PlayDefaultTone( iVolume, iRingingType );
       
   860 #endif
       
   861             break;
       
   862         case EDefaultTonePlaying:
       
   863             if ( aDelete )
       
   864                 {
       
   865                 if ( aSync )
       
   866                     {
       
   867                     delete iDefaultPlayer;
       
   868                     }
       
   869                 else
       
   870                     {
       
   871                     DeletePlayerAsync( EPlayerDefault );
       
   872                     }
       
   873 
       
   874                 iDefaultPlayer = NULL;
       
   875                 }
       
   876 
       
   877             PlayBackupTone( iVolume, iRingingType );
       
   878             break;
       
   879         case ESilentTonePlaying:
       
   880         case EBeepOnce:
       
   881         case EBackupTonePlaying:
       
   882             break;
       
   883         default:
       
   884             break;
       
   885         }
       
   886     }
       
   887 
       
   888 // -----------------------------------------------------------------------------
       
   889 // CPhoneRingingTonePlayerAO::PlayDefaultTone
       
   890 // -----------------------------------------------------------------------------
       
   891 //
       
   892 void CPhoneRingingTonePlayerAO::PlayDefaultTone( 
       
   893     TInt aVolume, 
       
   894     TProfileRingingType aRingingType )
       
   895     {
       
   896     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone()" );
       
   897 
       
   898     if( aRingingType == EProfileRingingTypeSilent ||
       
   899         aRingingType == EProfileRingingTypeBeepOnce )
       
   900         {
       
   901         return;
       
   902         }
       
   903         
       
   904     if ( !iDefaultRingingTone )
       
   905         {
       
   906         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone - default tone does not exist, play backup..." );
       
   907         PlayBackupTone( aVolume, aRingingType );
       
   908         return;    
       
   909         }
       
   910 
       
   911     // Construct player.
       
   912     if ( !iDefaultPlayer )
       
   913         {
       
   914         iDefaultPlayer = ConstructTonePlayer( 
       
   915             *iDefaultRingingTone, 
       
   916             EPlayerDefault );
       
   917         if ( !iTimer->IsActive() )
       
   918             {
       
   919             iTimer->After( KPhoneMaxRingingWaiting, this );
       
   920             }
       
   921         }
       
   922 
       
   923     // Start playing.
       
   924     if ( !iDefaultPlayer )
       
   925         {
       
   926         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone - player not constructed, play backup..." );
       
   927         iTimer->Cancel();
       
   928         PlayBackupTone( aVolume, aRingingType );
       
   929         }
       
   930     else
       
   931         {
       
   932         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone - play" );
       
   933         iVolume = aVolume;
       
   934         iRingingType = aRingingType;
       
   935         iTonePlayingStatus = EDefaultTonePlaying;
       
   936         iDefaultPlayer->Play( 
       
   937             ConvertRingingType( aRingingType ), aVolume, iTtsToneToBePlayed );
       
   938         }
       
   939 
       
   940     }
       
   941 
       
   942 // -----------------------------------------------------------------------------
       
   943 // CPhoneRingingTonePlayerAO::PlayBackupTone
       
   944 // -----------------------------------------------------------------------------
       
   945 //
       
   946 void CPhoneRingingTonePlayerAO::PlayBackupTone( 
       
   947     TInt aVolume, 
       
   948     TProfileRingingType aRingingType )
       
   949     {
       
   950     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayBackupTone()" );
       
   951     __ASSERT_DEBUG( iBackupPlayer, Panic( EPhoneViewGeneralError ) );
       
   952 
       
   953     if ( !iBackupPlayer )
       
   954         {
       
   955         ConstructPlayers();
       
   956         }
       
   957 
       
   958     if ( iBackupPlayer )
       
   959         {
       
   960         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayBackupTone - play" );
       
   961         iTonePlayingStatus = EBackupTonePlaying;
       
   962 
       
   963         // Cease playing text-to-speech, if necessary
       
   964         iTtsToneToBePlayed = EFalse;
       
   965         iTTsTimeOutCounter = 0;
       
   966         iTtsDelayTimer->Cancel();
       
   967         if ( iTtsPlayer )
       
   968             {
       
   969             iTtsPlayer->StopPlaying();
       
   970             delete iTtsPlayer;
       
   971             iTtsPlayer = NULL;
       
   972             }
       
   973 
       
   974         iBackupPlayer->Play( 
       
   975             ConvertRingingType( aRingingType ), aVolume, EFalse );        
       
   976         }
       
   977     }
       
   978 
       
   979 // -----------------------------------------------------------------------------
       
   980 // CPhoneRingingTonePlayerAO::ConstructTonePlayer
       
   981 // -----------------------------------------------------------------------------
       
   982 //
       
   983 CPhoneAudioPlayer* CPhoneRingingTonePlayerAO::ConstructTonePlayer( 
       
   984     const CPhoneRingingTone& aRingingTone,
       
   985     TInt aId )
       
   986     {
       
   987     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructTonePlayer()" );
       
   988     return CPhoneAudioPlayer::New(
       
   989         aRingingTone, 
       
   990         KAudioPriorityPhoneCall, 
       
   991         KAudioPrefIncomingCall,
       
   992         *this, 
       
   993         aId,
       
   994         iMdaServer,
       
   995         aId == EPlayerDefault ? EFalse : iExtSecNeeded );
       
   996     }
       
   997 
       
   998 // -----------------------------------------------------------------------------
       
   999 // CPhoneRingingTonePlayerAO::ConvertRingingType
       
  1000 // -----------------------------------------------------------------------------
       
  1001 //
       
  1002 CPhoneAudioPlayer::TRingingType CPhoneRingingTonePlayerAO::ConvertRingingType(
       
  1003     TProfileRingingType aRingingType )
       
  1004     {
       
  1005     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConvertRingingType()" );
       
  1006 
       
  1007     CPhoneAudioPlayer::TRingingType ringingType = 
       
  1008         CPhoneAudioPlayer::ETypeRinging;
       
  1009     switch ( aRingingType )
       
  1010         {
       
  1011         case EProfileRingingTypeRinging:
       
  1012             ringingType = CPhoneAudioPlayer::ETypeRinging;
       
  1013             break;
       
  1014 
       
  1015         case EProfileRingingTypeAscending:
       
  1016             ringingType = CPhoneAudioPlayer::ETypeAscending;
       
  1017             break;
       
  1018 
       
  1019         case EProfileRingingTypeRingingOnce:
       
  1020             ringingType = CPhoneAudioPlayer::ETypeRingingOnce;
       
  1021             break;
       
  1022 
       
  1023         default:
       
  1024             break;
       
  1025         }
       
  1026     return ringingType;
       
  1027     }
       
  1028 
       
  1029 // -----------------------------------------------------------------------------
       
  1030 // CPhoneRingingTonePlayerAO::ConvertVideoRingingType
       
  1031 // -----------------------------------------------------------------------------
       
  1032 //
       
  1033 MPhoneVideoPlayer::TPlayMode CPhoneRingingTonePlayerAO::ConvertVideoRingingType(
       
  1034     TProfileRingingType aRingingType )
       
  1035     {
       
  1036     MPhoneVideoPlayer::TPlayMode playMode;
       
  1037         
       
  1038     switch ( aRingingType )
       
  1039         {
       
  1040         case EProfileRingingTypeAscending:
       
  1041             playMode = MPhoneVideoPlayer::EPlayAscending;
       
  1042             break;
       
  1043         case EProfileRingingTypeRingingOnce:
       
  1044             playMode = MPhoneVideoPlayer::EPlayOnce;
       
  1045             break;
       
  1046         case EProfileRingingTypeRinging:
       
  1047         default:
       
  1048             playMode = MPhoneVideoPlayer::EPlayInLoop;
       
  1049             break;
       
  1050         }
       
  1051     
       
  1052     return playMode;
       
  1053     }
       
  1054 
       
  1055 
       
  1056 // -----------------------------------------------------------------------------
       
  1057 // CPhoneRingingTonePlayerAO::ConstructPlayers
       
  1058 // -----------------------------------------------------------------------------
       
  1059 //
       
  1060 TInt CPhoneRingingTonePlayerAO::ConstructPlayers()
       
  1061     {
       
  1062     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructPlayers()" );
       
  1063     TRAPD( err, ConstructPlayersL() );
       
  1064     return err;
       
  1065     }
       
  1066 
       
  1067 // -----------------------------------------------------------------------------
       
  1068 // CPhoneRingingTonePlayerAO::ConstructPlayersL
       
  1069 // -----------------------------------------------------------------------------
       
  1070 //
       
  1071 void CPhoneRingingTonePlayerAO::ConstructPlayersL()
       
  1072     {
       
  1073     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructPlayersL()" );
       
  1074 
       
  1075     // Construct players.
       
  1076     if ( !iMdaServer )
       
  1077         {
       
  1078         iMdaServer = CMdaServer::NewL();
       
  1079         }
       
  1080 
       
  1081     // Construct Backup player.
       
  1082     if ( !iBackupPlayer )
       
  1083         {
       
  1084         TFileName defaultSoundFile( KDriveZ );
       
  1085         defaultSoundFile.Append( KPhoneDefaultSoundFile );
       
  1086         iBackupPlayer = CPhoneAudioPlayer::NewL( 
       
  1087             defaultSoundFile,
       
  1088             KAudioPriorityPhoneCall,
       
  1089             KAudioPrefIncomingCall,
       
  1090             *this,
       
  1091             EPlayerBackup,
       
  1092             iMdaServer 
       
  1093             );
       
  1094         }
       
  1095     }
       
  1096 
       
  1097 // -----------------------------------------------------------------------------
       
  1098 // CPhoneRingingTonePlayerAO::ConstructSequencePlayer
       
  1099 // -----------------------------------------------------------------------------
       
  1100 //
       
  1101 void CPhoneRingingTonePlayerAO::ConstructSequencePlayer( TPlayerId aId )
       
  1102     {
       
  1103     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructSequencePlayer()" );
       
  1104 
       
  1105     // Construct players.
       
  1106     TRAPD( err, ConstructSequencePlayerL( aId ) );
       
  1107     if ( err )
       
  1108         {
       
  1109         __PHONELOG1( EBasic, EPhoneUIView, 
       
  1110         "CPhoneRingingTonePlayerAO::ConstructSequencePlayer - err(%d)", err );    
       
  1111         }
       
  1112     }
       
  1113 
       
  1114 // -----------------------------------------------------------------------------
       
  1115 // CPhoneRingingTonePlayerAO::ConstructSequencePlayerL
       
  1116 // -----------------------------------------------------------------------------
       
  1117 //
       
  1118 void CPhoneRingingTonePlayerAO::ConstructSequencePlayerL( TPlayerId aId )
       
  1119     {
       
  1120     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructSequencePlayerL()" );
       
  1121     // Construct beep once player
       
  1122     if ( aId == EPlayerBeepOnce )
       
  1123         {
       
  1124 #ifdef __WINS__    
       
  1125         TParse* fp = new (ELeave) TParse();
       
  1126         fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
       
  1127         TFileName fileName( fp->FullName() );
       
  1128         delete fp;
       
  1129 
       
  1130         iBeepOncePlayer = CPhoneAudioPlayer::NewL(
       
  1131             fileName, 
       
  1132             KAudioPriorityPhoneCall,
       
  1133             KAudioPrefIncomingCall,
       
  1134             *this, 
       
  1135             EPlayerBeepOnce );
       
  1136 #else
       
  1137         iBeepOncePlayer = CPhoneAudioPlayer::NewSeqL(
       
  1138             KPhoneBeepSequence(),
       
  1139             KAudioPriorityPhoneCall,
       
  1140             KAudioPrefIncomingCall,
       
  1141             *this, 
       
  1142             EPlayerBeepOnce );
       
  1143 #endif // __WINS__
       
  1144         }
       
  1145 
       
  1146     // Construct Silent Player.
       
  1147     else if ( aId == EPlayerSilent )
       
  1148         {
       
  1149 #ifdef __WINS__
       
  1150         TParse* fp = new (ELeave) TParse();
       
  1151         fp->Set( KPhoneSilentSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
       
  1152         TFileName fileName( fp->FullName() );
       
  1153         delete fp;
       
  1154 
       
  1155         iSilentPlayer = CPhoneAudioPlayer::NewL( 
       
  1156             fileName, 
       
  1157             KAudioPriorityPhoneCall,
       
  1158             KAudioPrefIncomingCall,
       
  1159             *this, 
       
  1160             EPlayerSilent );
       
  1161 #else
       
  1162         iSilentPlayer = CPhoneAudioPlayer::NewSeqL(
       
  1163             KPhoneNoSoundSequence(),
       
  1164             KAudioPriorityPhoneCall,
       
  1165             KAudioPrefIncomingCall,
       
  1166             *this,
       
  1167             EPlayerSilent );
       
  1168 #endif // __WINS__
       
  1169         }        
       
  1170     
       
  1171     else if ( aId == EPlayerUnsecureVoIP )
       
  1172         {
       
  1173 #ifdef __WINS__
       
  1174         TParse* fp = new (ELeave) TParse();
       
  1175         fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
       
  1176         TFileName fileName( fp->FullName() );
       
  1177         delete fp;
       
  1178 
       
  1179         iUnsecureVoIPTonePlayer = CPhoneAudioPlayer::NewL( 
       
  1180             fileName, 
       
  1181             KAudioPrioritySpecialInformationTone,
       
  1182             KAudioPrefSpecialInformation,
       
  1183             *this, 
       
  1184             EPlayerUnsecureVoIP );
       
  1185 #else
       
  1186         iUnsecureVoIPTonePlayer = CPhoneAudioPlayer::NewSeqL(
       
  1187             KPhoneUnsecureVoIPCall(),
       
  1188             KAudioPrioritySpecialInformationTone,
       
  1189             KAudioPrefSpecialInformation,
       
  1190             *this,
       
  1191             EPlayerUnsecureVoIP );
       
  1192 #endif // __WINS__
       
  1193         }
       
  1194     }
       
  1195 
       
  1196 // -----------------------------------------------------------------------------
       
  1197 // CPhoneRingingTonePlayerAO::CleanupPlayers
       
  1198 // -----------------------------------------------------------------------------
       
  1199 //
       
  1200 void CPhoneRingingTonePlayerAO::CleanupPlayers()
       
  1201     {
       
  1202     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CleanupPlayers()" );
       
  1203 
       
  1204     delete iAudioPlayer;
       
  1205     iAudioPlayer = NULL;
       
  1206 
       
  1207     delete iDefaultPlayer;
       
  1208     iDefaultPlayer = NULL;
       
  1209 
       
  1210     delete iBeepOncePlayer;
       
  1211     iBeepOncePlayer = NULL;
       
  1212 
       
  1213     delete iSilentPlayer;
       
  1214     iSilentPlayer = NULL;
       
  1215     
       
  1216     delete iUnsecureVoIPTonePlayer;
       
  1217     iUnsecureVoIPTonePlayer = NULL;
       
  1218 
       
  1219     delete iBackupPlayer;
       
  1220     iBackupPlayer = NULL;
       
  1221       
       
  1222     delete iMdaServer;
       
  1223     iMdaServer = NULL;
       
  1224     }
       
  1225 
       
  1226 // -----------------------------------------------------------------------------
       
  1227 // CPhoneRingingTonePlayerAO::DeletePlayerAsync
       
  1228 // -----------------------------------------------------------------------------
       
  1229 //
       
  1230 void CPhoneRingingTonePlayerAO::DeletePlayerAsync( TPlayerId aPlayer )
       
  1231     {
       
  1232     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DeletePlayerAsync()" );
       
  1233     __ASSERT_DEBUG( aPlayer >= EPlayerFirst && aPlayer < iAsyncDeletePlayers.Count(),
       
  1234         Panic( EPhoneViewInvariant ) );
       
  1235         
       
  1236     // Player is not deleted here, but in RunL.
       
  1237     Cancel();
       
  1238 
       
  1239     if ( iAsyncDeletePlayers[ aPlayer ] ) 
       
  1240         {
       
  1241         delete iAsyncDeletePlayers[ aPlayer ];
       
  1242         iAsyncDeletePlayers[ aPlayer ] = NULL;
       
  1243         }
       
  1244 
       
  1245     CPhoneAudioPlayer** players[] =
       
  1246         {
       
  1247         &iAudioPlayer,
       
  1248         &iBeepOncePlayer,
       
  1249         &iSilentPlayer,
       
  1250         &iUnsecureVoIPTonePlayer,
       
  1251         &iDefaultPlayer,
       
  1252         &iBackupPlayer,
       
  1253         &iTtsPlayer
       
  1254         };
       
  1255 
       
  1256     __ASSERT_DEBUG( iAsyncDeletePlayers.Count() > aPlayer, Panic( EPhoneUtilsIndexOutOfBounds ) );
       
  1257     iAsyncDeletePlayers[ aPlayer ] = 
       
  1258         *(players[ aPlayer ]);
       
  1259     *(players[ aPlayer ]) = NULL;
       
  1260 
       
  1261     iState = EDeletingAudioPlayer;
       
  1262 
       
  1263     TRequestStatus* status = &iStatus;
       
  1264     User::RequestComplete( status, KErrNone );
       
  1265     SetActive();
       
  1266     }
       
  1267 
       
  1268 // -----------------------------------------------------------------------------
       
  1269 // CPhoneRingingTonePlayerAO::RunL
       
  1270 // -----------------------------------------------------------------------------
       
  1271 //
       
  1272 void CPhoneRingingTonePlayerAO::RunL()
       
  1273     {
       
  1274     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::RunL()" );
       
  1275 
       
  1276     switch ( iState )
       
  1277         {
       
  1278         case EDeletingAudioPlayer:
       
  1279             {
       
  1280             for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
       
  1281                 {
       
  1282                 delete iAsyncDeletePlayers[ i ];
       
  1283                 iAsyncDeletePlayers[ i ] = NULL;
       
  1284                 }
       
  1285             }
       
  1286             break;
       
  1287 
       
  1288       case EPlayingDefaultVideo:
       
  1289             {
       
  1290             PlayAudioRingTone( iVolume, iRingingType );
       
  1291             }
       
  1292             break;
       
  1293 
       
  1294         case EIdleState:  
       
  1295         default:
       
  1296             break;
       
  1297         } // switch iState
       
  1298     
       
  1299     iState = EIdleState;
       
  1300     }
       
  1301 
       
  1302 // -----------------------------------------------------------------------------
       
  1303 // CPhoneRingingTonePlayerAO::DoCancel
       
  1304 // -----------------------------------------------------------------------------
       
  1305 //
       
  1306 void CPhoneRingingTonePlayerAO::DoCancel()
       
  1307     {
       
  1308     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoCancel()" );
       
  1309     // Request is completed immediately before SetActive.
       
  1310     }
       
  1311     
       
  1312 // -----------------------------------------------------------------------------
       
  1313 // CPhoneRingingTonePlayerAO::HandleTtsDelayTimeout
       
  1314 // -----------------------------------------------------------------------------
       
  1315 //
       
  1316 TInt CPhoneRingingTonePlayerAO::HandleTtsDelayTimeout( TAny* object )
       
  1317     {
       
  1318     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleTtsDelayTimeout()" );
       
  1319     static_cast<CPhoneRingingTonePlayerAO*>( object )->
       
  1320         DoHandleTtsDelayTimeout();
       
  1321     return KErrNone;
       
  1322     }
       
  1323         
       
  1324 // -----------------------------------------------------------------------------
       
  1325 // CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout
       
  1326 // -----------------------------------------------------------------------------
       
  1327 //
       
  1328 void CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout()
       
  1329     {
       
  1330     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout()" );
       
  1331     __PHONELOG2( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - iTtsRingingType(%d), iTTsTimeOutCounter(%d)",
       
  1332         iTtsRingingType, iTTsTimeOutCounter );
       
  1333 
       
  1334     CPhoneAudioPlayer* currPlayer = NULL;
       
  1335     currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();        
       
  1336     
       
  1337     if ( !currPlayer )
       
  1338         {
       
  1339         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - null current player" );
       
  1340         return;
       
  1341         }
       
  1342     TInt volume( 0 );
       
  1343      //Ascending case. TTs player needs to be ascending.
       
  1344     if ( iTtsRingingType == EProfileRingingTypeAscending )
       
  1345         {
       
  1346         //Volume needs to be different in different ascending steps
       
  1347         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - play ascending" ); 
       
  1348         if ( !iTTsTimeOutCounter )
       
  1349             {
       
  1350             //We are saying callers name for the first time in ascending mode.
       
  1351             //Say callers name by volume level KTtsVolumeMin.             
       
  1352             volume = KTtsVolumeMin;
       
  1353                 
       
  1354             iTtsPlayer->Play(
       
  1355                 ConvertRingingType( EProfileRingingTypeRingingOnce ),
       
  1356                 volume,
       
  1357                 iTtsToneToBePlayed );
       
  1358             }
       
  1359         else
       
  1360             {
       
  1361             //Checks the case that ringingtone is very quiet. Then do not play
       
  1362             //TTS too loud
       
  1363             volume = iTtsVolume < KTtsVolumeMin ? KTtsVolumeMin : KTtsVolumeAscendingRepeat;     
       
  1364                            
       
  1365             //We are saying callers name for the second time in ascending mode.
       
  1366             //Say callers name by volume level KTtsVolumeAscendingRepeat and decrease current players volume
       
  1367             //to KPlayerVolumeAscendingRepeat. RampTime is zero
       
  1368             currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, 0 );
       
  1369             iTtsPlayer->Play(
       
  1370                 ConvertRingingType( EProfileRingingTypeRingingOnce ),
       
  1371                 volume,
       
  1372                 iTtsToneToBePlayed );
       
  1373             }
       
  1374        
       
  1375         }
       
  1376     else //Normal ringing case.
       
  1377         {
       
  1378         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - play normal" ); 
       
  1379         currPlayer->SetNewVolumeAndRamptime( iTtsVolume-5, 0 );                       
       
  1380         iTtsPlayer->Play(
       
  1381             ConvertRingingType( EProfileRingingTypeRingingOnce ),
       
  1382             iTtsVolume,
       
  1383             iTtsToneToBePlayed );
       
  1384         }
       
  1385       
       
  1386      iTTsTimeOutCounter++;
       
  1387     }
       
  1388     
       
  1389 // -----------------------------------------------------------------------------
       
  1390 // CPhoneRingingTonePlayerAO::AddTtsPlaybackIfNeeded
       
  1391 // -----------------------------------------------------------------------------
       
  1392 //
       
  1393 void CPhoneRingingTonePlayerAO::AddTtsPlaybackIfNeeded( 
       
  1394         TProfileRingingType /*aRingingType*/ )
       
  1395     {
       
  1396     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::AddTtsPlaybackIfNeeded()" );
       
  1397     if ( iTtsToneToBePlayed )   
       
  1398         {
       
  1399         iTtsDelayIndex = 0;
       
  1400         iTtsDelaysCount = KPhoneTtsDelaysCount;
       
  1401         }
       
  1402     }
       
  1403 
       
  1404 // -----------------------------------------------------------------------------
       
  1405 // CPhoneRingingTonePlayerAO::SetVideoPlayer
       
  1406 // -----------------------------------------------------------------------------
       
  1407 //
       
  1408 void CPhoneRingingTonePlayerAO::SetVideoPlayer( 
       
  1409     MPhoneVideoPlayer* aVideoPlayer )
       
  1410     {
       
  1411     iVideoPlayer = aVideoPlayer;    
       
  1412     }
       
  1413 
       
  1414 // -----------------------------------------------------------------------------
       
  1415 // CPhoneRingingTonePlayerAO::PlayVideoRingingTone
       
  1416 // -----------------------------------------------------------------------------
       
  1417 //
       
  1418 void CPhoneRingingTonePlayerAO::PlayVideoRingingTone( 
       
  1419     const CPhoneRingingTone& aRingingTone, 
       
  1420     TInt aVolume, 
       
  1421     TProfileRingingType aRingingType,
       
  1422     TBool aPersonalTone )
       
  1423     {
       
  1424     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayVideoRingingTone()" );
       
  1425     
       
  1426     __ASSERT_DEBUG( iVideoPlayer, Panic( EPhoneViewGeneralError ) );
       
  1427     
       
  1428     iVolume = aVolume;
       
  1429     iRingingType = aRingingType;
       
  1430     TBool startTimer( ETrue );
       
  1431     
       
  1432      // Extended security check
       
  1433     if ( ExtendedSecurity() )
       
  1434         {
       
  1435         if ( !aRingingTone.IsFileInRom() &&
       
  1436              !aRingingTone.IsFileDrmProtected() )
       
  1437             {
       
  1438             __PHONELOG( EBasic, 
       
  1439                         EPhoneUIView, 
       
  1440                         "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - PermissionDenied" );
       
  1441             PlayDefaultTone( iVolume, iRingingType );
       
  1442             return;
       
  1443             }
       
  1444         __PHONELOG( EBasic, 
       
  1445                     EPhoneUIView, 
       
  1446                     "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - ExtSecChk ok" );            
       
  1447             }
       
  1448  
       
  1449     __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayVideoRingingTone - play" );
       
  1450     switch( aRingingType )
       
  1451         {
       
  1452         case EProfileRingingTypeSilent:
       
  1453             iVideoPlayer->PlayVideoRingTone( 
       
  1454                 aRingingTone.FileName(),
       
  1455                 ConvertVideoRingingType( aRingingType ),
       
  1456                 0,
       
  1457                 iArbitraryVideoScaling,
       
  1458                 this );
       
  1459             PlaySilentTone(); // To start vibra, video may fail.
       
  1460             iVolume = 0; // for repeat
       
  1461             startTimer = EFalse; // no need for fallback
       
  1462             break;
       
  1463         
       
  1464         case EProfileRingingTypeBeepOnce:
       
  1465             iVideoPlayer->PlayVideoRingTone( 
       
  1466                 aRingingTone.FileName(),
       
  1467                 ConvertVideoRingingType( aRingingType ),
       
  1468                 0,
       
  1469                 iArbitraryVideoScaling,
       
  1470                 this );
       
  1471             BeepOnce( iVolume );
       
  1472             iVolume = 0; // for repeat
       
  1473             startTimer = EFalse; // no need for fallback
       
  1474             break;
       
  1475         default:
       
  1476             iVideoPlayer->PlayVideoRingTone( 
       
  1477                 aRingingTone.FileName(),
       
  1478                 ConvertVideoRingingType( aRingingType ),
       
  1479                 iVolume,
       
  1480                 iArbitraryVideoScaling,
       
  1481                 this );
       
  1482             break;                
       
  1483         }
       
  1484 
       
  1485     if ( aPersonalTone )
       
  1486         {
       
  1487         iTonePlayingStatus = EPersonalVideoTonePlaying;
       
  1488         }
       
  1489     else
       
  1490         {
       
  1491         iTonePlayingStatus = EVideoTonePlaying;
       
  1492         }
       
  1493 
       
  1494     if ( startTimer && !iTimer->IsActive() )
       
  1495         {
       
  1496         // Start timer to guard video opening
       
  1497         iTimer->After( KPhoneMaxRingingWaiting, this );
       
  1498         }
       
  1499     
       
  1500     }
       
  1501 
       
  1502 // -----------------------------------------------------------------------------
       
  1503 // CPhoneRingingTonePlayerAO::HandleVideoPlayerError
       
  1504 // -----------------------------------------------------------------------------
       
  1505 //
       
  1506 void CPhoneRingingTonePlayerAO::HandleVideoPlayerError( 
       
  1507     TPhoneVideoPlayerErrorEvent /*aEvent*/,
       
  1508     TInt aError )
       
  1509     {
       
  1510     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerError()" );
       
  1511 
       
  1512     if ( aError )
       
  1513         {
       
  1514         __PHONELOG1( EBasic, 
       
  1515                      EPhoneUIView, 
       
  1516                      "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - error (%d)",
       
  1517                      aError );        
       
  1518         }
       
  1519   
       
  1520     // cancel guarding timer
       
  1521     iTimer->Cancel();
       
  1522 
       
  1523     // to remove video window
       
  1524     iVideoPlayer->CancelVideoRingTone();
       
  1525 
       
  1526     if ( iTonePlayingStatus == EPersonalVideoTonePlaying )
       
  1527         {
       
  1528         // Play default tone (active profile tone).
       
  1529         if ( iAudioVideoRingingTone &&
       
  1530              !iAudioVideoRingingTone->IsVideoRingingTone() )
       
  1531             {
       
  1532             PlayAudioRingTone( iVolume, iRingingType );
       
  1533             }
       
  1534         else // audio/video tone is video
       
  1535             {
       
  1536             PlayDefaultVideoAsync();
       
  1537             }
       
  1538         }
       
  1539     else
       
  1540         {
       
  1541         // Play backup tone
       
  1542         PlayDefaultTone( iVolume, iRingingType );
       
  1543         }
       
  1544 
       
  1545     }
       
  1546 
       
  1547 // -----------------------------------------------------------------------------
       
  1548 // CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete
       
  1549 // -----------------------------------------------------------------------------
       
  1550 //
       
  1551 void CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete()
       
  1552     {
       
  1553     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete()" );
       
  1554     
       
  1555     // cancel guarding timer
       
  1556     iTimer->Cancel();
       
  1557     
       
  1558     }
       
  1559 
       
  1560 // -----------------------------------------------------------------------------
       
  1561 // CPhoneRingingTonePlayerAO::HandleVideoPlayerPlayingComplete
       
  1562 // -----------------------------------------------------------------------------
       
  1563 //
       
  1564 void CPhoneRingingTonePlayerAO::HandleVideoPlayerPlayingComplete()
       
  1565     {
       
  1566     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerPlayingComplete()" );
       
  1567     }
       
  1568 
       
  1569 // -----------------------------------------------------------------------------
       
  1570 // CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync
       
  1571 // -----------------------------------------------------------------------------
       
  1572 //
       
  1573 void CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()
       
  1574     {
       
  1575     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()" );    
       
  1576      
       
  1577     Cancel();
       
  1578 
       
  1579     iState = EPlayingDefaultVideo; 
       
  1580 
       
  1581     TRequestStatus* status = &iStatus;
       
  1582     User::RequestComplete( status, KErrNone );
       
  1583     SetActive();
       
  1584     }
       
  1585 
       
  1586 // -----------------------------------------------------------------------------
       
  1587 // CPhoneRingingTonePlayerAO::ExtendedSecurity
       
  1588 // -----------------------------------------------------------------------------
       
  1589 //    
       
  1590 TBool CPhoneRingingTonePlayerAO::ExtendedSecurity() const
       
  1591     {
       
  1592     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ExtendedSecurity()" );
       
  1593     return iExtSecNeeded;        
       
  1594     }
       
  1595 
       
  1596 // -----------------------------------------------------------------------------
       
  1597 // CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime
       
  1598 // -----------------------------------------------------------------------------
       
  1599 //
       
  1600 void CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime( TTtsStatus aStatus )
       
  1601     {
       
  1602     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime()" );
       
  1603 
       
  1604     CPhoneAudioPlayer* currPlayer = NULL;
       
  1605     currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();
       
  1606     if ( !currPlayer )
       
  1607         {
       
  1608         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - null current player" );
       
  1609         return;
       
  1610         }
       
  1611     TInt ramptime( 0 );
       
  1612     //Here is handled the cases when Callers name is said. Sequence is:
       
  1613     //3 sec. tone + name + 4 sec. tone + name +the tone until the end. 
       
  1614     switch ( aStatus )
       
  1615         {
       
  1616         case ESaidOnce:
       
  1617             if ( iTtsRingingType == EProfileRingingTypeAscending )
       
  1618                 {
       
  1619                 //The ramptime could be ( 4 )* KPhoneTtsAscendingStep but now
       
  1620                 //we are setting this to 0 because when Say callers name is said
       
  1621                 //for first time: play ringing tone on level 3 for four secs.
       
  1622                 ramptime = 0;
       
  1623                 __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said once ascending - ramptime(%d)",
       
  1624                     ramptime ); 
       
  1625                 currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, ramptime );
       
  1626                 }
       
  1627             else
       
  1628                 {
       
  1629                  //Normal ringingtone case. Adjust volume back to profile level. 
       
  1630                 __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said once normal - ramptime(%d)",
       
  1631                     ramptime ); 
       
  1632                 currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 );    
       
  1633                 }
       
  1634              break;
       
  1635         
       
  1636         case ESaidTwice:
       
  1637             if ( iTtsRingingType == EProfileRingingTypeAscending )
       
  1638                 {
       
  1639                 TInt vol = iTtsVolume;
       
  1640                 if ( vol > KPlayerVolumeAscendingRepeat )
       
  1641                     {
       
  1642                     vol = vol - KTtsVolumeAscendingDecrease;
       
  1643                     }
       
  1644                           
       
  1645                 //TTS playing complete for second time. increase tone player volume.
       
  1646                 ramptime = ( vol )*KPhoneTtsAscendingStep;
       
  1647                 __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said twice ascending - ramptime(%d)",
       
  1648                     ramptime ); 
       
  1649                 currPlayer->SetNewVolumeAndRamptime( iTtsVolume, ramptime );
       
  1650                 }
       
  1651             else
       
  1652                 {
       
  1653                  //Normal ringingtone case. Adjust volume back to profile level. 
       
  1654                 __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said twice normal - ramptime(%d)",
       
  1655                     ramptime ); 
       
  1656                 currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 );
       
  1657                 }
       
  1658             break;
       
  1659         
       
  1660         default:
       
  1661             break;
       
  1662         }
       
  1663     }
       
  1664 
       
  1665 
       
  1666 // -----------------------------------------------------------------------------
       
  1667 // CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs
       
  1668 // -----------------------------------------------------------------------------
       
  1669 //    
       
  1670 CPhoneAudioPlayer* 
       
  1671 CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs()
       
  1672     {    
       
  1673     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs()" );
       
  1674 
       
  1675     if( iAudioPlayer )
       
  1676         {
       
  1677         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - audio player" ); 
       
  1678         return iAudioPlayer;         
       
  1679         }
       
  1680     else if ( iDefaultPlayer )
       
  1681         {
       
  1682         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - default player" ); 
       
  1683         return iDefaultPlayer;     
       
  1684         }
       
  1685     else if( iBackupPlayer )
       
  1686         {
       
  1687         __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - backup player" ); 
       
  1688         return iBackupPlayer;
       
  1689         }
       
  1690     else
       
  1691         {
       
  1692         return NULL;
       
  1693         }
       
  1694     }
       
  1695     
       
  1696 // -----------------------------------------------------------------------------
       
  1697 // CPhoneRingingTonePlayerAO::ReStartRingingTonePlayer
       
  1698 // -----------------------------------------------------------------------------
       
  1699 //      
       
  1700 void CPhoneRingingTonePlayerAO::ReStartRingingTonePlayer()
       
  1701     {
       
  1702     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ReStartRingingTonePlayer()" );
       
  1703 
       
  1704     //First get currently active player which plays among TTS player.
       
  1705     CPhoneAudioPlayer* currPlayer = NULL;
       
  1706     currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();   
       
  1707     if ( currPlayer )
       
  1708         {
       
  1709         currPlayer->ReStartPlaying();
       
  1710         }      
       
  1711     }
       
  1712 
       
  1713 // -----------------------------------------------------------------------------
       
  1714 // CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit
       
  1715 // -----------------------------------------------------------------------------
       
  1716 //
       
  1717 TBool CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit(
       
  1718      CPhoneRingingTone* aRingingTone )
       
  1719     {
       
  1720     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit()" );
       
  1721     
       
  1722     TBool bValidSize = ETrue;
       
  1723  
       
  1724     // If user has somehow managed to get a too large file as ringing tone,
       
  1725     // play default tone instead.
       
  1726     if ( iToneFileSizeLimitKB )
       
  1727         {
       
  1728         if ( CheckToneFileSize( aRingingTone->FileName(), iToneFileSizeLimitKB) != KErrNone )
       
  1729             {
       
  1730             bValidSize = EFalse;
       
  1731             }            
       
  1732         }
       
  1733     __PHONELOG1( 
       
  1734         EBasic,
       
  1735         EPhoneUIView, 
       
  1736         "CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit - bValidSize(%d)",
       
  1737         bValidSize);
       
  1738         
       
  1739     return bValidSize;
       
  1740     }
       
  1741 
       
  1742 // -----------------------------------------------------------------------------
       
  1743 // CPhoneRingingTonePlayerAO::CheckToneFileSize
       
  1744 // -----------------------------------------------------------------------------
       
  1745 //
       
  1746 TInt CPhoneRingingTonePlayerAO::CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB )
       
  1747     {
       
  1748     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CheckToneFileSize()" );
       
  1749     
       
  1750     // Get file size
       
  1751     TInt size = 0;
       
  1752     TInt error = KErrNone;
       
  1753     RFs& fs = CCoeEnv::Static()->FsSession();       
       
  1754     TEntry entry;
       
  1755     if (KErrNone == fs.Entry( aFile, entry ))
       
  1756 		{
       
  1757 		size = entry.iSize;
       
  1758 		}    
       
  1759         
       
  1760     // Check
       
  1761     aSizeLimitKB *= Kkilo;
       
  1762     if ( aSizeLimitKB  &&  size > aSizeLimitKB )
       
  1763         {
       
  1764         error = KErrTooBig;
       
  1765         }
       
  1766     
       
  1767     __PHONELOG1( 
       
  1768         EBasic,
       
  1769         EPhoneUIView, 
       
  1770         "CPhoneRingingTonePlayerAO::CheckToneFileSize - size (%d)",
       
  1771         size );    
       
  1772     return error;
       
  1773     }
       
  1774 
       
  1775 
       
  1776 // -----------------------------------------------------------------------------
       
  1777 // CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL
       
  1778 // -----------------------------------------------------------------------------
       
  1779 //
       
  1780 void CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL( TInt& aMaxSizeKB ) const
       
  1781     {
       
  1782     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL()" );
       
  1783     
       
  1784     const TInt error = CPhoneCenRepProxy::Instance()->GetInt( 
       
  1785             KCRUidProfileEngine,
       
  1786             KProEngRingingToneMaxSize,
       
  1787             aMaxSizeKB );
       
  1788    
       
  1789    	if ( error != KErrNone )
       
  1790     	{
       
  1791         aMaxSizeKB = 0;
       
  1792     	}
       
  1793 	if ( aMaxSizeKB < 0 )
       
  1794 	    {
       
  1795 	     aMaxSizeKB = 0;
       
  1796 	    }
       
  1797   
       
  1798     __PHONELOG2( 
       
  1799         EBasic,
       
  1800         EPhoneUIView, 
       
  1801         "CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL - error (%d), aMaxSizeKB(%d)",
       
  1802         error,
       
  1803         aMaxSizeKB );	    
       
  1804     }
       
  1805 
       
  1806 // -----------------------------------------------------------------------------
       
  1807 // CPhoneRingingTonePlayerAO::ActiveAudioPlayer
       
  1808 // -----------------------------------------------------------------------------
       
  1809 //
       
  1810 CPhoneAudioPlayer* CPhoneRingingTonePlayerAO::ActiveAudioPlayer()
       
  1811 	{
       
  1812     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ActiveAudioPlayer()" );
       
  1813 
       
  1814     switch( iTonePlayingStatus )
       
  1815         {
       
  1816         case EAudioTonePlaying:
       
  1817             if( iAudioPlayer != NULL )
       
  1818                 {
       
  1819 				return iAudioPlayer;
       
  1820                 }
       
  1821             break;
       
  1822             
       
  1823         case EDefaultTonePlaying:
       
  1824             if ( iDefaultPlayer != NULL )
       
  1825                 {
       
  1826 				return iDefaultPlayer;
       
  1827                 }
       
  1828             break;
       
  1829             
       
  1830         case EBeepOnce:
       
  1831             if( iBeepOncePlayer != NULL )
       
  1832                 {
       
  1833 				return iBeepOncePlayer;
       
  1834                 }
       
  1835             break;
       
  1836             
       
  1837         case EBackupTonePlaying:
       
  1838             if( iBackupPlayer != NULL )
       
  1839                 {
       
  1840                 return iBackupPlayer;
       
  1841                 }
       
  1842             break;
       
  1843             
       
  1844         case ESilentTonePlaying:
       
  1845             if( iSilentPlayer != NULL )
       
  1846                 {
       
  1847                 return iSilentPlayer;
       
  1848                 }
       
  1849             break;
       
  1850             
       
  1851         case EUnsecureVoIPTonePlaying:
       
  1852             if( iUnsecureVoIPTonePlayer != NULL )
       
  1853                 {
       
  1854                 return iUnsecureVoIPTonePlayer;
       
  1855                 }
       
  1856             break;
       
  1857             
       
  1858         case EVideoTonePlaying: // video ringing tone
       
  1859         case EPersonalVideoTonePlaying:
       
  1860         case ESilentVideoTonePlaying:
       
  1861             if ( iBeepOncePlayer != NULL )
       
  1862                 {
       
  1863                 return iBeepOncePlayer;                    
       
  1864                 }    
       
  1865             else if ( iSilentPlayer != NULL )
       
  1866                 {
       
  1867                 return iSilentPlayer;                    
       
  1868                 }    
       
  1869             break;
       
  1870             
       
  1871         default:
       
  1872             break;
       
  1873         }
       
  1874 
       
  1875 	return NULL;		
       
  1876 	}
       
  1877 
       
  1878 // -----------------------------------------------------------------------------
       
  1879 // CPhoneRingingTonePlayerAO::DoMuteRingingTone
       
  1880 // -----------------------------------------------------------------------------
       
  1881 //
       
  1882 void CPhoneRingingTonePlayerAO::DoMuteRingingTone()
       
  1883 	{
       
  1884     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoMuteRingingTone()" );
       
  1885 	
       
  1886 	switch( iTonePlayingStatus )
       
  1887 		{
       
  1888         case EVideoTonePlaying: // video ringing tone, fall through
       
  1889         case EPersonalVideoTonePlaying: // fall through
       
  1890         case ESilentVideoTonePlaying:
       
  1891             if ( iVideoPlayer != NULL )
       
  1892 	            {
       
  1893                 iVideoPlayer->MuteVideoRingTone();
       
  1894                 return;	            	
       
  1895 	            }
       
  1896 	        break;
       
  1897 	        
       
  1898 	    default:
       
  1899 	    	break;
       
  1900 		}
       
  1901 	
       
  1902 	CPhoneAudioPlayer* activePlayer = ActiveAudioPlayer();
       
  1903 	if( activePlayer != NULL )
       
  1904 		{
       
  1905 		activePlayer->MutePlaying();
       
  1906 		}
       
  1907 	}
       
  1908 
       
  1909 // -----------------------------------------------------------
       
  1910 // CPhoneRingingTonePlayerAO::HandleCenRepChangeL
       
  1911 // -----------------------------------------------------------
       
  1912 //
       
  1913 void CPhoneRingingTonePlayerAO::HandleCenRepChangeL( 
       
  1914     const TUid& aUid,
       
  1915     const TUint /*aId*/ )
       
  1916     {
       
  1917     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleCenRepChangeL()");
       
  1918     
       
  1919     if ( aUid == KCRUidDRMHelperServer )
       
  1920         {
       
  1921         TBuf<256> tempBuf16( KNullDesC );
       
  1922         
       
  1923         User::LeaveIfError( CPhoneCenRepProxy::Instance()->GetString(
       
  1924             KCRUidDRMHelperServer,
       
  1925             KDRMHelperServerNotificationPassive,
       
  1926             tempBuf16 ) );         
       
  1927        
       
  1928         const TBool idleIsTopApp = CPhonePubSubProxy::Instance()->Value(
       
  1929             KPSUidAiInformation, KActiveIdleState ) == EPSAiForeground;
       
  1930        
       
  1931         // Quick validity check and    
       
  1932         // The first Tuint8 is the times the content has been informed.
       
  1933         // Note should not shown until Idle.
       
  1934         if ( idleIsTopApp && tempBuf16.Length() >= KPhoneMinDRMTextLength )
       
  1935             { 
       
  1936             TBuf8<256> tempBuf8;
       
  1937             TPtrC8 ptr((TUint8*)tempBuf16.Ptr(), tempBuf16.Size());
       
  1938             HBufC8* buf8 = HBufC8::NewLC( 256 );
       
  1939             buf8->Des().Copy(ptr);  
       
  1940     	    // Extract URI etc. 
       
  1941     	    // buf8 format:
       
  1942     	    //<TUint8 aTimes><TUint8 aExpirationMark>
       
  1943     	    //<TUint8 aPermissionType>
       
  1944     	    //<TUint8 aAutomatedContentType><TDesC8 aContentID>
       
  1945      	    TInt8 count = (TInt8)(*(buf8->Ptr())); 
       
  1946     	    TChar mark = (TChar)(*(buf8->Ptr()+1));
       
  1947     	    TInt8 permtype = (TChar)(*(buf8->Ptr()+2));
       
  1948     	    TInt8 automcontenttype = (TChar)(*(buf8->Ptr()+3)); 
       
  1949     	    TBuf8<256> curi = buf8->Right( buf8->Length()-4);
       
  1950     		
       
  1951     		if (curi.Ptr()[curi.Size()-1] == 0)
       
  1952     		    {
       
  1953     		    // The last character in the descriptor is 0, which means
       
  1954     		    // that the original 16-bit desc was padded so
       
  1955     		    // remove the last char...
       
  1956     		    curi.SetLength(curi.Size()-1);
       
  1957     		    }
       
  1958     		        
       
  1959             // Create DRM helper.     
       
  1960             CDRMHelper* drmHelper = CDRMHelper::NewLC();            
       
  1961             // Show notification.
       
  1962             drmHelper->SetAutomatedType( (CDRMHelper::TDRMHelperAutomatedType)automcontenttype );
       
  1963             TInt error = drmHelper->CheckRightsAmountL( curi );
       
  1964 
       
  1965             __PHONELOG1( EBasic, EPhoneUIView, 
       
  1966                 "CPhoneRingingTonePlayerAO::HandleCenRepChangeL > CheckRightsAmountL, error: %d"
       
  1967                 , error );
       
  1968                            
       
  1969             CleanupStack::PopAndDestroy( drmHelper ); 
       
  1970             CleanupStack::PopAndDestroy( buf8 ); 
       
  1971             } 
       
  1972         }
       
  1973     }
       
  1974     
       
  1975 //  End of File