mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengine.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:45:05 +0200
changeset 0 ff3acec5bc43
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-2007 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:  Engine which interfaces to MPX framework.
*
*/


#ifndef C_AIPLAYERPLUGINENGINE_H
#define C_AIPLAYERPLUGINENGINE_H

#include <e32base.h>
#include <mpxplaybackobserver.h>

#include "aiplayerpluginengineobserver.h"

class MMPXPlaybackUtility;


/**
 *  Music Player Player Plugin Engine.
 *  This class provides interface to MPX framework.
 *
 *  @lib aiplayerplugin2.lib
 *  @since S60 5.0
 */
NONSHARABLE_CLASS( CAiPlayerPluginEngine ) : public CBase,
                                             public MMPXPlaybackObserver,
                                             public MMPXPlaybackCallback
    {
public: // Constructors and destructor

    /**
     * Two-phased constructor.
     */
    static CAiPlayerPluginEngine* NewL( MAiPlayerPluginEngineObserver& aObserver );

    /**
     * Destructor.
     */
    virtual ~CAiPlayerPluginEngine();

    /**
     * From MMPXPlaybackObserver
     * See mpxplaybackobserver.h for detailed description.
     * @since S60 5.0
     */
    void HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError );

    /**
     * From MMPXPlaybackCallback
     * See mpxplaybackobserver.h for detailed description.
     * @since S60 5.0
     */
    void HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError );
    void HandleSubPlayerNamesL( TUid aPlayer, const MDesCArray* aSubPlayers, TBool aComplete, TInt aError );
    void HandleMediaL( const CMPXMedia& aMedia, TInt aError );
    void HandlePlaybackCommandComplete( CMPXCommand* aCommandResult, TInt aError );

public:

    /**
     * Get the current state of the active player.
     *
     * @return Active player state
     * @see TMPlayerState
     */
    TMPlayerState PlayerState();

    /**
     * Get the title of the currently playing song.
     *
     * @return Song title
     */
    const TDesC& Title();

    /**
     * Get the artist of the currently playing song.
     *
     * @return Artist
     */
    const TDesC& Artist();

    /**
     * Get the current position.
     *
     * @return Current position.
     */
    TInt Position();

    /**
     * Get the duration of the currently playing song.
     *
     * @return Song duration.
     */
    TInt Duration();

    /**
     * Get the current volume.
     *
     * @return Current volume.
     */
    TInt Volume();

    /**
     * Set volume.
     *
     * @param aVolume Volume level
     */
    void SetVolumeL( TInt aVolume );

private:

    /**
     * C++ default constructor.
     */
    CAiPlayerPluginEngine( MAiPlayerPluginEngineObserver& aObserver );

    /**
     * By default Symbian 2nd phase constructor is private.
     */
    void ConstructL();

    /**
     *  Handle playback message
     *
     *  @param aMessage playback message
     */
    void DoHandlePlaybackMessageL( const CMPXMessage& aMessage );

    /**
     *  Handle playback property
     *
     *  @param aProperty the property
     *  @param aValue the value of the property
     *  @param aError error code
     */
    void DoHandlePropertyL( TInt aProperty, TInt aValue, TInt aError );

    /**
     *  Handle playback state changed.
     *
     *  @param aState New Playback state
     */
    void DoHandleStateChangedL( TMPXPlaybackState aState );

    /**
     * Displays error notes.
     *
     * @param aError Error ID to be handled.
     */
    void HandleErrorL( TInt aError );

    /**
     *  Map states from TMPXPlaybackState to TMPlayerState
     *
     *  @param aState State in TMPXPlaybackState format
     *  @return State in TMPlayerState format, or KErrNotFound
     *          if the state can't be mapped
     */
    TMPlayerState MapState( TMPXPlaybackState aState );

    /**
     *  Map volume from MPX player to AI volume level.
     *
     *  @param aVolume Volume level from MPX player
     *  @return Volume level for AI.
     */
    TInt MapToAiVolume( TInt aVolume );

    /**
     *  Map volume from AI to MPX player volume level.
     *
     *  @param aVolume Volume level from AI
     *  @return Volume level for MPX player.
     */
    TInt MapToMpxVolume( TInt aVolume );
    
    /**
     *  Request media.
     */
    void RequestMediaL();

private:    // Data

    MAiPlayerPluginEngineObserver* 	iObserver; 			// Not owned
    MMPXPlaybackUtility* 			iPlaybackUtility; 	// Owned

    HBufC*		iTitle;
    HBufC*		iArtist;
    TInt		iMaxVolume;
    TInt		iVolume;
    TInt		iPosition;
    TInt		iDuration;
    };

#endif  // C_CAiPlayerPluginEngine_H

// End of File