epoc32/include/mw/drmhelper.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 /*
     2 * Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * 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
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:  Class to show miscellaneous DRM related error notes and 
    15 *                details about rights 
    16 *
    17 */
    18 
    19 
    20 
    21 #ifndef __DRMHELPER_H__
    22 #define __DRMHELPER_H__
    23 
    24 //  INCLUDES
    25 #include <e32base.h>
    26 #include <ConeResLoader.h>
    27 #include <apparc.h>
    28 #include <rdrmhelper.h>
    29 #include <aknserverapp.h>
    30 #include <caf/caf.h>
    31 #include <caf/content.h>
    32 #include <caf/data.h>
    33 #include <eikdialg.h>
    34 
    35 using namespace ContentAccess;
    36 
    37 // CONSTANTS
    38 const TInt KDRMHelperDefaultCountThreshold = 3;
    39 const TInt KDRMHelperDefaultTimeThreshold = 7;
    40 const TInt KDRMHelperDefaultPercentageThreshold = 10;
    41 const TInt KDRMHelperNoteMaxSize ( 256 );  
    42 
    43 // MACROS
    44 
    45 // DATA TYPES
    46 enum TDRMHelperPreviewMediaType
    47         {
    48         EPreviewTypeAudio,
    49         EPreviewTypeVideo
    50         };
    51 // FUNCTION PROTOTYPES
    52 
    53 // FORWARD DECLARATIONS
    54 class DRMCommon;
    55 class CDRMRightsConstraints;
    56 class CDRMRights;
    57 class CStringResourceReader;
    58 class TDataType;
    59 class CCoeEnv;
    60 class CConsumeData;
    61 class CDRMPermission;
    62 class CDRMConstraint;
    63 class CAknGlobalNote;
    64 class CAknWaitDialog;
    65 class CDRMHelperInfoNoteWrapper;
    66 class CSchemeHandler;
    67 class CMediatorEventProvider;
    68 
    69 // CLASS DECLARATION
    70 
    71 /**
    72 *  Helper class for wrapping CDRMRightsConstraints.
    73 *
    74 *  @lib drmhelper.lib
    75 *  @since Series 60 2.1
    76 */
    77 class CDRMHelperRightsConstraints : public CBase
    78     {
    79     public:  // Constructors and destructor
    80         
    81         /**
    82         * Two-phased constructor.
    83         */
    84         static CDRMHelperRightsConstraints* NewL( 
    85             CDRMRightsConstraints* aConstraints );
    86         static CDRMHelperRightsConstraints* NewLC( 
    87             CDRMRightsConstraints* aConstraints );
    88         
    89         /**
    90         * Destructor.
    91         */
    92         IMPORT_C ~CDRMHelperRightsConstraints();
    93 
    94     public: // New functions
    95 
    96         /**
    97         * checks if the object contains any restrictions 
    98         * or if usage is unconstrained.        
    99         * @return ETrue if usage is unconstrained
   100         */
   101         IMPORT_C TBool FullRights();
   102 
   103         /**
   104         * checks if the object contains only preview rights 
   105         * @return ETrue if object contains only preview rights
   106         */
   107         IMPORT_C TBool IsPreview();
   108 
   109         /**
   110         * Gets number of counts left and number of original counts.
   111         * Leaves with KErrNotFound if object doesn't have count based rights.
   112         * @param aCounter: (out) counts left
   113         * @param aOriginalCounter: (out) number of counts when stored to 
   114         *                          rights db
   115         * @return -
   116         */
   117         IMPORT_C void GetCountersL( TUint32& aCounter, 
   118             TUint32& aOriginalCounter );
   119 
   120         /**
   121         * Gets start time of time based rights.
   122         * Leaves with KErrNotFound if object doesn't have time based rights.
   123         * @param aStartTime: (out) start time
   124         * @return -
   125         */
   126         IMPORT_C void GetStartTimeL( TTime& aStartTime );
   127 
   128         /**
   129         * Gets end time of time based rights.
   130         * Leaves with KErrNotFound if object doesn't have time based rights.
   131         * @param aEndTime: (out) start time
   132         * @return -
   133         */
   134         IMPORT_C void GetEndTimeL( TTime& aEndTime );
   135 
   136         /**
   137         * Gets interval time constraint.
   138         * Leaves with KErrNotFound if object doesn't have interval constraint.
   139         * @param aInterval: (out) interval
   140         * @return -
   141         */
   142         IMPORT_C void GetIntervalL( TTimeIntervalSeconds& aInterval );
   143 
   144         /**
   145         * Gets start time of activated interval constraint.
   146         * Leaves with KErrNotFound if interval has not been started yet.
   147         * @param aStartTime: (out) start time of activated interval
   148         * @return -
   149         */
   150 
   151         IMPORT_C void GetIntervalStartL( TTime& aStartTime );
   152         /**
   153         * Gets number of counts left, number of original counts and timer 
   154         * value for timed-count constraint.
   155         * Leaves with KErrNotFound if object doesn't have timed-count 
   156         * constraint.
   157         * @param aCounter: (out) counts left
   158         * @param aOriginalCounter: Invalid, value returned same as aCounter
   159         * @param aTimer: (out) timer value
   160         * @return -
   161         * @since Series 60 3.0
   162         */
   163         IMPORT_C void GetTimedCountL( TUint32& aCounter, 
   164             TUint32& aOriginalCounter, TTimeIntervalSeconds& aTimer );
   165 
   166         /**
   167         * Gets accumulated time left.
   168         * Leaves with KErrNotFound if object doesn't have accumulated time 
   169         * constraint.
   170         * @param aAccumulatedTime: (out) accumulated time left
   171         * @return -
   172         * @since Series 60 3.0
   173         */
   174         IMPORT_C void GetAccumulatedTimeL( TTimeIntervalSeconds& aAccumulatedTime );
   175 
   176     private:
   177 
   178         /**
   179         * C++ default constructor.
   180         */
   181         CDRMHelperRightsConstraints( CDRMRightsConstraints* aConstrains );
   182 
   183         /**
   184         * By default Symbian 2nd phase constructor is private.
   185         */
   186         void ConstructL();
   187 
   188     private:    // Data
   189         // pointer to CDRMRightsConstraints object
   190         CDRMRightsConstraints* iConstraints;
   191     };
   192 
   193 
   194 /**
   195 *  Handles some error situations DRM-aware applications may encounter.
   196 *
   197 *  @lib drmhelper.lib
   198 *  @since Series 60 2.1
   199 */
   200 class CDRMHelper : public CBase, public MAknServerAppExitObserver
   201     {
   202     public:     // Data
   203     
   204     enum TDRMHelperNotificationID
   205         {
   206         ETActivateTextId = 1,
   207         ETCountBasedErrorTextId = 2 ,
   208         ETCountUsageReduceId = 3,
   209         ETCountUsageReduceMediaId = 4
   210         };
   211 
   212     enum TDRMHelperConsumeAction
   213         {
   214         EStart,
   215         EFinish,
   216         EPause, 
   217         EContinue
   218         };
   219 
   220     enum TDRMHelperOMALevel
   221         {
   222         EOMA_None, 
   223         EOMA_1_0,
   224         EOMA_2_0
   225         };
   226         
   227 	enum TDRMHelperPreviewType 
   228 		{
   229 		ENoPreview, 
   230 		EEmbeddedPreview,
   231 		EPreviewRights
   232 		};
   233 
   234     enum TDRMHelperAutomatedType
   235         {
   236         EAutomatedTypeRingingTone,
   237         EAutomatedTypeMessageAlert,
   238         EAutomatedTypeEmailAlert,
   239         EAutomatedTypeIMAlert,
   240         EAutomatedTypeCalendarAlarm,
   241         EAutomatedTypeScreenSaver,
   242         EAutomatedTypeWallpaper, 
   243         EAutomatedTypeTheme,
   244         EAutomatedTypeClockAlarm, 
   245         EAutomatedTypeOther = KMaxTUint8
   246         };
   247 
   248     enum TDRMHelperDRMMethods
   249         {
   250         EForwardLock = 0x0001, 
   251         ECombinedDelivery = 0x0002, 
   252         ESeparateDelivery = 0x0004, 
   253         ESuperDistribution = 0x0008
   254         };
   255 
   256     public:  // Constructors and destructor
   257         
   258         /**
   259         * Two-phased constructor.
   260         */
   261         IMPORT_C static CDRMHelper* NewL( CCoeEnv& aCoeEnv );
   262         IMPORT_C static CDRMHelper* NewLC( CCoeEnv& aCoeEnv );
   263 
   264         /**
   265         * Two-phased constructor.
   266         * @since Series 60 2.6
   267         */
   268         IMPORT_C static CDRMHelper* NewL();
   269         IMPORT_C static CDRMHelper* NewLC();
   270         
   271         /**
   272         * Two-phased constructor.
   273         * @since Series 60 3.0
   274         */
   275         IMPORT_C static CDRMHelper* NewL( CCoeEnv& aCoeEnv, RFs& aFs );
   276         IMPORT_C static CDRMHelper* NewLC( CCoeEnv& aCoeEnv, RFs& aFs );
   277 
   278         /**
   279         * Two-phased constructor.
   280         * @since Series 60 3.0
   281         */
   282         IMPORT_C static CDRMHelper* NewL( RFs& aFs );
   283         IMPORT_C static CDRMHelper* NewLC( RFs& aFs );
   284         
   285         /**
   286         * Destructor.
   287         */
   288         IMPORT_C ~CDRMHelper();
   289 
   290        
   291     public: 
   292 
   293         /**
   294         * Displays appropriate error note depending on error code.
   295         * @param aError: error code returned by DRM engine
   296         * @param aURI: URI of the file
   297         * @return 
   298         * - Button code, if user selected "buy rights" or "launch rights 
   299         *   manager" in query.
   300         * - 0 if user selected "No", "Back" or "Cancel" (or whatever which 
   301         *   just dismiss the query)
   302         * - 0 if just a simple error note is displayed
   303         */
   304         IMPORT_C TInt HandleErrorL( TInt aError, 
   305             const TDesC8& aURI );
   306 
   307 
   308         /**
   309         * Displays:
   310         * Handles error situations 'rights expired', 'no rights' and
   311         * 'rights database corrupted'.
   312         * @param aError: error code returned by DRM engine
   313         * @param aFileName: full path to file
   314         * @return 
   315         * - Button code, if user selected "buy rights" or "launch rights 
   316         *   manager" in query.
   317         * - 0 if user selected "No", "Back" or "Cancel" (or whatever which 
   318         *   just dismiss the query)
   319         * - 0 if just a simple error note is displayed
   320         */
   321         IMPORT_C TInt HandleErrorL( TInt aError, 
   322             const TDesC& aFileName );
   323 
   324 
   325         /**
   326         * Displays:
   327         * Handles error situations 'rights expired', 'no rights' and
   328         * 'rights database corrupted'.
   329         * @param aError: error code returned by DRM engine
   330         * @param aFileHandle: file handle to the file
   331         * @return 
   332         * - Button code, if user selected "buy rights" or "launch rights 
   333         *   manager" in query.
   334         * - 0 if user selected "No", "Back" or "Cancel" (or anything that 
   335         *   just dismisses the query)
   336         * - 0 if just a simple error note is displayed
   337         * @since  3.0
   338         */
   339         IMPORT_C TInt HandleErrorL( TInt aError, 
   340             RFile& aFileHandle );
   341 
   342        /**
   343         * Handles DRM-specific error situations. Should be called instead of 
   344         * HandleErrorL if user should be asked to play embedded preview or get 
   345         * preview/silent rights if there is no valid rights and either embedded preview or
   346         * preview rights are available.
   347         * @param aError: error code to be handled.
   348         * @param aFile: handle of file for which error was received.
   349         * @param aEmbeddedPreviewUri: contain URI of embedded preview part 
   350         * upon return if caller should play the embedded preview. If embedded
   351         * preview should not be played this is NULL. Must be freed by caller.
   352         * @return KErrNone if the content is now usable (e.g. silent rights or preview rights were gotten). If
   353         *                  the return code is KErrNone and the aEmbeddedPreviewUri parameter is not NULL,
   354         *                  the player should use embedded preview
   355         *         KErrCancel if the user cancelled any of the actions within the function
   356         *         KErrCANoRights and KErrCANoPermission if after the function call, still no rights exist
   357         *         KErrCompletion if the user did launch the browser, but it is not clear whether the content
   358         *                  was activated
   359         * @since S60 3.1
   360         */
   361         IMPORT_C TInt HandleErrorOrPreviewL( 
   362             TInt aError, 
   363             RFile& aFile, 
   364             HBufC8*& aEmbeddedPreviewUri );
   365 
   366        /**
   367         * Handles DRM specific error situations. Should be called instead of 
   368         * HandleErrorL if user should be asked to play embedded preview or get 
   369         * preview/silent rights if there is no valid rights and either embedded preview or
   370         * preview rights are available.
   371         * @param aError: error code to be handled.
   372         * @param aFileName: name of file for which error was received.
   373         * @param aEmbeddedPreviewUri: contain URI of embedded preview part 
   374         * upon return if caller should play the embedded preview. If embedded
   375         * preview should not be played this is NULL. Must be freed by caller.
   376         * @return KErrNone if the content is now usable (e.g. silent rights or preview rights were gotten). If
   377         *                  the return code is KErrNone and the aEmbeddedPreviewUri parameter is not NULL,
   378         *                  the player should use embedded preview
   379         *         KErrCancel if the user cancelled any of the actions within the function
   380         *         KErrCANoRights and KErrCANoPermission if after the function call, still no rights exist
   381         *         KErrCompletion if the user did launch the browser, but it is not clear whether the content
   382         *                  was activated
   383         * @since S60 3.1
   384         */
   385         IMPORT_C TInt HandleErrorOrPreviewL( 
   386             TInt aError, 
   387             const TDesC& aFileName, 
   388             HBufC8*& aEmbeddedPreviewUri );
   389 
   390         /**
   391         * Check rights for the content. If there is less than given amount 
   392         * of usage time/count left, appropriate note is displayed
   393         * depending on situation.
   394         * @param  aURI: URI of the file
   395         * @return Button code
   396         */
   397         // causes conflict with other CheckRightsAmount method, removed for now...
   398 //        IMPORT_C TInt CheckRightsAmountL( const TDesC8& aURI );
   399 
   400 
   401         /**
   402         * Check rights for the file. If there is less than given amount 
   403         * of usage time/count/percentage left, appropriate note is displayed
   404         * depending on situation.
   405         * @param  aFileName: Full path to file
   406         * @return Button code
   407         */
   408         // causes conflict with other CheckRightsAmount method, removed for now...
   409 //        IMPORT_C TInt CheckRightsAmountL( const TDesC& aFileName );
   410                 
   411 
   412         /**
   413         * Check rights for the file. If there is less than given amount 
   414         * of usage time/count/percentage left, appropriate note is displayed
   415         * depending on situation.
   416         * @param  aFileHandle: file handle to the file
   417         * @return Button code
   418         * @since  3.0
   419         */
   420         // causes conflict with other CheckRightsAmount method, removed for now...
   421 //        IMPORT_C TInt CheckRightsAmountL( RFile& aFileHandle );
   422 
   423 
   424         /**
   425         * Check rights for the file. If there is less than given amount 
   426         * of usage time/count left, one of the following note is displayed
   427         * depending on situation:
   428         * 'Usage rights about to expire. View details?'
   429         * 'Usage rights about to expire. %N days left. View details?'
   430         * 'Usage rights about to expire. 1 day left. View details?'
   431         * 'Usage rights about to expire. %N counts left. View details?'
   432         * 'Usage rights about to expire. 1 count left. View details?'
   433         * It also checks that rights are valid and displays appropriate note,
   434         * if they are not.
   435         * @param  aFileName: Full path to file
   436         * @param  aCount: Threshold value for count limit
   437         * @param  aDays: Threshold value for time limit in days
   438         * @return Button code
   439         */
   440         IMPORT_C TInt CheckRightsAmountL( const TDesC& aFileName, 
   441             TInt aCount = KDRMHelperDefaultCountThreshold, 
   442             TInt aDays = KDRMHelperDefaultTimeThreshold );
   443 
   444 
   445         /**
   446         * Check rights for the file. If there is less than given amount 
   447         * of usage time/count left, one of the following note is displayed
   448         * depending on situation:
   449         * 'Usage rights about to expire. View details?'
   450         * 'Usage rights about to expire. %N days left. View details?'
   451         * 'Usage rights about to expire. 1 day left. View details?'
   452         * 'Usage rights about to expire. %N counts left. View details?'
   453         * 'Usage rights about to expire. 1 count left. View details?'
   454         * It also checks that rights are valid and displays appropriate note,
   455         * if they are not.
   456         * @param  aFileHandle: file handle to the file
   457         * @param  aCount: Threshold value for count limit
   458         * @param  aDays: Threshold value for time limit in days
   459         * @return Button code
   460         * @since  3.0
   461         */
   462         IMPORT_C TInt CheckRightsAmountL( RFile& aFileHandle, 
   463             TInt aCount = KDRMHelperDefaultCountThreshold, 
   464             TInt aDays = KDRMHelperDefaultTimeThreshold );
   465 
   466 
   467         /**
   468         * Check rights for the file. If there is less than given amount 
   469         * of usage time/count left, one of the following note is displayed
   470         * depending on situation:
   471         * 'Usage rights about to expire. View details?'
   472         * 'Usage rights about to expire. %N days left. View details?'
   473         * 'Usage rights about to expire. 1 day left. View details?'
   474         * 'Usage rights about to expire. %N counts left. View details?'
   475         * 'Usage rights about to expire. 1 count left. View details?'
   476         * It also checks that rights are valid and displays appropriate note,
   477         * if they are not.
   478         * @param  aUri: Content URI
   479         * @param  aCount: Threshold value for count limit
   480         * @param  aDays: Threshold value for time limit in days
   481         * @return Button code
   482         */
   483         IMPORT_C TInt CheckRightsAmountL( const TDesC8& aUri, 
   484             TInt aCount = KDRMHelperDefaultCountThreshold, 
   485             TInt aDays = KDRMHelperDefaultTimeThreshold );
   486 
   487 
   488         /**
   489         * Check rights for the file. If there is less than aThreshold percent 
   490         * of usage time/count left, one of the following note is displayed
   491         * depending on situation:
   492         * 'Usage rights about to expire. View details?'
   493         * 'Usage rights about to expire. %N days left. View details?'
   494         * 'Usage rights about to expire. 1 day left. View details?'
   495         * 'Usage rights about to expire. %N counts left. View details?'
   496         * 'Usage rights about to expire. 1 count left. View details?'
   497         * It also checks that rights are valid and displays appropriate note,
   498         * if they are not.
   499         * @param  aFileName: Full path to file
   500         * @param  aThreshold: Threshold value in percents for displaying the note
   501         * @return Button code
   502         */
   503         IMPORT_C TInt CheckRightsPercentL( const TDesC& aFileName, 
   504             TInt aThreshold = KDRMHelperDefaultPercentageThreshold );
   505 
   506 
   507         /**
   508         * Check rights for the file. If there is less than aThreshold percent 
   509         * of usage time/count left, one of the following note is displayed
   510         * depending on situation:
   511         * 'Usage rights about to expire. View details?'
   512         * 'Usage rights about to expire. %N days left. View details?'
   513         * 'Usage rights about to expire. 1 day left. View details?'
   514         * 'Usage rights about to expire. %N counts left. View details?'
   515         * 'Usage rights about to expire. 1 count left. View details?'
   516         * It also checks that rights are valid and displays appropriate note,
   517         * if they are not.
   518         * @param  aFileHandle: file handle to the file
   519         * @param  aThreshold: Threshold value in percents for displaying the note
   520         * @return Button code
   521         * @since  3.0
   522         */
   523         IMPORT_C TInt CheckRightsPercentL( RFile& aFileHandle, 
   524             TInt aThreshold = KDRMHelperDefaultPercentageThreshold );
   525 
   526 
   527         /**
   528         * Launches DRM Rights Manager UI embedded with details view related 
   529         * to given content.
   530         * @param aURI: URI of the file
   531         * @return -
   532         */
   533         IMPORT_C void LaunchDetailsViewEmbeddedL( 
   534             const TDesC8& aURI );
   535 
   536 		
   537         /**
   538         * Launches DRM Rights Manager UI embedded with details view related 
   539         * to given file.
   540         * @param aFileName: Full path to file
   541         * @return -
   542         */
   543         IMPORT_C void LaunchDetailsViewEmbeddedL( 
   544             const TDesC& aFileName );
   545 
   546 
   547         /**
   548         * Launches DRM Rights Manager UI embedded with details view related 
   549         * to given file.    
   550         * @param  aFileHandle: file handle to the file
   551         * @return -
   552         * @since  3.0
   553         */
   554         IMPORT_C void LaunchDetailsViewEmbeddedL( 
   555             RFile& aFileHandle );
   556 
   557 
   558         /**
   559         * Launches DRM Rights Manager UI embedded with details view related 
   560         * to given content.
   561         * @param aContentURI: URI of the content
   562         * @return -
   563         */
   564         IMPORT_C void LaunchDetailsViewEmbeddedL( 
   565             const HBufC8* aContentURI );
   566 
   567 
   568         /**
   569         * Gets details of rights object associated of given file.
   570         *
   571         * @param[in]  aFileName Full path to file
   572         * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
   573         * ContentAccess::EPrint or ContentAccess::EExecute 
   574         * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
   575         * and some constraints are returned, rights will become valid in future
   576         * @param[out] aSendingAllowed ETrue if content can be sent
   577         * @param[out] aPlay play constraints, must be deleted by caller
   578         * @param[out] aDisplay display constraints, must be deleted by caller
   579         * @param[out] aExecute execute constraints, must be deleted by caller
   580         * @param[out] aPrint print constraints, must be deleted by caller
   581         *
   582         * @leave KErrArgument file is not DRM-protected.
   583         * @leave KErrCANoRights no rights
   584         * @see caferr.h
   585         * @see caftypes.h
   586         */
   587         IMPORT_C void GetRightsDetailsL( const TDesC& aFileName, 
   588             TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
   589             CDRMHelperRightsConstraints*& aPlay, 
   590             CDRMHelperRightsConstraints*& aDisplay, 
   591             CDRMHelperRightsConstraints*& aExecute, 
   592             CDRMHelperRightsConstraints*& aPrint );
   593 
   594 
   595         /**
   596         * Gets details of rights object associated of given file.
   597         * 
   598         * @param[in]  aFileHandle file handle to the file
   599         * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
   600         * ContentAccess::EPrint or ContentAccess::EExecute 
   601         * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
   602         * and some constraints are returned, rights will become valid in future
   603         * @param[out] aSendingAllowed ETrue if content can be sent
   604         * @param[out] aPlay play constraints, must be deleted by caller
   605         * @param[out] aDisplay display constraints, must be deleted by caller
   606         * @param[out] aExecute execute constraints, must be deleted by caller
   607         * @param[out] aPrint print constraints, must be deleted by caller
   608         *
   609         * @leave KErrArgument file is not DRM-protected.
   610         * @leave KErrCANoRights no rights
   611         * @see caferr.h
   612         * @see caftypes.h
   613         *
   614         * @since  3.0
   615         */
   616         IMPORT_C void GetRightsDetailsL( RFile& aFileHandle,  
   617             TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
   618             CDRMHelperRightsConstraints*& aPlay, 
   619             CDRMHelperRightsConstraints*& aDisplay, 
   620             CDRMHelperRightsConstraints*& aExecute, 
   621             CDRMHelperRightsConstraints*& aPrint );
   622 
   623 
   624         /**
   625         * Gets details of rights object associated of given file.
   626         *
   627         * @param[in]  aFileName Full path to file
   628         * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
   629         * ContentAccess::EPrint or ContentAccess::EExecute 
   630         * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
   631         * and some constraints are returned, rights will become valid in future
   632         * @param[out] aSendingAllowed ETrue if content can be sent
   633         * @param[out] aPlay play constraints, must be deleted by caller
   634         * @param[out] aDisplay display constraints, must be deleted by caller
   635         * @param[out] aExecute execute constraints, must be deleted by caller
   636         * @param[out] aPrint print constraints, must be deleted by caller
   637         *
   638         * @leave KErrArgument file is not DRM-protected.
   639         * @leave KErrCANoRights no rights
   640         * @see caferr.h
   641         * @see caftypes.h
   642         */
   643         IMPORT_C void GetRightsDetailsL( const TDesC& aFileName, 
   644             TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
   645             CDRMRightsConstraints*& aPlay, 
   646             CDRMRightsConstraints*& aDisplay, 
   647             CDRMRightsConstraints*& aExecute, 
   648             CDRMRightsConstraints*& aPrint ); 
   649 
   650 
   651         /**
   652         * Gets details of rights object associated of given file.
   653         * 
   654         * @param[in]  aFileHandle file handle to the file
   655         * @param[in]  aIntent ContentAccess::EPlay, ContentAccess::EView,
   656         * ContentAccess::EPrint or ContentAccess::EExecute 
   657         * @param[out] aExpired ETrue if rights are not valid. If this is ETrue
   658         * and some constraints are returned, rights will become valid in future
   659         * @param[out] aSendingAllowed ETrue if content can be sent
   660         * @param[out] aPlay play constraints, must be deleted by caller
   661         * @param[out] aDisplay display constraints, must be deleted by caller
   662         * @param[out] aExecute execute constraints, must be deleted by caller
   663         * @param[out] aPrint print constraints, must be deleted by caller
   664         *
   665         * @leave KErrArgument file is not DRM-protected.
   666         * @leave KErrCANoRights no rights
   667         * @see caferr.h
   668         * @see caftypes.h
   669         *
   670         * @since  3.0
   671         */
   672         IMPORT_C void GetRightsDetailsL( RFile& aFileHandle,  
   673             TUint32 aIntent, TBool& aExpired, TBool& aSendingAllowed, 
   674             CDRMRightsConstraints*& aPlay, 
   675             CDRMRightsConstraints*& aDisplay, 
   676             CDRMRightsConstraints*& aExecute, 
   677             CDRMRightsConstraints*& aPrint ); 
   678 
   679 
   680         /**
   681         * Registers given content to be used as an automated content. This
   682         * function is used when registering application listens expiry 
   683         * notifications itself
   684         * @param  aURI: content URI
   685         * @return System wide error code (KErrCancel if user pressed no to 
   686         * query).
   687         * @since Series 60 2.6
   688         */
   689         IMPORT_C TInt SetAutomated( const TDesC8& aURI );
   690 
   691 
   692         /**
   693         * Registers given content to be used as an automated content. This
   694         * function is used when registering application listens expiry 
   695         * notifications itself.
   696         * @param  aFileName: Full path to file
   697         * @return System wide error code (KErrCancel if user pressed no to 
   698         * query).
   699         * @since Series 60 2.6
   700         */
   701         IMPORT_C TInt SetAutomated( const TDesC& aFilename );
   702 
   703 
   704         /**
   705         * Registers given content to be used as an automated content. This
   706         * function is used when registering application listens expiry 
   707         * @param  aFileHandle: file handle to the file
   708         * @return System wide error code (KErrCancel if user pressed no to 
   709         * query).
   710         * @since  3.0
   711         */
   712         IMPORT_C TInt SetAutomated( RFile& aFileHandle );
   713 
   714 
   715         /**
   716         * Displays the confirmation query about setting given content as an
   717         * automated content. Note that this function does not actually
   718         * register content, just displays the note
   719         * @param  aURI: content URI
   720         * @return System wide error code (KErrCancel if user pressed no to 
   721         * query).
   722         * @since Series 60 2.6
   723         */
   724         IMPORT_C TInt ShowAutomatedNote( const TDesC8& aURI );
   725 
   726 
   727         /**
   728         * Displays the confirmation query about setting given content as an
   729         * automated content. Note that this function does not actually
   730         * register content, just displays the note
   731         * @param  aFileName: Full path to file
   732         * @return System wide error code (KErrCancel if user pressed no to 
   733         * query).
   734         * @since Series 60 2.6
   735         */
   736         IMPORT_C TInt ShowAutomatedNote( const TDesC& aFilename );
   737 
   738 
   739         /**
   740         * Displays the confirmation query about setting given content as an
   741         * automated content. Note that this function does not actually
   742         * register content, just displays the note
   743         * @param  aFileHandle: file handle to the file
   744         * @return System wide error code (KErrCancel if user pressed no to 
   745         * query).
   746         * @since  3.0
   747         */
   748         IMPORT_C TInt ShowAutomatedNote( RFile& aFileHandle );
   749 
   750 
   751         /**
   752         * Registers given content to be used as an automated content. This
   753         * function is used when phone application listens to expiry notifications.
   754         * @param  aURI: content URI
   755         * @return System wide error code (KErrCancel if user pressed no to 
   756         * query).
   757         * @since Series 60 2.6
   758         */
   759         IMPORT_C TInt SetAutomatedPassive( const TDesC8& aURI );
   760 
   761 
   762         /**
   763         * Registers given content to be used as an automated content. This
   764         * function is used when phone application listens to expiry notifications.
   765         * @param  aFileName: Full path to file
   766         * @return System wide error code (KErrCancel if user pressed no to 
   767         * query).
   768         * @since Series 60 2.6
   769         */
   770         IMPORT_C TInt SetAutomatedPassive( const TDesC& aFilename );
   771 
   772 
   773         /**
   774         * Registers given content to be used as an automated content. This
   775         * function is used when phone application listens to expiry notifications.
   776         * @param  aFileHandle: file handle to the file
   777         * @return System wide error code (KErrCancel if user pressed no to 
   778         * query).
   779         * @since  3.0
   780         */
   781         IMPORT_C TInt SetAutomatedPassive( RFile& aFileHandle );
   782 
   783 
   784         /**
   785         * Registers given content to be used as an automated content without
   786         * confirmation query.
   787         * @param aURI: content URI
   788         * @param aActive: ETrue if registering application itself listens
   789         *                 expiry notifications
   790         * @return System wide error code (KErrCancel if user pressed no to 
   791         * query).
   792         * @since Series 60 2.6
   793         */
   794         IMPORT_C TInt SetAutomatedSilent( const TDesC8& aURI, TBool aActive );
   795 
   796 
   797         /**
   798         * Registers given content to be used as an automated content without
   799         * confirmation query.
   800         * @param  aFileName: Full path to file
   801         * @param  aActive: ETrue if registering application itself listens
   802         *                  expiry notifications
   803         * @return System wide error code (KErrCancel if user pressed no to 
   804         * query).
   805         * @since Series 60 2.6
   806         */
   807         IMPORT_C TInt SetAutomatedSilent( const TDesC& aFilename, 
   808             TBool aActive );
   809 
   810 
   811         /**
   812         * Registers given content to be used as an automated content without
   813         * confirmation query.
   814         * @param  aFileHandle: file handle to the file
   815         * @param  aActive: ETrue if registering application itself listens
   816         *                  expiry notifications
   817         * @return System wide error code (KErrCancel if user pressed no to 
   818         * query).
   819         * @since  3.0
   820         */
   821         IMPORT_C TInt SetAutomatedSilent( RFile& aFileHandle,  
   822             TBool aActive );
   823 
   824 
   825         /**
   826         * Unregisters given content to be used as an automated content.
   827         * @param aURI: content URI
   828         * @return System wide error code.
   829         * @since Series 60 2.6
   830         */
   831         IMPORT_C TInt RemoveAutomated( const TDesC8& aURI );
   832 
   833 
   834         /**
   835         * Unregisters given content to be used as an automated content.
   836         * @param  aFileName: Full path to file
   837         * @return System wide error code.
   838         * @since Series 60 2.6
   839         */
   840         IMPORT_C TInt RemoveAutomated( const TDesC& aFilename );
   841 
   842 
   843         /**
   844         * Unregisters given content to be used as an automated content.
   845         * @param  aFileHandle: file handle to the file
   846         * @return System wide error code.
   847         * @since  3.0
   848         */
   849         IMPORT_C TInt RemoveAutomated( RFile& aFileHandle );
   850 
   851 
   852         /**
   853         * Unregisters given content to be used as an automated content.
   854         * This function must be used when content was registered using 
   855         * SetAutomatedPassive.
   856         * @param  aURI: content URI
   857         * @return System wide error code.
   858         * @since Series 60 2.6
   859         */
   860         IMPORT_C TInt RemoveAutomatedPassive( const TDesC8& aURI );
   861 
   862 
   863         /**
   864         * Unregisters given content to be used as an automated content.
   865         * This function must be used when content was registered using 
   866         * SetAutomatedPassive.
   867         * @param  aFileName: Full path to file
   868         * @return System wide error code.
   869         * @since Series 60 2.6
   870         */
   871         IMPORT_C TInt RemoveAutomatedPassive( const TDesC& aFilename );
   872 
   873 
   874         /**
   875         * Unregisters given content to be used as an automated content.
   876         * This function must be used when content was registered using 
   877         * SetAutomatedPassive.
   878         * @param  aFileHandle: file handle to the file
   879         * @return System wide error code.
   880         * @since  3.0
   881         */
   882         IMPORT_C TInt RemoveAutomatedPassive( RFile& aFileHandle );
   883 
   884 
   885         /**
   886         * Checks if given content can be set as an automated content.
   887         * @param  aURI: content URI
   888         * @param  aValue: ETrue if content can be set as automated.
   889         * @return System wide or DRM specific error code.
   890         * @since Series 60 2.6
   891         */
   892         IMPORT_C TInt CanSetAutomated( const TDesC8& aURI, 
   893             TBool& aValue );
   894 
   895 
   896         /**
   897         * Checks if given content can be set as an automated content.
   898         * @param  aFileName: Full path to file
   899         * @param  aValue: ETrue if content can be set as automated.
   900         * @return System wide or DRM specific error code.
   901         * @since Series 60 2.6
   902         */
   903         IMPORT_C TInt CanSetAutomated( const TDesC& aFilename, 
   904             TBool& aValue );
   905 
   906 
   907         /**
   908         * Checks if given content can be set as an automated content.
   909         * @param  aFileHandle: file handle to the file
   910         * @param  aValue: ETrue if content can be set as automated.
   911         * @return System wide or DRM specific error code.
   912         * @since  3.0
   913         */
   914         IMPORT_C TInt CanSetAutomated( RFile& aFileHandle, 
   915             TBool& aValue );
   916 
   917 
   918         /**
   919         * Informs DRMHelper that idle-screen has been activated.
   920         * @return -
   921         * @since Series 60 2.6
   922         */
   923         IMPORT_C void IndicateIdle();
   924 
   925         /**
   926         * Handle the general UI based error notes 
   927         * @since  3.0
   928         * @param aTextId The code for DRM general notification note.
   929         * @param aURI The DRM files URI, that caused the DRM error.
   930         * @return KErrnone if everything went ok, else wide scale of Symbian errors
   931         */
   932         IMPORT_C TInt ShowDRMUINotification2L( TDRMHelperNotificationID aTextId,
   933             const TDesC8& aURI );
   934 
   935 
   936         /**
   937         * Handle the general UI based error notes 
   938         * @since  3.0
   939         * @param aTextId The code for DRM general notification note.
   940         * @param aFileName The DRM file's name and path, that caused the DRM error.
   941         * @return KErrnone if everything went ok, else wide scale of Symbian errors
   942         */
   943         IMPORT_C TInt ShowDRMUINotification2L( TDRMHelperNotificationID aTextId,
   944             const TDesC& aFileName );
   945 
   946 
   947         /**
   948         * Set count limit for CheckRightsAmountL
   949         * @param aCounts: new count limit for displaying the note.
   950         * @return -
   951         */
   952         IMPORT_C void SetCountLimitL( TUint aCounts );
   953 
   954         
   955         /**
   956         * Set time limit in days for CheckRightsAmountL
   957         * @param aDays: new time limit for displaying the note.
   958         * @return -
   959         */
   960         IMPORT_C void SetTimeLimitL( TUint aDays );
   961 
   962 
   963         /**
   964         * Set percentage limit for CheckRightsAmountL. Applies to both counts and time.
   965         * @param aPercentage: new limit for displaying the note.
   966         * @return -
   967         */
   968         IMPORT_C void SetPercentageLimitL( TUint aPercentage );
   969 
   970 
   971         /**
   972         * GetContentURIList
   973         *
   974         * Returns a list of all content URIs that have rights in the rights 
   975         * database.
   976         *
   977         * @since  2.5
   978         * @param  aURIList: Out parameter for the URI list.
   979         * @return Ok if the URI list could be retreived.
   980         */
   981         IMPORT_C TInt GetContentURIList(
   982             RPointerArray<HBufC8>*& aURIList);
   983 
   984     
   985         /**
   986         * DataTypesCount
   987         *
   988         * Returns the number of previously registered datatypes which are
   989         * supported by the DRM system and associated applications.
   990         *
   991         * @since  2.0
   992         * @param  aCount: Out parameter for the datatype count
   993         * @return EOk if the number of datatypes has been returned correctly
   994         */
   995         IMPORT_C TInt DataTypesCount(
   996             TInt& aCount);
   997 
   998     
   999         /**
  1000         * SupportedDataType
  1001         *
  1002         * Returns a specific datatype which has been registered before by giving an index
  1003         *
  1004         * @since  2.0
  1005         * @param  aIndex: Number of the datatype to return
  1006         * @param  aDataType: Out parameter for the datatype
  1007         * @return EOk if the datatype was returned correctly
  1008         */
  1009         IMPORT_C TInt SupportedDataType(
  1010             const TInt aIndex, TDataType& aDataType);
  1011 
  1012     
  1013         /**
  1014         * RegisterDataType
  1015         *
  1016         * Registers a datatype as a supported datatype.
  1017         *
  1018         * @since  2.0
  1019         * @param  aDataType: Datatype to register
  1020         * @return EOk if the datatype has been registered
  1021         */
  1022         IMPORT_C TInt RegisterDataType(
  1023             const TDataType& aDataType);
  1024 
  1025     
  1026         /**
  1027         * UnRegisterDataType
  1028         *
  1029         * Unregisters a datatype via its index.
  1030         *
  1031         * @since  2.5
  1032         * @param  aIndex: Number of the datatype to unregister
  1033         * @return EOk if the datatype has been unregistered
  1034         */
  1035         IMPORT_C TInt UnRegisterDataType(
  1036             const TInt aIndex);
  1037 
  1038 
  1039         /**
  1040         * SupportedDRMMethods
  1041         *
  1042         * Returns the supported DRM protection methods and the OMA compliance
  1043         * level of the DRM engine
  1044         *
  1045         * @since  2.0
  1046         * @param  aDRMMethod: Out parameter, bit mask containing any 
  1047         *         combination of EForwardLock, ECombinedDelivery, 
  1048         *         ESeparateDelivery etc.
  1049         * @param  aOMALevel: OMA compliance of the DRM engine
  1050         * @return DRMCommon error code
  1051         */
  1052     
  1053         IMPORT_C TInt SupportedDRMMethods2(
  1054             TInt& aDRMMethod, TDRMHelperOMALevel& aOMALevel);
  1055 
  1056     
  1057         /**
  1058         * Consume2
  1059         *
  1060         * Overrides any rights consumption. This function must only be used by
  1061         * applications with user interaction and not by intermediate components.
  1062         * The main use cases are signalling that content is to be installed
  1063         * (including thumbnail generation), or that content is to be consumed.
  1064         * They are characterized as calls to this function with the correct
  1065         * intent (i.e. EPlay or EInstall) and the corresponding action (i.e.
  1066         * telling whether the indicated intent is started or finished).
  1067         * Calls to this function must be the result of a user interaction or
  1068         * otherwise high level event.
  1069         *
  1070         * @since  3.0
  1071         * @param  aContentURI: URI of the content which will be consumed
  1072         * @param  aRightsSpec: the consumption intent (EPlay, EDisplay, EPrint,
  1073         *         EExecute or EInstall)
  1074         * @param  anAction: the consumption action, telling whether the
  1075         *         content consumption starts or finishes.
  1076         * @return EOk if consume action was successfully signalled to the engine.
  1077         */
  1078         IMPORT_C TInt Consume2(
  1079 		    const TDesC8& aContentURI,
  1080 		    TUint32 aRightsSpec,
  1081 		    TDRMHelperConsumeAction anAction);
  1082 
  1083 
  1084         /**
  1085         * ConsumeFile2
  1086         *
  1087         * Overrides any rights consumption. This function must only be used by
  1088         * applications with user interaction and not by intermediate components.
  1089         * The main use cases are signalling that content is to be installed
  1090         * (including thumbnail generation), or that content is to be consumed.
  1091         * They are characterized as calls to this function with the correct
  1092         * intent (i.e. EPlay or EInstall) and the corresponding action (i.e.
  1093         * telling whether the indicated intent is started or finished).
  1094         * Calls to this function must be the result of a user interaction or
  1095         * otherwise high level event.
  1096         *
  1097         * @since  3.0
  1098         * @param  
  1099         * @param  aRightsSpec: the consumption intent (EPlay, EDisplay, EPrint,
  1100         *         EExecute or EInstall)
  1101         * @param  anAction: the consumption action, telling whether the
  1102         *         content consumption starts or finishes.
  1103         * @return EOk if consume action was successfully signalled to the engine.
  1104         */
  1105         IMPORT_C TInt ConsumeFile2(
  1106 		    const TDesC& aFileName,
  1107 		    TUint32 aRightsSpec,
  1108 		    TDRMHelperConsumeAction anAction);
  1109 
  1110 
  1111         /**
  1112         * ConsumeFile2
  1113         *
  1114         * Overrides any rights consumption. This function must only be used by
  1115         * applications with user interaction and not by intermediate components.
  1116         * The main use cases are signalling that content is to be installed
  1117         * (including thumbnail generation), or that content is to be consumed.
  1118         * They are characterized as calls to this function with the correct
  1119         * intent (i.e. EPlay or EInstall) and the corresponding action (i.e.
  1120         * telling whether the indicated intent is started or finished).
  1121         * Calls to this function must be the result of a user interaction or
  1122         * otherwise high level event.
  1123         *
  1124         * @since  3.0
  1125         * @param  aFileHandle: file handle to the file
  1126         * @param  aRightsSpec: the consumption intent (EPlay, EDisplay, EPrint,
  1127         *         EExecute or EInstall)
  1128         * @param  anAction: the consumption action, telling whether the
  1129         *         content consumption starts or finishes.
  1130         * @return EOk if consume action was successfully signalled to the engine.
  1131         */
  1132         IMPORT_C TInt ConsumeFile2(
  1133 		    RFile& aFileHandle, 
  1134 		    TUint32 aRightsSpec,
  1135 		    TDRMHelperConsumeAction anAction);
  1136 
  1137 		/**
  1138         * Acquires rights for given content if rights have been expired or rights are missing.
  1139 		* If content already has valid or future rights, does nothing.
  1140 		* This function should be called when user selects activate from options menu.
  1141 		* Leaves with system-wide error code in case of error.
  1142         * @param aContent: Content object
  1143         */
  1144 		IMPORT_C void ActivateContentL(CData& aContent);
  1145 
  1146 		/**
  1147         * Acquires rights for given content if rights have been expired or rights are missing.
  1148 		* If content already has valid or future rights, does nothing.
  1149 		* This function should be called when user selects activate from options menu.
  1150 		* Leaves with system-wide error code in case of error.
  1151         * @param aFileName: Full path to file
  1152         */
  1153 		IMPORT_C void ActivateContentL(TDesC& aFileName);
  1154 
  1155 		/**
  1156         * Checks if given content has embedded preview or if it is possible to get preview rights for it.
  1157 		* Leaves with system-wide error code in case of error.
  1158         * @param aContent: Content object
  1159 		* @param aPreviewUri: Out: URI of the embedded preview or PreviewRights URL. Must be freed by caller
  1160 		* @return preview type
  1161         */
  1162 		IMPORT_C TDRMHelperPreviewType HasPreviewL(CData& aContent, HBufC8*& aPreviewUri);
  1163 
  1164 		/**
  1165         * Checks if given content has embedded preview or if it is possible to get preview rights for it.
  1166 		* Leaves with system-wide error code in case of error.
  1167         * @param aFileName: Full path to file.
  1168 		* @param aPreviewUri: Out: URI of the embedded preview or PreviewRights URL. Must be freed by caller
  1169 		* @return preview type
  1170         */
  1171 		IMPORT_C TDRMHelperPreviewType HasPreviewL(TDesC& aFileName, HBufC8*& aPreviewUri);
  1172 
  1173 		/**
  1174         * Acquires preview rights for given content.
  1175 		* Leaves with system-wide error code in case of error.
  1176         * @param aContent: Content object
  1177         */
  1178 		IMPORT_C void GetPreviewRightsL(CData& aContent);
  1179 
  1180 		/**
  1181         * Acquires preview rights for given content.
  1182 		* Leaves with system-wide error code in case of error.
  1183         * @param aFileName: Full path to file.
  1184         */
  1185 		IMPORT_C void GetPreviewRightsL(TDesC& aFileName);
  1186 
  1187 		/**
  1188         * This method should be called after embedded preview has been played.
  1189 		* It asks from user if he/she wants to buy rights and acquires those if user agrees.
  1190 		* Leaves with system-wide error code in case of error.
  1191         * @param aContent: Content object.
  1192 		* @return ETrue if user selects to buy rights.
  1193         */
  1194 		IMPORT_C TBool EmbeddedPreviewCompletedL(CData& aContent);
  1195 
  1196 		/**
  1197         * This method should be called after embedded preview has been played.
  1198 		* It asks from user if he/she wants to buy rights and acquires those if user agrees.
  1199 		* Leaves with system-wide error code in case of error.
  1200         * @param aFileName: Full path to file.
  1201 		* @return ETrue if user selects to buy rights.
  1202         */
  1203 		IMPORT_C TBool EmbeddedPreviewCompletedL(TDesC& aFileName);
  1204 
  1205 		/**
  1206         * Checks if given content has InfoUrl.
  1207 		* Leaves with system-wide error code in case of error.
  1208         * @param aContent: Content object.
  1209 		* @param aInfoUrl: Out: InfoUrl. Must be freed by caller.
  1210 		* @return ETrue if content has InfoUrl.
  1211         */
  1212 		IMPORT_C TBool HasInfoUrlL(CData& aContent, HBufC8*& aInfoUrl);
  1213 
  1214 		/**
  1215         * Checks if given content has InfoUrl.
  1216 		* Leaves with system-wide error code in case of error.
  1217         * @param aFileName: Full path to file.
  1218 		* @param aInfoUrl: Out: InfoUrl. Must be freed by caller.
  1219 		* @return ETrue if content has InfoUrl.
  1220         */
  1221 		IMPORT_C TBool HasInfoUrlL(TDesC& aFileName, HBufC8*& aInfoUrl);
  1222 
  1223 		/**
  1224         * Opens browser with InfoUrl of the content.
  1225 		* Leaves with system-wide error code in case of error.
  1226         * @param aContent: Content object.
  1227         */
  1228 		IMPORT_C void OpenInfoUrlL(CData& aContent);
  1229 
  1230 		/**
  1231         * Opens browser with InfoUrl of the content.
  1232 		* Leaves with system-wide error code in case of error.
  1233         * @param aFileName: Full path to file.
  1234         */
  1235 		IMPORT_C void OpenInfoUrlL(TDesC& aFileName);
  1236 
  1237         /**
  1238         * Sets the type of automated content to be registered. This method 
  1239         * should be called before calling any of SetAutomated* methods.
  1240         * @param  aAutomatedType: type of automated content
  1241         * @return System wide error code
  1242         * @since Series 60 3.0
  1243         */
  1244         IMPORT_C TInt SetAutomatedType( TDRMHelperAutomatedType aAutomatedType );
  1245         
  1246         /**
  1247         * Sets media type of content for preview. Should be called prior to 
  1248         * calling HandleErrorOrPreviewL or EmbeddedPreviewCompletedL. 
  1249         * @param aMediaType: media type of content.
  1250         * @return System wide error code
  1251         * @since S60 3.1u
  1252         */
  1253         IMPORT_C TInt SetPreviewMediaType( 
  1254             TDRMHelperPreviewMediaType aMediaType );
  1255 
  1256     protected:  // New functions
  1257         
  1258         /**
  1259         * ?member_description.
  1260         * @since ?Series60_version
  1261         * @param ?arg1 ?description
  1262         * @return ?description
  1263         */
  1264         //?type ?member_function( ?type ?arg1 );
  1265 
  1266     protected:  // Functions from base classes
  1267         
  1268         /**
  1269         * From ?base_class ?member_description
  1270         */
  1271         //?type ?member_function();
  1272 
  1273 
  1274     private:
  1275 
  1276         /**
  1277         * C++ default constructor.
  1278         */
  1279         CDRMHelper( CCoeEnv& aCoeEnv );
  1280         CDRMHelper();
  1281 
  1282         /**
  1283         * By default Symbian 2nd phase constructor is private.
  1284         */
  1285         void ConstructL( RFs* aFs );
  1286 
  1287         // Prohibit copy constructor if not deriving from CBase.
  1288         // ?classname( const ?classname& );
  1289         // Prohibit assigment operator if not deriving from CBase.
  1290         // ?classname& operator=( const ?classname& );
  1291 
  1292         /**
  1293         * Display query dialog
  1294         */
  1295         TInt DisplayQueryWithIdL( TInt aTextResourceId, TInt aQueryResourceId );
  1296         TInt DisplayQueryWithIdValueL( TInt aTextResourceId, TInt aQueryResourceId, 
  1297                                        const TDesC& aString );
  1298         TInt DisplayQueryL( TInt aTextResourceId, TInt aValue );
  1299         TInt DisplayQueryL( TInt aTextResourceId, const TDesC& aString );
  1300         TInt DisplayQueryL( 
  1301         	TInt aTextResourceId, 
  1302         	const TDesC& aString, 
  1303             TInt aValue,
  1304         	TInt aStringPos = -1,
  1305         	TInt aValuePos = -1 );
  1306         TInt DisplayQueryL( TDesC& aPromptText, TInt aQueryResourceId );
  1307 
  1308         /**
  1309         * Display information note
  1310         */
  1311         void DisplayInfoNoteL( TInt aTextResourceId );
  1312         void DisplayInfoNoteL( TInt aTextResourceId, const TDesC& aString );
  1313         void DisplayInfoNoteL( TInt aTextResourceId, TInt aValue );
  1314         void DisplayInfoNoteL( TDesC& aPromptText, TInt aResourceId, 
  1315                                const TDesC& aString = KNullDesC, TInt aValue = -1 );
  1316 
  1317         /**
  1318         * Launch browser embedded
  1319         */
  1320         void LaunchBrowserL( HBufC8* aUrl );
  1321         void LaunchBrowserL( HBufC* aUrl );
  1322 
  1323         /**
  1324         * Get rights-issuer URI from DCF file
  1325         */
  1326         void GetRightsIssuerL( const CData& aContent, HBufC*& aIssuer );
  1327 
  1328         /**
  1329         * Get time and count based constraints
  1330         */
  1331         TInt GetCounts( CDRMRightsConstraints* aConstraint, 
  1332             TUint32& aOriginalCount, TTimeIntervalDays& aDuration );
  1333 
  1334         TInt GetCounts( CDRMRightsConstraints* aConstraint,
  1335             TUint32& aCountLeft, TTime& aEndTime );
  1336             
  1337         TInt GetCounts( CDRMConstraint* aConstraint, 
  1338             TUint32& aOriginalCount, TTimeIntervalDays& aDuration );
  1339 
  1340         TInt GetCounts( CDRMConstraint* aConstraint,
  1341             TUint32& aCountLeft, TTime& aEndTime );
  1342 
  1343         /**
  1344         * Launch rights manager UI
  1345         */
  1346         void LaunchRightsManagerUiL( const TDesC& aParam16 );
  1347 
  1348         /**
  1349         * Form string needed to launch rights manager UI embedded.
  1350         */
  1351         void CreateLaunchParamL( TUint32 aLocalId, const HBufC8* aUrl, 
  1352             HBufC*& aLaunchParam );
  1353 
  1354         /**
  1355         * Strip path and extension from given filename.
  1356         * Caller is responsible for freeing returned buffer
  1357         */
  1358         TPtrC StripPathAndExtension( const TDesC& aFileName );
  1359 
  1360         /**
  1361         * Get expiration details of file.
  1362         * Returns DRMCommon::ENoRights if no rights object found or
  1363         * CDRMRights::TExpiration value
  1364         */
  1365         TInt GetExpirationDetails( HBufC8* aContentUri, TInt aIntent, 
  1366                                    CDRMRights*& aRightsObject );
  1367 
  1368         /**
  1369         * Get expiration time of given rights object
  1370         */
  1371         TInt CalculateEndTime( CDRMRights* aRights, TInt aIntent, 
  1372             TTime& aEndTime, TBool& aInactive );
  1373 
  1374         /**
  1375         * Get end time of given constraint
  1376         */
  1377         TInt GetEndTime( CDRMRightsConstraints* aConstraint, 
  1378             TTime& aEndTime, TBool& aInactive );
  1379         
  1380         /**
  1381         * Register content as automated
  1382         */
  1383         TInt PerformSetAutomatedL( const CData& aContent, TBool aActive );
  1384         TInt DoSetAutomatedL( const TDesC8& aURI, TBool aActive, 
  1385             const HBufC* aMimeType );
  1386 
  1387         /**
  1388         * Display confirmation query about setting as automated. Does not 
  1389         * actually register.
  1390         */
  1391         TInt PerformShowAutomatedNoteL( const CData& aContent );
  1392         TInt DoShowAutomatedNoteL( const TDesC8& aURI, 
  1393             const HBufC* aMimeType );
  1394 
  1395         /**
  1396         * Register content as automated without showing any queries
  1397         */
  1398         TInt PerformSetAutomatedSilentL( const CData& aContent, TBool aActive );
  1399         TInt DoSetAutomatedSilent( const TDesC8& aURI, TBool aActive, TInt aIntent );
  1400 
  1401         /**
  1402         * Returns default intent for the mimetype
  1403         */
  1404         TInt Intent( const HBufC* aMimeType );
  1405         
  1406         /**
  1407         * Checks if content can be used as automated content
  1408         */
  1409         TInt PerformCanSetAutomatedL( const CData& aContent,TBool& aValue );
  1410         TInt DoCanSetAutomated( const TDesC8& aURI, const HBufC* aMimeType, 
  1411             TBool& aValue );
  1412         TBool DoCheckSkinCanSetAutomated(CDRMRights* aRights);
  1413             
  1414         /**
  1415         * Gets mimetype based on content URI
  1416         */
  1417         HBufC* MimeTypeFromURIL( const TDesC8& aURI );
  1418         
  1419         /**
  1420         * Gets corresponding filename (including full path) based on content 
  1421         * URI
  1422         */
  1423         TInt GetFileHandleFromURIL( const TDesC8& aURI, RFile& aFileHandle );
  1424 
  1425         /**
  1426         * Get start time of given rights object
  1427         */
  1428         TInt GetStartTime( CDRMRights* aRights, TInt aIntent, 
  1429             TTime& aStartTime );
  1430 
  1431         /**
  1432         * Displays info note of rights that are not yet valid 
  1433         */
  1434         TInt ShowFutureNoteL( const HBufC* aMimeType, CDRMRights* aRightsObject );
  1435 
  1436         /**
  1437         * Handles error by displaying appropriate note to user.
  1438         */
  1439         TInt DoHandleErrorL( TInt aError, HBufC8* aContentUri, HBufC* aMimeType, 
  1440             HBufC* aRIUrl, HBufC* aDomainRoUrl, HBufC* aEta, HBufC8* aRiId8,
  1441             HBufC8* aDomainId8, const TDesC& aFileName );
  1442             
  1443         /**
  1444         * Checks if rights are about to expire.
  1445         */
  1446         TInt DoCheckRightsPercentL( HBufC8* aContentUri, HBufC* aMimeType, 
  1447             HBufC* aRIUrl, const TDesC& aFileName, TInt aThreshold );
  1448 
  1449         TInt DoCheckRightsAmountL( HBufC8* aContentUri, HBufC* aMimeType, 
  1450             HBufC* aRIUrl, const TDesC& aFileName, TInt aCount, TInt aDays );
  1451             
  1452         /**
  1453         * Gets rights details.
  1454         */
  1455         void DoGetRightsDetailsL( HBufC8* aContentUri, TUint32 aIntent,
  1456             TBool& aExpired, CDRMHelperRightsConstraints*& aPlay,
  1457             CDRMHelperRightsConstraints*& aDisplay, 
  1458             CDRMHelperRightsConstraints*& aExecute,
  1459             CDRMHelperRightsConstraints*& aPrint );
  1460 
  1461         void DoGetRightsDetailsL( CData* aContent, TUint32 aIntent,
  1462             TBool& aExpired, TBool& aSendingAllowed, CDRMRightsConstraints*& aPlay,
  1463             CDRMRightsConstraints*& aDisplay, 
  1464             CDRMRightsConstraints*& aExecute,
  1465             CDRMRightsConstraints*& aPrint );
  1466 		
  1467         /**
  1468         * Get constraints for given rights
  1469         */
  1470         void GetConstraintsL( 
  1471             CDRMRights& aRights, 
  1472             CDRMHelperRightsConstraints*& aPlay,
  1473             CDRMHelperRightsConstraints*& aDisplay,
  1474             CDRMHelperRightsConstraints*& aExecute,
  1475             CDRMHelperRightsConstraints*& aPrint );
  1476 
  1477 		/**
  1478 		* Unregisters automated content.
  1479 		*/
  1480 		TInt PerformRemoveAutomatedL( const CData& aContent, TBool aActive );
  1481 		
  1482 		void HandleServerAppExit(TInt aReason);
  1483 
  1484         void CheckPreviewUriL( 
  1485             const CData* aContent, 
  1486             HBufC*& aEmbeddedPreviewUri, 
  1487             TInt& aPreviewType );
  1488         
  1489         TInt DisplayPopupWindowsForPreviewL(TInt aPreviewType);
  1490 
  1491         /**
  1492 		* Returns correct resource id for automated content notes.
  1493 		* If aExpired is ETrue, aSecondParameter indicates if RI URL exists
  1494 		* If aExpired is EFalse, aSecondParameter indicates if there is one day left
  1495         * aRejectReason tells the constraints which are invalid.
  1496 		*/
  1497 		TInt AutomatedResIdL( TBool aExpired, TBool aSecondParameter, TUint32 aRejectReason );
  1498 
  1499         /** 
  1500         * Returns the correct resource id for expired and no rights notes
  1501         */		    
  1502         TInt ErrorResIdL( const TDesC8& aContentUri, TInt aIntent, 
  1503             TBool aRightsIssuer, TBool aExpired );
  1504 
  1505         /** 
  1506         * Returns the constraints which are invalid
  1507         */		    
  1508         TUint32 RejectReasonL( TInt aIntent, const TDesC8& aContentUri );
  1509         
  1510         /** 
  1511         * Prepares secondary display for DRM notes
  1512         */
  1513         void PrepareSecondaryDisplayL( CEikDialog& aDialog, TInt aResourceId,
  1514                                        const TDesC& aString = KNullDesC, TInt aValue = -1 ); 
  1515 
  1516         /** 
  1517         * Cancels secondary display for DRM notes
  1518         */
  1519         void CancelSecondaryDisplayL( TInt aResourceId );
  1520                 
  1521         /** 
  1522         * Check whether a file as a silent rights URL which can be used, i.e the URL is valid
  1523         * and on the white list.
  1524         */
  1525         HBufC8* HasSilentRightsUrlL( CData* aContent );
  1526         
  1527         /** 
  1528         * Get rights silently
  1529         */
  1530         TInt GetSilentRightsL( const TDesC8& aUrl );
  1531 
  1532         /** 
  1533         * Check if the user has allowed silent rights
  1534         */
  1535         TBool SilentRightsAllowedL();
  1536 
  1537         /** 
  1538         * Check if browser AP has been defined
  1539         */
  1540         TBool BrowserAPDefinedL();
  1541 
  1542     protected:  // Data
  1543         // ?one_line_short_description_of_data
  1544         //?data_declaration;
  1545 
  1546     private:    // Data
  1547         CCoeEnv*                iCoeEnv;
  1548 
  1549         // DRM engine
  1550         DRMCommon*              iDRMCommon;
  1551 
  1552         // used to make launching rights manager ui synchronous
  1553         CActiveSchedulerWait    iWait;
  1554    
  1555         RDRMHelper              iHelperServer;
  1556         
  1557         // is CoeEnv used
  1558         TBool                   iUseCoeEnv;
  1559 
  1560         // Used to read resources when CoeEnv is not available
  1561         CStringResourceReader*  iStringResourceReader;
  1562         
  1563         TBool                   iOma2;
  1564         	
  1565         RPointerArray<CConsumeData> iConsumeList;
  1566         
  1567         TInt                    iAutomatedType;
  1568    
  1569         RFs                     iFs;
  1570         
  1571         TBool                   iFsOwned;
  1572         
  1573         TInt                    iPreviewMediaType;
  1574         
  1575         // Used to queue up global notes
  1576         RPointerArray<CDRMHelperInfoNoteWrapper>      iNoteList;
  1577         
  1578         CSchemeHandler*         iSchemeHandler;
  1579 
  1580         TBool                   iReturnCancel;
  1581 
  1582         // Used to send cancel events to cover ui
  1583         CMediatorEventProvider* iEventProvider;
  1584 
  1585     public:     // Friend classes
  1586     protected:  // Friend classes
  1587     private:    // Friend classes
  1588 
  1589     };
  1590 
  1591 #endif      // __DRMHELPER_H__   
  1592             
  1593 // End of File
  1594