imagehandlingutilities/thumbnailmanager/tmcommon/src/tmactivitymanager.cpp
changeset 14 2edacbf5d3f9
child 15 7197e789b953
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandlingutilities/thumbnailmanager/tmcommon/src/tmactivitymanager.cpp	Fri Mar 19 09:35:30 2010 +0200
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Activity Manager 
+*
+*/
+
+#include "tmactivitymanager.h"
+#include "thumbnaillog.h"
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::NewL()
+// ---------------------------------------------------------------------------
+//
+CTMActivityManager* CTMActivityManager::NewL(MTMActivityManagerObserver* aObserver, TInt aTimeout)
+    {
+    TN_DEBUG1( "CTMActivityManager::NewL()");
+    CTMActivityManager* self = new (ELeave) CTMActivityManager(aObserver, aTimeout);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CTMActivityManager::CTMActivityManager()
+// ---------------------------------------------------------------------------
+//
+CTMActivityManager::CTMActivityManager(MTMActivityManagerObserver* aObserver, TInt aTimeout)
+: CActive(CActive::EPriorityHigh), iObserver(aObserver), iTimeout(aTimeout), iPreviousStatus(KErrNotFound)
+    {
+    TN_DEBUG1( "CTMActivityManager::CTMActivityManager()");
+    CActiveScheduler::Add(this);
+    }
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::~CTMActivityManager()
+// ---------------------------------------------------------------------------
+//
+CTMActivityManager::~CTMActivityManager()
+    {
+    TN_DEBUG1( "CTMActivityManager::~CTMActivityManager()");
+    delete iLight;
+    iLight = NULL;
+    Cancel();
+    iTimer.Close();
+    }
+ 
+// ---------------------------------------------------------------------------
+// CTMActivityManager::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CTMActivityManager::ConstructL()
+    {
+    TN_DEBUG1( "CTMActivityManager::ConstructL()");
+    iTimer.CreateLocal();
+    }
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::SetTimeout()
+// ---------------------------------------------------------------------------
+//
+void CTMActivityManager::SetTimeout(TInt aTimeout)
+    {
+    TN_DEBUG1( "CTMActivityManager::SetTimeout()");
+    iTimeout = aTimeout;
+    Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::Reset()
+// ---------------------------------------------------------------------------
+//
+void CTMActivityManager::Reset()
+    {
+    TN_DEBUG1( "CTMActivityManager::Reset()");
+    delete iLight;
+    iLight = NULL;
+    Cancel();
+    Start();
+    }
+ 
+// ---------------------------------------------------------------------------
+// CTMActivityManager::DoCancel()
+// ---------------------------------------------------------------------------
+void CTMActivityManager::DoCancel()
+    {
+    TN_DEBUG1( "CTMActivityManager::DoCancel()");
+    iTimer.Cancel();
+    iWatch = ENone;
+    }
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::Start()
+// ---------------------------------------------------------------------------
+//
+void CTMActivityManager::Start()
+    {
+    TN_DEBUG1( "CTMActivityManager::Start()");
+    
+    iFirstRound = ETrue;
+    
+    if(!iLight)
+        {
+        TRAP_IGNORE(iLight = CHWRMLight::NewL(this));
+        }
+    
+    if( !IsActive() )
+        {
+        SetActive();
+        TRequestStatus* statusPtr = &iStatus;
+        User::RequestComplete( statusPtr, KErrNone );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::RunL()
+// ---------------------------------------------------------------------------
+//
+void CTMActivityManager::RunL()
+    {
+    TN_DEBUG4( "CTMActivityManager::RunL(0x%08x) %d, observer = 0x%08x", this, iStatus.Int(), iObserver);
+    
+    if(iFirstRound)
+        {
+        TN_DEBUG1( "CTMActivityManager::RunL() iFirstRound");
+        iFirstRound = EFalse;
+        if (!IsActive())
+             {
+             iWatch = EWaitingForInactivity;
+             iTimer.Inactivity(iStatus, iTimeout);
+             SetActive();
+             }
+        NotifyObserver();
+        return;
+        }
+    
+    if (iStatus == KErrNone)
+        {
+        if (iWatch == EWaitingForInactivity)
+            {
+            TInt inactivity = User::InactivityTime().Int();
+            if (inactivity >= iTimeout)
+                {
+                TN_DEBUG1( "CTMActivityManager::RunL() inactive");
+                NotifyObserver();
+
+            if (!IsActive()) //observer might have called a Reset()
+                {
+                iTimer.Inactivity(iStatus,0);
+                iWatch = EWaitingForActivity;
+                }
+            }
+            else
+                {
+                iTimer.Inactivity(iStatus,iTimeout);
+                }
+            }
+        else if (iWatch == EWaitingForActivity)
+            {
+                TN_DEBUG1( "CTMActivityManager::RunL() active");
+                NotifyObserver();
+             
+            if (!IsActive()) //observer might have called a Reset()
+                {
+                iTimer.Inactivity(iStatus,iTimeout);
+                iWatch = EWaitingForInactivity;
+                }
+            }
+    
+        if (!IsActive()) //observer might have called a Reset()
+            {
+            SetActive();
+            }
+        }
+    else
+        {
+        iWatch = ENone;
+        }
+        TN_DEBUG1( "CTMActivityManager::RunL() end");
+    }
+
+// ---------------------------------------------------------------------------
+// CTMActivityManager::RunError()
+// ---------------------------------------------------------------------------
+//
+TInt CTMActivityManager::RunError(TInt aError)
+    {
+    TN_DEBUG2( "CTMActivityManager::RunError() %d", aError);
+    
+    if (aError != KErrNone)
+        {
+        Reset();
+        }
+    
+    // nothing to do
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// IsInactive()
+// -----------------------------------------------------------------------------
+//
+TBool CTMActivityManager::IsInactive()
+    {
+#ifdef _DEBUG
+TN_DEBUG3( "CTMActivityManager::IsInactive()= %d, iLights = %d", User::InactivityTime().Int(), iLights);
+#endif
+
+    //if lights are off or inactivity timer is less that target the device is not idle
+    if( User::InactivityTime() >= TTimeIntervalSeconds(iTimeout) || !iLights )
+      {
+      TN_DEBUG1( "CTMActivityManager::IsInactive() ETrue");
+      return ETrue;
+      }
+    TN_DEBUG1( "CTMActivityManager::IsInactive() EFalse");
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// LightStatusChanged()
+// -----------------------------------------------------------------------------
+//
+void CTMActivityManager::LightStatusChanged(TInt /*aTarget*/, CHWRMLight::TLightStatus aStatus)
+    {
+    TN_DEBUG2( "CTMActivityManager::LightStatusChanged() aStatus == %d", aStatus);
+    
+     if( aStatus == CHWRMLight::ELightOff)
+        {
+        TN_DEBUG1( "CTMActivityManager::LightStatusChanged() -- OFF");
+        iLights = EFalse;
+        }
+    else
+        {
+        TN_DEBUG1( "CTMActivityManager::LightStatusChanged() -- ON");
+        iLights = ETrue;
+        }
+     
+        NotifyObserver();
+    }
+
+// -----------------------------------------------------------------------------
+// NotifyObserver()
+// -----------------------------------------------------------------------------
+//
+void CTMActivityManager::NotifyObserver()
+    {
+    TN_DEBUG1( "void CTMAActivityManager::NotifyObserver()");
+    TBool status = IsInactive();
+    
+    if( iPreviousStatus != status )
+        {
+        iPreviousStatus = status; 
+        if (iObserver)
+            {
+            iObserver->ActivityChanged(!status);
+            }
+        }
+    }