appinstaller/AppinstUi/Server/Src/SWInstAppUi.cpp
changeset 4 32704c33136d
--- /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 <aknenv.h>
+#include <SWInstDefs.h>
+#include <f32file.h>
+
+#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<CSWInstInstallRequest*>(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<CSWInstInstallRequest*>(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<CSWInstServer*>(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