scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h
changeset 0 040fcad49f44
child 6 04e92f1a7966
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h	Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,576 @@
+/*
+* Copyright (c) 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:   ScreenSaverAnimPlugin provides an implementation of 
+*                MScreensaverPlugin for animation files.
+*
+*/
+
+
+
+#ifndef C_SCREENSAVERANIMPLUGIN_H
+#define C_SCREENSAVERANIMPLUGIN_H
+
+#include <gdi.h>
+#include <ScreensaverpluginIntDef.h>
+#include <coecntrl.h>
+#include <e32cmn.h>
+#include <screensaverplugin.h>
+#include <coecobs.h>
+#include <npupp.h>
+#include <ecom/implementationinformation.h>    
+#include <CEcomBrowserPluginInterface.h>
+#include <PluginAdapterInterface.h>
+#include <flogger.h>
+
+
+class CEikonEnv;
+class CDRMHelper;
+class CScreensaverRepositoryWatcher;
+class CRepository;
+
+
+_LIT( KFileLoggingDir, "ScreenSaver" );
+_LIT( KFileLog, "SaveLog.txt" );
+_LIT( KEmptyString, "" );
+
+#ifdef SCREENSAVER_LOG_ENABLED
+
+inline void PrintDebugMsg( const TDesC& aMsg ) 
+    {    
+    RDebug::Print( aMsg );
+#if 0
+    RFileLogger::Write( KFileLoggingDir, 
+                        KFileLog, EFileLoggingModeAppend, aMsg );
+#endif
+    }
+#else
+
+inline void PrintDebugMsg( const TDesC& /*aMsg*/ ) 
+    {
+    }
+
+#endif
+
+/**
+*  Encapsulates the Settings that are written into the central repository
+*  @lib ScreenSaverAnimPlugin.lib
+*  @since 3.1
+*/
+class CScreenSaverAnimSettingObject : public CBase
+    {
+
+    public:
+        CScreenSaverAnimSettingObject();
+
+    public:
+
+        // Name of the file to be set as screensaver
+        TFileName iFileName;   
+
+        // Animation Timeout
+        TInt iAnimationTimeout;  
+
+        // Lights Timeout
+        TInt iLightsTimeout;  
+    };
+
+/**
+*  Provides the Animated ScreenSaverPlugin functionality which implements
+*  ScreenSaver Interface and gives a Netscape Browser Plugin Interface
+*  to the format specific plugins like SVG, Flash, M3G etc.
+*  @lib ScreenSaverAnimPlugin.lib
+*  @since 3.1
+*/
+ 
+class CScreenSaverAnimPlugin: public CScreensaverPluginInterfaceDefinition,
+                              public MPluginAdapter,
+                              public MCoeControlObserver
+    {
+
+    public: 
+
+        /**
+        * Two-phased constructor.
+        * @since 3.1
+        */
+        static CScreenSaverAnimPlugin* NewL();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CScreenSaverAnimPlugin();
+
+    public: // Functions From CScreensaverPluginInterfaceDefinition        
+
+        /**
+        * From MScreensaverPlugin, Method called by ScreenSaver Application
+        * when an animation file is configured as a Screen Saver.
+        * @param aHost  Screen saver plugin host.
+        * @since 3.1
+        */
+        virtual TInt InitializeL( MScreensaverPluginHost *aHost );
+            
+        /**
+        * From MScreensaverPlugin, Method called by ScreenSaver Application
+        * when Screen Saver is activated.
+        * @since 3.1
+        */
+        virtual TInt Draw( CWindowGc& aGc );
+
+        /**
+        * From MScreensaverPlugin, Method called by ScreenSaver Application
+        * before the InitializeL.
+        * @since 3.1
+        */
+        virtual const TDesC16& Name() const;
+
+        /**
+        * From MScreensaverPlugin, Method called by ScreenSaver Application
+        * to get the capabilities of Screensaver plugin.
+        * @since 3.1
+        */
+        virtual TInt Capabilities();
+
+        /**
+        * From MScreensaverPlugin, Method called by Psln Application
+        * when the user selects Animated ScreenSaver 
+        * @since 3.1
+        */
+        virtual TInt PluginFunction(
+                TScPluginCaps /*aFunction*/,
+                TAny* /*aParam*/ );
+
+        /**
+        * From MScreensaverPlugin, Method called by ScreenSaver Application
+        * when there are Screen Saver events.
+        * @since 3.1
+        */
+        virtual TInt HandleScreensaverEventL(
+                TScreensaverEvent aEvent,
+                TAny* aData );
+
+    public: // New Functions
+
+        /**
+        * Reads the animation settings from the central repository
+        * @since 3.1
+        * @return System wide Error value
+        */
+        TInt GetAnimSettings();
+
+        /**
+        * Writes the animation settings to the central repository
+        * @since 3.1
+        * @return System wide Error value
+        */
+        TInt SetAnimSettings() const;
+
+        /**
+        * This method registers for expiry of drm content
+        * @since 3.1
+        * @return System wide Error value   
+        */
+        TInt RegisterForDrmExpiry();
+
+        /**
+        * This method unregisters for expiry of drm content
+        * @since 3.1
+        * @return System wide Error value   
+        */
+        TInt UnregisterForDrmExpiry();
+
+        /**
+        * This method reads and parses the central repository key 
+        * for drm expiry
+        * @since 3.1
+        * @return System wide Error value
+        */
+        TInt ReadDrmNotification( TDes8& aString );
+
+        /**
+        * Called when there is a drm expiry notification
+        * @since 3.1
+        */
+        void ProcessDrmNotificationL();
+
+        /**
+        * This method pops the settings dialog
+        * @since 3.1
+        */
+        void PopSettingsDialogL();
+
+        /**
+        * This method checks whether the set file exists currently
+        * if not, it updates the filename string
+        * This also checks if the rights are valid if the content is drm 
+        * if not, it updates the filename with the empty file name
+        * returns True, if the Filename is updated
+        *         False, otherwise
+        * @since 3.1
+        */
+        TBool UpdateFileName();
+
+        /**
+        * Called when HandleScreenSaverEventL is called with EDisplayChanged
+        * Used to set the parent control for the animation plugins
+        * returns KErrGeneral when SetWindow does not go through
+        * @since 3.1
+        */
+        TInt SetWindow( CCoeControl* aParent );
+
+        /**
+        * Called to set the filename for the animation plugins
+        * @since 3.1
+        */
+        void AsFile();
+
+        /**
+        * Called when there is a central repository settings change
+        * @since 3.1
+        */
+        void HandleSettingsChange( TAny* aPtr );
+
+        /**
+        * Called by the repository watcher when there is a central 
+        * repository settings change
+        * @since 3.1
+        */
+        static TInt HandleRepositoryCallBack( TAny* aPtr );
+
+        /**
+        * Called by the repository watcher when there is a 
+        * drm expiry notification
+        * @since 3.1
+        */
+        static TInt HandleDrmNotification( TAny* aPtr );
+
+        /**
+        * Sends an event to the plugins to check for the file's validity 
+        * repository settings change
+        * returns KErrNone if the file is valid
+        * @since 3.1
+        */
+        TInt CheckFileValidityL( const TDesC& aFileName );
+
+        /**
+        * Parses the mime description and checks whether the given mime type
+        * is present in the mime description
+        * @since 3.1
+        * @param aMIMEDescription mime Description which has mimetype, 
+        *                extension and description
+        * @param aDataType mimetype to be searched
+        * @return TBool ETrue if aDataType is present in aMIMEDescription
+        *               EFalse otherwise
+        */
+        static TBool ParseMimeStringL( const TDesC& aMIMEDescription,
+                                const TDesC& aDataType );
+
+        /**
+        * Given the mimetype searches and returns the browser plugin which 
+        * handles the given mimetype
+        * @since 3.1
+        * @param aDataType 
+        * @return TUid uid of the plugin which handles the mimetype
+        */
+        TUid FindAnimPluginL( const TDesC& aDataType );
+
+
+    public: // From MPluginAdapter
+        
+        /**
+        * Gets the pointer to the minor version number of the plug-in version 
+        * number of the Browser Plug-in API. 
+        * @since 3.1
+        * @return Series 60 returns 1. Series 80 and 
+        * the Nokia 7710 smartphone return 101.
+        */
+        virtual TUint16 GetVersion();
+
+        /**
+        * Called when the plug-in has completed its creation.
+        * This function is called from the constructL function of the plug-in.
+        * @since 3.1
+        * @param aPluginControl A pointer to the plug-in control window
+        */
+        virtual void PluginConstructedL( CCoeControl* aPluginControl );
+
+        /**
+        * Called after the plug-in has been deleted.
+        * This function is called from the destructor of the plug-in.
+        * @since 3.1        
+        */
+        virtual void PluginFinishedL();
+
+#ifndef __SERIES60_30__
+
+        /**
+        * Called by the plug-in to open a URL in the parent frame.
+        * This function is not implemented in Series 60. 
+        * It is supported in Series 80 and in the Nokia 7710 smartphone.
+        * @since 3.1
+        * @param aUrl Name of the URL to open
+        */
+        virtual void OpenUrlL( const TDesC& aUrl );
+
+        /**
+        * Called by the plug-in to open a URL in a named window or frame.
+        * This function is not implemented in Series 60. 
+        * It is supported in Series 80 and in the Nokia 7710 smartphone.
+        * @since 3.1
+        * @param aUrl Name of the URL to open
+        * @param aNewTargetWindowName The name of the target window or frame   
+        */
+        virtual void OpenUrlInTargetWindowL( const TDesC& aUrl, 
+                                           const TDesC& aNewTargetWindowName );
+
+        /**
+        * Specifies whether or not the frame has a previous navigation 
+        * history item.
+        * This function is not implemented in Series 60. 
+        * It is supported in Series 80 and in the Nokia 7710 smartphone.
+        * @since 3.1
+        * @return true if the frame has a previous navigation 
+        * history item false otherwise
+        */
+        virtual TBool HasNavigationHistoryPrevious() const;
+
+        /**
+        * Informs the browser to load the next navigation history URL 
+        * in its parent frame.
+        * This function is not implemented in Series 60. 
+        * It is supported in Series 80 and in the Nokia 7710 smartphone.
+        * @since 3.1
+        */
+        virtual void LoadNavigationHistoryPreviousL();
+
+        /**
+        * Returns whether the frame has a next navigation history item. 
+        * This function is not implemented in Series 60.
+        * It is supported in Series 80 and in the Nokia 7710 smartphone.
+        * @since 3.1
+        * @return Returns whether the frame has a next navigation history item. 
+        */
+        virtual TBool HasNavigationHistoryNext() const;
+
+        /**
+        * Informs the browser to load the next navigation history URL 
+        * in its parent frame.
+        * This function is not implemented in Series 60. It is supported in
+        * Series 80 and in the Nokia 7710 smartphone.
+        * @since 3.1        
+        */
+        virtual void LoadNavigationHistoryNextL();
+
+#endif
+        /**
+        * Returns the window system level control object for the plug-in.
+        * @since 3.1
+        * @return A pointer to the parent control window.
+        */
+        virtual CCoeControl* GetParentControl();
+
+        /**
+        * Returns the observer for the plug-in control.
+        * @since 3.1
+        * @return Observer that the plug-in can use to send events 
+        * to the browser.
+        */
+        virtual MCoeControlObserver* GetParentControlObserver();
+
+        /**
+        * Sets the plug-in notifier allowing the plug-in to control 
+        * portions of the browser.
+        * @since 3.1
+        * @param aNotifier Pointer to an interface that the browser can 
+        * use to send events to the plug-in.        
+        */
+        virtual void SetPluginNotifier( MPluginNotifier *aNotifier );
+
+        /**
+        * Tells the plugin adapter if plugin content can accept user interaction.  This function
+        * is called from the plugin.
+        * @since Series 60 3nd Edition
+        * @param None
+        * @return None
+        */
+        virtual void SetContentInteractive( TBool /*aInteractive*/ );
+
+    public: //MCoeControlObserver
+        /** 
+        * Handles an event from an observed control.
+        * This function is called when a control for which this control
+        * is the observer calls CCoeControl::ReportEventL(). It should be
+        * implemented by the observer control, and should handle all events 
+        * sent by controls it observes.     
+        * @param aControl The control that sent the event.
+        * @param aEventType The event type. 
+        */
+        virtual void HandleControlEventL( CCoeControl* aControl,
+                          TCoeEvent aEventType );
+
+    private: // New functions
+        
+        /**
+        * Finds the mime type of the file, searches the corresponding 
+        * browser plugin which handles the mime type and starts the same.
+        * @since 3.1                
+        */
+        void FindAndStartPluginL( const TDesC& aFileName, 
+                                  TBool aCheckFileMode = EFalse );
+
+        /**
+        * Makes use of ecom api to find out whether an implementation with uid
+        * aImpUid is present which implements the interface aInterfaceUid.
+        * @since 3.1
+        */
+        TBool CheckIfPluginPresentL( TUid aInterfaceUid, 
+                                    TUid aImpUid );
+
+        /**
+        * Finds the mime type of the file, searches the corresponding 
+        * browser plugin which handles the mime type
+        * @since 3.1
+        */
+        void FindPluginL( const TDesC& aFileName );
+        
+        /**
+        * Creates the format specific plugin
+        * @since 3.1
+        */
+        void CreatePluginL( TBool aCheckFileMode = EFalse );
+
+        /**
+        * Deletes the browser plugin.
+        * @since 3.1
+        */
+        void DeletePlugin();  
+
+        /**
+        * Deletes and Sets the browser plugin members to NULL
+        * @since 3.1
+        */
+        void SetPluginDeleted();
+
+        /**
+        * Connects the central repository session
+        * @since 3.1
+        */
+        void InitializeCenRepL();
+
+        /**
+        * Registers for central repository key changes
+        * @since 3.1
+        */
+        void NotifyCenrepChangeL();
+
+        /**
+        * Cancels registration for central repository key changes
+        * @since 3.1
+        */
+        void NotifyCenrepChangeCancel();
+
+        /**
+        * Disconnects the central repository session
+        * @since 3.1
+        */
+        void UnInitializeCenRep();
+
+        /**
+        * Sends an animation end event to the plugins
+        * @since 3.1
+        */
+        TInt SendEndEvent();
+
+        /**
+        * Checks whether the given content id matches the content id of the
+        * file name given
+        * @return ETrue if the content id matches
+        * EFalse if not
+        * @since 3.1
+        */
+        TBool CheckContentIdL( const TDesC& aFileName, TDesC8& aContentUri );
+
+    private:
+
+        /**
+        * Default Constructor
+        * @since 3.1
+        */  
+        CScreenSaverAnimPlugin();
+
+        /**
+        * 2nd phase constructor
+        * @since 3.1
+        */
+        void ConstructL();
+
+    public: 
+
+        // Pointer to the screen saver host
+        MScreensaverPluginHost* iScreenSaverHost;
+
+    private:
+
+        // Resource file offset
+        TInt iResourceOffset;
+
+        // Handle to the central repository session
+        CRepository* iAnimPluginSession;
+
+         // Handle to the central repository session
+        CRepository* iDrmSession;
+
+        // Environment pointer
+        CEikonEnv* iEikEnv;
+
+        // Format specific Netscape plugin UID
+        TUid iPluginUID;
+
+        // Netscape plugin functions.
+        NPPluginFuncs* iPluginFuncs;
+
+        // Netscape ECOM plugin interface.
+        CEcomBrowserPluginInterface* iPluginInterface;
+
+        // Netscape plugin instance.
+        NPP iNPPinstance;
+
+        // Plugin Type
+        HBufC8* iPluginType;
+
+        // Parent control given by the screen saver application
+        CCoeControl* iParentControl;
+
+        // Pointer to the Settings object
+        CScreenSaverAnimSettingObject* iSettingObject;
+
+        // Pointer to Drm Helper
+        CDRMHelper* iDrmHelper;
+
+        // Cenrep Watcher for settings change
+        CScreensaverRepositoryWatcher* iScreensaverRepositoryWatcher;
+
+        // Cenrep Watcher for drm expiry
+        CScreensaverRepositoryWatcher* iDrmExpiryWatcher;
+
+        // To save the error encountered by the plugin
+        TInt iPluginError;
+
+        // Screensaver plugin name
+        HBufC* iScreensaverName;
+    };
+
+
+#endif // C_SCREENSAVERANIMPLUGIN_H
+// End Of file