smartinstaller/adm/inc/ADMAppUi.h
author Santosh V Patil <santosh.v.patil@nokia.com>
Wed, 30 Jun 2010 11:01:26 +0530
branchADM
changeset 48 364021cecc90
permissions -rw-r--r--
SmartInstaller contribution based on the Nokia Qt SDK 1.0 release

/*
* Copyright (c) 2009-2010 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: 
*     Declares UI class for application.
*
*
*/


#ifndef __ADMAPPUI_h__
#define __ADMAPPUI_h__

// INCLUDE FILES
#include <aknappui.h>
#include <aknglobalnote.h>
#include <aknglobalconfirmationquery.h>
#include <etelmm.h>
#include <flogger.h>
#include "progressdialog.h"
#include "globalwaitnote.h"
#include "globalqueryobserver.h"
#include "ADMDownloadHandler.h"
#include "ADMInstallManager.h"
#include "networkstatusobserver.h"

#include "debug.h"

_LIT(KADMPrivatePath, "c:\\private\\2002CCCE\\");
_LIT(KADMResumeInfoFile, "c:\\private\\2002CCCE\\resume");

// FORWARD DECLARATIONS
class CEikonEnv;
class CStateMachine;
class CDepTree;
class CXmlParser;
class CSisParser;
class CPackageInfo;
class CAknGlobalNote;
class CGlobalQueryObserver;
class CGlobalWaitNoteObserver;
class CNetworkStatusListener;

enum TExitReason
	{
	EExitNoError = 0,
	EUserCancelled,
	EDownloadFailed,
	EInsufficientMemory,
	EDeviceNotSupported,       // 5
	EInstallationFailed,
	EInvalidBootstrapVersion,
	ERootInstallationFailed,

	ELastExitState
	};

// Maximum length of the size prefix ("kB", "MB", "GB"). Must match resource
// file definition (TBUF16).
const TInt KMaxPrefixLen = 16;

// CLASS DECLARATION
/**
 * CADMAppUi application UI class.
 * Interacts with the user through the UI and request message processing
 * from the handler class
 */
class CADMAppUi : public CAknAppUi,
	public CGlobalQueryObserver::MGlobalQueryClient,
	public CProgressDialog::MProgressDialogClient,
	public CGlobalWaitNote::MGlobalWaitNoteClient
	{
public:
	// Constructors and destructor

	/**
	 * ConstructL.
	 * 2nd phase constructor.
	 */
	void ConstructL();

	/**
	 * CADMAppUi.
	 * C++ default constructor. This needs to be public due to
	 * the way the framework constructs the AppUi
	 */
	CADMAppUi();

	/**
	 * ~CADMAppUi.
	 * Virtual Destructor.
	 */
	virtual ~CADMAppUi();

	/**
	* Handle the Global Query Response
	*/
	void HandleGlobalQueryResponseL(const TInt aResponse);

	// Returns EikonEnv
	inline CEikonEnv* EikonEnv() const { return iEikonEnv; }

	// -------------------------------------------------------------------------
	// Interfaces for CStateFactory
	/**
	 * Displays proper error dialogs before starting the cleanups.
	 * This function MUST NOT LEAVE.
	 */
	void HandleFailure();

	/**
	 * Shows the final error message, if any, and exits the application.
	 */
	void ExitApp();

	/**
	 * Shows the progress bar.
	 */
	void ShowGlobalProgressL(const TInt aResourceId, const TInt aStartValue, const TInt aEndValue, const TInt aCurrent = -1, const TInt aLast = -1);

	/**
	 * Shows global error dialog with 'OK' CBA.
	 */
	void ShowGlobalErrorQueryL(const TInt aResourceId);

	/**
	 * Display global query seeking user permission
	 * to fetch dependencies from the web server.
	 */
	void ShowDownloadQueryL(const TInt aResourceId, const TInt aInfoResourceId = -1);

	/**
	 * Shows the application launch confirmation prompt.
	 */
	void ShowLaunchPromptL(const TDesC& aAppName, const TDesC& aIconFilename = KNullDesC);

	/**
	 * Deletes a file pointed by aFilename.
	 */
	void DeleteFile(const TDesC& aFilename);

	// -------------------------------------------------------------------------

private:
	// Functions from base classes

	/**
	 * From CEikAppUi, HandleCommandL.
	 * Takes care of command handling.
	 * @param aCommand Command to be handled.
	 */
	void HandleCommandL(TInt aCommand);

	/**
	 * Window server event. Handles key presses.
	 */
	void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination );

	//From MProgressDialogClient
	void ProgressDialogCancelled();
	void WaitNoteCancelled();

	TInt ShowGlobalNoteL( const TAknGlobalNoteType aType , const TInt aResourceId );
	TInt ShowExitNoteL();
	void ShowWaitNoteL( const TInt aResourceId, const TBool aCancellable, const TInt aDetailedResourceId = -1 );
	void ShowWaitNoteNumL( const TInt aResourceId, const TInt aCurrent, const TInt aLast );
	void CancelWaitNote();
	void CancelProgressBar();
	void ProcessCommandLineArgsL();

	/**
	 * Verifies available disk space.
	 *
	 * Returns true, if enough disk space is available
	 */
	TBool VerifyAvailableDiskSpaceL();

	/**
	 * Pretty prints aSize to aDescr and prefixes it with kB, MB or GB
	 * depending on the value of aSize.
	 */
	void PrettyPrint(const TUint32 aSize, TDes &aDescr);

	/**
	 * Reads the resources.
	 *
	 * Leaves with standard error codes, if it encounters errors.
	 */
	void ReadStaticResourcesL();

	/**
	 * Loads required icons.
	 */
	void LoadIconsL();

	/**
	 * Reads the configuration file.
	 *
	 * @return KErrNone if all succesful, error code otherwise
	 */
	TInt ReadConfigurationL();

	/**
	 * Returns the phone information
	 *
	 * @return KErrNone, if phone information was succesfully retrieved, error number otherwise.
	 */
	TInt GetPhoneInformation();

	/**
	 * Returns roaming status.
	 *
	 * @return ETrue, if phone is roaming
	 */
	TBool RegisteredRoaming();

	/**
	 * Returns the phone memory drive.
	 *
	 * @return Phone memory drive
	 */
	TInt PhoneMemoryDrive();

	/**
	 * Returns the memory card drive.
	 *
	 * @return Memory card drive
	 */
	TInt MemoryCardDrive();

	/**
	 * Returns true, if the user selected IAP is a WLAN access point.
	 */
	TBool UsingWLAN();

	/**
	 * Returns the Bearer type corresponding to the selected IAP Id.
	 *
	 * @return Bearer type
	 */
	TInt BearerType();

	/**
	 * Read the bootstrap version and file names from the resume file.
	 *
	 * @return Standard Symbian error code
	 */
	TInt ReadResumeInfoL();

