src/screensaverengine.cpp
branchRCL_3
changeset 13 4784a3bc2236
parent 12 1c806ee746e7
child 15 0bfd55b8504e
equal deleted inserted replaced
12:1c806ee746e7 13:4784a3bc2236
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 
    19 
    20 #include <barsread.h>
    20 #include <barsread.h>
    21 #include <activitymanager.h>
       
    22 #include <featmgr.h>
    21 #include <featmgr.h>
    23 #include <PUAcodes.hrh>
    22 #include <PUAcodes.hrh>
    24 #include <Profile.hrh>
    23 #include <Profile.hrh>
    25 #include <screensaver.rsg>
    24 #include <screensaver.rsg>
    26 #include <AknUtils.h>
    25 #include <AknUtils.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 
    36 
    37 // Minimum plugin suspension time
    37 // Minimum plugin suspension time
    38 const TInt KMinPluginSuspensionTime = 500000; // 0.5 sec
    38 const TInt KMinPluginSuspensionTime = 500000; // 0.5 sec
    39 
    39 
    41 const TInt KTimeoutShort = 5;
    41 const TInt KTimeoutShort = 5;
    42 
    42 
    43 const TInt KNoPreview = 0;
    43 const TInt KNoPreview = 0;
    44 
    44 
    45 const TInt KPreviewTimeout = 10000000; // 10 sec
    45 const TInt KPreviewTimeout = 10000000; // 10 sec
       
    46 const TInt KIgnoreActivityTimeout = 500000; // 0.5 sec
    46 
    47 
    47 const TText KSilentProfileInd= KPuaCodeSilentSymbol;
    48 const TText KSilentProfileInd= KPuaCodeSilentSymbol;
    48 const TText KSilentVibraInd= KPuaCodeAprofSilentVibra;
    49 const TText KSilentVibraInd= KPuaCodeAprofSilentVibra;
    49 const TText KSoundVibraInd= KPuaCodeAprofSoundVibra;
    50 const TText KSoundVibraInd= KPuaCodeAprofSoundVibra;
    50 const TText KSoundInd= KPuaCodeAprofSound;
    51 const TText KSoundInd= KPuaCodeAprofSound;
    74     StopActivityMonitoring( iActivityManagerScreensaverShort );
    75     StopActivityMonitoring( iActivityManagerScreensaverShort );
    75     DisableSharedDataAndMonitor();
    76     DisableSharedDataAndMonitor();
    76     delete iIndicatorArray;
    77     delete iIndicatorArray;
    77     KillTimer( iPreviewTimer );
    78     KillTimer( iPreviewTimer );
    78     KillTimer( iExpiryTimer );
    79     KillTimer( iExpiryTimer );
       
    80     KillTimer( iIgnoreActivityResetTimer );
    79     iAknUiServer.Close();
    81     iAknUiServer.Close();
    80     }
    82     }
    81 
    83 
    82 // -----------------------------------------------------------------------------
    84 // -----------------------------------------------------------------------------
    83 // CScreensaverEngine::SharedDataInterface
    85 // CScreensaverEngine::SharedDataInterface
   153             iScreenSaverIsOn = ETrue;
   155             iScreenSaverIsOn = ETrue;
   154 
   156 
   155             // Report whether started from Idle BEFORE bringing to foreground
   157             // Report whether started from Idle BEFORE bringing to foreground
   156             iSharedDataI->SetSSStartedFromIdleStatus();
   158             iSharedDataI->SetSSStartedFromIdleStatus();
   157             
   159             
   158             iSharedDataI->SetSSForcedLightsOn(1);
   160             if ( !View()->IsContentlessScreensaver() )
   159 
   161                 {
   160             ScreensaverUtility::BringToForeground();
   162                 ScreensaverUtility::BringToForeground();
       
   163                 }
   161 
   164 
   162             SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)");
   165             SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)");
   163 
   166 
   164             // Compress heap while displaying. No longer possible to
   167             // Compress heap while displaying. No longer possible to
   165             // compress all heaps (User::CompressAllHeaps() is a no-op)
   168             // compress all heaps (User::CompressAllHeaps() is a no-op)
   200         KillTimer( iExpiryTimer );
   203         KillTimer( iExpiryTimer );
   201 
   204 
   202         View()->HideDisplayObject();
   205         View()->HideDisplayObject();
   203         }
   206         }
   204 
   207 
   205 
       
   206     if( iScreenSaverIsPreviewing )
   208     if( iScreenSaverIsPreviewing )
   207         {
   209         {
   208         iSharedDataI->SetScreensaverPreviewMode( KNoPreview );
   210         iSharedDataI->SetScreensaverPreviewMode( KNoPreview );
   209 
   211 
   210         iScreenSaverIsPreviewing = EFalse;
   212         iScreenSaverIsPreviewing = EFalse;
   224 // -----------------------------------------------------------------------------
   226 // -----------------------------------------------------------------------------
   225 //
   227 //
   226 void CScreensaverEngine::StartPreviewModeL( )
   228 void CScreensaverEngine::StartPreviewModeL( )
   227     {
   229     {
   228     SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::StartPreviewModeL()") );
   230     SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::StartPreviewModeL()") );
       
   231     iActivityManagerScreensaverShort->SetInactivityTimeout(0);
   229     
   232     
   230     iScreenSaverIsPreviewing = ETrue;
   233     iScreenSaverIsPreviewing = ETrue;
   231     // Change the display object into what's being previewed
   234     // Change the display object into what's being previewed
   232     View()->CreatePreviewDisplayObjectL();
   235     View()->CreatePreviewDisplayObjectL();
   233 
   236 
   243 
   246 
   244     View()->ShowDisplayObject();
   247     View()->ShowDisplayObject();
   245     
   248     
   246     iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewStart );
   249     iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewStart );
   247 
   250 
   248     ScreensaverUtility::BringToForeground();
   251     if ( !View()->IsContentlessScreensaver() )
       
   252         {
       
   253         ScreensaverUtility::BringToForeground();
       
   254         }
   249     }
   255     }
   250 
   256 
   251 // -----------------------------------------------------------------------------
   257 // -----------------------------------------------------------------------------
   252 // CScreensaverEngine::DisplayObject
   258 // CScreensaverEngine::DisplayObject
   253 // -----------------------------------------------------------------------------
   259 // -----------------------------------------------------------------------------
   555     // called after the interval time expired.
   561     // called after the interval time expired.
   556     User::ResetInactivityTime();
   562     User::ResetInactivityTime();
   557 
   563 
   558     // Start monitoring activity for screensaver
   564     // Start monitoring activity for screensaver
   559     iActivityManagerScreensaver
   565     iActivityManagerScreensaver
   560         = CUserActivityManager::NewL( CActive::EPriorityStandard );
   566         = CScreensaverActivityManager::NewL( CActive::EPriorityStandard );
   561         iActivityManagerScreensaver->Start( Timeout(), 
   567         iActivityManagerScreensaver->Start( Timeout(), 
   562             TCallBack( HandleInactiveEventL,this ),
   568             TCallBack( HandleInactiveEventL,this ),
   563             TCallBack( HandleActiveEventL, this ) );
   569             TCallBack( HandleActiveEventL, this ) );
   564 
   570 
   565     // Start monitoring activity for screensaver, short timeout
   571     // Start monitoring activity for screensaver, short timeout
   566     iActivityManagerScreensaverShort
   572     iActivityManagerScreensaverShort
   567         = CUserActivityManager::NewL( CActive::EPriorityStandard );
   573         = CScreensaverActivityManager::NewL( CActive::EPriorityUserInput );
   568     
   574     
   569         iActivityManagerScreensaverShort->Start( KTimeoutShort, 
   575         iActivityManagerScreensaverShort->Start( KTimeoutShort, 
   570             TCallBack( HandleInactiveEventShortL, this ), 
   576             TCallBack( HandleInactiveEventShortL, this ), 
   571             TCallBack( HandleActiveEventShortL, this ) );
   577             TCallBack( HandleActiveEventShortL, this ) );
   572     }
   578     }
   573 
   579 
   574 // -----------------------------------------------------------------------------
   580 // -----------------------------------------------------------------------------
   575 // CScreensaverEngine::StopActivityMonitoring
   581 // CScreensaverEngine::StopActivityMonitoring
   576 // -----------------------------------------------------------------------------
   582 // -----------------------------------------------------------------------------
   577 //
   583 //
   578 void CScreensaverEngine::StopActivityMonitoring( CUserActivityManager*& aActivityManager )
   584 void CScreensaverEngine::StopActivityMonitoring( CScreensaverActivityManager*& aActivityManager )
   579     {
   585     {
   580     if ( aActivityManager )
   586     if ( aActivityManager )
   581         {
   587         {
   582         aActivityManager->Cancel();
   588         aActivityManager->Cancel();
   583         delete aActivityManager;
   589         delete aActivityManager;
   726 // -----------------------------------------------------------------------------
   732 // -----------------------------------------------------------------------------
   727 //
   733 //
   728 TInt CScreensaverEngine::HandleActiveEventShortL( TAny* aPtr )
   734 TInt CScreensaverEngine::HandleActiveEventShortL( TAny* aPtr )
   729     {
   735     {
   730     SCRLOGGER_WRITE("HandleActiveEventShortL(), stopping saver");
   736     SCRLOGGER_WRITE("HandleActiveEventShortL(), stopping saver");
   731     STATIC_CAST(CScreensaverEngine*, aPtr)->StopScreenSaver();
   737     CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
       
   738     if ( !_this->iIgnoreNextActivity )
       
   739         {
       
   740         _this->StopScreenSaver();
       
   741         }
       
   742     else
       
   743         {
       
   744         _this->iActivityManagerScreensaverShort->SetInactivityTimeout(0);
       
   745         }
   732     return KErrNone;
   746     return KErrNone;
   733     }
   747     }
   734 
   748 
   735 // -----------------------------------------------------------------------------
   749 // -----------------------------------------------------------------------------
   736 // CScreensaverEngine::HandleInactiveEventShortL
   750 // CScreensaverEngine::HandleInactiveEventShortL
   741     SCRLOGGER_WRITE("HandleInactiveEventShortL()");
   755     SCRLOGGER_WRITE("HandleInactiveEventShortL()");
   742     // Start, if keys are locked and short timeout in use
   756     // Start, if keys are locked and short timeout in use
   743     CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
   757     CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
   744     // Restore inactivity timeout if it was reset at keylock activation
   758     // Restore inactivity timeout if it was reset at keylock activation
   745     _this->iActivityManagerScreensaverShort->SetInactivityTimeout(KTimeoutShort);
   759     _this->iActivityManagerScreensaverShort->SetInactivityTimeout(KTimeoutShort);
       
   760     _this->iIgnoreNextActivity = EFalse;
   746     
   761     
   747     if ( _this->iSharedDataI->IsKeyguardOn() )
   762     if ( _this->iSharedDataI->IsKeyguardOn() )
   748         {
   763         {
   749         SCRLOGGER_WRITE("HandleInactiveEventShortL() starting saver");
   764         SCRLOGGER_WRITE("HandleInactiveEventShortL() starting saver");
   750         _this->StartScreenSaver( );
   765         _this->StartScreenSaver( );
   765     control->KillTimer( control->iSuspendTimer );
   780     control->KillTimer( control->iSuspendTimer );
   766     
   781     
   767     control->View()->SetDisplayObject( EDisplayPlugin );
   782     control->View()->SetDisplayObject( EDisplayPlugin );
   768     control->View()->ShowDisplayObject();
   783     control->View()->ShowDisplayObject();
   769 
   784 
       
   785     return KErrNone;
       
   786     }
       
   787 
       
   788 // ---------------------------------------------------------------------------
       
   789 // CScreensaverEngine::ResetIgnoreFlagCb
       
   790 // ---------------------------------------------------------------------------
       
   791 //
       
   792 TInt CScreensaverEngine::ResetIgnoreFlagCb( TAny* aPtr )
       
   793     {
       
   794     CScreensaverEngine* engine = STATIC_CAST(CScreensaverEngine*, aPtr);
       
   795     engine->KillTimer( engine->iIgnoreActivityResetTimer );
       
   796     engine->iIgnoreNextActivity = EFalse;
       
   797     
   770     return KErrNone;
   798     return KErrNone;
   771     }
   799     }
   772 
   800 
   773 // ---------------------------------------------------------------------------
   801 // ---------------------------------------------------------------------------
   774 // CScreensaverEngine::HandleKeyguardStateChanged
   802 // CScreensaverEngine::HandleKeyguardStateChanged
   775 // ---------------------------------------------------------------------------
   803 // ---------------------------------------------------------------------------
   776 //
   804 //
   777 void CScreensaverEngine::HandleKeyguardStateChanged( TBool aEnabled )
   805 void CScreensaverEngine::HandleKeyguardStateChanged( TBool aEnabled )
   778     {
   806     {
       
   807     KillTimer( iIgnoreActivityResetTimer );
   779     if ( aEnabled )
   808     if ( aEnabled )
   780         {
   809         {
   781         // Keyguard switch generates an activity event still, let the inactivity
   810         if ( !iScreenSaverIsOn )
   782         // handler start the screensaver after one second
   811             {
   783         iActivityManagerScreensaverShort->SetInactivityTimeout(1);
   812             // Start the screensaver, but set the ignore flag in case keylock
       
   813             // was activated using the side switch. The switch will generate
       
   814             // activity that must be ignored.
       
   815             StartScreenSaver();
       
   816             iIgnoreNextActivity = ETrue;
       
   817             
       
   818             iIgnoreActivityResetTimer = CPeriodic::New( EPriorityLow );
       
   819             if ( iIgnoreActivityResetTimer )
       
   820                 {
       
   821                 iIgnoreActivityResetTimer->Start( KIgnoreActivityTimeout, 
       
   822                                                   KIgnoreActivityTimeout, 
       
   823                                                   TCallBack( ResetIgnoreFlagCb, this ) );
       
   824                 }
       
   825             }
   784         }
   826         }
   785     else
   827     else
   786         {
   828         {
   787         StopScreenSaver();
   829         StopScreenSaver();
       
   830         }
       
   831     }
       
   832 
       
   833 // ---------------------------------------------------------------------------
       
   834 // 
       
   835 // ---------------------------------------------------------------------------
       
   836 //
       
   837 void CScreensaverEngine::NotifyKeyEventReceived()
       
   838     {
       
   839     if ( iSharedDataI->IsKeyguardOn() )
       
   840         {
       
   841         iIgnoreNextActivity = ETrue;
   788         }
   842         }
   789     }
   843     }
   790 
   844 
   791 // -----------------------------------------------------------------------------
   845 // -----------------------------------------------------------------------------
   792 // CScreensaverEngine::View
   846 // CScreensaverEngine::View