mmserv/tms/tmsserver/inc/tmsrtplayer.h
changeset 12 5a06f39ad45b
child 21 2ed61feeead6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/tms/tmsserver/inc/tmsrtplayer.h	Fri Apr 16 15:29:42 2010 +0300
@@ -0,0 +1,475 @@
+/*
+ * Copyright (c) 2010 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 TMSRINGTONEPLAYER_H
+#define TMSRINGTONEPLAYER_H
+
+// INCLUDES
+#include <MProEngEngine.h>
+#include <MProEngProfile.h>
+#include "tmsrtaudiohdlrobsrv.h"
+#include "tmsrtplayerobsrv.h"
+#include "tmsrtaudiohdlr.h"
+#include "tmstimer.h"
+#include "tmsasyncreqao.h"
+#include "tmsrtparam.h"
+
+namespace TMS {
+
+// FORWARD DECLARATIONS
+class TMSRtAudioHdlr;
+class TMSTimer;
+class CMdaServer;
+class TMSRtContainer;
+class TMSRtParam;
+
+// 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.
+ */
+class TMSRingTonePlayer : public CBase,
+                          public TMSRtAudioHdlrObsrv,
+                          public TMSTimerObsrv,
+                          public TMSAsyncReqObsrv
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     * @return new instance.
+     */
+    static TMSRingTonePlayer* NewL(TMSRtPlayerObsrv& aObserver);
+
+    /**
+     * Destructor.
+     */
+    ~TMSRingTonePlayer();
+
+    /**
+     * Construct default tone player.
+     */
+    void CreateDefaultRtPlayerL();
+
+    /**
+     * Do construct tone.
+     * @param aRtParam
+     * @param aFile
+     */
+    void CreateRingTonePlayerL(const TRtPlayerType aPlayer,
+            const TDesC& aFile = KNullDesC());
+
+    /**
+     * Construct audio player.
+     */
+    void CreateAudioPlayerL();
+
+    /**
+     * Construct sequence player.
+     * @param aPlayer
+     */
+    void CreateSequencePlayerL(const TRtPlayerType aPlayer);
+
+    /**
+     * Construct custom sequence players.
+     * @param aSequence
+     */
+    void CreateCustomSequencePlayerL(const TDesC8& aSequence);
+
+    /**
+     * Construct TTS player.
+     * @param aTextToSay
+     */
+    void CreateTTSPlayerL(const TDesC& aTextToSay);
+
+    /**
+     * Delete TTS player.
+     */
+    void RemoveTTSPlayer();
+
+    /**
+     * Play ring tone
+     */
+    void PlayRingToneL();
+
+    /**
+     * Play audio ring tone
+     */
+    void PlayAudioRingToneL();
+
+    /**
+     * Playing the Beep once.
+     */
+    void BeepOnceL();
+
+    /**
+     * Play silent tone. No_sound.wav will be played.
+     * If vibration alert is ON, phone will vibrate.
+     */
+    void PlaySilentToneL();
+
+    /**
+     * Play unsecure VoIP tone.
+     * Play tone if secure call fails and call is changed to unsecure call
+     */
+    void PlayUnsecureVoIPToneL();
+
+    /**
+    * Play custom sequence tone.
+    */
+    void PlaySequenceToneL();
+
+    /**
+     * Stops playing the ringing tone.
+     */
+    void StopPlaying();
+
+    /**
+     * Continues video and audio RT playback with volume 0
+     */
+    void MuteRingTone();
+
+    /**
+     * Deinitialize Ringtone player.
+     */
+    void DeinitRingTonePlayer();
+
+    /**
+     * Play default tone.
+     */
+    void PlayDefaultToneL();
+
+    /**
+     * Play TTS tone along with audio RT. Only supported with Default and
+     * custom sample tones. TTS does not start playing immediately.
+     * This method does not command phone to play TTS immediately but after
+     * pre-determined delay.
+     */
+    void PlayTtsTone();
+
+    /**
+     * Checks if extended security is required.
+     * @return ETrue if extended security is required.
+     */
+    TBool ExtendedSecurity() const;
+
+    /*
+     * Return RT player type
+     */
+    TRtPlayerType PlayerType() const;
+
+    /*
+     * From TMSAsyncReqObsrv
+     */
+    virtual void HandleError(TInt aError);
+    virtual void HandleAsyncReq();
+
+private:
+
+    /**
+     * Creates single beep tone player.
+     */
+    void CreateBeepOncePlayerL();
+
+    /**
+     * Creates silent tone player.
+     */
+    void CreateSilentPlayerL();
+
+    /**
+     * Creates unsecure voip tone player.
+     */
+    void CreateUnsecureVoipPlayerL();
+
+    /**
+     * Initializes ring tone configuration parameters.
+     */
+    void InitRtParamsL(TRtPlayerType aPlayerType);
+
+    /*
+     * from TMSRtAudioHdlrObsrv
+     */
+    void RtAudioHdlrEvent(TInt aEvent, TInt aError, TInt aPlayer);
+
+    /**
+     * Handle RT player error event.
+     */
+    void HandleRtAudioError(TInt aEvent, TInt aError, TInt aPlayer);
+
+    /**
+     * Handle RT player initialize complete event.
+     */
+    virtual void HandleRtAudioInitComplete(TInt aEvent, TInt aError,
+            TInt aPlayer);
+
+    /**
+     * Handle RT play complete event.
+     */
+    virtual void HandleRtAudioPlayComplete(TInt aEvent, TInt aError,
+            TInt aPlayer);
+
+    /**
+     * @see TMSTimerObsrv
+     */
+    virtual void HandleTimeOutL();
+
+    /**
+     * Enumerates how many times TTS has played
+     * ESaidOnce
+     * ESaidTwice
+     */
+    enum TTtsStatus
+        {
+        ESaidOnce,
+        ESaidTwice
+        };
+
+    /**
+     * C++ default constructor.
+     */
+    TMSRingTonePlayer(TMSRtPlayerObsrv& aObserver);
+
+    /**
+     * Default Symbian OS constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Play backup tone.
+     */
+    void PlayBackupToneL();
+
+    /**
+     * Handle audio player error.
+     * @param aDelete ETrue if deletion of the player allowed.
+     * @param aSync ETrue if synchronous deletion of players is allowed.
+     */
+    void DoHandlePlayerError(TBool aDelete, TBool aSync);
+
+    /**
+     * Convert ringing type from TProfileRingingType to local type.
+     * @param aRingingType ringing type form PhoneAppEngine.
+     * @return local ringing type mapping.
+     */
+    TMSRtAudioHdlr::TRingingType ConvertRingingType(
+            TProfileRingingType aRingingType);
+
+    /**
+     * Construct default ring tone container
+     */
+    void CreateDefaultRingToneL();
+
+    /**
+     * Load ring tone settings from curent Profile
+     */
+    void LoadActiveProfileSettingsL();
+
+    /**
+     * Load ring tone settings from curent Profile
+     */
+    void LoadProfileRingToneL();
+
+    /**
+     * Sets TTS volume ramp and schedules next TTS playback
+     */
+    void ResumeTTS();
+
+    /**
+     * Construct backup tone player.
+     */
+    void CreateBkpRtPlayerL();
+
+    /**
+     * Delete all players.
+     */
+    void RemovePlayers();
+
+    /**
+     * Delete single player based on index.
+     */
+    void DeletePlayer();
+
+    /**
+     * Deletes player asynchronoysly.
+     * @param aPlayer player to be deleted.
+     */
+    void DeletePlayerAsync(TRtPlayerType aPlayer);
+
+    /**
+     * Wrapper of DoHandleTtsDelayTimeout, that can be used as TCallback.
+     * Immediately passes control to DoHandleTtsDelayTimeout method.
+     * @param object Object to call DoHandleTtsDelayTimeout() on.
+     * @return status.
+     */
+    static TInt HandleTtsDelayTimeout(TAny* object);
+
+    /**
+     * It is called after TTS delay elapsed. Starts playing TTS.
+     */
+    void DoHandleTtsDelayTimeout();
+
+    /**
+     * Returns currently active player which is used with TTS player.
+     * @return pointer to active player.
+     */
+    TMSRtAudioHdlr* GetCurrentlyActiveAudioPlayerWithTTS();
+
+    /**
+     * Calculates new volume and ramptimes for Ascending TTS and normal TTS
+     * ringing.
+     * @param aStatus - TTS player status.
+     */
+    void SolveNewVolumeAndRamptime(TTtsStatus aStatus);
+
+    /**
+     * Restarts currently active ringingtone player.
+     */
+    void ReStartRingTonePlayer();
+
+    /**
+     * Checks if ring tone file size is within allowed limit. If size limit
+     * is exceeded, default tone is played instead.
+     * @param aRingingTone RT file to be checked.
+     * @return EFalse if the limit was exceeded.
+     *         ETrue  if tone file's size was valid.
+     */
+    TBool CheckAndHandleToneSizeLimit(TMSRtContainer* aRingingTone);
+
+    /**
+     * Checks if ring tone file size is larger than the allowed limit.
+     * @param aFile   File to check.
+     *        aSizeLimitKB  the size limit in kB.
+     * @return KErrNone          if the file can be used as a ring 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.
+     * @param aSizeLimitKB  the size limit in kB is read to this variable.
+     * @return leaves on error.
+     */
+    void GetMaxToneFileSizeL(TInt& aSizeLimitKB) const;
+
+    /**
+     * Returns currently active audio player.
+     * @return Currently active audio player or NULL if none is active.
+     */
+    TMSRtAudioHdlr* ActiveAudioPlayer();
+
+private:
+
+    TMSRtAudioHdlr* iAudioPlayer;
+    TMSRtAudioHdlr* iBeepOncePlayer;
+    TMSRtAudioHdlr* iSilentPlayer;
+    TMSRtAudioHdlr* iUnsecureVoIPTonePlayer;
+    TMSRtAudioHdlr* iDefaultPlayer;
+    TMSRtAudioHdlr* iSequencePlayer;
+    TMSRtAudioHdlr* iTtsPlayer;
+    TMSRtAudioHdlr* iBackupPlayer;
+
+    // Indicate which tone is playing
+    enum TTonePlayingStatus
+        {
+        EIdle,
+        EAudioTonePlaying,
+        EBeepOnce,
+        ESilentTonePlaying,
+        EUnsecureVoIPTonePlaying,
+        EDefaultTonePlaying,
+        EBackupTonePlaying,
+        EVideoTonePlaying,
+        ESilentVideoTonePlaying,
+        ESequenceTonePlaying,
+        EPersonalVideoTonePlaying
+        };
+
+    // Current playing status.
+    TTonePlayingStatus iTonePlayingStatus;
+
+    // True if TTS is currently playing. Different from iTonePlayingStatus,
+    // because TTS is played in parallel with the other tone types.
+    TBool iTtsTonePlaying;
+
+    // Zero -based index of the TTS delay that is "executed" currently,
+    // or to be "executed" after the current playing of the TTS tone.
+    TInt iTtsDelayIndex;
+
+    // True if TTS tone should be played when the next playing of the
+    // default or personal tone is fired.
+    TBool iTtsToneToBePlayed;
+
+    // Audio/Video RT file container
+    TMSRtContainer* iRtContainer;
+
+    // Volume of the TTS
+    TInt iTtsVolume;
+
+    // RT player type
+    TInt iRtType;
+
+    //
+    TMSRtPlayerObsrv& iRtObserver;
+    TMSAsyncReqAO* iAsyncReqAO;
+    TMSRtParam iRtParam;
+
+    // 3 sec timer that fires up fallback logic.
+    TMSTimer* iTimer;
+
+    // Timer that tracks delays before playing TTS.
+    TMSTimer* iTtsDelayTimer;
+
+    // Number of times TTS tone should be played for the current ringtone.
+    // If ringing tone is to be played just once, iTtsDelayCount == 1,
+    // otherwise iTtsDelayCount == KTtsDelayCount.
+    TInt iTtsDelaysCount;
+
+    // Array of players to be deleted asynchronously.
+    RPointerArray<TMSRtAudioHdlr> iAsyncDeletePlayers;
+
+    // DRM extend security flag.
+    TBool iExtSecNeeded;
+
+    // Async delete request is active.
+    TBool iAsyncReq;
+
+    // Ringing Type of TTS Player.
+    TProfileRingingType iTtsRingingType;
+
+    // Counter for TTS timeouts.
+    TInt iTTsTimeOutCounter;
+
+    // Voice call RT file size max.
+    TInt iToneFileSizeLimitKB;
+
+    MProEngEngine* iEngine;
+    MProEngProfile* iProfile;
+    };
+
+} //namespace TMS
+
+#endif // TMSRINGTONEPLAYER_H
+
+// End of File