diff -r b7fa36b488f8 -r cd54903d48da profile_plat/profiles_settings_view_api/inc/CProfileToneHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profile_plat/profiles_settings_view_api/inc/CProfileToneHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,413 @@ +/* +* Copyright (c) 2002-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: A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query if necessary. +* +*/ + + + +#ifndef CPROFILETONEHANDLER_H +#define CPROFILETONEHANDLER_H + +// INCLUDES +#include // CBase, RFs +#include // MSSSettingsObserver, RSSSettings +#include // KMaxDataTypeLength +#include + +// DATA TYPES + +/** +* Enumerations for different tone settings in Profiles. +* Should there become a need e.g. for separately place line 1 and line 2 +* ringing tones, we just add them to these enumerations. +*/ +enum TProfileTones + { + EProfileRingingToneSetting = 1, + EProfileVideoCallToneSetting = 2, + EProfileMessageAlertToneSetting = 3, + EProfileInstantMessageAlertToneSetting = 4, + EProfileEmailAlertToneSetting = 5 + }; + +// FORWARD DECLARATIONS +class DRMCommon; +class CDRMHelper; +class MProfileExtended; +class MProfileEngineExtended; +class MProfilesLocalFeatures; + +// CLASS DECLARATION + +/** +* A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query and other DRM related +* notes if necessary. + +* +* @lib ProfileSettingsView.lib +* @since Series 60 2.6 +*/ +class CProfileToneHandler : public CBase, public MSSSettingsObserver + { + public: // Constructors and destructor + + // Two-phased constructors. + IMPORT_C static CProfileToneHandler* NewL(); + IMPORT_C static CProfileToneHandler* NewLC(); + + // Destructor. + ~CProfileToneHandler(); + + public: // New functions + + /** + * Sets the ringing tone of the current active profile. + * If the file does not exist, leaves with KErrNotFound. + * If the file is of an unsupported type, leaves with KErrNotSupported. + * If the file is an unprotected MP3/AAC in user data area + * and if those are not allowed as ringing or alert tones, + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the active profile is not allowed to be changed + * (e.g. Drive-profile) leaves with KErrAccessDenied. + * If Alternate Line Service is enabled, finds out the line in use + * and sets the ringing tone for that line respectively. + * @since 2.6 + * @param aFileName Full path and filename of the tone to be used + * as the new ringing tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return KErrNone if successful, + * KErrCancel if user answers No to a DRM activation query. + * (See DRMHelper::SetAutomatedPassive) + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + IMPORT_C TInt SetActiveProfileRingingToneL( const TDesC& aFileName ); + + /** + * Sets a ringing or alert tone for a profile. + * If the file does not exist, leaves with KErrNotFound. + * If the file is of an unsupported type, leaves with KErrNotSupported. + * If the file is an unprotected MP3/AAC in user data area + * and if those are not allowed as ringing or alert tones, + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the file is not allowed to be changed + * leaves with KErrAccessDenied. + * If the selected profile is not allowed to be changed + * (e.g. Drive-profile) leaves with KErrAccessDenied. + * In case of a ringing tone, if Alternate Line Service is enabled, + * finds out the line in use and sets the ringing tone for that + * line respectively. + * @since 2.6 + * @param aProfileId The ID of the profile (NOT an index). + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return Returns KErrNone if successful, + * KErrCancel if user answers No to a DRM activation query. + * (See DRMHelper::SetAutomatedPassive) + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + IMPORT_C TInt SetProfileToneL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Sets a ringing or alert tone for a profile and not check the file. + * This function only can be used when user set a ringing or alert tone + * for some profiles and avoid to repeat check the file. + * Notice: the SetProfileToneL should be executed before this function, because + * SetProfileToneL will check the file. + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the file is not allowed to be changed + * leaves with KErrAccessDenied. + * If the selected profile is not allowed to be changed + * (e.g. Drive-profile) leaves with KErrAccessDenied. + * In case of a ringing tone, if Alternate Line Service is enabled, + * finds out the line in use and sets the ringing tone for that + * line respectively. + * @param aProfileId The ID of the profile (NOT an index). + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return Returns KErrNone this function didn't check the file, so return KErrNone. + */ + IMPORT_C TInt SetProfileToneNotCheckL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Sets a ringing or alert tone for all profiles. + * If the file does not exist, leaves with KErrNotFound. + * If the file is of an unsupported type, leaves with KErrNotSupported. + * If the file is an unprotected MP3/AAC in user data area + * and if those are not allowed as ringing or alert tones, + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the file is not allowed to be changed + * (e.g. Drive-profile) method ignores profile changes + * and selects next profile. + * In case of a ringing tone, if Alternate Line Service is enabled, + * finds out the line in use and sets the ringing tone for that + * line respectively. + * Does not affect on user created profiles except if the active profile + * is user created of which the ringing or alert tone is also changed. + * @since 2.6 + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return Returns KErrNone if successful, + * KErrCancel if user answers No to a DRM activation query. + * (See DRMHelper::SetAutomatedPassive) + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + IMPORT_C TInt SetToneForAllProfilesL( TProfileTones aToneSetting, + const TDesC& aFileName ); + + public: // From base classes + + /** + * From MSSSettings + */ + void PhoneSettingChanged( TSSSettingsSetting aSetting, TInt aNewValue ); + + protected: // New functions + + /** + * Stores the settings to Profiles Engine and adds the file to automated + * content list and removes the old file from automated content list. + * Do not call until the file is checked using CheckFileL. + * @param aProfileId The ID of the profile (NOT an index). + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. + */ + void DoSetProfileToneL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Sets the tone to an MProfileExtended instance. + * @param aProfile The MProfileExtended instance. + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName The tone file name. + */ + void SetToneL( MProfileExtended& aProfile, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Reads a tone setting from an MProfileExtended instance. + * @param aProfile The MProfileExtended instance. + * @param aToneSetting Identifies the tone which is read. + * @return Returns the tone file name. + */ + const TDesC& ReadToneL( const MProfileExtended& aProfile, + TProfileTones aToneSetting ) const; + + /** + * Checks that the given tone file exists and that it is + * a legal file to be used as a ringing or alert tone. + * @since 2.6 + * @param aFileName Full path and filename of the file to be checked. + * @return KErrNone if the file can be used as a ringing or alert tone, + * KErrNotFound if the file cannot be found, + * KErrNotSupported if a file is of an unsupported type or + * KErrPermissionDenied if the file is not allowed + * to be used as a ringing or alert tone. + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + TInt CheckFileL( const TDesC& aFileName ); + + /** + * Checks if a DRM protected file can be used as a ringing or alert tone. + * @since 2.6 + * @param aFileName Full path and filename of the file to be checked. + * @return KErrNone if the file can be used as a ringing or alert tone or + * KErrGeneral if DRM rights are insufficient. + */ + TInt CheckProtectedFileL( const TDesC& aFileName ); + + /** + * Tells whether a file can be registered as automated content or not. + * If DRM is not supported, returns always EFalse. + * @param aFileName File to be registered as automated content. + * @return Returns ETrue if aFileName can be set as automated content. + * Returns EFalse if can't or DRM is not supported. + */ + TBool CanSetAutomated( const TDesC& aFileName ); + + /** + * Asks user if he/she wants to activate unactivated content. + * Shows a query. Does nothing if DRM is not supported. + * @param aFileName File to be registered as automated content. + * @return Returns KErrCancel if user cancels the query. + */ + TInt AskAutomated( const TDesC& aFileName ); + + /** + * Registers a file to automated content list without any queries. + * Errors are omitted. Does nothing if DRM is not supported. + * @param aToneSetting The type of tone (e.g. ringing tone, SMS tone) to + * be registered as automated content. + * @param aFileName File to be registered as automated content. + * @return KErrNone or a system-wide error code. + */ + TInt SetAutomated( TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Removes a file from automated content list. + * Errors are omitted. Does nothing if DRM is not supported. + * @param aFileName File to be removed from automated content list. + */ + void RemoveAutomated( const TDesC& aFileName ); + + /** + * Returns data type of a file. + * @param aFileName Full path and filename. + * @return Returns the data type of the file. + */ + TBuf DataTypeL( const TDesC& aFileName ) const; + + /** + * Returns whether a file is protected content or not. + * Returns always EFalse if DRM is not supported. + * @param aFileName The file name. + * @return Returns whether the file is protected content or not. + */ + TBool IsProtected( const TDesC& aFileName ) const; + + /** + * Returns whether a file is protected content or not. + * Returns always EFalse if DRM is not supported. + * @param aFileName The file name. + * @return Returns whether the file is protected content or not. + */ + TBool IsProtectedL( const TDesC& aFileName ) const; + + /** + * Displays an error note. + * @param aResourceId Resource ID to a TBUF resource. + */ + void ShowErrorNoteL( TInt aResourceId ) const; + + /** + * Returns info whether given filetype is allowed as ringingtone + * @param aDataType Tone MIME type + * @return ETrue if tone is allowed to be selected + */ + TBool AllowSelect( const TDesC& aDataType ) const; + + /** + * Checks the result of CheckFileL() and leaves if needed. Also checks + * if the file is protected and can be set as automated content. + * @param aResult result of the CheckFileL() call made before this. + * @param aFileName the name of the file to be checked for protection + * and if it is settable as automated content. + * @return KErrNone, if ok, otherwise a system-wide error code. + */ + TInt CheckResultAndProtectionL( TInt aResult, + const TDesC& aFileName ); + /** + * Checks ringing tone file size. + * @param aFile file to check. + * @param aSizeLimitKB maximum allowed file size in KB. + * @return KErrNone, if ok. + * KErrTooBig, if configurable file size limit exceeded. + */ + TInt CheckToneFileSizeL( const TDesC& aFile, TInt aSizeLimitKB ); + + /** + * Reads maximimum ringing tone file size in KB from cenrep. + */ + void GetMaxToneFileSizeL(); + + /** + * Displays error note about exceeded tone file size. + * @param aSizeLimitKB file size limit. + */ + void ShowSizeErrorNoteL( TInt aSizeLimitKB ); + + private: + + /// Default constructor + CProfileToneHandler(); + + /// 2nd phase constructor + void ConstructL(); + + /// Constructor for the DRM objects + void DrmConstructL(); + + /// Destructor for the DRM objects + void ReleaseDrm(); + + /// Functions related to WMDRM protection check + TBool IsFileWMDRMProtectedL( const TDesC& aFileName ); + + /// Called by SetAutomated + TInt SetAutomatedL( TProfileTones aToneSetting, const TDesC& aFileName ); + + private: // Data + + /// Owns: DRM Helper client. + CDRMHelper* iDrmHelper; + + /// Owns: DRM Common client + DRMCommon* iDrmCommon; + + /// Owns: Profile Engine Extended interface. + MProfileEngineExtended* iProfileEngine; + + /// Owns: Profiles local features. + MProfilesLocalFeatures* iProfilesFeatures; + + /// Supplementary services client for reading Alternate Line Service. + RSSSettings iSSSettings; + + /// File Server client. + RFs iFs; + + /// Alternate Line Setting value. + TInt iAlternateLineSetting; + + /// Maximum allowed tone file size in kilo bytes. + TInt iMaxSizeKB; + + }; + +#endif // CPROFILETONEHANDLER_H + +// End of File