serviceproviders/sapi_applicationmanager/appmanagerservice/src/launcherobserver.cpp
/*
* 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 is observer for the Launching Application
*
*/
#include "launcherobserver.h"
#include "asynchrequestmanager.h"
#include "appobserver.h"
#include "appmanagercommon.h"
// -----------------------------------------------------------------------------
// launcherObserver::NewL
// Returns the instance of CLauncherObserver.
// -----------------------------------------------------------------------------
CLauncherObserver* CLauncherObserver::NewL( MAppObserver* aObserver ,TInt32& aTransactionID, CAsynchRequestManager* aAsynchRequestManager )
{
CLauncherObserver* self = new ( ELeave )CLauncherObserver( aObserver ,aTransactionID, aAsynchRequestManager );
return self;
}
// ---------------------------------------------------------------------------
// Destructor.
// ---------------------------------------------------------------------------
//
CLauncherObserver::~CLauncherObserver()
{
iAppThread.Close();
}
// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CLauncherObserver::CLauncherObserver(MAppObserver* aObserver ,TInt32& aTransactionID, CAsynchRequestManager* aAsynchRequestManager ):
CActive( EPriorityStandard ),
iAppObserver ( aObserver ),
iTransactionID( aTransactionID ),
iAsynchRequestManager ( aAsynchRequestManager )
{
CActiveScheduler::Add( this );
}
// ---------------------------------------------------------------------------
// Activates the asynchronous request
// ---------------------------------------------------------------------------
//
void CLauncherObserver::ActivateRequestL( TThreadId& aThreadId )
{
User::LeaveIfError( iAppThread.Open( aThreadId ) );
iStatus = KRequestPending;
SetActive();
iAppThread.Logon( iStatus );
}
// ---------------------------------------------------------------------------
// sets the observer pointer
// ---------------------------------------------------------------------------
//
void CLauncherObserver::SetAppObserver ( MAppObserver* aAppObserver )
{
iAppObserver = aAppObserver;
}
// ---------------------------------------------------------------------------
// Notifies callback the result for asynchronous request.
// ---------------------------------------------------------------------------
//
void CLauncherObserver::NotifyRequestResultL( TInt aReason , TAppOperationEvent& aOperationEvent )
{
//Inform core class for completing the reuqest
iAsynchRequestManager->RequestComplete( iTransactionID );
if( iAppObserver )
{
iAppObserver->AppNotifyCallbackL( aReason , iTransactionID , aOperationEvent );
}
if( aOperationEvent != EAppCancel ) // If this is called because of cancel then skip the deletion
delete this;
}
// ---------------------------------------------------------------------------
// Inherited from CActive class
// ---------------------------------------------------------------------------
//
void CLauncherObserver::DoCancel()
{
iAppThread.LogonCancel( iStatus );
TAppOperationEvent appEvent = EAppCancel;
TRAP_IGNORE( NotifyRequestResultL( KErrCancel , appEvent ) );
}
// ---------------------------------------------------------------------------
// Inherited from CActive class
// ---------------------------------------------------------------------------
//
void CLauncherObserver::RunL()
{
TAppOperationEvent appEvent = EAppComplete;
NotifyRequestResultL( iStatus.Int(), appEvent );
}