diff -r 000000000000 -r ff3acec5bc43 musicplayer_plat/mpx_music_player_app_api/tsrc/ui_mpxmusicplayertest/inc/mpxcommonuihelper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/musicplayer_plat/mpx_music_player_app_api/tsrc/ui_mpxmusicplayertest/inc/mpxcommonuihelper.h Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,527 @@ +/* +* Copyright (c) 2006 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: Definition of helper utility for Common UI +* +*/ + + + +#ifndef C_CMPXCOMMONUIHELPER_H +#define C_CMPXCOMMONUIHELPER_H + +#ifdef __ENABLE_MSK +#include +#endif // __ENABLE_MSK +#include +#include +#include + +#include + +// FORWARD DECLARATIONS +class CMPXMedia; +class CMPXDrmUiHelper; +class MProgressDialogCallback; +class CAknWaitDialog; +class MMPXCollectionUtility; +class CEikButtonGroupContainer; + +// CONSTANTS + +// CLASS DECLARATION + +/** + * Common UI helper utility class. + * + * @lib mpxcommonui.lib + * @since S60 3.2.3 + */ +NONSHARABLE_CLASS( CMPXCommonUiHelper ) : public CBase, + public MMPXCHelperObserver + { +public: + + /** Duration display mode */ + enum TMPXDuratDisplayMode + { + EMPXDuratAuto = 0, + EMPXDuratHMS + }; + + /** + * Two-phased constructor. + * + * @since S60 3.2.3 + * @aCollectionUtility Collection utility to use for this helper + * @return Pointer to newly created object. + */ + IMPORT_C static CMPXCommonUiHelper* NewL(MMPXCollectionUtility* aCollectionUtility = NULL); + + /** + * Destructor. + */ + virtual ~CMPXCommonUiHelper(); + + /** + * Check if the host application is messaging or browser + * @since S60 3.2.3 + * @return ETrue if host is messaging or browser, EFalse otherwise + */ + IMPORT_C TBool IsHostMessagingBrowserL(); + + /** + * Check if the host application is the Podcasting Application + * @since S60 3.2.3 + * @return ETrue if host is Podcasting Application, EFalse otherwise + */ + IMPORT_C TBool IsHostPodcastingAppL(); + + /** + * Check if the host application is messaging + * @since S60 3.2.3 + * @return ETrue if host is messaging, EFalse otherwise + */ + IMPORT_C TBool IsHostMessagingL(); + + /** + * Check if the host application is browser + * @since S60 3.2.3 + * @return ETrue if host is browser, EFalse otherwise + */ + IMPORT_C TBool IsHostBrowserL(); + + /** + * Convert to displayable duration + * + * @since S60 3.2.3 + * @param aduration Duration in seconds + * @param aMode time display mode + * @return A heap descriptor that contains displayable duration + * (ownership transferred). Caller must destroy this object + * after use. + */ + IMPORT_C HBufC* DisplayableDurationL( + TInt64 aDuration, + TMPXDuratDisplayMode aMode = EMPXDuratAuto ); + + /** + * Convert to displayable duration in text format + * + * @since S60 3.2.3 + * @param aduration Duration in seconds + * @return A heap descriptor that contains displayable duration + * (ownership transferred). Caller must destroy this object + * after use. + */ + IMPORT_C HBufC* DisplayableDurationInTextL( + TInt64 aDuration ); + + /** + * Set current file as ringing tone. + * + * @since S60 3.2.3 + * @param aMedia Media properties of the current track. the media must + * contain the following attributes: + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralUri ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralTitle ) + * TMPXAttribute( KMPXMediaIdDrm, EMPXMediaDrmProtected ) + * TMPXAttribute( KMPXMediaIdDrm, EMPXMediaDrmRightsStatus ) + * TMPXAttribute( KMPXMediaIdDrm, EMPXMediaDrmCanSetAutomated ) + * @param aSetToAllProfiles ETrue if set ringtone to all profiles. + * EFalse if set ringtone to active profile. + * @param aShowQuery If ETrue, a confirmation query is shown before + * setting ringtone. This setting will only apply if + * aSetToAllProfiles is set to ETrue. No effect if + * aSetToAllProfiles is set to EFalse. + */ + IMPORT_C void DoSetAsRingingToneL( + const CMPXMedia& aMedia, + TBool aSetToAllProfiles, + TBool aShowQuery = EFalse ); + + /** + * Check if current profile mode is offline mode. + * + * @since S60 3.2.3 + * @return ETrue if in Offline mode. Otherwise, EFalse. + */ + IMPORT_C TBool IsProfileOfflineModeL(); + + /* + * Returns path of the default drive used to store playlist, attachments, + * downloads and ringtones. + * @return a path of the default drive + * @since S60 3.2.3 + */ + IMPORT_C HBufC* DefaultDriveLC(); + + /* + * Returns a path of the next available drive used for saving playlists, ringtones, + * downloads and attachments. The order of priority is internal mass store, + * MMC, then phone memory. + * + * @since S60 3.2.3 + * @param aSize + */ + IMPORT_C HBufC* AvailableDriveLC( TInt aSize ); + + /** + * Display information note + * + * @since S60 3.2.3 + * @param aResourceId Resource id of the text string + */ + IMPORT_C void DisplayInfoNoteL( TInt aResourceId ); + + /** + * Display information note + * + * @since S60 3.2.3 + * @param aText Text to be shown on the note + */ + IMPORT_C void DisplayInfoNoteL( const TDesC& aText ); + + /** + * Display confirmation note + * + * @since S60 3.2.3 + * @param aResourceId Resource id of the text string + */ + IMPORT_C void DisplayConfirmNoteL( TInt aResourceId ); + + /** + * Display confirmation note + * + * @since S60 3.2.3 + * @param aText Text to be shown on the note + */ + IMPORT_C void DisplayConfirmNoteL( const TDesC& aText ); + +// Cover UI start +//#ifdef __COVER_DISPLAY + void DisplayConfirmNoteL( const TDesC& aText, TInt aResourceId ); +//#endif // __COVER_DISPLAY +// Cover UI end + + /** + * Convert a value from bytes to kB/MB/GB. + * + * @since S60 3.2.3 + * @param aByte Number of bytes + * @param ETrue to append " free" at the end of the string + */ + IMPORT_C HBufC* UnitConversionL( TInt64 aByte, TBool aFree = EFalse ); + + /** + * Finds all user playlists in the given collection + * + * @since S60 3.2.3 + */ + IMPORT_C CMPXMedia* FindPlaylistsL(); + + /** + * Add to saved playlist + * + * @since S60 3.2.3 + * @param aPlaylists media containing a media array + * each entry in the array must contain the following attributes + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralTitle ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralId ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralDrive ) + * @param aTracks Tracks to be add to the playlist + * media containing a media array + * must contain at least 1 element + * each entry in the arry must contain the following attributes + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralType ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralCategory ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralId ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralTitle ) + * @param aObserver pointer to callback + * @param aCallback call back for wait dialog + * + * @return ETrue if the user accepts the save dialog, EFalse otherwise + */ + IMPORT_C TBool AddToSavedPlaylistL( + const CMPXMedia& aPlaylists, const CMPXMedia& aTracks, + MMPXCHelperObserver* aObserver, + MProgressDialogCallback* aCallback ); + + /** + * Create new playlist + * + * @since S60 3.2.3 + * @param aTracks Tracks to be add to the playlist + * media containing a media array + * can be a valid array with 0 length + * each entry in the arry must contain the following attributes + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralType ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralCategory ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralId ) + * TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralTitle ) + * @param aObserver pointer to callback + * @param aCallback call back for wait dialog + * + * @return ETrue if user accepts the query, EFalse otherwise + */ + IMPORT_C TBool CreatePlaylistL( const CMPXMedia& aTracks, + MMPXCHelperObserver* aObserver, + MProgressDialogCallback* aCallback ); + + /** + * Launches rename dialog + * + * @since S60 3.2.3 + * @param aOldName original name, with the extension (e.g. a.mp3) + * @param aNewName on return, this will be populated with the new name + * inputed by the user + * @param aPath the path to the file, without the file name (e.g. c:\\data\\) + * @return generic return code from AknDialog + */ + IMPORT_C TInt LaunchRenameDialogL( + const TDesC& aOldName, + TDes& aNewName, + const TDesC& aPath ); + + /** + * Shows wait note + * + * @since S60 3.2.3 + * @param aText text to display + * @param aCBAId button group ID + * @param aVisibilityDelayOff If set ETrue the dialog will be visible + * immediality. Use only when the length of + * the process is ALWAYS over 1.5 seconds. + * @param aCallback call back + * @param aResId resource Id for the WaitNote, default is R_MPX_GENERIC_WAIT_NOTE + */ + IMPORT_C void ShowWaitNoteL( TDesC& aText, TInt aCBAId, + TBool aVisibilityDelayOff, MProgressDialogCallback* aCallback, TInt aResId = R_MPX_GENERIC_WAIT_NOTE ); + + /** + * Dismiss wait note + */ + IMPORT_C void DismissWaitNoteL(); + + /** + * Handles displaying the error message for given error code + * according to the media object provided + * + * @since S60 3.2.3 + * @param aError Error code + * @param aMedia MPXMedia object + * @param aFile Handle to file + * @return KErrNone if no error, or else if a dialog is displayed will + * return the Button ID used to dismiss dialog. + */ + IMPORT_C TInt HandleErrorL( TInt aError, + const CMPXMedia* aMedia=NULL, + RFile* aFile=NULL ); + + /** + * Adds given resource text as MSK to CBA. + * + * @since S60 3.2.3 + * @param aCba a button group container + * @param aResourceId middle softkey label. + * @param aCommandId command that should be performed when MSK + * is pressed. + */ + IMPORT_C void SetMiddleSoftKeyLabelL( + CEikButtonGroupContainer& aCba, + TInt aResourceId, + TInt aCommandId ); + + /** + * Removes current MSK label + * + * @since S60 3.2.3 + * @param aCba a button group container + */ + IMPORT_C void RemoveMiddleSoftKeyLabel( + CEikButtonGroupContainer& aCba ); + + /** + * Adds given resource icon as MSK to CBA. + * + * @since S60 3.2.3 + * @param aCba a button group container + * @param aBitmap a bitmap + * @param aMask a bitmap mask + */ + IMPORT_C void SetMiddleSoftKeyIconL( + CEikButtonGroupContainer& aCba, + CFbsBitmap* aBitmap, + CFbsBitmap* aMask ); + + /** + * Generate the next available title from the given title for the category. + * The generated title is unique within the category regardless of the + * media type within the category and its location. + * e.g. c:\data\playlists\Playlist.m3u exists in the collection, the next + * available title for the playlist category will be Playlist(01) regardless + * if the title is going to be used for a playlist located in e:\data\playlists + * or if it's a xml playlist file. + * + * @since S60 3.2.3 + * @param aCategory specifies the category for the title + * @param aBaseTitle specifies the base title for new title generation + * @return the next available title in the category in "BaseTitle(number)" + * format where number is the lowest available number. + */ + IMPORT_C HBufC* GenerateTitleL( + TMPXGeneralCategory aCategory, + const TDesC& aBaseTitle ); + + /** + * Checks if Exit option should be hidden + * + * @since S60 3.2.3 + * @return ETrue if exit option should be hidden, EFalse otherwise + */ + IMPORT_C TBool ExitOptionHiddenL(); + + /** + * Sets standalone mode process ID + * + * @since S60 3.2.3 + * @param aPId Process ID for standalone mode, 0 to reset + * @return ETrue if successful, EFalse otherwise + */ + IMPORT_C static TBool SetStandAloneModePId( TInt64 aPId ); + + /** + * Gets stand alone mode's process id + * + * @since S60 3.2.3 + * @return Stand alone mode's process ID, or 0 if not found + */ + IMPORT_C static TInt64 StandAloneModePId(); + + + /** + * Checks if the application with the provided group id is in foreground + * This method is required because AppUi()->IsForeground() does not work + * properly when the screen saver is active + * + * @since S60 3.2.3 + * @param aWindowGroupId application group identifier + * @return ETrue if the application is in foreground, EFalse otherwise + */ + IMPORT_C TBool IsForegroundApplication(TInt aWindowGroupId); + + /** + * Get the Drive Number for the MMC card + * + * @since S60 3.2.3 + * @return Drive Number as defined in TDriveNumber or error code + */ + IMPORT_C static TInt MMCDriveNumber(); + + + /** + * Cancel all subsequent operations scheduled by CollectionUiHelper + * Currently, this method is only used to cancel adding songs incrementally + * to the playlist (user clicks on Cancel on the wait note) + */ + IMPORT_C void CancelCollectionOperation(); + + +private: + + /** + * C++ default constructor. + * + * @since S60 3.2.3 + * @param aCollectionUtility Collection utility to use for this helper + */ + CMPXCommonUiHelper(MMPXCollectionUtility* aCollectionUtility); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Check if memory card is present and writable. + * + * @since S60 3.2.3 + * @param aDrive If return is ETrue, aDrive contains the drive letter + * @return ETrue if memory card is present and writable. + */ + TBool IsMemoryCardWritable( TChar& aDrive ); + + /** + * Show playlist creation queries: memory selection and name query. + * + * @since S60 3.2.3 + * @param aPath Descriptor to receive the full path and + * name of the playlist file + */ + TBool PlaylistCreationQueriesL( TDes& aPath ); + + /** + * Get next available playlist full pathname based on the information passed. + * + * @since S60 3.2.3 + * @param aBuf Buffer contains the file path and initial playlist name (optional). + * This buffer must be big enough to hold all texts. + * @return KErrNone if everything ok. + */ + TInt GetNextPlaylistNameL( TDes& aBuf ); + + /** + * Finds all medias in the specified category. Matching medias should + * return the specified attributes + * + * @since S60 3.2.3 + * @param aAttrs attributes to return for the matching media(s) + * @return matching media(s) + */ + CMPXMedia* FindAllL(TMPXGeneralCategory aCategory, const TArray& aAttrs); + + /** + * From MMPXCHelperObserver + * Handles the completion of any collection helper event. + * + * @since S60 3.2.3 + * @param aOperation, operation completed + * @param aErr. the error code + * @param aArgument Argument returned from the operation + */ + void HandleOperationCompleteL( TCHelperOperation aOperation, + TInt aErr, + void* aArgument ); + + TBool PlaylistCreateNameExistL( TDes& aName, const TParseBase& aParse ); +private: // Data + + TInt iResourceOffset; // must be freed + CMPXDrmUiHelper* iMpxDrmHelper; // owned + MMPXCollectionUiHelper* iCollectionUiHelper; + MMPXCHelperObserver* iAddObserver; + CAknWaitDialog* iWaitDialog; + MMPXCollectionUtility* iCollectionUtility; // not owned + TInt iAppUiResourceOffset; + +// Cover UI start +//#ifdef __COVER_DISPLAY + TBool iCoverDisplay; +//#endif +// Cover UI end + + }; + +#endif // C_CMPXCOMMONUIHELPER_H + +// End of File