phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp
branchRCL_3
changeset 8 5586b4d2ec3e
parent 7 b3431bff8c19
child 9 0d28c1c5b6dd
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp	Wed Mar 31 21:13:53 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp	Wed Apr 14 15:45:35 2010 +0300
@@ -328,21 +328,31 @@
          * @return  ETrue if mass update process is ongoing.
          */
        TBool MassUpdateDetected();
+       
+       /**
+        * Call this function to skip the showing of blocking progress note.
+		* When done MassUpdateSkipProgressNote( EFalse ) must be called to reset.
+        */
+      void MassUpdateSkipProgressNote( TBool aSkip );       
 
     private:
         CPbk2HandleMassUpdate(CEikListBox& iListBox);
         void ConstructL();
         TBool HandleMassUpdateCheckL();
-        void HandleMassUpdateCheckReset();
+        void HandleMassUpdateBurstL(
+            const TTimeIntervalMicroSeconds aFromFirst, 
+            const TInt64 aDeltaMax64);        
+        void HandleMassUpdateResetCounters();
         void HandleMassUpdateDone();
         static TInt HandleMassUpdateTimerCallBack(TAny* aAny);
 
     private:
 		CEikListBox& iListBox;
-        TBool iHandleMassUpdate;
+        TBool iHandleMassUpdateDetected;
         TTime iHandleMassUpdateFirst;
         TTime iHandleMassUpdatePrev;
         TInt  iHandleMassUpdateCount;
+        TBool iHandleMassUpdateSkipDialog;        
         CPeriodic* iHandleMassUpdateTimer;
 		CAknWaitDialog*  iHandleMassUpdateDialog;
     };
@@ -692,8 +702,8 @@
         }
     else
         {
-        //very first update, set time & counter
-        HandleMassUpdateCheckReset();
+        //very first update, reset time & counter
+        HandleMassUpdateResetCounters();
         }
     return ret;
     }
@@ -704,10 +714,20 @@
 //
 TBool CPbk2HandleMassUpdate::MassUpdateDetected()
     {
-	return iHandleMassUpdate;
+	return iHandleMassUpdateDetected;
 	}
 
 // --------------------------------------------------------------------------
+// CPbk2HandleMassUpdate::MassUpdateSkipProgressNote
+// --------------------------------------------------------------------------
+//
+void CPbk2HandleMassUpdate::MassUpdateSkipProgressNote( TBool aSkip )
+    {
+    iHandleMassUpdateSkipDialog = aSkip;
+    HandleMassUpdateResetCounters();        
+    }
+
+// --------------------------------------------------------------------------
 // CPbk2HandleMassUpdate::HandleMassUpdateCheckL
 // --------------------------------------------------------------------------
 //
@@ -724,34 +744,19 @@
 
     TTime now;
     now.UniversalTime();
-    TTimeIntervalMicroSeconds fs = now.MicroSecondsFrom(iHandleMassUpdateFirst);
-    TTimeIntervalMicroSeconds ps = now.MicroSecondsFrom(iHandleMassUpdatePrev);
+    TTimeIntervalMicroSeconds fromFirst = 
+            now.MicroSecondsFrom(iHandleMassUpdateFirst);
+    TTimeIntervalMicroSeconds fromPrev = 
+            now.MicroSecondsFrom(iHandleMassUpdatePrev);
     TTimeIntervalMicroSeconds maxCumu(KDeltaAverage * iHandleMassUpdateCount);
 
-    if( fs < maxCumu && ps < KMaxPrev )
+    if( fromFirst < maxCumu && fromPrev < KMaxPrev )
         {
         //mass update burst ongoing
-        iHandleMassUpdate=ETrue;
-        iHandleMassUpdateCount++;
-        iHandleMassUpdatePrev.UniversalTime();
-        iListBox.UpdateScrollBarsL();
-
-        if( !iHandleMassUpdateDialog )
-            {
-            iHandleMassUpdateDialog = new(ELeave) CAknWaitDialog
-                (reinterpret_cast<CEikDialog**>(&iHandleMassUpdateDialog), EFalse);
-            iHandleMassUpdateDialog->SetTone(CAknNoteDialog::ENoTone);
-            iHandleMassUpdateDialog->ExecuteLD(R_QTN_GEN_NOTE_SYNCHRONIZING_PROGRESS);
-			//ExecuteLD above handles validity of pointer iHandleMassUpdateDialog plus
-			//cleanupstack
-            }
-
-        TCallBack callback(HandleMassUpdateTimerCallBack, this);
-        TTimeIntervalMicroSeconds32 delta32(KDeltaMax);
-        iHandleMassUpdateTimer->Start( delta32, delta32, callback );
-        ret = ETrue;
+        HandleMassUpdateBurstL(fromFirst, KDeltaMax);    
+        ret = ETrue;    
         }
