hotspotfw/hsbrowser/src/hsbrowserloadeventobserver.cpp
branchRCL_3
changeset 55 f28ada11abbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspotfw/hsbrowser/src/hsbrowserloadeventobserver.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,324 @@
+/*
+* Copyright (c) 2007 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:   Handle load progress events
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32cmn.h>
+#include <eikenv.h>
+#include <aknappui.h>
+#include <akntitle.h>
+#include <aknnavilabel.h>
+#include <apgcli.h>
+#include <ictsclientinterface.h>
+#include "hotspotclientserver.h"
+
+#include "hsbrowsercontainer.h"
+#include "hsbrowserloadeventobserver.h"
+#include "hsbrowserictsobserver.h"
+#include "hsbrowsermodel.h"
+#include "hsbrowsercommon.h"
+#include "am_debug.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CHsBrowserLoadEventObserver::NewL
+// ---------------------------------------------------------
+//
+CHsBrowserLoadEventObserver* 
+CHsBrowserLoadEventObserver::NewL( CHsBrowserContainer* aContainer )
+    {
+    DEBUG( "CHsBrowserLoadEventObserver::NewL()" );
+    CHsBrowserLoadEventObserver* self = new(ELeave)
+	    CHsBrowserLoadEventObserver( aContainer );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CHsBrowserLoadEventObserver::~CHsBrowserLoadEventObserver
+// ---------------------------------------------------------
+//
+CHsBrowserLoadEventObserver::~CHsBrowserLoadEventObserver()
+    {
+    DEBUG( "CHsBrowserLoadEventObserver::~CHsBrowserLoadEventObserver()" );
+    if ( iIcts )
+        {
+        delete iIcts;	
+        }
+    
+    }
+
+// ---------------------------------------------------------
+// CHsBrowserLoadEventObserver::HandleBrowserLoadEventL
+// ---------------------------------------------------------
+//
+void CHsBrowserLoadEventObserver::HandleBrowserLoadEventL(
+    TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+    TUint /* aSize */, 
+    TUint16 /* aTransactionId */ ) 
+    {
+    DEBUG1( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() event=%d", aLoadEvent );
+
+    switch( aLoadEvent )
+        {
+        case TBrCtlDefs::EEventUrlLoadingStart:
+        	{
+        	if ( !iIsFirstLoad )
+        		{
+        		iContainer->UpdateNaviPane( CHsBrowserContainer::ELoadingUrl );
+        		}
+        	else
+        		{
+        		iIsFirstLoad = EFalse;
+        		}
+            // no break, fall through
+        	}
+		case TBrCtlDefs::EEventNewContentDisplayed:
+        case TBrCtlDefs::EEventNewContentStart:
+            {
+            DEBUG( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() EEventNewContentStart" );            
+            if ( iDoIct )
+            	{
+            	DEBUG( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() Start testing internet connectivity.");
+            	iDoIct = EFalse;
+				TRAPD( err, TestInternetConnectivityL() );
+				if ( err != KErrNone )
+					{
+					DEBUG1( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() err=%d.", err );
+					}
+           	    }
+            break;
+            }
+        case TBrCtlDefs::EEventLoadFinished://EEventUrlLoadingFinished:
+            {
+            DEBUG( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() EEventUrlLoadingFinished" );
+            // We've finished loading one element of page
+            iContainer->UpdateNaviPane( CHsBrowserContainer::ELoadingFinished );
+            break;
+            }
+        case TBrCtlDefs::EEventTitleAvailable:
+            {
+            DEBUG( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() EEventTitleAvailable" );
+            UpdateNameL();
+            break;
+            }
+        default:
+        	{
+            break;
+        	}
+        }   // end of switch
+        
+    UpdateDoIctFlagL();
+    
+    if ( iContainer )
+    	{
+        iContainer->DrawNow();
+        iContainer->MakeVisible( ETrue );    	
+    	}   
+    }
+    
+// ---------------------------------------------------------
+// CHsBrowserLoadEventObserver::CHsBrowserLoadEventObserver
+// ---------------------------------------------------------
+//
+CHsBrowserLoadEventObserver::CHsBrowserLoadEventObserver(
+    CHsBrowserContainer* aContainer ) : 
+    iContainer( aContainer ),
+    iIcts( NULL ),
+    iDoIct( EFalse ),
+    iIsFirstLoad( ETrue )
+    {
+    DEBUG( "CHsBrowserLoadEventObserver::CHsBrowserLoadEventObserver()" );
+    }
+
+// ---------------------------------------------------------
+// CHsBrowserLoadEventObserver::ConstructL
+// ---------------------------------------------------------
+//
+void 
+CHsBrowserLoadEventObserver::ConstructL()
+    {
+    DEBUG( "CHsBrowserLoadEventObserver::ConstructL()" );
+    }
+
+// ----------------------------------------------------
+// CHsBrowserLoadEventObserver::UpdateNaviLabel()
+// ----------------------------------------------------
+//
+void CHsBrowserLoadEventObserver::UpdateNaviLabel( const TDesC& aName )
+    {
+    DEBUG( "CHsBrowserLoadEventObserver::UpdateNaviLabel()" );
+    if ( iContainer )
+        {
+        TRAPD( err, iContainer->NaviLabel()->SetTextL( aName ) );
+        if ( err == KErrNone )
+        	{
+        	iContainer->NaviLabel()->DrawDeferred( );
+        	}
+        else
+          	{
+            DEBUG1( "CHsBrowserLoadEventObserver::UpdateNaviLabel() err=%d", err );
+            }
+        }
+    }
+
+// ----------------------------------------------------
+// CHsBrowserLoadEventObserver::UpdateFastSwapNameL()
+// ----------------------------------------------------
+//
+void CHsBrowserLoadEventObserver::UpdateFastSwapNameL( const TDesC& aName )
+	{
+    DEBUG( "CHsBrowserLoadEventObserver::UpdateFastSwapNameL()" );
+
+    RApaLsSession appArcSession;
+    TInt err = KErrNone;
+    TApaAppInfo info;
+    
+    err = appArcSession.Connect(); // connect to AppArc server
+    if( KErrNone == err )
+    	{
+    	CleanupClosePushL( appArcSession );
+    	appArcSession.GetAppInfo( info, KUidHsBrowserApp );
+
+    	if ( aName.Length() > KApaMaxAppCaption )
+    		{
+    		TPtrC shortName = aName.Left( KApaMaxAppCaption );
+    		err = appArcSession.SetAppShortCaption( shortName, ELangNone, KUidHsBrowserApp );
+    		}
+    	else
+    		{
+    		err = appArcSession.SetAppShortCaption( aName, ELangNone, KUidHsBrowserApp );
+    		}
+    	if ( err != KErrNone )
+    		{
+    		DEBUG1( "CHsBrowserLoadEventObserver::UpdateFastSwapNameL() err=%d", err );
+    		}
+    	CleanupStack::PopAndDestroy( &appArcSession );	
+    	}
+	}
+
+// ----------------------------------------------------
+// CHsBrowserLoadEventObserver::UpdateNameL()
+// ----------------------------------------------------
+//
+void CHsBrowserLoadEventObserver::UpdateNameL()
+    {
+    DEBUG( "CHsBrowserLoadEventObserver::UpdateNameL()" );
+    CBrCtlInterface* brCtlInterface = NULL;
+    if ( iContainer )
+    	{
+    	brCtlInterface = iContainer->BrCtlInterface();
+    	}
+    if ( !brCtlInterface )
+    	{
+    	return;
+    	}    
+    HBufC* title = brCtlInterface->PageInfoLC( TBrCtlDefs::EPageInfoTitle );
+    if ( title )
+    	{
+    	UpdateFastSwapNameL( *title );
+   	    CHsBrowserModel* model = iContainer->Model();
+        if ( model )
+        	{
+        	model->SetPageTitle( *title );
+            iContainer->UpdateNaviPane( CHsBrowserContainer::EPageTitleAvailable );
+            }
+        }
+    CleanupStack::PopAndDestroy( title );
+    }
+
+// -----------------------------------------------------------------------------
+// CHsBrowserLoadEventObserver::TestInternetConnectivityL
+// -----------------------------------------------------------------------------
+//
+void CHsBrowserLoadEventObserver::TestInternetConnectivityL()
+    {
+	DEBUG( "CHsBrowserLoadEventObserver::TestInternetConnectivity() 7" );
+	
+	if ( !iContainer )
+		{
+	    DEBUG( "CHsBrowserLoadEventObserver::TestInternetConnectivity() iContainer=NULL" );
+	    return;	
+		}
+    CHsBrowserModel* model = iContainer->Model();
+    if ( !model )
+   	    {
+   	    DEBUG( "CHsBrowserLoadEventObserver::TestInternetConnectivity() model=NULL" );
+   	    return;
+   	    }
+    CHsBrowserIctsObserver* observer = iContainer->HsBrowserIctsObserver();
+    if ( !observer )
+        {
+        DEBUG( "CHsBrowserLoadEventObserver::TestInternetConnectivity() observer=NULL" );
+        return;
+        }
+    DEBUG1( "CHsBrowserLoadEventObserver::TestInternetConnectivity() iap=%d", model->IapId() );
+    DEBUG1( "CHsBrowserLoadEventObserver::TestInternetConnectivity() netid=%d", model->NetId() );
+    if ( !iIcts )
+        {
+        iIcts = CIctsClientInterface::NewL( model->IapId(), model->NetId(), *observer );
+        }
+    else
+        {
+        // stop previously started polling
+        iIcts->StopPolling();
+        }
+    // Start polling
+    DEBUG( "CHsBrowserLoadEventObserver::TestInternetConnectivity() starting ICT" );
+    iIcts->StartPolling( KTotalPollingTime, KExecutionTimeInterval );
+    }
+
+// -----------------------------------------------------------------------------
+// CHsBrowserLoadEventObserver::UpdateDoIctFlagL
+// -----------------------------------------------------------------------------
+//
+void CHsBrowserLoadEventObserver::UpdateDoIctFlagL()
+	{
+	DEBUG( "CHsBrowserLoadEventObserver::UpdateDoIctFlagL()" );
+    CBrCtlInterface* brCtlInterface = NULL;
+    CHsBrowserModel* model = NULL;
+    if ( iContainer )
+    	{
+    	brCtlInterface = iContainer->BrCtlInterface();
+    	model = iContainer->Model();
+    	}
+    if ( brCtlInterface && model )
+    	{
+        // get url
+        HBufC* url = brCtlInterface->PageInfoLC( TBrCtlDefs::EPageInfoUrl );
+        if ( url )
+        	{
+            DEBUG1( "url=%S", url );        
+            if ( url->Compare( *model->Url() ) == 0 )
+               { // match
+               iDoIct = ETrue;
+               DEBUG( "CHsBrowserLoadEventObserver::HandleBrowserLoadEventL() iDoIct = ETrue." );
+               }
+    	    }	
+        else
+        	{
+        	DEBUG( "CHsBrowserLoadEventObserver::UpdateDoIctFlagL() url=NULL" );
+        	}
+        CleanupStack::PopAndDestroy( url );
+    	}
+	}
+
+// End of File