videoplayback/videoplaybackviews/src/mpxvideopdlplaybackview.cpp
changeset 0 96612d01cf9f
child 8 ce5ada96ab30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videoplaybackviews/src/mpxvideopdlplaybackview.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,421 @@
+/*
+* 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 "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:  Implementation of Video playback view
+*
+*/
+
+// Version : %version: 21 %
+
+
+//  Include Files
+#include <aknViewAppUi.h>
+#include <mpxplaybackutility.h>
+#include <mpxviewutility.h>
+#include <mpxcommandgeneraldefs.h>
+#include <mpxvideoplaybackviews.rsg>
+#include <mmf/common/mmferrors.h>
+#include <eikmenup.h>
+#include <AknTaskList.h>
+
+#include "mpxcommonvideoplaybackview.hrh"
+#include "mpxvideoplaybackuids.hrh"
+#include "mpxvideopdlplaybackview.h"
+#include "mpxvideoplaybackcontainer.h"
+#include "mpxvideoplaybackviewfiledetails.h"
+#include <mpxvideoplaybackdefs.h>
+#include "mpxvideo_debug.h"
+
+//  Member Functions
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::NewLC()
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C CMPXVideoPdlPlaybackView* CMPXVideoPdlPlaybackView::NewLC()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::NewLC()"));
+
+    CMPXVideoPdlPlaybackView* self = new (ELeave) CMPXVideoPdlPlaybackView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::NewL()
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C CMPXVideoPdlPlaybackView* CMPXVideoPdlPlaybackView::NewL()
+{
+    CMPXVideoPdlPlaybackView* self = CMPXVideoPdlPlaybackView::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::CMPXVideoPdlPlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+CMPXVideoPdlPlaybackView::CMPXVideoPdlPlaybackView()
+// note, CBase initialises all member variables to zero
+{
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::ConstructL()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::ConstructL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::ConstructL()"));
+
+    InitializeVideoPlaybackViewL();
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::~CMPXVideoPdlPlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+CMPXVideoPdlPlaybackView::~CMPXVideoPdlPlaybackView()
+{
+    MPX_DEBUG(_L("CMPXVideoPdlPlaybackView::~CMPXVideoPdlPlaybackView()"));
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::Id()
+// -------------------------------------------------------------------------------------------------
+//
+TUid CMPXVideoPdlPlaybackView::Id() const
+{
+    return TUid::Uid( KMPXVIDEOPDLPLAYBACKVIEWUID );
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::ViewImplementationIdId()
+// -------------------------------------------------------------------------------------------------
+//
+TUid CMPXVideoPdlPlaybackView::ViewImplementationId() const
+{
+    return TUid::Uid( KMPXVIDEOPDLPLAYBACKVIEWPLUGINIMPLEMENTATIONUID );
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::CloseEmbeddedPlaybackViewL
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::CloseEmbeddedPlaybackViewL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::CloseEmbeddedPlaybackViewL()"));
+
+    //
+    //  If playback state is playing, pause playback
+    //  If playback state is stopped, close the plugin so file will be moved
+    //
+    if ( iPlaybackState == EPbStatePlaying )
+    {
+        HandleCommandL( EMPXPbvCmdPause );
+    }
+    else if ( iPlaybackState == EPbStateStopped )
+    {
+        //
+        //  Close the playback plugin and clear out the PDL data from the PDL Handler
+        //
+        HandleCommandL( EMPXPbvCmdClose );
+        AppUi()->HandleCommandL( EAknCmdHideInBackground );
+    }
+
+    //
+    //  Embedded PDL
+    //  If we are in the foreground, bring the browser to the foreground
+    //
+    if ( ! BringUpBrowserL() )
+    {
+        //
+        //  Browser cannot be found, exit application
+        //
+        AppUi()->RunAppShutter();
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::BringUpBrowserL
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPdlPlaybackView::BringUpBrowserL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::BringUpBrowserL()"));
+
+    TBool browserFound( EFalse );
+
+    RWsSession& wsSession=iEikonEnv->WsSession();
+    CAknTaskList* taskList = CAknTaskList::NewL( wsSession );
+    TApaTask task = taskList->FindRootApp( TUid::Uid( KBROWSERUID ) );
+
+    delete taskList;
+
+    if ( task.Exists() )
+    {
+        task.BringToForeground();
+        browserFound = ETrue;
+    }
+
+    return browserFound;
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::RetrievePdlInformationL
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::RetrievePdlInformationL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::RetrievePdlInformationL()"));
+
+    CMPXCommand* cmd( CMPXCommand::NewL() );
+    CleanupStack::PushL( cmd );
+
+    cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, ETrue );
+    cmd->SetTObjectValueL<TInt>( KMPXCommandGeneralId, KMPXCommandIdPlaybackPD );
+    cmd->SetTObjectValueL<TMPXPlaybackPdCommand>( KMPXCommandPlaybackGeneralType,
+                                                  EPbCmdGetPdStatus );
+
+    iPlaybackUtility->CommandL( *cmd );
+
+    //
+    //  Parse the PDL information
+    //
+    iPdlState = cmd->ValueTObjectL<TMPXPlaybackPdDownloadState>( KMPXCommandPlaybackPDState );
+    TInt downloadedBytes = cmd->ValueTObjectL<TInt>( KMPXCommandPlaybackPDDownloadedBytes );
+    iDownloadSize = cmd->ValueTObjectL<TInt>( KMPXCommandPlaybackPDTotalBytes );
+
+    MPX_DEBUG(_L("    PDL State = %d, current size = %d, total size = %d"),
+        iPdlState, downloadedBytes, iDownloadSize );
+
+    CleanupStack::PopAndDestroy( cmd );
+
+    if ( iContainer )
+    {
+        //
+        //  Check for a saved download.
+        //  The download size and downloaded bytes will be set to 100 so
+        //  the download progress bar will show 100%
+        //
+        if ( iPdlState == EPbDlStateNotDownloading )
+        {
+            iDownloadSize   = 100;
+            downloadedBytes = 100;
+        }
+
+        iContainer->HandleEventL( EMPXControlCmdSetDownloadSize, iDownloadSize );
+        iContainer->HandleEventL( EMPXControlCmdDownloadUpdated, downloadedBytes );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::HandlePluginErrorL()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::HandlePluginErrorL( TInt aError )
+{
+    MPX_DEBUG(
+      _L("CMPXVideoPdlPlaybackView::HandlePluginErrorL() aError = %d"), aError );
+
+    switch ( aError )
+    {
+        case KErrAbort:
+        {
+            //
+            //  For progressive download mode, this indicates that the file
+            //  could not be played until the entire file is downloaded.
+            //
+            DisplayErrorMessageL( R_MPX_VIDEO_PDL_WAIT_DL_COMPLETE_MSG );
+            ClosePlaybackViewL();
+
+            break;
+        }
+        case KErrEof:
+        {
+            //
+            //  For progressive download mode, this indicates that the file
+            //  has timed out waiting for more data to be downloaded
+            //
+            DisplayErrorMessageL( R_MPX_VIDEO_PDL_ALL_CONTENT_PLAYED_MSG );
+            ClosePlaybackViewL();
+
+            break;
+        }
+        case KErrNotSupported:
+        case KErrUnknown:
+        case KErrMMDecoder:
+        case KErrCorrupt:
+        case KErrTooBig:
+        {
+            //
+            //  We have received an error for an invalid clip.
+            //  If the download is complete, display the invalid
+            //  clip message.  If the download is in progress,
+            //  we do not know if the clip is invalid yet.
+            //  Show message to wait for more data.
+            //
+            if ( iPdlState >= EPbDlStateNotDownloading )
+            {
+                DisplayErrorMessageL( R_MPX_PDL_MORE_DATA_NEEDED_MSG );
+            }
+            else
+            {
+                DisplayErrorMessageL( R_MPX_VIDEO_INVALID_CLIP );
+            }
+
+            ClosePlaybackViewL();
+
+            break;
+        }
+        default:
+        {
+            CMPXVideoBasePlaybackView::HandlePluginErrorL( aError );
+        }
+    }
+}
+
+// -----------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::HandlePdlStateChangeL
+// -----------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::HandlePdlStateChangeL( TInt aState )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::HandlePdlStateChangeL()"),
+                   _L("aState = %d"), aState );
+
+    TMPXPlaybackPdDownloadState prevPdlState = iPdlState;
+    iPdlState = (TMPXPlaybackPdDownloadState)aState;
+
+    switch ( aState )
+    {
+        case EPbDlStateDownloadError:
+        case EPbDlStateDownloadCanceled:
+        {
+            HandleCommandL( EMPXPbvCmdStop );
+            ClosePlaybackViewL();
+            break;
+        }
+        case EPbDlStateDownloading:
+        {
+            if ( prevPdlState == EPbDlStateDownloadPaused )
+            {
+                if ( iContainer )
+                {
+                    iContainer->HandleEventL( EMPXControlCmdClearDownloadPaused );
+                }
+            }
+
+            break;
+        }
+        case EPbDlStateDownloadPaused:
+        {
+            //
+            //  If we are buffering, display information message and pause
+            //
+            if ( iPlaybackState == EPbStateBuffering  )
+            {
+                HandleCommandL( EMPXPbvCmdPause );
+
+                DisplayInfoMessageL( R_MPX_VIDEO_PDL_ALL_CONTENT_PLAYED_MSG, ETrue );
+                HandleCommandL( EAknSoftkeyBack );
+            }
+            else
+            {
+                //
+                //  Download has been paused, let container show
+                //  the download paused icon
+                //
+                if ( iContainer )
+                {
+                    iContainer->HandleEventL( EMPXControlCmdSetDownloadPaused );
+                }
+            }
+
+            break;
+        }
+        case EPbDlStateDownloadCompleted:
+        {
+            if ( iContainer )
+            {
+                iContainer->HandleEventL( EMPXControlCmdDownloadComplete, iDownloadSize );
+            }
+
+            break;
+        }
+        case EPbDlStateNotDownloading:
+        {
+            break;
+        }
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::HandleStoppedStateL
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::HandleStoppedStateL()
+{
+    MPX_DEBUG(_L("CMPXVideoPdlPlaybackView::HandleStoppedStateL()"));
+
+    if ( iPlaybackState == EPbStateStopped )
+    {
+        ClosePlaybackViewL();
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::HandleBufferingStateL
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::HandleBufferingStateL()
+{
+    MPX_DEBUG(_L("CMPXVideoPdlPlaybackView::HandleBufferingStateL()"));
+
+    //
+    //  If the download is paused and the state is buffering,
+    //  display information message
+    //
+    if ( iPdlState == EPbDlStateDownloadPaused  )
+    {
+        HandleCommandL( EMPXPbvCmdPause );
+
+        DisplayInfoMessageL( R_MPX_VIDEO_PDL_ALL_CONTENT_PLAYED_MSG, ETrue );
+        HandleCommandL( EAknSoftkeyBack );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPdlPlaybackView::SendPdlCustomCommandL()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPdlPlaybackView::SendPdlCustomCommandL( TMPXPlaybackPdCommand aCustomCmd )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::SendPdlCustomCommandL"),
+                   _L("aCustomCmd = %d"), aCustomCmd );
+
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+
+    cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, ETrue );
+    cmd->SetTObjectValueL<TInt>( KMPXCommandGeneralId, KMPXCommandIdPlaybackPD );
+    cmd->SetTObjectValueL<TMPXPlaybackPdCommand>( KMPXCommandPlaybackGeneralType, aCustomCmd );
+
+    iPlaybackUtility->CommandL( *cmd );
+
+    CleanupStack::PopAndDestroy( cmd );
+}
+
+// EOF