--- /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