diff -r 000000000000 -r 96612d01cf9f videofeeds/hgvodui/src/vcxhgvodinformationpopup.cpp --- /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 +#include +#include +#include +#include +#include "vcxnsservice.h" +#include "vcxnsserviceproviderif.h" +#include "vcxnsuiengine.h" +#include + +#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 ); + } + }