mpx/tsrc/public/basic/collectiontest/src/collectionbrowser.cpp
changeset 62 b276843a15ba
--- /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 <mpxcollectionutility.h>
+#include <mpxcollectionpath.h>
+#include <mpxcollectionplaylist.h>
+#include <mpxplaybackframeworkdefs.h>
+#include <mpxcollectionmessage.h>
+#include <mpxcollectionframeworkdefs.h>
+#include <mpxmessagegeneraldefs.h> // KMPXMessageGeneralEvent, KMPXMessageGeneralType
+#include <mpxmediageneraldefs.h>
+#include <mpxmediaarray.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxattribute.h>
+#include <stiflogger.h>
+#include <testutility.h>
+#include <testplaybackutility.h>
+#include <testplaybackview.h>
+#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<CTestBaseView*>(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<TMPXCollectionMessage::TEvent>( KMPXMessageGeneralEvent );
+        TInt type = *aMsg.Value<TInt>( KMPXMessageGeneralType );
+        TInt data = *aMsg.Value<TInt>( 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<CMPXMediaArray>( 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; i<media->Count(); 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<TMPXItemId>( uidAttr );
+                rootPath->AppendL( uid );
+                RArray<TMPXAttribute> 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<CTestBaseView*>(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"));
+    }
+