private:
	friend class CStateMachine;
	friend class CDownloadHandler;

	/**
	 * State machine running the application logic.
	 */
	CStateMachine*     iStateMachine;

	/**
	 * Application exit reason
	 */
	TExitReason iExitReason;

	/**
	 * Silent installation completion status
	 */
	TBool iSilentInstallationOk;

	/**
	 * Set to ETrue, if non-silent installation was used. Used to hide
	 * our "Installation complete" note.
	 */
	TBool iNonSilentInstallation;

	CProgressDialog* iProgress;
	CGlobalWaitNote* iWaitNote;
	CAknGlobalConfirmationQuery* iGlobalConfirmationQuery;
	CGlobalQueryObserver* iGlobalQueryObserver;

	/**
	 * Full path to the application icon we're installing. Provided in the
	 * installer/wrapper package.
	 */
	HBufC* iAppIconFilename;

	/**
	 * Holds the current string shown in the query dialog
	 */
	HBufC* iQueryMessage;

	/**
	 * Path to dependency name. Given as a command line parameter.
	 */
	HBufC* iDepFileName;

	/**
	 * Path to the application sis file. Given as a command line parameter.
	 */
	HBufC* iSisFileName;

	/**
	 * The application name to be installed. Read from the resume file,
	 * not available if not resuming the installation.
	 */
	HBufC* iMainAppName;

	/**
	 * Bootstrap version that was used to launch ADM.
	 */
	TInt iBootstrapVersion;

	/**
	 * IAP for the download manager. We try to utilise any existing connection.
	 * If that is not available, browser default IAP will be used, if set.
	 * If that is not available, user will be prompted for the IAP.
	 */
	TUint32 iIAP;

	/**
	 * URL to server stored to config.ini. If configuration file does not exist,
	 * default hard-coded (KDefaultDepServerName) URL is used.
	 */
	HBufC8* iConfigUrl;

	/**
	 * The wrapper package UID. This package will be uninstalled
	 * after succesful installation as it is not required any longer.
	 */
	TUid iWrapperPackageUid;

	/**
	 * Handle to file server we got from CEikonEnv::Static()->FsSession().
	 */
	RFs iRfs;

	/**
	 * Telephony Server (etelmm).
	 */
	RTelServer iTelServer;

	/**
	 * Phone Object
	 */
	RMobilePhone iPhone;

	/**
	 * Software version string
	 */
	HBufC* iSwVersion; ///< owned

	/**
	 * Machine UID
	 */
	TInt iMachineUid;

	/**
	 * True, if resuming installation
	 */
	TBool iResumingInstallation;

	/**
	 * True, if installation resume information is required
	 */
	TBool iIsResumeRequired;

	/**
	 * True, if Ovi Store client is running
	 */
	TBool iOviStoreRunning;

	/**
	* True, if App Launch is possible.
	 */
	TBool iAppLaunch;

#ifdef _DEBUG
	/**
	 * Manufacturer ID as described by EHalData.
	 */
	TInt iManufacturer;

	/**
	 * Model ID
	 */
	TInt iModel;

	/**
	 * Hardware revision
	 */
	TInt iHardwareRev;

	/**
	 * Software revision
	 */
	TInt iSoftwareRev;

	/**
	 * Device family
	 */
	TInt iDeviceFamily;

	/**
	 * Device family revision
	 */
	TInt iDeviceFamilyRev;

	/**
	 * CPU architecture
	 */
	TInt iCpuArch;

	/**
	 * CPU ABI
	 */
	TInt iCpuABI;

	/**
	 * CPU speed
	 */
	TInt iCpuSpeed;
#endif

	/**
	 * Localised resource strings for "kB", "MB" and "GB" used by PrettyPrint().
	 */
	TBuf<KMaxPrefixLen> iPrefixKb;
	TBuf<KMaxPrefixLen> iPrefixMb;
	TBuf<KMaxPrefixLen> iPrefixGb;

	INIT_OBJECT_DEBUG_LOG
	};

#endif // __ADMAPPUI_h__

// End of File