musichomescreen_multiview/mcpmusicplayer/inc/mcpmusicplayer.h
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 16:33:08 +0000
branchRCL_3
changeset 69 1a9731de4f7b
parent 53 3de6c4cf6b67
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* Copyright (c) 2008-2008 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:  Updates Music Content Plublisher
*
*/


#ifndef C_MCPMUSICPLAYER_H
#define C_MCPMUSICPLAYER_H 

#include <mpxplaybackcommanddefs.h> //for TMPXPlaybackCommand
#include <e32std.h> // for TExitType
#include <mcpplugin.h>
#include <mcppluginobserver.h>
#include <mpxcollectionobserver.h>
#include <mpxharvesterutilityobserver.h>
#include "aiplayerpluginengineobserver.h"
#include "filemonitorobserver.h"
#include "applicationmonitorobserver.h"
#include "pnsmonitorobserver.h"

class MLiwInterface;
class CLiwGenericParamList;
class CAiPlayerPluginEngine;
class CFileMonitor;
class CApplicationMonitor;
class CPNSMonitor;
class RResourceFile;
class MMPXCollectionUtility;
class MMPXHarvesterUtility;

/**
 *  Music Player MCP plugin.
 *  CMCPMusicPlayer implements CMCPPlugin
 *
 *  @since S60 S60 v5.0
 */
class CMCPMusicPlayer : public CMCPPlugin,
                                public MAiPlayerPluginEngineObserver,
                                public MFileMonitorObserver,
                                public MApplicationMonitorObserver,
                                public MMPXCollectionObserver,
                                public MPNSMonitorObserver
    {
public:
    /**
     * Standard Symbian 2 phase constructor
     */
    static CMCPMusicPlayer* NewL(
            MMCPPluginObserver* aObserver);

    /**
     * Standard C++ destructor.
     */
    virtual ~CMCPMusicPlayer();

 // from base class CMCPPlugin

    /**
     * From CMCPPlugin
     * @since S60 5.0
     */
    void Deactivate();
    
    /**
     * From CMCPPlugin
     * @since S60 5.0
     */
    void SkinChanged();
        

// from base class MAiPlayerPluginEngineObserver
    
    /**
     * From MAiPlayerPluginEngineObserver
     * @since S60 5.0
     * See aiplayerpluginengineobserver.h for detailed description.
     */
    void PlayerStateChanged(TMPlayerState aState);
    
    /**
     * From MAiPlayerPluginEngineObserver
     * @since S60 5.0
     * See aiplayerpluginengineobserver.h for detailed description.
     */
    void TrackInfoChanged(const TDesC& aTitle, const TDesC& aArtist);
    
    /**
     * From MAiPlayerPluginEngineObserver
     * @since S60 5.0
     * See aiplayerpluginengineobserver.h for detailed description.
     */
    void PlaybackPositionChanged(TInt aPosition);
    
    /**
     * From MAiPlayerPluginEngineObserver
     * @since S60 5.0
     * See aiplayerpluginengineobserver.h for detailed description.
     */
    void AlbumArtChanged( CFbsBitmap* aBitmap );
    
    /**
     * From MAiPlayerPluginEngineObserver
     * @since S60 5.0
     * See aiplayerpluginengineobserver.h for detailed description.
     */
    void Opening();
    
    /**
     * From MAiPlayerPluginEngineObserver
     * @since S60 5.0
     * See aiplayerpluginengineobserver.h for detailed description.
     */
    void PlaylisIsEmpty();
    
// from base class MFileMonitorObserver
    /**
     * from MFileMonitorObserver
     * Handle a file system change notification
     *
     */
    void HandleFileRemovedL();
       
// from base class MApplicationMonitorObserver
    /**
     * from MApplicationMonitorObserver
     * Handle an application close event.
     */
    void HandleApplicationClosedL(TExitType aReason);
    
//from base class MMPXCollectionObserver  
    /** 
     *  Handle collection message
     * 
     *  @param aMsg collection message, ownership not transferred. 
     *         Please check aMsg is not NULL before using it. 
     *         If aErr is not KErrNone, plugin might still call back with more
     *         info in the aMsg.
     *  @param aErr system error code.
     */
    void HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr );

    /**
     *  Handles the collection entries being opened. Typically called
     *  when client has Open()'d a folder.
     *
     *  @since S60 3.2.3
     *  @param aEntries collection entries opened
     *  @param aIndex focused entry
     *  @param aComplete ETrue no more entries. EFalse more entries
     *                   expected
     *  @param aError error code   
     */
    void HandleOpenL( const CMPXMedia& aEntries, TInt aIndex, TBool aComplete,
            TInt aError );

    /**
     *  Handles the item being opened. Typically called
     *  when client has Open()'d an item. Client typically responds by
     *  'playing' the item via the playlist.
     *
     *  @since S60 3.2.3
     *  @param aPlaylist collection playlist
     *  @param aError error code
     */
    void HandleOpenL( const CMPXCollectionPlaylist& aPlaylist, TInt aError );

    /**
     * From MMPXCollectionMediaObserver 
     * It handles MediaL event.
     *
     * @param aMedia object containing collection's informations
     * @param aError error code
     */
    void HandleCollectionMediaL( const CMPXMedia& aMedia, TInt aError );

    /**
     * from MPNSMonitorObserver
     * Handle launching music player on the background.
     */
    void OpeningMusicPlayer();

