--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/hgvodui/src/vcxhgvodinformationpopup.cpp Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,324 @@
+/*
+* Copyright (c) 2005-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: VoD information popup functionality implementation*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <AknInfoPopupNoteController.h>
+#include <aknview.h>
+#include <e32base.h>
+#include <eikmenup.h>
+#include <StringLoader.h>
+#include "vcxnsservice.h"
+#include "vcxnsserviceproviderif.h"
+#include "vcxnsuiengine.h"
+#include <vcxhgvodui.rsg>
+
+#include "vcxhgvodinformationpopup.h"
+
+// CONSTANTS
+const TInt KTimeForPopupInView = 60000; // 60 sec
+const TInt KVcxNsInformationPopupTimerMediumDelay = 100000; // 0,1 sec
+const TInt KVcxNsInformationPopupTimerShortDelay = 100; // 0,0001 sec
+const TInt KNoDelay = 10; // 0,00001 sec
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::CVcxHgVodInformationPopup
+// ---------------------------------------------------------
+//
+CVcxHgVodInformationPopup::CVcxHgVodInformationPopup(
+ CAknView& aParentView,
+ CVcxNsUiEngine& aUiEngine )
+: iParentView ( aParentView ),
+ iUiEngine ( aUiEngine )
+ {
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::ConstructL
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::ConstructL()
+ {
+ iTimer = CIptvTimer::NewL( CActive::EPriorityStandard, *this );
+ iPopupText = StringLoader::LoadL( R_VCXHG_VOD_UPDATING );
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::NewL
+// ---------------------------------------------------------
+//
+CVcxHgVodInformationPopup* CVcxHgVodInformationPopup::NewL(
+ CAknView& aParentView,
+ CVcxNsUiEngine& aUiEngine )
+ {
+ CVcxHgVodInformationPopup* self =
+ new( ELeave ) CVcxHgVodInformationPopup ( aParentView, aUiEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::~CVcxHgVodInformationPopup
+// ---------------------------------------------------------
+//
+CVcxHgVodInformationPopup::~CVcxHgVodInformationPopup()
+ {
+ DeleteControl();
+
+ delete iPopupText;
+
+ if (iTimer->IsActive())
+ {
+ iTimer->Cancel();
+ }
+ delete iTimer;
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::CreateControl
+// ---------------------------------------------------------
+//
+TBool CVcxHgVodInformationPopup::CreateControlL()
+ {
+ TBool controlCreated( EFalse );
+
+ if ( !iPopupController )
+ {
+ iPopupController = CAknInfoPopupNoteController::NewL();
+
+ iPopupController->AddObserverL(*this);
+ iPopupController->SetTimePopupInView( KTimeForPopupInView );
+ //Show immediately
+ iPopupController->SetTimeDelayBeforeShow( KNoDelay );
+
+ if ( !iPopupText )
+ {
+ iPopupText = StringLoader::LoadL( R_VCXHG_VOD_UPDATING );
+ }
+
+ iPopupController->SetTextL( iPopupText->Des() );
+
+ TRect clientRect = iParentView.ClientRect();
+ TPoint topRight( clientRect.iBr.iX, clientRect.iTl.iY );
+ iTopRight = topRight;
+
+ controlCreated = ETrue;
+ }
+
+ iPopupController->SetPositionAndAlignment( iTopRight, EHRightVCenter );
+
+ return controlCreated;
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::DeleteControl
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::DeleteControl()
+ {
+ if ( iPopupController )
+ {
+ iPopupController->RemoveObserver(*this);
+
+ delete iPopupController;
+ iPopupController = NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::SetTextL
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::SetTextL( const TDesC& aText )
+ {
+ if ( iPopupText && iPopupController )
+ {
+ delete iPopupText;
+ iPopupText = NULL;
+ iPopupText = HBufC16::NewL( aText.Length() );
+ *iPopupText = aText;
+ iPopupController->SetTextL( iPopupText->Des() );
+ }
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::Hide
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::Hide()
+ {
+ if ( iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+
+ if ( iPopupController )
+ {
+ iPopupController->HideInfoPopupNote();
+ }
+
+ DeleteControl();
+
+ // Reset the text when hiding on purpose.
+ delete iPopupText;
+ iPopupText = NULL;
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::ShowL
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::ShowL()
+ {
+ CreateControlL();
+
+ if ( iPopupController )
+ {
+ iPopupController->ShowInfoPopupNote();
+ }
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::HandleInfoPopupNoteEvent
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::HandleInfoPopupNoteEvent(
+ CAknInfoPopupNoteController* aController,
+ MAknInfoPopupNoteObserver::TAknInfoPopupNoteEvent aEvent )
+ {
+ if ( aController )
+ {
+ if ( aEvent == EInfoPopupNoteHidden )
+ {
+ TVcxNsAppState state = iUiEngine.VcAppState();
+
+ if ( ( state == EStateContentView || state == EStateCategoryView )
+ && iParentView.IsForeground() )
+ {
+ // Check if still updating --> if yes, show note again.
+ // We do this because any key press closes the note.
+ TRAP_IGNORE
+ (
+ if ( iUiEngine.GetServiceProviderL()->GetActiveServiceData()->
+ GetUpdateStatus() == CVcxNsService::EUpdateOngoing )
+ {
+ if ( iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+ iTimer->After( KVcxNsInformationPopupTimerShortDelay );
+ }
+ )
+ }
+ }
+ else
+ {
+ if ( iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CVcxHgVodInformationPopup::TimerExpired()
+// ---------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::TimerExpired( CIptvTimer* /*aTimer*/ )
+ {
+ DeleteControl();
+ TVcxNsAppState state = iUiEngine.VcAppState();
+
+ if ( state == EStatePlayback || state == EStateNoState )
+ {
+ if ( iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+ return;
+ }
+
+ // When timer expires, check that view still exist (might have been closed)
+ // and update is still ongoing (might have been finished). If both are true
+ // the information pop-up needs to be shown still.
+
+ if ( ( state == EStateContentView || state == EStateCategoryView )
+ && iParentView.IsForeground() )
+ {
+ MVcxNsServiceProviderIf* serviceIf = NULL;
+ TRAPD( leave, serviceIf = iUiEngine.GetServiceProviderL() );
+ if ( !leave && serviceIf &&
+ serviceIf->GetActiveServiceData()->GetUpdateStatus() == CVcxNsService::EUpdateOngoing )
+ {
+ // If there's a menu, we need to delay note for a moment. Can't display with menu.
+ if( iParentView.MenuBar() && iParentView.MenuBar()->IsDisplayed() )
+ {
+ if ( iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+ iTimer->After( KVcxNsInformationPopupTimerMediumDelay );
+ }
+ else
+ {
+ TRAP_IGNORE( ShowL() );
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::HandleForegroundEventL( TBool aForeground )
+ {
+ if ( aForeground )
+ {
+ // Don't active timer after Hide() has been called (iPopupText is then NULL)
+ if ( iPopupText )
+ {
+ iTimer->Cancel();
+ iTimer->After( KVcxNsInformationPopupTimerShortDelay );
+ }
+ }
+ else
+ {
+ // Nothing to do
+ }
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodInformationPopup::HandleSizeChange()
+ {
+ // Must update popup position relative to client rect.
+ // Don't active timer after Hide() has been called (iPopupText is then NULL)
+ if ( iPopupController && iPopupText )
+ {
+ iTimer->Cancel();
+ iTimer->After( KVcxNsInformationPopupTimerShortDelay );
+ }
+ }