--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/ProfileEngine/WrapperSrc/CProEngToneHandler.h Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,253 @@
+/*
+* 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 class for making correctness and DRM checkups to the
+* tones to be used as alert tones.
+*
+*/
+
+
+
+#ifndef CPROENGTONEHANDLER_H
+#define CPROENGTONEHANDLER_H
+
+// INCLUDES
+#include <f32file.h> // CBase, RFs
+#include <apmstd.h> // KMaxDataTypeLength
+#include <data_caging_path_literals.hrh>
+#include "ProfileEng.hrh" // TProfileSettingId
+
+// FORWARD DECLARATIONS
+class DRMCommon;
+class CDRMHelper;
+class CProEngMediaVariation;
+
+// CLASS DECLARATION
+
+/**
+* A helper class for making correctness and DRM checkups to the
+* tones to be used as alert tones.
+* 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 ProfileEngine.lib
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CProEngToneHandler ) : public CBase
+ {
+ public: // Constructors and destructor
+
+ // Two-phased constructors.
+ static CProEngToneHandler* NewL();
+ static CProEngToneHandler* NewLC();
+
+ // Destructor.
+ ~CProEngToneHandler();
+
+ public: // New functions
+
+ /**
+ * Checks that the given tone file exists and that it is
+ * a legal file to be used as a ringing or alert tone.
+ * @since 3.1
+ * @param aFileName Full path and filename of the file to be checked.
+ * @param aToneType Type of tone to check, see: ProfileEng.hrh
+ * @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.
+ * KErrTooBig if file size exceeded file size limit.
+ */
+ TInt CheckToneFileL( const TDesC& aFileName, TInt aToneType );
+
+ /**
+ * Adds the file to automated content list and removes the old file
+ * from automated content list.
+ * Called by CProEngProfileImpl::CommitChangeL after the changes has
+ * been committed in the underlying Profiles Engine.
+ * @since 3.1
+ * @param aSettingId setting id which identifies which tone (ringing
+ * tone, sms tone etc.) this automated content
+ * handling operation concerns.
+ * @param aFileName Full path and filename of the tone to be used
+ * as the new ringing or alert tone.
+ * @param aOldFileName Full path and filename of the previous tone used
+ * as the ringing or alert tone.
+ * @return KErrNone, if succesful, otherwise a system-wide error code.
+ */
+ TInt HandleAutomatedContent( TProfileSettingId aSettingId,
+ const TDesC& aFileName,
+ const TDesC& aOldFileName);
+
+ protected: // New functions
+
+ /**
+ * Helper function for CheckToneFileL. This function does most of the
+ * actual checking.
+ * @since 3.1
+ * @param aFileName Full path and filename of the file to be checked.
+ * @param aToneType Type of tone to check, see: ProfileEng.hrh
+ * @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.
+ * KErrTooBig if file size exceeded file size limit.
+ */
+ TInt DoCheckToneFileL( const TDesC& aFileName, TInt aToneType );
+
+ /**
+ * Checks if a DRM protected file can be used as a ringing or alert tone.
+ * @since 3.1
+ * @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.
+ * @since 3.1
+ * @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.
+ * @since 3.1
+ * @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.
+ * @since 3.1
+ * @param aSettingId setting id which identifies which tone (ringing
+ * tone, sms tone etc.) this automated content
+ * setting operation concerns.
+ * @param aFileName File to be registered as automated content.
+ * @return KErrNone, if succesful, otherwise a system-wide error code.
+ */
+ TInt SetAutomated( TProfileSettingId aSettingId,
+ const TDesC& aFileName );
+
+ /**
+ * Removes a file from automated content list.
+ * Errors are omitted. Does nothing if DRM is not supported.
+ * @since 3.1
+ * @param aFileName File to be removed from automated content list.
+ */
+ void RemoveAutomated( const TDesC& aFileName );
+
+ /**
+ * Returns whether a file is protected content or not.
+ * Returns always EFalse if DRM is not supported.
+ * @since 3.1
+ * @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.
+ * @since 3.1
+ * @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.
+ * @since 3.1
+ * @param aResourceId Resource ID to a TBUF resource.
+ */
+ void ShowErrorNoteL( TInt aResourceId );
+
+ /**
+ * Checks if tone file's size is larger than the size limit.
+ * @since 3.1
+ * @param aFileName The path to the file.
+ * @return KErrNone if the file can be used as a ringing tone.
+ * KErrTooBig if the file size limit is exceeded.
+ */
+ TInt CheckFileSizeLimit( const TDesC& aFileName ) const;
+ /**
+ * Checks if tone file's size is larger than the size limit.
+ * @since 3.1
+ * @return KErrNone if the file can be used as a ringing tone.
+ * KErrTooBig if the file size limit is exceeded.
+ */
+ TInt CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB ) const;
+ /**
+ * Reads tone file size limit from cenrep.
+ * @since 3.1
+ * @return leaves on error
+ */
+ void GetMaxToneFileSizeL( TInt& aMaxSizeKB ) const;
+
+ private:
+
+ /// Default constructor
+ CProEngToneHandler();
+
+ /// 2nd phase constructor
+ void ConstructL();
+
+ /// Constructor for the DRM objects
+ void DrmConstructL();
+
+ /// Destructor for the DRM objects
+ void ReleaseDrm();
+
+ /// Called by SetAutomated
+ TInt SetAutomatedL( TProfileSettingId aSettingId,
+ const TDesC& aFileName );
+
+ private: // Data
+
+ /// Owns: DRM Helper client.
+ CDRMHelper* iDrmHelper;
+
+ /// Owns: DRM Common client
+ DRMCommon* iDrmCommon;
+
+ /// File Server client.
+ RFs iFs;
+
+ /// Mime-type handling:
+ CProEngMediaVariation* iMediaVariation;
+
+ /// voice call file size limit
+ TInt iToneFileSizeLimitKB;
+ };
+
+#endif // CPROENGTONEHANDLER_H
+
+// End of File