diff -r 82749d516180 -r 2eb74cf6572e imagehandlingutilities/thumbnailmanager/tmcommon/src/tmactivitymanager.cpp --- a/imagehandlingutilities/thumbnailmanager/tmcommon/src/tmactivitymanager.cpp Fri Feb 19 23:07:36 2010 +0200 +++ b/imagehandlingutilities/thumbnailmanager/tmcommon/src/tmactivitymanager.cpp Fri Mar 12 15:43:57 2010 +0200 @@ -24,6 +24,7 @@ // CTMActivityManager* CTMActivityManager::NewL(MTMActivityManagerObserver* aObserver, TInt aTimeout) { + TN_DEBUG1( "CTMActivityManager::NewL()"); CTMActivityManager* self = new (ELeave) CTMActivityManager(aObserver, aTimeout); CleanupStack::PushL(self); self->ConstructL(); @@ -36,8 +37,9 @@ // --------------------------------------------------------------------------- // CTMActivityManager::CTMActivityManager(MTMActivityManagerObserver* aObserver, TInt aTimeout) -: CActive(CActive::EPriorityHigh), iObserver(aObserver), iTimeout(aTimeout) - { +: CActive(CActive::EPriorityHigh), iObserver(aObserver), iTimeout(aTimeout), iPreviousStatus(KErrNotFound) + { + TN_DEBUG1( "CTMActivityManager::CTMActivityManager()"); CActiveScheduler::Add(this); } @@ -47,6 +49,9 @@ // CTMActivityManager::~CTMActivityManager() { + TN_DEBUG1( "CTMActivityManager::~CTMActivityManager()"); + delete iLight; + iLight = NULL; Cancel(); iTimer.Close(); } @@ -57,6 +62,7 @@ // void CTMActivityManager::ConstructL() { + TN_DEBUG1( "CTMActivityManager::ConstructL()"); iTimer.CreateLocal(); } @@ -66,6 +72,7 @@ // void CTMActivityManager::SetTimeout(TInt aTimeout) { + TN_DEBUG1( "CTMActivityManager::SetTimeout()"); iTimeout = aTimeout; Reset(); } @@ -76,6 +83,9 @@ // void CTMActivityManager::Reset() { + TN_DEBUG1( "CTMActivityManager::Reset()"); + delete iLight; + iLight = NULL; Cancel(); Start(); } @@ -85,6 +95,7 @@ // --------------------------------------------------------------------------- void CTMActivityManager::DoCancel() { + TN_DEBUG1( "CTMActivityManager::DoCancel()"); iTimer.Cancel(); iWatch = ENone; } @@ -95,11 +106,20 @@ // void CTMActivityManager::Start() { - if (!IsActive()) + TN_DEBUG1( "CTMActivityManager::Start()"); + + iFirstRound = ETrue; + + if(!iLight) { - iWatch = EWaitingForInactivity; - iTimer.Inactivity(iStatus, iTimeout); + TRAP_IGNORE(iLight = CHWRMLight::NewL(this)); + } + + if( !IsActive() ) + { SetActive(); + TRequestStatus* statusPtr = &iStatus; + User::RequestComplete( statusPtr, KErrNone ); } } @@ -109,6 +129,22 @@ // 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) @@ -116,10 +152,9 @@ TInt inactivity = User::InactivityTime().Int(); if (inactivity >= iTimeout) { - if (iObserver) - { - iObserver->InactivityDetected(); - } + TN_DEBUG1( "CTMActivityManager::RunL() inactive"); + NotifyObserver(); + if (!IsActive()) //observer might have called a Reset() { iTimer.Inactivity(iStatus,0); @@ -133,17 +168,15 @@ } else if (iWatch == EWaitingForActivity) { - if (iObserver) - { - iObserver->ActivityDetected(); - } - + 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() { @@ -154,6 +187,7 @@ { iWatch = ENone; } + TN_DEBUG1( "CTMActivityManager::RunL() end"); } // --------------------------------------------------------------------------- @@ -162,11 +196,10 @@ // TInt CTMActivityManager::RunError(TInt aError) { - TN_DEBUG1( "CTMActivityManager::RunError()"); + TN_DEBUG2( "CTMActivityManager::RunError() %d", aError); if (aError != KErrNone) { - TN_DEBUG2( "CTMActivityManager::RunError = %d", aError ); Reset(); } @@ -174,3 +207,63 @@ 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); + } + } + }