--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgagents/trkagent/engine/TrkSwInstUIHandler.cpp Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,543 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+#include "TrkSwInstUIHandler.h"
+
+/**
+ * Creates a new Instance of the CTrkSWInstUIHandler and calls the
+ * ConsturctL
+ * @param None
+ * @return CTrkSWInstUIHandler*
+ *
+ */
+CTrkSWInstUIHandler* CTrkSWInstUIHandler::NewL(const TChar aInstallDrive)
+{
+ CTrkSWInstUIHandler* self=new(ELeave) CTrkSWInstUIHandler(aInstallDrive);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+}
+
+/**
+ * Creates a new Instance of the CTrkSWInstUIHandler and calls the
+ * ConsturctL
+ * @param None
+ * @return CTrkSWInstUIHandler*
+ *
+ */
+CTrkSWInstUIHandler* CTrkSWInstUIHandler::NewL()
+{
+ CTrkSWInstUIHandler* self=new(ELeave) CTrkSWInstUIHandler();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+}
+
+
+/**
+ * Constructor for CTrkSWInstUIHandler
+ */
+CTrkSWInstUIHandler::CTrkSWInstUIHandler()
+: iDispInstall(TRUE),
+ iDispGrantCapabilities(TRUE),
+ iDispUnInstall(TRUE),
+ iDispLanguage(0),
+ iDispDialect(0),
+ iDispDrive('C'),
+ iDispUpgrade(TRUE),
+ iDispDependencyBreak(TRUE),
+ iDispQuestion(TRUE),
+ iDispSecurityWarning(TRUE),
+ iDispRevocationQuery(TRUE),
+ iDispApplicationInUse(TRUE),
+ iDispTextDialog(TRUE),
+ iDispOptions(0),
+ iAppUID(0),
+ iErrCode(KErrNothing)
+{
+}
+
+/**
+ * Constructor for CTrkSWInstUIHandler
+ */
+CTrkSWInstUIHandler::CTrkSWInstUIHandler(const TChar aInstallDrive)
+: iDispInstall(TRUE),
+ iDispGrantCapabilities(TRUE),
+ iDispUnInstall(TRUE),
+ iDispLanguage(0),
+ iDispDialect(0),
+ iDispDrive(aInstallDrive),
+ iDispUpgrade(TRUE),
+ iDispDependencyBreak(TRUE),
+ iDispQuestion(TRUE),
+ iDispSecurityWarning(TRUE),
+ iDispRevocationQuery(TRUE),
+ iDispApplicationInUse(TRUE),
+ iDispTextDialog(TRUE),
+ iDispOptions(0),
+ iAppUID(0),
+ iErrCode(KErrNothing)
+{
+}
+/**
+ * Second stage constructor for CTrkSWInstUIHandler
+ */
+void CTrkSWInstUIHandler::ConstructL()
+{
+}
+
+/**
+ * Destructor for CTrkSWInstUIHandler
+ */
+CTrkSWInstUIHandler::~CTrkSWInstUIHandler()
+{
+ iDispInstall = FALSE;
+ iDispGrantCapabilities = FALSE;
+ iDispUnInstall = FALSE;
+ iDispLanguage = 0;
+ iDispDialect = 0;
+ iDispDrive = 'C';
+ iDispUpgrade = FALSE;
+ iDispDependencyBreak = FALSE;
+ iDispQuestion = FALSE;
+ iDispSecurityWarning = FALSE;
+ iDispRevocationQuery = FALSE;
+ iDispApplicationInUse = FALSE;
+ iDispTextDialog = FALSE;
+ iDispOptions = 0;
+ iAppUID = 0;
+
+ iErrCode = KErrNothing;
+}
+
+/**
+ * Displays a dialog at the beginning of an installation with details about the SISX package
+ * being installed. This dialog must be shown in TrustedUI mode.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aLogo The logo data in the SISX file. If no logo is present it will be NULL.
+ * @param aCertificates An array of end entity certificates, one for each chain in the SISX file.
+ * If the SISX file is unsigned this array will have zero length.
+ *
+ * @note Trusted UI
+ *
+ * @return ETrue if the user pressed the Yes button to continue the install,
+ * EFalse if the user pressed the No button, aborting the installation.
+ */
+TBool CTrkSWInstUIHandler::DisplayInstallL(const CAppInfo& aAppInfo,
+ const CApaMaskedBitmap* aLogo,
+ const RPointerArray< CCertificateInfo >& aCertificates)
+{
+ return iDispInstall;
+}
+
+/**
+ * Displays a dialog requesting that the user grants these capabilities to the SISX package
+ * being installed. This dialog must be shown in TrustedUI mode.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aCapabilitySet The capabilities requested by the SISX package.
+ *
+ * @note Trusted UI
+ *
+ * @return ETrue to continue the installation, or EFalse to abort the installation.
+ */
+TBool CTrkSWInstUIHandler::DisplayGrantCapabilitiesL(const CAppInfo& aAppInfo,
+ const TCapabilitySet& aCapabilitySet)
+{
+ return iDispGrantCapabilities;
+}
+
+/**
+ * Requests preferred language and dialect information from the UI.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aLanguages Array of languages supported by the SIS file.
+ *
+ * @return Must return index in the passed array that corresponds to the user's selected
+ * preferred language. If out-of-bounds value is returned, the engine will abort
+ * installation.
+ */
+TInt CTrkSWInstUIHandler::DisplayLanguageL(const CAppInfo& aAppInfo,
+ const RArray<TLanguage>& aLanguages)
+{
+ TInt languageCode = iDispLanguage;
+ TInt index;
+
+ // Return the index value in the array which matches the language code
+ // obtained from the ini file.
+ for (index=0; index<aLanguages.Count(); index++)
+ {
+ if (aLanguages[index] == (TLanguage)languageCode)
+ {
+ return index;
+ }
+ }
+ // Language Code did not match - ignore this error for now
+ // when doing silent install, we can ignore the mulilanguage support
+ iErrCode = KErrNothing;
+
+ return languageCode;
+}
+
+/**
+ * Requests the drive to install the package on, from the UI.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aSize Total size of the files that will be installed on the configurable drive.
+ * @param aDriveLetters Array of drive letters on which the package can be installed.
+ * @param aDriveSpaces Array of space free (in bytes) on each of the drives in the aDriveLetters array.
+ *
+ * @return An index in the drive array. If the index is out of range the engine will abort
+ * the installation.
+ */
+TInt CTrkSWInstUIHandler::DisplayDriveL(const CAppInfo& aAppInfo,
+ TInt64 aSize,
+ const RArray<TChar>& aDriveLetters,
+ const RArray<TInt64>& aDriveSpaces)
+{
+ TInt index;
+ TInt driveIndex=0;
+ for (index=0; index < aDriveLetters.Count(); index++)
+ {
+ if (aDriveLetters[index] == iDispDrive)
+ {
+ driveIndex = index;
+ break;
+ }
+ }
+
+ if (index == aDriveLetters.Count()) // Out of range error
+ {
+ iErrCode = KErrDrive;
+ driveIndex = index;
+ }
+ return driveIndex;
+}
+
+/**
+ * Displays a dialog asking whether we want to upgrade an application present on the device.
+ *
+ * @param aAppInfo Information about the application being installed.
+ * @param aExistingAppInfo Information about the existing application.
+ *
+ * @return ETrue if the user pressed the Yes button,
+ * EFalse if the user pressed the No button.
+ */
+TBool CTrkSWInstUIHandler::DisplayUpgradeL(const CAppInfo& aAppInfo,
+ const CAppInfo& aExistingAppInfo)
+{
+ return iDispUpgrade;
+}
+
+/**
+ * Displays a dialog box asking which options the user wishes to install.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aOptions An array of option names.
+ * @param aSelections An array of booleans, corresponding to the aOptions array.
+ *
+ * @return ETrue on success, EFalse on error.
+ */
+TBool CTrkSWInstUIHandler::DisplayOptionsL(const CAppInfo& aAppInfo,
+ const RPointerArray<TDesC>& aOptions,
+ RArray<TBool>& aSelections)
+{
+
+ TInt index;
+ TBool setFlag = EFalse;
+
+ for (index=0; index<aOptions.Count();index++)
+ {
+ if (index == iDispOptions)
+ {
+ aSelections[index] = ETrue;
+ setFlag = ETrue;
+ }
+ else
+ {
+ aSelections[index] = EFalse;
+ }
+ }
+
+ if (setFlag == (TBool)ETrue)
+ {
+ return ETrue;
+ }
+ else
+ {
+ iErrCode = KErrOptions;
+ return EFalse;
+ }
+}
+
+/**
+ * Informs the UI of events occurring during installation.
+ *
+ * @param aEvent The event which has occurred.
+ * @param aValue The value associated with the event if applicable.
+ * @param aDes A descriptor associated with the event if applicable.
+ * @return TBool Always returns ETrue to indicate the Install Event is always handled
+ */
+TBool CTrkSWInstUIHandler::HandleInstallEventL(const CAppInfo& aAppInfo,
+ TInstallEvent aEvent,
+ TInt aValue,
+ const TDesC& aDes)
+{
+ switch (aEvent)
+ {
+ case EEventSetProgressBarFinalValue:
+ break;
+ case EEventUpdateProgressBar:
+ break;
+ case EEventAbortedInstall:
+ iErrCode = KErrAbortInstall;
+ break;
+ case EEventCompletedInstall:
+ break;
+ case EEventCompletedUnInstall:
+ break;
+ case EEventAbortedUnInstall:
+ iErrCode = KErrAbortUnInstall;
+ break;
+ case EEventCompletedNoMessage:
+ break;
+ case EEventLeave:
+ iErrCode = KErrLeave;
+ break;
+ case EEventOcspCheckEnd:
+ break;
+ default:
+ break;
+ }
+ return ETrue;
+}
+
+/**
+ * Informs the UI of cancellable events occurring during installation.
+ *
+ * @param aEvent The event which has occurred.
+ * @param aCancelHandler This mix-in is used to inform Software Install that the user has
+ * pressed the cancel button on the dialog.
+ * @param aValue The value associated with the event if applicable.
+ * @param aDes A descriptor associated with the event if applicable.
+ */
+void CTrkSWInstUIHandler::HandleCancellableInstallEventL(const CAppInfo& aAppInfo,
+ TInstallCancellableEvent aEvent,
+ MCancelHandler& aCancelHandler,
+ TInt aValue,
+ const TDesC& aDes)
+{
+ switch (aEvent)
+ {
+ case EEventRemovingFiles:
+ break;
+ case EEventShuttingDownApps:
+ break;
+ case EEventCopyingFiles:
+ break;
+ case EEventOcspCheckStart:
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * Displays a dialog indicating that the package is unsigned, or that signature validation has failed.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aSigValidationResult The result of signature validation.
+ * @param aPkixResult Results of a validation of the PKIX certificate chain.
+ * Note that is can be NULL, in this case no validation results are available.
+ * @param aCertificates An array containing information about the certificates in the chain.
+ * @param aInstallAnyway ETrue if installation is allowed to continue.
+ *
+ * @return ETrue to continue the installation, EFalse to abort.
+ */
+TBool CTrkSWInstUIHandler::DisplaySecurityWarningL(const CAppInfo& aAppInfo,
+ Swi::TSignatureValidationResult aSigValidationResult,
+ RPointerArray<CPKIXValidationResultBase>& aPkixResults,
+ RPointerArray<CCertificateInfo>& aCertificates,
+ TBool aInstallAnyway)
+{
+ return ETrue;
+}
+
+/**
+ * Displays a dialog indicating that there was an error carrying out online certificate status checking.
+ *
+ * @param aMessage The error which occurred during online certificate status checking
+ * @param aOutcome The outcome of the OCSP check. If no outcome can be given, it will be NULL.
+ * @param aWarningOnly ETrue if the installation is allowed to continue after a warning, EFalse otherwise.
+ *
+ * @return ETrue on success, EFalse on error.
+ */
+TBool CTrkSWInstUIHandler::DisplayOcspResultL(const CAppInfo& aAppInfo,
+ TRevocationDialogMessage aMessage,
+ RPointerArray<TOCSPOutcome>& aOutcomes,
+ RPointerArray<CCertificateInfo>& aCertificates,
+ TBool aWarningOnly)
+{
+ return aWarningOnly;
+}
+
+/**
+ * Used to inform the user the installation they are attempting is trying to overwrite
+ * a file that does not belong to it. Following this message installation is aborted.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aInstalledAppInfo Information about the application that owns the file in question.
+ * @param aFileName The filename of the file in question
+ */
+void CTrkSWInstUIHandler::DisplayCannotOverwriteFileL(const CAppInfo& /*aAppInfo*/,
+ const CAppInfo& /*aInstalledAppInfo*/,
+ const TDesC& /*aFileName*/)
+{
+ iErrCode = KErrCannotOverwriteFile;
+}
+
+/**
+ * Displays a dialog at the start of the uninstallation with information about the application
+ * to be uninstalled. The user may cancel the uninstallation at this stage. This dialog must
+ * be shown in TrustedUI mode.
+ *
+ * @param aAppInfo Information about the application.
+ *
+ * @note Trusted UI
+ *
+ * @return ETrue to continue the uninstallation, or EFalse to abort the uninstallation.
+ */
+TBool CTrkSWInstUIHandler::DisplayUninstallL(const CAppInfo& aAppInfo)
+{
+ return iDispUnInstall;
+}
+
+/**
+ * Displays a dialog containing text. This dialog has only a Continue button if aOption is
+ * EInstFileTextOptionContinue, or Yes and No buttons otherwise.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aOption The type of dialog box to display.
+ * @param aText The text to display
+ *
+ * @return ETrue if the user wants to go forward, EFalse otherwise.
+ */
+TBool CTrkSWInstUIHandler::DisplayTextL(const CAppInfo& aAppInfo,
+ TFileTextOption aOption,
+ const TDesC& aText)
+{
+ return iDispTextDialog;
+}
+
+/**
+ * Displays a dialog showing an error message.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aType The error message to display.
+ * @param aParam An error specific parameter.
+ */
+void CTrkSWInstUIHandler::DisplayErrorL(const CAppInfo& aAppInfo,
+ TErrorDialog aType,
+ const TDesC& aParam)
+{
+ iErrCode = KErrError;
+}
+
+/**
+ * Displays a dialog indicating that a component which is being uninstalled is a dependency
+ * of another component installed.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aComponents An array of components which depend on components of the application
+ *
+ * @return ETrue to continue the uninstallation, EFalse to abort.
+ */
+TBool CTrkSWInstUIHandler::DisplayDependencyBreakL(const CAppInfo& aAppInfo,
+ const RPointerArray<TDesC>& aComponents)
+{
+ return iDispDependencyBreak;
+}
+
+/**
+ * Informs user that the applications are in use during an uninstallation.
+ * Return ETrue if the user wishes to continue the removal process and
+ * close the applications anyway
+ *
+ * @param aAppNames An array containing the name of the application in use.
+ *
+ * @return ETrue if the user wishes to continue with removal.
+ */
+TBool CTrkSWInstUIHandler::DisplayApplicationsInUseL(const CAppInfo& aAppInfo,
+ const RPointerArray<TDesC>& aAppNames)
+{
+ return iDispApplicationInUse;
+}
+
+/**
+ * Displays a generic question dialog with a Yes/No answer.
+ *
+ * @param aAppInfo Information about the application.
+ * @param aQuestion The question to ask.
+ * @param aDes A descriptor associated with the question if applicable.
+ *
+ * @return ETrue if the user pressed the Yes button,
+ * EFalse if the user pressed the No button.
+ */
+TBool CTrkSWInstUIHandler::DisplayQuestionL(const CAppInfo& aAppInfo,
+ TQuestionDialog aQuestion, const TDesC& aDes)
+{
+
+ switch(aQuestion)
+ {
+ case EQuestionIncompatible:
+ break;
+ default:
+ break;
+ }
+
+ return iDispQuestion;
+}
+
+/**
+ * Used to inform the user of a missing dependency needed to install the
+ * current package. It is up to the UI implementors and/or the user whether
+ * or not this warning can be overridden.
+ *
+ * @param aAppInfo Info about the current application.
+ * @param aDependencyName Name of the missing dependency.
+ * @param aWantedVersionFrom Starting suitable version number of the mising
+ * dependency. Can be all zeros, meaning it is
+ * unknown.
+ * @param aWantedVersionFrom Ending suitable version number of the mising
+ * dependency. Can be all zeros, meaning it is
+ * unknown.
+ * @param aInstalledVersion The installed (unsuitable) version of the
+ * missing dependency. Can be all zeros, meaning
+ * the missing dependency is not installed.
+ *
+ * @return \e ETrue to continue installation, \e EFalse to abort.
+ */
+TBool CTrkSWInstUIHandler::DisplayMissingDependencyL(const CAppInfo& aAppInfo,
+ const TDesC& aDependencyName,TVersion aWantedVersionFrom,
+ TVersion aWantedVersionTo,TVersion aInstalledVersion)
+{
+ return ETrue;
+}
+