src/screensaverengine.cpp
branchRCL_3
changeset 11 b3594157d381
parent 10 25957ccd51ab
child 12 1c806ee746e7
--- a/src/screensaverengine.cpp	Fri Mar 12 15:42:50 2010 +0200
+++ b/src/screensaverengine.cpp	Mon Mar 15 12:40:37 2010 +0200
@@ -75,6 +75,7 @@
     DisableSharedDataAndMonitor();
     delete iIndicatorArray;
     KillTimer( iPreviewTimer );
+    KillTimer( iExpiryTimer );
     iAknUiServer.Close();
     }
 
@@ -153,6 +154,8 @@
 
             // Report whether started from Idle BEFORE bringing to foreground
             iSharedDataI->SetSSStartedFromIdleStatus();
+            
+            iSharedDataI->SetSSForcedLightsOn(1);
 
             ScreensaverUtility::BringToForeground();
 
@@ -194,6 +197,8 @@
 
         iScreenSaverIsOn = EFalse ;
 
+        KillTimer( iExpiryTimer );
+
         View()->HideDisplayObject();
         }
 
@@ -260,6 +265,8 @@
 
     UpdateIndicatorAttributes();
 
+    SetExpiryTimerTimeout( KDefaultScreenSaverTimeout );
+
     View()->ShowDisplayObject();
 
     iSharedDataI->SetScreensaverStatus( ETrue );
@@ -459,6 +466,27 @@
 
 
 // -----------------------------------------------------------------------------
+// Start screensaver expiry timer. When the timer expires the screensaver will
+// be stopped and hided.
+// -----------------------------------------------------------------------------
+//
+void CScreensaverEngine::SetExpiryTimerTimeout( TInt aTimeout )
+    {
+    SCRLOGGER_WRITEF( _L( "SCR:CScreensaverEngine::SetExpiryTimerTimeout(%d) start" ), aTimeout );
+    KillTimer( iExpiryTimer );
+
+    if ( 0 < aTimeout )
+        {
+        TRAP_IGNORE(
+            iExpiryTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+            iExpiryTimer->Start( aTimeout , aTimeout ,
+                TCallBack( HandleExpiryTimerExpiry, this ) );
+            )
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
 // CScreensaverEngine::CScreensaverEngine
 // -----------------------------------------------------------------------------
 //
@@ -685,10 +713,12 @@
     SCRLOGGER_WRITE("HandleInactiveEventL(), starting screensaver");
 
     CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
-/*    
+    
     // Double-start is OK, it will be checked in StartScreenSaver()
+    // This will be trigged by keylock activation after keyguard
+    // timeout, or if keylock is disabled
     _this->StartScreenSaver( );
-*/
+
     return KErrNone;
     }
 
@@ -712,6 +742,8 @@
     SCRLOGGER_WRITE("HandleInactiveEventShortL()");
     // Start, if keys are locked and short timeout in use
     CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
+    // Restore inactivity timeout if it was reset at keylock activation
+    _this->iActivityManagerScreensaverShort->SetInactivityTimeout(KTimeoutShort);
     
     if ( _this->iSharedDataI->IsKeyguardOn() )
         {
@@ -739,6 +771,24 @@
     return KErrNone;
     }
 
+// ---------------------------------------------------------------------------
+// CScreensaverEngine::HandleKeyguardStateChanged
+// ---------------------------------------------------------------------------
+//
+void CScreensaverEngine::HandleKeyguardStateChanged( TBool aEnabled )
+    {
+    if ( aEnabled )
+        {
+        // Keyguard switch generates an activity event still, let the inactivity
+        // handler start the screensaver after one second
+        iActivityManagerScreensaverShort->SetInactivityTimeout(1);
+        }
+    else
+        {
+        StopScreenSaver();
+        }
+    }
+
 // -----------------------------------------------------------------------------
 // CScreensaverEngine::View
 // -----------------------------------------------------------------------------
@@ -765,4 +815,26 @@
     {
     return iSharedDataI->IsScreenSaverAllowed();
     }
+
+
+// -----------------------------------------------------------------------------
+// Handles expire timer timeout
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverEngine::HandleExpiryTimerExpiry( TAny* aPtr )
+    {
+    SCRLOGGER_WRITEF( _L( "SCR:CScreensaverEngine::HandleExpiryTimerExpiry(%d) start" ), aPtr );
+    CScreensaverEngine *control = STATIC_CAST( CScreensaverEngine*, aPtr );
+
+    if ( control )
+        {
+        control->KillTimer( control->iExpiryTimer );
+        control->StopScreenSaver();
+        control->iSharedDataI->SetSSForcedLightsOn( 0 );
+        }
+
+    return KErrNone;
+    }
+
+
 // End of file.