diff -r c76ea6caa649 -r b276843a15ba mpx/tsrc/public/basic/collectiontest/src/collectionbrowser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/tsrc/public/basic/collectiontest/src/collectionbrowser.cpp Tue Sep 21 11:25:55 2010 -0500 @@ -0,0 +1,381 @@ +/* +* Copyright (c) 2002 - 2007 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: MpxCollectionTest test module. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include // KMPXMessageGeneralEvent, KMPXMessageGeneralType +#include +#include +#include +#include +#include +#include +#include +#include +#include "pathoptionmenu.h" +#include "collectionbrowser.h" + +// MACROS + +// DATA TYPES + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCollectionBrowser::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +/* +CCollectionBrowser* CCollectionBrowser::NewL(CConsoleMain* aConsoleMain, + CTestBaseView* aParent, + const TDesC16& aName, + CStifLogger* aLogger, + CMPXCollectionPath* aPath) + { + CCollectionBrowser* self = CCollectionBrowser::NewL(aConsoleMain, + aParent, + aName, + aLogger); + CleanupStack::PopAndDestroy(self); + + return self; + } + */ +// ----------------------------------------------------------------------------- +// CCollectionBrowser::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCollectionBrowser* CCollectionBrowser::NewLC(CConsoleMain* aConsoleMain, + CTestBaseView* aParent, + const TDesC16& aName, + CStifLogger* aLogger, + CMPXCollectionPath* aPath) + { + CCollectionBrowser* self = new (ELeave) CCollectionBrowser(aConsoleMain, + aParent, + aName, + aLogger); + + CleanupStack::PushL( self ); + self->ConstructL(aPath); + + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +CCollectionBrowser::~CCollectionBrowser() + { + iLogger->Log(_L("+CCollectionBrowser::~CCollectionBrowser")); + + if(iCollectionUtility) + iCollectionUtility->Close(); + if(iCollectionPath) + delete iCollectionPath; + if(iPlaybackUtility) + delete iPlaybackUtility; + iLogger->Log(_L("-CCollectionBrowser::~CCollectionBrowser")); + } + +// ----------------------------------------------------------------------------- +// From CTestBaseView +// Initialize the view before display view +// ----------------------------------------------------------------------------- +void CCollectionBrowser::InitializeViewL() + { + iLogger->Log(_L("+CCollectionBrowser::InitializeViewL")); + +/* + // Resynchronize podcast databases + TUid collection = KPodcastCollection; + collection = iCollectionUtility-> + Collection().CollectionIDL( collection ); + TRAP_IGNORE( + iCollectionUtility-> + Collection().CommandL( EMcCmdCollectionInit, + collection.iUid ) ); + + // Resynchronize music collection databases + collection = KLocalCollection; + collection = iCollectionUtility-> + Collection().CollectionIDL( collection ); + iCollectionUtility->Collection().CommandL( EMcCmdCollectionInit, + collection.iUid ); +*/ + + // ConstructL() did the Utility->NewL() already. + + if( iCollectionPath ) + iCollectionUtility->Collection().OpenL(*iCollectionPath); + else + iCollectionUtility->Collection().OpenL(); + + iLogger->Log(_L("-CCollectionBrowser::InitializeViewL")); + } + +// ----------------------------------------------------------------------------- +// From CTestBaseView +// Cleanup the view before deactivate/destroy view +// ----------------------------------------------------------------------------- +void CCollectionBrowser::CleanupViewL() + { + if(iPlaybackUtility) + { + delete iPlaybackUtility; + iPlaybackUtility = NULL; + } + } + +// ----------------------------------------------------------------------------- +// From CTestBaseView +// Handle number key press +// ----------------------------------------------------------------------------- +void CCollectionBrowser::HandleNumKeyL() + { + /* + TKeyCode key = LastKeyPressed(); + if((int)key == '1') + { + CPathOptionMenu* pathOptionMenu = + CPathOptionMenu::NewL(iConsoleMain, + this, + KTxtPathOptionMenu, + iLogger); + CleanupStack::PushL(pathOptionMenu); + CMPXCollectionPath* path = iCollectionUtility->Collection().PathL(); + CleanupStack::PushL(path); + path->SelectL(CurrentIndex()); //change to selected path + pathOptionMenu->SetPathL(*path); + CleanupStack::PopAndDestroy(path); + NextViewL(pathOptionMenu); + CleanupStack::Pop(pathOptionMenu); + iChild = static_cast(pathOptionMenu); + } + */ + } + +// ----------------------------------------------------------------------------- +// From CTestBaseView +// Handle left key press +// ----------------------------------------------------------------------------- +void CCollectionBrowser::HandleLeftKeyL() + { + iLogger->Log(_L("+CCollectionBrowser::HandleLeftKeyL")); + CMPXCollectionPath* currPath = iCollectionUtility->Collection().PathL(); + CleanupStack::PushL( currPath ); + if(currPath->Levels() > 1) + { + iCollectionUtility->Collection().BackL(); + } + // otherwise current path is at or below root level, thereofeore, no back call + CleanupStack::PopAndDestroy( currPath ); + iLogger->Log(_L("-CCollectionBrowser::HandleLeftKeyL")); + } + +// ----------------------------------------------------------------------------- +// From CTestBaseView +// Handle right/enter key press +// ----------------------------------------------------------------------------- +void CCollectionBrowser::HandleRightKeyL() + { + iLogger->Log(_L("+CCollectionBrowser::HandleRightKeyL")); + TInt count = ItemCount(); + TInt index = CurrentIndex(); + + if(count > 0 && index >= 0 && index < count) + { + iCollectionUtility->Collection().OpenL( index ); + } + iLogger->Log(_L("-CCollectionBrowser::HandleRightKeyL")); + } + +// ----------------------------------------------------------------------------- +// CCollectionBrowser::HandleCollectionMediaL +// ----------------------------------------------------------------------------- +// +void CCollectionBrowser::HandleCollectionMediaL( + const CMPXMedia& aMedia, + TInt aError) + { + if(aError == KErrNone) + { + // Assume root plugins title will be returned only + // see CCollectionBrowser::HandleOpenL + TMPXAttribute titleAttr(KMPXMediaIdGeneral,EMPXMediaGeneralTitle); + if( aMedia.IsSupported(titleAttr) ) + { + const TDesC& title = aMedia.ValueText( titleAttr ); + // TestUtility::TestLog(iLogger, _L("%S\n"), &title); + AddItemL(title); + } + DisplayViewL(); + } + } + +// ----------------------------------------------------------------------------- +// CCollectionBrowser::HandleCollectionMessageL +// ----------------------------------------------------------------------------- +// +void CCollectionBrowser::HandleCollectionMessageL(const CMPXMessage& aMsg) + { + iLogger->Log(_L("+CCollectionBrowser::HandleCollectionMessageL")); + + if( aMsg.IsSupported(KMPXMessageGeneralEvent) && + aMsg.IsSupported(KMPXMessageGeneralType) ) + { + TMPXCollectionMessage::TEvent event = + *aMsg.Value( KMPXMessageGeneralEvent ); + TInt type = *aMsg.Value( KMPXMessageGeneralType ); + TInt data = *aMsg.Value( KMPXMessageGeneralData ); + TMPXCollectionMessage message(event, type, data); + + if (message.Event() == TMPXCollectionMessage::EPathChanged && + message.Type() == EMcPathChangedByOpen) + { + // Open new entries + iCollectionUtility->Collection().OpenL(); + } + + iLogger->Log(_L("CCollectionBrowser: Message %d Returned: type=%d data=%d"), + message.Event(), + message.Type(), + message.Data()); + + iLogger->Log(_L("-CCollectionBrowser::HandleCollectionMessageL")); + } + } + +// ----------------------------------------------------------------------------- +// CCollectionBrowser::HandleCollectionMessageL +// ----------------------------------------------------------------------------- +// +void CCollectionBrowser::HandleOpenL(const CMPXMedia& aEntries, + TInt aIndex,TBool aComplete,TInt aError) + { + iLogger->Log(_L("+CCollectionBrowser::HandleOpenL")); + if(!aEntries.IsSupported(TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayContents)) || + !aEntries.IsSupported(TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayCount)) ) + User::Panic(_L("NOT appropiate array media"), -1); + + CMPXMediaArray* media = + aEntries.ValueCObjectL( TMPXAttribute(KMPXMediaIdContainer, EMPXMediaArrayContents) ); + CleanupStack::PushL( media ); + + (void)aComplete; + iItems->Reset(); + if(aError == KErrNone) + { + TMPXAttribute uidAttr(KMPXMediaIdGeneral,EMPXMediaGeneralId); + TMPXAttribute titleAttr(KMPXMediaIdGeneral,EMPXMediaGeneralTitle); + + CMPXCollectionPath* currPath = iCollectionUtility->Collection().PathL(); + CleanupStack::PushL( currPath ); + + for(TInt i=0; iCount(); i++) + { + const CMPXMedia* entry = ( *media )[i]; + if(currPath->Levels() == 1) + { + // Assume at root level, use MediaL to get plugin name + CMPXCollectionPath* rootPath = CMPXCollectionPath::NewL(); + CleanupStack::PushL( rootPath ); + TMPXItemId uid = entry->ValueTObjectL( uidAttr ); + rootPath->AppendL( uid ); + RArray attrs; + CleanupClosePushL( attrs ); + attrs.Append( titleAttr ); + + iCollectionUtility->Collection().MediaL(*rootPath, attrs.Array()); + CleanupStack::PopAndDestroy(2, rootPath ); //attrs, rootPath + } + else + { + // Assume browsing within plugin already + const TDesC& title = entry->ValueText( titleAttr ); + // TestUtility::TestLog(iLogger, _L("%S\n"), &title); + AddItemL(title); + } + } + CleanupStack::PopAndDestroy( currPath ); + } + iPosOnScreen = aIndex; + DisplayViewL(); + + CleanupStack::PopAndDestroy(media); + iLogger->Log(_L("-CCollectionBrowser::HandleOpenL")); + } + +// ----------------------------------------------------------------------------- +// CCollectionBrowser::HandleCollectionMessageL +// ----------------------------------------------------------------------------- +// +void CCollectionBrowser::HandleOpenL(const CMPXCollectionPlaylist& aPlaylist,TInt aError) + { + (void)aError; + CTestPlaybackView* view = CTestPlaybackView::NewL(iConsoleMain, + this, + KTxtTestPlaybackView, + iLogger); + iPlaybackUtility = CTestPlaybackUtility::NewL(KPbModeNewPlayer, + view, + iLogger); + view->AddObserver(iPlaybackUtility); + CleanupStack::PushL(view); + iPlaybackUtility->InitL(aPlaylist); + CleanupStack::Pop(view); + iChild = static_cast(view); + NextViewL(iChild); + } + +// ----------------------------------------------------------------------------- +// C++ default constructor. +// ----------------------------------------------------------------------------- +CCollectionBrowser::CCollectionBrowser(CConsoleMain* aConsoleMain, + CTestBaseView* aParent, + const TDesC& aName, + CStifLogger* aLogger) + : CTestMenuView(aConsoleMain, aParent, aName) + { + iCollectionUtility = NULL; // set by ConstructL() + iLogger = aLogger; + iCollectionPath = NULL; // set by ConstructL() if path != NULL + iPlaybackUtility = NULL; + } + +// ----------------------------------------------------------------------------- +// Second phase constructor +// ----------------------------------------------------------------------------- +void CCollectionBrowser::ConstructL(CMPXCollectionPath* aPath) + { + iLogger->Log(_L("+CCollectionBrowser::ConstructL")); + iCollectionUtility = MMPXCollectionUtility::NewL(this); + if(aPath) + { + iCollectionPath = CMPXCollectionPath::NewL(*aPath); + } + CTestMenuView::ConstructL(); + iLogger->Log(_L("-CCollectionBrowser::ConstructL")); + } +