mobilemessaging/mmsui/viewerinc/UniMmsViewerAppUi.h
changeset 0 72b543305e3a
child 2 0bf1d54f37d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/viewerinc/UniMmsViewerAppUi.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,1123 @@
+/*
+* Copyright (c) 2002-2006 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:  
+*     CMmsViewerAppUi class definition.
+*
+*/
+
+
+
+#ifndef MMSVIEWERAPPUI_H
+#define MMSVIEWERAPPUI_H
+
+// INCLUDES
+#include <finditemengine.h>
+
+#ifdef RD_SCALABLE_UI_V2
+#include <akntoolbarobserver.h>
+#endif
+
+#include <MuiuMessageIterator.h>
+
+#include <MsgEditorAppUi.h>             // CMsgEditorAppUi
+
+#include <cenrepnotifyhandler.h>
+#include <DRMCommon.h>
+
+#include <msgasynccontrolobserver.h>    //MMsgMediaControlObserver
+#include <uniobject.h>
+#include <unidrminfo.h>                 // CUniDrmInfo
+#include <AknNaviDecoratorObserver.h>
+
+#include "MmsViewer.hrh"                // enumerations
+#include "MmsViewerOperation.h"
+#include "UniMmsSvkEvents.h"               // MMmsSvkEventsObserver
+
+// FUNCTION PROTOTYPES
+GLREF_C void Panic( TMmsViewerExceptions aPanic ); 
+
+// FORWARD DECLARATIONS
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+class CAknNavigationDecorator;
+#endif
+class CAknNavigationControlContainer;
+class CAknTitlePane;
+class CAknWaitDialog;
+class CMdaAudioPlayerUtility;
+class MVideoControlStateObserver;
+class CFindItemMenu;
+class CFindItemEngine;
+class CDocumentHandler;
+class CDRMRights;
+
+class CAknLocalScreenClearer;
+class CMmsViewerLaunchOperation;
+class CMmsViewerChangeSlideOperation;
+class CMmsViewerHeader;
+class CMmsViewerSendReadReportOperation;
+
+class CMsgMediaInfo;
+class CMsgMediaControl;
+class CMsgAudioControl;
+class CMsgVideoControl;
+class CMsgImageControl;
+#ifdef RD_SVGT_IN_MESSAGING
+class CMsgSvgControl;
+#endif
+class CMmsConformance;
+class CUniSlideLoader;
+class CUniSmilModel;
+class CUniObjectList;
+
+class CRepository;
+class CSendingServiceInfo;
+class CMsgVoIPExtension;
+class CAknInputBlock;
+class CPeriodic;
+class CAknVolumeControl;
+class CAknInputBlock;
+class CAknToolbar;
+
+// CLASS DECLARATION
+
+/**
+*  CMmsViewerAppUi
+*  Inherited from CMsgEditorAppUi
+*/
+class CMmsViewerAppUi :
+    public CMsgEditorAppUi,
+    public MCenRepNotifyHandlerCallback,
+    public MMsgAsyncControlObserver,
+    public MMmsViewerOperationObserver,     // ViewerOperationEvent
+    public MMmsSvkEventsObserver,           // MmsSvkChangeVolumeL
+    public MAknServerAppExitObserver,       // for image viewer
+#ifdef RD_SCALABLE_UI_V2
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+    public MAknNaviDecoratorObserver,       //for navidecorator
+#endif
+    public MAknToolbarObserver,             //toolbar
+#endif
+    public MCoeControlObserver,              // of CAknVolumeControl
+    public MUniObjectObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ default constructor.
+        */
+        CMmsViewerAppUi();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CMmsViewerAppUi();
+        
+    protected: 
+    
+        /**
+         * Prepare to exit.
+         * from CEikAppUi
+         */
+        void PrepareToExit();
+
+    private: // New functions        
+        
+        /**
+        * Calls InitNavipaneL, PrepareHeaderL and PrepareBodyL
+        * and does some validity checks.
+        */
+        void DrawSlideL();
+        
+        /**
+        * Set waiting note.
+        */
+        void SetPendingNote(    TInt                aResourceId, 
+                                CUniObject*         aObject = NULL,
+                                TInt                aError = KErrNone );
+
+        /**
+        * Shows notes related to message opening, 
+        * which could not shown until loading was complete
+        */
+        void ShowPendingNoteL();
+
+        /**
+        * Changes slide. Calls ResetViewL and DrawSlideL. Creates
+        * a screen blanker to hide the view operations from the user.
+        * @param aSlideNumber The number of the slide to be shown next.
+        * @param aScreenClearer Screen clearer is run
+        */
+        void ChangeSlideL( TInt aSlideNumber, TBool aScreenClearer );
+
+        /**
+        * Initializes navipane according to message content
+        */
+        void InitNavipaneL();
+        
+        /**
+        * Sub function for InitNavipaneL();
+        * @param aText string in the right hand side of navipane
+        */
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        void CreateTabGroupL( const TDesC& aText );
+#endif 
+        /**
+        * Resets the message view. This function is called
+        * when moving from slide to slide.
+        * @param TBool ETrue -> only body reseted
+        *              EFalse -> body and header reseted
+        */
+        void ResetViewL();
+
+
+        // Command functions
+        
+        /**
+        * Implements reply commands.
+        * Launches MMS Editor for replying/forwarding.
+        * @param aCase either EReplyToSender or EReplyToAll
+        */
+        void DoReplyL( TInt aCase );
+
+        /**
+        * Implements forward command.
+        * Launches MMS Editor for replying/forwarding.
+        */
+        void DoForwardL();
+
+        TBool CanForwardL( TInt& aResourceId );
+        TBool CanForwardObjectsL( TInt& aResourceId );
+        void CanForwardObjectsInListL( 
+                                        CUniObjectList* aObjectList, 
+                                        TInt& aSdCount, 
+                                        TInt& aFlCount, 
+                                        TInt& aNonConfCount, 
+                                        TInt& aNormalCount,
+                                        TInt& aResourceId ) const;
+
+        /**
+        * Implements reply via SMS/Audio message command.
+        * Launches SMS/Audio message/Email Editor by utilising SendUI.
+        * @param aCase EMmsViewerReplyViaAudio or EMmsViewerReplyViaMail
+        */
+        void DoReplyViaL( TInt aCase);
+
+        /**
+        * Implements the view image command.
+        * Launches PhotoAlbum's ImageViewer.
+        */
+        void DoViewImageL();
+
+        /**
+        * Implements the objects command.
+        * Opens the Objects view where the user can access
+        * individual media elements in a list format.
+        */
+        void DoObjectsL();
+
+        /**
+        * Implements the move command.
+        * Shows a folder selection dialog
+        * (CMsgFolderSelectionDialog), moves the message
+        * entry into selected folder and exits the viewer.
+        */
+        void DoMoveMessageL();
+        
+        /**
+        * Implements the "Send" key functionality.
+        * Uses MsvUiServiceUtilities::CallServiceL to create a call.
+        */
+        void DoHandleSendKeyL();
+        
+        /**
+        * Implements the message info command.
+        * Opens message info dialog provided by MMS ui mtm.
+        */
+        void DoMessageInfoL();
+        
+        /**
+        * Start SMIL presentation
+        */
+        void DoShowPresentationL();
+
+        /**
+        * Implements the delete command.
+        * Shows a confirmation query, deletes the message
+        * entry and exits the viewer.
+        */
+        void DoDeleteAndExitL();
+
+        /**
+        * Sets qtn_drm_preview_msg into waiting queue ( SetPendingNote() ),
+        * if needed.
+        */ 
+        void ResolveDrmWaitingNotes();
+        
+        //Audio related functions:
+        //
+        
+        /**
+        * Cancels the automatic play of an audio (or a video)
+        * file.
+        */
+        void CancelAutoplay();
+                  
+        /**
+        * State of an control on the UI has changed
+        * @param aControl control
+        * @param aState new state
+        * @param aState previous state
+        */
+        void MsgAsyncControlStateChanged(   
+                                    CMsgBaseControl& aControl,
+                                    TMsgAsyncControlState aNewState,
+                                    TMsgAsyncControlState aOldState );
+        void DoMsgMediaControlStateChangedL(   
+                                    CMsgMediaControl& aControl,
+                                    TMsgAsyncControlState aNewState,
+                                    TMsgAsyncControlState aOldState );
+        
+        /**
+        * Asynchronous control on the UI has received resource change event.
+        *
+        * @param aControl control
+        * @param aType event type
+        */
+        void MsgAsyncControlResourceChanged( CMsgBaseControl& aControl, TInt aType );
+        
+        void DoVideoStateChangeL( TInt aState );
+        void DoAudioStateChangeL( TInt aState );
+
+        /**
+        * Handles the actual navipane and softkey updating according
+        * to the state of audio playback. This function does not set 
+        * volume control visible, it is done using ShowVolumeL( ).
+        * When playing starts empties the navi pane.
+        * Hides the volume control when playing stops.
+        */
+        void UpdatePanesL( TBool aAudioPlaying, TBool aVideoPlaying );
+
+        /**
+        * From MCenRepNotifyHandlerCallback
+        */
+        void HandleNotifyInt(TUint32 aId, TInt aNewValue);
+        void HandleNotifyError(TUint32 aId, TInt error, CCenRepNotifyHandler* aHandler);
+        void HandleNotifyGeneric(TUint32 aId);
+
+        /**
+        * From MMessageIteratorObserver. 
+        * @param See documentation of MMessateIteratorObserver
+        */
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        void HandleIteratorEventL(TMessageIteratorEvent aEvent);
+#endif        
+        /**
+        * Returns ETrue if the message is self composed and
+        * EFalse otherwise (a received message).
+        * @return ETrue if message is self composed,
+        *         EFalse otherwise (received)
+        */
+        TBool IsOwnMessage() const;
+                
+        /**
+        * Returns ETrue if the message has a sender, EFalse
+        * otherwise (either self composed message or received
+        * from a secret number).
+        * @return ETrue if message has sender
+        *         EFalse otherwise
+        */
+        TBool HasSender() const;
+        
+        /**
+        * Checks whether Reply->To all should be shown.
+        * For received messages checks that there is more
+        * than one recipient. For sent messages checks that
+        * there is at least one recipient.
+        * @return ETrue if Reply->To all should be shown
+        *         EFalse otherwise
+        */
+        TBool ShowReplyToAll() const;
+
+        /**
+        * Checks whether Reply menu should be shown at all.
+        * @return ETrue if Reply menu should be shown
+        *         EFalse otherwise
+        */
+        TBool ShowReplyMenu() const;
+        
+        // Notes:
+
+        /**
+        * Show an information note
+        * @param aResourceId The resource if of the note to be shown
+        */
+        void ShowInformationNoteL( TInt aResourceId );
+        
+        /**
+        * Show an information note
+        * @param aResourceId The resource if of the note to be shown
+        */
+        void ShowErrorNoteL( TInt aResourceId );
+        
+        /**
+        * Show a confirmation query
+        * @param aResourceId The resource if of the query to be shown
+        */
+        TInt ShowConfirmationQueryL( TInt aResourceId ) const;
+
+        TInt ShowConfirmationQueryL(   TInt            aResourceId,
+                                        const TDesC&    aString) const;
+
+        /**
+        * Auxiliary function. Shows a confirmation query if it is not shown before. 
+        *
+        * @param aResourceID
+        * @return the return value returned by CAknQueryDialog::ExecuteLD
+        */  
+        TInt ShowGuidedModeConfirmationQueryL( TInt aResourceID );
+
+        /**
+        * Shows "Out of disk" error note if disk space would
+        * go below critical level when allocating aSize
+        * @param aSize Bytes wanted to allocate
+        * @return ETrue if below critical after allocation
+        *         EFalse if allocation OK
+        */
+        TBool ShowOutOfDiskNoteIfBelowCriticalLevelL( TInt aSize );
+
+        /**
+        * Return a pointer to document-object
+        * @return CMmsViewerDocument*
+        */        
+        CMmsViewerDocument* Document() const;
+
+        /**
+        * Shows any DRM related notes that are related to
+        * message opening:
+        * - "No rights" query
+        * - "Expired rights" query
+        * - "Preview rights" note
+        */
+        void ResolveDRMNotesL();
+
+        /**
+        * Returns the control id of the currently focused control.
+        * @return Control id of the focused control or
+        *         EMsgComponentIdNull if no control focused
+        */
+        TInt FocusedControlId();
+
+        /**
+        * Sets automatic highlighting on/off.
+        * @param aEnable if ETrue sets automatic highlighting on,
+        *                if EFalse sets automatic highlighting off
+        */
+        void SetFindModeL( TBool aEnable );
+
+ 
+        /**
+        * Starts to play/display media including image.
+        * @param aControl control to be played
+        */         
+        void MediaPlayL(CMsgMediaControl* aControl);
+
+        /**
+        * Handle selection key for media object ( excluding 3gpp presentation )
+        * This function is entered when Options menu->Play is selected.
+        * Resulting action is one of the following: play, embedded play, activate or get rights.
+        * @param aMedia control to be be handled
+        */         
+        void MediaOpenL( CMsgMediaControl* aMedia );
+
+        /**
+        * Stops playing media. Does not stop animations. 
+        */         
+        void MediaStop();
+
+        /**
+        * Stops playing single media.
+        * @param aControl control to be played
+        */         
+        void MediaStop(CMsgMediaControl* aControl);
+
+        /**
+        * Closes every media control. Closing means freeing file
+        * specific resources that other application can use the file.
+        */         
+        void MediaClose();
+
+        /**
+        * Closes single media.
+        * @param aControl control to be played
+        */         
+        void MediaClose(CMsgMediaControl* aControl);
+
+        /**
+        * Reloads slide
+        */
+        void ReloadSlideL();
+
+        /**
+        * Resets every control. Frees all resources
+        */         
+        void MediaReset();
+
+        /**
+        * Resets single control. Frees all resources
+        */         
+        void MediaReset(CMsgMediaControl* aControl);
+
+        /**
+        * Checks whether media is initialised and media control can be
+        * selected. 
+        * This function returns ETrue, if media is DRM protected and
+        * no rights exist.
+        */         
+        TBool MediaInitializedL( CMsgMediaControl*   aMedia );
+
+        /**
+        * Checks whether media can be played or tried to be played.
+        * This function returns EFalse, if media is DRM protected and
+        * no rights exist.
+        */         
+        TBool CMmsViewerAppUi::MediaCanPlay(const CMsgMediaControl* aMedia,
+                                            const CUniObject* aMmsObject ) const;
+
+
+        /**
+        * Checks whether media can be stopped or tried to be played
+        */         
+        TBool MediaCanStop(CMsgMediaControl* aMedia);
+
+        /**
+        * Checks whether media can be paused.
+        * This means also that media is really playing.
+        */         
+        TBool MediaIsRunning(CMsgMediaControl* aMedia);
+
+        /**
+        * Returns UI control id
+        * @param aControl TMmsContolIds only
+        */         
+        CMsgMediaControl* MediaControlById(TInt aControl);
+
+        /**
+        * Starts animation
+        */
+        void StartAnimationL();
+        
+        /**
+         * Stops animation
+         */
+        void StopAnimation();
+        
+        /**
+        * Implements saving text or media object into file system from
+        * mms viewer. Saves pure text files directly and otherwise 
+        * for multimedia and xHTML files calls DoSaveObjectL()
+        */
+        void SaveObjectL();
+ 
+        /**
+        * Implements multimedia objects and xhtml into file system from
+        * mms viewer.
+        */
+        void DoSaveObjectL(CUniObject& aObject );
+ 
+        /**
+        * Shows "Upload" list query and if an item is selected, send the message
+        * as upload.
+        */
+        void UploadL();
+        
+        /** 
+        * From CEikAppUi
+        */
+        void HandleResourceChangeL(TInt aType);
+
+        /**
+        * Opens image into (embedded) image viewer
+        */
+        void ViewImageL( CMsgMediaControl& aMediaCtrl );
+
+        /**
+        * Consumes DRM rights, if DRM protected media. If no DRM rights left 
+        * or other error occurs during consuming rights, updates icon
+        * @return   ETrue: media was not DRM protected or DRM rights were 
+        *                   consumed successfully
+        *           EFalse: media was DRM protected and no rights were left 
+        *                   or other error occurred
+        */
+        TBool HandleConsumeRightsL( CMsgMediaControl& aMedia ); 
+
+
+        /**
+        * If image has not rights, error note must be shown.
+        * This function handles the situation.
+        */
+        void HandleImageNoRightsInLaunch( );
+
+
+    private: // Functions from base classes
+        
+        /**
+        * From MsgEditorAppUi
+        */
+        void DoMsgSaveExitL();
+            
+        /**
+        * From MMsgEditorLauncher.
+        * Part of the function is implemented in the DoFinaliseLaunchViewL()
+        */
+        void LaunchViewL();
+    
+        /**
+        * The actual implementation of LaunchViewL
+        */
+        void DoLaunchViewL();
+
+        /**
+        * From MMsgEditorObserver
+        * @param See documentation of MMsgEditorObserver
+        */
+        CMsgBaseControl* CreateCustomControlL( TInt aControlType );
+        
+        /**
+        * From MMsgEditorObserver
+        * @param See documentation of MMsgEditorObserver
+        */
+        void EditorObserver(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+        void DoEditorObserverL(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+        /**
+        * From CCoeAppUi
+        * @param See documentation of CCoeAppUi
+        * @return TKeyResponse
+        */
+        TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+        /**
+        * From CCoeAppUi
+        * @param See documentation of CCoeAppUi
+        */
+        void HandleWsEventL(const TWsEvent& aEvent,CCoeControl* aDestination);
+        
+        /**
+        * From CEikAppUi
+        * @param See documentation of CEikAppUi
+        */
+        void HandleCommandL( TInt aCommand );
+
+        /**
+        * From CAknAppUi
+        * @param See documentation of CAknAppUi
+        */
+        void ProcessCommandL( TInt aCommand );
+
+        /**
+        * From MEikMenuObserver
+        * @param See documentation of MEikMenuObserver
+        */
+        void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane );
+
+        /**
+        * From MAknServerAppExitObserver. Must not leave.
+        * DoHandleServerAppExitL
+        */
+        void HandleServerAppExit(TInt aReason);        
+
+        /**
+        * From MAknNaviDecoratorObserver
+        * Handles the events coming from arrow presses
+        *  related to next/previous message
+        */
+#ifdef RD_SCALABLE_UI_V2
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        void HandleNaviDecoratorEventL( TInt aEventID );   
+#endif
+#endif
+        /**
+        * From CCoeControl
+        * Handles volume changes from volume of navi pane.
+        * When Pen enabled volume can change many steps at one tap.
+        */
+        void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+   
+#ifdef RD_SCALABLE_UI_V2
+        /**
+         * From MAknToolbarObserver
+         * Should be used to set the properties of some toolbar components 
+         * before it is drawn.
+         * @param aResourceId The resource ID for particular toolbar
+         * @param aToolbar The toolbar object pointer
+         */
+        virtual void DynInitToolbarL(   TInt            aResourceId, 
+                                        CAknToolbar*    aToolbar );
+        
+        /**
+         * From MAknToolbarObserver
+         * Handles toolbar events for a certain toolbar item.
+         * @param aCommand The command ID of some toolbar item.
+         */
+        virtual void OfferToolbarEventL( TInt aCommand );
+#endif
+   
+    private:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL(); 
+
+        /** 
+        * Launches help application
+        */
+        void LaunchHelpL();
+
+        /** 
+        * Gets help context
+        */
+        
+        CArrayFix<TCoeHelpContext>* HelpContextL() const;          
+
+        void ViewerOperationEvent(  TMmsViewerOperationType     aOperation,
+                                    TMmsViewerOperationEvent    aEvent,
+                                    TInt                        aError );
+        void DoViewerOperationEventL(   TMmsViewerOperationType     aOperation,
+                                        TMmsViewerOperationEvent    aEvent );
+
+            /// loading slide has completed
+        void DoViewerOperationEventSlideL();
+            /// loading launch has completed
+        void DoViewerOperationEventLaunchL( );
+
+        TUint32 ObjectsAvailable();
+
+        void BeginActiveWait( CMmsViewerOperation* aOperation );
+        void EndActiveWait();
+
+        /**
+        * Launches wait dialog.
+        * @param aParam if slide change operation, this is index of new slide
+        */
+        void LaunchWaitDialogL( TInt aParam = 0 );
+
+        /**
+        * Executes part of the launching. See LaunchViewL()
+        */
+        void DoFinaliseLaunchViewL();
+
+        /**
+        * Gets focused CUniObject. 
+        * Object is returned only,if is EMsgImageControlId, EMsgVideoControlId, or EMsgAudioControlId.
+        * iFocusedObjectType is applicable always.
+        * @since 3.0
+        */
+        CUniObject* GetFocusedMmsObject();
+
+        /**
+        * Checks whether silent ringing type is selected.
+        * @ret ETrue, silence set
+        *      EFalse, silence not set
+        */
+        TBool IsSilenceL();
+        
+        /**
+        * Calls mms mtm ui to launch delivery status dialog after user has choosed EMmsViewerDeliveryStatus from the options menu.
+        *
+        * @since    3.0
+        */
+        void OpenDeliveryPopupL( );
+    
+        void PrintNeededControls( );
+
+        /*
+        * @return ETrue, editor is properly initialised to receive commands
+        *         EFalse, editor is not yet properly initialised to receive commands
+        */
+        TBool IsLaunched() const;
+
+        CUniObject* ObjectByMediaControl( CMsgMediaControl& aControl);
+        CUniObject* ObjectByBaseControl( CMsgBaseControl& aControl );
+
+        /*
+        * Checks whether description exists in the stored message.
+        * If it doesn't exist, description is saved into message store 
+        * from first found. Uses SetAndSaveDescriptionL() 
+        */ 
+        void CheckAndSetDescriptionL();
+        
+        /*
+        * Saves description into received message from
+        * given text object. Existence of description is no more
+        * checked. 
+        * aText text object from which description is saved
+        */ 
+        void SetAndSaveDescriptionL(const CPlainText& aText);
+
+        /*
+        * Update icon or text of MSK CBA button
+        */ 
+        void UpdateMskL( );
+        
+        void WaitReleaseOfImageL( CUniObject& aObject );
+
+        /*
+        * Check whether media object is lacking rights.
+        * If media has no rights 
+        * @param aMedia media to check 
+        * @return KErrNone, valid drm rights exits or media is not drm protected
+        *         other value, no drm rights
+        * @since 3.2
+        */ 
+        TInt MediaHasNoDrmRights( CMsgMediaControl* aMedia );
+
+        /**
+        * Implements HandleCommandL()
+        * @param See documentation of CEikAppUi
+        */
+        void DoHandleCommandL( TInt aCommand );
+
+        /**
+        * Sends read report if permitted and asked
+        */
+        void SendReadReportL(   TMmsViewerOperationType     aOperation,
+                                TMmsViewerOperationEvent    aEvent );
+
+        /**
+        * The function must be called when the volume is changed. 
+        * Any checks are not needed from caller of this function.
+        * This function changes the volume even, if volume control is not visible 
+        * in the navi pane.
+        * If changing volume level makes sense this function
+        * - changes the volume level into cenrep
+        * - show the new volume on the volume control of the navi pane.
+        * ( To check exact conditions when volume control is visible in the navi pane, 
+        * see .cpp file)
+        *         *
+        * This function resolves itself only whether the audio or video is playing.
+        * Then DoChangeVolumeL() is called, if applicable.
+        * After that to show the new volume level in the navi pane ShowVolumeL() is called.
+        *
+        * @param aVolume: indicates either absolute value, if aChange is EFalse
+        *                 or change of volume, if aChange is ETrue.
+        * @param aChange: indicates whether aVolume is absolute value or change of 
+        *                 the current volume.
+        */
+        void ChangeVolumeL( TInt aVolume, TBool aChange );
+
+        /**
+        * Otherwise like ChangeVolumeL but either audio or video must be playing.
+        * This function saves the new volume level into CenRep, if applicable.
+        * Sets the new level into audio or video player.
+        * ( To check exact conditions when volume control is visible in the navi pane, 
+        * see .cpp file)
+        *
+        * If volume set is set before playback this function can be called as follows
+        * DoChangeVolumeL( 0 , ETrue, * )
+        * @param aVolume: indicates either absolute value, if aChange is Efalse
+        *                 or change of volume, if aChange is Etrue.
+        * @param aChange: indicates whether aVolume is absolute value or change of 
+        *                 the current volume.
+        * @param aAudioPlaying  ETrue audio is playing
+        *                       EFalse video is playing
+        * @return TInt new absolute volume level
+        *              KErrNotFound, if volume level is not known.
+        *              In this case ShowVolumeL should not be called
+        *              
+        */
+        TInt DoChangeVolumeL( TInt aVolume, TBool aChange, TBool aAudioPlaying );
+
+        /**
+        * Set volume control visible into navi pane, if applicable. 
+        * Either audio or video must be playing.
+        * ( To check exact conditions when volume control is visible in the navi pane, 
+        * see .cpp file)
+        *
+        * @param aNewVolume: new volume level
+        * @param aAudioPlaying  ETrue audio is playing
+        *                       EFalse video is playing
+        */
+        void ShowVolumeL(   TInt  aNewVolume,
+                            TBool aAudioPlaying );
+
+        /** 
+        * Enables receiving events changes in foreground application status.
+        * Resolves those Window groups id, which do no stop animation, audio or
+        * video playback. The workgroup ids are assigned to member variables */
+        void GetNonStoppingWgIds( );
+
+        /** 
+        * After receiving event in change of foreground application status,
+        * checks whether new foreground application causes stopping animation,
+        * playback of audio or video.
+        * Result is set to iIsStopPlaybackWgId.
+        */
+        void ResolveCurrentWgIdL( );
+
+        /**
+        * Activates input blocker properly.
+        *
+        * @param aActiveObjectToCancel Pointer to an active object that is called when 
+        *                              input blocker is cancelled. Can be NULL.
+        */
+        void ActivateInputBlockerL( CActive* aActiveObjectToCancel );
+        
+        /**
+        * Deactivates input blocker properly.
+        */
+        void DeactivateInputBlocker();
+
+        /**
+        * Resets flags to enter normal operation state e.g. accept commands
+        */
+        void ResetOperationState();
+
+        /**
+        * Handles delayed (external) exit 
+        * @param aDelayTime in microsecods
+        */        
+        void DoDelayedExit( TInt aDelayTime );
+
+        /**
+        * To check whether asyncronous controls are ready and wait note dismissed
+        * @return TBool
+        */        
+        TBool AreControlsReadyAndWaitNoteDismissedL( );
+        
+#ifdef RD_SCALABLE_UI_V2
+        /**
+        * Sets tool bar item visibilities
+        * @return TBool
+        */        
+        void SetToolBarItemVisibilities();
+#endif
+
+        /**
+        * Checks whether DRM rights have been consumed
+        * @return TBool
+        */                
+        TBool IsRightsConsumed( CUniObject& aObject ) const;
+
+        /**
+        * Checks whether objects has drm rights left just now
+        * @return TBool
+        */                
+        TBool IsRightsNow( CUniObject& aObject ) const;
+
+        /**
+        * Checks whether object has drm rights when downloaded to the current slide
+        * @return TBool
+        */                
+        TBool IsDrmRightsWhenLoaded( CUniObject& aObject ) const;
+
+        /// MUniObjectObserver
+        void HandleUniObjectEvent(  CUniObject&  aUniObject,
+                                    TUniObjectEvent aUniEvent );
+        void SimulateUniObjectEventL( );
+        /**
+        * Reloads one control without need to reload whole slide.
+        *
+        * @since S60 5.0
+        *
+        * @param aMediaControl Control which needs to be reloaded.
+        * @param aObject Object related to the control
+        */
+        void ReloadControlL( CMsgMediaControl* aControl, CUniObject& aObject );
+
+        /**
+        * Resolve CUniObject related to media control.
+        *
+        * @since S60 5.0
+        * @param aControl control for which CUniObjects is needed
+        * @return CUniObject related to the given control
+        */
+        CMsgMediaControl* MediaControlByObject( CUniObject&    aUniObject );
+
+        /**
+        * Sets title of the mms viewer app into status pane
+        */
+        void SetTitleIconL();
+        
+        /**
+        * Check whether video call is active or not
+        */
+        TBool IsVideoCall();
+
+    private:     // From MMmsSvkEventsObserver
+                /**
+        * Called when volume level should be changed.
+        * Set volume control visible into navi pane.
+        * This function calls ChangeVolumeL
+        * @param aVolumeChange: +1 change volume up
+        *                       -1 change volume down
+        */
+        void MmsSvkChangeVolumeL( TInt aVolumeChange );
+        
+        /**
+        * Callback for CPeriodic
+        */        
+        static TInt DelayedExitL( TAny* aThis );
+                            
+    private:     // Data
+
+        enum TMmsViewerFlags
+            {
+            ELaunchSuccessful           = 0x0010,
+			EPresentationHasAudio       = 0x0020,   
+			// Two more videos in the same message with smil is now supported 
+			// ENoPresentationPlaying      = 0x0040,
+            ESuspiciousSmil             = 0x0080,
+            EShowGuidedConf             = 0x0100,
+            EAutohighLightEnabled       = 0x0200,
+            EProhibitNonDrmMusic        = 0x0400,
+            EVideoHasAudio              = 0x0800,
+            EUploadInitialized          = 0x1000,
+            // Character key events are sent to application first, which sets the volume into volume control. 
+            // When touch enabled volume control of navi pane is supported, touch events are sent to volume control first.
+            // And sets its new volume itself. The latter case is indicated by following flag
+            EVolumeControlTriggered     = 0x2000,
+            EViewerExiting              = 0x4000,
+            EInObjectsView              = 0x8000,
+            EInitialFlags = EVideoHasAudio
+            };
+
+        enum TViewerState
+            {
+            ENormal = 0,
+            EBusy,
+            EReseted
+            };
+
+        enum TReplyForwardCase
+            {
+            EReplyToSender,
+            EReplyToAll
+            };
+            
+            // determines which errors are shown during/after phase completion
+        enum TOpeningPhase
+            {
+            EOpeningNone    = 0,
+            EOpeningMessage,    
+            EOpeningSlide
+			};
+
+        //Reference pointers:
+        CUniSmilModel*              iSmilModel;
+
+        CMmsClientMtm*              iMtm;
+        CAknNavigationControlContainer* iNaviPane;
+        CEikButtonGroupContainer*   iButtonGroup;
+
+        //Owned pointers:
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        CAknNavigationDecorator*    iNaviDecorator; // Overrides the variable in base class
+#endif
+        CAknNavigationDecorator*    iVolumeDecorator;
+
+        CUniSlideLoader*            iSlideLoader;
+        
+        CMmsViewerHeader*           iHeader;
+        CMmsViewerLaunchOperation*  iLaunchOperation;
+        CMmsViewerChangeSlideOperation* iChangeSlideOperation;
+        CAknLocalScreenClearer*     iScreenClearer;
+
+        CAknWaitDialog*             iWaitDialog;
+        CUniObject*                 iPendingNoteObject;
+        TInt                        iPendingNoteError;
+        TInt                        iPendingNoteResource;
+        TInt                        iPendingNotePriority;
+       
+        CFindItemMenu*              iFindItemMenu;
+        
+        CDocumentHandler*           iDocHandler;
+
+        CCenRepNotifyHandler*       iNotifyHandler;
+        CRepository*                iCUiRepository;
+        CRepository*                iMmsRepository;
+
+        TInt                        iViewerFlags;
+        TUint32                     iReleasedObjects;
+        TViewerState                iViewerState;
+
+		TInt                        iSupportedFeatures;
+
+        CActiveSchedulerWait        iWait;
+
+        CMsgImageControl*           iImage;
+            /// if 3gpp presentation, this is not set
+        CMsgAudioControl*           iAudio;
+        CMsgVideoControl*           iVideo;
+#ifdef RD_SVGT_IN_MESSAGING
+        CMsgSvgControl*            iSvgt;
+#endif        
+        TInt                        iNewSlide;
+            /// enum TOpeningPhase
+        TInt                        iOpeningState;
+        RPointerArray<CSendingServiceInfo> iUploadServices;
+        
+        // Own: Contains information of the VoIP profiles.
+        CMsgVoIPExtension*          iMmsVoIPExtension;        
+        // Events from SVK keys 
+        CMmsSvkEvents*              iSvkEvents;
+		CAknInputBlock*				iInputBlocker;
+        CMmsConformance*            iMmsConformance;
+        
+        /// save focused control for restoring the focus later
+        TInt                        iFocusedControlId;
+        /// current resource of MSK CBA button
+        TInt                        iMskId;
+        CMmsViewerOperation*        iActiveOperation;
+        CPeriodic*                  iIdle;
+
+        // Pen Support: Target of last pointer event
+        CMsgBaseControl*            iPointerTarget;
+
+        /** 
+        * When Objects view is entered, iNoTitlePaneUpdate is set to ETrue.
+        * If layout change takes place during objects view, title must not 
+        * be set into title pane. 
+        */
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        TBool                       iNoTitlePaneUpdate;
+#endif
+        CGulIcon*                   iTitleIcon;
+        
+        // Contains prohibit mime types.
+        HBufC*                      iProhibitMimeTypeBuffer;
+        
+        /// Sends read report
+        CMmsViewerSendReadReportOperation* iSendReadReportOperation;        
+
+        /** applications, which should not stop playback of animation, audio or video        
+        * Wg=Window Group
+        */
+        TInt                        iFastSwapWgId;   
+        TInt                        iSysWgId;
+        TInt                        iAknNotifyServerWgId;
+        TInt                        iMmsViewerWgId;
+        TInt                        iScreenSaverWgId;	
+        // Whether playback needs to be stopped
+        TBool                       iIsStopPlaybackWgId;
+        CAknToolbar*                iToolbar;
+        TInt                        iMaxForwardSlideCount;
+        CAknTitlePane*              iTitlePane; 
+        CGulIcon*                   iAppIcon;
+    };
+
+#endif      //  MMSVIEWERAPPUI_H
+
+// End of File