javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp
branchRCL_3
changeset 17 0fd27995241b
parent 14 04becd199f91
child 18 9ac0a0a7da70
--- a/javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp	Fri Apr 30 10:40:48 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp	Tue May 11 16:07:20 2010 +0300
@@ -27,6 +27,10 @@
 #include <bautils.h>
 #include <s32stor.h>
 #include <s32file.h>
+#include <e32property.h>
+#include <centralrepository.h>
+#include <settingsinternalcrkeys.h>
+#include <screensaverinternalpskeys.h>      // to work with screensaver
 #include <gfxtranseffect/gfxtranseffect.h>  // For transition effects
 #include <akntranseffect.h>                                 // For transition effects
 //
@@ -427,6 +431,8 @@
         ASSERT(oldDisplayable->Component()->Type() == MMIDComponent::EAlert);
     }
 
+    ResetInactivityTimeL();
+
     // Set it, revert will rollback if required.
     iCurrentDisplayable = newDisplayable;
 
@@ -487,6 +493,57 @@
     CleanupStack::Pop();    // revert
 }
 
+void CMIDToolkit::ResetInactivityTimeL()
+{
+    TInt status = KErrNotFound;
+    RProperty::Get(KPSUidScreenSaver, KScreenSaverAllowScreenSaver,status);
+
+    // If Screen Saver is enabled and is inactive reset timers
+    // Keep lights on and screensaver disabled. When status is >0 it means
+    // that screen saver is not allowed to be activated
+    if (!status)
+    {
+        TInt isTimeoutEnabled = KErrNone;
+        TInt errPCenrep = KErrNone;
+        CRepository* pCenrep = CRepository::NewLC(KCRUidPersonalizationSettings);
+        if (pCenrep)
+        {
+            errPCenrep = pCenrep->Get(
+                             KSettingsScreensaverTimeoutItemVisibility,
+                             isTimeoutEnabled);
+        }
+        CleanupStack::PopAndDestroy(pCenrep);
+
+#if defined(__WINSCW__)
+        if (!isTimeoutEnabled)
+        {
+            isTimeoutEnabled = 1;
+        }
+#endif
+
+        // Screen Saver Time out value
+        TInt screenSaverTimeout = KErrNone;
+        TInt errSCenrep = KErrNone;
+        CRepository* securityCenrep = CRepository::NewLC(KCRUidSecuritySettings);
+        if (securityCenrep)
+        {
+            errSCenrep = securityCenrep->Get(
+                             KSettingsAutomaticKeyguardTime, screenSaverTimeout);
+        }
+        CleanupStack::PopAndDestroy(securityCenrep);
+
+        // Inactivity time in seconds
+        TInt userInactivity = User::InactivityTime().Int();
+
+        // Check if screen saver is inactive, if so reset timers
+        if (errPCenrep == KErrNone && errSCenrep == KErrNone &&
+                isTimeoutEnabled && userInactivity < screenSaverTimeout)
+        {
+            User::ResetInactivityTime();
+        }
+    }
+}
+
 void CMIDToolkit::BringToForeground()
 {
     LCDUI_DEBUG("**RF**");
@@ -513,10 +570,25 @@
             if (appUi && appUi->hasStartScreen())
             {
                 MMIDComponent* content = iCurrentDisplayable ? iCurrentDisplayable->Component() : NULL;
-                if (!content || content->Type() != MMIDComponent::ECanvas)
+
+                TBool isCanvas = EFalse;
+                TBool isCanvasReadyToBlit = EFalse;
+                if (content)
+                {
+                    if (content->Type() == MMIDComponent::ECanvas)
+                    {
+                        isCanvas = ETrue;
+                        MMIDCanvas* canvas = static_cast<MMIDCanvas*>(content);
+                        isCanvasReadyToBlit = canvas->ReadyToBlit();
+                    }
+                }
+
+                if (!content || !isCanvas || isCanvasReadyToBlit)
                 {
                     if (iCurrentDisplayable)
+                    {
                         iCurrentDisplayable->DrawNow();
+                    }
                     appUi->stopStartScreen();
                 }
             }