uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp
branchRCL_3
changeset 20 31fccae4f8a7
parent 19 e5af45d51884
--- a/uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp	Tue Aug 31 16:07:35 2010 +0300
+++ b/uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp	Wed Sep 01 12:16:53 2010 +0100
@@ -27,6 +27,8 @@
 // Maximum amount of end checks to be performed. 
 // This can be lower, should be visible enough to see, if heuristics fail.
 const TInt KRosterFreezeEndAttempts = 50;
+// Timeout for implicit blank off.
+const TInt KAlfImplicitBlankerTimeoutInMs = 250;
 
 // ---------------------------------------------------------
 // CAlfRosterFreezeEndTimer
@@ -119,6 +121,8 @@
 
 CAlfLayoutSwitchEffectCoordinator::~CAlfLayoutSwitchEffectCoordinator()
     {   
+    delete iRosterFreezeEndTimer;
+    delete iImplicitBlankTimer;
     }
 
 // ---------------------------------------------------------
@@ -128,8 +132,64 @@
 void CAlfLayoutSwitchEffectCoordinator::Blank(TBool aEnabled)
     {
     __ALFLOGSTRING1("CAlfLayoutSwitchEffectCoordinator::Blank %d", aEnabled);
-    iBlankEnabled = aEnabled;
-    Event( aEnabled ? EEventBlankOn : EEventBlankOff );
+    iAknBlankEnabled = aEnabled;
+    HandleBlankChange();
+    }
+
+// ---------------------------------------------------------
+// CAlfLayoutSwitchEffectCoordinator::ImplicitBlank
+// ---------------------------------------------------------
+//
+void CAlfLayoutSwitchEffectCoordinator::ImplicitBlank()
+    {
+    __ALFLOGSTRING("CAlfLayoutSwitchEffectCoordinator::ImplicitBlank");
+        
+    if (!iImplicitBlankTimer)
+        {
+        iImplicitBlankTimer = CPeriodic::New(CActive::EPriorityHigh);
+        if (!iImplicitBlankTimer)
+            {
+            return;
+            }
+        }
+        
+    iImplicitBlankEnabled = ETrue;
+    HandleBlankChange();
+    
+    if (iImplicitBlankTimer)
+        {
+        iImplicitBlankTimer->Cancel();
+        iImplicitBlankTimer->Start(KAlfImplicitBlankerTimeoutInMs*1000, KAlfImplicitBlankerTimeoutInMs*1000, 
+            TCallBack(DoImplicitBlankOff, this));
+        }
+    }
+    
+// ---------------------------------------------------------
+// CAlfLayoutSwitchEffectCoordinator::DoImplicitBlankOff
+// ---------------------------------------------------------
+//
+TInt CAlfLayoutSwitchEffectCoordinator::DoImplicitBlankOff(TAny* aAny)
+    {
+    __ALFLOGSTRING("CAlfLayoutSwitchEffectCoordinator::DoImplicitBlankOff");
+        
+    CAlfLayoutSwitchEffectCoordinator* self = static_cast<CAlfLayoutSwitchEffectCoordinator*>(aAny);
+    self->iImplicitBlankTimer->Cancel();
+    self->iImplicitBlankEnabled = EFalse;
+    self->HandleBlankChange();
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// CAlfLayoutSwitchEffectCoordinator::HandleBlankChange
+// ---------------------------------------------------------
+//
+void CAlfLayoutSwitchEffectCoordinator::HandleBlankChange()
+    {
+    TBool newBlankState = iAknBlankEnabled || iImplicitBlankEnabled;
+    
+    iBlankEnabled = newBlankState;
+    Event( newBlankState ? EEventBlankOn : EEventBlankOff );
     }
     
 // ---------------------------------------------------------