fmradio/fmradio/inc/fmradiomusicstorehandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:55:21 +0300
branchRCL_3
changeset 18 1a6714c53019
parent 7 95ac6b0f7f5b
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* 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 <e32base.h>

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*/