phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp
branchRCL_3
changeset 25 5266b1f337bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp	Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,794 @@
+/*
+* Copyright (c) 2002-2005,2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Ringing tone player.
+*
+*/
+
+
+// INCLUDE FILES
+#include <cntdef.h>
+#include <f32file.h>
+#include <featmgr.h>
+#include <utility.h>
+#include <AudioPreference.h>
+#include <data_caging_path_literals.hrh>
+#include <MusicPlayerInternalCRKeys.h>
+#include <ProfileEngineDomainCRKeys.h>
+#include <telephonyvariant.hrh>
+#include <UikonInternalPSKeys.h>
+#include <DRMHelperServerInternalCRKeys.h>
+#include <DRMHelper.h>
+#include <activeidle2domainpskeys.h>
+
+#include "cphoneringingtoneplayerao.h"
+#include "phoneui.pan"
+#include "phoneui.hrh"
+#include "mphoneringingtoneobserver.h"
+#include "cphonetimer.h"
+#include "cphonecenrepproxy.h"
+#include "phoneconstants.h"
+#include "phonelogger.h"
+#include "cphoneringingtone.h"
+#include "tphonecmdparamringtone.h"
+#include "cphonepubsubproxy.h"
+#include "cphonecenrepproxy.h"
+
+// CONSTANTS
+
+// Minimum acceptable length of parsed DRM message.
+const TInt KPhoneMinDRMTextLength = 3;
+// Value field of parsed DRM string.
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::NewL
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingTonePlayerAO* CPhoneRingingTonePlayerAO::NewL()
+    {
+    CPhoneRingingTonePlayerAO* self = 
+        new ( ELeave ) CPhoneRingingTonePlayerAO();
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::CPhoneRingingTonePlayerAO
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingTonePlayerAO::CPhoneRingingTonePlayerAO() :
+    CActive( CActive::EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::ConstructL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructL()" );
+
+    // Connect to the tone server
+    User::LeaveIfError( iToneServer.Connect() );
+
+    // Construct timer.
+    iTimer = CPhoneTimer::NewL();
+
+    // Checks if DRM extend security is needed
+    TInt extSecNeeded = KErrNone;
+    TInt err = CPhoneCenRepProxy::Instance()->GetInt(
+        KCRUidMusicPlayerFeatures,
+        KRequireDRMInPlayback,
+        extSecNeeded );
+
+    iExtSecNeeded = ( ( err == KErrNone ) && extSecNeeded ) ? ETrue : EFalse;
+    iToneServer.SetExtendedSecurityNeeded( iExtSecNeeded );
+
+    CPhoneCenRepProxy::Instance()->NotifyChangeL(
+        KCRUidDRMHelperServer, 
+        KDRMHelperServerNotificationPassive,
+        this );
+
+    // Check video player configuration.
+    iArbitraryVideoScaling = 
+    CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported( 
+            KTelephonyLVFlagArbitraryVideoScaling );
+
+    // Construct the default ringing tone
+    TBuf<KMaxFileName> defaultTone;
+    err = CPhoneCenRepProxy::Instance()->GetString(
+        KCRUidProfileEngine,
+        KProEngDefaultRingingTone,
+        defaultTone );
+
+    if ( err == KErrNone )
+        {
+        iToneServer.SetDefaultRingingToneL( defaultTone );
+        }
+
+    // Get maximum tone file size
+    GetMaxToneFileSizeL( iToneFileSizeLimitKB );
+
+    // And set the tone size limit to the tone server too
+    iToneServer.SetToneFileSizeLimit( iToneFileSizeLimitKB );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::~CPhoneRingingTonePlayerAO
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingTonePlayerAO::~CPhoneRingingTonePlayerAO()
+    {
+    Cancel();
+    iToneServer.Close();
+
+    delete iTimer;
+    delete iAudioVideoRingingTone;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayRingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayRingToneL( 
+    TPhoneCommandParam* aCommandParam )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayRingToneL()" );
+
+    // Check that the parameter is a ringing tone
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdRingTone )
+        {
+        // Cast to get the ringing tone parameters
+        TPhoneCmdParamRingTone* ringToneParam = 
+            static_cast<TPhoneCmdParamRingTone*>( aCommandParam );
+
+        // Get volume and ringing tone type
+        const TInt volume = ringToneParam->Volume();
+        TProfileRingingType ringingType = 
+            static_cast<TProfileRingingType>( ringToneParam->RingingType() );
+
+        // Set ringing tone file name to server
+        iToneServer.SetRingingToneL( ringToneParam->RingTone() );
+
+        if ( !iAudioVideoRingingTone )
+            {
+            iAudioVideoRingingTone = CPhoneRingingTone::NewL(
+                ringToneParam->RingTone() );
+            }
+        else if ( iAudioVideoRingingTone->FileName().Compare(
+            ringToneParam->RingTone() ) ) 
+            {
+            iAudioVideoRingingTone->SetFileName(
+                ringToneParam->RingTone() );
+            }
+
+        // Caller contact text and image and image has
+        // higher priority than video ringing tone set for caller.
+        if ( iAudioVideoRingingTone->IsVideoRingingTone() &&
+             ringToneParam->IsCallerImage() )
+            {
+            // Play only audio from video ringingtone
+            PlayAudioRingTone(
+                    volume,
+                    ringingType );
+            }
+        else if ( iAudioVideoRingingTone->IsVideoRingingTone() &&
+                !ringToneParam->IsCallerText() )
+            {
+            // Play video ring tone
+            const TBool ringToneIsPersonal = ringToneParam->Type() ==
+                EPhoneRingTonePersonal;
+            PlayVideoRingingTone( 
+                *iAudioVideoRingingTone, 
+                volume, 
+                ringingType,
+                ringToneIsPersonal );
+            }
+        else
+            {
+            // Play text to speech, if available
+            if ( ringToneParam->TextToSay().Length() )
+                {
+                PlayTtsTone(
+                    ringToneParam->TextToSay(),
+                    volume,
+                    ringingType );
+                }
+            // Play audio ring tone
+            PlayAudioRingTone( 
+                volume, 
+                ringingType );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayAudioRingTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayAudioRingTone( 
+    TInt aVolume, 
+    TProfileRingingType aRingingType )
+    {
+    iToneServer.PlayAudioRingTone( aVolume, aRingingType );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::BeepOnce
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::BeepOnce( TInt aVolume )
+    {
+    iToneServer.BeepOnce( aVolume );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlaySilentTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlaySilentTone()
+    {
+    iToneServer.PlaySilentTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone()
+    {
+    iToneServer.PlayUnsecureVoIPTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()" );
+
+    if ( iVideoPlayer &&
+            ( iTonePlayingStatus == EVideoTonePlaying ||
+              iTonePlayingStatus == EPersonalVideoTonePlaying ) )
+        {
+        // Mute the video audio
+        iVideoPlayer->MuteVideoRingTone();
+        iTonePlayingStatus = ESilentVideoTonePlaying;
+        iVolume = 0;
+        }
+    else if ( iTonePlayingStatus != ESilentVideoTonePlaying )
+        {
+        iToneServer.MuteRingingTone();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::MuteRingingTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::MuteRingingTone()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingTone()" );
+
+    if ( iVideoPlayer &&
+            ( iTonePlayingStatus == EVideoTonePlaying ||
+              iTonePlayingStatus == EPersonalVideoTonePlaying ) )
+        {
+        // Mute the video audio
+        iVideoPlayer->MuteVideoRingTone();
+        iTonePlayingStatus = ESilentVideoTonePlaying;
+        iVolume = 0;
+        }
+    else if ( iTonePlayingStatus != ESilentVideoTonePlaying )
+        {
+        StopPlaying();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::StopPlaying
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::StopPlaying()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::StopPlaying()" );
+
+    // Stop all playback
+
+    iToneServer.StopPlaying();
+
+    if ( iVideoPlayer )
+        {
+        iVideoPlayer->StopVideoRingTone();
+        }
+
+    iTimer->Cancel();
+
+    iTonePlayingStatus = EIdle;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayTtsTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayTtsTone( 
+    const TDesC& aTextToSay, 
+    TInt aVolume,
+    TProfileRingingType aRingingType )
+    {
+    iToneServer.PlayTtsTone( aTextToSay, aVolume, aRingingType );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::HandleTimeOutL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::HandleTimeOutL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleTimeOutL()" );
+
+    // Guarding timer for startup has expired
+    if ( iTonePlayingStatus == EVideoTonePlaying ||
+         iTonePlayingStatus == ESilentVideoTonePlaying || 
+         iTonePlayingStatus == EPersonalVideoTonePlaying )
+        {
+        iVideoPlayer->CancelVideoRingTone(); // close video ringtone display
+        PlayDefaultTone( iVolume, iRingingType );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayDefaultTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayDefaultTone( 
+    TInt aVolume, 
+    TProfileRingingType aRingingType )
+    {
+    iToneServer.PlayDefaultTone( aVolume, aRingingType );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayBackupTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayBackupTone( 
+    TInt aVolume, 
+    TProfileRingingType aRingingType )
+    {
+    iToneServer.PlayBackupTone( aVolume, aRingingType );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::ConvertVideoRingingType
+// -----------------------------------------------------------------------------
+//
+MPhoneVideoPlayer::TPlayMode CPhoneRingingTonePlayerAO::ConvertVideoRingingType(
+    TProfileRingingType aRingingType )
+    {
+    MPhoneVideoPlayer::TPlayMode playMode;
+
+    switch ( aRingingType )
+        {
+        case EProfileRingingTypeAscending:
+            playMode = MPhoneVideoPlayer::EPlayAscending;
+            break;
+        case EProfileRingingTypeRingingOnce:
+            playMode = MPhoneVideoPlayer::EPlayOnce;
+            break;
+        case EProfileRingingTypeRinging:
+        default:
+            playMode = MPhoneVideoPlayer::EPlayInLoop;
+            break;
+        }
+
+    return playMode;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::RunL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::RunL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::RunL()" );
+
+    switch ( iState )
+        {
+        case EPlayingDefaultVideo:
+            {
+            PlayAudioRingTone( iVolume, iRingingType );
+            }
+            break;
+
+        case EIdleState:
+        default:
+            break;
+        } // switch iState
+
+    iState = EIdleState;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::DoCancel()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoCancel()" );
+    // Request is completed immediately before SetActive.
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::SetVideoPlayer
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::SetVideoPlayer( 
+    MPhoneVideoPlayer* aVideoPlayer )
+    {
+    iVideoPlayer = aVideoPlayer;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayVideoRingingTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayVideoRingingTone( 
+    const CPhoneRingingTone& aRingingTone, 
+    TInt aVolume, 
+    TProfileRingingType aRingingType,
+    TBool aPersonalTone )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayVideoRingingTone()" );
+
+    __ASSERT_DEBUG( iVideoPlayer, Panic( EPhoneViewGeneralError ) );
+
+    iVolume = aVolume;
+    iRingingType = aRingingType;
+    TBool startTimer( ETrue );
+
+     // Extended security check
+    if ( ExtendedSecurity() )
+        {
+        if ( !aRingingTone.IsFileInRom() &&
+             !aRingingTone.IsFileDrmProtected() )
+            {
+            __PHONELOG( EBasic, 
+                        EPhoneUIView, 
+                        "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - PermissionDenied" );
+            PlayDefaultTone( iVolume, iRingingType );
+            return;
+            }
+        __PHONELOG( EBasic, 
+                    EPhoneUIView, 
+                    "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - ExtSecChk ok" );
+        }
+ 
+    __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayVideoRingingTone - play" );
+    switch( aRingingType )
+        {
+        case EProfileRingingTypeSilent:
+            iVideoPlayer->PlayVideoRingTone( 
+                aRingingTone.FileName(),
+                ConvertVideoRingingType( aRingingType ),
+                0,
+                iArbitraryVideoScaling,
+                this );
+            iToneServer.PlaySilentTone(); // To start vibra, video may fail.
+            iVolume = 0; // for repeat
+            startTimer = EFalse; // no need for fallback
+            break;
+
+        case EProfileRingingTypeBeepOnce:
+            iVideoPlayer->PlayVideoRingTone( 
+                aRingingTone.FileName(),
+                ConvertVideoRingingType( aRingingType ),
+                0,
+                iArbitraryVideoScaling,
+                this );
+            BeepOnce( iVolume );
+            iVolume = 0; // for repeat
+            startTimer = EFalse; // no need for fallback
+            break;
+        default:
+            iVideoPlayer->PlayVideoRingTone( 
+                aRingingTone.FileName(),
+                ConvertVideoRingingType( aRingingType ),
+                iVolume,
+                iArbitraryVideoScaling,
+                this );
+            break;
+        }
+
+    if ( aPersonalTone )
+        {
+        iTonePlayingStatus = EPersonalVideoTonePlaying;
+        }
+    else
+        {
+        iTonePlayingStatus = EVideoTonePlaying;
+        }
+
+    if ( startTimer && !iTimer->IsActive() )
+        {
+        // Start timer to guard video opening
+        iTimer->After( KPhoneMaxRingingWaiting, this );
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::HandleVideoPlayerError
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::HandleVideoPlayerError( 
+    TPhoneVideoPlayerErrorEvent /*aEvent*/,
+    TInt aError )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerError()" );
+
+    if ( aError )
+        {
+        __PHONELOG1( EBasic, 
+                     EPhoneUIView, 
+                     "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - error (%d)",
+                     aError );
+        }
+
+    // cancel guarding timer
+    iTimer->Cancel();
+
+    // to remove video window
+    iVideoPlayer->CancelVideoRingTone();
+
+    if ( iTonePlayingStatus == EPersonalVideoTonePlaying )
+        {
+        // Play default tone (active profile tone).
+        if ( iAudioVideoRingingTone &&
+             !iAudioVideoRingingTone->IsVideoRingingTone() )
+            {
+            iToneServer.PlayAudioRingTone( iVolume, iRingingType );
+            }
+        else // audio/video tone is video
+            {
+            PlayDefaultVideoAsync();
+            }
+        }
+    else
+        {
+        // Play backup tone
+        PlayDefaultTone( iVolume, iRingingType );
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete()" );
+
+    // cancel guarding timer
+    iTimer->Cancel();
+
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::HandleVideoPlayerPlayingComplete
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::HandleVideoPlayerPlayingComplete()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerPlayingComplete()" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()" );
+
+    Cancel();
+
+    iState = EPlayingDefaultVideo; 
+
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::ExtendedSecurity
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingTonePlayerAO::ExtendedSecurity() const
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ExtendedSecurity()" );
+    return iExtSecNeeded;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit(
+     CPhoneRingingTone* aRingingTone )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit()" );
+
+    TBool bValidSize = ETrue;
+
+    // If user has somehow managed to get a too large file as ringing tone,
+    // play default tone instead.
+    if ( iToneFileSizeLimitKB )
+        {
+        if ( CheckToneFileSize( aRingingTone->FileName(), iToneFileSizeLimitKB) != KErrNone )
+            {
+            bValidSize = EFalse;
+            }
+        }
+    __PHONELOG1( 
+        EBasic,
+        EPhoneUIView, 
+        "CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit - bValidSize(%d)",
+        bValidSize);
+
+    return bValidSize;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::CheckToneFileSize
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingTonePlayerAO::CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CheckToneFileSize()" );
+
+    // Get file size
+    TInt size = 0;
+    TInt error = KErrNone;
+    RFs& fs = CCoeEnv::Static()->FsSession();
+    TEntry entry;
+    if (KErrNone == fs.Entry( aFile, entry ))
+        {
+        size = entry.iSize;
+        }
+
+    // Check
+    aSizeLimitKB *= Kkilo;
+    if ( aSizeLimitKB  &&  size > aSizeLimitKB )
+        {
+        error = KErrTooBig;
+        }
+
+    __PHONELOG1( 
+        EBasic,
+        EPhoneUIView, 
+        "CPhoneRingingTonePlayerAO::CheckToneFileSize - size (%d)",
+        size );
+    return error;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL( TInt& aMaxSizeKB ) const
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL()" );
+
+    const TInt error = CPhoneCenRepProxy::Instance()->GetInt( 
+            KCRUidProfileEngine,
+            KProEngRingingToneMaxSize,
+            aMaxSizeKB );
+
+    if ( error != KErrNone )
+        {
+        aMaxSizeKB = 0;
+        }
+    if ( aMaxSizeKB < 0 )
+        {
+        aMaxSizeKB = 0;
+        }
+
+    __PHONELOG2( 
+        EBasic,
+        EPhoneUIView, 
+        "CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL - error (%d), aMaxSizeKB(%d)",
+        error,
+        aMaxSizeKB );
+    }
+
+// -----------------------------------------------------------
+// CPhoneRingingTonePlayerAO::HandleCenRepChangeL
+// -----------------------------------------------------------
+//
+void CPhoneRingingTonePlayerAO::HandleCenRepChangeL( 
+    const TUid& aUid,
+    const TUint /*aId*/ )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleCenRepChangeL()");
+
+    if ( aUid == KCRUidDRMHelperServer )
+        {
+        TBuf<256> tempBuf16( KNullDesC );
+
+        User::LeaveIfError( CPhoneCenRepProxy::Instance()->GetString(
+            KCRUidDRMHelperServer,
+            KDRMHelperServerNotificationPassive,
+            tempBuf16 ) );
+
+        const TBool idleIsTopApp = CPhonePubSubProxy::Instance()->Value(
+            KPSUidAiInformation, KActiveIdleState ) == EPSAiForeground;
+
+        // Quick validity check and
+        // The first Tuint8 is the times the content has been informed.
+        // Note should not shown until Idle.
+        if ( idleIsTopApp && tempBuf16.Length() >= KPhoneMinDRMTextLength )
+            { 
+            TBuf8<256> tempBuf8;
+            TPtrC8 ptr((TUint8*)tempBuf16.Ptr(), tempBuf16.Size());
+            HBufC8* buf8 = HBufC8::NewLC( 256 );
+            buf8->Des().Copy(ptr);
+            // Extract URI etc. 
+            // buf8 format:
+            //<TUint8 aTimes><TUint8 aExpirationMark>
+            //<TUint8 aPermissionType>
+            //<TUint8 aAutomatedContentType><TDesC8 aContentID>
+            TInt8 count = (TInt8)(*(buf8->Ptr())); 
+            TChar mark = (TChar)(*(buf8->Ptr()+1));
+            TInt8 permtype = (TChar)(*(buf8->Ptr()+2));
+            TInt8 automcontenttype = (TChar)(*(buf8->Ptr()+3)); 
+            TBuf8<256> curi = buf8->Right( buf8->Length()-4);
+
+            if ( curi.Ptr()[curi.Size()-1] == 0 )
+                {
+                // The last character in the descriptor is 0, which means
+                // that the original 16-bit desc was padded so
+                // remove the last char...
+                curi.SetLength(curi.Size()-1);
+                }
+
+            // Create DRM helper. 
+            CDRMHelper* drmHelper = CDRMHelper::NewLC();
+            // Show notification.
+            drmHelper->SetAutomatedType( (CDRMHelper::TDRMHelperAutomatedType)automcontenttype );
+            TInt error = drmHelper->CheckRightsAmountL( curi );
+
+            __PHONELOG1( EBasic, EPhoneUIView, 
+                "CPhoneRingingTonePlayerAO::HandleCenRepChangeL > CheckRightsAmountL, error: %d"
+                , error );
+
+            CleanupStack::PopAndDestroy( drmHelper ); 
+            CleanupStack::PopAndDestroy( buf8 ); 
+            } 
+        }
+    }
+
+//  End of File