iaupdate/IAD/ui/inc/iaupdatestarter.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 14:23:31 +0300
changeset 53 ae54820ef82c
parent 0 ba25891c3a9e
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* Copyright (c) 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 header file of the CIAUpdateStarter
*                class 
*
*/


#ifndef __IAUPDATE_STARTER_H__
#define __IAUPDATE_STARTER_H__

// INCLUDES
#include <e32base.h>
#include "iaupdateuitimerobserver.h"

// FORWARD DECLARATIONS
class CApaWindowGroupName;
class MIAUpdateStarterObserver;
class CIAUpdateUITimer;

// CLASS DECLARATION
/**
*
*/

class CIAUpdateStarter :public CActive, public MIAUpdateUITimerObserver
    {
public:

    /**
    * Construct a CIAUpdateStarter using two phase construction,
    * and return a pointer to the created object
    * @param aCommandLineExecutable Name of executable to be started
    * @param aCommandLineArguments Command line arguments of an application 
    * @return A pointer to the created instance of CIAUpdateStarter
    */
    static CIAUpdateStarter* NewL( const TDesC& aCommandLineExecutable,
                                   const TDesC8& aCommandLineArguments );
    
    /**
    * Destructor
    */
    ~CIAUpdateStarter();

public: // new functions
    /**
    * Starts an executable
    *
    * @param aStarterObserver  Observer
    */
    void StartExecutableL( MIAUpdateStarterObserver& aStarterObserver );
    
    /**
    * Checks weather startable executable exists in installation package
    *
    * @param aPUid  Package Uid of installation
    */
    void CheckInstalledPackageL( const TUid& aPUid );    
    
    /**
    * Bring started application to foreground
    */
    void BringToForegroundL() const;
    
private: // from CActive

    /**
     * @see CActive::DoCancel
     *
     */
    void DoCancel();

    /**
     * When the server side has finished operation, the CActive object will
     * be informed about it, and as a result RunL will be called. This function
     * well inform the observer that the operation has been completed.
     * @see CActive::RunL
     *
     */
    void RunL();
           
    /**
     * Just trap leave error and pass it to observer
     *
     * @see CActive::RunError
     *
     */
    TInt RunError( TInt aError );
    
private: // from MIAUpdateUITimerObserver
      
     void BackgroundDelayComplete( TInt aError );   
         
     void ForegroundDelayComplete( TInt aError );
     
     void ProcessStartDelayComplete( TInt aError );  

private:  //constructors

    /**
    * Perform the second phase construction of a CIAUpdateStarter object
    * @param aCommandLineExecutable Name of executable to be started
    * @param aCommandLineArguments Command line arguments of an application 
    */
    void ConstructL( const TDesC& aCommandLineExecutable,
                     const TDesC8& aCommandLineArguments );

    /**
    * C++ constructor 
    */
    CIAUpdateStarter();

private:  //new functions
    
    /**
    * Starts executable
    */
    void LaunchExeL();
    
    /**
    * Close executable
    */
    void CloseExecutableL();
    
    /**
    * Finds UID of executable
    * @param aUid UID 
    */
    void UidForExecutableL( TUid& aUid ) const;
    
    /**
    * Starts process
    */
    void StartProcessL();

private: //data

    HBufC* iCommandLineExecutable;
    
    HBufC8* iCommandLineArguments;
    
    TBool iStartNeeded;
    
    TBool iExeStarted;
    
    TUid iUid;
    
    TInt iPrevWgId;
        
    RThread iThread;
	
	RProcess iProcess;
	
	MIAUpdateStarterObserver* iStarterObserver; //not owned
	
	CEikonEnv* iEikEnv; //not owned
	
	CIAUpdateUITimer* iProcessStartTimer;
	
    };


#endif // __IAUPDATE_STARTER_H__