browserui/browser/BrowserAppSrc/BrowserDisplay.cpp
branchRCL_3
changeset 65 8e6fa1719340
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserDisplay.cpp	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,879 @@
+/*
+* Copyright (c) 2002-2006 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: 
+*      Access to display components
+*
+*
+*/
+
+
+// INCLUDE FILES
+// System includes
+#include <aknappui.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <akntabgrp.h>
+#include <akntitle.h>
+#include <eikenv.h>
+#include <eikspane.h>
+#include <ApEngineConsts.h>
+#include <avkon.hrh>
+#include <bldvariant.hrh>
+#include <FeatMgr.h>
+#include <akneditstateindicator.h>
+#include <aknindicatorcontainer.h>
+#include <AknStatuspaneUtils.h>
+#include <browser_platform_variant.hrh>
+
+#include <wlaninternalpskeys.h> // For WLAN state checking
+
+#include <LayoutMetaData.cdl.h> // For Layout_Meta_Data landscape/portrait status
+
+// User includes
+#include "ApiProvider.h"
+#include "BrowserProgressIndicator.h"
+#include "BrowserDisplay.h"
+#include "BrowserUtil.h"
+#include "Preferences.h"
+#include "CommonConstants.h"
+#include "BrowserWindow.h"
+#include "BrowserWindowManager.h"
+#include "Logger.h"
+
+#include "WlanObserver.h"
+
+#include <BrowserNG.rsg>
+
+// TYPES
+
+struct TIndicatorContainer {
+    TInt locName;   // indicator's local name
+    TInt aknName;   // indicator's avkon name
+    TInt indState;  // indicator's value
+};
+
+// cosmetic macros
+#define _AKN_IND( a ) EAknNaviPaneEditorIndicator ## a
+#define _LOC_IND( a ) ELocalIndicator ## a
+#define _IND_STATE( a ) KLocalIndicators[ _LOC_IND( a ) ].indState
+#define _SET_INDIC( a ) SetIndicatorState( \
+    TUid::Uid( _AKN_IND( a ) ), _IND_STATE( a ) )
+#define _SET_INDIC2( a, b ) SetIndicatorState( \
+    TUid::Uid( _AKN_IND( a ) ), _IND_STATE( a ), b )
+
+// indicators used in this module
+enum {
+    _LOC_IND( SecuredConnection ),
+    _LOC_IND( MessageInfo ),
+    _LOC_IND( ProgressBar ),
+    // _LOC_IND( WaitBar ),  //
+    // _LOC_IND( T9 ),  //
+    // _LOC_IND( UpperCase ),  //
+    // _LOC_IND( LowerCase ),  //
+    // _LOC_IND( AudioAttached ),  //
+    // _LOC_IND( Objects ),  //
+    // _LOC_IND( WmlWaitGlobe ),
+    _LOC_IND( Gprs ),
+    _LOC_IND( WlanAvailable ),
+    _LOC_IND( WlanActive ),
+    _LOC_IND( WlanActiveSecure ),
+    _LOC_IND( FileSize ),
+    // _LOC_IND( MessageLength ),  //
+    _LOC_IND( WmlWindows ),
+    _LOC_IND( WmlWindowsText ),
+    _LOC_IND( LastItem )
+};
+
+// CONSTANTS
+_LIT( KBrowserSpaceChar, " " );
+
+// order of the indicators in this structure MUST match the enum definition above!
+LOCAL_D TIndicatorContainer KLocalIndicators[] =
+{
+    { _LOC_IND( SecuredConnection ), _AKN_IND( SecuredConnection ), EAknIndicatorStateOff },
+    { _LOC_IND( MessageInfo ),       _AKN_IND( MessageInfo ),       EAknIndicatorStateOff },
+    { _LOC_IND( ProgressBar ),       _AKN_IND( ProgressBar ),       EAknIndicatorStateOff },
+    // { _LOC_IND( WaitBar ),           _AKN_IND( WaitBar ),           EAknIndicatorStateOff },
+    // { _LOC_IND( T9 ),                _AKN_IND( T9 ),                EAknIndicatorStateOff },
+    // { _LOC_IND( UpperCase ),         _AKN_IND( UpperCase ),         EAknIndicatorStateOff },
+    // { _LOC_IND( LowerCase ),         _AKN_IND( LowerCase ),         EAknIndicatorStateOff },
+    // { _LOC_IND( AudioAttached ),     _AKN_IND( AudioAttached ),     EAknIndicatorStateOff },
+    // { _LOC_IND( Objects ),           _AKN_IND( Objects ),           EAknIndicatorStateOff },
+    // { _LOC_IND( WmlWaitGlobe ),      _AKN_IND( WmlWaitGlobe ),      EAknIndicatorStateOff },
+    { _LOC_IND( Gprs ),              _AKN_IND( Gprs ),              EAknIndicatorStateOn },
+    { _LOC_IND( WlanAvailable ),     _AKN_IND( WlanAvailable ),     EAknIndicatorStateOff },
+    { _LOC_IND( WlanActive ),        _AKN_IND( WlanActive ),        EAknIndicatorStateOff },
+    { _LOC_IND( WlanActiveSecure ),  _AKN_IND( WlanActiveSecure ),  EAknIndicatorStateOff },
+    { _LOC_IND( FileSize ),          _AKN_IND( FileSize ),          EAknIndicatorStateOff },
+    // { _LOC_IND( MessageLength ),     _AKN_IND( MessageLength ),     EAknIndicatorStateOff },
+    { _LOC_IND( WmlWindows ),        _AKN_IND( WmlWindows ),        EAknIndicatorStateOff },
+    { _LOC_IND( WmlWindowsText ),    _AKN_IND( WmlWindowsText ),    EAknIndicatorStateOff },
+    { _LOC_IND( LastItem ),          0,                             0 }
+};
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CBrowserDisplay::CBrowserDisplay( MApiProvider& aApiProvider, CBrowserWindow& aWindow )
+: iApiProvider( aApiProvider ), iWindow( &aWindow )
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CBrowserDisplay::ConstructL()
+	{
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+	iProgressIndicator = CBrowserProgressIndicator::NewL( iApiProvider );
+    iEditorIndicatorContainer = NULL;
+    iTitle = NULL;
+PERFLOG_STOP_WRITE("BrProgressIndicator")
+    InitIndicatorsL();  //for full screen
+
+#ifdef _DEBUG
+    // check the indicator array's integrity
+    TInt i = 0;
+    while( KLocalIndicators[i].locName != _LOC_IND( LastItem ) )
+        {
+        __ASSERT_DEBUG( KLocalIndicators[i].locName == i,
+            Util::Panic( Util::EUnExpected ) );
+        ++i;
+        }
+#endif  // _DEBUG
+	}
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::NewL()
+// ---------------------------------------------------------------------------
+//
+CBrowserDisplay* CBrowserDisplay::NewL( MApiProvider& aApiProvider, CBrowserWindow& aWindow )
+	{
+	CBrowserDisplay* self = new (ELeave) CBrowserDisplay( aApiProvider, aWindow );
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop();	// self
+
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::~CBrowserDisplay()
+// ---------------------------------------------------------------------------
+//
+CBrowserDisplay::~CBrowserDisplay()
+	{
+	delete iProgressIndicator;
+    delete iEditorIndicatorContainer;
+    delete iTitle;
+    delete iWlanObserver;
+	}
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::StatusPane()
+// ---------------------------------------------------------------------------
+//
+CEikStatusPane* CBrowserDisplay::StatusPane() const
+    {
+	return STATIC_CAST( CAknAppUi*, CEikonEnv::Static()->EikAppUi() )->
+                                                                StatusPane();
+    }
+
+// ---------------------------------------------------------------------------
+// CBrowserDisplay::NaviPaneL()
+// ---------------------------------------------------------------------------
+//
+CAknNavigationControlContainer* CBrowserDisplay::NaviPaneL() const
+    {
+    CEikStatusPane* sp = StatusPane();
+    User::LeaveIfNull( sp );
+    return STATIC_CAST( CAknNavigationControlContainer*,
+					sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetTitleL( const TDesC& aTitle )
+    {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+    HBufC* temp = aTitle.AllocL();
+    delete iTitle;
+    iTitle = temp;
+    CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+    // Checking to see if we are in contentview so that title is updated for other views like
+    // Bookmarks and Settings. In landscape mode title could be updated all the time regardless of progress bar. 
+    if ( !Layout_Meta_Data::IsLandscapeOrientation() && 
+           (indicContainerEditing) && (ApiProvider().LastActiveViewId() == KUidBrowserContentViewId ))
+        {
+		//Under full screen mode, the progress bar is at the bottom and the title should be updated
+		//all the time.
+		if (indicContainerEditing->IndicatorState( 
+            TUid::Uid(EAknNaviPaneEditorIndicatorProgressBar) ) != EAknIndicatorStateOn)
+            {
+            RestoreTitleL();
+            }
+		}
+    else
+        {
+        RestoreTitleL();
+        }
+PERFLOG_STOP_WRITE("BrDsply:SetTitle")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::ClearMessageInfo()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::ClearMessageInfo()
+    {
+    
+    if( iEditorIndicatorContainer != NULL )
+        {
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+        _IND_STATE( MessageInfo ) = EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( MessageInfo );
+        indicContainerOwn->_SET_INDIC( MessageInfo );
+        }
+    }
+// ---------------------------------------------------------
+// CBrowserDisplay::RestoreTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::RestoreTitleL()
+    {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+    if ( (iTitle !=NULL) )
+        {
+
+        if(( iApiProvider.LastActiveViewId() == KUidBrowserContentViewId )
+        	&& ( iEditorIndicatorContainer != NULL )
+        	&& (!(AknStatuspaneUtils::StaconPaneActive())) )
+            {
+            CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+            CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+            if ( Layout_Meta_Data::IsLandscapeOrientation() )
+                { 
+                // Lanscape mode - Title in title pane not navipane/messageinfo
+                ClearMessageInfo();
+                }
+            else
+                { // Portrait mode - Title in navipane/messageinfo
+                _IND_STATE( MessageInfo ) = EAknIndicatorStateOn;
+                indicContainerEditing->_SET_INDIC( MessageInfo );
+                indicContainerOwn->_SET_INDIC( MessageInfo );
+                indicContainerEditing->SetIndicatorValueL(
+                    TUid::Uid( _AKN_IND( MessageInfo ) ), *iTitle);
+                indicContainerOwn->SetIndicatorValueL(
+                    TUid::Uid( _AKN_IND( MessageInfo ) ), *iTitle);
+                }
+
+            CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+                CEikonEnv::Static()->EikAppUi() )->StatusPane();
+            CAknTitlePane* title = STATIC_CAST( CAknTitlePane*,
+                sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+            title->SetTextL( *iTitle );
+            }
+        else
+            {
+            if( ( iEditorIndicatorContainer != NULL )   
+                && ( AknStatuspaneUtils::StaconPaneActive() ) )
+               {
+               CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+               CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+                //turn off other indicator, because both are visible in landscape mode
+               _IND_STATE( MessageInfo ) = EAknIndicatorStateOff;
+               indicContainerEditing->_SET_INDIC2( MessageInfo, ETrue );
+               indicContainerOwn->_SET_INDIC2( MessageInfo, ETrue );
+               }
+
+            // Set title to be page title
+            CEikStatusPane* sp = STATIC_CAST( CAknAppUi*,
+                CEikonEnv::Static()->EikAppUi() )->StatusPane();
+            CAknTitlePane* title = STATIC_CAST( CAknTitlePane*,
+               sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+            title->SetTextL( *iTitle );
+            }
+
+#ifndef __WINSCW__ 
+        // Wireless Lan Indicator 
+        TInt wlanStateValue;
+        StartWlanObserverL();  // if needed
+        if ( iWlanObserver && iWlanObserver->GetCurrentState(wlanStateValue) )
+            {
+            UpdateWlanIndicator(wlanStateValue);
+            }
+#endif // __WINSCW__
+
+        // Multiple Windows Indicator
+        TInt winCount = iApiProvider.WindowMgr().WindowCount();
+        TBool showMWIndic = (( winCount > 1 ) && 
+                            (ApiProvider().LastActiveViewId() == KUidBrowserContentViewId )) ?
+                             ETrue : EFalse;
+        UpdateMultipleWindowsIndicatorL( showMWIndic, winCount );
+        }
+PERFLOG_STOP_WRITE("BrDsply:RestoreTitle")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetTitleL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetTitleL( TInt aResourceId )
+	{
+	HBufC* title = CEikonEnv::Static()->AllocReadResourceLC( aResourceId );
+    SetTitleL( *title );
+    CleanupStack::PopAndDestroy();   // title
+    }
+	
+// ---------------------------------------------------------
+// CBrowserDisplay::StartProgressAnimationL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StartProgressAnimationL()
+	{
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN( "Display::StartProgressAnimationL" );
+BROWSER_LOG( ( _L("myWindow: %d, active: %d"),
+        iWindow->WindowId(), iWindow->IsWindowActive() ) );
+    if ( iApiProvider.IsProgressShown() )
+        {
+        // ProgressIndicator doesn't have pointer to its Window or parent Display
+        // so check validity here
+        if( iWindow->IsWindowActive() )
+            {
+            iProgressIndicator->StartL();
+            }
+        // start globe animation
+        iApiProvider.StartProgressAnimationL();
+        }
+PERFLOG_STOP_WRITE("BrDsply: StartPrgAnim")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::StopProgressAnimationL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StopProgressAnimationL()
+    {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN( "Display::StopProgressAnimationL" );
+BROWSER_LOG( ( _L("myWindow: %d"), iWindow->WindowId() ) );
+    if ( iApiProvider.IsProgressShown() )
+        {
+        // always stop spinning globe in FavouritesView
+        // most of the cases View::DoDeactivateL() does it
+        // other: e.g. Cancel load in BookmarksView
+        iApiProvider.StopProgressAnimationL();
+
+        if ( !ApiProvider().Fetching() )
+            {
+            if ( iEditorIndicatorContainer != NULL )
+                {
+                CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+                CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+                _IND_STATE( FileSize ) = EAknIndicatorStateOff;
+                indicContainerEditing->_SET_INDIC( FileSize );
+                indicContainerOwn->_SET_INDIC( FileSize );
+
+                indicContainerOwn->SetIndicatorValueL( 
+                TUid::Uid( _AKN_IND( FileSize ) ), KNullDesC() );
+                
+                _IND_STATE( ProgressBar ) = EAknIndicatorStateOff;
+                indicContainerEditing->_SET_INDIC( ProgressBar );
+                indicContainerOwn->_SET_INDIC( ProgressBar );
+
+                if( iTitle )
+                    {
+                    RestoreTitleL();
+                    }
+                iApiProvider.SetProgressShown( EFalse );
+                }
+            iProgressIndicator->StopL();
+            }
+        }
+    PERFLOG_STOP_WRITE("BrDsply: StopPrgAnim")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SelectIndicContainerEditing()
+// ---------------------------------------------------------
+//
+CAknIndicatorContainer* CBrowserDisplay::SelectIndicContainerEditing()
+    {
+    CAknIndicatorContainer* indicContainer1 = CAknEnv::Static()->
+        EditingStateIndicator()->IndicatorContainer();
+    return indicContainer1;
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SelectIndicContainerOwn()
+// ---------------------------------------------------------
+//
+CAknIndicatorContainer* CBrowserDisplay::SelectIndicContainerOwn()
+    {
+    CAknIndicatorContainer* indicContainer2 = STATIC_CAST(
+        CAknIndicatorContainer*, iEditorIndicatorContainer->DecoratedControl() );
+    return indicContainer2;
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::InitIndicatorsL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::InitIndicatorsL()
+    {
+    PERFLOG_LOCAL_INIT
+    PERFLOG_STOPWATCH_START
+
+    if (iEditorIndicatorContainer)
+    	{
+        return;	
+    	}
+
+    if ((iEditorIndicatorContainer == NULL))
+        {
+        PERFLOG_LOCAL_INIT
+        PERFLOG_STOPWATCH_START
+        iEditorIndicatorContainer = NaviPaneL()->CreateEditorIndicatorContainerL();
+        PERFLOG_STOP_WRITE(" -> BrDsply: EditorContainer")
+        }
+        
+    PERFLOG_STOPWATCH_START
+        CAknIndicatorContainer* indicContainer = SelectIndicContainerOwn();
+
+        _IND_STATE( SecuredConnection ) = EAknIndicatorStateOff;
+        _IND_STATE( MessageInfo )       = EAknIndicatorStateOff;
+        _IND_STATE( ProgressBar )       = EAknIndicatorStateOff;
+        // _IND_STATE( WaitBar )           = EAknIndicatorStateOff;
+        // _IND_STATE( T9 )                = EAknIndicatorStateOff;
+        // _IND_STATE( UpperCase )         = EAknIndicatorStateOff;
+        // _IND_STATE( LowerCase )         = EAknIndicatorStateOff;
+        // _IND_STATE( AudioAttached )     = EAknIndicatorStateOff;
+        // _IND_STATE( Objects )           = EAknIndicatorStateOff;
+        // _IND_STATE( WmlWaitGlobe )      = EAknIndicatorStateOff;
+        _IND_STATE( Gprs )              = EAknIndicatorStateOn;
+
+        _IND_STATE( WlanAvailable )     = EAknIndicatorStateOff;
+        _IND_STATE( WlanActive )        = EAknIndicatorStateOff;
+        _IND_STATE( WlanActiveSecure )  = EAknIndicatorStateOff;
+
+        _IND_STATE( FileSize )          = EAknIndicatorStateOff;
+        // _IND_STATE( MessageLength )     = EAknIndicatorStateOff;
+        _IND_STATE( WmlWindows )        = EAknIndicatorStateOff;
+        _IND_STATE( WmlWindowsText )    = EAknIndicatorStateOff;
+
+        indicContainer->_SET_INDIC( SecuredConnection );
+        indicContainer->_SET_INDIC( MessageInfo );
+        indicContainer->_SET_INDIC( ProgressBar );
+        // indicContainer->_SET_INDIC( WaitBar );
+        // indicContainer->_SET_INDIC( T9 );
+        // indicContainer->_SET_INDIC( UpperCase );
+        // indicContainer->_SET_INDIC( LowerCase );
+        // indicContainer->_SET_INDIC( AudioAttached );
+        // indicContainer->_SET_INDIC( Objects );
+        // indicContainer->_SET_INDIC( WmlWaitGlobe );
+        indicContainer->_SET_INDIC( Gprs );
+
+        indicContainer->_SET_INDIC( WlanAvailable );
+        indicContainer->_SET_INDIC( WlanActive );
+        indicContainer->_SET_INDIC( WlanActiveSecure );
+
+        indicContainer->_SET_INDIC( FileSize );
+        // indicContainer->_SET_INDIC( MessageLength );
+        indicContainer->_SET_INDIC( WmlWindows );
+        indicContainer->_SET_INDIC( WmlWindowsText );
+    PERFLOG_STOP_WRITE( "Display:InitIndicators")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateSecureIndicatorL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateSecureIndicatorL( const TInt aState )
+    {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+    if( !iApiProvider.ExitInProgress() )
+        {
+        SetFullScreenSecureIndicatorL(aState);
+        NaviPaneL()->DrawDeferred();
+        }
+PERFLOG_STOP_WRITE( "Display:UpdateSecureIndicator")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateFSDownloadInitialIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateFSDownloadInitialIndicator( const TBool aState )
+	{
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+    if( !iEditorIndicatorContainer ) 
+    	{
+    	InitIndicatorsL();
+    	}
+        
+    if ( iApiProvider.IsProgressShown() && ( iEditorIndicatorContainer != NULL ) )
+        {
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+        if (aState)
+            { 
+            ClearMessageInfo();
+
+            _IND_STATE( FileSize ) = EAknIndicatorStateOff;
+            indicContainerEditing->_SET_INDIC( FileSize );
+            indicContainerOwn->_SET_INDIC( FileSize );
+            }
+        }
+PERFLOG_STOP_WRITE("BrDsply: GlobeAnimation init")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetGPRSIndicatorOnL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetGPRSIndicatorOnL()
+	{
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+    if ( iEditorIndicatorContainer != NULL )
+        {
+        // Set GPRS indicator on, it will update itself
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+        _IND_STATE( Gprs ) = EAknIndicatorStateOn;
+        indicContainerEditing->_SET_INDIC( Gprs );
+        indicContainerOwn->_SET_INDIC( Gprs );
+        }
+PERFLOG_STOP_WRITE("BrDsply: Gprsidic on")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateWlanIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateWlanIndicator( const TInt aWlanValue )
+    {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START    
+
+    if ( iEditorIndicatorContainer != NULL )
+        {
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+        
+        _IND_STATE( WlanAvailable ) = EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( WlanAvailable );
+        indicContainerOwn->_SET_INDIC( WlanAvailable );     
+
+        _IND_STATE( WlanActive ) = EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( WlanActive );
+        indicContainerOwn->_SET_INDIC( WlanActive );     
+
+        _IND_STATE( WlanActiveSecure ) = EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( WlanActiveSecure );
+        indicContainerOwn->_SET_INDIC( WlanActiveSecure );     
+
+        switch (aWlanValue)
+            {
+            case EPSWlanIndicatorNone:
+                {
+                // do nothing.
+                break;
+                }
+            
+            case EPSWlanIndicatorAvailable:
+                {
+                _IND_STATE( WlanAvailable ) = EAknIndicatorStateOn;
+                indicContainerEditing->_SET_INDIC( WlanAvailable );
+                indicContainerOwn->_SET_INDIC( WlanAvailable );     
+                break;
+                }           
+       
+            case EPSWlanIndicatorActive:
+                {
+                _IND_STATE( WlanActive ) = EAknIndicatorStateOn;
+                indicContainerEditing->_SET_INDIC( WlanActive );
+                indicContainerOwn->_SET_INDIC( WlanActive );     
+                break;
+                }
+            
+            case EPSWlanIndicatorActiveSecure:
+                {
+
+                _IND_STATE( WlanActiveSecure ) = EAknIndicatorStateOn;
+                indicContainerEditing->_SET_INDIC( WlanActiveSecure );
+                indicContainerOwn->_SET_INDIC( WlanActiveSecure );     
+                break;
+                }
+            
+            default:
+                {
+                // do nothing.
+                break;
+                }
+            }
+        }
+PERFLOG_STOP_WRITE("BrDsply: UpdateWlanIndicator")
+    }
+    
+// ---------------------------------------------------------
+// CBrowserDisplay::StartWlanObserverL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StartWlanObserverL()
+	{
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+
+    if (iWlanObserver == NULL)
+        {
+        iWlanObserver = new ( ELeave ) CWlanObserver( iApiProvider );
+        }
+        
+PERFLOG_STOP_WRITE("BrDsply: Wlan Observer Started")
+    }    
+
+// ---------------------------------------------------------
+// CBrowserDisplay::SetFullScreenSecureIndicatorL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::SetFullScreenSecureIndicatorL(const TBool aState)
+	{
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+	_IND_STATE( SecuredConnection ) = aState;
+    if ( iEditorIndicatorContainer != NULL && iWindow->IsWindowActive() )
+        {
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+        _IND_STATE( SecuredConnection ) = aState ?
+            EAknIndicatorStateOn : EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( SecuredConnection );
+        indicContainerOwn->_SET_INDIC( SecuredConnection );
+	    }
+PERFLOG_STOP_WRITE("BrDsply: Secure indic upd")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::AddTransActIdL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::AddTransActIdL( TUint16 aId ) const
+    {
+    iProgressIndicator->AddTransActIdL( aId );
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::AddProgressDataL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::AddProgressDataL(
+        TUint16 aId, TUint32 aRecvdData, TUint32 aMaxData ) const
+    {
+    iProgressIndicator->AddProgressDataL( aId, aRecvdData, aMaxData );
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::TransActIdComplete()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::TransActIdComplete( TUint16 aId ) const
+    {
+    TRAP_IGNORE( iProgressIndicator->TransActIdCompleteL( aId ) );
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::StartFSWaitIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::StartFSWaitIndicator()
+    {
+    if( iEditorIndicatorContainer != NULL &&
+        iWindow->IsWindowActive() )
+        {
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+        }
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateFSProgressIndicator()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateFSProgressIndicator( const TInt aMaxData, 
+                                                 const TInt aReceivedData )
+    {
+PERFLOG_LOCAL_INIT
+PERFLOG_STOPWATCH_START
+LOG_ENTERFN("UpdateFSProgressIndicator");
+BROWSER_LOG( ( _L( "maxData: %d, recData: %d" ), aMaxData, aReceivedData ) );
+    if ( iApiProvider.IsProgressShown() && 
+       ( iEditorIndicatorContainer != NULL ) &&
+         iWindow->IsWindowActive() )
+        {
+        CAknIndicatorContainer* indicContainerEditing = SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+        if( indicContainerEditing->IndicatorState( 
+                TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ) )
+                != EAknIndicatorStateOn ||
+            indicContainerOwn->IndicatorState( 
+                TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ) )
+                != EAknIndicatorStateOn
+            )
+            {
+            _IND_STATE( ProgressBar ) = EAknIndicatorStateOn;
+            indicContainerEditing->_SET_INDIC2( ProgressBar, ETrue );
+            indicContainerOwn->_SET_INDIC2( ProgressBar, ETrue );
+            }
+
+        indicContainerEditing->SetIndicatorValue( 
+            TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ), 
+            aReceivedData, aMaxData );
+        indicContainerOwn->SetIndicatorValue( 
+            TUid::Uid( EAknNaviPaneEditorIndicatorProgressBar ), 
+            aReceivedData, aMaxData );
+        }
+PERFLOG_STOP_WRITE("BrDsply: Prg indic upd")
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::UpdateFSProgressDataL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::UpdateFSProgressDataL( const TDesC16& aReceivedDataText )
+    {
+    PERFLOG_LOCAL_INIT
+	PERFLOG_STOPWATCH_START
+    if ( iApiProvider.IsProgressShown() &&( iEditorIndicatorContainer != NULL ) )
+        {
+        CAknIndicatorContainer* indicContainerEditing = 
+                                                SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+        if( indicContainerEditing->IndicatorState( 
+                TUid::Uid( EAknNaviPaneEditorIndicatorMessageInfo ) )
+                != EAknIndicatorStateOff )
+            {
+            ClearMessageInfo();
+            }
+
+        if( indicContainerEditing->IndicatorState( 
+                TUid::Uid( EAknNaviPaneEditorIndicatorFileSize ) )
+                != EAknIndicatorStateOn ||
+            indicContainerOwn->IndicatorState( 
+                TUid::Uid( EAknNaviPaneEditorIndicatorFileSize ) )
+                != EAknIndicatorStateOn )
+            {
+            _IND_STATE( FileSize ) = EAknIndicatorStateOn;
+            indicContainerEditing->_SET_INDIC( FileSize );
+            indicContainerOwn->_SET_INDIC( FileSize );
+            }
+
+        indicContainerEditing->SetIndicatorValueL( 
+            TUid::Uid( _AKN_IND( FileSize ) ), aReceivedDataText );
+        indicContainerOwn->SetIndicatorValueL( 
+            TUid::Uid( _AKN_IND( FileSize ) ), aReceivedDataText );
+
+        NaviPaneL()->PushL( *iEditorIndicatorContainer );
+        }
+    PERFLOG_STOP_WRITE("BrDsply: Prg data upd")
+    }
+
+
+// ---------------------------------------------------------
+// CBrowserDisplay::FSPaneOnL()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::FSPaneOnL()
+    {
+    InitIndicatorsL();
+    NaviPaneL()->PushL(*iEditorIndicatorContainer);
+    }
+
+// ---------------------------------------------------------
+// CBrowserDisplay::NotifyProgress()
+// ---------------------------------------------------------
+//
+void CBrowserDisplay::NotifyProgress()
+    {
+    if ( iProgressIndicator != NULL && iWindow->IsWindowActive() )
+        {
+        iProgressIndicator->NotifyProgress();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CBrowserDisplay::UpdateMultipleWindowsIndicatorL()
+// ----------------------------------------------------------------------------
+//
+void CBrowserDisplay::UpdateMultipleWindowsIndicatorL( 
+                                                TBool aState, TInt aWinCount )
+    {
+    LOG_ENTERFN("CBrowserDisplay::UpdateMultipleWindowsIndicatorL");
+
+    if ( iEditorIndicatorContainer != NULL )
+        {
+        CAknIndicatorContainer* indicContainerEditing = 
+                                                SelectIndicContainerEditing();
+        CAknIndicatorContainer* indicContainerOwn = SelectIndicContainerOwn();
+
+        // Show or hide MW Icon
+        _IND_STATE( WmlWindows ) = aState ? 
+            EAknIndicatorStateOn : EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( WmlWindows );
+        indicContainerOwn->_SET_INDIC( WmlWindows );
+
+        // Show or hide text indicator
+        _IND_STATE( WmlWindowsText ) = aState ? 
+            EAknIndicatorStateOn : EAknIndicatorStateOff;
+        indicContainerEditing->_SET_INDIC( WmlWindowsText );
+        indicContainerOwn->_SET_INDIC( WmlWindowsText );
+
+        if ( aState )
+            {
+            // MW Indicator is made of an indicator icon and a number (num wins)
+
+            // Display Number of windows open in text indicator
+            HBufC* numWins = HBufC::NewLC( 3 );
+            numWins->Des().AppendNum( aWinCount );
+            numWins->Des().Append( KBrowserSpaceChar );
+            indicContainerEditing->SetIndicatorValueL(
+                TUid::Uid( _AKN_IND( WmlWindowsText ) ), *numWins );
+            indicContainerOwn->SetIndicatorValueL(
+                TUid::Uid( _AKN_IND( WmlWindowsText ) ), *numWins );
+            CleanupStack::PopAndDestroy( numWins );
+            }
+	    }
+    }
+
+// End of File