controlpanelui/src/tonefetcher/tonefetcherengine/private/CTonePlayer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:15:28 +0300
branchRCL_3
changeset 34 90fe62538f66
permissions -rw-r--r--
Revision: 201029 Kit: 201035

/*
 * 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:
 *     The header file for tone playing.
 *     
 */

#ifndef CTONEPLAYER_H
#define CTONEPLAYER_H

#include <e32base.h>
#include <coemain.h>
#include <DrmAudioSamplePlayer.h>
#include <mdaaudiotoneplayer.h>
#include <videoplayer.h>
#include <centralrepository.h>
#include <apgcli.h>  // for RApaLsSession
#include <e32property.h>

class C3DRingingToneInterface;
class RWindow;
class MTonePlayingWatcher;
/**
* CMFPreviewHandlerBase
*
* Base class for CMFAudioPreviewHandler.
 */
class CMFPreviewHandlerBase : public CBase
                        
    {
    public:     
       enum TMediaFileType
           {
           EMediaFileTypeAudio = 0,
           EMediaFileTypeVideo
           };
        enum TPlayerStatus
            {
            EPlayerNotCreated,
            EPlayerInitializing,
            EPlayerReady,
            EPlayerPlaying,
            EPlayerInitialized,
            EPlayerPlayingWith3DEffect
            };
    
        // these must match with the ones in Profile Engine
        enum TRingingTypes
            {
            ERingingTypeRinging = 0,
            ERingingTypeAscending,
            ERingingTypeRingOnce,
            ERingingTypeBeepOnce,
            ERingingTypeSilent
            };
    
        enum TFLAllowScreenSaver
            {
            EFLScreenSaverAllowed = 0, EFLScreenSaverNotAllowed
            };
    public:    
        void SetAttrL(const TDesC& aFileName);    
        TInt Attr(TInt aAttr);    
        virtual void PlayL() = 0;
        virtual void Stop() = 0;
        virtual TBool IsPlaying() = 0;
           
    protected:    
        virtual ~CMFPreviewHandlerBase();
    
    protected:    
        /**
         * C++ default constructor.
         */
        CMFPreviewHandlerBase( );    
        /**
         * By default Symbian OS constructor is private.
         */
        void ConstructL();
     
    protected:
        TInt ConvertVolume(TInt aVolume);
        void ReadActiveProfileL();
        TInt GetDataType(const TDesC& aFileName, TDataType& aDataType);
        void ReadDefaultToneL();   
        void DisableBackLight();    
        static TInt DoResetInactivityTimer(TAny* aObject);
        TInt RingingVolume();
        TInt RingingType();
        TInt Vibra();
        TInt Echo3D();
        TInt Effect3D();
        static TInt ConvertVolume(TInt aVolume, TInt aMaxVolume);    
    
    protected:
        TInt iRingingVolume;
        TInt iRingingType;
        TInt iVibra;
        TInt i3DEffect;
        TInt i3DEcho;
        TInt iMediaType;
        TInt iFileSize;
        HBufC* iFullName;    
        TBool iActiveProfileRead;
        TInt iActiveProfileRingingVolume;
        TInt iActiveProfileRingingType;
        TInt iActiveProfileVibra;
        TInt iActiveProfile3DEffect;
        TInt iActiveProfile3DEcho;    
        TInt iPlayerStatus;    
        // handle to window
        RWindow* iWindow; // does not own    
        // for getting file MIME types
        RApaLsSession iApaSession;    
        // for setting screensaver on/off
        RProperty iProperty;    
        // default ringing tone
        TFileName iDefaultTone;        
        /**
         * Timer for resetting the user inactivity timeout
         */
        CPeriodic* iBacklightTimer;
    };

// CLASS DECLARATION
/**
 *  This class is used for playing the tones.
 *
 */

class CTonePlayer : public CMFPreviewHandlerBase,
                    public MDrmAudioPlayerCallback,
                    public MMdaAudioToneObserver,
                    public MCoeForegroundObserver
    {
    public:
        static CTonePlayer* NewL( MTonePlayingWatcher *aWatcher );
        static CTonePlayer* NewLC( MTonePlayingWatcher *aWatcher );
        virtual ~CTonePlayer();   
    
        
    public:
        void PlayL();
        void Stop();
        TBool IsPlaying();
    
    private:
        CTonePlayer( MTonePlayingWatcher *aWatcher );
        void ConstructL();
        void Cancel();
        void SetAudioRingingType( TInt aRingingType );
        void SetToneRingingType( TInt aRingingType );
        TInt ConvertVolume( TInt aVolume );        
            
    private:
        // from MMdaAudioToneObserver
        virtual void MatoPrepareComplete( TInt aError );
        virtual void MatoPlayComplete(TInt aError);
    
    private:
        // from MDrmAudioPlayerCallback
        void MdapcInitComplete(TInt aError,
                const TTimeIntervalMicroSeconds& aDuration);
        void MdapcPlayComplete(TInt aError);
        
        // from MCoeForegroundObserver
        void HandleLosingForeground();
        void HandleGainingForeground();
    
    private:
        //wacher of the playing process
        MTonePlayingWatcher* iTonePlayWatcher;
        
        // audio player
        CDrmPlayerUtility* iAudioPlayer;
    
        /// Audioplayer status
        TPlayerStatus iAudioPlayerStatus;
    
        /// toneplayer
        CMdaAudioToneUtility* iTonePlayer;
    
        /// Toneplayer status
        TPlayerStatus iTonePlayerStatus;
        
        // plugin for playing 3D effects
        C3DRingingToneInterface* i3dRingingTonePlugin;
    
    };
    
#endif /* CTONEPLAYER_H */