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 |