diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/ssmcustcmds/ssmactivitycmd/src/ssmactivitycmd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/ssmcustcmds/ssmactivitycmd/src/ssmactivitycmd.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,219 @@ +/* +* Copyright (c) 2009 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: +* Implementation of CSsmActivityCmd class. +* +*/ + +#include "ssmactivitycmd.h" +#include "trace.h" + +#include +#include + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::NewL +// --------------------------------------------------------------------------- +// +CSsmActivityCmd* CSsmActivityCmd::NewL() + { + FUNC_LOG; + return new ( ELeave ) CSsmActivityCmd(); + } + + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::~CSsmActivityCmd +// --------------------------------------------------------------------------- +// +CSsmActivityCmd::~CSsmActivityCmd() + { + FUNC_LOG; + } + + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::Initialize +// --------------------------------------------------------------------------- +// +TInt CSsmActivityCmd::Initialize( CSsmCustomCommandEnv* /*aCmdEnv*/ ) + { + FUNC_LOG; + + TInt err( KErrNone ); + TRAP( err, iActivityMgr = CUserActivityManager::NewL( EPriorityNormal ) ); + ERROR( err, "Failed to create activity manager." ); + return err; + } + + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::Execute +// --------------------------------------------------------------------------- +// +void CSsmActivityCmd::Execute( const TDesC8& aParams, + TRequestStatus& aRequest ) + { + FUNC_LOG; + + aRequest = KRequestPending; + iClientStatus = &aRequest; + + TInt err( KErrNone ); + TInt timeout( 0 ); + + TRAP( err, timeout = ExtractParamsL( aParams ) ); + + ERROR( err, "Failed to parse parameters for execution" ); + + if ( KErrNone == err ) + { + TInt inactiveTime( User::InactivityTime().Int() ); + + INFO_2( "inactiveTime=%d, timeout=%d", inactiveTime, timeout ); + // already inactive, complete immediately + if ( inactiveTime >= timeout ) + { + INFO( "Already inactive" ); + + Complete( KErrNone ); + } + else + { + INFO( "Start waiting for inactivity" ); + + iActivityMgr->Start( TTimeIntervalSeconds( timeout ), + TCallBack( InactiveCallback, this ), + TCallBack( ActiveCallback, this ) ); + } + } + else + { + Complete( KErrArgument ); + } + } + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::ExecuteCancel +// --------------------------------------------------------------------------- +// +void CSsmActivityCmd::ExecuteCancel() + { + FUNC_LOG; + + if ( iActivityMgr ) + { + iActivityMgr->Cancel(); + } + + Complete( KErrCancel ); + } + + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::Close +// --------------------------------------------------------------------------- +// +void CSsmActivityCmd::Close() + { + FUNC_LOG; + + if ( iActivityMgr ) + { + iActivityMgr->Cancel(); + delete iActivityMgr; + iActivityMgr = NULL; + } + } + + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::Release +// --------------------------------------------------------------------------- +// +void CSsmActivityCmd::Release() + { + FUNC_LOG; + + delete this; + } + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::InactiveCallback +// +// --------------------------------------------------------------------------- +// +TInt CSsmActivityCmd::InactiveCallback( TAny* aActivityMonitor ) + { + FUNC_LOG; + + CSsmActivityCmd* mon = static_cast( aActivityMonitor ); + + // This would be a good place for cancelling CUserActivityManager + // However, it reactivates its timer after client callback has been made, + // so cancel won't have any effect + // Just complete the request, Complete() checks whether there exists one + mon->Complete( KErrNone ); // allow proceeding + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::ActiveCallback +// +// --------------------------------------------------------------------------- +// +TInt CSsmActivityCmd::ActiveCallback( TAny* /*aActivityMonitor*/ ) + { + FUNC_LOG; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::Complete +// +// --------------------------------------------------------------------------- +// +void CSsmActivityCmd::Complete( TInt aErrorCode ) + { + FUNC_LOG; + + INFO_2( "iClientStatus=0x%x, aErrorCode=%d", iClientStatus, aErrorCode ); + + if ( iClientStatus ) + { + INFO( "Allow startlist execution to continue" ); + + User::RequestComplete( iClientStatus, aErrorCode ); + } + } + +// --------------------------------------------------------------------------- +// CSsmActivityCmd::Complete +// +// --------------------------------------------------------------------------- +// +TInt CSsmActivityCmd::ExtractParamsL( const TDesC8& aParams ) + { + FUNC_LOG; + + RResourceReader reader; + reader.OpenLC( aParams ); + TInt timeout = reader.ReadInt16L(); + CleanupStack::PopAndDestroy(); // Reader + return timeout; + }