diff -r 235a7fc86938 -r 2edacbf5d3f9 imagehandlingutilities/thumbnailmanager/tmcommon/src/tmactivitymanager.cpp --- /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); + } + } + }