diff -r 000000000000 -r ff3acec5bc43 mpxmusicplayer/metadatahandler/inc/mpxmetadatahandlerimp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxmusicplayer/metadatahandler/inc/mpxmetadatahandlerimp.h Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,499 @@ +/* +* Copyright (c) 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: Implementation of metadata handler +* +*/ + + + +#ifndef C_CMPXMETADATAHANDLERIMP_H +#define C_CMPXMETADATAHANDLERIMP_H + +// INCLUDES +#include +#include +#include + +#include +#include +#include + +// FORWARD DECLARATIONS +class CRemConInterfaceSelector; +class CRepository; +class MMPXPlaybackUtility; +class MPlayerCapabilitiesObserver; +class MPlayerApplicationSettingsObserver; +class MPlayerEventsObserver; +class CRemConGroupNavigationApiTarget; +class CPlayerInfoTarget; +class CEqualizerPresetChangeListener; + + +/** + * Observer class for equalizer preset changes. + * + * @lib mpxmetadatahandler.lib + * @since S60 v5.1 + */ +class MEqualizerPresetChangeListenerObserver + { +public: + + /** + * Callback for receiving changes in the equalizer preset settings. + * + * @since S60 v5.1 + * @param aNewPreset The ID of the new equalizer preset + */ + virtual void EqualizerPresetChangedL(TInt aNewPreset) = 0; + + }; + + +/** + * AVRCP 1.3 metadata handler implementation class + * + * @lib mpxmetadatahandler.lib + * @since S60 v5.1 + */ +NONSHARABLE_CLASS( CMPXMetaDataHandlerImp ): public CBase, + public MMPXMetaDataHandler, + public MMPXPlaybackObserver, + public MMPXPlaybackCallback, + public MPlayerApplicationSettingsNotify, + public MRemConMediaInformationTargetObserver, + public MRemConGroupNavigationTargetObserver, + public MMPXCollectionPlaylistObserver, + public MEqualizerPresetChangeListenerObserver + { +public: + + /** + * Two-phased constructor. + * + * @since v5.1 + * @param aInterfaceSelector RemCon interface selector. + * @return Pointer to newly created object. + */ + static MMPXMetaDataHandler* NewL(CRemConInterfaceSelector &aInterfaceSelector); + + /** + * Destructor. + */ + virtual ~CMPXMetaDataHandlerImp(); + +private: + + /** + * C++ default constructor. + * + * @since S60 v5.1 + */ + CMPXMetaDataHandlerImp(); + + /** + * By default Symbian 2nd phase constructor is private. + * + * @since S60 v5.1 + * @param aInterfaceSelector RemCon interface selector. + */ + void ConstructL(CRemConInterfaceSelector &aInterfaceSelector); + + /** + * Handle playback message + * + * @since S60 v5.1 + * @param aMessage playback message + */ + void DoHandlePlaybackMessageL( const CMPXMessage& aMessage ); + + /** + * Handle playback property + * + * @since S60 v5.1 + * @param aProperty the property + * @param aValue the value of the property + * @param aError error code + */ + void DoHandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError ); + + /** + * Handle media properties. + * + * @since S60 v5.1 + * @param aMedia media properties + * @param aError error code + */ + void DoHandleMediaL( const CMPXMedia& aMedia, TInt aError ); + + /** + * Handle playback state changed. + * + * @since S60 v5.1 + * @param aState New Playback state + */ + void DoHandleStateChangedL( TMPXPlaybackState aState ); + +// from base class MMPXPlaybackObserver + + /** + * From MMPXPlaybackObserver + * Handle playback message + * + * @since S60 v5.1 + * @param aMessage playback message + * @param aErr system error code. + */ + void HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError ); + +// from base class MMPXPlaybackCallback + + /** + * From MMPXPlaybackCallback + * Handle playback property + * + * @since S60 v5.1 + * @param aProperty the property + * @param aValue the value of the property + * @param aError error code + */ + void HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError ); + + /** + * From MMPXPlaybackCallback + * Method is called continously until aComplete=ETrue, signifying that + * it is done and there will be no more callbacks + * Only new items are passed each time + * + * @since S60 v5.1 + * @param aPlayer UID of the subplayer + * @param aSubPlayers a list of sub players + * @param aComplete ETrue no more sub players. EFalse more subplayer expected + * @param aError error code + */ + void HandleSubPlayerNamesL( TUid aPlayer, const MDesCArray* aSubPlayers, + TBool aComplete, TInt aError ); + + /** + * From MMPXPlaybackCallback + * Handle media properties + * + * @since S60 v5.1 + * @param aMedia media + * @param aError error code + */ + void HandleMediaL( const CMPXMedia& aMedia, TInt aError ); + +// From base class MMPXCollectionPlaylistObserver + + /** + * From MMPXCollectionPlaylistObserver + * Handle collection playlist change. + * + * @since S60 v5.1 + * @param aError KErrNotFound - Playlist is updated, current item removed + * KErrNone - Playlist is updated, current item is valid + * KErrEof - Playlist is updated, current item removed and + * reached to the end of playlist + */ + void HandleCollectionPlaylistChange(TInt aError); + +// From base class MPlayerApplicationSettingsNotify + + /** + * From MPlayerApplicationSettingsNotify + * This is called when the controller has changed a setting + * + * @since S60 v5.1 + * @param aAttributeID A list of attribute IDs whose value has changed. + * @param aAttributeValue A list of new values for the attributes listed in aAttributeID. + */ + virtual void MpasnSetPlayerApplicationValueL(const RArray& aAttributeID, const RArray& aAttributeValue); + +// From base class MRemConMediaInformationTargetObserver + + /** + * From MRemConMediaInformationTargetObserver + * For each element in aAttributeList the client should respond by calling + * CRemConMediaInformationTarget::AttributeValue(). After all attributes have + * been supplied the client should call CRemConMediaInformationTarget::Completed(). + * + * @since S60 v5.1 + * @param aAttributeList A list of TAttributeID requested by the controller + */ + virtual void MrcmitoGetCurrentlyPlayingMetadata( TMediaAttributeIter& aAttributeIter ); + + /** + * From MRemConGroupNavigationTargetObserver + * Clients must implement this interface in order to instantiate objects of type + * CRemConGroupNavigation. This interface passes incoming commands from RemCon to + * the client. + * A 'Next Group' has been received. + * + * @since S60 v5.1 + * @param aButtonAct The button action associated with the command. + */ + virtual void MrcgntoNextGroup(TRemConCoreApiButtonAction aButtonAct); + + /** + * From MRemConGroupNavigationTargetObserver + * For each element in aAttributeList the client should respond by calling + * CRemConMediaInformationTarget::AttributeValue(). After all attributes have + * been supplied the client should call CRemConMediaInformationTarget::Completed(). + * A 'Previous Group' has been received. + * + * @since S60 v5.1 + * @param aButtonAct The button action associated with the command. + */ + virtual void MrcgntoPreviousGroup(TRemConCoreApiButtonAction aButtonAct); + +// From base class MEqualizerPresetChangeListenerObserver + + /** + * From MEqualizerPresetChangeListenerObserver + * Callback for receiving changes in the equalizer preset settings. + * + * @since S60 v5.1 + * @param aNewPreset The ID of the new equalizer preset + */ + virtual void EqualizerPresetChangedL(TInt aNewPreset); + +private: // Data + + /** + * The current player state (playing, paused, stopped). + */ + TMPXPlaybackState iPlayerState; + + /** + * Current track's position info (in seconds) + */ + TInt iPlaybackPosition; + + /** + * Current track's playing time info (in milliseconds) + */ + TInt iPlayingTime; + + /** + * Current track number + */ + TInt iTrackNumber; + + /** + * Last selected equalizer preset settings + */ + TInt iLastEqPresetId; + + /** + * Current track's title info + * Own. + */ + HBufC* iTrackTitle; + + /** + * Current track's artist info + * Own. + */ + HBufC* iArtist; + + /** + * Current track's album info + * Own. + */ + HBufC* iAlbum; + + /** + * Current track's genre info + * Own. + */ + HBufC* iGenre; + + /** + * Current track's unique id info + * Own. + */ + + TUid iColId; + + /** + * Observer for equalizer preset changes + * Own. + */ + CEqualizerPresetChangeListener* iEqPresetListener; + + /** + * Main interface to the player. + * Not own. + */ + MMPXPlaybackUtility* iPlaybackUtility; + + /** + * Container for player information responses + * Not own. + */ + CPlayerInfoTarget* iPlayerInformationTarget; + + /** + * Observer of this player's capabilities. + * Not own. + */ + MPlayerCapabilitiesObserver* iPlayerCapabilitiesObserver; + + /** + * Observer of this player's settings. + * Not own. + */ + MPlayerApplicationSettingsObserver* iPlayerApplicationSettingsObserver; + + /** + * Observer of player events. + * Not own. + */ + MPlayerEventsObserver* iPlayerEventsObserver; + + /** + * Interface for sending media information + * Not own. + */ + CRemConMediaInformationTarget* iMediaInfoTarget; + + /** + * Interface for group navigation responses + * Not own. + */ + CRemConGroupNavigationApiTarget* iGroupNavigationTarget; + + }; + + +/** + * Helper class for receiving equalizer preset changed events. + * + * @lib mpxmetadatahandler.lib + * @since S60 v5.1 + */ +NONSHARABLE_CLASS(CEqualizerPresetChangeListener): public CActive + { +public: + + /** + * Two-phased constructor. + * + * @since v5.1 + * @param aFlags Flags for creating popups. + * @param aObserver Custom command observer for media key handling. + * @return Pointer to newly created object. + */ + static CEqualizerPresetChangeListener* NewL(MEqualizerPresetChangeListenerObserver& aObserver); + + /** + * Destructor. + */ + virtual ~CEqualizerPresetChangeListener(); + + /** + * Get the current equalizer preset ID + * + * @since S60 v5.1 + * @return The current preset ID + */ + TInt GetCurrentPresetL(); + + /** + * Set the equalizer preset + * + * @since S60 v5.1 + * @param aNewPreset The ID of the preset to be activated + */ + void ChangePresetL(TInt aNewPreset); + + /** + * Start listening to equalizer preset changes + * + * @since S60 v5.1 + */ + void StartL(); + + /** + * Stop listening to equalizer preset changes + * + * @since S60 v5.1 + * @return The current preset ID + */ + void Stop(); + +private: + + /** + * C++ default constructor. + * + * @since S60 v5.1 + * @param aObserver Client for receiving equalizer preset changed events + */ + CEqualizerPresetChangeListener(MEqualizerPresetChangeListenerObserver& aObserver); + + /** + * Symbian 2nd-phase constructor + * + * @since S60 v5.1 + */ + void ConstructL(); + +// from base class CActive + + /** + * From CActive. + * Called by the active scheduler when the request has been cancelled. + * + * @since S60 v5.1 + */ + virtual void DoCancel(); + + /** + * From CActive. + * Called by the active scheduler when the request has been completed. + * + * @since S60 v5.1 + */ + virtual void RunL(); + + /** + * From CActive. + * Called by the active scheduler when an error in RunL has occurred. + * + * @since S60 v5.1 + */ + TInt RunError( TInt aError ); + +private: // Data + + /** + * Handle to Central Repository + * Own. + */ + CRepository* iRepository; + + /** + * Client for receiving equalizer preset changed events + * Not own. + */ + MEqualizerPresetChangeListenerObserver& iObserver; + + }; + +#endif // C_CMPXMETADATAHANDLERIMP_H + +// End of File