/*
* Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
* which accompanies this distribution, and is available
* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Class to show miscellaneous DRM related error notes and 
*                details about rights 
*
*/



#ifndef __DRMHELPER_H__
#define __DRMHELPER_H__

//  INCLUDES
#include <e32base.h>
#include <ConeResLoader.h>
#include <apparc.h>
#include <rdrmhelper.h>
#include <aknserverapp.h>
#include <caf/caf.h>
#include <caf/content.h>
#include <caf/data.h>
#include <eikdialg.h>

using namespace ContentAccess;

// CONSTANTS
const TInt KDRMHelperDefaultCountThreshold = 3;
const TInt KDRMHelperDefaultTimeThreshold = 7;
const TInt KDRMHelperDefaultPercentageThreshold = 10;
const TInt KDRMHelperNoteMaxSize ( 256 );  

// MACROS

// DATA TYPES
enum TDRMHelperPreviewMediaType
        {
        EPreviewTypeAudio,
        EPreviewTypeVideo
        };
// FUNCTION PROTOTYPES

// FORWARD DECLARATIONS
class DRMCommon;
class CDRMRightsConstraints;
class CDRMRights;
class CStringResourceReader;
class TDataType;
class CCoeEnv;
class CConsumeData;
class CDRMPermission;
class CDRMConstraint;
class CAknGlobalNote;
class CAknWaitDialog;
class CDRMHelperInfoNoteWrapper;
class CSchemeHandler;
class CMediatorEventProvider;

// CLASS DECLARATION

/**
*  Helper class for wrapping CDRMRightsConstraints.
*
*  @lib drmhelper.lib
*  @since Series 60 2.1
*/
class CDRMHelperRightsConstraints : public CBase
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        static CDRMHelperRightsConstraints* NewL( 
            CDRMRightsConstraints* aConstraints );
        static CDRMHelperRightsConstraints* NewLC( 
            CDRMRightsConstraints* aConstraints );
        
        /**
        * Destructor.
        */
        IMPORT_C ~CDRMHelperRightsConstraints();

    public: // New functions

        /**
        * checks if the object contains any restrictions 
        * or if usage is unconstrained.        
        * @return ETrue if usage is unconstrained
        */
        IMPORT_C TBool FullRights();

        /**
        * checks if the object contains only preview rights 
        * @return ETrue if object contains only preview rights
        */
        IMPORT_C TBool IsPreview();

        /**
        * Gets number of counts left and number of original counts.
        * Leaves with KErrNotFound if object doesn't have count based rights.
        * @param aCounter: (out) counts left
        * @param aOriginalCounter: (out) number of counts when stored to 
        *                          rights db
        * @return -
        */
        IMPORT_C void GetCountersL( TUint32& aCounter, 
            TUint32& aOriginalCounter );

        /**
        * Gets start time of time based rights.
        * Leaves with KErrNotFound if object doesn't have time based rights.
        * @param aStartTime: (out) start time
        * @return -
        */
        IMPORT_C void GetStartTimeL( TTime& aStartTime );

        /**
        * Gets end time of time based rights.
        * Leaves with KErrNotFound if object doesn't have time based rights.
        * @param aEndTime: (out) start time
        * @return -
        */
        IMPORT_C void GetEndTimeL( TTime& aEndTime );

        /**
        * Gets interval time constraint.
        * Leaves with KErrNotFound if object doesn't have interval constraint.
        * @param aInterval: (out) interval
        * @return -
        */
        IMPORT_C void GetIntervalL( TTimeIntervalSeconds& aInterval );

        /**
        * Gets start time of activated interval constraint.
        * Leaves with KErrNotFound if interval has not been started yet.
        * @param aStartTime: (out) start time of activated interval
        * @return -
        */

        IMPORT_C void GetIntervalStartL( TTime& aStartTime );
        /**
        * Gets number of counts left, number of original counts and timer 
        * value for timed-count constraint.
        * Leaves with KErrNotFound if object doesn't have timed-count 
        * constraint.
        * @param aCounter: (out) counts left
        * @param aOriginalCounter: Invalid, value returned same as aCounter
        * @param aTimer: (out) timer value
        * @return -
        * @since Series 60 3.0
        */
        IMPORT_C void GetTimedCountL( TUint32& aCounter, 
            TUint32& aOriginalCounter, TTimeIntervalSeconds& aTimer );

        /**
        * Gets accumulated time left.
        * Leaves with KErrNotFound if object doesn't have accumulated time 
        * constraint.
        * @param aAccumulatedTime: (out) accumulated time left
        * @return -
        * @since Series 60 3.0
        */
        IMPORT_C void GetAccumulatedTimeL( TTimeIntervalSeconds& aAccumulatedTime );

    private:

        /**
        * C++ default constructor.
        */
        CDRMHelperRightsConstraints( CDRMRightsConstraints* aConstrains );

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

    private:    // Data
        // pointer to CDRMRightsConstraints object
        CDRMRightsConstraints* iConstraints;
    };


