phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp
branchRCL_3
changeset 8 5586b4d2ec3e
parent 7 b3431bff8c19
child 9 0d28c1c5b6dd
equal deleted inserted replaced
7:b3431bff8c19 8:5586b4d2ec3e
   326         /**
   326         /**
   327          * Call this function to check if mass update process is ongoing.
   327          * Call this function to check if mass update process is ongoing.
   328          * @return  ETrue if mass update process is ongoing.
   328          * @return  ETrue if mass update process is ongoing.
   329          */
   329          */
   330        TBool MassUpdateDetected();
   330        TBool MassUpdateDetected();
       
   331        
       
   332        /**
       
   333         * Call this function to skip the showing of blocking progress note.
       
   334 		* When done MassUpdateSkipProgressNote( EFalse ) must be called to reset.
       
   335         */
       
   336       void MassUpdateSkipProgressNote( TBool aSkip );       
   331 
   337 
   332     private:
   338     private:
   333         CPbk2HandleMassUpdate(CEikListBox& iListBox);
   339         CPbk2HandleMassUpdate(CEikListBox& iListBox);
   334         void ConstructL();
   340         void ConstructL();
   335         TBool HandleMassUpdateCheckL();
   341         TBool HandleMassUpdateCheckL();
   336         void HandleMassUpdateCheckReset();
   342         void HandleMassUpdateBurstL(
       
   343             const TTimeIntervalMicroSeconds aFromFirst, 
       
   344             const TInt64 aDeltaMax64);        
       
   345         void HandleMassUpdateResetCounters();
   337         void HandleMassUpdateDone();
   346         void HandleMassUpdateDone();
   338         static TInt HandleMassUpdateTimerCallBack(TAny* aAny);
   347         static TInt HandleMassUpdateTimerCallBack(TAny* aAny);
   339 
   348 
   340     private:
   349     private:
   341 		CEikListBox& iListBox;
   350 		CEikListBox& iListBox;
   342         TBool iHandleMassUpdate;
   351         TBool iHandleMassUpdateDetected;
   343         TTime iHandleMassUpdateFirst;
   352         TTime iHandleMassUpdateFirst;
   344         TTime iHandleMassUpdatePrev;
   353         TTime iHandleMassUpdatePrev;
   345         TInt  iHandleMassUpdateCount;
   354         TInt  iHandleMassUpdateCount;
       
   355         TBool iHandleMassUpdateSkipDialog;        
   346         CPeriodic* iHandleMassUpdateTimer;
   356         CPeriodic* iHandleMassUpdateTimer;
   347 		CAknWaitDialog*  iHandleMassUpdateDialog;
   357 		CAknWaitDialog*  iHandleMassUpdateDialog;
   348     };
   358     };
   349 
   359 
   350 // --------------------------------------------------------------------------
   360 // --------------------------------------------------------------------------
   690         iHandleMassUpdateCount++;
   700         iHandleMassUpdateCount++;
   691         iHandleMassUpdatePrev.UniversalTime();
   701         iHandleMassUpdatePrev.UniversalTime();
   692         }
   702         }
   693     else
   703     else
   694         {
   704         {
   695         //very first update, set time & counter
   705         //very first update, reset time & counter
   696         HandleMassUpdateCheckReset();
   706         HandleMassUpdateResetCounters();
   697         }
   707         }
   698     return ret;
   708     return ret;
   699     }
   709     }
   700 
   710 
   701 // --------------------------------------------------------------------------
   711 // --------------------------------------------------------------------------
   702 // CPbk2HandleMassUpdate::MassUpdateDetected
   712 // CPbk2HandleMassUpdate::MassUpdateDetected
   703 // --------------------------------------------------------------------------
   713 // --------------------------------------------------------------------------
   704 //
   714 //
   705 TBool CPbk2HandleMassUpdate::MassUpdateDetected()
   715 TBool CPbk2HandleMassUpdate::MassUpdateDetected()
   706     {
   716     {
   707 	return iHandleMassUpdate;
   717 	return iHandleMassUpdateDetected;
   708 	}
   718 	}
       
   719 
       
   720 // --------------------------------------------------------------------------
       
   721 // CPbk2HandleMassUpdate::MassUpdateSkipProgressNote
       
   722 // --------------------------------------------------------------------------
       
   723 //
       
   724 void CPbk2HandleMassUpdate::MassUpdateSkipProgressNote( TBool aSkip )
       
   725     {
       
   726     iHandleMassUpdateSkipDialog = aSkip;
       
   727     HandleMassUpdateResetCounters();        
       
   728     }
   709 
   729 
   710 // --------------------------------------------------------------------------
   730 // --------------------------------------------------------------------------
   711 // CPbk2HandleMassUpdate::HandleMassUpdateCheckL
   731 // CPbk2HandleMassUpdate::HandleMassUpdateCheckL
   712 // --------------------------------------------------------------------------
   732 // --------------------------------------------------------------------------
   713 //
   733 //
   722     const TTimeIntervalMicroSeconds KMaxPrev(KDeltaMax);
   742     const TTimeIntervalMicroSeconds KMaxPrev(KDeltaMax);
   723     TBool ret(EFalse);
   743     TBool ret(EFalse);
   724 
   744 
   725     TTime now;
   745     TTime now;
   726     now.UniversalTime();
   746     now.UniversalTime();
   727     TTimeIntervalMicroSeconds fs = now.MicroSecondsFrom(iHandleMassUpdateFirst);
   747     TTimeIntervalMicroSeconds fromFirst = 
   728     TTimeIntervalMicroSeconds ps = now.MicroSecondsFrom(iHandleMassUpdatePrev);
   748             now.MicroSecondsFrom(iHandleMassUpdateFirst);
       
   749     TTimeIntervalMicroSeconds fromPrev = 
       
   750             now.MicroSecondsFrom(iHandleMassUpdatePrev);
   729     TTimeIntervalMicroSeconds maxCumu(KDeltaAverage * iHandleMassUpdateCount);
   751     TTimeIntervalMicroSeconds maxCumu(KDeltaAverage * iHandleMassUpdateCount);
   730 
   752 
   731     if( fs < maxCumu && ps < KMaxPrev )
   753     if( fromFirst < maxCumu && fromPrev < KMaxPrev )
   732         {
   754         {
   733         //mass update burst ongoing
   755         //mass update burst ongoing
   734         iHandleMassUpdate=ETrue;
   756         HandleMassUpdateBurstL(fromFirst, KDeltaMax);    
   735         iHandleMassUpdateCount++;
   757         ret = ETrue;    
   736         iHandleMassUpdatePrev.UniversalTime();
   758         }
   737         iListBox.UpdateScrollBarsL();
   759     else if(iHandleMassUpdateDetected)
   738 
       
   739         if( !iHandleMassUpdateDialog )
       
   740             {
       
   741             iHandleMassUpdateDialog = new(ELeave) CAknWaitDialog
       
   742                 (reinterpret_cast<CEikDialog**>(&iHandleMassUpdateDialog), EFalse);
       
   743             iHandleMassUpdateDialog->SetTone(CAknNoteDialog::ENoTone);
       
   744             iHandleMassUpdateDialog->ExecuteLD(R_QTN_GEN_NOTE_SYNCHRONIZING_PROGRESS);
       
   745 			//ExecuteLD above handles validity of pointer iHandleMassUpdateDialog plus
       
   746 			//cleanupstack
       
   747             }
       
   748 
       
   749         TCallBack callback(HandleMassUpdateTimerCallBack, this);
       
   750         TTimeIntervalMicroSeconds32 delta32(KDeltaMax);
       
   751         iHandleMassUpdateTimer->Start( delta32, delta32, callback );
       
   752         ret = ETrue;
       
   753         }
       
   754     else if(iHandleMassUpdate)
       
   755         {
   760         {
   756         //mass update burst ended
   761         //mass update burst ended
   757         HandleMassUpdateDone();
   762         HandleMassUpdateDone();
   758         ret = ETrue;
   763         ret = ETrue;
   759         }
   764         }
   760     else
   765     else
   761         {
   766         {
   762         //just normal update, set time & counter
   767         //just normal update so reset counters
   763         HandleMassUpdateCheckReset();
   768         HandleMassUpdateResetCounters();
   764         }
   769         }
   765     return ret;
   770     return ret;
   766     }
   771     }
   767 
   772 
       
   773 // --------------------------------------------------------------------------
       
   774 // CPbk2HandleMassUpdate::HandleMassUpdateBurstL
       
   775 // --------------------------------------------------------------------------
       
   776 //
       
   777 void CPbk2HandleMassUpdate::HandleMassUpdateBurstL(
       
   778     const TTimeIntervalMicroSeconds aFromFirst,
       
   779     const TInt64 aDeltaMax64)
       
   780     {
       
   781     const TInt64 KMinWaitBeforeBlockUi(1500000);    
       
   782     const TTimeIntervalMicroSeconds KWait(KMinWaitBeforeBlockUi);    
       
   783     
       
   784     //mass update burst ongoing, nameslist behaviour can be altered
       
   785     iHandleMassUpdateDetected=ETrue;
       
   786     iHandleMassUpdateCount++;
       
   787     iHandleMassUpdatePrev.UniversalTime();
       
   788     iListBox.UpdateScrollBarsL();
       
   789 
       
   790     if( !iHandleMassUpdateDialog && 
       
   791         !iHandleMassUpdateSkipDialog && 
       
   792         aFromFirst > KWait)        
       
   793         {
       
   794         //mass update burst ongoing, ok also to block ui
       
   795         iHandleMassUpdateDialog = new(ELeave) CAknWaitDialog
       
   796             (reinterpret_cast<CEikDialog**>(&iHandleMassUpdateDialog), EFalse);
       
   797         iHandleMassUpdateDialog->SetTone(CAknNoteDialog::ENoTone);
       
   798         iHandleMassUpdateDialog->ExecuteLD(R_QTN_GEN_NOTE_SYNCHRONIZING_PROGRESS);
       
   799         //ExecuteLD above handles validity of pointer iHandleMassUpdateDialog plus
       
   800         //cleanupstack
       
   801         }
       
   802     else if( iHandleMassUpdateDialog && iHandleMassUpdateSkipDialog)
       
   803         {
       
   804         //burst ongoing but do not not block ui
       
   805         TRAP_IGNORE(iHandleMassUpdateDialog->ProcessFinishedL());
       
   806         delete iHandleMassUpdateDialog;
       
   807         iHandleMassUpdateDialog = NULL;        
       
   808         }
       
   809 
       
   810     TCallBack callback(HandleMassUpdateTimerCallBack, this);
       
   811     TTimeIntervalMicroSeconds32 delta32(aDeltaMax64);
       
   812     iHandleMassUpdateTimer->Start( delta32, delta32, callback );
       
   813     }
       
   814 
   768 // ----------------------------------------------------------------------------
   815 // ----------------------------------------------------------------------------
   769 // CPbk2HandleMassUpdate::HandleMassUpdateCheckReset
   816 // CPbk2HandleMassUpdate::HandleMassUpdateResetCounters
   770 // ----------------------------------------------------------------------------
   817 // ----------------------------------------------------------------------------
   771 //
   818 //
   772 void CPbk2HandleMassUpdate::HandleMassUpdateCheckReset()
   819 void CPbk2HandleMassUpdate::HandleMassUpdateResetCounters()
   773     {
   820     {
   774     iHandleMassUpdate=EFalse;
       
   775     iHandleMassUpdateCount = 1;  //set as first candidate for next burst
   821     iHandleMassUpdateCount = 1;  //set as first candidate for next burst
   776     iHandleMassUpdateFirst.UniversalTime();
   822     iHandleMassUpdateFirst.UniversalTime();
   777     iHandleMassUpdatePrev=iHandleMassUpdateFirst;
   823     iHandleMassUpdatePrev=iHandleMassUpdateFirst;
   778     }
   824     }
   779 
   825 
   801         //The below 2 lines just in case... ProcessFinishedL already took care of these
   847         //The below 2 lines just in case... ProcessFinishedL already took care of these
   802         delete iHandleMassUpdateDialog;
   848         delete iHandleMassUpdateDialog;
   803         iHandleMassUpdateDialog = NULL;
   849         iHandleMassUpdateDialog = NULL;
   804         }
   850         }
   805 
   851 
   806     HandleMassUpdateCheckReset();
   852     iHandleMassUpdateDetected = EFalse;
       
   853     HandleMassUpdateResetCounters();
   807     iListBox.SetCurrentItemIndex(0);
   854     iListBox.SetCurrentItemIndex(0);
   808     iListBox.SetTopItemIndex(0);
   855     iListBox.SetTopItemIndex(0);
   809     }
   856     }
   810 
   857 
   811 ///////////////////////// End of helper classes /////////////////////////////
   858 ///////////////////////// End of helper classes /////////////////////////////
  1225         }
  1272         }
  1226     return;
  1273     return;
  1227     }
  1274     }
  1228 
  1275 
  1229 // --------------------------------------------------------------------------
  1276 // --------------------------------------------------------------------------
       
  1277 // CPbk2NamesListControl::MassUpdateSkipProgressNote
       
  1278 // --------------------------------------------------------------------------
       
  1279 //
       
  1280 EXPORT_C void CPbk2NamesListControl::MassUpdateSkipProgressNote( TBool aSkip )
       
  1281     {
       
  1282     iCheckMassUpdate->MassUpdateSkipProgressNote( aSkip ); 
       
  1283     }
       
  1284 
       
  1285 // --------------------------------------------------------------------------
  1230 // CPbk2NamesListControl::View
  1286 // CPbk2NamesListControl::View
  1231 // --------------------------------------------------------------------------
  1287 // --------------------------------------------------------------------------
  1232 //
  1288 //
  1233 MVPbkContactViewBase& CPbk2NamesListControl::View()
  1289 MVPbkContactViewBase& CPbk2NamesListControl::View()
  1234     {
  1290     {