# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1277124221 -10800 # Node ID b149f0820e5aa66ab093779bfda51061a6a25aff # Parent aead3f7e1bb04c6472339ff3824985e655c89c7b Revision: 201023 Kit: 2010125 diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/BrowserAppInc/ApiProvider.h --- a/browserui/browser/BrowserAppInc/ApiProvider.h Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/BrowserAppInc/ApiProvider.h Mon Jun 21 15:43:41 2010 +0300 @@ -397,6 +397,14 @@ * @param none */ virtual TBool IsDisplayingMenuOrDialog() = 0; + + /** + * API to complete the delayed UI initialization. Invoked once after first view is up. + * @return ETrue if successful + * EFalse otherwise + * @param none + */ + virtual TBool CompleteDelayedInit() = 0; }; diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/BrowserAppInc/BrowserAppUi.h --- a/browserui/browser/BrowserAppInc/BrowserAppUi.h Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/BrowserAppInc/BrowserAppUi.h Mon Jun 21 15:43:41 2010 +0300 @@ -672,6 +672,14 @@ * @param none */ TBool IsDisplayingMenuOrDialog(); + + /** + * Function to complete the delayed intialization of Browser + * @return ETrue if initialization was successful + * EFalse otherwise + * @param none + */ + TBool CompleteDelayedInit(); public: // from MWindowInfoProvider @@ -684,10 +692,22 @@ * In embedded mode the browser is initialized later, not when it * is constructed. First the browser must wait for the embedding * application to send the startup parameters, and only after that - * can be initialized. - * This method is required and used by new embedding architecture. - */ - void InitBrowserL(); + * can be initialized. This method is required and used by new + * embedding architecture. + */ + void InitBrowserL(); + + /* This method is used for normal startup and when the first view is Bookmarks. + * In order to show the Bookmarks view, initialize only bookmarks and delay the + * remaining initialization. + */ + void InitBookmarksL(); + + /* This method is used for normal startup and when the first view is Bookmarks. + * This method includes intialization stuff which are not necessary for Bookmarks + * view. This is done using async CIdle approach. + */ + void DelayedInitL(); /** * From CAknViewAppUi, CEikAppUi diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/BrowserAppInc/BrowserWindow.h --- a/browserui/browser/BrowserAppInc/BrowserWindow.h Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/BrowserAppInc/BrowserWindow.h Mon Jun 21 15:43:41 2010 +0300 @@ -278,7 +278,7 @@ TBool CalledFromAnotherApp(); TBool BrowserWasLaunchedIntoFeeds(); TBool IsDisplayingMenuOrDialog(); - + TBool CompleteDelayedInit(); //------------------------------------------------------------------------- // Preferences Handling diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/BrowserAppSrc/BrowserAppUi.cpp --- a/browserui/browser/BrowserAppSrc/BrowserAppUi.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/BrowserAppSrc/BrowserAppUi.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -162,7 +162,8 @@ iPgNotFound( EFalse ), iOverriddenLaunchContextId( EBrowserContextIdNormal ), iBrowserAlreadyRunning (EFalse), -iCalledFromExternApp( EFalse ) +iCalledFromExternApp( EFalse ), +iFeedsClientUtilities( 0 ) { iViewToBeActivatedIfNeeded.iUid = 0; iViewToReturnOnClose.iUid = 0; @@ -290,7 +291,11 @@ #endif if ( !IsEmbeddedModeOn( ) ) { - InitBrowserL(); +#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF + InitBookmarksL(); +#else + InitBrowserL(); +#endif LOG_WRITE( "Browser started standalone" ); } else @@ -446,250 +451,242 @@ LOG_WRITE( "CBrowserAppUi::UpdateComplete - Exit" ); } #endif + + // ----------------------------------------------------------------------------- -// CBrowserAppUi::InitBrowser() +// CBrowserAppUi::InitBookmarksL() +// Initialize only bookmarks view related dependencies here. +// Note - Do not add unnecessary code here, it increases startup time for bookmarks view. // ----------------------------------------------------------------------------- // -void CBrowserAppUi::InitBrowserL() +void CBrowserAppUi::InitBookmarksL() + { + //New constructor that just replaces the default primary storage size with this one. + iRecentUrlStore = CRecentUrlStore::NewL(); + + // Init CommsModel + iCommsModel = CBrowserCommsModel::NewL(); + + // check if it can be delayed ?? +#ifdef BRDO_OCC_ENABLED_FF + iConnection = CInternetConnectionManager::NewL( &iCommsModel->CommsDb(), ETrue ); +#else + iConnection = CInternetConnectionManager::NewL( &iCommsModel->CommsDb(), EFalse ); +#endif + + // Creating object to hold application settings + CBrowserAppDocument* doc = STATIC_CAST(CBrowserAppDocument*, Document()); + iPreferences = CBrowserPreferences::NewL( *iCommsModel, *this, doc->GetOverriddenSettings()); + + // Create bookmarkview + CBrowserBookmarksView* bookmarksView = NULL; + TInt folderUid = doc->GetFolderToOpen(); + if ( IsEmbeddedModeOn() && folderUid!= KFavouritesRootUid) + { + bookmarksView = CBrowserBookmarksView::NewLC( *this, *iRecentUrlStore, folderUid ); + } + else + { + bookmarksView = CBrowserBookmarksView::NewLC( *this, *iRecentUrlStore ); + } + + iBookmarksView = bookmarksView; + AddViewL( bookmarksView ); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // bookmarksView + } + + +// ----------------------------------------------------------------------------- +// CBrowserAppUi::CompleteDelayedInit() +// Delayed (async) init callback. This method can be invoked explicitly in case +// some early startup cases fail if Browser has not initialized fully. No harm +// if called multiple times since there is check in the beginning of thsi function. +// ----------------------------------------------------------------------------- +// +TBool CBrowserAppUi::CompleteDelayedInit() + { + // Should not be called for other that 9.2 onward devices +#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF + if ( iStartedUp ) + return EFalse; // no need to re-invoke automatically + // complete initialization + TRAP_IGNORE(DelayedInitL()); + +#ifdef BRDO_IAD_UPDATE_ENABLED_FF + // complete the IAD check asynchronously + iDelayedUpdate = CIdle::NewL( CActive::EPriorityIdle ); + iDelayedUpdate->Start(TCallBack( CompleteIADUpdateCallback, this )); +#endif +#endif + + return EFalse; // no need to re-invoke automatically + } + +// ----------------------------------------------------------------------------- +// CBrowserAppUi::DelayedInitL() +// Delayed (Async) initialization - whatever remains after InitBookmarksL(), do it here. +// Note: - Do not add unnecessary code here, it increases startup time for contenview. +// ----------------------------------------------------------------------------- +// +void CBrowserAppUi::DelayedInitL() { + LOG_ENTERFN("CBrowserAppUi::DelayedInitL"); + // Check for ciritical disk space RFs fs; User::LeaveIfError(fs.Connect()); TInt drive( EDriveC ); TBool isSpace( EFalse ); TInt err( KErrNone ); - TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL( - &fs, - KMinimumCDriveDiskSpace, - drive )); + TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL(&fs, KMinimumCDriveDiskSpace, drive )); fs.Close(); - if (!isSpace) - User::Leave(KErrDiskFull); - - if (!iStartedUp) - { - LOG_ENTERFN( "CBrowserAppUi::InitBrowser" ); - - User::LeaveIfError( iFavouritesSess.Connect() ); - - PERFLOG_LOCAL_INIT; - - PERFLOG_STOPWATCH_START; - - // Replace the original synchronous creation with this async - // creation. A new method was added to the interface stub that was - // not added to the MAHLEClientAPI (it is owned by another group). - // // Init AHLE Interface - // TAHLEScore adaptationSpeed; - // TUint primarySize; - // TUint secondarySize; - // iAHLEClient=CAHLEInterface::NewL(); - // iAHLEClient->GetConfigurationL( primarySize, secondarySize, adaptationSpeed ); - // iAHLEClient->ReconfigureL( KAhlePrimaryStorage, secondarySize, adaptationSpeed ); -/* - // Write to the file only if we are not below critical disk level - if (SysUtil::DiskSpaceBelowCriticalLevelL (&rfs, aData.Length(), EDriveC)) + if (!isSpace) User::Leave(KErrDiskFull); + + // Create Favengine session + User::LeaveIfError( iFavouritesSess.Connect() ); + + // Init FeatureManager + FeatureManager::InitializeLibL(); + iFeatureManager = ETrue; + + // check flash present + iFlashPresent = CheckFlashPresent(); + + // this is required, browser's connection oberver should be hit first. + // (incase of netscape plgins, transactions will be closed.) + iConnStageNotifier = CConnectionStageNotifierWCB::NewL(); + iConnStageNotifier->SetPriority(CActive::EPriorityHigh); + + // Starts a background processing, so it must be started early, to get + // finished before the first send operation! Or it must be synchronized! + iLateSendUi = CIdle::NewL( CActive::EPriorityIdle ); + iLateSendUi ->Start( TCallBack( DelayedSendUiConstructL, this ) ); + + iHTTPSecurityIndicatorSupressed = iPreferences->HttpSecurityWarningsStatSupressed(); + + // set AP to be a default one (for Push messages) + SetRequestedAP( Preferences().DefaultAccessPoint() ); + + // Create ContentView + TRect rect = ClientRect(); + CBrowserContentView* contentView = CBrowserContentView::NewLC( *this, rect ); + AddViewL( contentView ); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // contentView + + // proxy will handle dialog events through load observer + iDialogsProvider = CBrowserDialogsProvider::NewL( NULL); + +#ifdef __RSS_FEEDS + iFeedsClientUtilities = CFeedsClientUtilities::NewL( *this, *this ); + BROWSER_LOG( ( _L("Feeds up.") ) ); +#endif //__RSS_FEEDS + + // Is Multiple Window feature suported? + if ( Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) ) { - User::Leave(KErrDiskFull); - } - - TMemoryInfoV1Buf info; - UserHal::MemoryInfo( info ); - TInt freeRamInBytes = 10*1024*1024; - TInt dataSize = iContext->iDataPtr.Length(); - if( UserHal::MemoryInfo( info ) == KErrNone ) - freeRamInBytes = info().iFreeRamInBytes; - -*/ - //New constructor that just replaces the default primary storage size with this one. - iRecentUrlStore = CRecentUrlStore::NewL(); - - iFlashPresent = CheckFlashPresent(); - PERFLOG_STOP_WRITE("\t AhleInterface Creation + Configuration"); - BROWSER_LOG( ( _L( "AHLE Interface inited" ) ) ); - - // Init FeatureManager - FeatureManager::InitializeLibL(); - iFeatureManager = ETrue; - - // Init CommsModel - - PERFLOG_STOPWATCH_START; - iCommsModel = CBrowserCommsModel::NewL(); - PERFLOG_STOP_WRITE("\t CommsModel NewL"); - BROWSER_LOG( ( _L( "CommsModel up" ) ) ); - - CBrowserAppDocument* doc = STATIC_CAST(CBrowserAppDocument*, Document()); - - // Creating object to hold application settings - PERFLOG_STOPWATCH_START; - iPreferences = CBrowserPreferences::NewL( *iCommsModel, *this, doc->GetOverriddenSettings()); - PERFLOG_STOP_WRITE("\t Preferences NewL"); - BROWSER_LOG( ( _L( "Preferences up" ) ) ); - - PERFLOG_STOPWATCH_START; - #ifdef BRDO_OCC_ENABLED_FF - iConnection = CInternetConnectionManager::NewL( &iCommsModel->CommsDb(), ETrue ); - #else - iConnection = CInternetConnectionManager::NewL( &iCommsModel->CommsDb(), EFalse ); - #endif - - PERFLOG_STOP_WRITE("\t ConnMan NewL"); - BROWSER_LOG( ( _L( "ConnectionManager up" ) ) ); - - - PERFLOG_STOPWATCH_START; - iConnStageNotifier = CConnectionStageNotifierWCB::NewL(); - - //this is required, browser's connection oberver should be hit first. (incase of netscape plgins, transactions will be closed.) - iConnStageNotifier->SetPriority(CActive::EPriorityHigh); - - PERFLOG_STOP_WRITE("\t StageNotif NewL"); - BROWSER_LOG( ( _L( "StageNofier up" ) ) ); - - // Starts a background processing, so it must be started early, to get - // finished before the first send operation! Or it must be synchronized! - PERFLOG_STOPWATCH_START; - iLateSendUi = CIdle::NewL( CActive::EPriorityIdle ); - iLateSendUi ->Start( TCallBack( DelayedSendUiConstructL, this ) ); - PERFLOG_STOP_WRITE("\t OtaSender NewL"); - - iHTTPSecurityIndicatorSupressed = iPreferences->HttpSecurityWarningsStatSupressed(); - - // set AP to be a default one (for Push messages) - SetRequestedAP( Preferences().DefaultAccessPoint() ); - // get client rect before hiding CBAs - TRect rect = ClientRect(); - Cba()->MakeVisible( EFalse ); - //------------------------------------------------------------------------- - // Create bookmarkview - PERFLOG_STOPWATCH_START; - CBrowserBookmarksView* bookmarksView = NULL; - TInt folderUid = doc->GetFolderToOpen(); - if ( IsEmbeddedModeOn() && folderUid!= KFavouritesRootUid) + if (Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))//midrange { - bookmarksView = CBrowserBookmarksView::NewLC( *this, *iRecentUrlStore, folderUid ); + iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, KMinNumOfOpenedWindows ); } else { - bookmarksView = CBrowserBookmarksView::NewLC( *this, *iRecentUrlStore ); - } - PERFLOG_STOP_WRITE("\t BMView NewL") - - iBookmarksView = bookmarksView; - - AddViewL( bookmarksView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop(); // bookmarksView - BROWSER_LOG( ( _L( "Bookmarksview up" ) ) ); - - //------------------------------------------------------------------------- - // Create ContentView - - PERFLOG_STOPWATCH_START; - CBrowserContentView* contentView = - CBrowserContentView::NewLC( *this, rect ); - AddViewL( contentView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop(); // contentView - PERFLOG_STOP_WRITE("\t ContentView NewL"); - BROWSER_LOG( ( _L( "ContentView up" ) ) ); - - //------------------------------------------------------------------------- - // Create the Plugin Browser Engine - - // proxy will handle dialog events through load observer - iDialogsProvider = CBrowserDialogsProvider::NewL( NULL); - BROWSER_LOG( ( _L( "CBrowserDialogsProvider UP" ) ) ); - -#ifdef __RSS_FEEDS - iFeedsClientUtilities = CFeedsClientUtilities::NewL( *this, *this ); - - BROWSER_LOG( ( _L("Feeds up.") ) ); -#endif //__RSS_FEEDS - - PERFLOG_STOPWATCH_START; - // Is Multiple Window feature suported? - if ( Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) ) - { - if (Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ))//midrange - { - iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, - KMinNumOfOpenedWindows ); - } - else - { - iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, - KMaxNumOfOpenedWindows ); - } - LOG_WRITE_FORMAT("WindowManager Up. Max windows number. %d", - KMaxNumOfOpenedWindows ); - } - else - { - iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, - KMinNumOfOpenedWindows ); - BROWSER_LOG( ( _L( "WindowManager Up. MWs not supported." ) ) ); + iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, KMaxNumOfOpenedWindows ); } - - PERFLOG_STOP_WRITE("\t WindowMgr + PopUp Engine"); - contentView->SetZoomLevelL(); - - //------------------------------------------------------------------------- - - - CBrowserSettingsView* settingsView = CBrowserSettingsView::NewLC( *this ); - AddViewL( settingsView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop(); // settingsView - BROWSER_LOG( ( _L( "SettingsView up" ) ) ); - - CBrowserWindowSelectionView* windowSelectionView = CBrowserWindowSelectionView::NewLC( *this ); - AddViewL( windowSelectionView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop(); // windowSelectionView - BROWSER_LOG( ( _L( "windowSelectionView up" ) ) ); - - //------------------------------------------------------------------------- - - iIdle = CIdle::NewL( CActive::EPriorityIdle ); - - // Create asyncronous object to call when exit requires it. - iBrowserAsyncExit = CBrowserAsyncExit::NewL( this ); - iStartedUp = ETrue; - iSecureSiteVisited = EFalse; - - iPushMtmObserver = CBrowserPushMtmObserver::NewL( this ); - iPushMtmObserver->StartObserver(); - // Create two Panes of CBrowserContentViewContainer - CBrowserGotoPane* gotoPane = CBrowserGotoPane::NewL( contentView->Container(), - EMbmAvkonQgn_indi_find_goto, - EMbmAvkonQgn_indi_find_goto_mask, - ETrue, - contentView ); - - // Create the find pane with magnifier glass icon, and - // without adaptive popup list... - CBrowserGotoPane* findKeywordPane = CBrowserGotoPane::NewL( contentView->Container(), - EMbmAvkonQgn_indi_find_glass, - EMbmAvkonQgn_indi_find_glass_mask, - EFalse, - contentView, - ETrue ); - contentView->Container()->SetGotoPane(gotoPane); - contentView->Container()->SetFindKeywordPane(findKeywordPane); - contentView->Container()->SetRect( rect ); - contentView->Container()->GotoPane()->SetGPObserver(contentView); - contentView->Container()->FindKeywordPane()->SetGPObserver(contentView); - contentView->Container()->FindKeywordPane()->SetOrdinalPosition( 0 ); - contentView->Container()->GotoPane()->SetOrdinalPosition( 0 ); - + LOG_WRITE_FORMAT("WindowManager Up. Max windows number. %d", KMaxNumOfOpenedWindows ); + } + else + { + iWindowManager = CBrowserWindowManager::NewL( *this, *contentView, KMinNumOfOpenedWindows ); + BROWSER_LOG( ( _L( "WindowManager Up. MWs not supported." ) ) ); + } + + contentView->SetZoomLevelL(); + BrCtlInterface().AddLoadEventObserverL(iBookmarksView); + + // create settings view + CBrowserSettingsView* settingsView = CBrowserSettingsView::NewLC( *this ); + AddViewL( settingsView ); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // settingsView + BROWSER_LOG( ( _L( "SettingsView up" ) ) ); + + // window selection view + CBrowserWindowSelectionView* windowSelectionView = CBrowserWindowSelectionView::NewLC( *this ); + AddViewL( windowSelectionView ); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // windowSelectionView + BROWSER_LOG( ( _L( "windowSelectionView up" ) ) ); + + // Create asyncronous object to call when exit requires it. + iBrowserAsyncExit = CBrowserAsyncExit::NewL( this ); + iIdle = CIdle::NewL( CActive::EPriorityIdle ); + + iPushMtmObserver = CBrowserPushMtmObserver::NewL( this ); + iPushMtmObserver->StartObserver(); + #ifdef BRDO_OCC_ENABLED_FF - iRetryConnectivity = CPeriodic::NewL(CActive::EPriorityStandard); + iRetryConnectivity = CPeriodic::NewL(CActive::EPriorityStandard); #endif - + + // Create two Panes of CBrowserContentViewContainer + CBrowserGotoPane* gotoPane = CBrowserGotoPane::NewL( contentView->Container(), + EMbmAvkonQgn_indi_find_goto, + EMbmAvkonQgn_indi_find_goto_mask, + ETrue, + contentView ); + + // Create the find pane with magnifier glass icon, and + // without adaptive popup list... + CBrowserGotoPane* findKeywordPane = CBrowserGotoPane::NewL( contentView->Container(), + EMbmAvkonQgn_indi_find_glass, + EMbmAvkonQgn_indi_find_glass_mask, + EFalse, + contentView, + ETrue ); + contentView->Container()->SetGotoPane(gotoPane); + contentView->Container()->SetFindKeywordPane(findKeywordPane); + //contentView->Container()->SetRect( rect ); // causes suncRepaint + contentView->Container()->GotoPane()->SetGPObserver(contentView); + contentView->Container()->FindKeywordPane()->SetGPObserver(contentView); + contentView->Container()->FindKeywordPane()->SetOrdinalPosition( 0 ); + contentView->Container()->GotoPane()->SetOrdinalPosition( 0 ); + + iStartedUp = ETrue; + iSecureSiteVisited = EFalse; + +#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF + if(LastActiveViewId() == KUidBrowserBookmarksViewId) + { + iBookmarksView->CheckForDownloads(); + iBookmarksView->UpdateFavIconsL(); + } +#endif + } + +// ----------------------------------------------------------------------------- +// CBrowserAppUi::InitBrowserL() - THIS METHOD IS NOT USED FOR NORMAL STARTUP +// This method is just for supporting Browser initialization if launched in Embedded mode +// Normal initialization if split in BookmarksInit() and DelayedInit(). iStartedUp is FALSE +// if BRowser has not initialized or partially initialized. +// NOTE: DO NOT ADD ANY CODE HERE. IT IS JUST A WRAPPER. +// ----------------------------------------------------------------------------- +// +void CBrowserAppUi::InitBrowserL() + { + // Bookmarks initialization + InitBookmarksL(); + + // 2nd part of initialization + DelayedInitL(); + #ifdef BRDO_IAD_UPDATE_ENABLED_FF - iDelayedUpdate = CIdle::NewL( CActive::EPriorityIdle ); - iDelayedUpdate->Start(TCallBack( CompleteIADUpdateCallback, this )); + // complete the IAD check asynchronously + if(!IsEmbeddedModeOn()) + { + iDelayedUpdate = CIdle::NewL( CActive::EPriorityIdle ); + iDelayedUpdate->Start(TCallBack( CompleteIADUpdateCallback, this )); + } #endif - } //if (iStartedUp) } + // ----------------------------------------------------------------------------- // CBrowserAppUi::ProcessCommandL(TInt aCommand) // ----------------------------------------------------------------------------- @@ -1183,6 +1180,11 @@ // void CBrowserAppUi::FetchBookmarkL( TInt aBookmarkUid ) { + // complete initialization if not done yet, can happen if user selects + // a bookmark quickly after launch (within 1 second) + if ( !iStartedUp ) + CompleteDelayedInit(); + SetViewToReturnOnClose( KUidBrowserBookmarksViewId ); if ( aBookmarkUid == KFavouritesStartPageUid ) { @@ -1221,6 +1223,11 @@ // void CBrowserAppUi::FetchBookmarkL( const CFavouritesItem& aBookmarkItem ) { + // complete initialization if not done yet, can happen if user selects + // a bookmark quickly after launch (within 1 second) + if ( !iStartedUp ) + CompleteDelayedInit(); + SetViewToReturnOnClose( KUidBrowserBookmarksViewId ); if ( Util::CheckBookmarkApL( *this, aBookmarkItem.WapAp()) ) FetchL @@ -1263,7 +1270,7 @@ ContentView()->SetFullScreenOffL(); } - if ( iWindowManager->ContentView()->FullScreenMode() ) + if ( iWindowManager && iWindowManager->ContentView()->FullScreenMode() ) { if ( aUid == KUidBrowserFeedsFeedViewId ) { @@ -1285,6 +1292,10 @@ { if ( aUid == KUidBrowserSettingsViewId ) { + //complete initialisation + if( !iStartedUp ) + CompleteDelayedInit(); + CEikStatusPane* sp = STATIC_CAST( CAknAppUi*, CEikonEnv::Static()->EikAppUi() ) ->StatusPane(); @@ -1353,11 +1364,10 @@ void CBrowserAppUi::HandleForegroundEventL( TBool aForeground ) { // Handle this event only if the browser is started up - if ( !StartedUp() ) - { + iIsForeground = IsForeground(); + if (!iStartedUp) return; - } - iIsForeground = IsForeground(); + if( iIsForeground ) { if (iViewToBeActivatedIfNeeded.iUid) @@ -1418,6 +1428,11 @@ CBrowserLoadObserver::TBrowserLoadUrlType aUrlType ) { LOG_ENTERFN("CBrowserAppUi::FetchL"); + + // complete the initialization if not done yet + if(!iStartedUp) + CompleteDelayedInit(); + // Let's cancel the previous fetch if any if ( Fetching() ) { @@ -1630,9 +1645,9 @@ TBool isStandAlone = !IsEmbeddedModeOn(); BROWSER_LOG( ( _L( " isStandAlone: %d" ), isStandAlone ) ); - if( isStandAlone && aUserInitiated ) + if(isStandAlone && aUserInitiated ) { - if( !BrCtlInterface().OkToExit() ) + if( iStartedUp && !BrCtlInterface().OkToExit() ) { return; } @@ -1670,7 +1685,7 @@ if( ( IsEmbeddedInOperatorMenu() || IsEmbeddedModeOn() ) && !ExitInProgress() && ((LoadObserver().LoadUrlType() == CBrowserLoadObserver::ELoadUrlTypeEmbeddedBrowserWithUrl) || - (LoadObserver().LoadUrlType() == CBrowserLoadObserver::ELoadUrlTypeOther) ) ) + (LoadObserver().LoadUrlType() == CBrowserLoadObserver::ELoadUrlTypeOther) ) ) // ELoadUrlTypeEmbeddedBrowserWithUrl is typical for load via Phonebook, MMS, OperatorMenu // ELoadUrlTypeOther is typical via Media download since those are via GotoPane entered urls { @@ -1698,9 +1713,12 @@ iConnection->Disconnect(); #ifdef __RSS_FEEDS BROWSER_LOG( ( _L( " iFeedsClientUtilities->DisconnectFeedsViewL()" ) ) ); + if ( iFeedsClientUtilities ) + { TRAP_IGNORE( iFeedsClientUtilities->DisconnectFeedsViewL() ); //notify feeds engine to close the connection TRAP_IGNORE( iFeedsClientUtilities->DisconnectManualUpdateConnectionL() ); + } #endif } if (SpecialLoadObserver().IsConnectionStarted()) @@ -1728,10 +1746,13 @@ TRAP_IGNORE( SendDisconnectEventL() ); iConnection->Disconnect(); #ifdef __RSS_FEEDS + if ( iFeedsClientUtilities ) + { BROWSER_LOG( ( _L( " iFeedsClientUtilities->DisconnectFeedsViewL()" ) ) ); TRAP_IGNORE( iFeedsClientUtilities->DisconnectFeedsViewL() ); //notify feeds engine to close the connection TRAP_IGNORE( iFeedsClientUtilities->DisconnectManualUpdateConnectionL() ); + } #endif } if (SpecialLoadObserver().IsConnectionStarted()) // If Connection request is in processing calling CAknAppUI::Exit() causes crash (JSAA-84RG9R) @@ -2101,7 +2122,7 @@ LOG_WRITE_FORMAT(" aCommand: %d", aCommand); // The browser is in embedded mode and it is not initialized yet - if ( !StartedUp() ) + if ( IsEmbeddedModeOn() && !iStartedUp) { return EFalse; } @@ -2146,16 +2167,19 @@ { specialSchemeInHomePageAddress = ETrue; SetLastActiveViewId(KUidBrowserBookmarksViewId); + SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId, 0); TRAPD( err, FetchL( ptr, CBrowserLoadObserver::ELoadUrlTypeOther ) ); } else { + SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId, 0); StartFetchHomePageL(); } CleanupStack::PopAndDestroy( 3,buf ); } else { + SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId, 0); StartFetchHomePageL(); } @@ -2262,6 +2286,11 @@ CleanupStack::PopAndDestroy( params ); CleanupStack::PushL( command ); + + // complete the delayed initialization if bookmarks view is not the first view + if(ViewToActivate != KUidBrowserBookmarksViewId && !iStartedUp) + CompleteDelayedInit(); + //wait a while, contentview initializing itself WaitCVInit(); switch ( command->Count() ) @@ -2293,7 +2322,9 @@ } else { + if (iStartedUp) ContentView()->SetFullScreenOffL(); + if ( !IsEmbeddedModeOn() ) { SetLastActiveViewId( KUidBrowserBookmarksViewId ); @@ -2584,7 +2615,7 @@ // void CBrowserAppUi::WaitCVInit() { - if( iParametrizedLaunchInProgress == 0 ) + if( iParametrizedLaunchInProgress == 0 && iStartedUp) { iParametrizedLaunchInProgress = 1; iIdle->Cancel(); @@ -3855,7 +3886,7 @@ if( activeView != NULL ) { activeView->HandleClientRectChange(); - if (activeView != ContentView()) + if ( ContentView() && (activeView != ContentView()) ) { ContentView()->HandleClientRectChange(); } @@ -4199,6 +4230,10 @@ void CBrowserAppUi::SendDisconnectEventL() { LOG_ENTERFN("CBrowserAppUi::SendDisconnectEventL"); + + if(!iStartedUp) + return; + SpecialLoadObserver().CancelConnection(); CArrayFixFlat* windows = iWindowManager->GetWindowInfoL( this ); if( windows ) @@ -4220,13 +4255,7 @@ CBrowserWindow* window = NULL; iWindowManager->Window( windows->At( 0 )->iWindowId, window ); - - // Close session only once - if (window) - { - window->BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandDisconnect + (TInt)TBrCtlDefs::ECommandIdBase ); - } - + // delete the window items before deleting the array for( i=0; iCount(); ++i ) delete windows->At( i ); @@ -4588,6 +4617,8 @@ // --------------------------------------------------------- void CBrowserAppUi::StartFetchHomePageL(void) { + if(!iStartedUp) + CompleteDelayedInit(); // There's a homepage to be launched so start in content view SetLastActiveViewId(KUidBrowserContentViewId); diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/BrowserAppSrc/BrowserContentView.cpp --- a/browserui/browser/BrowserAppSrc/BrowserContentView.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/BrowserAppSrc/BrowserContentView.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -983,6 +983,9 @@ delete iTitle; iTitle = NULL; + ApiProvider().Display().FSPaneOnL( ); + ApiProvider().Display().SetGPRSIndicatorOnL(); + UpdateTitleL( ApiProvider() ); ApiProvider().BrCtlInterface().MakeVisible(ETrue); @@ -1097,7 +1100,7 @@ } if (Layout_Meta_Data::IsLandscapeOrientation() && - (StatusPane() && StatusPane()->IsVisible()) && !Cba()->IsVisible()) + (StatusPane() && StatusPane()->IsVisible()) && !Cba()->IsVisible() && IsForeground()) { TRect screenRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, screenRect); diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/BrowserAppSrc/BrowserWindow.cpp --- a/browserui/browser/BrowserAppSrc/BrowserWindow.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/BrowserAppSrc/BrowserWindow.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -63,6 +63,10 @@ // CBrowserWindow::NewLC() // ----------------------------------------------------------------------------- // +TBool CBrowserWindow::CompleteDelayedInit() + { + } + CBrowserWindow* CBrowserWindow::NewLC( TInt aWindowId, const TDesC* aTargetName, diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesInc/BrowserBookmarksView.h --- a/browserui/browser/FavouritesInc/BrowserBookmarksView.h Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesInc/BrowserBookmarksView.h Mon Jun 21 15:43:41 2010 +0300 @@ -467,9 +467,26 @@ * Dim or Un-dim Toolbar buttons. */ void UpdateToolbarButtonsState(); + + /** + * Check to show downloads. + */ + void CheckForDownloads(); + + /** + * Initiates update for favicons + */ + void UpdateFavIconsL(); private: // data - + /** + * Callback for completing the Browser App init. Normally only + * BookmarksView is initialized first on startup. When bookmarks + * view is shown then this callback is scheduled to complete the + * remaining initialization. + */ + static TInt CompleteAppInitCallback( TAny* aApiProvider ); + /** * Uid of AP which is to be used for creating Start Page bookmark. */ @@ -548,7 +565,10 @@ // Re-Entry Gate flag for Delete Bookmark routine TBool iHandleDeleteInProgress; - + // Async callback object for delayed App init + CIdle *iAsyncComplete; + + TBool iShowDownlods; }; #endif diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesInc/BrowserFaviconHandler.h --- a/browserui/browser/FavouritesInc/BrowserFaviconHandler.h Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesInc/BrowserFaviconHandler.h Mon Jun 21 15:43:41 2010 +0300 @@ -106,7 +106,17 @@ /** - * Initiates getting favicons for the favourites list + * Initiates decoding of favicons for the favourites list in browserengine. + * This will request icon database thread to start decoding requested icons in background. + * @param aFavItems a list of favourites items + */ + void RequestFavicons( CFavouritesItemList* aFavItems ); + + /** + * This is async fetch operation from engine. One icon at a time is fetched and asynchronously + * scaled. E.g. if there are 5 icons to be fetched, then this will cause the BitmapScaler to be + * Active for 5 times. + * overall fetching is Async * @param aFavItems a list of favourites items */ void StartGetFaviconsL( CFavouritesItemList* aFavItems ); diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesInc/BrowserFavouritesListbox.h --- a/browserui/browser/FavouritesInc/BrowserFavouritesListbox.h Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesInc/BrowserFavouritesListbox.h Mon Jun 21 15:43:41 2010 +0300 @@ -287,6 +287,12 @@ * @param aRowIndex - index of row to be italicized */ void ItalicizeRowItemL(TInt aRowIndex); + + /** + * Updates the favourites icons in the list. Initiates async operation + * to fetch and draw icons in background during idle time. + */ + void UpdateFavIconsL(); protected: // Construct / destruct @@ -333,6 +339,11 @@ * returned state. */ void CalcNewStateL( CFavouritesItemList& aNewItems ); + + /** + * Callback for fetching and drawing favicons + */ + static TInt UpdateFavIconsCallback( TAny* aParam ); private: // new methods: index <--> Uid conversion @@ -454,6 +465,8 @@ * Italicized font for setting listbox rows to italics font. */ CFbsFont *iFontItalic; + + CIdle *iIconUpdateCallback; }; diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesSrc/BrowserBookmarksView.cpp --- a/browserui/browser/FavouritesSrc/BrowserBookmarksView.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesSrc/BrowserBookmarksView.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -125,7 +125,7 @@ delete iItemsToMove; delete iCurrentOrder; delete iEnteredURL; - iEnteredURL = NULL; + delete iAsyncComplete; BROWSER_LOG( ( _L("delete iEnteredUrl 1") ) ); iCursorPos = -1; } @@ -930,7 +930,8 @@ aRsk.setPair(EBrowserBookmarksCmdBack, R_BROWSER_BOOKMARKS_DYN_SK_TEXT_SOFTKEY_BACK); // OR, it could be exit under these conditions - if ( !iInAdaptiveBookmarksFolder && !ApiProvider().IsPageLoaded() && !ApiProvider().Fetching() ) + if ( !ApiProvider().StartedUp() || + (!iInAdaptiveBookmarksFolder && !ApiProvider().IsPageLoaded() && !ApiProvider().Fetching()) ) { if ( iCurrentFolder == KFavouritesRootUid ) { @@ -1125,6 +1126,7 @@ //Make it true so that latest FavIcon db info is shown iRefresh = ETrue; +#ifndef BRDO_PERF_IMPROVEMENTS_ENABLED_FF Toolbar()->HideItem( EWmlCmdAddBookmark, ETrue , EFalse); //disable both the goto items and activate one of them depending on availability of search feature during bookmarks activation @@ -1139,6 +1141,7 @@ Cba()->MakeVisible( EFalse); StatusPane()->MakeVisible( EFalse ); +#endif if (iPenEnabled) { @@ -1175,6 +1178,10 @@ } else if ( Container()->Listbox()->CurrentItem() ) { + //complete remaining startup in Browser and then proceed + if ( !ApiProvider().StartedUp() ) + ApiProvider().CompleteDelayedInit(); + if ( Container()->Listbox()->CurrentItem()->IsItem()) { ActivateCurrentBookmarkL(); @@ -1301,7 +1308,8 @@ #endif // downloads - aMenuPane->SetItemDimmed( EWmlCmdDownloads, !ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ) ); + if(ApiProvider().StartedUp()) + aMenuPane->SetItemDimmed( EWmlCmdDownloads, !ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ) ); // edit if ( !item || (iInAdaptiveBookmarksFolder && aState.IsEmpty() )) @@ -1347,7 +1355,7 @@ case R_GOTO_SUBMENU: { // back to page - if ( !ApiProvider().IsPageLoaded() && !ApiProvider().Fetching()) + if ( !ApiProvider().StartedUp() || (!ApiProvider().IsPageLoaded() && !ApiProvider().Fetching())) { aMenuPane->SetItemDimmed( EWmlCmdBackToPage, ETrue ); } @@ -2129,6 +2137,24 @@ LOG_ENTERFN("CBrowserBookmarksView::DoActivateL"); LOG_WRITE_FORMAT(" aCustomMessageId: %d", aCustomMessageId); +#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF + // Quick activation for first time only to show bookmarks view fast + if(!ApiProvider().StartedUp()) + { + CBrowserFavouritesView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); + if ( aCustomMessageId == KUidCustomMsgDownloadsList ) + { + iShowDownlods = ETrue; + // Show the downloads later since contentview has not initialized yet + } + + // complete remaining application launch process, aynchronously + iAsyncComplete = CIdle::NewL( CActive::EPriorityIdle ); + iAsyncComplete->Start( TCallBack( CompleteAppInitCallback, &iApiProvider ) ); + return; + } +#endif + Toolbar()->HideItem( EWmlCmdAddBookmark, EFalse , ETrue); #ifndef BRDO_SINGLE_CLICK_ENABLED_FF @@ -2197,6 +2223,40 @@ } // ---------------------------------------------------------------------------- +// CBrowserBookmarksView::CompleteAppInitCallback +// ---------------------------------------------------------------------------- +// +TInt CBrowserBookmarksView::CompleteAppInitCallback( TAny* aProvider ) + { + MApiProvider *apiProvider = STATIC_CAST(MApiProvider*, aProvider); + TBool result = apiProvider->CompleteDelayedInit(); + return result; + } + +// ---------------------------------------------------------------------------- +// CBrowserBookmarksView::UpdateFavIcons +// ---------------------------------------------------------------------------- +// +void CBrowserBookmarksView::UpdateFavIconsL() + { + Container()->Listbox()->UpdateFavIconsL(); + } + + +// ---------------------------------------------------------------------------- +// CBrowserBookmarksView::CheckForDownloads +// ---------------------------------------------------------------------------- +// +void CBrowserBookmarksView::CheckForDownloads() + { + if(iShowDownlods) + { + if ( iDownloadsListExecuter == 0 ) + iDownloadsListExecuter = new (ELeave) CAsyncDownloadsListExecuter( ApiProvider() ); + iDownloadsListExecuter->Start(); + } + } +// ---------------------------------------------------------------------------- // CBrowserBookmarksView::DoDeactivate // ---------------------------------------------------------------------------- // @@ -2208,7 +2268,8 @@ } if ( !ApiProvider().ExitInProgress() ) { - ApiProvider().BrCtlInterface().RemoveLoadEventObserver( this ); + if ( ApiProvider().StartedUp() ) + ApiProvider().BrCtlInterface().RemoveLoadEventObserver( this ); } CBrowserFavouritesView::DoDeactivate(); iManualItemMovingGoingOn = EFalse; diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesSrc/BrowserFaviconHandler.cpp --- a/browserui/browser/FavouritesSrc/BrowserFaviconHandler.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesSrc/BrowserFaviconHandler.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -121,6 +121,31 @@ } // ---------------------------------------------------------------------------- +// CBrowserFaviconHandler::RequestFavicons() +// ---------------------------------------------------------------------------- +// +void CBrowserFaviconHandler::RequestFavicons( CFavouritesItemList* aFavItems ) + { + TInt count = aFavItems->Count(); + while(count) + { + CFavouritesItem& item = *aFavItems->At( count - 1); // index starts from 0 + CGulIcon *favIcon = NULL; + + // Request Favicon from Engine - there should be new API for request, but no har to use it + if ( item.Url().Length() ) + iFavicon = iApiProvider.BrCtlInterface().GetBitmapData(item.Url(), TBrCtlDefs::EBitmapFavicon ); + + if ( favIcon ) + { + delete iFavicon; + iFavicon = NULL; + } + count--; + } + } + +// ---------------------------------------------------------------------------- // CBrowserFaviconHandler::StartGetFaviconsL() // ---------------------------------------------------------------------------- // @@ -162,10 +187,7 @@ { iWasLastItemFavicon = EFalse; - CFavouritesItem& item = *iFavItems->At( iFavItemsCurrentIndex ); - HBufC* url = HBufC::NewLC( item.Url().Length() ); - url->Des().Copy( item.Url() ); - + CFavouritesItem& item = *iFavItems->At( iFavItemsCurrentIndex ); if ( iFavicon ) { // Make sure ongoing scaling is cancelled (if any) @@ -179,10 +201,9 @@ // Get Favicon from Engine if ( item.Url().Length() ) { - iFavicon = iApiProvider.BrCtlInterface().GetBitmapData( - *url, TBrCtlDefs::EBitmapFavicon ); + iFavicon = iApiProvider.BrCtlInterface().GetBitmapData(item.Url(), TBrCtlDefs::EBitmapFavicon ); } - CleanupStack::PopAndDestroy();//url + // Asynchronously scales the favicon and stores it in an array if ( iFavicon ) { diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesSrc/BrowserFavouritesContainer.cpp --- a/browserui/browser/FavouritesSrc/BrowserFavouritesContainer.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesSrc/BrowserFavouritesContainer.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -291,8 +291,7 @@ { iView = &aView; - CAknNavigationControlContainer* naviPane = - iView->ApiProvider().Display().NaviPaneL(); + //CAknNavigationControlContainer* naviPane = iView->ApiProvider().Display().NaviPaneL(); CreateWindowL(); SetMopParent( iView ); diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesSrc/BrowserFavouritesListbox.cpp --- a/browserui/browser/FavouritesSrc/BrowserFavouritesListbox.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesSrc/BrowserFavouritesListbox.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -107,6 +107,8 @@ delete iIconIndexes; delete iItems; delete iNewState; + if(iIconUpdateCallback) iIconUpdateCallback->Cancel(); + delete iIconUpdateCallback; if ( iFontItalic ) { @@ -144,7 +146,16 @@ CleanupStack::PushL( aItems ); // Get all favicons asynchronously by iteration on icon array + /* TODO: There should a callback from engine when favIcon are decode + otherwise it takes some redundant calls to engine in order to get + the favIcons to UI. */ +#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF + if(iApiProvider.StartedUp()) + UpdateFavIconsL(); +#else iFaviconHandler->StartGetFaviconsL( aItems ); +#endif + // Get icon indexes into new list. Replace the existing // data only if successfully gotten. This ensures that they don't go out @@ -188,6 +199,33 @@ } // --------------------------------------------------------- +// CBrowserFavouritesListbox::UpdateFavIcons +// --------------------------------------------------------- +// +void CBrowserFavouritesListbox::UpdateFavIconsL() + { + if(iIconUpdateCallback) + iIconUpdateCallback->Cancel(); + else + iIconUpdateCallback = CIdle::NewL(CActive::EPriorityIdle); + + iFaviconHandler->RequestFavicons(iItems); + iIconUpdateCallback->Start(TCallBack(UpdateFavIconsCallback, this)); + } + +// ---------------------------------------------------------------------------- +// CBrowserBookmarksView::CompleteAppInitCallback +// ---------------------------------------------------------------------------- +// +TInt CBrowserFavouritesListbox::UpdateFavIconsCallback( TAny* aParam ) + { + CBrowserFavouritesListbox *favListBox = STATIC_CAST(CBrowserFavouritesListbox*, aParam); + TRAP_IGNORE( (favListBox->iFaviconHandler->StartGetFaviconsL(favListBox->iItems)) ) + return EFalse; + } + + +// --------------------------------------------------------- // CBrowserFavouritesListbox::DrawFavicons // --------------------------------------------------------- // diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/FavouritesSrc/BrowserFavouritesView.cpp --- a/browserui/browser/FavouritesSrc/BrowserFavouritesView.cpp Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/FavouritesSrc/BrowserFavouritesView.cpp Mon Jun 21 15:43:41 2010 +0300 @@ -19,6 +19,11 @@ // INCLUDE FILES +#include +#include +#include +#include + #include #include #include @@ -258,6 +263,7 @@ iInitialFolder = iCurrentFolder; // Ap model cannot be created without opening it; so that's not done here. // DoActivateL / DoDecativateL does that. + Cba()->MakeVisible(EFalse); // avoid multiple redraws } // --------------------------------------------------------- @@ -459,7 +465,7 @@ iPreviousViewID = ApiProvider().LastActiveViewId( ); ApiProvider().SetLastActiveViewId( Id() ); ApiProvider().CommsModel().AddObserverL( *this ); - iContainer = CreateContainerL(); + iContainer = CreateContainerL(); // can this be created during construct ? iModel->AddObserverL( *this ); AppUi()->AddToViewStackL( *this, iContainer ); @@ -489,7 +495,7 @@ } iContainer->Listbox()->View()->SetDisableRedraw( redrawDisabled ); - iContainer->Listbox()->DrawNow(); + iContainer->Listbox()->DrawDeferred(); } else { @@ -509,11 +515,13 @@ } iIsActivated = ETrue; - PERFLOG_STOPWATCH_START; +#ifndef BRDO_PERF_IMPROVEMENTS_ENABLED_FF + // TODO: Remove this crapy refresh once favicon callback interface + // with engine is implemented. if(!iFavViewRefresh) iFavViewRefresh = CIdle::NewL( CActive::EPriorityIdle ); iFavViewRefresh ->Start( TCallBack( RefeshFavoriteListBox, this ) ); - PERFLOG_STOP_WRITE("\t Favourite view NewL"); +#endif } @@ -1106,7 +1114,17 @@ if ( aFolder == KFavouritesRootUid ) { UpdateNaviPaneL(); // remove NaviPane before setting title - SetTitleL redraws - ApiProvider().Display().SetTitleL( RootTitleResourceId() ); + if(ApiProvider().StartedUp()) + ApiProvider().Display().SetTitleL( RootTitleResourceId() ); + else + { + // 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 ) ) ); + HBufC* name = CEikonEnv::Static()->AllocReadResourceLC( R_BROWSER_OPTION_BOOKMARKS ); + title->SetTextL( *name ); + CleanupStack::PopAndDestroy(); // name + } } else { @@ -1132,7 +1150,7 @@ iCurrentFolder = aFolder; FillListboxL( aFolder, /*aKeepState=*/EFalse ); - Container()->Listbox()->ClearSelection(); + Container()->Listbox()->ClearSelection(); // is it needed ? UpdateCbaL(); UpdateNaviPaneL(); } @@ -1296,15 +1314,20 @@ aknview->SetFindEmptyListState(ETrue); } - iContainer->SizeChanged(); // Needed to show/hide Find Pane! + if(ApiProvider().StartedUp()) + iContainer->SizeChanged(); // Needed to show/hide Find Pane! iCurrentFolder = aFolder; HighlightPreferredL(); iContainer->HandleCursorChangedL( listbox ); listbox->View()->SetDisableRedraw( redrawDisabled ); - listbox->DrawNow(); - UpdateCbaL(); - UpdateNaviPaneL(); + + if(ApiProvider().StartedUp()) + { + listbox->DrawDeferred(); + UpdateCbaL(); + UpdateNaviPaneL(); + } } // ---------------------------------------------------------------------------- diff -r aead3f7e1bb0 -r b149f0820e5a browserui/browser/SrcData/bookmark_toolbar.rssi --- a/browserui/browser/SrcData/bookmark_toolbar.rssi Wed Jun 09 09:45:02 2010 +0300 +++ b/browserui/browser/SrcData/bookmark_toolbar.rssi Mon Jun 21 15:43:41 2010 +0300 @@ -81,29 +81,7 @@ } }; }; - }, - - TBAR_CTRL //Search Goto - { - type = EAknCtButton; - id = EWmlCmdGoToAddressAndSearch; - control = AVKON_BUTTON - { - flags = 0; - states = - { - AVKON_BUTTON_STATE - { - txt = ""; //Icon should always be visible instead of this - helptxt = qtn_is_tooltip_goto_search; - bmpfile = "\\Resource\\apps\\browser.mif"; - bmpid = EMbmBrowserQgn_indi_browser_tb_goto_and_search; - bmpmask = EMbmBrowserQgn_indi_browser_tb_goto_and_search_mask; - extension = r_browser_ext_qgn_indi_browser_tb_goto_and_search; - } - }; - }; - }, + }, #ifdef BRDO_SINGLE_CLICK_ENABLED_FF TBAR_CTRL { @@ -149,9 +127,31 @@ } }; }; - } - #endif - }; + } + #endif + , + TBAR_CTRL //Search Goto + { + type = EAknCtButton; + id = EWmlCmdGoToAddressAndSearch; + control = AVKON_BUTTON + { + flags = 0; + states = + { + AVKON_BUTTON_STATE + { + txt = ""; //Icon should always be visible instead of this + helptxt = qtn_is_tooltip_goto_search; + bmpfile = "\\Resource\\apps\\browser.mif"; + bmpid = EMbmBrowserQgn_indi_browser_tb_goto_and_search; + bmpmask = EMbmBrowserQgn_indi_browser_tb_goto_and_search_mask; + extension = r_browser_ext_qgn_indi_browser_tb_goto_and_search; + } + }; + }; + } + }; } #else