mpx/playbackframework/playbackengine/inc/mpxplaybackpluginhandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:55:47 +0200
changeset 0 a2952bb97e68
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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:  Plugin handler
*
*/



#ifndef CMPXPLAYBACKPLUGINHANDLER_H
#define CMPXPLAYBACKPLUGINHANDLER_H

#include <mpxplaybackframeworkdefs.h>
#include <mpxpluginhandlerbase.h>

class CMPXPluginMonitor;
class CMPXPlaybackPlugin;
class MMPXPlaybackPluginObserver;


/**
*   Processes plug-ins
*/
class CMPXPlaybackPluginHandler : public CMPXPluginHandlerBase
    {
public:
    /**
    *  Two-phased constructor.
    *
    *  @param aPluginMonitor plugin monitor
    *  @param aPluginObserver Observer
    *  @param aObserver plugin handler observer
    *  @return Constructed object
    */
    static CMPXPlaybackPluginHandler* NewL(CMPXPluginMonitor& aPluginMonitor,
                                           MMPXPlaybackPluginObserver& aPluginObserver,
                                           MMPXPluginHandlerObserver& aObserver);

    /**
    *  Destructor
    */
    ~CMPXPlaybackPluginHandler();

public:
    /**
    * Set a new observer
    *
    * @param aObs observer
    */
    inline void SetObserver(MMPXPlaybackPluginObserver& aObs);

    /**
    *  Returns currently loaded plug-in, or NULL if none
    *
    *  @return plugin object interface
    */
    inline CMPXPlaybackPlugin* Plugin();

    /**
    *  Returns currently loaded plug-in UID, or KNullUId if none loaded
    *
    *  @return UID of the plugin
    */
    inline TUid PluginUid() const;

    /**
    *  Returns currently loaded plug-in type
    *
    *  @return plugin type
    */
    inline TMPXPlaybackPlayerType PluginType() const;

    /**
    *  Returns display name for custom type for current plug-in; standard types
    *  should be recognized by client and localized - calling this method would
    *  then not be required. See MMPXPlayerManager
    *
    *  @return player name
    */
    inline const TDesC& PlayerName() const;

    /**
    *  Is a plug-in currently loaded
    *
    *  @return ETrue if a play-in is loaded
    */
    inline TBool PlayerFound() const;

    /**
    *  Currently selected sub player. or KErrNotFound if none
    *
    *  @return index of subplayer
    */
    inline TInt SubPlayer() const;

    /**
    *  Returns plug-in with UID aUid, or leaves with KErrNotFound if not there.
    *  Plug-in loaded until Unload called
    *
    *  @param UID of the plugin
    *  @return plugin object interface
    */
    CMPXPlaybackPlugin* CreatePlayerPluginL(const TUid& aUid);

    /**
    * @see CMPXPluginHandlerBase
    */
    TBool IsPluginLoaded(const TUid& aPluginUid);

    /**
    * @see CMPXPluginHandlerBase
    */
    void LoadPluginL(const TUid& aPluginUid);

    /**
    * @see CMPXPluginHandlerBase
    */
    void UnloadPlugin(const TUid& aPluginUid);

    /**
    *  Returns display name for custom types; standard types should be
    *  recognized by client and localized - calling this method would then not
    *  be required. See MMPXPlayerManager
    *
    *  @param aType player type
    *  @return player name
    */
    IMPORT_C const TDesC& PlayerName(TMPXPlaybackPlayerType aType) const;


    /**
    *  All the UIDs of the plug-ins in the system of a specific type.
    *  See MMPXPlayerManager
    *
    *  @param aPlayers array of UIDs of all players of type aType
    *  @param aType player type
    */
    IMPORT_C void GetPlayerListL(RArray<TUid>& aPlayers,
                                TMPXPlaybackPlayerType aType);

    /**
    *  Only plug-ins of a specific type will be considered for selection.
    *  See MMPXPlayerManager
    *
    *  @param aType player type
    */
    IMPORT_C void SelectPlayersL(TMPXPlaybackPlayerType aType);

    /**
    *  selects plug-in appropriate for a Uri; may already be loaded or not
    *  @param aUri URI of the song
    *  @param aDataType data type
    */
    void SelectPlayerL(const TDesC& aUri,const TDesC8& aDataType);

    /**
    *  selects plug-in appropriate for a file; may already be loaded or not
    *
    *  @param aFile file handle
    */
    void SelectPlayerL(RFile& aFile);

    /**
    *  Only this plug-in will be used, if possible. See MMPXPlayerManager
    *
    *  @param aPlayerUid UID of players
    */
    IMPORT_C void SelectPlayerL(TUid aPlayerUid);

    /**
    *  Only this plug-in will be used, and only this sub player, if possible.
    *  See MMPXPlayerManager
    *
    *  @param aPlayerUid UID of players
    *  @param aSubPlayerIndex index to the subplayer
    */
    IMPORT_C void SelectSubPlayerL(TUid aPlayerUid,TInt aSubPlayerIndex);

    /**
    *  Back to default slection criteria, i.e. type=EPbLocal, no sub player
    *  selected
    */
    IMPORT_C void ClearSelectPlayersL();

    /**
    *  Retreives the current selection: KNullUid and KErrNotFound are possible
    *  return values for aPlayer and aSubPlayerIndex respectively if none are
    *  explicitly selected
    *
    *  @param aType player type
    *  @param aPlayer UID
    *  @param aSubPlayerIndex index of sub player
    *  @param aSubPlayerName Friendly name of the sub player
    */
    IMPORT_C void GetSelection(TMPXPlaybackPlayerType& aType,
                               TUid& aPlayer,
                               TInt& aSubPlayerIndex,
                               TPtrC& aSubPlayerName);

    /**
    *  Return a list of interfaces supported by plugins.
    *
    *  @return an array of interfaces. Client is responsible
    *          for the memory management of this array and its
    *          items.
    */
    IMPORT_C CDesCArray* SupportedInterfacesL();
    
    /**
    *  Return a list of interfaces supported by a plugin.
    *
    *  @param aUid plugin id
    *  @return an array of interfaces. Client is responsible
    *          for the memory management of this array and its
    *          items.
    */
    IMPORT_C CDesCArray* SupportedInterfacesL(const TUid& aUid);    
    
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
    /**
    *  selects plug-in appropriate for a file; may already be loaded or not
    *
    *  @param aFile file handle
    */
    void SelectPlayer64L(RFile64& aFile);
#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
    
protected:
    
    /**
    * From Base CMPXPluginHandlerBase
    * Constructs the collection plugin info
    */
    CMPXPluginInfo* ConstructPluginInfoLC( const CImplementationInformation& aData  );
    
private:

    /**
    *  2nd phase contructor
    */
    void ConstructL();

    /**
    *  C++ constructor
    *
    *  @param aPluginMonitor plugin monitor
    *  @param aPluginObserver plugin observer
    *  @param aObserver handler observer
    */
    CMPXPlaybackPluginHandler(CMPXPluginMonitor& aPluginMonitor,
                              MMPXPlaybackPluginObserver& aPluginObserver,
                              MMPXPluginHandlerObserver& aObserver);

private:

    /**
    * From Base CMPXPluginHandlerBase
    *  Resolves a plugin
    */
    void ResolvePluginL();

    /**
    *  Unloads the plugin at a specified index.
    *  @param aIndex index of the plugin in iLoadedPlugins
    */
    void UnloadPlugin(TInt aIndex);

private:
    MMPXPlaybackPluginObserver* iPluginObserver;  // Not owned.
    //
    // Loaded. The index must correspond in these arrays
    //
    RPointerArray<CMPXPlaybackPlugin> iLoadedPlugins;
    RArray<TUid> iLoadedPluginsUids;

    // Chosen
    //
    CMPXPlaybackPlugin* iPlugin;
    TUid iPluginUid;
    TMPXPlaybackPlayerType iPluginType;
    HBufC* iDisplayName;
    //
    // Desired
    //
    TInt iSelectedSubPlayerIndex;
    };

#include "mpxplaybackpluginhandler.inl"

#endif // CMPXPLAYBACKPLUGINHANDLER_H