mobilemessaging/mmsui/notviewerinc/NotViewerAppUi.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/notviewerinc/NotViewerAppUi.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,641 @@
+/*
+* Copyright (c) 2004 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:  
+*      Notification Viewer
+*
+*/
+
+
+
+#ifndef NOTVIEWERAPPUI_H
+#define NOTVIEWERAPPUI_H
+
+//  INCLUDES
+#include <bldvariant.hrh>
+#include <finditemengine.h>             // FindItem stuff 
+#include <MsgEditorAppUi.h>             // CMsgEditorAppUi
+#include <ConeResLoader.h>              // ResLoader
+#include <cenrepnotifyhandler.h> // link against CenRepNotifHandler.lib
+#include <MuiuMsvSingleOpWatcher.h>     // Single operation watcher
+#include <muiumsvuiserviceutilitiesinternal.h> // TMuiuAddressType
+
+#include <MsvPrgReporter.h>             // MMsvProgressDecoder
+#include <AknNaviDecoratorObserver.h>   // MAknNaviDecoratorObserver
+#include <txtfrmat.h>
+
+#ifdef RD_SCALABLE_UI_V2
+#include <akntoolbarobserver.h>
+#include "NotUi.hrh"
+#endif
+
+#include "NotViewer.hrh"                // Panic codes
+
+// FUNCTION PROTOTYPES
+GLREF_C void Panic(TNotViewerExceptions aPanic); 
+
+// FORWARD DECLARATIONS
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+class CAknNavigationDecorator;
+#endif
+class CAknNavigationControlContainer;
+class CEikRichTextEditor;
+class CRichText;
+class CNotViewerDocument;
+class CMmsNotificationClientMtm;
+class CSendUi;
+class CFindItemMenu;
+class CFindItemEngine;
+class CMsgAddressControl;
+class CMmsSettingsHandler;
+class CRepository;
+class CMsgVoIPExtension;
+class CAknInputBlock;
+class CUniAddressHandler;
+#ifdef RD_SCALABLE_UI_V2
+class CAknToolbar;
+#endif
+
+
+// CLASS DECLARATION
+/**
+*  CNotViewerAppUi
+*  Inherited from CMsgEditorAppUi
+*/
+class CNotViewerAppUi : public CMsgEditorAppUi,     
+                        public MMsvSingleOpWatcher,
+                        public MCenRepNotifyHandlerCallback,
+                        public MMsvProgressDecoder
+#ifdef RD_SCALABLE_UI_V2
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+                        , public MAknNaviDecoratorObserver       //pen support for navi decorator
+#endif
+                        , public MAknToolbarObserver             //toolbar
+#endif
+    {
+
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ default constructor.
+        */
+        CNotViewerAppUi();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CNotViewerAppUi();
+
+    public: // From base classes
+
+        /**
+        * EntryChangedL (from CMsgEditorAppUi)
+        * Called by Document when the TMsvEntry (usually status field)
+        * has been changed. This function updates the field in richtext body.
+        * (by calling these AddXXXFieldL functions)
+        */
+        void EntryChangedL( );
+
+        /**
+        * From MMsvSingleOpWatcher, called when operation has completed
+        */
+        virtual void OpCompleted(
+            CMsvSingleOpWatcher& aOpWatcher,
+            TInt aCompletionCode );
+
+        /**
+        * Called by OpCompleted when user has selected to delete notification
+        * both from server and locally. It initializes CAknInputBlock,
+        * starts the local delete process and initializes iIdle
+        */
+        void DoDeleteOpCompletedL( );
+            
+        /**
+        * From MMsvProgressDecoder
+        * decode progress
+        * @param aProgress: progress buffer
+        * @param aReturnString: String to be displayed to the user usually in the CMsvWrappableProgressDialog dialog.
+        * @param aTotalEntryCount: total entries to be processes
+        * @param aEntriesDone: entries processes so far
+        * @param aCurrentEntrySize: total size of the entries to be processes
+        *           used to display progress bar (for example mail size to be fetched is 42000 bytes)
+        *           If for example deleting messges then this should be number of messages to be deleted
+        * @param aCurrentBytesTrans: number of bytes received so far
+        *           used to display progress bar (for example received bytes is 21000 bytes, then progress bar half done)
+        *           If for example deleting messges then this should be number of messages to deleted so far
+        * @param aInternal: used only in CImapConnectionOp
+        */
+        TInt DecodeProgress (
+            const TDesC8& aProgress,
+            TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString,
+            TInt& aTotalEntryCount,
+            TInt& aEntriesDone,
+            TInt& aCurrentEntrySize,
+            TInt& aCurrentBytesTrans, TBool aInternal );
+
+    private: // New functions
+        
+        /**
+        * The handling of opening options-menu
+        * @param aMenuPane pointer to CEikMenuPane
+        */
+        void DynInitOptionsMenuL( CEikMenuPane* aMenuPane );
+
+        /**
+        * The handling of opening reply-menu
+        * @param aMenuPane pointer to CEikMenuPane
+        */
+        void DynInitReplyMenuL( CEikMenuPane* aMenuPane );
+
+        /**
+        * The handling of opening context sensitive menu
+        * @param aMenuPane pointer to CEikMenuPane
+        */
+        void DynInitContextMenuL( CEikMenuPane* aMenuPane );
+
+        /**
+        * Starts the fetching of MMS message. Calls the FetchMessageL
+        * function of NotificationClientMtm
+        */
+        void FetchL( );
+
+        /**
+        * Turns Viewer into Editor for forwarding the notification.
+        * Calls Forward function of the base class CMsgEditorAppUi.
+        * In the end updates the body text by calling EntryChangedL.
+        */
+        void DoForwardL( );
+
+        /**
+        * First verifies all the addresses in the TO field. Then calls
+        * SendL function of NotificationClientMtm to send the forward request.
+        * Exists the Viewer in the end.
+        */
+        void SendL( );
+
+        /**
+        * Replying to a message. Uses CSendAppUi to open either MMS or SMS Editor.
+        * Exists the Notification Viewer after opening the Editor.
+        * Overrides the function in base class.
+        * @param aReplyMms IN If ETrue, opens MMS Editor, otherwise SMS Editor.
+        */
+        void UniReplyL( TBool aReplyMms );
+
+        /**
+        * Deletes the notification that is currently open in the Notification Viewer.
+        * There are three different alternatives: For all the notifications it calls
+        * DeleteNotificationL function of NotificationClientMtm. For unsent Forward
+        * Request just Exit is called (as there's nothing saved in the MCE for unsent
+        * messages). For sent Forward Request DeleteAndExitL function is called.
+        */
+        void DeleteNotificationL( );
+        
+        /**
+        * Calls MsvUiServiceUtilities's CallServiceL function to make a phone call
+        * either the sender of the notification or focused number in body field
+        */
+        void CallToNumberL( );
+     
+        /**
+        * Calls MmsAddressHandler's AddRecipientL function to add recipients into 
+        * the To field. Moves focus there if recipients were added.
+        */
+        void AddRecipientL( );
+
+        /**
+        * Calls VerifyAddressesL to verify the addresses in the To field.
+        */
+        void CheckNamesL( );        
+
+        /**
+        * VerifyAddressesL()
+        * Calls MmsAddressHandler's VerifyAddressesL function to verify every address.
+        * @param aModified OUT ETrue, if some of the address where modified during verification
+        * @retun ETrue if all the addresses are OK
+        */
+        TBool VerifyAddressesL( TBool& aModified );
+
+        /**
+        * Calls HlpLauncher's LaunchHelpApplicationL function to launch Help application.
+        */
+        void LaunchHelpL( );
+
+        /**
+        * Launch msg info dialog
+        * If the address control has been modified since the message has been saved the previous
+        * time, AddressHandler's CopyAddressToMtmL function is called to update the Client MTM.
+        * Then the message is saved by calling Client MTM's SaveMessageL function.
+        * Then UI MTM's InvokeAsyncFunctionL function is called with command id
+        * KMtmUiFunctionMessageInfo.
+        */
+        void MessageDetailsL( );
+
+        /**
+        * Returns a pointer to current richtext
+        * @return reference to CEikRichText
+        */
+        CRichText& RichText( ) const;
+
+        /**
+        * Return a pointer to document-object
+        * Overrides the function in base class.
+        * @return CNotEditorDocument* a pointer to CNotViewerDocument-object
+        */        
+        CNotViewerDocument* Document( ) const;
+        
+        /**
+        * Adds a label and value pair.
+        * @param aLabel text to displayed in label text format.
+        * @param aValue text to displayed in text format.
+        */
+        void AddItemL( const TDesC& aLabel, const TDesC& aValue );
+
+        /**
+        * Applies the format of value and label text to viewer.
+        * @param aFormat Character format to be applied. 
+        * @param aMask Character format mask
+        * @aIsLabel Determines is the text label or value. 
+        */
+        void ApplyFormat( TCharFormat& aFormat, TCharFormatMask& aMask, TBool aIsLabel );
+
+        /**
+        * Add text to viewer, checks and removes linefeeds and carriage returns
+        * @param aText text to be added
+        * @param aFormat Character format
+        * @param aMask Character format mask
+        */
+        void AppendTextL( const TDesC& aText,
+            const TCharFormat& aFormat,
+            const TCharFormatMask& aMask );
+
+        /**
+        * Returns the control id of the currently focused control.
+        * @return Control id of the focused control or
+        *         EMsgComponentIdNull if no control focused
+        */
+        TInt FocusedControlId();
+
+    protected: // Functions from base classes
+
+        /**
+        * From CMsgEditorAppUi
+        * This handles the case if mms entry currently viewed is suddenly deleted from MSGS
+        * In other words, just Exit is called.
+        */
+        void HandleEntryDeletedL( );
+
+        /**
+        * From CMsgEditorAppUi
+        * This handles the case if mms entry currently viewer is changed (status changed etc.)
+        */
+        void HandleEntryChangeL();
+    
+        /**
+        * From MMsgEditorObserver
+        */
+    	void EditorObserver(
+	        TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+        void DoEditorObserverL(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+        /**
+        * 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        
+    private: // Functions from base classes
+
+        /**
+        * From MsgEditorAppUi 
+        * Calls just Exit() as nothing is really saved in Notification Viewer when
+        * exit is pressed.
+        */
+        void DoMsgSaveExitL( );
+            
+        /**
+        * DoSaveL( )
+        * This is called only before the sending of a Forward Request is started.
+        * It first calls AddressHandler's function CopyAddressesToMtmL and then calls
+        * ClientMtm's SaveMessageL to save the latest changes. Then AddressHandler's
+        * MakeDetails is called. 
+        */
+        void DoSaveL( );
+
+        /**
+        * From MMsgEditorLauncher 
+        */
+        void LaunchViewL( );
+
+        /**
+        * From CCoeAppUi 
+        * @param aKeyEvent - check CCoeAppUi
+        * @param aType - check CCoeAppUi
+        * @return TKeyResponse - check CCoeAppUi
+        */
+        TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+        /**
+        * From CEikAppUi 
+        * @param aCommand - check CEikAppUi
+        */
+        void HandleCommandL( TInt aCommand );
+
+        /**
+        * DoSelectionKeyL 
+        * Handles selection and enter keys.
+        * If the focus is on To field - AddRecipientL is called.
+        * Otherwise opens the context sensitive menu.
+        * @return ETrue, selection or enter key was handled
+        *         EFalse, selection or enter key was not handled
+        */
+        TBool DoSelectionKeyL();
+
+        /**
+        * DoHandleSendKeyL 
+        */
+        void DoHandleSendKeyL();
+
+
+        /**
+        * From MEikMenuObserver 
+        * @param aMenuId look from MEikMenuObserver
+        * @param aMenuPane look from MEikMenuObserver
+        */
+        void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane );
+
+        /**
+        * From CCoeAppUi
+        * Returns help context
+        */
+        CArrayFix<TCoeHelpContext>* HelpContextL( ) const;  
+
+        /**
+        * AddSubjectFieldL
+        * Adds message field into the rich text body. Gets the right sentence from the
+        * resource file according to the current message status and calls AddItemL.
+        */
+        void AddMessageFieldL( );
+
+        /**
+        * AddSubjectFieldL
+        * Adds subject field into the rich text body
+        */
+        void AddSubjectFieldL( );
+
+        /**
+        * AddTextFieldL
+        * Adds text field into the rich text body
+        */
+        void AddTextFieldL( );
+
+        /**
+        * AddExpiryFieldL
+        * Adds expiry field into the rich text body
+        */
+        void AddExpiryFieldL( );
+
+        /**
+        * AddSizeFieldL
+        * Adds size field into the rich text body
+        */
+        void AddSizeFieldL( );
+
+        /**
+        * AddClassFieldL
+        * Adds class field into the rich text body
+        */
+        void AddClassFieldL( );
+
+        /**
+        * AddPriorityFieldL
+        * Adds priority field into the rich text body
+        */
+        void AddPriorityFieldL( );
+
+        /**
+        * ShowConfirmationQueryL
+        * Creates CAknQueryDialog with resource aResourceId and executes it.
+        * User is shown a confirmation query.
+        * Shows confirmation query with question aResourceId
+        * @param IN aResourceId id of the confirmation resource
+        * @return OUT return value of dlg->ExecuteLD
+        */
+        TInt ShowConfirmationQueryL( TInt aResourceId ) const;
+
+        /**
+        * ShowInformationNoteL
+        * Shows information note for user
+        * @param aResourceID
+        * @param aWaiting, is note waiting or not.
+        */  
+        void ShowInformationNoteL(TInt aResourceID, TBool aWaiting );
+        
+
+        /**
+        * AddressControl
+        * Returns pointer to the current AddressControl (either To or From).
+        */
+        CMsgAddressControl* AddressControl( );
+
+        /**
+        * UpdateTitlePane
+        * This is called only when there is Forward Request open.
+        * Updates the title text in the Title pane. In case of unsent Forward
+        * Request, changes the CBA to Options-Cancel.
+        */
+        void UpdateTitlePaneL( );        
+        
+        /**
+        * MessageStatus
+        * Gets the status of the current message according to the expiry time and
+        * iMtmData2 field. Not applicable for Forward Requests.
+        * @return OUT TNotViewerStatus - the status of the notification.
+        */
+        TNotViewerStatus MessageStatus( ) const;
+
+        /**
+        * GetTypeL
+        * Checks if the entry is a notification or Forward Request according to
+        * the iMtmData1 field and sets the right bit in iFlags.
+        * Also calls MessageStatus to update the status of iMsgStatus.
+        * Leaves with KErrNotSupported, if unknown notifcation type flags set in 
+        * TMsvEntry::iMtmData1.
+        */
+        void GetTypeL( );
+
+
+        /**
+        * Sets automatic highlighting on/off.
+        * @param aEnable if ETrue sets automatic highlighting on,
+        *                if EFalse sets automatic highlighting off
+        */
+        void SetFindModeL( TBool aEnable );
+
+        /**
+        * From MMessageIteratorObserver
+        * @param See documentation of MMessateIteratorObserver
+        */
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        void HandleIteratorEventL(TMessageIteratorEvent aEvent);
+#endif
+        /**
+        * 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
+
+        /**
+        * Checks if the message has been deleted from MMBox already
+        * @result ETrue - already deleted
+        *         EFalse - not deleted yet
+        */
+        TBool AlreadyDeletedFromServer( );
+
+        /**
+        * Checks if the MMS AP Settings are ok
+        * @result ETrue - they were ok, it's ok to continue
+        *         EFalse - Not ok and cancel was selected
+        */
+        TBool CheckAPSettingsL( );
+
+#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 );
+
+        /**
+        * OperationOngoing returns status whether operation is going on.
+        * Needed by MsgStatus
+        */
+        TBool OperationOngoing( const TMsvEntry& aEntry ) const;
+
+        /**
+        * OperationFinished returns status whether operation has finished
+        * successfully or unsuccessfully
+        * Needed by MsgStatus
+        */
+        TBool OperationFinished( const TMsvEntry& aEntry ) const;
+        
+        /// From CCoeAppUi
+        void HandleForegroundEventL(TBool aForeground);
+
+#endif
+   
+
+    private:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        void HandleNotifyInt(TUint32 aId, TInt aNewValue);
+        void HandleNotifyError(TUint32 aId, TInt error, CCenRepNotifyHandler* aHandler);
+        void HandleNotifyGeneric(TUint32 aId);
+
+	    /**
+	     * Starts CPeriodic to call DelayedExit after aDelay
+	     */
+		void DoDelayedExitL( const TInt aDelay );
+
+	    /**
+	     * Tries to exit the application. Called by CIdle
+	     */
+	    void DoInternalExitL( );
+
+	    /**
+	    * Callback for CIdle
+	    */        
+		static TInt DelayedExit( TAny* aThis );
+
+        /** 
+        * From CEikAppUi
+        */
+        void HandleResourceChangeL(TInt aType);
+
+        /**
+        * Sets title of the mms viewer app into status pane
+        */
+        void SetTitleIconL();
+
+    private:     // Data
+
+        CMmsNotificationClientMtm*  iMtm;           // Client MTM of MMS Notifications
+
+        CMmsSettingsHandler*		iSettingsHandler; // Settings handler
+        CUniAddressHandler*         iAddressHandler; // Wrapper for address handling
+		CPeriodic*                  iIdle;          // Idle stuff
+        CAknInputBlock*             iAbsorber;      // For absorbing keypresses
+
+        CCenRepNotifyHandler*       iNotifyHandler;
+        CRepository*                iCUiRepository;
+        CRepository*                iMuiuSettRepository;
+
+        CSendUi*                    iSendUi;        // For replying to the sender
+        CFindItemMenu*              iFindItemMenu;
+
+        CAknNavigationControlContainer* iNaviPane;
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+        CAknNavigationDecorator*    iNaviDecorator; // Overrides the variable in base class
+#endif
+        CMsvSingleOpWatcher*        iOperation;
+
+        // Own: Contains information of the VoIP profiles.
+        CMsgVoIPExtension*          iMsgVoIPExtension;
+
+        HBufC*                      iAlias;         // The alias name of the sender
+        TMuiuAddressType            iSenderType;    // Phone, email, none
+        TNotViewerStatus            iMsgStatus;     // Waiting, expired, forwarding etc.
+        TInt                        iFlags;         // Help, auto find, notification etc.
+        TMsvId                      iMsgId;         // Id of the message
+        TCharFormat                 iLabelFormat;
+        TCharFormatMask             iLabelMask; 
+        TCharFormat                 iValueFormat;
+        TCharFormatMask             iValueMask; 
+#ifdef RD_SCALABLE_UI_V2
+        CAknToolbar*                iToolbar;
+#endif
+        CAknTitlePane*              iTitlePane; 
+        CGulIcon*                   iAppIcon;
+        // Remote address is shown in the From field
+        TBool                       iRemoteAlias;
+    };
+
+#endif // NotVIEWERAPPUI_H
+
+//  End of File