21 #include <featmgr.h> |
21 #include <featmgr.h> |
22 #include <PUAcodes.hrh> |
22 #include <PUAcodes.hrh> |
23 #include <Profile.hrh> |
23 #include <Profile.hrh> |
24 #include <screensaver.rsg> |
24 #include <screensaver.rsg> |
25 #include <AknUtils.h> |
25 #include <AknUtils.h> |
26 #include <activitymanager.h> |
|
27 |
26 |
28 #include "screensaverengine.h" |
27 #include "screensaverengine.h" |
29 #include "screensaverctrlmovingtext.h" |
28 #include "screensaverctrlmovingtext.h" |
30 #include "screensavershareddatai.h" |
29 #include "screensavershareddatai.h" |
31 #include "screensavershareddatamonitor.h" |
30 #include "screensavershareddatamonitor.h" |
32 #include "screensaverappui.h" |
31 #include "screensaverappui.h" |
33 #include "ScreensaverUtils.h" |
32 #include "ScreensaverUtils.h" |
34 #include "screensaverutility.h" |
33 #include "screensaverutility.h" |
|
34 #include "screensaveractivitymanager.h" |
35 |
35 |
36 // Minimum plugin suspension time |
36 // Minimum plugin suspension time |
37 const TInt KMinPluginSuspensionTime = 500000; // 0.5 sec |
37 const TInt KMinPluginSuspensionTime = 500000; // 0.5 sec |
38 |
38 |
39 // Inactivity timeout in seconds when keys locked |
39 // Inactivity timeout in seconds when keys locked |
40 const TInt KTimeoutShort = 5000000; |
40 const TInt KTimeoutShort = 5000000; |
|
41 const TInt KTimeoutPreviewLocked = 2000000; |
41 |
42 |
42 const TInt KNoPreview = 0; |
43 const TInt KNoPreview = 0; |
43 |
44 |
44 const TInt KPreviewTimeout = 10000000; // 10 sec |
45 const TInt KPreviewTimeout = 10000000; // 10 sec |
45 |
46 |
124 // |
125 // |
125 void CScreensaverEngine::StartScreenSaver( ) |
126 void CScreensaverEngine::StartScreenSaver( ) |
126 { |
127 { |
127 SCRLOGGER_WRITE("Model: StartScreenSaver()"); |
128 SCRLOGGER_WRITE("Model: StartScreenSaver()"); |
128 |
129 |
129 // Ignore start while in preview to avoid double-start lock |
130 // Stop if previewing. If keylock was activated, the pause timer will |
|
131 // be started and the selected (not necessarily previewed) screensaver |
|
132 // will start |
130 if ( iScreenSaverIsPreviewing ) |
133 if ( iScreenSaverIsPreviewing ) |
131 { |
134 { |
132 // Reset user activity so that screensaver is enabled after |
135 StopScreenSaver(); |
133 // preview even if no user activity happens any more |
|
134 // Note that this puts on backlight but it should be on at this |
|
135 // time anyway (unless a plugin set it off, but what the hey) |
|
136 User::ResetInactivityTime(); |
|
137 return; |
136 return; |
138 } |
137 } |
139 |
138 |
140 // if (DisplayFlag() == 1) then screensaver can be activated |
139 // if (DisplayFlag() == 1) then screensaver can be activated |
141 // else screensaver can't come during phone call. |
140 // else screensaver can't come during phone call. |
217 // Update preview progress |
216 // Update preview progress |
218 iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewEnd ); |
217 iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewEnd ); |
219 iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewNone ); |
218 iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewNone ); |
220 |
219 |
221 KillTimer( iPreviewTimer ); |
220 KillTimer( iPreviewTimer ); |
|
221 ResetInactivityTimeout(); |
222 } |
222 } |
223 } |
223 } |
224 |
224 |
225 // ----------------------------------------------------------------------------- |
225 // ----------------------------------------------------------------------------- |
226 // CScreensaverEngine::StartPreviewModeL |
226 // CScreensaverEngine::StartPreviewModeL |
250 |
250 |
251 if ( !View()->IsContentlessScreensaver() ) |
251 if ( !View()->IsContentlessScreensaver() ) |
252 { |
252 { |
253 ScreensaverUtility::BringToForeground(); |
253 ScreensaverUtility::BringToForeground(); |
254 } |
254 } |
|
255 iActivityManagerScreensaver->SetInactivityTimeout(0); |
255 } |
256 } |
256 |
257 |
257 // ----------------------------------------------------------------------------- |
258 // ----------------------------------------------------------------------------- |
258 // CScreensaverEngine::DisplayObject |
259 // CScreensaverEngine::DisplayObject |
259 // ----------------------------------------------------------------------------- |
260 // ----------------------------------------------------------------------------- |
561 // called after the interval time expired. |
562 // called after the interval time expired. |
562 User::ResetInactivityTime(); |
563 User::ResetInactivityTime(); |
563 |
564 |
564 // Start monitoring activity for screensaver |
565 // Start monitoring activity for screensaver |
565 iActivityManagerScreensaver |
566 iActivityManagerScreensaver |
566 = CUserActivityManager::NewL( CActive::EPriorityStandard ); |
567 = CScreensaverActivityManager::NewL( CActive::EPriorityUserInput ); |
567 iActivityManagerScreensaver->Start( Timeout(), |
568 iActivityManagerScreensaver->Start( Timeout(), |
568 TCallBack( HandleInactiveEventL,this ), |
569 TCallBack( HandleInactiveEventL,this ), |
569 TCallBack( HandleActiveEventL, this ) ); |
570 TCallBack( HandleActiveEventL, this ) ); |
570 } |
571 } |
571 |
572 |
572 // ----------------------------------------------------------------------------- |
573 // ----------------------------------------------------------------------------- |
573 // CScreensaverEngine::StopActivityMonitoring |
574 // CScreensaverEngine::StopActivityMonitoring |
574 // ----------------------------------------------------------------------------- |
575 // ----------------------------------------------------------------------------- |
575 // |
576 // |
576 void CScreensaverEngine::StopActivityMonitoring( CUserActivityManager*& aActivityManager ) |
577 void CScreensaverEngine::StopActivityMonitoring( CScreensaverActivityManager*& aActivityManager ) |
577 { |
578 { |
578 if ( aActivityManager ) |
579 if ( aActivityManager ) |
579 { |
580 { |
580 aActivityManager->Cancel(); |
581 aActivityManager->Cancel(); |
581 delete aActivityManager; |
582 delete aActivityManager; |
663 // CScreensaverEngine::StartPauseTimer |
664 // CScreensaverEngine::StartPauseTimer |
664 // ----------------------------------------------------------------------------- |
665 // ----------------------------------------------------------------------------- |
665 // |
666 // |
666 void CScreensaverEngine::StartPauseTimer() |
667 void CScreensaverEngine::StartPauseTimer() |
667 { |
668 { |
|
669 if ( iScreenSaverIsPreviewing ) |
|
670 { |
|
671 iPauseTimerStartedAfterPreview = ETrue; |
|
672 } |
|
673 |
|
674 TInt timeout = ( iScreenSaverIsPreviewing )? KTimeoutPreviewLocked : |
|
675 KTimeoutShort; |
|
676 |
668 KillTimer( iPauseTimer ); |
677 KillTimer( iPauseTimer ); |
669 |
678 |
670 TRAP_IGNORE( iPauseTimer = CPeriodic::NewL( CActive::EPriorityHigh ) ); |
679 TRAP_IGNORE( iPauseTimer = CPeriodic::NewL( CActive::EPriorityHigh ) ); |
671 |
680 |
672 if ( !iPauseTimer ) |
681 if ( !iPauseTimer ) |
673 { |
682 { |
674 HandlePauseTimerExpiry( this ); |
683 HandlePauseTimerExpiry( this ); |
675 return; |
684 return; |
676 } |
685 } |
677 |
686 |
678 iPauseTimer->Start( KTimeoutShort, KTimeoutShort, TCallBack( |
687 iPauseTimer->Start( timeout, timeout, TCallBack( |
679 HandlePauseTimerExpiry, this ) ); |
688 HandlePauseTimerExpiry, this ) ); |
680 } |
689 } |
681 |
690 |
682 // ----------------------------------------------------------------------------- |
691 // ----------------------------------------------------------------------------- |
683 // CScreensaverEngine::KillTimer |
692 // CScreensaverEngine::KillTimer |
715 // |
724 // |
716 TInt CScreensaverEngine::HandlePauseTimerExpiry( TAny* aPtr ) |
725 TInt CScreensaverEngine::HandlePauseTimerExpiry( TAny* aPtr ) |
717 { |
726 { |
718 CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); |
727 CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); |
719 _this->KillTimer( _this->iPauseTimer ); |
728 _this->KillTimer( _this->iPauseTimer ); |
|
729 _this->iPauseTimerStartedAfterPreview = EFalse; |
720 |
730 |
721 if ( _this->iSharedDataI->IsKeyguardOn() ) |
731 if ( _this->iSharedDataI->IsKeyguardOn() ) |
722 { |
732 { |
723 SCRLOGGER_WRITE("HandleInactiveEventShortL() starting saver"); |
733 SCRLOGGER_WRITE("HandleInactiveEventShortL() starting saver"); |
724 _this->StartScreenSaver( ); |
734 _this->StartScreenSaver( ); |
729 |
739 |
730 // ----------------------------------------------------------------------------- |
740 // ----------------------------------------------------------------------------- |
731 // CScreensaverEngine::HandleActiveEventL |
741 // CScreensaverEngine::HandleActiveEventL |
732 // ----------------------------------------------------------------------------- |
742 // ----------------------------------------------------------------------------- |
733 // |
743 // |
734 TInt CScreensaverEngine::HandleActiveEventL( TAny* /* aPtr */) |
744 TInt CScreensaverEngine::HandleActiveEventL( TAny* aPtr ) |
735 { |
745 { |
736 SCRLOGGER_WRITE("HandleActiveEventL(), do nothing"); |
746 SCRLOGGER_WRITE("HandleActiveEventL(), stop if previewing"); |
737 // We can be pretty sure the short timeout has passed and its |
747 CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); |
738 // active event handler stops the saver |
748 if ( _this->iScreenSaverIsPreviewing ) |
|
749 { |
|
750 _this->StopScreenSaver(); |
|
751 } |
739 return KErrNone; |
752 return KErrNone; |
740 } |
753 } |
741 |
754 |
742 // ----------------------------------------------------------------------------- |
755 // ----------------------------------------------------------------------------- |
743 // CScreensaverEngine::HandleInactiveEventL |
756 // CScreensaverEngine::HandleInactiveEventL |
746 TInt CScreensaverEngine::HandleInactiveEventL( TAny* aPtr ) |
759 TInt CScreensaverEngine::HandleInactiveEventL( TAny* aPtr ) |
747 { |
760 { |
748 SCRLOGGER_WRITE("HandleInactiveEventL(), starting screensaver"); |
761 SCRLOGGER_WRITE("HandleInactiveEventL(), starting screensaver"); |
749 |
762 |
750 CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); |
763 CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); |
751 |
764 // Inactivity is detected immediately when preview starts |
|
765 if ( _this->iScreenSaverIsPreviewing ) |
|
766 { |
|
767 _this->ResetInactivityTimeout(); |
|
768 return KErrNone; |
|
769 } |
752 // Double-start is OK, it will be checked in StartScreenSaver() |
770 // Double-start is OK, it will be checked in StartScreenSaver() |
753 // This will be trigged by keylock activation after keyguard |
771 // This will be trigged by keylock activation after keyguard |
754 // timeout, or if keylock is disabled |
772 // timeout, or if keylock is disabled |
755 _this->StartScreenSaver( ); |
773 _this->StartScreenSaver( ); |
756 |
774 |
770 |
788 |
771 control->View()->SetDisplayObject( EDisplayPlugin ); |
789 control->View()->SetDisplayObject( EDisplayPlugin ); |
772 control->View()->ShowDisplayObject(); |
790 control->View()->ShowDisplayObject(); |
773 |
791 |
774 return KErrNone; |
792 return KErrNone; |
|
793 } |
|
794 |
|
795 // --------------------------------------------------------------------------- |
|
796 // CScreensaverEngine::HandleKeyguardStateChanged |
|
797 // --------------------------------------------------------------------------- |
|
798 // |
|
799 void CScreensaverEngine::HandleKeyguardStateChanged( TBool aEnabled ) |
|
800 { |
|
801 if ( aEnabled ) |
|
802 { |
|
803 // Keys locked - if screensaver is running, this was caused by |
|
804 // automatic keyguard and screensaver should refresh the view |
|
805 // to show the keylock indicator |
|
806 if ( iScreenSaverIsOn && !iScreenSaverIsPreviewing ) |
|
807 { |
|
808 View()->UpdateAndRefresh(); |
|
809 } |
|
810 if ( !( iPauseTimerStartedAfterPreview && |
|
811 iPauseTimer && iPauseTimer->IsActive() ) ) |
|
812 { |
|
813 StartScreenSaver(); |
|
814 } |
|
815 } |
|
816 else |
|
817 { |
|
818 StopScreenSaver(); |
|
819 } |
775 } |
820 } |
776 |
821 |
777 // ----------------------------------------------------------------------------- |
822 // ----------------------------------------------------------------------------- |
778 // CScreensaverEngine::View |
823 // CScreensaverEngine::View |
779 // ----------------------------------------------------------------------------- |
824 // ----------------------------------------------------------------------------- |