diff -r 8bda91a87a00 -r 8ee96d21d9bf profilesservices/FileList/Src/CFLDRingingTonePlayer.cpp --- a/profilesservices/FileList/Src/CFLDRingingTonePlayer.cpp Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,474 +0,0 @@ -/* -* Copyright (c) 2002 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: -* CFLDRingingTonePlayer is used to play sound files. It takes into account -* the current volume and ringing type settings. -* -* -*/ - - -// CLASS HEADER -#include "CFLDRingingTonePlayer.h" - -// EXTERNAL INCLUDES -#include -#include -#include // C3DRingingToneInterface -#include - -// CONSTANTS -namespace - { - const TInt KAscendingVolumeInterval( 3000000 ); // 3 seconds - const TInt KToneInterval( 1000000 ); // 1 second pause between tones - - _LIT( KDataTypeNone, "" ); - _LIT( KFileListRngMimeType, "application/vnd.nokia.ringing-tone" ); - _LIT8( KFileListBeepSequence, "\x00\x11\x06\x0A\x08\x73\x0A\x40\x28\x0A\xF7\ - \x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B" ); //sequence for playing a beep once sound - } - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CFLDRingingTonePlayer* CFLDRingingTonePlayer::NewL( TBool aShowErrorMsgs ) - { - CFLDRingingTonePlayer* self = new( ELeave ) CFLDRingingTonePlayer( aShowErrorMsgs ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); // self - return self; - } - -// Destructor -CFLDRingingTonePlayer::~CFLDRingingTonePlayer() - { - Cancel(); // Stops possible playback - - delete iAudioPlayer; - delete iTonePlayer; - - delete i3dRingingTonePlugin; - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::CFLDRingingTonePlayer -// C++ constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CFLDRingingTonePlayer::CFLDRingingTonePlayer( TBool aShowErrorMsgs ) - : CFLDPlayerBase( aShowErrorMsgs ), - iAudioPlayerStatus( EAudioPlayerNotCreated ), - iTonePlayerStatus( EAudioPlayerNotCreated ) - { - i3dEffects = ETrue; - i3DEffect = KErrNotFound; - i3DEcho = KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::ConstructL() - { - BaseConstructL(); - - // To allow/not allow screensaver - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Attach( KPSUidScreenSaver, KScreenSaverAllowScreenSaver ); - - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::ProcessFileL() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::ProcessFileL( const TDesC& aFileName, RWindow* /*aWindow*/ ) - { - if ( aFileName == KNullDesC || iFocusLost ) - { - return; - } - - Cancel(); // Stops possible playback - - TDataType dataType; - TInt error( DataType( aFileName, dataType ) ); - if( ( error != KErrNotFound ) && ( error != KErrNone ) ) - { - User::Leave( error ); - } - - // Do not allow screen saver while playing - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EFLScreenSaverNotAllowed ); - - delete iTonePlayer; - iTonePlayer = NULL; - - delete iAudioPlayer; - iAudioPlayer = NULL; - - if ( iRingingType == ERingingTypeBeepOnce ) - { - // Active profile ringing tone is set to Beep Once - // Don't initialize a FileSequence but use DesSequence instead - iTonePlayer = CMdaAudioToneUtility::NewL( *this ); - iTonePlayer->PrepareToPlayDesSequence( KFileListBeepSequence() ); - iTonePlayerStatus = EAudioPlayerInitializing; - } - else - { - TPtrC ptr( aFileName ); - if( error ) - { - ptr.Set( iDefaultTone ); - } - if( dataType.Des().CompareF( KFileListRngMimeType ) == 0 ) - { - //Ringingtone is a RNG-file - iTonePlayer = CMdaAudioToneUtility::NewL( *this ); - iTonePlayer->PrepareToPlayFileSequence( ptr ); - iTonePlayerStatus = EAudioPlayerInitializing; - } - // If the mime type is NULL, the file can't be play. - else if ( dataType.Des().CompareF( KDataTypeNone ) == 0 ) - { - return; - } - else - { - iAudioPlayer = CDrmPlayerUtility::NewFilePlayerL( - ptr, *this, KAudioPriorityRingingTonePreview, - TMdaPriorityPreference ( - iVibra ? KAudioPrefRingFilePreviewVibra : - KAudioPrefRingFilePreview ) ); - - iAudioPlayerStatus = EAudioPlayerInitializing; - } - } - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::Cancel() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::Cancel() - { - if ( iAudioPlayerStatus == EAudioPlayerPlayingWith3DEffect ) - { - i3dRingingTonePlugin->Stop(); - // plugin calls AudioPlayer->Stop() - iAudioPlayer->Close(); - delete iAudioPlayer; - iAudioPlayer = NULL; - } - - if ( iAudioPlayerStatus == EAudioPlayerPlaying ) - { - if( iAudioPlayer ) - { - iAudioPlayer->Stop(); - iAudioPlayer->Close(); - delete iAudioPlayer; - iAudioPlayer = NULL; - } - } - - iAudioPlayerStatus = EAudioPlayerReady; - - if ( iTonePlayerStatus == EAudioPlayerPlaying ) - { - if( iTonePlayer ) - { - iTonePlayer->CancelPlay(); - delete iTonePlayer; - iTonePlayer = NULL; - } - } - iTonePlayerStatus = EAudioPlayerReady; - - // Allow screen saver, unless there's a call ongoing - if( !IsCallOngoing() ) - { - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EFLScreenSaverAllowed ); - } - -} - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::DoSetRingingType() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::DoSetRingingType( TInt aRingingType ) - { - if( iAudioPlayerStatus == EAudioPlayerInitialized ) - { - switch( aRingingType ) - { - // Fall through - case ERingingTypeRinging: - case ERingingTypeSilent: - { - iAudioPlayer->SetRepeats( - KMdaRepeatForever, TTimeIntervalMicroSeconds( KToneInterval ) ); - break; - } - case ERingingTypeAscending: - { - iAudioPlayer->SetRepeats( - KMdaRepeatForever, TTimeIntervalMicroSeconds( KToneInterval ) ); - TInt volRamp = KAscendingVolumeInterval * iRingingVolume; - iAudioPlayer->SetVolumeRamp( TTimeIntervalMicroSeconds( volRamp ) ); - break; - } - case ERingingTypeRingOnce: - { - iAudioPlayer->SetRepeats( - 0, TTimeIntervalMicroSeconds( KToneInterval ) ); - break; - } - - default: - { - break; - } - } - } - else if( iTonePlayerStatus == EAudioPlayerInitialized ) - { - switch( aRingingType ) - { - // Fall through - case ERingingTypeRinging: - case ERingingTypeSilent: - { - iTonePlayer->SetRepeats( - KMdaRepeatForever, TTimeIntervalMicroSeconds( KToneInterval ) ); - break; - } - case ERingingTypeAscending: - { - iTonePlayer->SetRepeats( - KMdaRepeatForever, TTimeIntervalMicroSeconds( KToneInterval ) ); - TInt volRamp = KAscendingVolumeInterval * iRingingVolume; - iTonePlayer->SetVolumeRamp( TTimeIntervalMicroSeconds( volRamp ) ); - break; - } - // Fall through - case ERingingTypeRingOnce: - case ERingingTypeBeepOnce: - { - iTonePlayer->SetRepeats( - 0, TTimeIntervalMicroSeconds( KToneInterval ) ); - break; - } - default: - { - break; - } - } - } - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::ConvertVolume() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CFLDRingingTonePlayer::ConvertVolume( TInt aVolume ) - { - TInt result( 0 ); - if ( iAudioPlayerStatus == EAudioPlayerInitialized || - iAudioPlayerStatus == EAudioPlayerPlaying ) - { - result = BaseConvertVolume( aVolume, iAudioPlayer->MaxVolume() ); - } - else if( iTonePlayerStatus == EAudioPlayerInitialized || - iTonePlayerStatus == EAudioPlayerPlaying ) - { - result = BaseConvertVolume( aVolume, iTonePlayer->MaxVolume() ); - } - //if user has selected silent ringing type, set volume off - if( iRingingType == ERingingTypeSilent ) - { - result = 0; - } - - return result; - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::MdapcInitComplete() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::MdapcInitComplete( - TInt aError, const TTimeIntervalMicroSeconds& /* aDuration */ ) - { - if ( !aError && iAudioPlayerStatus == EAudioPlayerInitializing ) - { - iAudioPlayerStatus = EAudioPlayerInitialized; - DoSetRingingType( iRingingType ); - iAudioPlayer->SetVolume( ConvertVolume( iRingingVolume ) ); - iAudioPlayer->SetPriority( KAudioPriorityPreview, - TMdaPriorityPreference( iVibra ? KAudioPrefRingFilePreviewVibra : - KAudioPrefRingFilePreview ) ); - - if ( iRingingType == ERingingTypeBeepOnce ) - { - return; // beeb once not handled here - } - - if( !i3dEffects ) - { - iAudioPlayer->Play(); - iAudioPlayerStatus = EAudioPlayerPlaying; - return; - } - - if ( !i3dRingingTonePlugin ) - { - TUid emptyUid = { 0 }; - TRAPD( err, i3dRingingTonePlugin = C3DRingingToneInterface::NewL( emptyUid ) ); - if ( err != KErrNone || !i3dRingingTonePlugin ) - { - iAudioPlayer->Play(); - iAudioPlayerStatus = EAudioPlayerPlaying; - return; - } - } - if ( i3DEffect != KErrNotFound && i3DEcho != KErrNotFound ) - { - i3dRingingTonePlugin->SetAttr( E3DRTIAttr3DEffect, i3DEffect ); - i3dRingingTonePlugin->SetAttr( E3DRTIAttr3DEcho, i3DEcho ); - } - - i3dRingingTonePlugin->SetAttr( E3DRTIAttrDrmPlayerUtility, iAudioPlayer ); - TRAP_IGNORE( i3dRingingTonePlugin->PlayL() ); - iAudioPlayerStatus = EAudioPlayerPlayingWith3DEffect; - } - else - { - Cancel(); - if ( ( aError == KErrNotSupported ) || ( aError == KErrCorrupt ) ) - { - // Don't care about leave, if the note can't be displayed. - TRAP_IGNORE( DisplayErrorNoteL() ); - } - } - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::MdapcPlayComplete() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::MdapcPlayComplete( TInt aError ) - { - if ( ( aError == KErrNotSupported ) || ( aError == KErrCorrupt ) ) - { - // Don't care about leave, if the note can't be displayed. - TRAP_IGNORE( DisplayErrorNoteL() ); - } - - Cancel(); - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::MatoPrepareComplete() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::MatoPrepareComplete( TInt aError ) - { - if ( !aError && iTonePlayerStatus == EAudioPlayerInitializing ) - { - iTonePlayerStatus = EAudioPlayerInitialized; - DoSetRingingType( iRingingType ); - iTonePlayer->SetVolume( ConvertVolume( iRingingVolume ) ); - iTonePlayer->SetPriority( KAudioPriorityPreview, - TMdaPriorityPreference( iVibra ? KAudioPrefRingFilePreviewVibra : - KAudioPrefRingFilePreview ) ); - iTonePlayer->Play(); - iTonePlayerStatus = EAudioPlayerPlaying; - } - else - { - Cancel(); - if ( ( aError == KErrNotSupported ) || ( aError == KErrCorrupt ) ) - { - // Don't care about leave, if the note can't be displayed. - TRAP_IGNORE( DisplayErrorNoteL() ); - } - } - } - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::MatoPlayComplete() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::MatoPlayComplete( TInt aError ) - { - if ( ( aError == KErrNotSupported ) || ( aError == KErrCorrupt ) ) - { - // Don't care about leave, if the note can't be displayed. - TRAP_IGNORE( DisplayErrorNoteL() ); - } - - Cancel(); - } - - -// ----------------------------------------------------------------------------- -// CFLDRingingTonePlayer::Set3dEffects() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDRingingTonePlayer::Set3dEffects( TBool a3dEffects ) - { - const TInt K3DEffectBase = 1000; - const TInt K3DEchoBase = 2000; - - i3dEffects = a3dEffects; - - if ( a3dEffects >= K3DEffectBase && a3dEffects < K3DEchoBase ) - { - i3DEffect = a3dEffects - K3DEffectBase; - return; - } - - if ( a3dEffects >= K3DEchoBase ) - { - i3DEcho = a3dEffects - K3DEchoBase; - return; - } - } - - -// End of File