diff -r 000000000000 -r 164170e6151a devencdiskutils/DevEncStarter/src/DevEncStarterAppStarter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devencdiskutils/DevEncStarter/src/DevEncStarterAppStarter.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,207 @@ +/* +* Copyright (c) 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: Starts applications +* +*/ + + +#include // for RApaLsSession +#include // for CApaCommandLine +#include "DevEncStarterAppStarter.h" +#include "DevEncLog.h" + +// ================= MEMBER FUNCTIONS ======================= +// +// ---------------------------------------------------------- +// CDevEncStarterStarter::NewL +// Instancies CDevEncStarterStarter object +// ---------------------------------------------------------- +// +CDevEncStarterStarter* CDevEncStarterStarter::NewL( MAppStarterCallback* aCallback ) + { + CDevEncStarterStarter* self = CDevEncStarterStarter::NewLC(aCallback); + CleanupStack::Pop(); + return self; + } + + +// ---------------------------------------------------------- +// CDevEncStarterStarter::NewL +// Instancies CDevEncStarterStarter object +// ---------------------------------------------------------- +// +CDevEncStarterStarter* CDevEncStarterStarter::NewLC( MAppStarterCallback* aCallback ) + { + CDevEncStarterStarter* self = new ( ELeave ) CDevEncStarterStarter( aCallback ); + CleanupStack::PushL ( self ); + self->ConstructL(); + //CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------- +// CDevEncStarterStarter::ConstructL() +// Initializes data objects +// ---------------------------------------------------------- +// +void CDevEncStarterStarter::ConstructL() + { + CActiveScheduler::Add( this ); + } + +// ---------------------------------------------------------- +// CDevEncStarterStarter::CDevEncStarterStarter() +// Constructor +// ---------------------------------------------------------- +// +CDevEncStarterStarter::CDevEncStarterStarter( MAppStarterCallback* aCallback ) + : CActive( EPriorityStandard ), + iCallback( aCallback ) + { + } + +// ---------------------------------------------------------- +// CDevEncStarterStarter::CDevEncStarterStarter() +// Destructor +// ---------------------------------------------------------- +// +CDevEncStarterStarter::~CDevEncStarterStarter() + { + Cancel(); + } + +// ---------------------------------------------------------- +// CDevEncStarterStarter::CanStartAppL() +// +// ---------------------------------------------------------- +// +TBool CDevEncStarterStarter::CanStartAppL( const TUint32& aUid ) + { + DFLOG2( ">>CDevEncStarterStarter::CanStartAppL %x", aUid ); + TBool result( EFalse ); + RApaLsSession ls; + CleanupClosePushL( ls ); + User::LeaveIfError( ls.Connect() ); + + TApaAppInfo appInfo; + TInt err = ls.GetAppInfo( appInfo, TUid::Uid( aUid ) ); + + if ( err == KErrNone ) + { + result = ETrue; + } + CleanupStack::PopAndDestroy(); // ls + return result; + } + +// ---------------------------------------------------------- +// CDevEncStarterStarter::StartAppL() +// +// ---------------------------------------------------------- +// +void CDevEncStarterStarter::StartAppL( const TUint32& aUid ) + { + DFLOG2( ">>CDevEncStarterStarter::StartAppL %x", aUid ); + + if ( this->IsActive() ) + { + DFLOG( "Already active" ); + return; + } + + RApaLsSession ls; + CleanupClosePushL( ls ); + User::LeaveIfError( ls.Connect() ); + + TApaAppInfo appInfo; + TInt err = ls.GetAppInfo( appInfo, TUid::Uid( aUid ) ); + + if ( err == KErrNone ) + { + CApaCommandLine* apaCommandLine = CApaCommandLine::NewLC(); + apaCommandLine->SetExecutableNameL( appInfo.iFullName ); + apaCommandLine->SetCommandL( EApaCommandRun ); + TThreadId threadId; + DFLOG2( "iStatus = %d", iStatus.Int() ); + TRequestStatus* status = &iStatus; + TInt startErr = ls.StartApp( *apaCommandLine, threadId, status ); + DFLOG2( "iStatus after StartApp = %d", iStatus.Int() ); + CleanupStack::PopAndDestroy( apaCommandLine ); + if ( startErr == KErrNone ) + { + iAppUidStarting = aUid; + SetActive(); + } + else + { + DFLOG2( "Start error %d", startErr ); + } + } + else + { + FLOG2( "GetAppInfo error %d", err ); + } + CleanupStack::PopAndDestroy(); // ls + DFLOG( "<AppStarted( iAppUidStarting ); + } + else + { + DFLOG( "No callback object registered" ); + } + } + else + { + DFLOG( "No callback informing because of error" ); + } + iAppUidStarting = 0; + } + +// ---------------------------------------------------------- +// CDevEncStarterStarter::DoCancel() +// CActive Object method +// ---------------------------------------------------------- +// +void CDevEncStarterStarter::DoCancel() + { + } + +// End of file +