--- 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 <barsread.h> // for resource reader
#include <centralrepository.h>
#include <coeutils.h>
+#include <eikserverapp.h>
+
#include <starterclient.h>
@@ -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;
}
--- 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
{
--- 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 <AiwGenericParam.h>
#include <apgcli.h>
+// DCF repository
+#include <DcfRep.h>
+#include <DcfEntry.h>
+
// character conversions
#include <utf.h>
@@ -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
--- 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
--- 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
--- /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 <msvapi.h> // CMsvOperation
+#include <AknServerApp.h> // MAknServerAppExitObserver
+#include <AknLaunchAppService.h> // app service
+#include <DocumentHandler.h> // 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
--- 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.h> //StringLoader
#include <ConeResLoader.h> //rconeresloader
#include <RoMtmUi.rsg> // 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;
}
--- /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