--- /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 <mpxplaybackobserver.h>
+#include <mpxplaybackframeworkdefs.h>
+#include <mpxcollectionplaylistobserver.h>
+
+#include <remconmediainformationtarget.h>
+#include <playerinformationtargetobserver.h>
+#include <remcongroupnavigationtargetobserver.h>
+
+// 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<TInt>& aAttributeID, const RArray<TInt>& 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