diff -r cce62ebc198e -r 93c594350b9a fmradio/fmradio/inc/fmradiomusicstorehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fmradio/fmradio/inc/fmradiomusicstorehandler.h Wed Sep 01 12:30:32 2010 +0100 @@ -0,0 +1,282 @@ +/* +* 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: Handles music store integration. +* +*/ + + +#ifndef FMRADIOMUSICSTOREHANDLER_H +#define FMRADIOMUSICSTOREHANDLER_H + +#include + +class CEikMenuPane; +class CRepository; + +/** + * Handler for Music Store. + * + * Takes care of Nokia music store and operator specific music store. + * + * Provides also a interface to open a web page. + */ +class CFMRadioMusicStoreHandler : public CBase + { +private: + /** + * Used for tracking the visibility state. + */ + enum TFMRadioMusicStoreState + { + EFMRadioMusicStoreUninitialized, + EFMRadioMusicStoreEnabled, + EFMRadioMusicStoreDisabled, + EFMRadioMusicStoreForceEnabled + }; + + /** + * Distinguishes between different implementation types of music store. + */ + enum TFMRadioOperatorAppType + { + EFMRadioAppNotAvailable, + EFMRadioNativeApp, + EFMRadioJavaApp, + EFMRadioWebsite + }; + +public: + /** + * Two-phase constructor of CMusicStoreHandler. + * + * @param aResourceId Menu pane where the music store item/items + * will be added. + */ + static CFMRadioMusicStoreHandler* NewL( TInt aResourceId ); + + /** + * Destructor + */ + ~CFMRadioMusicStoreHandler(); + + /** + * Checks wether given command id is for music store functionality. + * + * @param aCommandId command id to check + * @returns ETrue for music store command ids + */ + TBool IsMusicStoreCommandId( TInt aCommandId ); + + /** + * This is called when dynamically initializing menu (ie, from DynInitMenuPaneL). + * + * @param aResourceId Resource id for currently processed menu part + * @param aMenuPane Menu pane which is being handled + * @returns ETrue, if menu pane was handled by this method + */ + TBool InitializeMenuL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + /** + * The value given will be used as a guideline to wether to show or hide the item. + * If music shop feature is not supported and this is called with ETrue it will + * not show the item unless forced state is used. + * + * @param aEnable Whether enable or disable the item + * @param aForce Whether the state is forced, by default it is not + */ + void EnableMusicStore( TBool aEnable, TBool aForce = EFalse ); + + /** + * Launches Music store based on command id. + * + * @param aCommandId Command id for menu item + * @param aArtist Artist of the single + * @param aAlbum Album of the single + * @param aTitle Name of the single + */ + void LaunchMusicStoreL( TInt aCommandId, + const TDesC& aTitle, + const TDesC& aArtist, + const TDesC& aAlbum ); + + /** + * Launches web page based on given string. + * + * @param aWebpage Web site to be launched + */ + void LaunchWebPageL( const TDesC& aWebpage ); + + /** + * Is Nokia Music shop available + * @returns ETrue if available + */ + TBool NokiaMusicStoreAvailable(); + + /** + * Is Operator music store available + * @returns ETrue if available + */ + TBool OperatorMusicStoreAvailable(); + + /** + * Check if the music store functionality has been enabled + * @return state + */ + TBool IsMusicStoreEnabled(); + + /** + * returns name of the operator music store + * @return name + */ + const TDesC& OperatorMusicStoreName() const; + +private: + /** + * Default C++ constuctor + * + * @param aResourceId Menu pane where the music store item/items + * will be added. + */ + CFMRadioMusicStoreHandler( TInt aResourceId ); + + /** + * Second-phase constructor + */ + void ConstructL(); + + /** + * Finds out the type of operator specific music store. + * + * @param aRepository Cenrep from which information is sought. + * @returns Application type if available, otherwise EFMRadioAppNotAvailable + */ + TFMRadioOperatorAppType CheckOperatorMusicStoreTypeL( CRepository& aRepository ); + + /** + * Called for application type specific initialization. + * + * @param aRepository Cenrep from which information is sought. + * @param aAppType Type of implementation to be initialized. + */ + void InitializeParametersL( CRepository& aRepository, TFMRadioOperatorAppType aAppType ); + + /** + * Called when native music store needs initializing. + * + * @param aMusicstoreUid P&S UID for initializing music shop + */ + void InitializeMusicStore( TUid aMusicstoreUid ); + + /** + * Returns the count of active music stores. + * + * @returns Active music store count + */ + TInt MusicStoreCount(); + + /** + * Creates the search string for Nokia Music Shop application + * + * @param aArtistName Artist of the single + * @param aAlbumName Album of the single + * @param aSongName Name of the single + * @returns search string and pushes it to cleanup stack. + */ + HBufC* NokiaMusicShopSearchL( const TDesC& aSongName, + const TDesC& aArtistName, + const TDesC& aAlbumName ); + + /** + * Handles calling appropriate operator music store implementation + * + * @param aSearchString string used for searching + */ + void LaunchOperatorMusicStoreL( const TDesC& aSearchString ); + + /** + * Launches Nokia Music shop application + * + * @param aMusicshopUid UID of the music shop + * @param aSearchString string used for searching + */ + void LaunchMusicShopL( TUid aMusicshopUid, const TDesC& aSearchString ); + + /** + * Converts binary data from cenrep to Uint32 presentation + * @param aBuf binary data from cenrep + * @return resolved Uint32 number + */ + TUint32 Uint32Presentation( const TDesC8& aBuf ); + + /** + * Checks if the application with the given uid is installed to the system + * @param aAppUid Application uid + * @return true if app is found + */ + TBool IsAppInstalledL( const TUid& aAppUid ); + +private: // members + /** + * Resource id to which music store option will be bound. + */ + TInt iResourceId; + + /** + * This is used for with isMenuInitialized so that it is not needed + * to go through all items in case we don't find the music store item. + */ + TInt iFirstKnownResourceId; + + /** + * Saves the state of Music store item + */ + TFMRadioMusicStoreState iState; + + /** + * Nokia Music store UID + */ + TUint32 iMusicStoreUID; + + /** + * Display name for operator music store + */ + RBuf iOperatorMusicStoreName; + + /** + * UID for Operator music store (native app.) + */ + TUint32 iOperatorStoreNativeUID; + + /* + * UID for operator java client app + */ + TUid iOperatorJavaMusicStoreUID; + + /** + * Website where Operator music store can be found + */ + RBuf iOperatorStoreWebsite; + + /** + * Control environment. + */ + CCoeEnv* iCoeEnv; + + /** + * flag for music store application availability + */ + TBool iMusicStoreAppInstalled; + }; + +#endif /*FMRADIOMUSICSTOREHANDLER_H*/