diff -r 41a7f70b3818 -r 5266b1f337bd phoneapp/phoneuiview/inc/cphoneringingtoneplayerao.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/inc/cphoneringingtoneplayerao.h Wed Sep 01 12:30:10 2010 +0100 @@ -0,0 +1,361 @@ +/* +* Copyright (c) 2002-2005 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: Active object which implements ringing tone functionality +* +*/ + + +#ifndef CPHONERINGINGTONEPLAYERAO_H +#define CPHONERINGINGTONEPLAYERAO_H + +// INCLUDES +#include +#include +#include "mphonevideoplayerobserver.h" +#include "mphonecenrepobserver.h" +#include "mphonetimer.h" +#include "mphonevideoplayer.h" +#include "phoneringingtoneclient.h" + +// FORWARD DECLARATIONS +//class MPhoneRingingToneObserver; +class CPhoneAudioPlayer; +class CPhoneTimer; +class CMdaServer; +class MPhoneDisplayProvider; +class CPhoneRingingTone; +class TPhoneCommandParam; + +// CLASS DECLARATION + +/** +* It implements ringing tone functionality. +* Note that when issuing Play-command to audio side, ALWAYS set the tone type +* before the Play() is called. This is to ensure that correct tone is tried to +* be played. +* +* @since 1.0 +*/ +class CPhoneRingingTonePlayerAO : + public CActive, + public MPhoneCenRepObserver, + private MPhoneTimer, + private MPhoneVideoPlayerObserver + { + public: + // States for this active object + enum TState + { + EIdleState, + EDeletingVideoPlayer, + EPlayingDefaultVideo + }; + + public: + + /** + * Two-phased constructor. + * @return new instance. + */ + static CPhoneRingingTonePlayerAO* NewL(); + + /** + * Destructor. + */ + ~CPhoneRingingTonePlayerAO(); + + /** + * Play ring tone + * @param aCommandParam a command param + */ + void PlayRingToneL( TPhoneCommandParam *aCommandParam ); + + /** + * Play audio ring tone + * @param aVolume Volume used to play the ringing tone. + * @param aRingingType Ringing type. + */ + void PlayAudioRingTone( + TInt aVolume, + TProfileRingingType aRingingType ); + + /** + * Playing the Beep once. + * @param aVolume volume used to play the ringing tone. + */ + void BeepOnce( TInt aVolume ); + + /** + * Play silent tone. No_sound.wav will be played. If vibration alert + * is ON, it will vibrate. + */ + void PlaySilentTone(); + + /** + * Play unsecure VoIP tone. + * Play tone if secure call fails and call is changed to unsecure call + * @since S60 5.0 + */ + void PlayUnsecureVoIPTone(); + + /** + * Stops playing the ringing tone. + * Method does not do anything if ringing tone is not playing. + */ + void StopPlaying(); + + /** + * Continues video playback ( and ringing tone ) with volume 0 + * Stream not closed ( If music player was ongoing ) + */ + void MuteRingingToneOnAnswer(); + + /** + * Continues video playback with muted audio. + * Ringing tone is stopped. + */ + void MuteRingingTone(); + + /** + * Sets video player. + * @since Series 60 v3.2 + * @param aVideoPlayer Video player reference. + */ + void SetVideoPlayer( MPhoneVideoPlayer* aVideoPlayer ); + + /** + * Play TTS tone simultaneously with Personal or Default tones. + * This method does not command phone to play TTS immediately. Instead + * it registers a request to play TTS, when Personal or default tones + * are played. + * + * @since Series 60 3.0 + * @param aTextToSay Text, that should be pronounced by the + * Text-To-Speech engine. This is normal descriptor, no UTF-8 + * and no "(tts)" prefix + * @param aVolume Volume for the TTS-tone, Does not effect the volume + * of the normal tone, that will be played simulteneously with the TTS + * @param aRingingType ringing type. + */ + void PlayTtsTone( + const TDesC& aTextToSay, + TInt aVolume, + TProfileRingingType aRingingType ); + + /** + * Play video ring tone. + * @since Series 60 3.1 + * @param aRingingTone Ringing tone to be played. + * @param aVolume Volume used to play the ringing tone. + * @param aRingingType Ringing type. + */ + void PlayVideoRingingTone( + const CPhoneRingingTone& aRingingTone, + TInt aVolume, + TProfileRingingType aRingingType, + TBool aPersonalTone = EFalse ); + + /** + * Checks if extended security required. + * @since Series 60 3.1 + * @return ETrue if extended security is required. + */ + TBool ExtendedSecurity() const; + + public: // From MPhoneCenRepObserver + + /** + * Handle the change of the setting from Central Repository + * @param aUid identifing the central repository UID. + * @param aId central repository ID. + */ + virtual void HandleCenRepChangeL( + const TUid& aUid, + const TUint aId ); + + + private: + + /** + * @see MPhoneTimer + */ + virtual void HandleTimeOutL(); + + /** + * This function is called for video player errors. + * @param aEvent The error event happend in initializing or playing. + * @param aError The error code return by MMF video player. + */ + virtual void HandleVideoPlayerError( + TPhoneVideoPlayerErrorEvent aEvent, + TInt aError ); + + /** + * This function is called when video player initialization complete + */ + virtual void HandleVideoPlayerInitComplete(); + + /** + * This function is called after the playing completes successfully + */ + virtual void HandleVideoPlayerPlayingComplete(); + + /** + * C++ default constructor. + */ + CPhoneRingingTonePlayerAO(); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Play default tone. + * @param aVolume volume used for the playing. + * @param aRingingType ringing type. + */ + void PlayDefaultTone( + TInt aVolume, + TProfileRingingType aRingingType ); + + /** + * Play backup tone. + * @param aVolume volume used for the playing. + * @param aRingingType ringing type. + */ + void PlayBackupTone( + TInt aVolume, + TProfileRingingType aRingingType ); + + /** + * Convert ringing type from PhoneAppEnging to the ringing type in + * MPhoneVideoPlayer. + * @since Series 60 3.1 + * @param aRingingType the ringing type form PhoneAppEngine. + * @return ringing type of MPhoneVideoPlayer. + */ + MPhoneVideoPlayer::TPlayMode ConvertVideoRingingType( + TProfileRingingType aRingingType ); + + /** + * Plays default L1 or L2 video ring tone asynchronously. + * @since Series 60 3.1 + */ + void PlayDefaultVideoAsync(); + + /** + * Deletes video player and plays default L1 or L2 + * tone asynchronously. + * @since Series 60 3.1 + */ + void DeleteVideoPlayerAndPlayDefaultAsync(); + + /** + * @see CActive::RunL. + */ + void RunL(); + + /** + * @see CActive::DoCancel. + */ + void DoCancel(); + + /** + * Checks if ringing tone file's size is larger than the size limit. + * If size limit is exceeded, default tone is played instead. + * @since 3.1 + * @param aRingingTone Tone to check. + * @return EFalse if the limit was exceeded and thus default tone played. + * ETrue if tone file's size was valid and the checked tone + * can be played. + */ + TBool CheckAndHandleToneSizeLimit( CPhoneRingingTone* aRingingTone ); + + /** + * Checks if ringing tone file's size is larger than the size limit. + * @since 3.1 + * @param aFile File to check. + * @param aSizeLimitKB the size limit in kB is set to this variable. + * @return KErrNone if the file can be used as a ringing tone. + * KErrTooBig if the file size limit is exceeded. + * Other error value if error happened during size checking. + */ + TInt CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB ); + + /** + * Reads from central repository the file size limit of following tones: + * -contact's personal ringing tone + * -voice call line1 + * -voice call line2 + * Value 0 means all sizes are allowed. + * @since 3.1 + * @param aSizeLimitKB the size limit in kB is read to this variable. + * @return leaves on error. + */ + void GetMaxToneFileSizeL( TInt& aSizeLimitKB ) const; + + private: // Data + + // Indicate which tone is playing or need to be played: + // EIdle - idle, + // EVideoTonePlaying - playing video ringing tone + // ESilentVideoTonePlaying - silent playing video ringing tone + // EPersonalVideoTonePlaying - personal playing video ringing tone + enum TTonePlayingStatus + { + EIdle, + EVideoTonePlaying, + ESilentVideoTonePlaying, + EPersonalVideoTonePlaying + }; + + // Current playing status. + TTonePlayingStatus iTonePlayingStatus; + + // Audio/Video tone, not owned + CPhoneRingingTone* iAudioVideoRingingTone; + + // Volume for backup tone playing. + TInt iVolume; + + // Ringing type for backup tone playing. + TProfileRingingType iRingingType; + + // Timer. + CPhoneTimer* iTimer; + + // DRM extend security + TBool iExtSecNeeded; + + // Video ringing tone player + MPhoneVideoPlayer* iVideoPlayer; + + // State of this active object + TState iState; + + // Voice call ringing tone file size max value. + TInt iToneFileSizeLimitKB; + + // Flag. Indicates video scaling capability of the device. + TBool iArbitraryVideoScaling; + + // Ringing tone server. + RPhoneRingingTonePlayer iToneServer; + + }; + +#endif // CPHONERINGINGTONEPLAYERAO_H + +// End of File