videoplayback/hbvideoplaybackview/viewsrc/hbvideobaseplaybackview.cpp
changeset 15 cf5481c2bc0b
child 17 69946d1824c4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/hbvideoplaybackview/viewsrc/hbvideobaseplaybackview.cpp	Fri Apr 16 14:59:52 2010 +0300
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) 2009 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 base playback view
+*
+*/
+
+// Version : %version: da1mmcf#32 %
+
+
+
+//  Include Files
+
+
+
+#include <QTimer>
+#include <QGraphicsSceneEvent>
+
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <hbgesture.h>
+#include <hbinstance.h>
+#include <hbnotificationdialog.h>
+#include <hblabel.h>
+
+#include <textresolver.h>
+#include <mmf/common/mmferrors.h>
+#include <DRMHelper.h>
+
+#include <mpxvideoplaybackdefs.h>
+#include <mpxplaybackcommanddefs.h>
+
+#include "mpxvideo_debug.h"
+#include "mpxvideoviewwrapper.h"
+#include "mpxvideoplaybackuids.hrh"
+#include "hbvideobaseplaybackview.h"
+#include "mpxcommonvideoplaybackview.hrh"
+
+
+//  Member Functions
+
+// -------------------------------------------------------------------------------------------------
+// HbVideoBasePlaybackView::HbVideoBasePlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+HbVideoBasePlaybackView::HbVideoBasePlaybackView()
+    : mVideoMpxWrapper( NULL )
+    , mTimerForClosingView( NULL )
+    , mActivated( false )
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::HbVideoBasePlaybackView()"));
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::initializeVideoPlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::initializeVideoPlaybackView()
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::initializeVideoPlaybackView()"));  
+      
+    //
+    // Need to set to control full screen including status pane area
+    //
+    setContentFullScreen();
+
+    mTimerForClosingView = new QTimer();
+    mTimerForClosingView->setSingleShot( true );
+    mTimerForClosingView->setInterval( 10 );
+    connect( mTimerForClosingView, SIGNAL( timeout() ), this, SIGNAL( activatePreviousView() ) );
+}
+
+// -------------------------------------------------------------------------------------------------
+// HbVideoBasePlaybackView::~HbVideoBasePlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+HbVideoBasePlaybackView::~HbVideoBasePlaybackView()
+{
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::~HbVideoBasePlaybackView()"));
+
+    disconnect( mTimerForClosingView, SIGNAL( timeout() ), this, SIGNAL( activatePreviousView() ) );
+
+    if ( mTimerForClosingView )
+    {
+        if ( mTimerForClosingView->isActive() )
+        {
+            mTimerForClosingView->stop();
+        }
+
+        delete mTimerForClosingView;
+        mTimerForClosingView = NULL;
+    }
+
+
+    setParentItem( 0 );
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::handleActivateView()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::handleActivateView()
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::handleActivateView()"));
+    
+    TRAP_IGNORE( mVideoMpxWrapper = CMPXVideoViewWrapper::NewL( this ) ); 
+    
+    //
+    //  Request the needed Media from the Playback Plugin
+    //
+    TRAP_IGNORE( mVideoMpxWrapper->RequestMediaL() ); 
+    
+    menu()->close();
+
+    hideItems( Hb::AllItems );
+
+    //
+    // Landscape orientation
+    //
+    hbInstance->allMainWindows()[0]->setOrientation( Qt::Horizontal );  
+
+    mActivated = true;   
+       
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::handleDeactivateView()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::handleDeactivateView()
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::handleDeactivateView()"));
+
+    mActivated = false;
+
+    // 
+    //  Close the playback plugin to release all references to previous clip
+    //
+    MPX_TRAPD( err, mVideoMpxWrapper->HandleCommandL( EMPXPbvCmdClose ) );
+
+    if ( mVideoMpxWrapper )
+    {
+        delete mVideoMpxWrapper;
+        mVideoMpxWrapper = NULL;
+    }
+
+    //
+    // go back to device orientation
+    //
+    //hbInstance->allMainWindows()[0]->unsetOrientation();
+
+    showItems( Hb::AllItems );
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::handleClosePlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::handleClosePlaybackView()
+{
+    MPX_DEBUG(
+      _L("HbVideoBasePlaybackView::handleClosePlaybackView()") );
+
+    if ( mVideoMpxWrapper->IsMultiItemPlaylist() )
+    {
+        TRAP_IGNORE( mVideoMpxWrapper->HandleCommandL( EMPXPbvCmdNextListItem ) );
+    }
+    else
+    {
+        closePlaybackView();
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::handlePluginError()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::handlePluginError( int aError )
+{
+    MPX_DEBUG(
+      _L("HbVideoBasePlaybackView::handlePluginError() aError = %d"), aError );
+
+    switch ( aError )
+    {
+        case KErrCancel:
+		{
+            handleClosePlaybackView();
+            break;
+        }
+        case KErrMMDRMNotAuthorized:
+        case KErrCANoRights:
+        case KErrCANoPermission:
+        {
+            const QString qString = "License has expired or it is missing";
+            showDialog( qString );
+            break;
+        }
+        case KMPXVideoCallOngoingError:
+        {
+            const QString qString = "Video playback is not allowed during video call";
+            showDialog( qString, false );
+            break;
+        }
+        case KMPXVideoTvOutPlaybackNotAllowed:
+        {
+            const QString qString = "Protected clip, can not be played through TV-Out";
+            showDialog( qString, false );
+            break;
+        }
+        case KMPXVideoTvOutPlaybackNotAllowedClose:
+        {
+            const QString qString = "Protected clip, can not be played through TV-Out";
+            showDialog( qString );
+            break;
+        }
+        default:
+        {
+            TRAP_IGNORE(  
+
+                //
+                //  TextResolver instance for error resolving.
+                //
+                CTextResolver* textresolver = CTextResolver::NewLC();
+                
+                //
+                //  Resolve the error text
+                //
+                TPtrC text;
+                text.Set( textresolver->ResolveErrorString( aError ) );
+    
+                //
+                // convert to QString
+                //
+                const QString qString( (QChar*)text.Ptr(), text.Length() );
+                
+                //
+                // clean up textresolver
+                //
+                CleanupStack::PopAndDestroy( textresolver );
+
+                //
+                // display error and close playback view
+                //
+                showDialog( qString );
+    
+            );
+        }
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::showDialog
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::showDialog( const QString& qString, bool closeView )
+{
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::showDialog( %s, %d )"), qString.data(), closeView );
+        
+    //
+    // create pop-up dialog for error notes, 
+    //     set its position to the middle of the screen
+    //     and make sure pop-up dialog gets deleted on close.
+    //
+    QRectF screenRect = hbInstance->allMainWindows()[0]->rect();
+    HbNotificationDialog* dlg = new HbNotificationDialog();    
+    dlg->setAttribute( Qt::WA_DeleteOnClose );
+    dlg->setMinimumSize( QSizeF(200, 100) );    
+    dlg->setPreferredPos( QPointF( screenRect.height()/2, screenRect.width()/2 ), 
+                          HbPopup::Center );
+    
+	if ( closeView )
+	{
+        //
+        // connect aboutToClose() signal to handleClosePopupDialog() slot so that
+        // when pop-up dialog is closed, playback view is closed also
+        //
+        connect( dlg, SIGNAL( aboutToClose() ), this, SLOT( handleClosePopupDialog() ) );        
+    }
+	
+    //
+    // convert string to label so text alignment can be set
+    //
+    HbLabel *label = new HbLabel( qString );
+    label->setAlignment( Qt::AlignCenter );
+    
+    //
+    // set label as content widget and show pop-up dialog
+    //
+    dlg->setContentWidget( label );
+    dlg->show();    
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::doClosePlayer
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::doClosePlayer()
+{
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::doClosePlayer()"));
+
+    handleDeactivateView();
+
+    qApp->quit();
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::issuePlayCommand
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::issuePlayCommand()
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::issuePlayCommand()"));
+    TRAPD(err, mVideoMpxWrapper->CreateGeneralPlaybackCommandL( EPbCmdPlay ));
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::issuePlayCommand() error = %d"), err);
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::retrievePdlInformation
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::retrievePdlInformation()
+{
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::retrievePdlInformation()"));
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::handleBufferingState
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::handleBufferingState()
+{
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::handleBufferingState()"));
+
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::closePlaybackView()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::closePlaybackView()
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::closePlaybackView()"));
+
+    mTimerForClosingView->start( 0 );    
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::event()
+// -------------------------------------------------------------------------------------------------
+//
+bool HbVideoBasePlaybackView::event( QEvent *event )
+{
+    bool consumed = false;
+
+    if ( event->type() == QEvent::WindowActivate && mActivated )
+    {
+        TRAP_IGNORE( mVideoMpxWrapper->IssueVideoAppForegroundCmdL( true ) );
+    }
+    else if ( event->type() == QEvent::WindowDeactivate && mActivated )
+    {
+        TRAP_IGNORE( mVideoMpxWrapper->IssueVideoAppForegroundCmdL( false ) );
+    }
+    else
+    {
+         consumed = QGraphicsWidget::event( event );
+    }
+
+    return consumed;
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::getWindow()
+// -------------------------------------------------------------------------------------------------
+//
+RWindow *HbVideoBasePlaybackView::getWindow()
+{
+    return static_cast<RWindow*>( hbInstance->allMainWindows()[0]->effectiveWinId()->DrawableWindow() );
+}
+
+// -------------------------------------------------------------------------------------------------
+// HbVideoBasePlaybackView::mousePress
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::mousePressEvent( QGraphicsSceneMouseEvent *event )
+{
+    //
+    // Needed for gesture framework
+    //
+    event->accept();
+}
+
+// -------------------------------------------------------------------------------------------------
+// HbVideoBasePlaybackView::mouseReleaseEvent
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::mouseReleaseEvent( QGraphicsSceneMouseEvent *event )
+{
+    MPX_ENTER_EXIT(_L("HbVideoBasePlaybackView::mouseReleaseEvent"));
+
+    Q_UNUSED( event );
+
+    emit tappedOnScreen();
+}
+
+// -------------------------------------------------------------------------------------------------
+//   HbVideoBasePlaybackView::handleClosePopupDialog()
+// -------------------------------------------------------------------------------------------------
+//
+void HbVideoBasePlaybackView::handleClosePopupDialog()
+{
+    MPX_DEBUG(_L("HbVideoBasePlaybackView::handleClosePopupDialog()") );
+
+    handleClosePlaybackView();
+}
+
+
+// EOF