filedetails/filedetailsdialog/src/mppopuplist.cpp
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filedetails/filedetailsdialog/src/mppopuplist.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,330 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   CMPPopupList.cpp*
+*/
+
+
+// Version : %version: 13 %
+
+#include <aknpopuplayout.h>
+#include <eiklbx.h>
+#include <MPFileDetails.rsg>
+#include "mppopuplist.h"
+#include "mpxvideo_debug.h"
+
+
+#include <drmuihandling.h>
+#include <drmutility.h>
+#include <drmerrorhandling.h>
+using namespace DRM;
+
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::NewL()
+// -----------------------------------------------------------------------------
+//
+CMPPopupList* CMPPopupList::NewL( CEikListBox* aListBox,
+                                  const TDesC& aFilePath,
+                                  TBool aDrmProtected,
+                                  TBool aReadingDCFOnly )
+{
+    MPX_ENTER_EXIT(_L("CMPPopupList::NewL()"));
+
+    CMPPopupList* self= new (ELeave) CMPPopupList();
+    CleanupStack::PushL(self);
+    self->ConstructL( aListBox, aFilePath, aDrmProtected, aReadingDCFOnly );
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::NewL()
+// -----------------------------------------------------------------------------
+//
+CMPPopupList* CMPPopupList::NewL( CEikListBox* aListBox,
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+                                  RFile64& aFile,
+#else
+                                  RFile& aFile,
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+                                  TBool aDrmProtected,
+                                  TBool aReadingDCFOnly )
+{
+    MPX_DEBUG(_L("CMPPopupList::NewL (%d)"),aDrmProtected);
+
+    CMPPopupList* self= new (ELeave) CMPPopupList();
+    CleanupStack::PushL(self);
+    self->ConstructL( aListBox, aFile, aDrmProtected, aReadingDCFOnly );
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::ConstructL( CEikListBox* aListBox,
+							   const TDesC& aFilePath,
+							   TBool aDrmProtected,
+							   TBool aReadingDCFOnly )
+{
+    MPX_ENTER_EXIT(_L("CMPPopupList::ConstructL()"));
+
+    iFilePath = aFilePath.AllocL();
+    iDrmProtected = aDrmProtected;
+    iReadingDCFOnly = aReadingDCFOnly;
+    iListBox = aListBox;
+    TInt cbaResource;
+
+    //
+	// Construct the softkeys corresponding to Drm or non-Drm status
+	//
+    if ( iDrmProtected && !iReadingDCFOnly )
+    {
+		cbaResource = R_MP_DRM_FILE_DETAILS_SOFTKEYS_OK_VIEW__OK;
+	}
+	else
+	{
+		cbaResource = R_AVKON_SOFTKEYS_OK_EMPTY__OK;
+	}
+
+	//
+	// let base class construct the pop-up list
+	//
+    CAknPopupList::ConstructL( aListBox, cbaResource, AknPopupLayouts::EMenuDoubleWindow );
+}
+
+// CMPPopupList::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::ConstructL( CEikListBox* aListBox,
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+                               RFile64& aFile,
+#else
+                               RFile& aFile,
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+                               TBool aDrmProtected,
+                               TBool aReadingDCFOnly )
+{
+    MPX_ENTER_EXIT(_L("CMPPopupList::ConstructL()"));
+
+    User::LeaveIfError( iFileHandle.Duplicate( aFile ) );
+
+    iDrmProtected = aDrmProtected;
+    iReadingDCFOnly = aReadingDCFOnly;
+    iListBox = aListBox;
+    TInt cbaResource;
+
+    //
+    // Construct the softkeys corresponding to Drm or non-Drm status
+    //
+    if ( iDrmProtected && !iReadingDCFOnly )
+    {
+        cbaResource = R_MP_DRM_FILE_DETAILS_SOFTKEYS_OK_VIEW__OK;
+    }
+    else
+    {
+        cbaResource = R_AVKON_SOFTKEYS_OK_EMPTY__OK;
+    }
+
+    //
+    // let base class construct the pop-up list
+    //
+    CAknPopupList::ConstructL( aListBox, cbaResource, AknPopupLayouts::EMenuDoubleWindow );
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::~CMPPopupList
+// -----------------------------------------------------------------------------
+//
+CMPPopupList::~CMPPopupList()
+{
+MPX_ENTER_EXIT(_L("CMPPopupList::~CMPPopupList()"));
+
+    if( iFileHandle.SubSessionHandle() )
+    {
+        iFileHandle.Close();
+    }
+
+    if( iFilePath )
+    {
+        delete iFilePath;
+    }
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::HandleListBoxEventL
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::HandleListBoxEventL( CEikListBox*  /* aListBox   */ ,
+                                        TListBoxEvent /* aEventType */ )
+{
+MPX_ENTER_EXIT(_L("CMPPopupList::HandleListBoxEventL()"));
+
+    //
+	// Do nothing except update softkeys according to DRM or non-DRM status
+    //
+    UpdateSoftkeysL();
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::UpdateSoftkeysL
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::UpdateSoftkeysL()
+{
+  MPX_ENTER_EXIT(_L("CMPPopupList::UpdateSoftkeysL()"));
+
+    if ( iDrmProtected &&
+		 !iReadingDCFOnly )
+    {
+        //
+        // When item focus in pop-up details dlg is on Drm item (i.e. License),
+        // LSK is 'Ok' and RSK is 'View'
+        //
+        ButtonGroupContainer()->SetCommandSetL(R_MP_DRM_FILE_DETAILS_SOFTKEYS_OK_VIEW__OK);
+    }
+    else
+    {
+        //
+        // When item focus in pop-up details dlg is on all other non-Drm items (i.e. Title),
+        // LSK is 'Ok' and RSK is empty
+        //
+        ButtonGroupContainer()->SetCommandSetL(R_AVKON_SOFTKEYS_OK_EMPTY__OK);
+    }
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::LaunchDrmInfoL
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::LaunchDrmInfoL()
+{
+    MPX_ENTER_EXIT(_L("CMPPopupList::LaunchDrmInfoL()"));
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    TInt64 size(0);
+#else
+    TInt size(0);
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    TInt err(0);
+    TInt handleExists(0);
+
+    if ( iFileHandle.SubSessionHandle() )
+    {
+        err = iFileHandle.Size( size );
+    }
+
+    handleExists =(!err && size )? ETrue:EFalse;
+
+    if(!handleExists)
+    {
+        TUint fileMode = EFileShareReadersOrWriters | EFileStream | EFileRead;
+        RFs fs = CEikonEnv::Static()->FsSession();
+
+        User::LeaveIfError(iFileHandle.Open(fs, iFilePath->Des() , fileMode));
+    }
+
+    if ( iDrmProtected && ( handleExists || iFilePath ) )
+    {
+        CDrmUiHandling* drmUiHandler = CDrmUiHandling::NewLC();
+        TRAPD( err, drmUiHandler->ShowDetailsViewL(iFileHandle) );
+
+        if( err != KErrNone )
+        {
+            drmUiHandler->GetErrorHandler().HandleErrorL( iFileHandle,
+                                                          ContentAccess::EPlay,
+                                                          err,
+                                                          NULL);
+        }
+        CleanupStack::PopAndDestroy(1); //  drmUiHandler
+    }
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::ProcessCommandL
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::ProcessCommandL(TInt aCommandId)
+{
+	MPX_ENTER_EXIT(_L("CMPPopupList::ProcessCommandL()"));
+
+	//
+    // Respond to softkey events.
+	// MP Popup only handles the 'View' softkey event,
+	// all other softkey events are handled by Avkon Pop-up
+	//
+	switch (aCommandId)
+	{
+		case EAknSoftkeyView:
+            LaunchDrmInfoL();
+		    break;
+		default:
+			CAknPopupList::ProcessCommandL(aCommandId);
+			break;
+	}
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CMPPopupList::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+{
+	MPX_ENTER_EXIT(_L("CMPPopupList::OfferKeyEventL()"));
+
+    TKeyResponse ret = EKeyWasNotConsumed;
+
+    if(aKeyEvent.iCode == EKeyEscape)
+    {
+        CancelPopup();
+    }
+    else
+    {
+        // 
+        // pass all remaining events to the list box class
+        //
+        ret = iListBox->OfferKeyEventL(aKeyEvent, aType);
+        
+        //
+        // Update softkeys according to DRM or non-DRM status
+        //
+        UpdateSoftkeysL();
+    }	
+
+    return ret;
+}
+
+// -----------------------------------------------------------------------------
+// CMPPopupList::ReConstructDrmSoftkeysL
+// -----------------------------------------------------------------------------
+//
+void CMPPopupList::ReConstructDrmSoftkeysL( TBool aDrmProtected )
+{
+    MPX_ENTER_EXIT(_L("CMPPopupList::ReConstructDrmSoftkeysL()"));
+
+    //
+    // This method is needed to re-evaluate DRM protection since it may
+    // be inaccurate for playlist during construction time.
+    // Hence, the related softkeys need to be re-constructed here.
+    //
+
+    iDrmProtected = aDrmProtected;
+
+    if ( iDrmProtected && !iReadingDCFOnly )
+    {
+        ButtonGroupContainer()->SetCommandSetL(R_MP_DRM_FILE_DETAILS_SOFTKEYS_OK_VIEW__OK);
+    }
+}
+
+// End of File