graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTAppObserverUtil.h
branchRCL_3
changeset 20 5fd161fa28b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTAppObserverUtil.h	Thu Sep 09 11:17:40 2010 +0300
@@ -0,0 +1,581 @@
+/*
+* Copyright (c) 2004,2005 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:  This class provides a reference implementation for the SVGT 
+*                UI Control Application Observer. 
+*
+*/
+
+
+#ifndef SVGTAPPOBSERVERUTIL_H
+#define SVGTAPPOBSERVERUTIL_H
+
+#include <e32base.h>
+#include <e32std.h>
+#include <AknProgressDialog.h>
+#include <cdownloadmgruiuserinteractions.h>
+#include <cdownloadmgruidownloadslist.h>
+#include <cdownloadmgruilibregistry.h>
+
+#include <SVGTAppObserver.h>
+#include <downloadmgrclient.h>
+#include <SVGTUISaveListener.h>
+#include <SVGTFileManager.h>
+#include <SVGTViewerAppDownloads.h>
+#include <SVGTViewerAppDbgFlags.hrh>
+
+    
+// Forward Declarations
+class CSVGTUIDialog;
+class CEikProgressInfo;
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+/**
+*  This class is used as a utility class for implementing observer for the 
+*  SVGT UI Control.
+*  It provides helper function/reference implementation for following 
+*  functionality: 
+*           a. Hyperlink handling 
+*           b. Download manager + UI Usage
+*           c. Save Option Implementation
+*           d. Misc (GetSmilFitValue)
+*  @lib SVGTAppObserverUtil
+*  @since 3.0
+*/
+
+class CSVGTAppObserverUtil : public CBase,
+                             public MSvgtAppObserver,
+                             public MHttpDownloadMgrObserver,
+                             public MSVGTUISaveListener,
+                             public MProgressDialogCallback
+    {
+    
+    public:
+    
+    enum TDownloadNeeded 
+        {
+        // The uri refers to a local image file
+        ELocalImageFile,
+        // The uri refers to a remote image file
+        ERemoteImageFile,
+        // The uri doesnt refer to an image file
+        ENotAnImageFile
+        };
+    
+    enum TWaitNoteState
+        {
+        // WaitNote is used for file saving
+        ESaveFileWait = 1,
+        // WaitNote is used for downloading image synchronously
+        EDownloadImageWait
+        };
+        
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * const TDesC& filename: Filepath.
+        * TBool aIsFileFullPathAvailable: Flag to indicate if content's 
+        *   fullpath is available.
+        * TBool aCanSaveContent,
+        * TBool aShouldMoveContent.
+        */
+        IMPORT_C static CSVGTAppObserverUtil* NewL( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent );
+
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * const TDesC& aFilename: Filepath.
+        * TBool aIsFileFullPathAvailable: Flag to indicate if content's 
+        *   fullpath is available.
+        * TBool aCanSaveContent,
+        * TBool aShouldMoveContent.
+        */
+        static CSVGTAppObserverUtil* NewLC( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent); 
+
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * @since 3.0
+        */
+        IMPORT_C static CSVGTAppObserverUtil* NewL( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr );
+
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * @since 3.0
+        */
+        static CSVGTAppObserverUtil* NewLC( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr ); 
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CSVGTAppObserverUtil();
+        
+        
+        /**
+        * This method is called by the svg engine when there is an image tag        
+        * encountered in the svg file. This function parses the uri, checks
+        * whether the uri is a local file or a remote file. If the file is 
+        * a remote file, the file is downloaded. Fetched file is then opened
+        * and the file handle returned to the engine.       
+        * @since 3.0
+        * @see MSvgRequestObserver::FetchImage
+        */                                       
+        IMPORT_C virtual TInt FetchImage( const TDesC& aUri, 
+             RFs& aSession, RFile& aFileHandle );                                  
+ 
+        TInt FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ );
+	   
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::LinkActivated
+        */
+        IMPORT_C virtual TBool LinkActivated( const TDesC& aUri );
+
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::LinkActivatedWithShow
+        */
+        IMPORT_C virtual TBool LinkActivatedWithShow( const TDesC& aUri, 
+                                             const TDesC& aShow );
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::GetSmilFitValue
+        */
+        IMPORT_C virtual void GetSmilFitValue( TDes& aSmilValue );
+        
+        /**
+        * This function is called by the application to enable/disable the
+        * downloads menu in the options menu
+        * @since 3.0
+        * @param aAddDownloadMenu enable/disable the downloads menu  
+        */   
+                                 
+        IMPORT_C void SetDownloadMenu( TBool aAddDownloadMenu );
+        
+        /**
+        * This function is called by the Ui Dialog to enable/disable the
+        * downloads menu in the options menu
+        * @since 3.0
+        * @return iDownloadMenuEnabled enable/disable the downloads menu  
+        */   
+        IMPORT_C virtual TBool CanShowDownload() const;
+        
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::DisplayDownloadMenuL
+        */ 
+        IMPORT_C virtual void DisplayDownloadMenuL();   
+                                                           
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::CanShowSave
+        */
+        IMPORT_C virtual TBool CanShowSave();
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::IsSavingDone
+        */
+        IMPORT_C virtual TBool IsSavingDone();
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::DoSaveL
+        */ 
+        IMPORT_C virtual void DoSaveL( TInt aCommandId ); 
+        
+        IMPORT_C TInt NewFetchImageData( const TDesC& aUri );
+        IMPORT_C void AssignEmbededDataL( const TDesC& aUri );
+		TBool ExitWhenOrientationChange( );
+        
+        /**
+        * Helper function for DoSaveL
+        */
+        void SaveContentL(  RFile& aSrcFileHandle, const TDesC& aSrcFileName,
+                            TDes& aDstFileName, TBool aMoveFlag );
+        /**
+        * This function generates a unique file name in the private directory
+        * @param aName On return contains the full path on return.
+        */    
+        void GetUniqueFileName( TDes& aName ) const;
+        
+        /**
+        * Checks whether the file is a GZipped content
+        * @param aFileHandle File handle to the SVG content
+        */
+        TBool IsGzipContent( const RFile& aFileHandle ) const;
+                                    
+        /**
+        * This function saves the SVG content into the private directory
+        */           
+        void SaveSvgTextContentL( const RFile& aSrcFileHandle, 
+            TDes& aTempFileName );
+                                  
+    public: // Callback from the MHttpDownloadMgrObserver                                    
+        /**
+        * This method is a call back function used by the download manager
+        * to indicate the completion/failure of the download started.
+        * LinkActivatedWithShow function
+        * @since 3.0
+        * @param : aDownload -- handle of the download
+        * @param : aEvent -- download event      
+        */
+        IMPORT_C void HandleDMgrEventL( RHttpDownload& aDownload,
+                                       THttpDownloadEvent aEvent );                                                
+    public: // Callback from the MSVGTUISaveListener         
+       /**
+        * From MSVGTUISaveListener. This function is called 
+        * when buffering or saving position is changed.
+        * @since 3.0
+        * @param  aPosition, New buffering/saving position (0-100)
+        */
+        IMPORT_C virtual void SVGTPositionChanged( TInt aPosition );
+
+        /**
+        * From MSVGTUISaveListener. Called when saving is finished.
+        * @since 3.0
+        * @param  aError, KErrNone or one of the system wide error codes.
+        * @return void
+        */
+        IMPORT_C virtual void SVGTSavingDoneL( TInt aError ); 
+         
+    public: // Functions from MProgressDialogCallback
+        
+        /** @see MProgressDialogCallback::DialogDismissedL */
+        IMPORT_C void DialogDismissedL( TInt aButtonId );
+
+    public: // Leaving variants of linkActivated and linkActivatedWithShow
+        
+        /**
+        * This method is called by LinkActivated.
+        * If this function leaves, it is trapped by the linkActivated function
+        * @since 3.0        
+        * @param : aUri -- URI string of hyperlink        
+        */
+        IMPORT_C void LinkActivatedL( const TDesC& aUri );
+
+        /**
+        * This method is called by LinkActivatedWithShow.
+        * If this function leaves, it is trapped by the
+        * LinkActivatedWithShow function
+        * @since 3.0        
+        * @param : aUri -- URI string of hyperlink
+        * @param : aShow -- xlink:show value        
+        */
+        IMPORT_C void LinkActivatedWithShowL( const TDesC& aUri , 
+                                              const TDesC& aShow ); 
+    public:                                        
+        
+        /**
+        * This method is called by LinkActivated(WithShow), FetchImage
+        * This checks whether the uri passed is a local image file or
+        * a remote image file or not an image file.
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink                 
+        * @return : TDownloadNeeded 
+        *           ELocalImageFile - if the uri is a local file
+        *           ENotAnImageFile - If the uri is not an image file
+        *           ERemoteImageFile - If the uri is remote image file.
+        */
+        IMPORT_C static TDownloadNeeded IsDownloadNeededL( 
+                                           const TDesC& aUri );
+        
+        /**
+        * This method is called by LinkActivated(WithShow), FetchImage
+        * This gets the filename from the uri and the 
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink                 
+        * @return : ETrue if the local file name is retrieved
+        *           EFalse if the file could not be retrieved
+        */        
+        IMPORT_C TBool GetFileNameFromUri( const TDesC& aUri, 
+                                  TDes& aFileName ) const;
+                                  
+        /**
+        * This method is called by LinkActivated(WithShow), FetchImage
+        * This gets the filename with full path from the uri and the 
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink                 
+        * @return : ETrue if the local file name is retrieved
+        *           EFalse if the file could not be retrieved
+        */
+        IMPORT_C static TBool GetLocalFile( const TDesC& aUri,  
+                                            TDes& aFileName,
+                                            const TDesC& aSvgFileName );
+                
+        
+    protected: //helper functions for fetchImage function    
+           
+        /**
+        * This method is called by LinkActivated(WithShow),FetchImage functions
+        * If this function leaves, it is trapped by the
+        * Called function
+        * @since 3.0        
+        * @param : aUri -- URI string of hyperlink
+        * @param : aSession - File server session in which the file is opened
+        * @param : aFileHandle - handle of the file downloaded.   
+        * @param : aIsSynchronous - Flag to indicate synchronous/asynchronous 
+        *                           download
+        * @param : aIsEmbedded - Flag to indicate whether the downloaded 
+        *           file needs to be opened in embedded mode or not.
+        * @return : KErrNone if successful
+        *           KErrNotFound if not
+        */
+        TInt StartDownloadingImageL(                    
+                    const TDesC& aUri, 
+                    RFs& aSession, 
+                    RFile& aFileHandle,     
+                    TBool aIsSynchronous,
+                    TBool aLinkFlag,
+                    TBool aIsEmbedded = ETrue );                
+                            
+   
+        /**
+        * This method is called by the Fetch Image
+        * before starting the download to get Access point id.
+        * @since 3.0
+        * @param : aIapId -- Access point id Found         
+        * @return : True if Iap found else returns false.
+        */
+        IMPORT_C TBool GetDefaultInetAccessPointL
+                              ( TUint32& aIapId ) const;
+                              
+        /**
+        * This method is called by HandleDMgrEventL
+        * This makes use of Document Handler to launch the file.
+        * @since 3.0
+        * @param : aFileName -- Name of the file to be launched. 
+        * @param : aIsEmbedded -- Flag to indicate whether file has to 
+        *          be opened in embedded mode or independent mode        
+        */                     
+        IMPORT_C void LaunchDownloadedFileL( const TDesC& aFileName, 
+                                        TBool aIsEmbedded,  
+                                        TBool aAllowSave ) const;  
+                                        
+   
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED   
+        /**
+        * This method is called by HandleDMgrEventL
+        * This iterates through the linked list and return the link 
+        * corresponding to the given http download handle
+        * @since 3.0
+        * @param : aHttpDownload -- handle of hyperlink         
+        * @return : CSVGTViewerAppDownloads * the link corresponding to 
+        * the given httpDownload handle.
+        */
+        CSVGTViewerAppDownloads* FindDownload( 
+                                 const RHttpDownload* aHttpDownload ); 
+#endif     
+        /**
+        * This method is used to get back the filename of the currently
+        * playing svg content in filname.ext format.
+        * @since 3.0
+        * @param : TDes& filename: Parameter where filename needs to be
+        *   returned.
+        * @return : void.
+        */
+        IMPORT_C void GetFileNameAndExt(TDes& filename) const;
+
+        /**
+        * This method is used in Save operation to decide whether
+        * move action should be performed.
+        * @since 3.0
+        * @param : None.
+        * @return : ETrue: Content needs to be moved. EFalse: Content
+        *   shouldn't be moved.
+        */
+        IMPORT_C TBool IsAllowMove() const;
+
+        /**
+        * This method is used to launch wait dialog while save operation
+        * is going on.
+        * @since 3.0
+        * @param : aResourceId: Resource to be used for wait-note.
+        *   aVisibilityDelayOff: Parameter to the wait note.
+        *   aFileName FileName to be displayed in WaitNote
+        * @return : none.
+        */
+        void LaunchWaitNoteL(TInt aResourceId, 
+                             TBool aVisibilityDelayOff, 
+                             const TDesC& aFileName );
+
+        /**
+        * This method is used check whether content file's full-path
+        * is available.
+        * @since 3.0
+        * @return : ETrue: Fullpath available, EFalse: Fullpath
+        *   not available.
+        */
+        IMPORT_C TBool IsFileFullPathAvailable() const;
+    
+    protected:
+
+        /**
+        * C++ default constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        */
+        IMPORT_C CSVGTAppObserverUtil( CSVGTUIDialog* aAppDialog ); 
+
+        /**
+        * Default Symbian 2nd phase constructor.
+        */
+        IMPORT_C void ConstructL();
+
+        /**
+        * Default Symbian 2nd phase constructor.
+        * RFile* aFileHdlPtr: File handle to the content.
+        * const TDesC& filename: Filepath.
+        * TBool aIsFileFullPathAvailable: Flag to indicate if content's 
+        *   fullpath is available.
+        * TBool aCanSaveContent,
+        * TBool aShouldMoveContent.
+        */
+        IMPORT_C void ConstructL( RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent );  
+        
+        /**
+        * Default Symbian 2nd phase constructor.
+        * RFile* aFileHdlPtr: File handle to the content.
+        */
+        IMPORT_C void ConstructL( RFile* aFileHdlPtr );  
+
+#ifdef SVGTVIEWERAPP_DBG_FLAG        
+        void PrintDebugMsg( const TDesC&  aMsg );
+#endif        
+
+    private: //User methods
+        /**
+        * Reads the downloaded file & assign to the svg engine.
+        * @since 3.1
+        * @param CSVGTViewerAppDownloads aDownloadItem
+        * @param RHttpDownload aDownload
+        */
+        void DoAssignImageDataL(const CSVGTViewerAppDownloads* aDownloadItem,
+                                                RHttpDownload& aDownload);
+        
+        void DoAssignLocalFileDataL( const TDesC& aOriginalUri,  const TDesC& aNewUri ) const;
+        HBufC8* DoGetProcessedEmbededDataL( const TDesC& aXlinkHrefValue ) const;
+        
+    private:    // Data            
+  
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED   
+        // To start a wait loop after initiating download
+        CActiveSchedulerWait iWait; 
+         
+        // client side handle for the download manager        
+        RHttpDownloadMgr iDownloadMgr;
+        
+        // Handle for download manager ui user interactions
+        CDownloadMgrUiUserInteractions* iDMgrUserInteractions;
+        
+        // Handle for download manager ui downloads list
+        CDownloadMgrUiDownloadsList* iDMgrDownloadsList;                        
+        
+        // Handle to register download manager UI
+        CDownloadMgrUiLibRegistry* iDMgrUiReg;
+
+        // Head of Doubly linked list of Downloads
+        TDblQue<CSVGTViewerAppDownloads>  iDownloads;
+        
+        // Iterator for the doubly linked list
+        TDblQueIter<CSVGTViewerAppDownloads>   iDownloadIter;
+        
+        // Flag to check whether downloads menu is enabled or not
+        TBool iDownloadMenuEnabled;
+        
+        // Flag to check whether synchronous download is stopped
+        TBool iSynchronousDownloadStopped;
+#endif 
+        // Pointer to the SVGT Dialog
+        CSVGTUIDialog* iAppDialog;   
+        
+        //File Manager used for file save operations.
+        CSVGTFileManager* iFileManager;
+
+        TBool  iIsFullFilePathValid;
+        TBool  iCanSaveContent;
+        TBool  iShouldMoveContent;
+        HBufC* iSvgFileName;
+        HBufC* iSvgDstFileName;
+        RFile* iSvgFileId;
+        CAknProgressDialog* iWaitNote;
+        
+        // enumeration to store the state in which the wait note is used.
+        TWaitNoteState iWaitNoteState;        
+               
+        CEikProgressInfo* iProgressInfo;  
+                   
+        // Integer storing resource offset to DLL resource file
+        TInt iResourceOffset;
+        
+        // Boolean indicating save done
+        TBool iSavingDone;
+        
+        // Integer to store the command id in context while saving
+        TInt iCommandId;
+        
+        // DocHandler pointer to Open embedded files
+        CDocumentHandler* iDocHandler;
+
+        // pointer to  CEikonEnv
+        CEikonEnv* iEikEnv;
+        //TBool iIsFetchImageCall;
+        
+        // Boolean to remember whether original file is to be 
+        // deleted after save
+        TBool iDeleteOrigFile;
+
+        // Boolean to remember whether temp file was used 
+        // to perform cleanup
+        TBool iTempFileUsed;
+
+        // Used for storing the temporary file name for deletion
+        HBufC* iTempFileName;
+        // Used to indicate whether we are attempting to overwrite existing
+        // file
+        TBool iIsOverwriteCase;
+        TBool iDownloadDone;
+        
+        // This variable tracks whether the download manager was initialised or not 
+        TBool iDownloadInProgress;
+        
+    };
+
+#endif // SVGTAPPOBSERVERUTIL_H
+// End of File