diff -r d8eca2b0590d -r 2e08ef6b6eda src/screensavershareddatamonitor.cpp --- a/src/screensavershareddatamonitor.cpp Tue May 11 16:14:23 2010 +0300 +++ b/src/screensavershareddatamonitor.cpp Tue May 25 12:43:23 2010 +0300 @@ -25,6 +25,7 @@ #include // kpsglobalsystemstate #include #include // kuikmmcinserted +#include #ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 #include @@ -68,6 +69,9 @@ DeleteSubscriber( iActivateSSSubscriber ); iActivateSSProperty.Close(); + + DeleteSubscriber( iChargerStateSubscriber ); + iChargerStateProperty.Close(); } // ----------------------------------------------------------------------------- @@ -138,8 +142,14 @@ iShuttingDownSubscriber->SubscribeL(); User::LeaveIfError( iActivateSSProperty.Attach( KPSUidScreenSaver, KScreenSaverActivate ) ); - iActivateSSSubscriber = new( ELeave ) CSubscriber( TCallBack( HandleActivateSSChanged, this ), iActivateSSProperty ); + iActivateSSSubscriber = new( ELeave ) CSubscriber( + TCallBack( HandleActivateSSChanged, this ), iActivateSSProperty ); iActivateSSSubscriber->SubscribeL(); + + User::LeaveIfError( iChargerStateProperty.Attach( KPSUidHWRMPowerState, KHWRMChargingStatus ) ); + iChargerStateSubscriber = new (ELeave) CSubscriber( + TCallBack( HandleChargerStateChanged, this ), iChargerStateProperty ); + iChargerStateSubscriber->SubscribeL(); } // ----------------------------------------------------------------------------- @@ -240,7 +250,21 @@ CScreensaverSharedDataMonitor* _this = STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr); - _this->Model().HandleKeyguardStateChanged( _this->iData->IsKeyguardOn() ); + if ( _this->iData->IsKeyguardOn() ) + { + // Keys locked - if screensaver is running, this was caused by + // automatic keyguard and screensaver should refresh the view + // to show the keylock indicator + if ( _this->Model().ScreenSaverIsOn() ) + { + _this->View()->UpdateAndRefresh(); + } + _this->Model().StartScreenSaver(); + } + else + { + _this->Model().StopScreenSaver(); + } return KErrNone; } @@ -280,7 +304,10 @@ return KErrNone; } - +// --------------------------------------------------------------------------- +// CScreensaverSharedDataMonitor::HandleActivateSSChanged +// --------------------------------------------------------------------------- +// TInt CScreensaverSharedDataMonitor::HandleActivateSSChanged( TAny* aPtr ) { TInt activateState = -1; @@ -291,13 +318,13 @@ { // Enable SS SCRLOGGER_WRITE("SharedDataMonitor: Activate SS"); - STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().HandleActivateSSChanged( ETrue ); + STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StartScreenSaver(); } else if ( !activateState ) { // Disable SS SCRLOGGER_WRITE("SharedDataMonitor: Stop SS"); - STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().HandleActivateSSChanged( EFalse ); + STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver(); } else { @@ -306,5 +333,34 @@ return KErrNone; } +// --------------------------------------------------------------------------- +// CScreensaverSharedDataMonitor::HandleChargerStateChanged +// --------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataMonitor::HandleChargerStateChanged( TAny* aPtr ) + { + TInt state = -1; + + RProperty::Get( KPSUidHWRMPowerState, KHWRMChargingStatus, state ); + + switch ( state ) + { + case EChargingStatusError: // Some error has occurred when charger is connected or charging. + case EChargingStatusNotConnected: // Charger not connected/uninitialized + case EChargingStatusCharging: // Device is charging + { + User::ResetInactivityTime(); + STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver(); + } + break; + case EChargingStatusChargingComplete: // Charging completed + case EChargingStatusNotCharging: // Charger is connected, device not charging + case EChargingStatusAlmostComplete: // Charging almost completed + case EChargingStatusChargingContinued: // Charging continued after brief interruption + default: + break; + } + return KErrNone; + } // End of file