diff -r 000000000000 -r a2952bb97e68 mmappfw_plat/playlist_engine_api/inc/mpxplaylistpluginhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/playlist_engine_api/inc/mpxplaylistpluginhandler.h Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,292 @@ +/* +* Copyright (c) 2006 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: playlist plugin handler +* +*/ + + +#ifndef MPXPLAYLISTPLUGINHANDLER_H +#define MPXPLAYLISTPLUGINHANDLER_H + +#include +#include +#include "mpxplaylistenginedefs.h" +#include "mpxplaylistplugin.h" + +/** +* CMPXPlaylistPluginHandler is instantiated and owned by CMPXPlaylistEngine. +* It provides playlist plugin selection APIs for the external client and +* the internal client (i.e. CMPXPlaylistEngine) and manages loading and +* unloading of playlist plugins. A plugin is loaded when selected and +* unloaded when the plugin has been uninstalled or when CMPXPlaylistEngine +* is destroyed (CMPXPlaylistEngine destroys CMPXPlaylistPluginHandler when +* itself is destroyed). +* +* @lib mpxplaylistengine.lib +*/ +class CMPXPlaylistPluginHandler : public CMPXPluginHandlerBase + { +public: + + /** + * Two-phased constructor. + * + * @since S60 3.2.3 + * @param aPluginObserver playlist plugin observer + * @param aObserver plugin handler observer + * @param aFs file session handle + * @param aTopCharacterSet top character set for the locale + * @param aAvailableCharacterSet available character set in the system + * @return Constructed object + */ + IMPORT_C static CMPXPlaylistPluginHandler* NewL( + MMPXPlaylistPluginObserver& aPluginObserver, + MMPXPluginHandlerObserver& aObserver, + RFs& aFs, + const CArrayFix& aTopCharacterSet, + const CArrayFix& aAvailableCharacterSet); + + /** + * Destructor. + * + * @since S60 3.2.3 + */ + ~CMPXPlaylistPluginHandler(); + + /** + * Returns currently loaded plug-in UID, or KNullUid if none loaded. + * + * @since S60 3.2.3 + * @return UID of the plugin + */ + inline TUid PluginUid() const; + + /** + * Returns currently loaded plug-in type or EMPXPlaylistTypeUnknown if + * no plugin is loaded. + * + * @since S60 3.2.3 + * @return plugin type Refer to TMPXPlaylistType for the representation + * of each bit of the return value + */ + inline TUint32 PluginType() const; + + /** + * Returns display name for current plug-in or KNullDesC if no plugin + * is loaded. + * + * @since S60 3.2.3 + * @return plugin name. + */ + inline const TDesC& PluginName() const; + + /** + * Is a plug-in currently loaded. + * + * @since S60 3.2.3 + * @return ETrue if a plugin is loaded; EFalse otherwise. + */ + inline TBool PluginFound() const; + + /** + * Returns currently loaded plug-in, or NULL if none. CMPXPlaylistPluginHandler + * is responsible for the memory management of the return playlist plugin + * object. + * + * @since S60 3.2.3 + * @return plugin object interface + */ + inline CMPXPlaylistPlugin* Plugin() const; + + /** + * Selects a plug-in appropriate for a Uri and data type; may already be loaded. + * If the selected plug-in has not been loaded before, one is instantiated. + * + * If successful, information related to the currently loaded plugin will reflect + * this selected plug-in. Leaves with KErrNotSupported if unable to find a + * suitable plugin. + * + * @since S60 3.2.3 + * @param aUri URI of the song + * @param aDataType data type. KNullDesC8 if this parameter is not to be used + * for selection. + */ + IMPORT_C void SelectPlaylistPluginL( + const TDesC& aUri, + const TDesC8& aDataType); + + /** + * Selects a plug-in appropriate for a file; may already be loaded. If the + * selected plug-in has not been loaded before, one is instantiated. + * + * If successful, information related to currently loaded plugin will reflect + * this selected plug-in. Leaves with KErrNotSupported if unable to find a + * suitable plugin. + * + * @since S60 3.2.3 + * @param aFile file handle + */ + IMPORT_C void SelectPlaylistPluginL(const RFile& aFile); + + /** + * Selects a plugin appropriate for the plugin type; may already be loaded. + * If the selected plugin has not been loaded before, one is instantiated. + * + * If successful, information related to currently loaded plugin will reflect + * this selected plug-in. Leaves with KErrNotSupported if unable to find a + * suitable plugin. + * + * This is the recommended method for the client to select a plugin prior + * to issuing an ExternalizePlaylist request. + * + * @since S60 3.2.3 + * @param aPluginType A plugin type, possible values are defined in + * TMPXPlaylistType. + */ + IMPORT_C void SelectPlaylistPluginL(TUint32 aPluginType); + + /** + * Selects a plugin with the specified display name; may already be loaded. + * If the selected plugin has not been loaded before, one is instantiated. + * + * If successful, information related to currently loaded plugin will reflect + * this selected plug-in. Leaves with KErrNotSupported if unable to find + * a suitable plugin. + * + * This is not the recommended method for the client to select a plugin + * prior to issuing an ExternalizePlaylist request. The recommended + * method is through a plugin type. + * + * @since S60 3.2.3 + * @param aPluginName The name of the plugin to be selected. + */ + IMPORT_C void SelectPlaylistPluginL(const TDesC& aPluginName); + + /** + * Selects a plug-in with UID aUid, or leaves with KErrNotSupported if not + * found. If the selected plugin has not been loaded before, one is + * instantiated. + * + * If successful, information related to currently loaded plugin will reflect + * this selected plug-in. Leaves with KErrNotSupported if unable to find + * the specified plugin. + * + * @since S60 3.2.3 + * @param aUid UID of the plugin + */ + IMPORT_C void SelectPlaylistPluginL(const TUid& aUid); + +private: + + /** + * C++ constructor. + * + * @since S60 3.2.3 + * @param aPluginObserver playlist plugin observer + * @param aObserver plugin handler observer + * @param aFs file session handle + * @param aTopCharacterSet top character set for the locale + * @param aAvailableCharacterSet available character set in the system + */ + CMPXPlaylistPluginHandler( + MMPXPlaylistPluginObserver& aPluginObserver, + MMPXPluginHandlerObserver& aObserver, + RFs& aFs, + const CArrayFix& aTopCharacterSet, + const CArrayFix& aAvailableCharacterSet); + + /** + * 2nd phase contructor. + * + * @since S60 3.2.3 + */ + void ConstructL(); + + /** + * Creates a plugin. If already loaded, returns a reference without creating + * another instance of the plugin. + * + * @since S60 3.2.3 + * @return plugin object interface + * @leave The function leaves with one of the system error codes, + */ + CMPXPlaylistPlugin* CreatePlaylistPluginL(const TUid& aUid); + + /** + * From CMPXPluginHandlerBase. + * Resolves plugin. + * + * @since S60 3.2.3 + */ + void ResolvePluginL(); + + /** + * Verify the specified plugin is loaded. + * + * @see CMPXPluginHandlerBase + * + * @since S60 3.2.3 + */ + TBool IsPluginLoaded(const TUid& aPluginUid); + + /** + * Load the specified plugin. + * @see CMPXPluginHandlerBase + * + * @since S60 3.2.3 + */ + void LoadPluginL(const TUid& aPluginUid); + + /** + * Unload the specified plugin. + * @see CMPXPluginHandlerBase + * + * @since S60 3.2.3 + */ + void UnloadPlugin(const TUid& aPluginUid); + + /** + * Unloads a plugin by index. + * @since S60 3.2.3 + * @param aIndex index of the plugin to unload + * + */ + void UnloadPlugin(TInt aIndex); + +private: + + MMPXPlaylistPluginObserver& iPluginObserver; + RFs& iFs; + const CArrayFix& iTopCharacterSet; + const CArrayFix& iAvailableCharacterSet; + + // + // Loaded. The index must correspond in these arrays + // + RPointerArray iLoadedPlugins; + RArray iLoadedPluginsUids; + + // + // Chosen + // + CMPXPlaylistPlugin* iPlugin; // ownership belongs to iLoadedPlugins + TUid iPluginUid; + TUint32 iPluginType; + HBufC* iDisplayName; + + }; + +#include "mpxplaylistpluginhandler.inl" + +#endif // MPXPLAYLISTPLUGINHANDLER_H