-    else if(iHandleMassUpdate)
+    else if(iHandleMassUpdateDetected)
         {
         //mass update burst ended
         HandleMassUpdateDone();
@@ -759,19 +764,60 @@
         }
     else
         {
-        //just normal update, set time & counter
-        HandleMassUpdateCheckReset();
+        //just normal update so reset counters
+        HandleMassUpdateResetCounters();
         }
     return ret;
     }
 
+// --------------------------------------------------------------------------
+// CPbk2HandleMassUpdate::HandleMassUpdateBurstL
+// --------------------------------------------------------------------------
+//
+void CPbk2HandleMassUpdate::HandleMassUpdateBurstL(
+    const TTimeIntervalMicroSeconds aFromFirst,
+    const TInt64 aDeltaMax64)
+    {
+    const TInt64 KMinWaitBeforeBlockUi(1500000);    
+    const TTimeIntervalMicroSeconds KWait(KMinWaitBeforeBlockUi);    
+    
+    //mass update burst ongoing, nameslist behaviour can be altered
+    iHandleMassUpdateDetected=ETrue;
+    iHandleMassUpdateCount++;
+    iHandleMassUpdatePrev.UniversalTime();
+    iListBox.UpdateScrollBarsL();
+
+    if( !iHandleMassUpdateDialog && 
+        !iHandleMassUpdateSkipDialog && 
+        aFromFirst > KWait)        
+        {
+        //mass update burst ongoing, ok also to block ui
+        iHandleMassUpdateDialog = new(ELeave) CAknWaitDialog
+            (reinterpret_cast<CEikDialog**>(&iHandleMassUpdateDialog), EFalse);
+        iHandleMassUpdateDialog->SetTone(CAknNoteDialog::ENoTone);
+        iHandleMassUpdateDialog->ExecuteLD(R_QTN_GEN_NOTE_SYNCHRONIZING_PROGRESS);
+        //ExecuteLD above handles validity of pointer iHandleMassUpdateDialog plus
+        //cleanupstack
+        }
+    else if( iHandleMassUpdateDialog && iHandleMassUpdateSkipDialog)
+        {
+        //burst ongoing but do not not block ui
+        TRAP_IGNORE(iHandleMassUpdateDialog->ProcessFinishedL());
+        delete iHandleMassUpdateDialog;
+        iHandleMassUpdateDialog = NULL;        
+        }
+
+    TCallBack callback(HandleMassUpdateTimerCallBack, this);
+    TTimeIntervalMicroSeconds32 delta32(aDeltaMax64);
+    iHandleMassUpdateTimer->Start( delta32, delta32, callback );
+    }
+
 // ----------------------------------------------------------------------------
-// CPbk2HandleMassUpdate::HandleMassUpdateCheckReset
+// CPbk2HandleMassUpdate::HandleMassUpdateResetCounters
 // ----------------------------------------------------------------------------
 //
-void CPbk2HandleMassUpdate::HandleMassUpdateCheckReset()
+void CPbk2HandleMassUpdate::HandleMassUpdateResetCounters()
     {
-    iHandleMassUpdate=EFalse;
     iHandleMassUpdateCount = 1;  //set as first candidate for next burst
     iHandleMassUpdateFirst.UniversalTime();
     iHandleMassUpdatePrev=iHandleMassUpdateFirst;
@@ -803,7 +849,8 @@
         iHandleMassUpdateDialog = NULL;
         }
 
-    HandleMassUpdateCheckReset();
+    iHandleMassUpdateDetected = EFalse;
+    HandleMassUpdateResetCounters();
     iListBox.SetCurrentItemIndex(0);
     iListBox.SetTopItemIndex(0);
     }
@@ -1227,6 +1274,15 @@
     }
 
 // --------------------------------------------------------------------------
+// CPbk2NamesListControl::MassUpdateSkipProgressNote
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2NamesListControl::MassUpdateSkipProgressNote( TBool aSkip )
+    {
+    iCheckMassUpdate->MassUpdateSkipProgressNote( aSkip ); 
+    }
+
+// --------------------------------------------------------------------------
 // CPbk2NamesListControl::View
 // --------------------------------------------------------------------------
 //