diff -r 839377eedc2b -r befca0ec475f filedetails/filedetailsdialog/src/mppopuplist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filedetails/filedetailsdialog/src/mppopuplist.cpp Wed Sep 01 12:30:28 2010 +0100 @@ -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: 15 % + +#include +#include +#include +#include "mppopuplist.h" +#include "mpxvideo_debug.h" + + +#include +#include +#include +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