diff -r 1221b68b8a5f -r 1481bf457703 commondrm/drmutility/src/drmutilitywmdrmwrapper.cpp --- a/commondrm/drmutility/src/drmutilitywmdrmwrapper.cpp Tue Aug 31 15:29:38 2010 +0300 +++ b/commondrm/drmutility/src/drmutilitywmdrmwrapper.cpp Wed Sep 01 12:21:16 2010 +0100 @@ -31,12 +31,18 @@ #include // access point utils - +#include #include #include #include #include #include +#ifdef __SERIES60_NATIVE_BROWSER +#include +#endif + +#include +#include #include // for WMDRM file details view #include @@ -55,12 +61,19 @@ #include "drmutilitywmdrmutilities.h" #include "wmdrmdlawrapper.h" -#include "drmuidialogids.h" + +using namespace DRM; // CONSTANTS const TInt KMaxUrlLength( 1024 ); const TInt KMaxUrlSanityLength( 102400 ); +#ifndef __SERIES60_NATIVE_BROWSER +const TUid KCRUidBrowser = {0x10008D39}; +const TUint32 KBrowserDefaultAccessPoint = 0x0000000E; +const TUint32 KBrowserAccessPointSelectionMode = 0x0000001E; +#endif + #ifdef _DEBUG // debug panic _LIT( KWmDrmWrapperDebugPanicMessage, "WmDrmWrapperDebugPanic" ); @@ -77,7 +90,8 @@ // DRM::CDrmUtilityWMDrmWrapper::CDrmUtilityWMDrmWrapper() : iCoeEnv( NULL ), - iDrmUtilityUi( NULL ) + iDrmUtilityUi( NULL ), + iWmDrmDlaSupportOn ( ETrue ) { } @@ -89,6 +103,8 @@ void DRM::CDrmUtilityWMDrmWrapper::ConstructL() { User::LeaveIfError( iFs.Connect() ); + TUid u = TUid::Uid( KFeatureIdFfWmdrmDlaSupport ); + TRAPD(err, iWmDrmDlaSupportOn = CFeatureDiscovery::IsFeatureSupportedL( u )); } // ----------------------------------------------------------------------------- @@ -260,7 +276,7 @@ if ( !value ) { - ShowNoRightsNoteL( aContent, reason, aOperationId, aObserver ); + ShowNoRightsNoteL( aContent, reason ); User::LeaveIfError( aContent.GetAttribute( ContentAccess::ECanPlay, value ) ); if ( value ) { @@ -484,7 +500,7 @@ { case DRM::EUHCheckRightsActionDefault: { - ShowNoRightsNoteL( aContent, aReason, aOperationId, aObserver ); + ShowNoRightsNoteL( aContent, aReason ); } break; @@ -542,15 +558,12 @@ // void DRM::CDrmUtilityWMDrmWrapper::ShowNoRightsNoteL( ContentAccess::CData& aContent, - TUint32 /*aReason*/, - TInt aOperationId, - DRM::MDrmHandleErrorObserver* aObserver ) + TUint32 /*aReason*/ ) { - TInt value; TRAPD( err, LoadDlaWrapperL() ); if ( !err ) { - TInt ret( EOk ); + TInt ret( EAknSoftkeyYes ); RFile file; GetRFileFromCDataL( aContent, file ); CleanupClosePushL( file ); @@ -564,21 +577,18 @@ } TFileName fileName; User::LeaveIfError( aContent.GetStringAttribute( DRM::EDrmFileName, fileName ) ); - // Qt dialog not implemented yet - ret = iDrmUtilityUi->DisplayQueryL( EQueryFileWithNoRightsObj, fileName ); + if(iWmDrmDlaSupportOn) + { + ret = iDrmUtilityUi->DisplayQueryL( R_DRM_QUERY_EXPIRED_OR_NO_RO, fileName ); + } + else + { + ret = iDrmUtilityUi->DisplayMessageQueryL( R_DRMUTILITY_SYNC_WITH_PC, R_DRMUTILITY_HEAD_NO_LICENSE, fileName); + } } - - if ( !err && ret == EOk ) + if ( !err && ( ret == EAknSoftkeyYes || ret == EAknSoftkeyOk ) && iWmDrmDlaSupportOn) { TRAP_IGNORE( DlaLicenseAcquisitionL( file ) ); - - // Ask the rights from CAF, same call for both ECanPlay and ECanView - aContent.GetAttribute( ContentAccess::ECanPlay, value ); - // call given HandleErrorObserver - if( value > 0 ) - { - aObserver->RightsAvailable( aOperationId, KErrNone ); - } } CleanupStack::PopAndDestroy( &file ); } @@ -588,7 +598,7 @@ { iDrmUtilityUi = DRM::CDrmUtilityUI::NewL( iCoeEnv ); } - iDrmUtilityUi->DisplayNoteL( EConfLicenceExpired ); + iDrmUtilityUi->DisplayNoteL( R_DRM_INFO_EXPIRED_OR_NO_RO ); } } @@ -767,18 +777,31 @@ void DRM::CDrmUtilityWMDrmWrapper::DlaLicenseAcquisitionL( RFile& aFile ) { - TInt iapId( 0 ); - HBufC* contentUrl( NULL ); - HBufC* htmlData( NULL ); - LoadDlaWrapperL(); - TRAPD( err, iapId = DefaultAccessPointL() ); - if ( !err ) + if( iWmDrmDlaSupportOn ) { - iDlaWrapper->SetIapId( iapId ); + TInt iapId( 0 ); + HBufC* contentUrl( NULL ); + HBufC* htmlData( NULL ); + LoadDlaWrapperL(); + TRAPD( err, iapId = DefaultAccessPointL() ); + if ( !err ) + { + iDlaWrapper->SetIapId( iapId ); + } + iDlaWrapper->AcquireLicenseL( aFile, contentUrl, htmlData ); + delete contentUrl; + delete htmlData; } - iDlaWrapper->AcquireLicenseL( aFile, contentUrl, htmlData ); - delete contentUrl; - delete htmlData; + else + { + if ( !iDrmUtilityUi ) + { + iDrmUtilityUi = DRM::CDrmUtilityUI::NewL( iCoeEnv ); + } + TFileName aFileName; + TInt err = aFile.Name(aFileName); + iDrmUtilityUi->DisplayNoteL( R_DRMUTILITY_SYNC_WITH_PC , aFileName); + } } // ----------------------------------------------------------------------------- @@ -801,38 +824,56 @@ // TInt DRM::CDrmUtilityWMDrmWrapper::DefaultAccessPointL() { - //Fetch default connection + const TInt KDestinationSelectionMode( 2 ); + CRepository* repository( NULL ); + TInt ap( 0 ); + TInt alwaysAsk( 0 ); TUint32 iapd32( 0 ); - TCmDefConnValue defConn; - RCmManager cmManager; - cmManager.OpenLC(); - cmManager.ReadDefConnL(defConn); - if (defConn.iType == ECmDefConnConnectionMethod) - { - iapd32=defConn.iId; - } - else if (defConn.iType == ECmDefConnDestination) + TInt defaultSnap( 0 ); + + repository = CRepository::NewL( KCRUidBrowser ); + CleanupStack::PushL( repository ); + repository->Get( KBrowserDefaultAccessPoint, ap ); + repository->Get( KBrowserAccessPointSelectionMode, alwaysAsk ); + repository->Get( KBrowserNGDefaultSnapId, defaultSnap ); + CleanupStack::PopAndDestroy( repository ); + + if ( ap <= KErrNotFound && defaultSnap <= KErrNotFound ) { - RCmDestination dest( cmManager.DestinationL( defConn.iId ) ); - CleanupClosePushL( dest ); - - if ( dest.ConnectionMethodCount() <= 0 ) - { - User::Leave( KErrNotFound ); - } - - RCmConnectionMethod cMeth( dest.ConnectionMethodL( 0 ) ); - CleanupClosePushL( cMeth ); - - iapd32 = cMeth.GetIntAttributeL( CMManager::ECmIapId ); - CleanupStack::PopAndDestroy( 2, &dest ); //cMeth, dest + alwaysAsk = ETrue; } else { + RCmManager cmManager; + cmManager.OpenLC(); + if ( !alwaysAsk ) + { + iapd32 = + cmManager.GetConnectionMethodInfoIntL( ap, + CMManager::ECmIapId ); + } + else if ( alwaysAsk == KDestinationSelectionMode ) + { + RCmDestination dest( cmManager.DestinationL( defaultSnap ) ); + CleanupClosePushL( dest ); + + if ( dest.ConnectionMethodCount() <= 0 ) + { + User::Leave( KErrNotFound ); + } + + RCmConnectionMethod cMeth( dest.ConnectionMethodL( 0 ) ); + CleanupClosePushL( cMeth ); + + iapd32 = cMeth.GetIntAttributeL( CMManager::ECmIapId ); + CleanupStack::PopAndDestroy( 2, &dest ); //cMeth, dest + } + CleanupStack::PopAndDestroy( &cmManager ); + } + if ( alwaysAsk && alwaysAsk != KDestinationSelectionMode ) + { User::Leave( KErrAccessDenied ); } - CleanupStack::PopAndDestroy(&cmManager); - // End of fetch default connection return iapd32; }