/**
*  Handles some error situations DRM-aware applications may encounter.
*
*  @lib drmhelper.lib
*  @since Series 60 2.1
*/
class CDRMHelper : public CBase, public MAknServerAppExitObserver
    {
    public:     // Data
    
    enum TDRMHelperNotificationID
        {
        ETActivateTextId = 1,
        ETCountBasedErrorTextId = 2 ,
        ETCountUsageReduceId = 3,
        ETCountUsageReduceMediaId = 4
        };

    enum TDRMHelperConsumeAction
        {
        EStart,
        EFinish,
        EPause, 
        EContinue
        };

    enum TDRMHelperOMALevel
        {
        EOMA_None, 
        EOMA_1_0,
        EOMA_2_0
        };
        
	enum TDRMHelperPreviewType 
		{
		ENoPreview, 
		EEmbeddedPreview,
		EPreviewRights
		};

    enum TDRMHelperAutomatedType
        {
        EAutomatedTypeRingingTone,
        EAutomatedTypeMessageAlert,
        EAutomatedTypeEmailAlert,
        EAutomatedTypeIMAlert,
        EAutomatedTypeCalendarAlarm,
        EAutomatedTypeScreenSaver,
        EAutomatedTypeWallpaper, 
        EAutomatedTypeTheme,
        EAutomatedTypeClockAlarm, 
        EAutomatedTypeOther = KMaxTUint8
        };

    enum TDRMHelperDRMMethods
        {
        EForwardLock = 0x0001, 
        ECombinedDelivery = 0x0002, 
        ESeparateDelivery = 0x0004, 
        ESuperDistribution = 0x0008
        };

    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        IMPORT_C static CDRMHelper* NewL( CCoeEnv& aCoeEnv );
        IMPORT_C static CDRMHelper* NewLC( CCoeEnv& aCoeEnv );

        /**
        * Two-phased constructor.
        * @since Series 60 2.6
        */
        IMPORT_C static CDRMHelper* NewL();
        IMPORT_C static CDRMHelper* NewLC();
        
        /**
        * Two-phased constructor.
        * @since Series 60 3.0
        */
        IMPORT_C static CDRMHelper* NewL( CCoeEnv& aCoeEnv, RFs& aFs );
        IMPORT_C static CDRMHelper* NewLC( CCoeEnv& aCoeEnv, RFs& aFs );

        /**
        * Two-phased constructor.
        * @since Series 60 3.0
        */
        IMPORT_C static CDRMHelper* NewL( RFs& aFs );
        IMPORT_C static CDRMHelper* NewLC( RFs& aFs );
        
        /**
        * Destructor.
        */
        IMPORT_C ~CDRMHelper();

       
    public: 

        /**
        * Displays appropriate error note depending on error code.
        * @param aError: error code returned by DRM engine
        * @param aURI: URI of the file
        * @return 
        * - Button code, if user selected "buy rights" or "launch rights 
        *   manager" in query.
        * - 0 if user selected "No", "Back" or "Cancel" (or whatever which 
        *   just dismiss the query)
        * - 0 if just a simple error note is displayed
        */
        IMPORT_C TInt HandleErrorL( TInt aError, 
            const TDesC8& aURI );


        /**
        * Displays:
        * Handles error situations 'rights expired', 'no rights' and
        * 'rights database corrupted'.
        * @param aError: error code returned by DRM engine
        * @param aFileName: full path to file
        * @return 
        * - Button code, if user selected "buy rights" or "launch rights 
        *   manager" in query.
        * - 0 if user selected "No", "Back" or "Cancel" (or whatever which 
        *   just dismiss the query)
        * - 0 if just a simple error note is displayed
        */
        IMPORT_C TInt HandleErrorL( TInt aError, 
            const TDesC& aFileName );


        /**
        * Displays:
        * Handles error situations 'rights expired', 'no rights' and
        * 'rights database corrupted'.
        * @param aError: error code returned by DRM engine
        * @param aFileHandle: file handle to the file
        * @return 
        * - Button code, if user selected "buy rights" or "launch rights 
        *   manager" in query.
        * - 0 if user selected "No", "Back" or "Cancel" (or anything that 
        *   just dismisses the query)
        * - 0 if just a simple error note is displayed
        * @since  3.0
        */
        IMPORT_C TInt HandleErrorL( TInt aError, 
            RFile& aFileHandle );

       /**
        * Handles DRM-specific error situations. Should be called instead of 
        * HandleErrorL if user should be asked to play embedded preview or get 
        * preview/silent rights if there is no valid rights and either embedded preview or
        * preview rights are available.
        * @param aError: error code to be handled.
        * @param aFile: handle of file for which error was received.
        * @param aEmbeddedPreviewUri: contain URI of embedded preview part 
        * upon return if caller should play the embedded preview. If embedded
        * preview should not be played this is NULL. Must be freed by caller.
        * @return KErrNone if the content is now usable (e.g. silent rights or preview rights were gotten). If
        *                  the return code is KErrNone and the aEmbeddedPreviewUri parameter is not NULL,
        *                  the player should use embedded preview
        *         KErrCancel if the user cancelled any of the actions within the function
        *         KErrCANoRights and KErrCANoPermission if after the function call, still no rights exist
        *         KErrCompletion if the user did launch the browser, but it is not clear whether the content
        *                  was activated
        * @since S60 3.1
        */
        IMPORT_C TInt HandleErrorOrPreviewL( 
            TInt aError, 
            RFile& aFile, 
            HBufC8*& aEmbeddedPreviewUri );

       /**
        * Handles DRM specific error situations. Should be called instead of 
        * HandleErrorL if user should be asked to play embedded preview or get 
        * preview/silent rights if there is no valid rights and either embedded preview or
        * preview rights are available.
        * @param aError: error code to be handled.
        * @param aFileName: name of file for which error was received.
        * @param aEmbeddedPreviewUri: contain URI of embedded preview part 
        * upon return if caller should play the embedded preview. If embedded
        * preview should not be played this is NULL. Must be freed by caller.
        * @return KErrNone if the content is now usable (e.g. silent rights or preview rights were gotten). If
        *                  the return code is KErrNone and the aEmbeddedPreviewUri parameter is not NULL,
        *                  the player should use embedded preview
        *         KErrCancel if the user cancelled any of the actions within the function
        *         KErrCANoRights and KErrCANoPermission if after the function call, still no rights exist
        *         KErrCompletion if the user did launch the browser, but it is not clear whether the content
        *                  was activated
        * @since S60 3.1
        */
        IMPORT_C TInt HandleErrorOrPreviewL( 
            TInt aError, 
            const TDesC& aFileName, 
            HBufC8*& aEmbeddedPreviewUri );

        /**
        * Check rights for the content. If there is less than given amount 
        * of usage time/count left, appropriate note is displayed
        * depending on situation.
        * @param  aURI: URI of the file
        * @return Button code
        */
        // causes conflict with other CheckRightsAmount method, removed for now...
//        IMPORT_C TInt CheckRightsAmountL( const TDesC8& aURI );


        /**
        * Check rights for the file. If there is less than given amount 
        * of usage time/count/percentage left, appropriate note is displayed
        * depending on situation.
        * @param  aFileName: Full path to file
        * @return Button code
        */
        // causes conflict with other CheckRightsAmount method, removed for now...
//        IMPORT_C TInt CheckRightsAmountL( const TDesC& aFileName );
                

        /**
        * Check rights for the file. If there is less than given amount 
        * of usage time/count/percentage left, appropriate note is displayed
        * depending on situation.
        * @param  aFileHandle: file handle to the file
        * @return Button code
        * @since  3.0
        */
        // causes conflict with other CheckRightsAmount method, removed for now...
//        IMPORT_C TInt CheckRightsAmountL( RFile& aFileHandle );


        /**
        * Check rights for the file. If there is less than given amount 
        * of usage time/count left, one of the following note is displayed
        * depending on situation:
        * 'Usage rights about to expire. View details?'
        * 'Usage rights about to expire. %N days left. View details?'
        * 'Usage rights about to expire. 1 day left. View details?'
        * 'Usage rights about to expire. %N counts left. View details?'
        * 'Usage rights about to expire. 1 count left. View details?'
        * It also checks that rights are valid and displays appropriate note,
        * if they are not.
        * @param  aFileName: Full path to file
        * @param  aCount: Threshold value for count limit
        * @param  aDays: Threshold value for time limit in days
        * @return Button code
        */
        IMPORT_C TInt CheckRightsAmountL( const TDesC& aFileName, 
            TInt aCount = KDRMHelperDefaultCountThreshold, 
            TInt aDays = KDRMHelperDefaultTimeThreshold );


        /**
        * Check rights for the file. If there is less than given amount 
        * of usage time/count left, one of the following note is displayed
        * depending on situation:
        * 'Usage rights about to expire. View details?'
        * 'Usage rights about to expire. %N days left. View details?'
        * 'Usage rights about to expire. 1 day left. View details?'
        * 'Usage rights about to expire. %N counts left. View details?'
        * 'Usage rights about to expire. 1 count left. View details?'
        * It also checks that rights are valid and displays appropriate note,
        * if they are not.
        * @param  aFileHandle: file handle to the file
        * @param  aCount: Threshold value for count limit
        * @param  aDays: Threshold value for time limit in days
        * @return Button code
        * @since  3.0
        */
        IMPORT_C TInt CheckRightsAmountL( RFile& aFileHandle, 
            TInt aCount = KDRMHelperDefaultCountThreshold, 
            TInt aDays = KDRMHelperDefaultTimeThreshold );


        /**
        * Check rights for the file. If there is less than given amount 
        * of usage time/count left, one of the following note is displayed
        * depending on situation:
        * 'Usage rights about to expire. View details?'
        * 'Usage rights about to expire. %N days left. View details?'
        * 'Usage rights about to expire. 1 day left. View details?'
        * 'Usage rights about to expire. %N counts left. View details?'
        * 'Usage rights about to expire. 1 count left. View details?'
        * It also checks that rights are valid and displays appropriate note,
        * if they are not.
        * @param  aUri: Content URI
        * @param  aCount: Threshold value for count limit
        * @param  aDays: Threshold value for time limit in days
        * @return Button code
        */
        IMPORT_C TInt CheckRightsAmountL( const TDesC8& aUri, 
            TInt aCount = KDRMHelperDefaultCountThreshold, 
            TInt aDays = KDRMHelperDefaultTimeThreshold );


        /**
        * Check rights for the file. If there is less than aThreshold percent 
        * of usage time/count left, one of the following note is displayed
        * depending on situation:
        * 'Usage rights about to expire. View details?'
        * 'Usage rights about to expire. %N days left. View details?'
        * 'Usage rights about to expire. 1 day left. View details?'
        * 'Usage rights about to expire. %N counts left. View details?'
        * 'Usage rights about to expire. 1 count left. View details?'
        * It also checks that rights are valid and displays appropriate note,
        * if they are not.
        * @param  aFileName: Full path to file
        * @param  aThreshold: Threshold value in percents for displaying the note
        * @return Button code
        */
        IMPORT_C TInt CheckRightsPercentL( const TDesC& aFileName, 
            TInt aThreshold = KDRMHelperDefaultPercentageThreshold );


        /**
        * Check rights for the file. If there is less than aThreshold percent 
        * of usage time/count left, one of the following note is displayed
        * depending on situation:
        * 'Usage rights about to expire. View details?'
        * 'Usage rights about to expire. %N days left. View details?'
        * 'Usage rights about to expire. 1 day left. View details?'
        * 'Usage rights about to expire. %N counts left. View details?'
        * 'Usage rights about to expire. 1 count left. View details?'
        * It also checks that rights are valid and displays appropriate note,
        * if they are not.
        * @param  aFileHandle: file handle to the file
        * @param  aThreshold: Threshold value in percents for displaying the note
        * @return Button code
        * @since  3.0
        */
        IMPORT_C TInt CheckRightsPercentL( RFile& aFileHandle, 
            TInt aThreshold = KDRMHelperDefaultPercentageThreshold );


        /**
        * Launches DRM Rights Manager UI embedded with details view related 
        * to given content.
        * @param aURI: URI of the file
        * @return -
        */
        IMPORT_C void LaunchDetailsViewEmbeddedL( 
            const TDesC8& aURI );

		
        /**
        * Launches DRM Rights Manager UI embedded with details view related 
        * to given file.
        * @param aFileName: Full path to file
        * @return -
        */
        IMPORT_C void LaunchDetailsViewEmbeddedL( 
            const TDesC& aFileName );


        /**
        * Launches DRM Rights Manager UI embedded with details view related 
        * to given file.    
        * @param  aFileHandle: file handle to the file
        * @return -
        * @since  3.0
        */
        IMPORT_C void LaunchDetailsViewEmbeddedL( 
            RFile& aFileHandle );


        /**
        * Launches DRM Rights Manager UI embedded with details view related 
        * to given content.
        * @param aContentURI: URI of the content
        * @return -
        */
        IMPORT_C void LaunchDetailsViewEmbeddedL( 
            const HBufC8* aContentURI );


        /**
        * Gets details of rights object associated of given file.
        *
        * @param[in]  aFileName Full path to file
        * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
        * ContentAccess::EPrint or ContentAccess::EExecute 
        * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
        * and some constraints are returned, rights will become valid in future
        * @param[out] aSendingAllowed ETrue if content can be sent
        * @param[out] aPlay play constraints, must be deleted by caller
        * @param[out] aDisplay display constraints, must be deleted by caller
        * @param[out] aExecute execute constraints, must be deleted by caller
        * @param[out] aPrint print constraints, must be deleted by caller
        *
        * @leave KErrArgument file is not DRM-protected.
        * @leave KErrCANoRights no rights
        * @see caferr.h
        * @see caftypes.h
        */
        IMPORT_C void GetRightsDetailsL( const TDesC& aFileName, 
            TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
            CDRMHelperRightsConstraints*& aPlay, 
            CDRMHelperRightsConstraints*& aDisplay, 
            CDRMHelperRightsConstraints*& aExecute, 
            CDRMHelperRightsConstraints*& aPrint );


        /**
        * Gets details of rights object associated of given file.
        * 
        * @param[in]  aFileHandle file handle to the file
        * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
        * ContentAccess::EPrint or ContentAccess::EExecute 
        * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
        * and some constraints are returned, rights will become valid in future
        * @param[out] aSendingAllowed ETrue if content can be sent
        * @param[out] aPlay play constraints, must be deleted by caller
        * @param[out] aDisplay display constraints, must be deleted by caller
        * @param[out] aExecute execute constraints, must be deleted by caller
        * @param[out] aPrint print constraints, must be deleted by caller
        *
        * @leave KErrArgument file is not DRM-protected.
        * @leave KErrCANoRights no rights
        * @see caferr.h
        * @see caftypes.h
        *
        * @since  3.0
        */
        IMPORT_C void GetRightsDetailsL( RFile& aFileHandle,  
            TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
            CDRMHelperRightsConstraints*& aPlay, 
            CDRMHelperRightsConstraints*& aDisplay, 
            CDRMHelperRightsConstraints*& aExecute, 
            CDRMHelperRightsConstraints*& aPrint );


        /**
        * Gets details of rights object associated of given file.
        *
        * @param[in]  aFileName Full path to file
        * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
        * ContentAccess::EPrint or ContentAccess::EExecute 
        * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
        * and some constraints are returned, rights will become valid in future
        * @param[out] aSendingAllowed ETrue if content can be sent
        * @param[out] aPlay play constraints, must be deleted by caller
        * @param[out] aDisplay display constraints, must be deleted by caller
        * @param[out] aExecute execute constraints, must be deleted by caller
        * @param[out] aPrint print constraints, must be deleted by caller
        *
        * @leave KErrArgument file is not DRM-protected.
        * @leave KErrCANoRights no rights
        * @see caferr.h
        * @see caftypes.h
        */
        IMPORT_C void GetRightsDetailsL( const TDesC& aFileName, 
            TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
            CDRMRightsConstraints*& aPlay, 
            CDRMRightsConstraints*& aDisplay, 
            CDRMRightsConstraints*& aExecute, 
            CDRMRightsConstraints*& aPrint ); 


        /**
        * Gets details of rights object associated of given file.
        * 
        * @param[in]  aFileHandle file handle to the file
        * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
        * ContentAccess::EPrint or ContentAccess::EExecute 
        * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
        * and some constraints are returned, rights will become valid in future
        * @param[out] aSendingAllowed ETrue if content can be sent
        * @param[out] aPlay play constraints, must be deleted by caller
        * @param[out] aDisplay display constraints, must be deleted by caller
        * @param[out] aExecute execute constraints, must be deleted by caller
        * @param[out] aPrint print constraints, must be deleted by caller
        *
        * @leave KErrArgument file is not DRM-protected.
        * @leave KErrCANoRights no rights
        * @see caferr.h
        * @see caftypes.h
        *
        * @since  3.0
        */
        IMPORT_C void GetRightsDetailsL( RFile& aFileHandle,  
            TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
            CDRMRightsConstraints*& aPlay, 
            CDRMRightsConstraints*& aDisplay, 
            CDRMRightsConstraints*& aExecute, 
            CDRMRightsConstraints*& aPrint ); 


        /**
        * Registers given content to be used as an automated content. This
        * function is used when registering application listens expiry 
        * notifications itself
        * @param  aURI: content URI
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt SetAutomated( const TDesC8& aURI );


        /**
        * Registers given content to be used as an automated content. This
        * function is used when registering application listens expiry 
        * notifications itself.
        * @param  aFileName: Full path to file
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt SetAutomated( const TDesC& aFilename );


        /**
        * Registers given content to be used as an automated content. This
        * function is used when registering application listens expiry 
        * @param  aFileHandle: file handle to the file
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since  3.0
        */
        IMPORT_C TInt SetAutomated( RFile& aFileHandle );


        /**
        * Displays the confirmation query about setting given content as an
        * automated content. Note that this function does not actually
        * register content, just displays the note
        * @param  aURI: content URI
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt ShowAutomatedNote( const TDesC8& aURI );


        /**
        * Displays the confirmation query about setting given content as an
        * automated content. Note that this function does not actually
        * register content, just displays the note
        * @param  aFileName: Full path to file
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt ShowAutomatedNote( const TDesC& aFilename );


        /**
        * Displays the confirmation query about setting given content as an
        * automated content. Note that this function does not actually
        * register content, just displays the note
        * @param  aFileHandle: file handle to the file
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since  3.0
        */
        IMPORT_C TInt ShowAutomatedNote( RFile& aFileHandle );


        /**
        * Registers given content to be used as an automated content. This
        * function is used when phone application listens to expiry notifications.
        * @param  aURI: content URI
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt SetAutomatedPassive( const TDesC8& aURI );


        /**
        * Registers given content to be used as an automated content. This
        * function is used when phone application listens to expiry notifications.
        * @param  aFileName: Full path to file
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt SetAutomatedPassive( const TDesC& aFilename );


        /**
        * Registers given content to be used as an automated content. This
        * function is used when phone application listens to expiry notifications.
        * @param  aFileHandle: file handle to the file
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since  3.0
        */
        IMPORT_C TInt SetAutomatedPassive( RFile& aFileHandle );


        /**
        * Registers given content to be used as an automated content without
        * confirmation query.
        * @param aURI: content URI
        * @param aActive: ETrue if registering application itself listens
        *                 expiry notifications
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt SetAutomatedSilent( const TDesC8& aURI, TBool aActive );


        /**
        * Registers given content to be used as an automated content without
        * confirmation query.
        * @param  aFileName: Full path to file
        * @param  aActive: ETrue if registering application itself listens
        *                  expiry notifications
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since Series 60 2.6
        */
        IMPORT_C TInt SetAutomatedSilent( const TDesC& aFilename, 
            TBool aActive );


        /**
        * Registers given content to be used as an automated content without
        * confirmation query.
        * @param  aFileHandle: file handle to the file
        * @param  aActive: ETrue if registering application itself listens
        *                  expiry notifications
        * @return System wide error code (KErrCancel if user pressed no to 
        * query).
        * @since  3.0
        */
        IMPORT_C TInt SetAutomatedSilent( RFile& aFileHandle,  
            TBool aActive );


        /**
        * Unregisters given content to be used as an automated content.
        * @param aURI: content URI
        * @return System wide error code.
        * @since Series 60 2.6
        */
        IMPORT_C TInt RemoveAutomated( const TDesC8& aURI );


        /**
        * Unregisters given content to be used as an automated content.
        * @param  aFileName: Full path to file
        * @return System wide error code.
        * @since Series 60 2.6
        */
        IMPORT_C TInt RemoveAutomated( const TDesC& aFilename );


        /**
        * Unregisters given content to be used as an automated content.
        * @param  aFileHandle: file handle to the file
        * @return System wide error code.
        * @since  3.0
        */
        IMPORT_C TInt RemoveAutomated( RFile& aFileHandle );


        /**
        * Unregisters given content to be used as an automated content.
        * This function must be used when content was registered using 
        * SetAutomatedPassive.
        * @param  aURI: content URI
        * @return System wide error code.
        * @since Series 60 2.6
        */
        IMPORT_C TInt RemoveAutomatedPassive( const TDesC8& aURI );


        /**
        * Unregisters given content to be used as an automated content.
        * This function must be used when content was registered using 
        * SetAutomatedPassive.
        * @param  aFileName: Full path to file
        * @return System wide error code.
        * @since Series 60 2.6
        */
        IMPORT_C TInt RemoveAutomatedPassive( const TDesC& aFilename );


        /**
        * Unregisters given content to be used as an automated content.
        * This function must be used when content was registered using 
        * SetAutomatedPassive.
        * @param  aFileHandle: file handle to the file
        * @return System wide error code.
        * @since  3.0
        */
        IMPORT_C TInt RemoveAutomatedPassive( RFile& aFileHandle );


        /**
        * Checks if given content can be set as an automated content.
        * @param  aURI: content URI
        * @param  aValue: ETrue if content can be set as automated.
        * @return System wide or DRM specific error code.
        * @since Series 60 2.6
        */
        IMPORT_C TInt CanSetAutomated( const TDesC8& aURI, 
            TBool& aValue );


        /**
        * Checks if given content can be set as an automated content.
        * @param  aFileName: Full path to file
        * @param  aValue: ETrue if content can be set as automated.
        * @return System wide or DRM specific error code.
        * @since Series 60 2.6
        */
        IMPORT_C TInt CanSetAutomated( const TDesC& aFilename, 
            TBool& aValue );


        /**
        * Checks if given content can be set as an automated content.
        * @param  aFileHandle: file handle to the file
        * @param  aValue: ETrue if content can be set as automated.
        * @return System wide or DRM specific error code.
        * @since  3.0
        */
        IMPORT_C TInt CanSetAutomated( RFile& aFileHandle, 
            TBool& aValue );


        /**
        * Informs DRMHelper that idle-screen has been activated.
        * @return -
        * @since Series 60 2.6
        */
        IMPORT_C void IndicateIdle();

        /**
        * Handle the general UI based error notes 
        * @since  3.0
        * @param aTextId The code for DRM general notification note.
        * @param aURI The DRM files URI, that caused the DRM error.
        * @return KErrnone if everything went ok, else wide scale of Symbian errors
        */
        IMPORT_C TInt ShowDRMUINotification2L( TDRMHelperNotificationID aTextId,
            const TDesC8& aURI );


        /**
        * Handle the general UI based error notes 
        * @since  3.0
        * @param aTextId The code for DRM general notification note.
        * @param aFileName The DRM file's name and path, that caused the DRM error.
        * @return KErrnone if everything went ok, else wide scale of Symbian errors
        */
        IMPORT_C TInt ShowDRMUINotification2L( TDRMHelperNotificationID aTextId,
            const TDesC& aFileName );


        /**
        * Set count limit for CheckRightsAmountL
        * @param aCounts: new count limit for displaying the note.
        * @return -
        */
        IMPORT_C void SetCountLimitL( TUint aCounts );

        
        /**
        * Set time limit in days for CheckRightsAmountL
        * @param aDays: new time limit for displaying the note.
        * @return -
        */
        IMPORT_C void SetTimeLimitL( TUint aDays );


        /**
        * Set percentage limit for CheckRightsAmountL. Applies to both counts and time.
        * @param aPercentage: new limit for displaying the note.
        * @return -
        */
        IMPORT_C void SetPercentageLimitL( TUint aPercentage );


        /**
        * GetContentURIList
        *
        * Returns a list of all content URIs that have rights in the rights 
        * database.
        *
        * @since  2.5
        * @param  aURIList: Out parameter for the URI list.
        * @return Ok if the URI list could be retreived.
        */
        IMPORT_C TInt GetContentURIList(
            RPointerArray<HBufC8>*& aURIList);

    
        /**
        * DataTypesCount
        *
        * Returns the number of previously registered datatypes which are
        * supported by the DRM system and associated applications.
        *
        * @since  2.0
        * @param  aCount: Out parameter for the datatype count
        * @return EOk if the number of datatypes has been returned correctly
        */
        IMPORT_C TInt DataTypesCount(
            TInt& aCount);

    
        /**
        * SupportedDataType
        *
        * Returns a specific datatype which has been registered before by giving an index
        *
        * @since  2.0
        * @param  aIndex: Number of the datatype to return
        * @param  aDataType: Out parameter for the datatype
        * @return EOk if the datatype was returned correctly
        */
        IMPORT_C TInt SupportedDataType(
            const TInt aIndex, TDataType& aDataType);

    
        /**
        * RegisterDataType
        *
        * Registers a datatype as a supported datatype.
        *
        * @since  2.0
        * @param  aDataType: Datatype to register
        * @return EOk if the datatype has been registered
        */
        IMPORT_C TInt RegisterDataType(
            const TDataType& aDataType);

    
        /**
        * UnRegisterDataType
        *
        * Unregisters a datatype via its index.
        *
        * @since  2.5
        * @param  aIndex: Number of the datatype to unregister
        * @return EOk if the datatype has been unregistered
        */
        IMPORT_C TInt UnRegisterDataType(
            const TInt aIndex);


        /**
        * SupportedDRMMethods
        *
        * Returns the supported DRM protection methods and the OMA compliance
        * level of the DRM engine
        *
        * @since  2.0
        * @param  aDRMMethod: Out parameter, bit mask containing any 
        *         combination of EForwardLock, ECombinedDelivery, 
        *         ESeparateDelivery etc.
        * @param  aOMALevel: OMA compliance of the DRM engine
        * @return DRMCommon error code
        */
    
        IMPORT_C TInt SupportedDRMMethods2(
            TInt& aDRMMethod, TDRMHelperOMALevel& aOMALevel);

    
        /**
        * Consume2
        *
        * Overrides any rights consumption. This function must only be used by
        * applications with user interaction and not by intermediate components.
        * The main use cases are signalling that content is to be installed
        * (including thumbnail generation), or that content is to be consumed.
        * They are characterized as calls to this function with the correct
        * intent (i.e. EPlay or EInstall) and the corresponding action (i.e.
        * telling whether the indicated intent is started or finished).
        * Calls to this function must be the result of a user interaction or
        * otherwise high level event.
        *
        * @since  3.0
        * @param  aContentURI: URI of the content which will be consumed
        * @param  aRightsSpec: the consumption intent (EPlay, EDisplay, EPrint,
        *         EExecute or EInstall)
        * @param  anAction: the consumption action, telling whether the
        *         content consumption starts or finishes.
        * @return EOk if consume action was successfully signalled to the engine.
        */
        IMPORT_C TInt Consume2(
		    const TDesC8& aContentURI,
		    TUint32 aRightsSpec,
		    TDRMHelperConsumeAction anAction);


        /**
        * ConsumeFile2
        *
        * Overrides any rights consumption. This function must only be used by
        * applications with user interaction and not by intermediate components.
        * The main use cases are signalling that content is to be installed
        * (including thumbnail generation), or that content is to be consumed.
        * They are characterized as calls to this function with the correct
        * intent (i.e. EPlay or EInstall) and the corresponding action (i.e.
        * telling whether the indicated intent is started or finished).
        * Calls to this function must be the result of a user interaction or
        * otherwise high level event.
        *
        * @since  3.0
        * @param  
        * @param  aRightsSpec: the consumption intent (EPlay, EDisplay, EPrint,
        *         EExecute or EInstall)
        * @param  anAction: the consumption action, telling whether the
        *         content consumption starts or finishes.
        * @return EOk if consume action was successfully signalled to the engine.
        */
        IMPORT_C TInt ConsumeFile2(
		    const TDesC& aFileName,
		    TUint32 aRightsSpec,
		    TDRMHelperConsumeAction anAction);


        /**
        * ConsumeFile2
        *
        * Overrides any rights consumption. This function must only be used by
        * applications with user interaction and not by intermediate components.
        * The main use cases are signalling that content is to be installed
        * (including thumbnail generation), or that content is to be consumed.
        * They are characterized as calls to this function with the correct
        * intent (i.e. EPlay or EInstall) and the corresponding action (i.e.
        * telling whether the indicated intent is started or finished).
        * Calls to this function must be the result of a user interaction or
        * otherwise high level event.
        *
        * @since  3.0
        * @param  aFileHandle: file handle to the file
        * @param  aRightsSpec: the consumption intent (EPlay, EDisplay, EPrint,
        *         EExecute or EInstall)
        * @param  anAction: the consumption action, telling whether the
        *         content consumption starts or finishes.
        * @return EOk if consume action was successfully signalled to the engine.
        */
        IMPORT_C TInt ConsumeFile2(
		    RFile& aFileHandle, 
		    TUint32 aRightsSpec,
		    TDRMHelperConsumeAction anAction);

		/**
        * Acquires rights for given content if rights have been expired or rights are missing.
		* If content already has valid or future rights, does nothing.
		* This function should be called when user selects activate from options menu.
		* Leaves with system-wide error code in case of error.
        * @param aContent: Content object
        */
		IMPORT_C void ActivateContentL(CData& aContent);

		/**
        * Acquires rights for given content if rights have been expired or rights are missing.
		* If content already has valid or future rights, does nothing.
		* This function should be called when user selects activate from options menu.
		* Leaves with system-wide error code in case of error.
        * @param aFileName: Full path to file
        */
		IMPORT_C void ActivateContentL(TDesC& aFileName);

		/**
        * Checks if given content has embedded preview or if it is possible to get preview rights for it.
		* Leaves with system-wide error code in case of error.
        * @param aContent: Content object
		* @param aPreviewUri: Out: URI of the embedded preview or PreviewRights URL. Must be freed by caller
		* @return preview type
        */
		IMPORT_C TDRMHelperPreviewType HasPreviewL(CData& aContent, HBufC8*& aPreviewUri);

		/**
        * Checks if given content has embedded preview or if it is possible to get preview rights for it.
		* Leaves with system-wide error code in case of error.
        * @param aFileName: Full path to file.
		* @param aPreviewUri: Out: URI of the embedded preview or PreviewRights URL. Must be freed by caller
		* @return preview type
        */
		IMPORT_C TDRMHelperPreviewType HasPreviewL(TDesC& aFileName, HBufC8*& aPreviewUri);

		/**
        * Acquires preview rights for given content.
		* Leaves with system-wide error code in case of error.
        * @param aContent: Content object
        */
		IMPORT_C void GetPreviewRightsL(CData& aContent);

		/**
        * Acquires preview rights for given content.
		* Leaves with system-wide error code in case of error.
        * @param aFileName: Full path to file.
        */
		IMPORT_C void GetPreviewRightsL(TDesC& aFileName);

		/**
        * This method should be called after embedded preview has been played.
		* It asks from user if he/she wants to buy rights and acquires those if user agrees.
		* Leaves with system-wide error code in case of error.
        * @param aContent: Content object.
		* @return ETrue if user selects to buy rights.
        */
		IMPORT_C TBool EmbeddedPreviewCompletedL(CData& aContent);

		/**
        * This method should be called after embedded preview has been played.
		* It asks from user if he/she wants to buy rights and acquires those if user agrees.
		* Leaves with system-wide error code in case of error.
        * @param aFileName: Full path to file.
		* @return ETrue if user selects to buy rights.
        */
		IMPORT_C TBool EmbeddedPreviewCompletedL(TDesC& aFileName);

		/**
        * Checks if given content has InfoUrl.
		* Leaves with system-wide error code in case of error.
        * @param aContent: Content object.
		* @param aInfoUrl: Out: InfoUrl. Must be freed by caller.
		* @return ETrue if content has InfoUrl.
        */
		IMPORT_C TBool HasInfoUrlL(CData& aContent, HBufC8*& aInfoUrl);

		/**
        * Checks if given content has InfoUrl.
		* Leaves with system-wide error code in case of error.
        * @param aFileName: Full path to file.
		* @param aInfoUrl: Out: InfoUrl. Must be freed by caller.
		* @return ETrue if content has InfoUrl.
        */
		IMPORT_C TBool HasInfoUrlL(TDesC& aFileName, HBufC8*& aInfoUrl);

		/**
        * Opens browser with InfoUrl of the content.
		* Leaves with system-wide error code in case of error.
        * @param aContent: Content object.
        */
		IMPORT_C void OpenInfoUrlL(CData& aContent);

		/**
        * Opens browser with InfoUrl of the content.
		* Leaves with system-wide error code in case of error.
        * @param aFileName: Full path to file.
        */
		IMPORT_C void OpenInfoUrlL(TDesC& aFileName);

        /**
        * Sets the type of automated content to be registered. This method 
        * should be called before calling any of SetAutomated* methods.
        * @param  aAutomatedType: type of automated content
        * @return System wide error code
        * @since Series 60 3.0
        */
        IMPORT_C TInt SetAutomatedType( TDRMHelperAutomatedType aAutomatedType );
        
        /**
        * Sets media type of content for preview. Should be called prior to 
        * calling HandleErrorOrPreviewL or EmbeddedPreviewCompletedL. 
        * @param aMediaType: media type of content.
        * @return System wide error code
        * @since S60 3.1u
        */
        IMPORT_C TInt SetPreviewMediaType( 
            TDRMHelperPreviewMediaType aMediaType );

    protected:  // New functions
        
        /**
        * ?member_description.
        * @since ?Series60_version
        * @param ?arg1 ?description
        * @return ?description
        */
        //?type ?member_function( ?type ?arg1 );

    protected:  // Functions from base classes
        
        /**
        * From ?base_class ?member_description
        */
        //?type ?member_function();


    private:

        /**
        * C++ default constructor.
        */
        CDRMHelper( CCoeEnv& aCoeEnv );
        CDRMHelper();

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL( RFs* aFs );

        // Prohibit copy constructor if not deriving from CBase.
        // ?classname( const ?classname& );
        // Prohibit assigment operator if not deriving from CBase.
        // ?classname& operator=( const ?classname& );

        /**
        * Display query dialog
        */
        TInt DisplayQueryWithIdL( TInt aTextResourceId, TInt aQueryResourceId );
        TInt DisplayQueryWithIdValueL( TInt aTextResourceId, TInt aQueryResourceId, 
                                       const TDesC& aString );
        TInt DisplayQueryL( TInt aTextResourceId, TInt aValue );
        TInt DisplayQueryL( TInt aTextResourceId, const TDesC& aString );
        TInt DisplayQueryL( 
        	TInt aTextResourceId, 
        	const TDesC& aString, 
            TInt aValue,
        	TInt aStringPos = -1,
        	TInt aValuePos = -1 );
        TInt DisplayQueryL( TDesC& aPromptText, TInt aQueryResourceId );

        /**
        * Display information note
        */
        void DisplayInfoNoteL( TInt aTextResourceId );
        void DisplayInfoNoteL( TInt aTextResourceId, const TDesC& aString );
        void DisplayInfoNoteL( TInt aTextResourceId, TInt aValue );
        void DisplayInfoNoteL( TDesC& aPromptText, TInt aResourceId, 
                               const TDesC& aString = KNullDesC, TInt aValue = -1 );

        /**
        * Launch browser embedded
        */
        void LaunchBrowserL( HBufC8* aUrl );
        void LaunchBrowserL( HBufC* aUrl );

        /**
        * Get rights-issuer URI from DCF file
        */
        void GetRightsIssuerL( const CData& aContent, HBufC*& aIssuer );

        /**
        * Get time and count based constraints
        */
        TInt GetCounts( CDRMRightsConstraints* aConstraint, 
            TUint32& aOriginalCount, TTimeIntervalDays& aDuration );

        TInt GetCounts( CDRMRightsConstraints* aConstraint,
            TUint32& aCountLeft, TTime& aEndTime );
            
        TInt GetCounts( CDRMConstraint* aConstraint, 
            TUint32& aOriginalCount, TTimeIntervalDays& aDuration );

        TInt GetCounts( CDRMConstraint* aConstraint,
            TUint32& aCountLeft, TTime& aEndTime );

        /**
        * Launch rights manager UI
        */
        void LaunchRightsManagerUiL( const TDesC& aParam16 );

        /**
        * Form string needed to launch rights manager UI embedded.
        */
        void CreateLaunchParamL( TUint32 aLocalId, const HBufC8* aUrl, 
            HBufC*& aLaunchParam );

        /**
        * Strip path and extension from given filename.
        * Caller is responsible for freeing returned buffer
        */
        TPtrC StripPathAndExtension( const TDesC& aFileName );

        /**
        * Get expiration details of file.
        * Returns DRMCommon::ENoRights if no rights object found or
        * CDRMRights::TExpiration value
        */
        TInt GetExpirationDetails( HBufC8* aContentUri, TInt aIntent, 
                                   CDRMRights*& aRightsObject );

        /**
        * Get expiration time of given rights object
        */
        TInt CalculateEndTime( CDRMRights* aRights, TInt aIntent, 
            TTime& aEndTime, TBool& aInactive );

        /**
        * Get end time of given constraint
        */
        TInt GetEndTime( CDRMRightsConstraints* aConstraint, 
            TTime& aEndTime, TBool& aInactive );
        
        /**
        * Register content as automated
        */
        TInt PerformSetAutomatedL( const CData& aContent, TBool aActive );
        TInt DoSetAutomatedL( const TDesC8& aURI, TBool aActive, 
            const HBufC* aMimeType );

        /**
        * Display confirmation query about setting as automated. Does not 
        * actually register.
        */
        TInt PerformShowAutomatedNoteL( const CData& aContent );
        TInt DoShowAutomatedNoteL( const TDesC8& aURI, 
            const HBufC* aMimeType );

        /**
        * Register content as automated without showing any queries
        */
        TInt PerformSetAutomatedSilentL( const CData& aContent, TBool aActive );
        TInt DoSetAutomatedSilent( const TDesC8& aURI, TBool aActive, TInt aIntent );

        /**
        * Returns default intent for the mimetype
        */
        TInt Intent( const HBufC* aMimeType );
        
        /**
        * Checks if content can be used as automated content
        */
        TInt PerformCanSetAutomatedL( const CData& aContent,TBool& aValue );
        TInt DoCanSetAutomated( const TDesC8& aURI, const HBufC* aMimeType, 
            TBool& aValue );
        TBool DoCheckSkinCanSetAutomated(CDRMRights* aRights);
            
        /**
        * Gets mimetype based on content URI
        */
        HBufC* MimeTypeFromURIL( const TDesC8& aURI );
        
        /**
        * Gets corresponding filename (including full path) based on content 
        * URI
        */
        TInt GetFileHandleFromURIL( const TDesC8& aURI, RFile& aFileHandle );

        /**
        * Get start time of given rights object
        */
        TInt GetStartTime( CDRMRights* aRights, TInt aIntent, 
            TTime& aStartTime );

        /**
        * Displays info note of rights that are not yet valid 
        */
        TInt ShowFutureNoteL( const HBufC* aMimeType, CDRMRights* aRightsObject );

        /**
        * Handles error by displaying appropriate note to user.
        */
        TInt DoHandleErrorL( TInt aError, HBufC8* aContentUri, HBufC* aMimeType, 
            HBufC* aRIUrl, HBufC* aDomainRoUrl, HBufC* aEta, HBufC8* aRiId8,
            HBufC8* aDomainId8, const TDesC& aFileName );
            
        /**
        * Checks if rights are about to expire.
        */
        TInt DoCheckRightsPercentL( HBufC8* aContentUri, HBufC* aMimeType, 
            HBufC* aRIUrl, const TDesC& aFileName, TInt aThreshold );

        TInt DoCheckRightsAmountL( HBufC8* aContentUri, HBufC* aMimeType, 
            HBufC* aRIUrl, const TDesC& aFileName, TInt aCount, TInt aDays );
            
        /**
        * Gets rights details.
        */
        void DoGetRightsDetailsL( HBufC8* aContentUri, TUint32 aIntent,
            TBool& aExpired, CDRMHelperRightsConstraints*& aPlay,
            CDRMHelperRightsConstraints*& aDisplay, 
            CDRMHelperRightsConstraints*& aExecute,
            CDRMHelperRightsConstraints*& aPrint );

        void DoGetRightsDetailsL( CData* aContent, TUint32 aIntent,
            TBool& aExpired, TBool& aSendingAllowed, CDRMRightsConstraints*& aPlay,
            CDRMRightsConstraints*& aDisplay, 
            CDRMRightsConstraints*& aExecute,
            CDRMRightsConstraints*& aPrint );
		
        /**
        * Get constraints for given rights
        */
        void GetConstraintsL( 
            CDRMRights& aRights, 
            CDRMHelperRightsConstraints*& aPlay,
            CDRMHelperRightsConstraints*& aDisplay,
            CDRMHelperRightsConstraints*& aExecute,
            CDRMHelperRightsConstraints*& aPrint );

		/**
		* Unregisters automated content.
		*/
		TInt PerformRemoveAutomatedL( const CData& aContent, TBool aActive );
		
		void HandleServerAppExit(TInt aReason);

        void CheckPreviewUriL( 
            const CData* aContent, 
            HBufC*& aEmbeddedPreviewUri, 
            TInt& aPreviewType );
        
        TInt DisplayPopupWindowsForPreviewL(TInt aPreviewType);

        /**
		* Returns correct resource id for automated content notes.
		* If aExpired is ETrue, aSecondParameter indicates if RI URL exists
		* If aExpired is EFalse, aSecondParameter indicates if there is one day left
        * aRejectReason tells the constraints which are invalid.
		*/
		TInt AutomatedResIdL( TBool aExpired, TBool aSecondParameter, TUint32 aRejectReason );

        /** 
        * Returns the correct resource id for expired and no rights notes
        */		    
        TInt ErrorResIdL( const TDesC8& aContentUri, TInt aIntent, 
            TBool aRightsIssuer, TBool aExpired );

        /** 
        * Returns the constraints which are invalid
        */		    
        TUint32 RejectReasonL( TInt aIntent, const TDesC8& aContentUri );
        
        /** 
        * Prepares secondary display for DRM notes
        */
        void PrepareSecondaryDisplayL( CEikDialog& aDialog, TInt aResourceId,
                                       const TDesC& aString = KNullDesC, TInt aValue = -1 ); 

        /** 
        * Cancels secondary display for DRM notes
        */
        void CancelSecondaryDisplayL( TInt aResourceId );
                
        /** 
        * Check whether a file as a silent rights URL which can be used, i.e the URL is valid
        * and on the white list.
        */
        HBufC8* HasSilentRightsUrlL( CData* aContent );
        
        /** 
        * Get rights silently
        */
        TInt GetSilentRightsL( const TDesC8& aUrl );

        /** 
        * Check if the user has allowed silent rights
        */
        TBool SilentRightsAllowedL();

        /** 
        * Check if browser AP has been defined
        */
        TBool BrowserAPDefinedL();

    protected:  // Data
        // ?one_line_short_description_of_data
        //?data_declaration;

    private:    // Data
        CCoeEnv*                iCoeEnv;

        // DRM engine
        DRMCommon*              iDRMCommon;

        // used to make launching rights manager ui synchronous
        CActiveSchedulerWait    iWait;
   
        RDRMHelper              iHelperServer;
        
        // is CoeEnv used
        TBool                   iUseCoeEnv;

        // Used to read resources when CoeEnv is not available
        CStringResourceReader*  iStringResourceReader;
        
        TBool                   iOma2;
        	
        RPointerArray<CConsumeData> iConsumeList;
        
        TInt                    iAutomatedType;
   
        RFs                     iFs;
        
        TBool                   iFsOwned;
        
        TInt                    iPreviewMediaType;
        
        // Used to queue up global notes
        RPointerArray<CDRMHelperInfoNoteWrapper>      iNoteList;
        
        CSchemeHandler*         iSchemeHandler;

        TBool                   iReturnCancel;

        // Used to send cancel events to cover ui
        CMediatorEventProvider* iEventProvider;

    public:     // Friend classes
    protected:  // Friend classes
    private:    // Friend classes

    };

#endif      // __DRMHELPER_H__   
            
// End of File

