phoneapp/phoneringingtoneplayer/inc/cphoneringingtonecontroller.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:28:42 +0200
changeset 21 92ab7f8d0eab
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* Copyright (c) 2009 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:
*
*/

#ifndef CPHONERINGINGTONECONTROLLER_H
#define CPHONERINGINGTONECONTROLLER_H

// INCLUDES
#include <e32base.h>
#include <Profile.hrh>
#include "mphoneaudioplayerobserver.h"
#include "mphonevideoplayerobserver.h"
#include "mphonecoveruiobserver.h"
#include "cphoneaudioplayer.h"
#include "mphonetimer.h"
#include "mphonevideoplayer.h"
#include "cphonemediatorsender.h"

// FORWARD DECLARATIONS
//class MPhoneRingingToneObserver;
class CPhoneAudioPlayer;
class CPhoneRingingtonePlayer;
class CPhoneTTSPlayer;
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
*/
NONSHARABLE_CLASS(CPhoneRingingToneController) :
    public CBase,
    private MPhoneVideoPlayerObserver,
    private MPhoneCoverUiObserver
    {
    public:
        // States for this active object
        enum TState
            {
            EIdleState,  
            EDeletingAudioPlayer,
            EDeletingVideoPlayer,
            EPlayingDefaultVideo
            };

    public:
        
        /**
        * Two-phased constructor.
        * @return new instance.
        */
        IMPORT_C static CPhoneRingingToneController* NewL();
        
        /**
        * Destructor.
        */
        ~CPhoneRingingToneController();

        /**
        * Play ring tone
        * @param aCommandParam a command param
        */
        IMPORT_C void PlayRingToneL( TPhoneCommandParam *aCommandParam );

        /**
        * Stops playing the ringing tone.
        * Method does not do anything if ringing tone is not playing.
        */
        IMPORT_C void StopPlaying();

        /**
        * Continues video playback ( and ringing tone ) with volume 0
        * Stream not closed ( If music player was ongoing ) 
        */
        IMPORT_C void MuteRingingToneOnAnswer();
          
        /**
        * Continues video playback with muted audio.
        * Ringing tone is stopped.
        */
        IMPORT_C void MuteRingingTone();
        
          
        /**
        * Sets video player.
        * @since Series 60 v3.2
        * @param aVideoPlayer Video player reference.
        */
        void SetVideoPlayer( MPhoneVideoPlayer* aVideoPlayer );

        /**
        * 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;
   
   
        /**
        * Command when necessary Cover UI to play video ringing tone.
        * return ETrue if Cover ui handle video ringing tone playing.
        * return EFalse if Phone must handle video ringing tone playing.
        */
        TBool CoverUIPlayVideoRingingToneL( 
            const CPhoneRingingTone& aRingingTone );

        /**
        * This function is called when Mediator receives response to the sent
        * ShowMultiMediaRingingTone command.
        * @param aStatus - Standard Symbian error code indicating the
        *                  success of the command.
        */
        void ShowMultimediaRingingToneResponseL( TInt aStatus );

    private: // from MPhoneVideoPlayerObserver

        /**
        * HandleVideoPlayerError
        */
        virtual void HandleVideoPlayerError( 
            TPhoneVideoPlayerErrorEvent aEvent,
            TInt aError );

        /**
        * HandleVideoPlayerInitComplete
        */
        virtual void HandleVideoPlayerInitComplete();

        /**
        * HandleVideoPlayerPlayingComplete
        */
        virtual void HandleVideoPlayerPlayingComplete();
   
    private: 
        
        /**
        * C++ default constructor.
        */
        CPhoneRingingToneController();

        /**
        * By default Symbian OS constructor is private.
        */
        void ConstructL();


        /**
        * 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();
        
        /**
        * Mutes the ringing tone.
        */
        void DoMuteRingingTone();
        
        /**
        * Play audio ring tone 
        */
        void PlayAudioRingTone( 
            TInt aVolume, 
            TProfileRingingType aRingingType );
        

    private:    // Data

        // Audio/Video tone
        CPhoneRingingTone* iAudioVideoRingingTone;

        // Volume for backup tone playing.
        TInt iVolume;

        // Ringing type for backup tone playing.
        TProfileRingingType iRingingType;

        // Video ringing tone player
        MPhoneVideoPlayer* iVideoPlayer;

        // Pointer to Mediator Sender
        CPhoneMediatorSender* iMediatorSender;

        // Active Cover UI command EPhoneCoverUiShowMultimediaRingingTone
        TBool iActiveCoverUICommand;
        
        // Flag. Indicates video scaling capability of the device.
        TBool iArbitraryVideoScaling;
        
        CPhoneRingingtonePlayer* iRingingtonePlayer;
        
        CPhoneTTSPlayer* iTTSPlayer; 

    };

#endif      // CPHONERINGINGTONECONTROLLER_H
            
// End of File