src/screensaverengine.cpp
branchRCL_3
changeset 16 1f307dce3b5a
parent 15 2e08ef6b6eda
child 18 98bf2adac59c
equal deleted inserted replaced
15:2e08ef6b6eda 16:1f307dce3b5a
    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.
   184 //
   183 //
   185 void CScreensaverEngine::StopScreenSaver()
   184 void CScreensaverEngine::StopScreenSaver()
   186     {
   185     {
   187     SCRLOGGER_WRITE("Stopping Screensaver");
   186     SCRLOGGER_WRITE("Stopping Screensaver");
   188 
   187 
   189     if ( !iScreenSaverIsPreviewing && iSharedDataI->IsKeyguardOn() )
   188     if ( iSharedDataI->IsKeyguardOn() || iScreenSaverIsPreviewing )
   190         {
   189         {
   191         StartPauseTimer();
   190         StartPauseTimer();
   192         }
   191         }
   193 
   192 
   194     if( iScreenSaverIsOn )
   193     if( iScreenSaverIsOn )
   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 // -----------------------------------------------------------------------------