videofeeds/hgvodui/src/vcxhgvodsearchimpl.cpp
changeset 0 96612d01cf9f
--- /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 <aknnotewrappers.h>
+#include <AknWaitDialog.h>
+#include <StringLoader.h>
+#include <vcxhgvodui.rsg>
+#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 );
+        }
+    }