# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1279209450 -10800 # Node ID 99ea7534c5ab7999f696b8b333729c33d5d8b99f # Parent ad2863178d170183d99ebb14cdc4d1f89b65b39f Revision: 201024 Kit: 2010127 diff -r ad2863178d17 -r 99ea7534c5ab commondrm/drmrightsmanagerui/src/DRMRightsMgrAppUi.cpp --- a/commondrm/drmrightsmanagerui/src/DRMRightsMgrAppUi.cpp Mon Jun 21 15:58:55 2010 +0300 +++ b/commondrm/drmrightsmanagerui/src/DRMRightsMgrAppUi.cpp Thu Jul 15 18:57:30 2010 +0300 @@ -33,6 +33,8 @@ #include // for resource reader #include #include +#include + #include @@ -241,7 +243,8 @@ // void CDRMRightsMgrAppUi::HandleCommandL( TInt aCommand ) { - + CEikAppServer* server = iEikonEnv->AppServer(); + switch ( aCommand ) { case EEikCmdExit: @@ -250,6 +253,17 @@ Exit(); break; } + case EAknSoftkeyClose: + { + + if (server) + { + server->NotifyServerExit(EAknSoftkeyClose); + } + + Exit(); + break; + } default: break; } diff -r ad2863178d17 -r 99ea7534c5ab commondrm/drmrightsmanagerui/src/DRMRightsMgrDetailsView.cpp --- a/commondrm/drmrightsmanagerui/src/DRMRightsMgrDetailsView.cpp Mon Jun 21 15:58:55 2010 +0300 +++ b/commondrm/drmrightsmanagerui/src/DRMRightsMgrDetailsView.cpp Thu Jul 15 18:57:30 2010 +0300 @@ -184,7 +184,7 @@ if ( aCommand == EAknSoftkeyOk ) { - appUi.HandleCommandL( EEikCmdExit ); // Ok softkey was pressed + appUi.HandleCommandL( EAknSoftkeyClose ); // Ok softkey was pressed } else { diff -r ad2863178d17 -r 99ea7534c5ab commondrm/drmutility/src/DrmUiHandlingImpl.cpp --- a/commondrm/drmutility/src/DrmUiHandlingImpl.cpp Mon Jun 21 15:58:55 2010 +0300 +++ b/commondrm/drmutility/src/DrmUiHandlingImpl.cpp Thu Jul 15 18:57:30 2010 +0300 @@ -50,6 +50,10 @@ #include #include +// DCF repository +#include +#include + // character conversions #include @@ -180,6 +184,70 @@ return iapIdOfDest; } +// --------------------------------------------------------- +// UpdateDCFRepositoryL() +// Update saved file to DCFRepository +// --------------------------------------------------------- + +LOCAL_C void UpdateDCFRepositoryL( TDesC& aFullFileName ) + { + CDcfEntry* dcfEntry( NULL ); + CDcfRep* dcfRep( NULL ); + + dcfEntry = CDcfEntry::NewL(); + CleanupStack::PushL( dcfEntry ); + + dcfRep = CDcfRep::NewL(); + CleanupStack::PushL( dcfRep ); + + dcfEntry->SetLocationL( aFullFileName, 0 ); + dcfRep->UpdateL( dcfEntry ); + CleanupStack::PopAndDestroy( dcfRep ); + CleanupStack::PopAndDestroy( dcfEntry ); + } + +// --------------------------------------------------------- +// FindFullFileNameAndUpdateDCFRepositoryL() +// Find full file name for the content and update saved +// file to DCFRepository +// --------------------------------------------------------- + +LOCAL_C void FindFullFileNameAndUpdateDCFRepositoryL( + const RFile& aFileHandle ) + { + HBufC* fullPath( NULL ); + TPtr fullPathPtr( NULL, 0 ); + + fullPath = HBufC::NewLC( KUrlMaxLen ); + fullPathPtr.Set( fullPath->Des() ); + + aFileHandle.FullName( fullPathPtr ); + UpdateDCFRepositoryL( fullPathPtr ); + CleanupStack::PopAndDestroy( fullPath ); + } + +// --------------------------------------------------------- +// FindFullFileNameAndUpdateDCFRepositoryL() +// Find full file name for the content and update saved +// file to DCFRepository +// --------------------------------------------------------- + +LOCAL_C void FindFullFileNameAndUpdateDCFRepositoryL( + const ContentAccess::CData& aFileData ) + { + HBufC* fullPath( NULL ); + TPtr fullPathPtr( NULL, 0 ); + + fullPath = HBufC::NewLC( KUrlMaxLen ); + fullPathPtr.Set( fullPath->Des() ); + + aFileData.GetStringAttribute( DRM::EDrmFullName, + fullPathPtr ); + + UpdateDCFRepositoryL( fullPathPtr ); + CleanupStack::PopAndDestroy( fullPath ); + } + // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- @@ -1420,6 +1488,9 @@ if ( ( !agent.Compare( DRM::KDrmOmaAgentName ) ) || ( iOmaBasedAgentName && !agent.Compare( *iOmaBasedAgentName ) ) ) { + // To embed Domain RO in superdistribution case, register the content + TRAP_IGNORE( FindFullFileNameAndUpdateDCFRepositoryL( *aData.iFile ) ); + HandleOmaErrorL( *content, aData.iIntent, aData.iError, aData.iErrorObserver, aData.iOperationId ); } @@ -1441,6 +1512,7 @@ void DRM::CDrmUiHandlingImpl::PerformHandleErrorDataL( DRM::CDrmUiHandlingData& aData ) { + DRM::TDrmAgentUid agentUid( DRM::EDrmOmaAgent ); IsProtectedL( aData.iFileData, agentUid ); IsProperErrorL( aData.iError ); @@ -1449,7 +1521,11 @@ switch ( agentUid ) { case DRM::EDrmOmaAgent: - + + // To embed Domain RO in superdistribution case, register the content + TRAP_IGNORE( FindFullFileNameAndUpdateDCFRepositoryL( + *aData.iFileData ) ); + HandleOmaErrorL( *aData.iFileData, aData.iIntent, aData.iError, aData.iErrorObserver, aData.iOperationId ); @@ -1557,7 +1633,10 @@ HBufC* riUrl( NULL ); HBufC* domainRiUrl( NULL ); DRM::TDrmUiUrlType urlType( DRM::EUHRightsIssuerUrl ); - + + // To embed Domain RO in superdistribution case, register the content + TRAP_IGNORE( FindFullFileNameAndUpdateDCFRepositoryL( aContent ) ); + User::LeaveIfError( GetContentIdLC( aContent, contentId ) ); GetOmaSilentRightsUrlLC( aContent, silentUrl ); GetOmaRightsIssuerLC( aContent, riUrl ); @@ -1714,7 +1793,7 @@ TInt previewType( ContentAccess::ENoPreview ); TUint32 reason( 0 ); TBool handled( EFalse ); - + User::LeaveIfError( GetContentIdLC( aContent, contentId ) ); // Check that this really is an error situation diff -r ad2863178d17 -r 99ea7534c5ab drm_plat/drm_common_api/tsrc/data/mmc/DRM/content.dcf diff -r ad2863178d17 -r 99ea7534c5ab drm_plat/drm_rights_api/tsrc/data/c/content.dcf diff -r ad2863178d17 -r 99ea7534c5ab drm_pub/oma_drm_caf_agent_api/tsrc/bc/DRM_CAF/data/content.dcf diff -r ad2863178d17 -r 99ea7534c5ab omadrm/drmplugins/drmromtm/group/RoMtmUi.mmp --- a/omadrm/drmplugins/drmromtm/group/RoMtmUi.mmp Mon Jun 21 15:58:55 2010 +0300 +++ b/omadrm/drmplugins/drmromtm/group/RoMtmUi.mmp Thu Jul 15 18:57:30 2010 +0300 @@ -28,6 +28,7 @@ SOURCEPATH ../ui/src SOURCE RoMtmUi.cpp +SOURCE drmmsgwatcherobserver.cpp USERINCLUDE ../inc USERINCLUDE ../ui/inc diff -r ad2863178d17 -r 99ea7534c5ab omadrm/drmplugins/drmromtm/ui/inc/RoMtmUi.h --- a/omadrm/drmplugins/drmromtm/ui/inc/RoMtmUi.h Mon Jun 21 15:58:55 2010 +0300 +++ b/omadrm/drmplugins/drmromtm/ui/inc/RoMtmUi.h Thu Jul 15 18:57:30 2010 +0300 @@ -207,12 +207,12 @@ CMsvOperation* CompletedOperationL( TRequestStatus& aObserverStatus ); TBool ShowQueryL( TDesC16& aFile ); TInt CheckTriggerTypeL( TDesC16& aFile ); + private: TMessageType iType; - CDocumentHandler* iDocHandler; RFs iFs; CEikProcess* iHostProcess; - CAknLaunchAppService* iOpenService; + }; #endif // RIGHTSOBJECTMTMUI_H diff -r ad2863178d17 -r 99ea7534c5ab omadrm/drmplugins/drmromtm/ui/inc/drmmsgwatcherobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmplugins/drmromtm/ui/inc/drmmsgwatcherobserver.h Thu Jul 15 18:57:30 2010 +0300 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Msv operation for drm view closing +* +*/ + + +#ifndef C_DRMMSGWATCHEROBSERVER_H +#define C_DRMMSGWATCHEROBSERVER_H + + + +#include // CMsvOperation +#include // MAknServerAppExitObserver +#include // app service +#include // Document handler + +class CDocumentHandler; + +// CLASS DECLARATION + +/** +* CDrmMsgWatcherObserver +* Simple operation class which watches a service (drm), +* completing when that thread closes. +* +* The passed CMsvSession is not used (merely required to base-construct +* a CMsvOperation). +*/ +NONSHARABLE_CLASS( CDrmMsgWatcherObserver ) : public CMsvOperation, public MAknServerAppExitObserver + { + public: + + static CDrmMsgWatcherObserver* NewL( + CMsvSession& aMsvSession, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + TUid aMtm, + CAiwGenericParamList* aParamList ); + + + static CDrmMsgWatcherObserver* NewL( + CMsvSession& aMsvSession, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + TUid aMtm, + const TDesC& aFileName, + TDataType& aDataType ); + + /** + * C++ constructor + */ + CDrmMsgWatcherObserver( + CMsvSession& aMsvSession, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + TUid aMtm ); + + /** + * Destructor. + */ + ~CDrmMsgWatcherObserver(); + + private: // From MApaServerAppExitObserver + void HandleServerAppExit( TInt aReason ); + + protected: + + + /** + * From CMsvOperation + */ + virtual const TDesC8& ProgressL(); + + /** + * From CMsvOperation + */ + virtual const TDesC8& FinalProgress(); + + /** + * From CActive + */ + virtual void RunL(); + + /** + * From CActive + */ + virtual void DoCancel(); + + /** + * + */ + void Start(); + + private: + void ConstructL( CAiwGenericParamList* aParamList ); + void ConstructL( const TDesC& aFileName, TDataType& aDataType ); + + /** + * Completes observer with the completion code + * @param aCode: Completion code + */ + void CompleteObserver( TInt aCode ); + + + protected:// Data + HBufC8* iProgress; + + private: + CAknLaunchAppService* iService; + CDocumentHandler* iDocHandler; + + }; + +#endif // C_DRMMSGWATCHEROBSERVER_H + +// End of file diff -r ad2863178d17 -r 99ea7534c5ab omadrm/drmplugins/drmromtm/ui/src/RoMtmUi.cpp --- a/omadrm/drmplugins/drmromtm/ui/src/RoMtmUi.cpp Mon Jun 21 15:58:55 2010 +0300 +++ b/omadrm/drmplugins/drmromtm/ui/src/RoMtmUi.cpp Thu Jul 15 18:57:30 2010 +0300 @@ -50,6 +50,8 @@ #include //StringLoader #include //rconeresloader #include // test +#include "drmmsgwatcherobserver.h" + // EXTERNAL DATA STRUCTURES // EXTERNAL FUNCTION PROTOTYPES // CONSTANTS @@ -230,8 +232,6 @@ CRightsObjectMtmUi::CRightsObjectMtmUi( CBaseMtm& aBaseMtm , CRegisteredMtmDll& aRegisteredMtmDll ) : CBaseMtmUi( aBaseMtm , aRegisteredMtmDll ) { - iOpenService = NULL; - iDocHandler = NULL; iHostProcess = NULL; iType = ERo; } @@ -272,9 +272,6 @@ TRAP(err,WriteL(_L8("~CRightsObjectMtmUi"))); #endif iFs.Close(); - - delete iOpenService; - delete iDocHandler; } @@ -568,15 +565,11 @@ BaseMtm().LoadMessageL(); CRichText& body = BaseMtm().Body(); TPtrC ptr16( body.Read(0) ); - const TUid KUidDRMUI = { 0x101f85c7 }; + //const TUid KUidDRMUI = { 0x101f85c7 }; + CDrmMsgWatcherObserver* operation = NULL; if ( iType == ERoapTrigger || iType == ERoapTriggerRoAcquisition ) { - -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-iDocHandler")); -#endif - _LIT8( KRoapTriggerMimeType, "application/vnd.oma.drm.roap-trigger+xml" ); TDataType type = TDataType( KRoapTriggerMimeType ); HBufC* filename = NULL; @@ -593,60 +586,33 @@ return CompletedOperationL( aStatus ); } -#ifdef _DRM_TESTING - WriteL(ptr,ptr.Length()); -#endif - if (iDocHandler) - { - delete iDocHandler; - iDocHandler = NULL; - } -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-iDocHandler-NewL")); -#endif - iDocHandler = CDocumentHandler::NewL(); -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-iDocHandler-SetExitObserver")); -#endif - iDocHandler->SetExitObserver(this); -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-iDocHandler-OpenFileEmbeddedL")); -#endif - iDocHandler->OpenFileEmbeddedL(ptr,type); - CleanupStack::PopAndDestroy(filename); -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-iDocHandler-End")); -#endif + operation = CDrmMsgWatcherObserver::NewL( + Session(), + CActive::EPriorityStandard, + aStatus, + Type(), + ptr, + type ); } else { - if ( iOpenService ) - { - delete iOpenService; - iOpenService = NULL; - } -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-CAknOpenFileService::NewL")); -#endif CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(); TAiwVariant variantObject( ptr16 ); TAiwGenericParam param( EGenericParamFile, variantObject ); paramList->AppendL( param ); - TRAPD( err, iOpenService = CAknLaunchAppService::NewL( KUidDRMUI, this, paramList ) ); - if (err != KErrNone) - { - // just return to Inbox - } + operation = CDrmMsgWatcherObserver::NewL( + Session(), + CActive::EPriorityStandard, + aStatus, + Type(), + paramList ); CleanupStack::PopAndDestroy( paramList ); // paramList } -#ifdef _DRM_TESTING - WriteL(_L8("LaunchEditorApplicationL-End")); -#endif - return CompletedOperationL( aStatus ); + return operation; } diff -r ad2863178d17 -r 99ea7534c5ab omadrm/drmplugins/drmromtm/ui/src/drmmsgwatcherobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmplugins/drmromtm/ui/src/drmmsgwatcherobserver.cpp Thu Jul 15 18:57:30 2010 +0300 @@ -0,0 +1,244 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Msv operation for drm viewing +* +*/ + + + +#include "drmmsgwatcherobserver.h" + + +// CONSTANTS +const TInt KiProgressBufferSize = 1; + + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::NewL +// --------------------------------------------------------- +// +CDrmMsgWatcherObserver* CDrmMsgWatcherObserver::NewL( + CMsvSession& aMsvSession, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + TUid aMtm, + CAiwGenericParamList* aParamList) + { + CDrmMsgWatcherObserver* self = + new(ELeave) CDrmMsgWatcherObserver( + aMsvSession, + aPriority, + aObserverRequestStatus, + aMtm); + CleanupStack::PushL(self); + self->ConstructL( aParamList ); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::NewL +// --------------------------------------------------------- +// +CDrmMsgWatcherObserver* CDrmMsgWatcherObserver::NewL( + CMsvSession& aMsvSession, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + TUid aMtm, + const TDesC& aFileName, + TDataType& aDataType ) + { + CDrmMsgWatcherObserver* self = + new(ELeave) CDrmMsgWatcherObserver( + aMsvSession, + aPriority, + aObserverRequestStatus, + aMtm); + CleanupStack::PushL(self); + self->ConstructL( aFileName, aDataType ); + CleanupStack::Pop(self); + return self; + } + + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::ConstructL +// --------------------------------------------------------- +// +void CDrmMsgWatcherObserver::ConstructL( CAiwGenericParamList* aParamList ) + { + const TUid KUidDRMUI = { 0x101f85c7 }; + iService = CAknLaunchAppService::NewL( KUidDRMUI, this, aParamList ); + iObserverRequestStatus = KRequestPending; + Start(); + } + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::ConstructL +// --------------------------------------------------------- +// +void CDrmMsgWatcherObserver::ConstructL( const TDesC& aFileName, TDataType& aDataType ) + { + iDocHandler = CDocumentHandler::NewL(); + + iDocHandler->SetExitObserver(this); + + iDocHandler->OpenFileEmbeddedL(aFileName, aDataType); + + iObserverRequestStatus = KRequestPending; + Start(); + } + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::CDrmMsgWatcherObserver +// --------------------------------------------------------- +// +CDrmMsgWatcherObserver::CDrmMsgWatcherObserver + ( + CMsvSession& aMsvSession, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + TUid aMtm + ) + : + CMsvOperation( + aMsvSession, + aPriority, + aObserverRequestStatus ) + { + iMtm = aMtm; + } + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::~CDrmMsgWatcherObserver +// --------------------------------------------------------- +// +CDrmMsgWatcherObserver::~CDrmMsgWatcherObserver() + { + Cancel(); + if( iService ) + { + delete iService; + iService = NULL; + } + if( iDocHandler ) + { + delete iDocHandler; + iDocHandler = NULL; + } + delete iProgress; + } + +// ----------------------------------------------------------------------------- +// CDrmMsgWatcherObserver::DoCancel +// From CActive +// ----------------------------------------------------------------------------- +// +void CDrmMsgWatcherObserver::DoCancel() + { + if ( iStatus == KRequestPending ) + { + TRequestStatus* pstat = &iStatus; + User::RequestComplete( pstat, KErrCancel ); + } + CompleteObserver( KErrCancel ); + } + + +// ----------------------------------------------------------------------------- +// CMsgEditorServerWatchingOperation::ProgressL +// From CMsvOperation +// ----------------------------------------------------------------------------- +// +const TDesC8& CDrmMsgWatcherObserver::ProgressL() + { + if ( !iProgress ) + { + iProgress = HBufC8::NewL( KiProgressBufferSize ); + } + return *iProgress; + } + + +// ----------------------------------------------------------------------------- +// CMsgEditorServerWatchingOperation::FinalProgress +// From CMsvOperation +// ----------------------------------------------------------------------------- +// +const TDesC8& CDrmMsgWatcherObserver::FinalProgress() + { + return *iProgress; + } + + +// ----------------------------------------------------------------------------- +// CDrmMsgWatcherObserver::RunL +// From CActive +// ----------------------------------------------------------------------------- +// +void CDrmMsgWatcherObserver::RunL() + { + CompleteObserver( iStatus.Int( ) ); + } + + +// ----------------------------------------------------------------------------- +// CDrmMsgWatcherObserver::Start +// +// ----------------------------------------------------------------------------- +// +void CDrmMsgWatcherObserver::Start() + { + CActiveScheduler::Add( this ); + iStatus = KRequestPending; + SetActive(); + } + + +// ----------------------------------------------------------------------------- +// CDrmMsgWatcherObserver::CompleteObserver +// Completes observer with the completion code +// ----------------------------------------------------------------------------- +// +void CDrmMsgWatcherObserver::CompleteObserver( TInt aCode ) + { + TRequestStatus* status = &iObserverRequestStatus; + + if( ( *status ) == KRequestPending ) + { + User::RequestComplete( status, aCode ); + } + } + + + +// --------------------------------------------------------- +// CDrmMsgWatcherObserver::HandleServerAppExit +// --------------------------------------------------------- +// +void CDrmMsgWatcherObserver::HandleServerAppExit( TInt aReason ) + { + TInt exitMode = aReason; + if ( iStatus == KRequestPending ) + { + TRequestStatus* pstat = &iStatus; + User::RequestComplete( pstat, exitMode ); + } + MAknServerAppExitObserver::HandleServerAppExit( aReason ); + } + +// End of file