private:

    /**
     * Standard C++ constructor.
     */
    CMCPMusicPlayer( MMCPPluginObserver* aObserver );

    /**
     * Standard Symbian 2nd phase constructor.
     */
    void ConstructL();

    /**
     * returns ETrue if data can be propagated to the Music Content Publisher.
     */
    TBool IsOKToPublishData();
     
    /**
     * Installs Playback command action, the puppose of this is to improve
     * readability.
     */
    void InstallPlaybackCommandActionL( TMPXPlaybackCommand aCmd,
            TMCPTriggerDestination aDestination );
    /**
     * Installs Launch Music Player action, the puppose of this is to improve
     * readability.
     */
    void InstallLaunchMusicPlayerL( TMCPTriggerDestination aDestination );
    
    /**
     * Installs Go To Now playing action, the puppose of this is to improve
     * readability.
     */
    void InstallGoToNowPlayingL( TMCPTriggerDestination aDestination );
        
    /**
     * Installs Go To Last Played action, the puppose of this is to improve
     * readability.
     */
    void InstallGoToLastPlayedL( TMCPTriggerDestination aDestination ); 
   
    /**
     * Installs an action, mainly for readability purposes.
     *
     * @since S60 5.0
     * @param aDestination Destination trigger that should launch the action.
     */
    void InstallGoToMusicL(TMCPTriggerDestination aDestination);
    
    /**
     * Installs an action, mainly for readability purposes.
     *
     * @since S60 5.0
     * @param aDestination Destination trigger that should launch the action.
     */
    void InstallGoToAlbumL(TMCPTriggerDestination aDestination);
    
    /**
     * Installs an empty action, mainly for readability purposes.
     *
     * @since S60 5.0
     * @param aDestination Destination trigger that should launch the action.
     */
    void InstallEmptyActionL(TMCPTriggerDestination aDestination);
    
    /**
     * Installs actions and icons in the toolbar.
     *
     * @since S60 5.0
     */
    void UpdateToolBarL(TUint aToolBarState);
    
    /**
     * Resets the widget an Music Suite.
     *
     * @since S60 5.0
     */
    void ResetL();

    /**
     * Get a heap descriptor from the resource file
     *
     * @since S60 5.0
     */
    void GetLocalizedStringL(RResourceFile& aResourceFile, HBufC*& aRetBuf,
            TInt aResourceId);
    
    
    /**
     * @since S60 5.0
     */
    void ActivateL();
    void DoUpdatePlayerStateL(TMPlayerState aState);
    void DoUpdateTrackInfoL(const TDesC& aTitle, const TDesC& aArtist);
    void DoUpdatePlaybackPositionL(TInt aPosition);
    void DoUpdateAlbumArtL( CFbsBitmap* aBitmap );
    void DoHandleOpeningL();
    void DoHandlePlaylisIsEmptyL();
    void DoHandleSkinChangedL();
    
    /**
     * Logic of HandleCollectionMessageL, to avoid the function leaves
     * 
     * @param aMsg collection message
     */
    void HandleCollectionMessageL( CMPXMessage* aMsg );

    /**
     * Logic of HandleCollectionMessage, to avoid the function leaves
     * 
     * @param aMsg collection message
     */
    void DoHandleGeneralMessageL( const CMPXMessage& aMsg );
       
    /**
    *  Music Player opening timer callback
    *
    *  @param aPtr pointer the this
    */
    static TInt MusicPlayerOpeningTimerCallback( TAny* aPtr );

private: // data

    /**
     * Instance of MCP plugin observer
     * Not owned.
     */
    MMCPPluginObserver* iMHObserver;
    
    /**
     * Instance of CAiPlayerPluginEngine used to observe Music player via 
     * MAiPlayerPluginEngineObserver.
     * Owned.
     */
    CAiPlayerPluginEngine* iEngine;
    
    /**
     * State indicator, the plugin can be active or inactive. 
     */
    TBool iActive;
    
    /**
     * art cached indicator. 
     */
    TBool iArtCached;
    
    /**
     * Used to monitor last played song. 
     */
    CFileMonitor* iFileMonitor;

    /**
     * Used to monitor if music player closes. 
     */
    CApplicationMonitor* iAppMonitor;
    
    /**
     * Used to monitor publish and subscribe property. 
     */
    CPNSMonitor* iPNSMonitor;

    /**
     * Current Album Art. 
     */
    CFbsBitmap* iArtBitmap;
    
    /**
     * The art that was extracted but not used due to the current stateof
     * the plugin (acctive, not active) 
     */
    CFbsBitmap* iCachedArtBitmap;
    
    /**
     * Album Art mask. 
     */
    CFbsBitmap* iArtBitmapMask;
    
    /**
     * Current Toolbar State.
     */  
    TUint iToolBarState;
    
    /**
    * Buffers for the localized strings
    */
    HBufC* iGoToMusicBuffer;
    HBufC* iOpeningBuffer;
    
    /**
     * Flag of Mass Storage mode or MTP mode
     */
    TBool iBlockingOperationOngoing;
   
    /**
     * collection utility
     */
    MMPXCollectionUtility* iCollectionUtility;

    /**
     * harvester utility
     */
    MMPXHarvesterUtility* iHarvester;
    
    CPeriodic* iMusicPlayerOpeningTimer;
    };

#endif // C_MCPMUSICPLAYER_H

//  End of File