diff -r aaeeca1f15af -r e8d784ac1a4b scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h Wed Sep 01 12:30:40 2010 +0100 @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +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