diff -r 6b5524b4f673 -r 38bb213f60ba logsui/AppSrc/CLogsRecentListView.cpp --- a/logsui/AppSrc/CLogsRecentListView.cpp Wed Sep 15 11:56:55 2010 +0300 +++ b/logsui/AppSrc/CLogsRecentListView.cpp Wed Oct 13 14:15:33 2010 +0300 @@ -29,8 +29,8 @@ #include #include #include -#include -#include +#include +#include #include //KAiwCmdCall #include //TAiwPocParameterData #include @@ -428,10 +428,11 @@ // Reset array and set dirty which means refresh requested, // will call StateChangedL with state EStateArrayReseted and update the listbox. - // Keep db connection. CurrentModel()->DoDeactivate( MLogsModel::ESkipClearing, - MLogsModel::EKeepDBConnection ); + MLogsModel::EResetOnlyArrayWithDirty ); + // On gaining foreground, do a clean read of events + iResetAndRefreshOnGainingForeground = MLogsModel::EResetAndRefresh; } CAknView::ViewDeactivated(); @@ -512,22 +513,14 @@ // With MLogsModel::ECloseDBConnectionAndResetArray the connection to the database is // closed and event array will be deleted. Calls StateChangedL with state EStateArrayReseted // which will update the listbox to empty state. - // Keep db connection CurrentModel()->DoDeactivate( MLogsModel::ENormalOperation, - MLogsModel::EKeepDBConnection ); + MLogsModel::ECloseDBConnectionAndResetArray ); - CurrentModel()->DoActivateL( MLogsModel::EResetAndRefresh ); // Now we can enable bring-to-foreground on view activation: AppUi()->SetCustomControl(0); AppUi()->HideInBackground(); - // If listbox needs to redraw,do it. - if( CurrentModel()->Count()>0 && - ( iContainer->ListBox()->TopItemIndex() != EventListTop() || - iContainer->ListBox()->CurrentItemIndex() != EventListCurrent())) - { - iContainer->ListBox()->DrawDeferred(); - } - + // When coming back to foreground, do a clean read of events + iResetAndRefreshOnGainingForeground = MLogsModel::EResetAndRefresh; } else { @@ -547,19 +540,11 @@ logsui.KillTask(); return; } - - // Avoid the flicking when transfer to foreground from background. - if(LogsAppUi()->IsBackground()) - { - iContainer->DrawNow(); - iEikonEnv->AppUiFactory()->StatusPane()->DrawNow(); - LogsAppUi()->SetCustomControl(0); - - CCoeEnv * env = CCoeEnv::Static(); - env->WsSession().SetWindowGroupOrdinalPosition(env->RootWin().Identifier(),0); - - } - + + // By default on gaining foreground, just refresh the list. So when active applications list, + // keylock or some note (like when plugin in the charger) is shown the list doesn't flicker. + // When view is deactivated this is set to MLogsModel::EResetAndRefresh. + iResetAndRefreshOnGainingForeground = MLogsModel::ERefresh; } @@ -659,9 +644,8 @@ LOGS_DEBUG_PRINT(LOGS_DEBUG_STRING ( "CLogsRecentListView::DoDeactivate - ReadingFinished" )); ClearMissedCallNotifications(); //Clear cenrep new missed calls counter + notifications - // Keep db connection CurrentModel()->DoDeactivate( MLogsModel::ENormalOperation, - MLogsModel::EKeepDBConnection );//ETrue: disconnect from db. This helps for EMSH-6JDFBV but + MLogsModel::ECloseDBConnection );//ETrue: disconnect from db. This helps for EMSH-6JDFBV but //reduces user's perceived performance for other views //(seems to keep clearing of missed duplicates process alive // so no need for EFalse here as it would increase probability of @@ -673,15 +657,14 @@ { LOGS_DEBUG_PRINT(LOGS_DEBUG_STRING ( "CLogsRecentListView::DoDeactivate - Reading interrupted" )); - // Keep db connection CurrentModel()->DoDeactivate( MLogsModel::ESkipClearing, - MLogsModel::EKeepDBConnection ); + MLogsModel::ECloseDBConnection ); } } else { CurrentModel()->DoDeactivate( MLogsModel::ENormalOperation, - MLogsModel::EKeepDBConnection );//ETrue: disconnect from db. This helps for EMSH-6JDFBV but + MLogsModel::ECloseDBConnection );//ETrue: disconnect from db. This helps for EMSH-6JDFBV but //reduces user's perceived performance for other views //EFalse: don't disconnect from db. This keeps read data cached in Logs. } @@ -871,7 +854,28 @@ { MenuBar()->StopDisplayingMenuBar(); } - } + + SetEventListCurrent( KErrNotFound );//just to make sure that UI does not try to read anything from eventarray + TRAPD( err, model->DoActivateL( iResetAndRefreshOnGainingForeground ) ); + if( err ) + { + iCoeEnv->HandleError( err ); + } + if( err == KErrDiskFull ) + { + RWsSession& wsSession = CCoeEnv::Static()->WsSession(); + TApaTask logsui( wsSession ); + TInt wgId = CCoeEnv::Static()->RootWin().WindowGroupId(); + logsui.SetWgId( wgId ); + logsui.KillTask(); + return; + } + + // By default on gaining foreground, just refresh the list. So when active applications list, + // keylock or some note (like when plugin in the charger) is shown the list doesn't flicker. + // When view is deactivated this is set to MLogsModel::EResetAndRefresh. + iResetAndRefreshOnGainingForeground = MLogsModel::ERefresh; + } else { // Change ELogsNoChange_PbkUpdPending to ELogsNoChange now so there is no need to @@ -879,8 +883,6 @@ iFocusChangeControl = ELogsNoChange; } } - // Sure "ClearMissedCallNotifications" is called. - ClearMissedCallNotifications(); RemoveInputBlocker(); //just in case } @@ -991,18 +993,16 @@ { LOGS_DEBUG_PRINT(LOGS_DEBUG_STRING ( "CLogsRecentListView::HandleLosingForeground - clear duplicates" )); - // Keep db connection model->DoDeactivate( MLogsModel::ENormalOperation, - MLogsModel::EKeepDBConnection ); //EFalse: don't disconnect from db + MLogsModel::ECloseDBConnection ); //EFalse: don't disconnect from db } else { LOGS_DEBUG_PRINT(LOGS_DEBUG_STRING ( "CLogsRecentListView::HandleLosingForeground - skip clearing" )); //Other loss of foreground (call or AppKey). We'll not touch duplicate counters - // Keep db connection model->DoDeactivate( MLogsModel::ESkipClearing, //Don't update db (for missed view) - MLogsModel::EKeepDBConnection ); //ETrue: disconnect from db in order to immediately to stop + MLogsModel::ECloseDBConnection ); //ETrue: disconnect from db in order to immediately to stop //EFalse: don't disconnect from db } } @@ -1094,9 +1094,7 @@ iContainer->ControlExtension()->HandleAdditionalData( *CurrentModel(), *iContainer->ListBox() ); - // Add condition check: To avoid Missing Call Note don't display ,do not call "ClearMissedCallNotificationsL" when logs is in background. - if(!LogsAppUi()->IsBackground()) - ClearMissedCallNotificationsL(); + ClearMissedCallNotificationsL(); // When event reading is finished, remove inputblocker RemoveInputBlocker(); } @@ -1273,17 +1271,5 @@ return result; } -void CLogsRecentListView::ViewActivatedL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,const TDesC8& aCustomMessage) - { - //To avoid the flicking when transfer to foreground from background,we control the view show manually. - if(LogsAppUi()->IsBackground() && - LogsAppUi()->ActiveViewId() != LogsCurrentRecentViewId() ) - { - LogsAppUi()->SetCustomControl(1); - } - - CLogsBaseView::ViewActivatedL(aPrevViewId,aCustomMessageId,aCustomMessage); - - } // End of File