diff -r 000000000000 -r 14df0fbfcc4e sapi_applicationmanager/appmanagerservice/src/appmanagerservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sapi_applicationmanager/appmanagerservice/src/appmanagerservice.cpp Mon Mar 30 12:51:10 2009 +0300 @@ -0,0 +1,222 @@ +/* +* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: This Class provides the core functionality to Application Manager +* SAPI +* +*/ + + + +#include +#include + +#include "appmanagerservice.h" +#include "launcher.h" +#include "launcherobserver.h" +#include "installpkgiterator.h" +#include "appiterator.h" +#include "asynchrequestmanager.h" + +//Content Type +_LIT(KApplication,"Application"); +_LIT(KUserInstalledPackage,"UserInstalledPackage"); + +#define KMAXPATHLENGTH 255 + +// ----------------------------------------------------------------------------- +// CAppManagerService::NewLC +// Returns the instance of CAppManagerService class. +// ----------------------------------------------------------------------------- +EXPORT_C CAppManagerService* CAppManagerService::NewL() + { + CAppManagerService* self = new ( ELeave )CAppManagerService(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CAppManagerService::~CAppManagerService +// Destructor +// ----------------------------------------------------------------------------- + +CAppManagerService::~CAppManagerService() + { + + //releasing the AsynchRequestManager class + delete iAsynchReqMngr; + + //Closing the session of application arch server + iApaLsSession.Close(); + + //releasing the launcher class + delete iLauncher; + + } + + +// ----------------------------------------------------------------------------- +// CAppManagerService::LaunchApplication +// This function Launch the given Application +// ----------------------------------------------------------------------------- + +EXPORT_C void CAppManagerService::LaunchApplicationL( const TDesC& aAppId, + const TDesC8& aCmdLine, + const TOptions& aOptions, + MAppObserver* aObserver, + TInt32 aTransactionID ) + { + + if ( !aObserver ) + { + //Synchronous call + + iLauncher->LaunchApplicationL( aAppId, aCmdLine, aOptions); + + } + else + { + //Asynchorous opertaion + //Add observer for supporting cancel to multiple asynch request + + TThreadId threadId =iLauncher->LaunchApplicationL( aAppId, aCmdLine, aOptions); + CLauncherObserver* observer = iAsynchReqMngr->AddObsereverLC( aObserver,aTransactionID, threadId ); + CleanupStack::Pop( observer ); + + + } + + + + } + + +// ----------------------------------------------------------------------------- +// CAppManagerService::LaunchApplication +// This function Launch the given content +// ----------------------------------------------------------------------------- + +EXPORT_C void CAppManagerService::LaunchDocumentL( TDocument& aCriteria, + const TDesC8& aMimeType, + const TOptions& aOptions , + TDesC& aFileName, + MAppObserver* aObserver, + TInt32 aTransactionID ) + { + + if ( !aObserver ) + { + //Synchronous call + __UHEAP_MARK; + iLauncher->LaunchDocumentL( aCriteria, aMimeType, aOptions, aFileName); + __UHEAP_MARKEND; + } + else + { + //Asynchorous call + //Add observer for supporting cancel to multiple asynch request + TThreadId threadId = iLauncher->LaunchDocumentL(aCriteria, aMimeType, aOptions, aFileName ); + CLauncherObserver* observer = iAsynchReqMngr->AddObsereverLC( aObserver,aTransactionID, threadId ); + CleanupStack::Pop( observer ); + } + + } + +// ----------------------------------------------------------------------------- +// CAppManagerService::GetListL +// This function gives the list of all appication or installed packages +// according to the content +// ----------------------------------------------------------------------------- + +EXPORT_C void CAppManagerService::GetListL( MIterator*& aIterator, + const TDesC& aContent, + const CFilterParam* aFilterParam ) + { + + + if( KErrNone == aContent.CompareF(KApplication) ) + { + //CAppIterator class traverse the list of all application + aIterator = CAppIterator::NewL( iApaLsSession, aFilterParam ); + } + else if(KErrNone == aContent.CompareF(KUserInstalledPackage) ) + { + //CInstallPkgIterator class traverse the list of user intsalled package + aIterator = CInstallPkgIterator::NewL(); + } + else + { + // wrong content + User::Leave( KErrArgument ); + } + + + } + +// ----------------------------------------------------------------------------- +// CAppManagerService::Cancel +// Cancel the pending asynchronous request +// ----------------------------------------------------------------------------- +EXPORT_C TInt CAppManagerService::Cancel( TInt32 aTransactionID ) + { + + return iAsynchReqMngr->Cancel( aTransactionID ); + + } + +// ----------------------------------------------------------------------------- +// CAppManagerService::CAppManagerService +// ConstructorL +// ----------------------------------------------------------------------------- +void CAppManagerService::ConstructL() + + { + //opening the session with application arch server + User::LeaveIfError(iApaLsSession.Connect()); + + //creating the instance of launcher class for delegating all launching request + iLauncher = CLauncher::NewL( iApaLsSession ); + + //creating the instance of Asynch request manager which care the multiple asynch request + iAsynchReqMngr = CAsynchRequestManager::NewL(); + + } + + + +// ----------------------------------------------------------------------------- +// CAppManagerService::ValidateFilePathL +// Validate the given filepath +// ----------------------------------------------------------------------------- +void CAppManagerService::ValidateFilePathL(const TDesC& aFilePath) + { + RFile file; + RFs fs; + + if (aFilePath.Length() > KMAXPATHLENGTH) + User::Leave(KErrArgument); + + User::LeaveIfError(fs.Connect()); + + CleanupClosePushL(fs); + + if (file.Open(fs, aFilePath, EFileRead) != KErrNone) + { + User::Leave(KErrPathNotFound); + } + + CleanupStack::PopAndDestroy(); + }