diff -r 000000000000 -r 96612d01cf9f videofeeds/hgvodui/src/vcxhgvodsearchimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/hgvodui/src/vcxhgvodsearchimpl.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,292 @@ +/* +* 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 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: HG VOD content search related ui implementation* +*/ + + + + +#include +#include +#include +#include +#include "IptvDebug.h" +#include "vcxhgvodui.hrh" + +#include "vcxhgvodutils.h" +#include "vcxhgvodsearchimpl.h" +#include "vcxnscontentsearchif.h" +#include "vcxnsuiengine.h" +#include "vcxhgvodlistimplbase.h" +#include "vcxhgvodmainview.h" + +// Search max string length +const TInt KVcxNsSearchMaxSearchStringLength = 255; + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::~CVcxHgVodSearchImpl() +// Destructor +// ----------------------------------------------------------------------------- +// +CVcxHgVodSearchImpl::~CVcxHgVodSearchImpl() + { + delete iCurrentSearchQuery; + CloseSearchWaitNote(); + } + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::NewL() +// ----------------------------------------------------------------------------- +// +CVcxHgVodSearchImpl* CVcxHgVodSearchImpl::NewL( + CVcxNsUiEngine& aDataProviderIf, + CVcxHgVodMainView& aView ) + { + CVcxHgVodSearchImpl* self = + CVcxHgVodSearchImpl::NewLC( aDataProviderIf, aView ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::NewLC() +// ----------------------------------------------------------------------------- +// +CVcxHgVodSearchImpl* CVcxHgVodSearchImpl::NewLC( + CVcxNsUiEngine& aDataProviderIf, + CVcxHgVodMainView& aView ) + { + CVcxHgVodSearchImpl* self = + new (ELeave) CVcxHgVodSearchImpl( aDataProviderIf, aView ); + CleanupStack::PushL( self ); + self->ConstructL( ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::CVcxHgVodSearchImpl() +// Constructor +// ----------------------------------------------------------------------------- +// +CVcxHgVodSearchImpl::CVcxHgVodSearchImpl( + CVcxNsUiEngine& aDataProviderIf, + CVcxHgVodMainView& aView ) +: iUiEngine( aDataProviderIf ), + iView( aView ) + { + // None + } + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::ConstructL() +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::ConstructL( ) + { + iSearchHandler = iUiEngine.ContentSearchHandlerL(); + } + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::RegisterObserver() +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::RegisterObserver( ) + { + iSearchHandler->RegisterObserver( this ); + } + +// ----------------------------------------------------------------------------- +// CVcxHgVodSearchImpl::DeRegisterObserver() +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::DeRegisterObserver( ) + { + iSearchHandler->DeRegisterObserver( this ); + } + +// ---------------------------------------------------- +// CVcxHgVodSearchImpl::ShowSearchQueryL +// ---------------------------------------------------- +// +void CVcxHgVodSearchImpl::ShowSearchQueryL( TBool aShowPrevious ) + { + IPTVLOGSTRING_LOW_LEVEL( + "VOD ## CVcxHgVodSearchImpl::ShowSearchQueryL()"); + + CAknTextQueryDialog* dlg = NULL; + TInt button = 0; + + HBufC* searchQuery = HBufC::NewLC( KVcxNsSearchMaxSearchStringLength ); + if ( aShowPrevious && iCurrentSearchQuery ) + { + searchQuery->Des().Copy( *iCurrentSearchQuery ); + } + + TPtr tPtr( searchQuery->Des() ); + dlg = CAknTextQueryDialog::NewL( tPtr ); + + dlg->SetMaxLength( KVcxNsSearchMaxSearchStringLength ); + dlg->SetPredictiveTextInputPermitted( ETrue ); + button = dlg->ExecuteLD( R_VCXHG_SEARCH_QUERY_DLG ); + + if ( button ) + { + //User has pressed OK + if ( !iCurrentSearchQuery ) + { + iCurrentSearchQuery = + HBufC::NewL( KVcxNsSearchMaxSearchStringLength ); + } + + iCurrentSearchQuery->Des().Copy( *searchQuery ); + iSearchHandler->SearchL( *iCurrentSearchQuery ); + } + else + { + //user cancelled search - in customized service view + //this case needs to be handled to change active service + iSearchHandler->SearchCancelled(); + } + + CleanupStack::PopAndDestroy( searchQuery ); + } + +// ---------------------------------------------------- +// CVcxHgVodSearchImpl::DisplaySearchWaitNoteL +// ---------------------------------------------------- +// +void CVcxHgVodSearchImpl::DisplaySearchWaitNoteL() + { + CloseSearchWaitNote(); + + iSearchWaitDialog = new ( ELeave ) CAknWaitDialog ( + REINTERPRET_CAST( CEikDialog**, + &iSearchWaitDialog ), + ETrue ); + + iSearchWaitDialog->SetCallback( this ); + iSearchWaitDialog->ExecuteLD( R_VCXHG_SEARCHING_WAIT_NOTE ); + } + +// ---------------------------------------------------- +// CVcxHgVodSearchImpl::CloseSearchWaitNote +// ---------------------------------------------------- +// +void CVcxHgVodSearchImpl::CloseSearchWaitNote() + { + IPTVLOGSTRING_LOW_LEVEL( + "VOD ## CVcxHgVodSearchImpl::CloseSearchWaitNote()"); + + if ( iSearchWaitDialog ) + { + TRAPD( error, iSearchWaitDialog->ProcessFinishedL() ); + if ( error != KErrNone ) + { + delete iSearchWaitDialog; + } + iSearchWaitDialog = NULL; + } + } + +// ----------------------------------------------------------------------------- +// Search progress dialog cancelled +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::DialogDismissedL( TInt aButtonId ) + { + IPTVLOGSTRING_LOW_LEVEL( + "VOD ## CVcxHgVodSearchImpl::DialogDismissedL()"); + + if ( aButtonId == EAknSoftkeyCancel ) + { + iSearchHandler->CancelSearchL(); + } + } + +// ----------------------------------------------------------------------------- +// Handle search result +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::HandleSearchResultL( TBool aSucceeded ) + { + IPTVLOGSTRING2_LOW_LEVEL( + "VOD ## CVcxHgVodSearchImpl::HandleSearchResultL( %d )", (TInt)aSucceeded ); + + CloseSearchWaitNote(); + + if ( aSucceeded ) + { + //Delete current search query, no reason to save it now + //No further actions needed here, content and category providers will handle + //content update and update view + delete iCurrentSearchQuery; + iCurrentSearchQuery = NULL; + } + else + { + HBufC* textFromResource = StringLoader::LoadLC( R_VCXHG_ERROR_SEARCH_FAILED ); + CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue ); + note->ExecuteLD( *textFromResource ); + CleanupStack::PopAndDestroy( textFromResource ); + + //Show search query with previous string + ShowSearchQueryL( ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// New search started. +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::SearchStartedL() + { + IPTVLOGSTRING_LOW_LEVEL( + "VOD ## CVcxHgVodSearchImpl::SearchStartedL()"); + + DisplaySearchWaitNoteL(); + } + +// ----------------------------------------------------------------------------- +// Start current search again. +// ----------------------------------------------------------------------------- +// +void CVcxHgVodSearchImpl::StartSearchL( TBool aUseCurrentQuery ) + { + IPTVLOGSTRING_LOW_LEVEL( + "VOD ## CVcxHgVodSearchImpl::StartSearchL()"); + + if ( aUseCurrentQuery ) + { + //IAP has been selected. Send search request again with current search query. + if ( iCurrentSearchQuery ) + { + iSearchHandler->SearchL( *iCurrentSearchQuery ); + } + } + else + { + TVcxNsAppState appState = iUiEngine.VcAppState(); + if ( appState == EStateContentView ) + { + //Show (no videos) in empty content view + if ( iView.ActiveList() ) + { + iView.ActiveList()->SetEmptyListTextL( R_VCXHG_NO_VIDEOS ); + } + } + + //Show new search query + ShowSearchQueryL( EFalse ); + } + }