diff -r 000000000000 -r 32704c33136d appinstaller/AppinstUi/Server/Src/SWInstAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/appinstaller/AppinstUi/Server/Src/SWInstAppUi.cpp Tue Jan 26 12:06:03 2010 +0200 @@ -0,0 +1,187 @@ +/* +* Copyright (c) 2002-2008 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: This file contains the implementation of CSWInstAppUi +* class member functions. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include + +#include "SWInstAppUi.h" +#include "SWInstInstallRequest.h" +#include "SWInstServer.h" +#include "SWInstDefs.h" + +using namespace SwiUI; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::CSWInstAppUi +// ----------------------------------------------------------------------------- +// +CSWInstAppUi::CSWInstAppUi() + { + SetFullScreenApp( EFalse ); + } + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSWInstAppUi::ConstructL() + { + BaseConstructL( EStandardApp | ENoScreenFurniture | ENonStandardResourceFile + | EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible ); + + // Create private path for the process + iEikonEnv->FsSession().CreatePrivatePath( EDriveC ); + iOkToExit = ETrue; + } + +// Destructor +CSWInstAppUi::~CSWInstAppUi() + { + if ( iReqObj ) + { + iReqObj->Cancel(); + delete iReqObj; + } + } + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::RunFileL +// Process file. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSWInstAppUi::InstallL( const TDesC& aFileName ) + { + // Currently only installation supported from here + __ASSERT_ALWAYS( !iReqObj, User::Leave( KSWInstErrBusy ) ); + + TInstallReq params; + iReqObj = CSWInstInstallRequest::NewL( ERequestInstall ); + iReqObj->SetCallback( this ); + static_cast(iReqObj)->Install( aFileName, params ); + } + +void CSWInstAppUi::InstallL( RFile& aFile ) + { + // Currently only installation supported from here + __ASSERT_ALWAYS( !iReqObj, User::Leave( KSWInstErrBusy ) ); + + TInstallReq params; + iReqObj = CSWInstInstallRequest::NewL( ERequestInstall ); + iReqObj->SetCallback( this ); + + RFile file; + file.Duplicate( aFile ); + + static_cast(iReqObj)->Install( file, params ); // Ownership of file transfers + } + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::RequestCompleted +// Called when request is completed. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSWInstAppUi::RequestCompleted( TInt /*aResult*/ ) + { + iOkToExit = ETrue; + + RunAppShutter(); + } + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::HandleCommandL +// Handles user commands. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSWInstAppUi::HandleCommandL( TInt aCommand ) + { + if ( aCommand == EEikCmdExit ) + { + CSWInstServer* server = reinterpret_cast(iEikonEnv->AppServer()); + + if ( iReqObj && iReqObj->IsActive() && !iCancelInProgress ) + { + // In this case we have no server running. + iCancelInProgress = ETrue; + iOkToExit = EFalse; + + // We must cancel the request before we can exit + iReqObj->Cancel(); + } + else if ( server && !iCancelInProgress ) + { + // In this case we might have an pending request in the server side. +// iCancelInProgress = ETrue; + iOkToExit = EFalse; + + // Prepare the server for exit. This will eventually call RequestCompletedL + // when all requests have been cancelled. + server->PrepareForExit( this ); + } + + if ( iOkToExit ) + { + Exit(); + } + } + } + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::ProcessCommandParametersL +// Processes shell commands. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CSWInstAppUi::ProcessCommandParametersL( TApaCommand /*aCommand*/, + TFileName& /*aDocumentName*/, + const TDesC8& /*aTail*/) + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSWInstAppUi::HandleSystemEventL +// Handles system events. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSWInstAppUi::HandleSystemEventL( const TWsEvent &aEvent ) + { + switch (*(TApaSystemEvent*)(aEvent.EventData())) + { + case EApaSystemEventShutdown: + // We need to exit + HandleCommandL( EEikCmdExit ); + break; + default: + CAknAppUi::HandleSystemEventL(aEvent); + break; + } + } + + +// End of File