mobilemessaging/mmsui/viewerinc/UniMmsViewerAppUi.h
branchRCL_3
changeset 27 7fdbb852d323
equal deleted inserted replaced
26:ebe688cedc25 27:7fdbb852d323
       
     1 /*
       
     2 * Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *     CMmsViewerAppUi class definition.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 #ifndef MMSVIEWERAPPUI_H
       
    22 #define MMSVIEWERAPPUI_H
       
    23 
       
    24 // INCLUDES
       
    25 #include <finditemengine.h>
       
    26 
       
    27 #ifdef RD_SCALABLE_UI_V2
       
    28 #include <akntoolbarobserver.h>
       
    29 #endif
       
    30 
       
    31 #include <MuiuMessageIterator.h>
       
    32 
       
    33 #include <MsgEditorAppUi.h>             // CMsgEditorAppUi
       
    34 
       
    35 #include <cenrepnotifyhandler.h>
       
    36 #include <DRMCommon.h>
       
    37 
       
    38 #include <msgasynccontrolobserver.h>    //MMsgMediaControlObserver
       
    39 #include <uniobject.h>
       
    40 #include <unidrminfo.h>                 // CUniDrmInfo
       
    41 #include <AknNaviDecoratorObserver.h>
       
    42 #include <aknlongtapdetector.h> // for long tap
       
    43 
       
    44 #include "MmsViewer.hrh"                // enumerations
       
    45 #include "MmsViewerOperation.h"
       
    46 #include "UniMmsSvkEvents.h"               // MMmsSvkEventsObserver
       
    47 
       
    48 // FUNCTION PROTOTYPES
       
    49 GLREF_C void Panic( TMmsViewerExceptions aPanic ); 
       
    50 
       
    51 // FORWARD DECLARATIONS
       
    52 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
    53 class CAknNavigationDecorator;
       
    54 #endif
       
    55 class CAknNavigationControlContainer;
       
    56 class CAknTitlePane;
       
    57 class CAknWaitDialog;
       
    58 class CMdaAudioPlayerUtility;
       
    59 class MVideoControlStateObserver;
       
    60 class CFindItemMenu;
       
    61 class CFindItemEngine;
       
    62 class CDocumentHandler;
       
    63 class CDRMRights;
       
    64 
       
    65 class CAknLocalScreenClearer;
       
    66 class CMmsViewerLaunchOperation;
       
    67 class CMmsViewerChangeSlideOperation;
       
    68 class CMmsViewerHeader;
       
    69 class CMmsViewerSendReadReportOperation;
       
    70 
       
    71 class CMsgMediaInfo;
       
    72 class CMsgMediaControl;
       
    73 class CMsgAudioControl;
       
    74 class CMsgVideoControl;
       
    75 class CMsgImageControl;
       
    76 #ifdef RD_SVGT_IN_MESSAGING
       
    77 class CMsgSvgControl;
       
    78 #endif
       
    79 class CMmsConformance;
       
    80 class CUniSlideLoader;
       
    81 class CUniSmilModel;
       
    82 class CUniObjectList;
       
    83 
       
    84 class CRepository;
       
    85 class CSendingServiceInfo;
       
    86 class CMsgVoIPExtension;
       
    87 class CAknInputBlock;
       
    88 class CPeriodic;
       
    89 class CAknVolumeControl;
       
    90 class CAknInputBlock;
       
    91 class CAknToolbar;
       
    92 class CAknStylusPopUpMenu;
       
    93 
       
    94 // CLASS DECLARATION
       
    95 
       
    96 /**
       
    97 *  CMmsViewerAppUi
       
    98 *  Inherited from CMsgEditorAppUi
       
    99 */
       
   100 class CMmsViewerAppUi :
       
   101     public CMsgEditorAppUi,
       
   102     public MCenRepNotifyHandlerCallback,
       
   103     public MMsgAsyncControlObserver,
       
   104     public MMmsViewerOperationObserver,     // ViewerOperationEvent
       
   105     public MMmsSvkEventsObserver,           // MmsSvkChangeVolumeL
       
   106     public MAknServerAppExitObserver,       // for image viewer
       
   107 #ifdef RD_SCALABLE_UI_V2
       
   108 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
   109     public MAknNaviDecoratorObserver,       //for navidecorator
       
   110 #endif
       
   111     public MAknToolbarObserver,             //toolbar
       
   112 #endif
       
   113     public MCoeControlObserver,              // of CAknVolumeControl
       
   114     public MUniObjectObserver,
       
   115     public MAknLongTapDetectorCallBack
       
   116     {
       
   117     public:  // Constructors and destructor
       
   118         
       
   119         /**
       
   120         * C++ default constructor.
       
   121         */
       
   122         CMmsViewerAppUi();
       
   123 
       
   124         /**
       
   125         * Destructor.
       
   126         */
       
   127         virtual ~CMmsViewerAppUi();
       
   128         
       
   129     protected: 
       
   130     
       
   131         /**
       
   132          * Prepare to exit.
       
   133          * from CEikAppUi
       
   134          */
       
   135         void PrepareToExit();
       
   136 
       
   137     private: // New functions        
       
   138         
       
   139         /**
       
   140         * Calls InitNavipaneL, PrepareHeaderL and PrepareBodyL
       
   141         * and does some validity checks.
       
   142         */
       
   143         void DrawSlideL();
       
   144         
       
   145         /**
       
   146         * Set waiting note.
       
   147         */
       
   148         void SetPendingNote(    TInt                aResourceId, 
       
   149                                 CUniObject*         aObject = NULL,
       
   150                                 TInt                aError = KErrNone );
       
   151 
       
   152         /**
       
   153         * Shows notes related to message opening, 
       
   154         * which could not shown until loading was complete
       
   155         */
       
   156         void ShowPendingNoteL();
       
   157 
       
   158         /**
       
   159         * Changes slide. Calls ResetViewL and DrawSlideL. Creates
       
   160         * a screen blanker to hide the view operations from the user.
       
   161         * @param aSlideNumber The number of the slide to be shown next.
       
   162         * @param aScreenClearer Screen clearer is run
       
   163         */
       
   164         void ChangeSlideL( TInt aSlideNumber, TBool aScreenClearer );
       
   165 
       
   166         /**
       
   167         * Initializes navipane according to message content
       
   168         */
       
   169         void InitNavipaneL();
       
   170         
       
   171         /**
       
   172         * Sub function for InitNavipaneL();
       
   173         * @param aText string in the right hand side of navipane
       
   174         */
       
   175 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
   176         void CreateTabGroupL( const TDesC& aText );
       
   177 #endif 
       
   178         /**
       
   179         * Resets the message view. This function is called
       
   180         * when moving from slide to slide.
       
   181         * @param TBool ETrue -> only body reseted
       
   182         *              EFalse -> body and header reseted
       
   183         */
       
   184         void ResetViewL();
       
   185 
       
   186 
       
   187         // Command functions
       
   188         
       
   189         /**
       
   190         * Implements reply commands.
       
   191         * Launches MMS Editor for replying/forwarding.
       
   192         * @param aCase either EReplyToSender or EReplyToAll
       
   193         */
       
   194         void DoReplyL( TInt aCase );
       
   195 
       
   196         /**
       
   197         * Implements forward command.
       
   198         * Launches MMS Editor for replying/forwarding.
       
   199         */
       
   200         void DoForwardL();
       
   201 
       
   202         TBool CanForwardL( TInt& aResourceId );
       
   203         TBool CanForwardObjectsL( TInt& aResourceId );
       
   204         void CanForwardObjectsInListL( 
       
   205                                         CUniObjectList* aObjectList, 
       
   206                                         TInt& aSdCount, 
       
   207                                         TInt& aFlCount, 
       
   208                                         TInt& aNonConfCount, 
       
   209                                         TInt& aNormalCount,
       
   210                                         TInt& aResourceId ) const;
       
   211 
       
   212         /**
       
   213         * Implements reply via SMS/Audio message command.
       
   214         * Launches SMS/Audio message/Email Editor by utilising SendUI.
       
   215         * @param aCase EMmsViewerReplyViaAudio or EMmsViewerReplyViaMail
       
   216         */
       
   217         void DoReplyViaL( TInt aCase);
       
   218 
       
   219         /**
       
   220         * Implements the view image command.
       
   221         * Launches PhotoAlbum's ImageViewer.
       
   222         */
       
   223         void DoViewImageL();
       
   224 
       
   225         /**
       
   226         * Implements the objects command.
       
   227         * Opens the Objects view where the user can access
       
   228         * individual media elements in a list format.
       
   229         */
       
   230         void DoObjectsL();
       
   231 
       
   232         /**
       
   233         * Implements the move command.
       
   234         * Shows a folder selection dialog
       
   235         * (CMsgFolderSelectionDialog), moves the message
       
   236         * entry into selected folder and exits the viewer.
       
   237         */
       
   238         void DoMoveMessageL();
       
   239         
       
   240         /**
       
   241         * Implements the "Send" key functionality.
       
   242         * Uses MsvUiServiceUtilities::CallServiceL to create a call.
       
   243         */
       
   244         void DoHandleSendKeyL();
       
   245         
       
   246         /**
       
   247         * Implements the message info command.
       
   248         * Opens message info dialog provided by MMS ui mtm.
       
   249         */
       
   250         void DoMessageInfoL();
       
   251         
       
   252         /**
       
   253         * Start SMIL presentation
       
   254         */
       
   255         void DoShowPresentationL();
       
   256 
       
   257         /**
       
   258         * Implements the delete command.
       
   259         * Shows a confirmation query, deletes the message
       
   260         * entry and exits the viewer.
       
   261         */
       
   262         void DoDeleteAndExitL();
       
   263 
       
   264         /**
       
   265         * Sets qtn_drm_preview_msg into waiting queue ( SetPendingNote() ),
       
   266         * if needed.
       
   267         */ 
       
   268         void ResolveDrmWaitingNotes();
       
   269         
       
   270         //Audio related functions:
       
   271         //
       
   272         
       
   273         /**
       
   274         * Cancels the automatic play of an audio (or a video)
       
   275         * file.
       
   276         */
       
   277         void CancelAutoplay();
       
   278                   
       
   279         /**
       
   280         * State of an control on the UI has changed
       
   281         * @param aControl control
       
   282         * @param aState new state
       
   283         * @param aState previous state
       
   284         */
       
   285         void MsgAsyncControlStateChanged(   
       
   286                                     CMsgBaseControl& aControl,
       
   287                                     TMsgAsyncControlState aNewState,
       
   288                                     TMsgAsyncControlState aOldState );
       
   289         void DoMsgMediaControlStateChangedL(   
       
   290                                     CMsgMediaControl& aControl,
       
   291                                     TMsgAsyncControlState aNewState,
       
   292                                     TMsgAsyncControlState aOldState );
       
   293         
       
   294         /**
       
   295         * Asynchronous control on the UI has received resource change event.
       
   296         *
       
   297         * @param aControl control
       
   298         * @param aType event type
       
   299         */
       
   300         void MsgAsyncControlResourceChanged( CMsgBaseControl& aControl, TInt aType );
       
   301         
       
   302         void DoVideoStateChangeL( TInt aState );
       
   303         void DoAudioStateChangeL( TInt aState );
       
   304 
       
   305         /**
       
   306         * Handles the actual navipane and softkey updating according
       
   307         * to the state of audio playback. This function does not set 
       
   308         * volume control visible, it is done using ShowVolumeL( ).
       
   309         * When playing starts empties the navi pane.
       
   310         * Hides the volume control when playing stops.
       
   311         */
       
   312         void UpdatePanesL( TBool aAudioPlaying, TBool aVideoPlaying );
       
   313 
       
   314         /**
       
   315         * From MCenRepNotifyHandlerCallback
       
   316         */
       
   317         void HandleNotifyInt(TUint32 aId, TInt aNewValue);
       
   318         void HandleNotifyError(TUint32 aId, TInt error, CCenRepNotifyHandler* aHandler);
       
   319         void HandleNotifyGeneric(TUint32 aId);
       
   320 
       
   321         /**
       
   322         * From MMessageIteratorObserver. 
       
   323         * @param See documentation of MMessateIteratorObserver
       
   324         */
       
   325 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
   326         void HandleIteratorEventL(TMessageIteratorEvent aEvent);
       
   327 #endif        
       
   328         /**
       
   329         * Returns ETrue if the message is self composed and
       
   330         * EFalse otherwise (a received message).
       
   331         * @return ETrue if message is self composed,
       
   332         *         EFalse otherwise (received)
       
   333         */
       
   334         TBool IsOwnMessage() const;
       
   335                 
       
   336         /**
       
   337         * Returns ETrue if the message has a sender, EFalse
       
   338         * otherwise (either self composed message or received
       
   339         * from a secret number).
       
   340         * @return ETrue if message has sender
       
   341         *         EFalse otherwise
       
   342         */
       
   343         TBool HasSender() const;
       
   344         
       
   345         /**
       
   346         * Checks whether Reply->To all should be shown.
       
   347         * For received messages checks that there is more
       
   348         * than one recipient. For sent messages checks that
       
   349         * there is at least one recipient.
       
   350         * @return ETrue if Reply->To all should be shown
       
   351         *         EFalse otherwise
       
   352         */
       
   353         TBool ShowReplyToAll() const;
       
   354 
       
   355         /**
       
   356         * Checks whether Reply menu should be shown at all.
       
   357         * @return ETrue if Reply menu should be shown
       
   358         *         EFalse otherwise
       
   359         */
       
   360         TBool ShowReplyMenu() const;
       
   361         
       
   362         // Notes:
       
   363 
       
   364         /**
       
   365         * Show an information note
       
   366         * @param aResourceId The resource if of the note to be shown
       
   367         */
       
   368         void ShowInformationNoteL( TInt aResourceId );
       
   369         
       
   370         /**
       
   371         * Show an information note
       
   372         * @param aResourceId The resource if of the note to be shown
       
   373         */
       
   374         void ShowErrorNoteL( TInt aResourceId );
       
   375         
       
   376         /**
       
   377         * Show a confirmation query
       
   378         * @param aResourceId The resource if of the query to be shown
       
   379         */
       
   380         TInt ShowConfirmationQueryL( TInt aResourceId ) const;
       
   381 
       
   382         TInt ShowConfirmationQueryL(   TInt            aResourceId,
       
   383                                         const TDesC&    aString) const;
       
   384 
       
   385         /**
       
   386         * Auxiliary function. Shows a confirmation query if it is not shown before. 
       
   387         *
       
   388         * @param aResourceID
       
   389         * @return the return value returned by CAknQueryDialog::ExecuteLD
       
   390         */  
       
   391         TInt ShowGuidedModeConfirmationQueryL( TInt aResourceID );
       
   392 
       
   393         /**
       
   394         * Shows "Out of disk" error note if disk space would
       
   395         * go below critical level when allocating aSize
       
   396         * @param aSize Bytes wanted to allocate
       
   397         * @return ETrue if below critical after allocation
       
   398         *         EFalse if allocation OK
       
   399         */
       
   400         TBool ShowOutOfDiskNoteIfBelowCriticalLevelL( TInt aSize );
       
   401 
       
   402         /**
       
   403         * Return a pointer to document-object
       
   404         * @return CMmsViewerDocument*
       
   405         */        
       
   406         CMmsViewerDocument* Document() const;
       
   407 
       
   408         /**
       
   409         * Shows any DRM related notes that are related to
       
   410         * message opening:
       
   411         * - "No rights" query
       
   412         * - "Expired rights" query
       
   413         * - "Preview rights" note
       
   414         */
       
   415         void ResolveDRMNotesL();
       
   416 
       
   417         /**
       
   418         * Returns the control id of the currently focused control.
       
   419         * @return Control id of the focused control or
       
   420         *         EMsgComponentIdNull if no control focused
       
   421         */
       
   422         TInt FocusedControlId();
       
   423 
       
   424         /**
       
   425         * Sets automatic highlighting on/off.
       
   426         * @param aEnable if ETrue sets automatic highlighting on,
       
   427         *                if EFalse sets automatic highlighting off
       
   428         */
       
   429         void SetFindModeL( TBool aEnable );
       
   430 
       
   431  
       
   432         /**
       
   433         * Starts to play/display media including image.
       
   434         * @param aControl control to be played
       
   435         */         
       
   436         void MediaPlayL(CMsgMediaControl* aControl);
       
   437 
       
   438         /**
       
   439         * Handle selection key for media object ( excluding 3gpp presentation )
       
   440         * This function is entered when Options menu->Play is selected.
       
   441         * Resulting action is one of the following: play, embedded play, activate or get rights.
       
   442         * @param aMedia control to be be handled
       
   443         */         
       
   444         void MediaOpenL( CMsgMediaControl* aMedia );
       
   445 
       
   446         /**
       
   447         * Stops playing media. Does not stop animations. 
       
   448         */         
       
   449         void MediaStop();
       
   450 
       
   451         /**
       
   452         * Stops playing single media.
       
   453         * @param aControl control to be played
       
   454         */         
       
   455         void MediaStop(CMsgMediaControl* aControl);
       
   456 
       
   457         /**
       
   458         * Closes every media control. Closing means freeing file
       
   459         * specific resources that other application can use the file.
       
   460         */         
       
   461         void MediaClose();
       
   462 
       
   463         /**
       
   464         * Closes single media.
       
   465         * @param aControl control to be played
       
   466         */         
       
   467         void MediaClose(CMsgMediaControl* aControl);
       
   468 
       
   469         /**
       
   470         * Reloads slide
       
   471         */
       
   472         void ReloadSlideL();
       
   473 
       
   474         /**
       
   475         * Resets every control. Frees all resources
       
   476         */         
       
   477         void MediaReset();
       
   478 
       
   479         /**
       
   480         * Resets single control. Frees all resources
       
   481         */         
       
   482         void MediaReset(CMsgMediaControl* aControl);
       
   483 
       
   484         /**
       
   485         * Checks whether media is initialised and media control can be
       
   486         * selected. 
       
   487         * This function returns ETrue, if media is DRM protected and
       
   488         * no rights exist.
       
   489         */         
       
   490         TBool MediaInitializedL( CMsgMediaControl*   aMedia );
       
   491 
       
   492         /**
       
   493         * Checks whether media can be played or tried to be played.
       
   494         * This function returns EFalse, if media is DRM protected and
       
   495         * no rights exist.
       
   496         */         
       
   497         TBool CMmsViewerAppUi::MediaCanPlay(const CMsgMediaControl* aMedia,
       
   498                                             const CUniObject* aMmsObject ) const;
       
   499 
       
   500 
       
   501         /**
       
   502         * Checks whether media can be stopped or tried to be played
       
   503         */         
       
   504         TBool MediaCanStop(CMsgMediaControl* aMedia);
       
   505 
       
   506         /**
       
   507         * Checks whether media can be paused.
       
   508         * This means also that media is really playing.
       
   509         */         
       
   510         TBool MediaIsRunning(CMsgMediaControl* aMedia);
       
   511 
       
   512         /**
       
   513         * Returns UI control id
       
   514         * @param aControl TMmsContolIds only
       
   515         */         
       
   516         CMsgMediaControl* MediaControlById(TInt aControl);
       
   517 
       
   518         /**
       
   519         * Starts animation
       
   520         */
       
   521         void StartAnimationL();
       
   522         
       
   523         /**
       
   524          * Stops animation
       
   525          */
       
   526         void StopAnimation();
       
   527         
       
   528         /**
       
   529         * Implements saving text or media object into file system from
       
   530         * mms viewer. Saves pure text files directly and otherwise 
       
   531         * for multimedia and xHTML files calls DoSaveObjectL()
       
   532         */
       
   533         void SaveObjectL();
       
   534  
       
   535         /**
       
   536         * Implements multimedia objects and xhtml into file system from
       
   537         * mms viewer.
       
   538         */
       
   539         void DoSaveObjectL(CUniObject& aObject );
       
   540  
       
   541         /**
       
   542         * Shows "Upload" list query and if an item is selected, send the message
       
   543         * as upload.
       
   544         */
       
   545         void UploadL();
       
   546         
       
   547         /** 
       
   548         * From CEikAppUi
       
   549         */
       
   550         void HandleResourceChangeL(TInt aType);
       
   551 
       
   552         /**
       
   553         * Opens image into (embedded) image viewer
       
   554         */
       
   555         void ViewImageL( CMsgMediaControl& aMediaCtrl );
       
   556 
       
   557         /**
       
   558         * Consumes DRM rights, if DRM protected media. If no DRM rights left 
       
   559         * or other error occurs during consuming rights, updates icon
       
   560         * @return   ETrue: media was not DRM protected or DRM rights were 
       
   561         *                   consumed successfully
       
   562         *           EFalse: media was DRM protected and no rights were left 
       
   563         *                   or other error occurred
       
   564         */
       
   565         TBool HandleConsumeRightsL( CMsgMediaControl& aMedia ); 
       
   566 
       
   567 
       
   568         /**
       
   569         * If image has not rights, error note must be shown.
       
   570         * This function handles the situation.
       
   571         */
       
   572         void HandleImageNoRightsInLaunch( );
       
   573         // From MAknLongTapDetectorCallBack
       
   574         /**
       
   575          * @see MAknLongTapDetectorCallBack
       
   576          */
       
   577         void HandleLongTapEventL(
       
   578             const TPoint& aPenEventLocation, 
       
   579             const TPoint& aPenEventScreenLocation );
       
   580         
       
   581         /**
       
   582          *  For Handling iMskId for an embedded object
       
   583          */
       
   584  		void HandleSelectionKeyL( );
       
   585 
       
   586 
       
   587     private: // Functions from base classes
       
   588         
       
   589         /**
       
   590         * From MsgEditorAppUi
       
   591         */
       
   592         void DoMsgSaveExitL();
       
   593             
       
   594         /**
       
   595         * From MMsgEditorLauncher.
       
   596         * Part of the function is implemented in the DoFinaliseLaunchViewL()
       
   597         */
       
   598         void LaunchViewL();
       
   599     
       
   600         /**
       
   601         * The actual implementation of LaunchViewL
       
   602         */
       
   603         void DoLaunchViewL();
       
   604 
       
   605         /**
       
   606         * From MMsgEditorObserver
       
   607         * @param See documentation of MMsgEditorObserver
       
   608         */
       
   609         CMsgBaseControl* CreateCustomControlL( TInt aControlType );
       
   610         
       
   611         /**
       
   612         * From MMsgEditorObserver
       
   613         * @param See documentation of MMsgEditorObserver
       
   614         */
       
   615         void EditorObserver(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
       
   616 
       
   617         void DoEditorObserverL(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
       
   618 
       
   619         /**
       
   620         * From CCoeAppUi
       
   621         * @param See documentation of CCoeAppUi
       
   622         * @return TKeyResponse
       
   623         */
       
   624         TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
       
   625 
       
   626         /**
       
   627         * From CCoeAppUi
       
   628         * @param See documentation of CCoeAppUi
       
   629         */
       
   630         void HandleWsEventL(const TWsEvent& aEvent,CCoeControl* aDestination);
       
   631         
       
   632         /**
       
   633         * From CEikAppUi
       
   634         * @param See documentation of CEikAppUi
       
   635         */
       
   636         void HandleCommandL( TInt aCommand );
       
   637 
       
   638         /**
       
   639         * From CAknAppUi
       
   640         * @param See documentation of CAknAppUi
       
   641         */
       
   642         void ProcessCommandL( TInt aCommand );
       
   643 
       
   644         /**
       
   645         * From MEikMenuObserver
       
   646         * @param See documentation of MEikMenuObserver
       
   647         */
       
   648         void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane );
       
   649 
       
   650         /**
       
   651         * From MAknServerAppExitObserver. Must not leave.
       
   652         * DoHandleServerAppExitL
       
   653         */
       
   654         void HandleServerAppExit(TInt aReason);        
       
   655 
       
   656         /**
       
   657         * From MAknNaviDecoratorObserver
       
   658         * Handles the events coming from arrow presses
       
   659         *  related to next/previous message
       
   660         */
       
   661 #ifdef RD_SCALABLE_UI_V2
       
   662 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
   663         void HandleNaviDecoratorEventL( TInt aEventID );   
       
   664 #endif
       
   665 #endif
       
   666         /**
       
   667         * From CCoeControl
       
   668         * Handles volume changes from volume of navi pane.
       
   669         * When Pen enabled volume can change many steps at one tap.
       
   670         */
       
   671         void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
       
   672    
       
   673 #ifdef RD_SCALABLE_UI_V2
       
   674         /**
       
   675          * From MAknToolbarObserver
       
   676          * Should be used to set the properties of some toolbar components 
       
   677          * before it is drawn.
       
   678          * @param aResourceId The resource ID for particular toolbar
       
   679          * @param aToolbar The toolbar object pointer
       
   680          */
       
   681         virtual void DynInitToolbarL(   TInt            aResourceId, 
       
   682                                         CAknToolbar*    aToolbar );
       
   683         
       
   684         /**
       
   685          * From MAknToolbarObserver
       
   686          * Handles toolbar events for a certain toolbar item.
       
   687          * @param aCommand The command ID of some toolbar item.
       
   688          */
       
   689         virtual void OfferToolbarEventL( TInt aCommand );
       
   690 #endif
       
   691    
       
   692     private:
       
   693 
       
   694         /**
       
   695         * By default Symbian OS constructor is private.
       
   696         */
       
   697         void ConstructL(); 
       
   698 
       
   699         /** 
       
   700         * Launches help application
       
   701         */
       
   702         void LaunchHelpL();
       
   703 
       
   704         /** 
       
   705         * Gets help context
       
   706         */
       
   707         
       
   708         CArrayFix<TCoeHelpContext>* HelpContextL() const;          
       
   709 
       
   710         void ViewerOperationEvent(  TMmsViewerOperationType     aOperation,
       
   711                                     TMmsViewerOperationEvent    aEvent,
       
   712                                     TInt                        aError );
       
   713         void DoViewerOperationEventL(   TMmsViewerOperationType     aOperation,
       
   714                                         TMmsViewerOperationEvent    aEvent );
       
   715 
       
   716             /// loading slide has completed
       
   717         void DoViewerOperationEventSlideL();
       
   718             /// loading launch has completed
       
   719         void DoViewerOperationEventLaunchL( );
       
   720 
       
   721         TUint32 ObjectsAvailable();
       
   722 
       
   723         void BeginActiveWait( CMmsViewerOperation* aOperation );
       
   724         void EndActiveWait();
       
   725 
       
   726         /**
       
   727         * Launches wait dialog.
       
   728         * @param aParam if slide change operation, this is index of new slide
       
   729         */
       
   730         void LaunchWaitDialogL( TInt aParam = 0 );
       
   731 
       
   732         /**
       
   733         * Executes part of the launching. See LaunchViewL()
       
   734         */
       
   735         void DoFinaliseLaunchViewL();
       
   736 
       
   737         /**
       
   738         * Gets focused CUniObject. 
       
   739         * Object is returned only,if is EMsgImageControlId, EMsgVideoControlId, or EMsgAudioControlId.
       
   740         * iFocusedObjectType is applicable always.
       
   741         * @since 3.0
       
   742         */
       
   743         CUniObject* GetFocusedMmsObject();
       
   744 
       
   745         /**
       
   746         * Checks whether silent ringing type is selected.
       
   747         * @ret ETrue, silence set
       
   748         *      EFalse, silence not set
       
   749         */
       
   750         TBool IsSilenceL();
       
   751         
       
   752         /**
       
   753         * Calls mms mtm ui to launch delivery status dialog after user has choosed EMmsViewerDeliveryStatus from the options menu.
       
   754         *
       
   755         * @since    3.0
       
   756         */
       
   757         void OpenDeliveryPopupL( );
       
   758     
       
   759         void PrintNeededControls( );
       
   760 
       
   761         /*
       
   762         * @return ETrue, editor is properly initialised to receive commands
       
   763         *         EFalse, editor is not yet properly initialised to receive commands
       
   764         */
       
   765         TBool IsLaunched() const;
       
   766 
       
   767         CUniObject* ObjectByMediaControl( CMsgMediaControl& aControl);
       
   768         CUniObject* ObjectByBaseControl( CMsgBaseControl& aControl );
       
   769 
       
   770         /*
       
   771         * Checks whether description exists in the stored message.
       
   772         * If it doesn't exist, description is saved into message store 
       
   773         * from first found. Uses SetAndSaveDescriptionL() 
       
   774         */ 
       
   775         void CheckAndSetDescriptionL();
       
   776         
       
   777         /*
       
   778         * Saves description into received message from
       
   779         * given text object. Existence of description is no more
       
   780         * checked. 
       
   781         * aText text object from which description is saved
       
   782         */ 
       
   783         void SetAndSaveDescriptionL(const CPlainText& aText);
       
   784 
       
   785         /*
       
   786         * Update icon or text of MSK CBA button
       
   787         */ 
       
   788         void UpdateMskL( );
       
   789         
       
   790         void WaitReleaseOfImageL( CUniObject& aObject );
       
   791 
       
   792         /*
       
   793         * Check whether media object is lacking rights.
       
   794         * If media has no rights 
       
   795         * @param aMedia media to check 
       
   796         * @return KErrNone, valid drm rights exits or media is not drm protected
       
   797         *         other value, no drm rights
       
   798         * @since 3.2
       
   799         */ 
       
   800         TInt MediaHasNoDrmRights( CMsgMediaControl* aMedia );
       
   801 
       
   802         /**
       
   803         * Implements HandleCommandL()
       
   804         * @param See documentation of CEikAppUi
       
   805         */
       
   806         void DoHandleCommandL( TInt aCommand );
       
   807 
       
   808         /**
       
   809         * Sends read report if permitted and asked
       
   810         */
       
   811         void SendReadReportL(   TMmsViewerOperationType     aOperation,
       
   812                                 TMmsViewerOperationEvent    aEvent );
       
   813 
       
   814         /**
       
   815         * The function must be called when the volume is changed. 
       
   816         * Any checks are not needed from caller of this function.
       
   817         * This function changes the volume even, if volume control is not visible 
       
   818         * in the navi pane.
       
   819         * If changing volume level makes sense this function
       
   820         * - changes the volume level into cenrep
       
   821         * - show the new volume on the volume control of the navi pane.
       
   822         * ( To check exact conditions when volume control is visible in the navi pane, 
       
   823         * see .cpp file)
       
   824         *         *
       
   825         * This function resolves itself only whether the audio or video is playing.
       
   826         * Then DoChangeVolumeL() is called, if applicable.
       
   827         * After that to show the new volume level in the navi pane ShowVolumeL() is called.
       
   828         *
       
   829         * @param aVolume: indicates either absolute value, if aChange is EFalse
       
   830         *                 or change of volume, if aChange is ETrue.
       
   831         * @param aChange: indicates whether aVolume is absolute value or change of 
       
   832         *                 the current volume.
       
   833         */
       
   834         void ChangeVolumeL( TInt aVolume, TBool aChange );
       
   835 
       
   836         /**
       
   837         * Otherwise like ChangeVolumeL but either audio or video must be playing.
       
   838         * This function saves the new volume level into CenRep, if applicable.
       
   839         * Sets the new level into audio or video player.
       
   840         * ( To check exact conditions when volume control is visible in the navi pane, 
       
   841         * see .cpp file)
       
   842         *
       
   843         * If volume set is set before playback this function can be called as follows
       
   844         * DoChangeVolumeL( 0 , ETrue, * )
       
   845         * @param aVolume: indicates either absolute value, if aChange is Efalse
       
   846         *                 or change of volume, if aChange is Etrue.
       
   847         * @param aChange: indicates whether aVolume is absolute value or change of 
       
   848         *                 the current volume.
       
   849         * @param aAudioPlaying  ETrue audio is playing
       
   850         *                       EFalse video is playing
       
   851         * @return TInt new absolute volume level
       
   852         *              KErrNotFound, if volume level is not known.
       
   853         *              In this case ShowVolumeL should not be called
       
   854         *              
       
   855         */
       
   856         TInt DoChangeVolumeL( TInt aVolume, TBool aChange, TBool aAudioPlaying );
       
   857 
       
   858         /**
       
   859         * Set volume control visible into navi pane, if applicable. 
       
   860         * Either audio or video must be playing.
       
   861         * ( To check exact conditions when volume control is visible in the navi pane, 
       
   862         * see .cpp file)
       
   863         *
       
   864         * @param aNewVolume: new volume level
       
   865         * @param aAudioPlaying  ETrue audio is playing
       
   866         *                       EFalse video is playing
       
   867         */
       
   868         void ShowVolumeL(   TInt  aNewVolume,
       
   869                             TBool aAudioPlaying );
       
   870 
       
   871         /** 
       
   872         * Enables receiving events changes in foreground application status.
       
   873         * Resolves those Window groups id, which do no stop animation, audio or
       
   874         * video playback. The workgroup ids are assigned to member variables */
       
   875         void GetNonStoppingWgIds( );
       
   876 
       
   877         /** 
       
   878         * After receiving event in change of foreground application status,
       
   879         * checks whether new foreground application causes stopping animation,
       
   880         * playback of audio or video.
       
   881         * Result is set to iIsStopPlaybackWgId.
       
   882         */
       
   883         void ResolveCurrentWgIdL( );
       
   884 
       
   885         /**
       
   886         * Activates input blocker properly.
       
   887         *
       
   888         * @param aActiveObjectToCancel Pointer to an active object that is called when 
       
   889         *                              input blocker is cancelled. Can be NULL.
       
   890         */
       
   891         void ActivateInputBlockerL( CActive* aActiveObjectToCancel );
       
   892         
       
   893         /**
       
   894         * Deactivates input blocker properly.
       
   895         */
       
   896         void DeactivateInputBlocker();
       
   897 
       
   898         /**
       
   899         * Resets flags to enter normal operation state e.g. accept commands
       
   900         */
       
   901         void ResetOperationState();
       
   902 
       
   903         /**
       
   904         * Handles delayed (external) exit 
       
   905         * @param aDelayTime in microsecods
       
   906         */        
       
   907         void DoDelayedExit( TInt aDelayTime );
       
   908 
       
   909         /**
       
   910         * To check whether asyncronous controls are ready and wait note dismissed
       
   911         * @return TBool
       
   912         */        
       
   913         TBool AreControlsReadyAndWaitNoteDismissedL( );
       
   914         
       
   915 #ifdef RD_SCALABLE_UI_V2
       
   916         /**
       
   917         * Sets tool bar item visibilities
       
   918         * @return TBool
       
   919         */        
       
   920         void SetToolBarItemVisibilities();
       
   921 #endif
       
   922 
       
   923         /**
       
   924         * Checks whether DRM rights have been consumed
       
   925         * @return TBool
       
   926         */                
       
   927         TBool IsRightsConsumed( CUniObject& aObject ) const;
       
   928 
       
   929         /**
       
   930         * Checks whether objects has drm rights left just now
       
   931         * @return TBool
       
   932         */                
       
   933         TBool IsRightsNow( CUniObject& aObject ) const;
       
   934 
       
   935         /**
       
   936         * Checks whether object has drm rights when downloaded to the current slide
       
   937         * @return TBool
       
   938         */                
       
   939         TBool IsDrmRightsWhenLoaded( CUniObject& aObject ) const;
       
   940 
       
   941         /// MUniObjectObserver
       
   942         void HandleUniObjectEvent(  CUniObject&  aUniObject,
       
   943                                     TUniObjectEvent aUniEvent );
       
   944         void SimulateUniObjectEventL( );
       
   945         /**
       
   946         * Reloads one control without need to reload whole slide.
       
   947         *
       
   948         * @since S60 5.0
       
   949         *
       
   950         * @param aMediaControl Control which needs to be reloaded.
       
   951         * @param aObject Object related to the control
       
   952         */
       
   953         void ReloadControlL( CMsgMediaControl* aControl, CUniObject& aObject );
       
   954 
       
   955         /**
       
   956         * Resolve CUniObject related to media control.
       
   957         *
       
   958         * @since S60 5.0
       
   959         * @param aControl control for which CUniObjects is needed
       
   960         * @return CUniObject related to the given control
       
   961         */
       
   962         CMsgMediaControl* MediaControlByObject( CUniObject&    aUniObject );
       
   963 
       
   964         /**
       
   965         * Sets title of the mms viewer app into status pane
       
   966         */
       
   967         void SetTitleIconL();
       
   968         
       
   969         /**
       
   970         * Check whether video call is active or not
       
   971         */
       
   972         TBool IsVideoCall();
       
   973 
       
   974     private:     // From MMmsSvkEventsObserver
       
   975                 /**
       
   976         * Called when volume level should be changed.
       
   977         * Set volume control visible into navi pane.
       
   978         * This function calls ChangeVolumeL
       
   979         * @param aVolumeChange: +1 change volume up
       
   980         *                       -1 change volume down
       
   981         */
       
   982         void MmsSvkChangeVolumeL( TInt aVolumeChange );
       
   983         
       
   984         /**
       
   985         * Callback for CPeriodic
       
   986         */        
       
   987         static TInt DelayedExitL( TAny* aThis );
       
   988                             
       
   989     private:     // Data
       
   990 
       
   991         enum TMmsViewerFlags
       
   992             {
       
   993             ELaunchSuccessful           = 0x0010,
       
   994 			EPresentationHasAudio       = 0x0020,   
       
   995 			// Two more videos in the same message with smil is now supported 
       
   996 			// ENoPresentationPlaying      = 0x0040,
       
   997             ESuspiciousSmil             = 0x0080,
       
   998             EShowGuidedConf             = 0x0100,
       
   999             EAutohighLightEnabled       = 0x0200,
       
  1000             EProhibitNonDrmMusic        = 0x0400,
       
  1001             EVideoHasAudio              = 0x0800,
       
  1002             EUploadInitialized          = 0x1000,
       
  1003             // Character key events are sent to application first, which sets the volume into volume control. 
       
  1004             // When touch enabled volume control of navi pane is supported, touch events are sent to volume control first.
       
  1005             // And sets its new volume itself. The latter case is indicated by following flag
       
  1006             EVolumeControlTriggered     = 0x2000,
       
  1007             EViewerExiting              = 0x4000,
       
  1008             EInObjectsView              = 0x8000,
       
  1009             EInitialFlags = EVideoHasAudio
       
  1010             };
       
  1011 
       
  1012         enum TViewerState
       
  1013             {
       
  1014             ENormal = 0,
       
  1015             EBusy,
       
  1016             EReseted
       
  1017             };
       
  1018 
       
  1019         enum TReplyForwardCase
       
  1020             {
       
  1021             EReplyToSender,
       
  1022             EReplyToAll
       
  1023             };
       
  1024             
       
  1025             // determines which errors are shown during/after phase completion
       
  1026         enum TOpeningPhase
       
  1027             {
       
  1028             EOpeningNone    = 0,
       
  1029             EOpeningMessage,    
       
  1030             EOpeningSlide
       
  1031 			};
       
  1032 
       
  1033         //Reference pointers:
       
  1034         CUniSmilModel*              iSmilModel;
       
  1035 
       
  1036         CMmsClientMtm*              iMtm;
       
  1037         CAknNavigationControlContainer* iNaviPane;
       
  1038         CEikButtonGroupContainer*   iButtonGroup;
       
  1039 
       
  1040         //Owned pointers:
       
  1041 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
  1042         CAknNavigationDecorator*    iNaviDecorator; // Overrides the variable in base class
       
  1043 #endif
       
  1044         CAknNavigationDecorator*    iVolumeDecorator;
       
  1045 
       
  1046         CUniSlideLoader*            iSlideLoader;
       
  1047         
       
  1048         CMmsViewerHeader*           iHeader;
       
  1049         CMmsViewerLaunchOperation*  iLaunchOperation;
       
  1050         CMmsViewerChangeSlideOperation* iChangeSlideOperation;
       
  1051         CAknLocalScreenClearer*     iScreenClearer;
       
  1052 
       
  1053         CAknWaitDialog*             iWaitDialog;
       
  1054         CUniObject*                 iPendingNoteObject;
       
  1055         TInt                        iPendingNoteError;
       
  1056         TInt                        iPendingNoteResource;
       
  1057         TInt                        iPendingNotePriority;
       
  1058        
       
  1059         CFindItemMenu*              iFindItemMenu;
       
  1060         
       
  1061         CDocumentHandler*           iDocHandler;
       
  1062 
       
  1063         CCenRepNotifyHandler*       iNotifyHandler;
       
  1064         CRepository*                iCUiRepository;
       
  1065         CRepository*                iMmsRepository;
       
  1066 
       
  1067         TInt                        iViewerFlags;
       
  1068         TUint32                     iReleasedObjects;
       
  1069         TViewerState                iViewerState;
       
  1070 
       
  1071 		TInt                        iSupportedFeatures;
       
  1072 
       
  1073         CActiveSchedulerWait        iWait;
       
  1074 
       
  1075         CMsgImageControl*           iImage;
       
  1076             /// if 3gpp presentation, this is not set
       
  1077         CMsgAudioControl*           iAudio;
       
  1078         CMsgVideoControl*           iVideo;
       
  1079 #ifdef RD_SVGT_IN_MESSAGING
       
  1080         CMsgSvgControl*            iSvgt;
       
  1081 #endif        
       
  1082         TInt                        iNewSlide;
       
  1083             /// enum TOpeningPhase
       
  1084         TInt                        iOpeningState;
       
  1085         RPointerArray<CSendingServiceInfo> iUploadServices;
       
  1086         
       
  1087         // Own: Contains information of the VoIP profiles.
       
  1088         CMsgVoIPExtension*          iMmsVoIPExtension;        
       
  1089         // Events from SVK keys 
       
  1090         CMmsSvkEvents*              iSvkEvents;
       
  1091 		CAknInputBlock*				iInputBlocker;
       
  1092         CMmsConformance*            iMmsConformance;
       
  1093         
       
  1094         /// save focused control for restoring the focus later
       
  1095         TInt                        iFocusedControlId;
       
  1096         /// current resource of MSK CBA button
       
  1097         TInt                        iMskId;
       
  1098         CMmsViewerOperation*        iActiveOperation;
       
  1099         CPeriodic*                  iIdle;
       
  1100 
       
  1101         // Pen Support: Target of last pointer event
       
  1102         CMsgBaseControl*            iPointerTarget;
       
  1103 
       
  1104         /** 
       
  1105         * When Objects view is entered, iNoTitlePaneUpdate is set to ETrue.
       
  1106         * If layout change takes place during objects view, title must not 
       
  1107         * be set into title pane. 
       
  1108         */
       
  1109 #ifndef RD_MSG_NAVIPANE_IMPROVEMENT
       
  1110         TBool                       iNoTitlePaneUpdate;
       
  1111 #endif
       
  1112         CGulIcon*                   iTitleIcon;
       
  1113         
       
  1114         // Contains prohibit mime types.
       
  1115         HBufC*                      iProhibitMimeTypeBuffer;
       
  1116         
       
  1117         /// Sends read report
       
  1118         CMmsViewerSendReadReportOperation* iSendReadReportOperation;        
       
  1119 
       
  1120         /** applications, which should not stop playback of animation, audio or video        
       
  1121         * Wg=Window Group
       
  1122         */
       
  1123         TInt                        iFastSwapWgId;   
       
  1124         TInt                        iSysWgId;
       
  1125         TInt                        iAknNotifyServerWgId;
       
  1126         TInt                        iMmsViewerWgId;
       
  1127         TInt                        iScreenSaverWgId;	
       
  1128         // Whether playback needs to be stopped
       
  1129         TBool                       iIsStopPlaybackWgId;
       
  1130         CAknToolbar*                iToolbar;
       
  1131         TInt                        iMaxForwardSlideCount;
       
  1132         CAknTitlePane*              iTitlePane; 
       
  1133         CGulIcon*                   iAppIcon;
       
  1134         // Own: For long tap detecting
       
  1135         CAknLongTapDetector* iLongTapDetector;
       
  1136 
       
  1137         // For long tap handling
       
  1138         TBool iTapConsumed;     
       
  1139       /** 
       
  1140       * Contact image selection stylus popup menu 
       
  1141       * Own. 
       
  1142       */  
       
  1143         CAknStylusPopUpMenu* iEmbeddedObjectStylusPopup;
       
  1144     };
       
  1145 
       
  1146 #endif      //  MMSVIEWERAPPUI_H
       
  1147 
       
  1148 // End of File