profile_plat/profiles_settings_view_api/inc/CProfileToneHandler.h
branchRCL_3
changeset 23 cd54903d48da
child 27 d0e1a4b40897
--- /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 <f32file.h> // CBase, RFs
+#include <MSSSettingsObserver.h> // MSSSettingsObserver, RSSSettings
+#include <apmstd.h> // KMaxDataTypeLength
+#include <data_caging_path_literals.hrh>
+
+// 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<KMaxDataTypeLength> 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