--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/musicplayer_plat/mpx_music_player_app_api/inc/mpxcommonuihelper.h Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,525 @@
+/*
+* 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 <eikbtgpc.h>
+#endif // __ENABLE_MSK
+#include <mpxcollectionuihelperobserver.h>
+#include <mpxcollectionuihelper.h>
+#include <mpxcommonui.rsg>
+
+// 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<TMPXAttribute>& 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