src/screensavershareddatamonitor.cpp
branchRCL_3
changeset 15 2e08ef6b6eda
parent 14 d8eca2b0590d
child 16 1f307dce3b5a
--- 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 <startupdomainpskeys.h>             // kpsglobalsystemstate
 #include <ScreensaverInternalPSKeys.h>
 #include <UikonInternalPSKeys.h>             // kuikmmcinserted
+#include <hwrmpowerstatesdkpskeys.h>
 
 #ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
 #include <akntransitionutils.h>
@@ -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