--- a/appinstaller/AppinstUi/Plugin/SisxUI/Src/SisxUIHandler.cpp Thu Oct 14 14:11:30 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1848 +0,0 @@
-/*
-* Copyright (c) 2002-2009 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 CSisxUIHandler
-* class member functions.
-*
-*/
-
-
-// INCLUDE FILES
-#include <StringLoader.h>
-#include <barsread.h>
-#include <eikenv.h>
-#include <aknlistquerydialog.h>
-#include <aknmessagequerydialog.h>
-#include <aknnotewrappers.h>
-#include <SisxUIData.rsg>
-#include <SWInstCommonUI.rsg>
-#include <SWInstDefs.h>
-#include <featmgr.h>
-//#include <csxhelp/am.hlp.hrh>
-#include <swi/sisinstallerrors.h>
-#include <AknUtils.h>
-#include <eikfrlb.h> //for the marquee effect
-#include <eikfrlbd.h> //for the marquee effect
-
-#include "SisxUIHandler.h"
-#include "SisxUICertificateInfo.h"
-#include "SisxUIAppInfo.h"
-#include "SisxUISelectionCache.h"
-#include "SisxUIResult.h"
-#include "SisxUILangName.h" // CLangName
-#include "SisxUICleanupUtils.h" // CleanupResetAndDestroyPushL
-#include "CUIUtils.h"
-#include "SWInstDebug.h"
-
-using namespace SwiUI;
-
-_LIT( KDetailedError,"%S (%d)" );
-_LIT( KSwiTempFile,"c:\\temp\\swierrors.txt" );
-_LIT( KNextLine, "\n" );
-_LIT( KLeftParenthes, "(" );
-//directional marks needed for Arabic language
-_LIT( KLRE, "\x202A" );
-_LIT( KPDF, "\x202C" );
-
-const TInt KSpaceForErrorCode = 12; // space for " (-12345678)"
-
-// ============================ LOCAL FUNCTIONS ================================
-
-TBool HasLangId( const TLanguage* aId, const CLangName& aLang )
- {
- return( *aId == aLang.Id() );
- }
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::CSisxUIHandler
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CSisxUIHandler::CSisxUIHandler( TInstallMode aMode, MSisxUICancelObserver* aCancelObserver )
- : iMode( aMode ),
- iCancelObserver( aCancelObserver ),
- iAllowUntrusted( ETrue )
- {
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ConstructL()
- {
- iCommonDialogs = CommonUI::CCUIDialogs::NewL();
- iCache = CSisxUISelectionCache::NewL();
- if ( iMode == EModeInstall )
- {
- iCommonDialogs->ShowWaitDialogL( R_SISXUI_PREPARING, this, R_AVKON_SOFTKEYS_EMPTY );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CSisxUIHandler* CSisxUIHandler::NewL( TInstallMode aMode, MSisxUICancelObserver* aCancelObserver )
- {
- CSisxUIHandler* self = new( ELeave ) CSisxUIHandler( aMode, aCancelObserver );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// Destructor
-CSisxUIHandler::~CSisxUIHandler()
- {
- // If wait dialog is showing close it.
- if ( iShowingWaitDialog )
- {
- if ( iCommonDialogs )
- {
- TRAP_IGNORE( iCommonDialogs->CloseWaitDialogL() );
- }
- }
- delete iCommonDialogs;
- iCertificateArray.ResetAndDestroy();
- delete iCache;
- iPackages.ResetAndDestroy();
- iDrmFile.Close();
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayInstallL
-// 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.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayInstallL(
-#ifdef RD_COMBINE_INSTALLATION_QUERIES
- const Swi::CAppInfo& /*aAppInfo*/,
-#else
- const Swi::CAppInfo& aAppInfo,
-#endif //RD_COMBINE_INSTALLATION_QUERIES
- const CApaMaskedBitmap* /*aLogo*/,
- const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
- {
-#ifdef RD_COMBINE_INSTALLATION_QUERIES //with new dialog sequence
-
- TBool result( ETrue );
- // Mark the integrity as done
- iIntegrityCheckDone = ETrue;
- iShowingDialog = EFalse;
-
-#else // show using old dialog sequence
- iShowingDialog = ETrue;
-
- // Close the preparing wait dialog
- iCommonDialogs->CloseWaitDialogL();
-
- TBool result( EFalse );
-
- HBufC* prompt = StringLoader::LoadLC( R_SISXUI_INSTALL_PROMPT, aAppInfo.AppName() );
- if ( iCommonDialogs->ShowConfirmationQueryL( *prompt, R_AVKON_SOFTKEYS_YES_NO__YES ) )
- {
- result = ETrue;
- }
- else
- {
- iResult = TSisxUIResult( EUiResultCancelled );
- // Make sure no notes are shown after this
- iShownFinalNote = ETrue;
- }
-
- CleanupStack::PopAndDestroy( prompt );
-
- // Mark the integrity as done
- iIntegrityCheckDone = ETrue;
-
- iShowingDialog = EFalse;
-#endif //RD_COMBINE_INSTALLATION_QUERIES
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayGrantCapabilitiesL
-// displays a dialog requesting that the user grants these capabilities to the
-// SISX package being installed. This dialog must be shown in TrustedUI mode.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayGrantCapabilitiesL( const Swi::CAppInfo& /*aAppInfo*/,
- const TCapabilitySet& aCapabilitySet )
- {
- iShowingDialog = ETrue;
-
- TBool result( ETrue );
-
- // Add the text heading
- HBufC* messageString = StringLoader::LoadLC( R_SISXUI_CAPAB_HEADING );
-
- if ( aCapabilitySet.HasCapability( ECapabilityLocalServices ) )
- {
- AddCapabilityL( messageString, R_SISXUI_CAPAB_LOCAL );
- }
-
- if ( aCapabilitySet.HasCapability( ECapabilityReadUserData ) )
- {
- AddCapabilityL( messageString, R_SISXUI_CAPAB_READ_USER );
- }
-
- if ( aCapabilitySet.HasCapability( ECapabilityWriteUserData ) )
- {
- AddCapabilityL( messageString, R_SISXUI_CAPAB_WRITE_USER );
- }
-
- if ( aCapabilitySet.HasCapability( ECapabilityUserEnvironment ) )
- {
- AddCapabilityL( messageString, R_SISXUI_CAPAB_USERENV );
- }
-
- if ( aCapabilitySet.HasCapability( ECapabilityNetworkServices ) )
- {
- AddCapabilityL( messageString, R_SISXUI_CAPAB_NETWORK );
- }
-
- if ( aCapabilitySet.HasCapability( ECapabilityLocation ) )
- {
- AddCapabilityL( messageString, R_SISXUI_CAPAB_LOCATION );
- }
-
- HBufC* linkText = NULL;
- if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
- {
- linkText = StringLoader::LoadLC( R_SISXUI_CAPAB_MORE_INFO );
- }
- else
- {
- linkText = KNullDesC().AllocLC();
- }
-
- HBufC* finalMessage = HBufC::NewLC( messageString->Length() + linkText->Length() + 1);
- TPtr msgPtr( finalMessage->Des() );
-
- msgPtr += *messageString;
- msgPtr += KNextLine;
- msgPtr += *linkText;
-
- // Show the dialog
- CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *finalMessage );
- dlg->PrepareLC( R_SISXUI_CAPAB_DIALOG );
- if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
- {
- dlg->SetLinkTextL( *linkText );
- TCallBack callback( ShowCapabilitiesHelp, this );
- dlg->SetLink( callback );
- }
-
- if ( !dlg->RunLD() )
- {
- // User cancelled
- iResult = TSisxUIResult( EUiResultCancelled );
- result = EFalse;
- }
-
- CleanupStack::PopAndDestroy( 3, messageString ); // finalMessage, linkText, messageString
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayLanguageL
-// requests preferred language and dialect information from the UI.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CSisxUIHandler::DisplayLanguageL( const Swi::CAppInfo& /*aAppInfo*/,
- const RArray<TLanguage>& aLanguages )
- {
- TInt languageIndex( 0 );
- TInt index( 0 );
- TLanguage phoneLanguage( User::Language() );
-
- // If phones default language is available in the file, do not query the user
- for ( index = 0; index < aLanguages.Count(); index++ )
- {
- // Check if this matches the phone language
- if( aLanguages[ index ] == phoneLanguage )
- {
- return index;
- }
-
- // Check if user has already selected this language during installation
- if( iCache->LanguageCached() && aLanguages[index] == iCache->Language() )
- {
- // Do not query user, we have a cached language
- return index;
- }
- }
-
- // If there is only one language in the list, do not query the user
- if( aLanguages.Count() == 1 )
- {
- return 0;
- }
-
- iShowingDialog = ETrue;
-
- // Prepare for showing the language selection dialog
- CDesCArray *itemArray = new( ELeave ) CDesCArrayFlat(4);
- CleanupStack::PushL( itemArray );
-
- // construct the array of available languages
- TResourceReader reader;
- CEikonEnv::Static()->CreateResourceReaderLC( reader, R_SISXUI_LANGUAGES_ARRAY );
- RPointerArray<CLangName> langNameArray;
- CleanupResetAndDestroyPushL( langNameArray );
- TInt count = reader.ReadInt16();
- while( --count >= 0 )
- {
- CLangName* langName = CLangName::NewL( reader );
- langNameArray.AppendL( langName );
- }
-
- for ( index = 0; index <= aLanguages.Count() - 1; index++ )
- {
- TLanguage language = aLanguages[ index ];
- TInt nameIndex = langNameArray.Find( language, HasLangId );
- if ( nameIndex == KErrNotFound )
- {
- nameIndex = TLanguage( 0 ); // produces qtn_swins_lqi_unknow
- }
- itemArray->AppendL( langNameArray[ nameIndex ]->Name() );
- }
-
- // show list query
- CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &languageIndex );
- dlg->PrepareLC( R_SISXUI_LANGUAGE_QUERY );
- dlg->SetItemTextArray( itemArray );
- dlg->SetOwnershipType( ELbmDoesNotOwnItemArray );
-
- if( languageIndex != 0 )
- {
- dlg->ListBox()->SetCurrentItemIndex( languageIndex );
- }
-
- TInt queryOk = dlg->RunLD();
-
- CleanupStack::PopAndDestroy( 3, itemArray ); // langNameArray, reader, itemArray
-
- if ( !queryOk )
- {
- languageIndex = -1;
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- // Cache only if no previous cache is found
- if( languageIndex != -1 && !iCache->LanguageCached() )
- {
- iCache->SetLanguage( aLanguages[languageIndex] );
- }
-
- iShowingDialog = EFalse;
- return languageIndex;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayDriveL
-// Requests the drive to install the package on, from the UI.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CSisxUIHandler::DisplayDriveL( const Swi::CAppInfo& /*aAppInfo*/,
- TInt64 aSize,
- const RArray<TChar>& aDriveLetters,
- const RArray<TInt64>& aDriveSpaces )
- {
- if ( aDriveLetters.Count() <= 0 )
- {
- iResult = TSisxUIResult( EUiResultInsufficientMemory );
- return -1;
- }
-
- iShowingDialog = ETrue;
-
- RArray<TDriveUnit> driveUnits;
- CleanupClosePushL( driveUnits );
-
- TInt index( 0 );
-
- // Convert drive letters to TDriveUnits
- for ( index = 0; index < aDriveLetters.Count(); index++ )
- {
- TBuf<2> tmp;
- tmp.Append( aDriveLetters[index] );
- driveUnits.Append( TDriveUnit( tmp ) );
- }
-
- TInt selection( -1 );
- TInt dlgResult( KErrNone );
-
- // See if the selection has been cached
- if ( iCache->DriveCached() )
- {
- for ( index = 0; index < aDriveLetters.Count(); index++ )
- {
- if ( (TInt)iCache->Drive() == (TInt)driveUnits[index] )
- {
- // Make sure, we have enough size in the cached drive
- if ( aSize < aDriveSpaces[index] )
- {
- selection = index;
- break;
- }
- else
- {
- // Cached drive has insufficient memory, ask user again
- dlgResult = iCommonDialogs->ShowDriveSelectionDialogL( aSize,
- driveUnits,
- aDriveSpaces,
- selection );
-
- break;
- }
- }
- }
- }
- // Not cached
- else
- {
- dlgResult = iCommonDialogs->ShowDriveSelectionDialogL( aSize,
- driveUnits,
- aDriveSpaces,
- selection );
- }
-
- if ( dlgResult == KErrNoMemory )
- {
- // No memory
- iResult = TSisxUIResult( EUiResultInsufficientMemory );
- selection = -1;
- }
-
- else if ( dlgResult == KErrCancel )
- {
- // User cancelled
- iResult = TSisxUIResult( EUiResultCancelled );
- selection = -1;
- }
-
- // If the result is valid, put it to the cache
- else if ( selection >= 0 )
- {
- iCache->SetDrive( driveUnits[selection] );
- }
-
- CleanupStack::PopAndDestroy(); // driveUnits
-
- iShowingDialog = EFalse;
- return selection;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayUpgradeL
-// Displays a dialog asking whether we want to upgrade an application present
-// on the device.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayUpgradeL( const Swi::CAppInfo& aAppInfo,
- const Swi::CAppInfo& aExistingAppInfo )
- {
- iShowingDialog = ETrue;
-
- TBool result( EFalse );
-
- TVersion newVersion = aAppInfo.AppVersion();
- TVersion oldVersion = aExistingAppInfo.AppVersion();
-
- // Display "Replace?" confirmation query only if the new version is older
- // than the currently installed old version (i.e. when downgrading). See
- // also User::QueryVersionSupported() although it has bit different meaning.
- TBool downgrading = ( newVersion.iMajor < oldVersion.iMajor ||
- ( newVersion.iMajor == oldVersion.iMajor && newVersion.iMinor < oldVersion.iMinor ) );
- if( !downgrading )
- {
- iShowingDialog = EFalse;
- return ETrue;
- }
-
- // Create strings from the version numbers
- //
- HBufC* tempBuf =
- CommonUI::CUIUtils::ConstructVersionStringLC( oldVersion.iMajor,
- oldVersion.iMinor,
- oldVersion.iBuild );
-
- HBufC* oldVersionBuf = HBufC::NewLC( KLRE().Length() + tempBuf->Length() + KPDF().Length() );
- TInt position = tempBuf->Find( KLeftParenthes() );
- if ( position >= 0 )
- {
- oldVersionBuf->Des() = tempBuf->Mid( 0, position );
- oldVersionBuf->Des() += KLRE();
- oldVersionBuf->Des() += tempBuf->Mid( position, tempBuf->Length() - position );
- oldVersionBuf->Des() += KPDF();
- }
- else
- {
- oldVersionBuf->Des() = *tempBuf;
- }
- CleanupStack::Pop( oldVersionBuf );
- CleanupStack::PopAndDestroy( tempBuf );
- CleanupStack::PushL( oldVersionBuf );
- tempBuf = NULL;
-
- tempBuf = CommonUI::CUIUtils::ConstructVersionStringLC( newVersion.iMajor,
- newVersion.iMinor,
- newVersion.iBuild );
-
- HBufC* newVersionBuf = HBufC::NewLC( KLRE().Length() + tempBuf->Length() + KPDF().Length() );
-
- position = tempBuf->Find( KLeftParenthes() );
- if ( position >= 0 )
- {
- newVersionBuf->Des() = tempBuf->Mid( 0, position );
- newVersionBuf->Des() += KLRE();
- newVersionBuf->Des() += tempBuf->Mid( position, tempBuf->Length() - position );
- newVersionBuf->Des() += KPDF();
- }
- else
- {
- newVersionBuf->Des() = *tempBuf;
- }
- CleanupStack::Pop( newVersionBuf );
- CleanupStack::PopAndDestroy( tempBuf );
- CleanupStack::PushL( newVersionBuf );
-
- CDesCArray* stringArray = new ( ELeave ) CDesCArrayFlat( 4 );
- CleanupStack::PushL( stringArray );
-
- stringArray->AppendL( aAppInfo.AppName() );
- stringArray->AppendL( *oldVersionBuf );
- stringArray->AppendL( *newVersionBuf );
-
- HBufC* upgradeString =
- StringLoader::LoadLC( R_SISXUI_UPGRADE_PROMPT, *stringArray );
- TPtr ptr = upgradeString->Des();
- AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
-
-
- if ( iCommonDialogs->ShowConfirmationQueryL( *upgradeString ) )
- {
- result = ETrue;
- }
- else
- {
- // User selected cancel.
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- CleanupStack::PopAndDestroy( 4 ); // upgradeString, stringArray, newVersionBuf, oldVersionBuf
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayOptionsL
-// Displays a dialog box asking which options the user wishes to install.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayOptionsL( const Swi::CAppInfo& /*aAppInfo*/,
- const RPointerArray<TDesC>& aOptions,
- RArray<TBool>& aSelections )
- {
- iShowingDialog = ETrue;
-
- TBool response;
- TInt index = 0;
-
- if ( aOptions.Count() < 1 )
- {
- User::Leave( KErrArgument );
- }
-
- CDesCArray* itemArray = new ( ELeave ) CDesCArrayFlat( 4 );
- CleanupStack::PushL( itemArray );
-
- // Construct text array for the dialog
- for( index = 0; index < aOptions.Count(); index++ )
- {
- TPtrC itemLabel( *( aOptions[index] ) ) ;
- HBufC *itemLine = HBufC::NewLC( itemLabel.Length() + 2 ); // Add 2 for "1\t"
- TPtr itemPtr = itemLine->Des();
- itemPtr.Copy( _L("1\t") );
- itemPtr.Append( itemLabel );
-
- itemArray->AppendL( itemPtr );
-
- CleanupStack::PopAndDestroy( itemLine );
- }
-
- // Create and selection index array for multiselection list
- CListBoxView::CSelectionIndexArray* selections =
- new ( ELeave ) CArrayFixFlat<TInt>( aSelections.Count() );
- CleanupStack::PushL( selections );
- // Set all selections marked by default.
- for ( index = 0; index < aSelections.Count(); index++ )
- {
- selections->AppendL( index );
- }
-
- // Create multiselection list query
- CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( selections );
-
- dlg->PrepareLC( R_SISXUI_OPTIONS_QUERY );
- dlg->SetItemTextArray( itemArray );
- // Set all selections marked by default.
- dlg->ListBox()->SetSelectionIndexesL( selections );
-
- dlg->SetOwnershipType( ELbmDoesNotOwnItemArray );
- ((CEikFormattedCellListBox*)(dlg->ListBox()))->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue );
- TInt queryOk = dlg->RunLD();
-
- if( !queryOk )
- {
- response = EFalse;
- iResult = TSisxUIResult( EUiResultCancelled );
- }
- else
- {
- response = ETrue;
-
- // First set all items in aSelections to EFalse
- for( index = 0; index < aSelections.Count(); index++ )
- {
- aSelections[index] = EFalse;
- }
- // Then copy selections to aSelections
- for( index = 0; index < selections->Count(); index++ )
- {
- TInt selectedItem = selections->At( index );
- aSelections[selectedItem] = ETrue;
- }
-
- }
-
- CleanupStack::PopAndDestroy( 2 ); // itemArray, selections
-
- iShowingDialog = EFalse;
- return response;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::HandleInstallEventL
-// Informs the UI of events occurring during installation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::HandleInstallEventL( const Swi::CAppInfo& aAppInfo,
- Swi::TInstallEvent aEvent,
- TInt aValue,
- const TDesC& /*aDesC*/ )
- {
- TBool result( ETrue );
- iShowingDialog = ETrue;
-
- switch ( aEvent )
- {
- case Swi::EEventSetProgressBarFinalValue:
- if ( iMode == EModeInstall )
- {
- // Show installing progress dialog.
- iCommonDialogs->ShowProgressDialogL( R_SISXUI_INSTALLING, this );
-
- // Here we need to update the name and vendor of the main package.
- // They might have changed when a language has been selected.
- if ( iPackages.Count() > 0 )
- {
- iPackages[0]->SetNameL( aAppInfo.AppName() );
- iPackages[0]->SetVendorL( aAppInfo.AppVendor() );
- }
- }
- else
- {
- // Show uninstalling progress dialog.
- iCommonDialogs->ShowProgressDialogL( R_SISXUI_UNINSTALLING, this, R_AVKON_SOFTKEYS_EMPTY );
- }
- iCommonDialogs->SetProgressDialogFinalValueL( aValue );
-
- break;
-
- case Swi::EEventUpdateProgressBar:
- iCommonDialogs->UpdateProgressDialogValueL( aValue );
- break;
-
- case Swi::EEventOcspCheckEnd:
- iCommonDialogs->CloseWaitDialogL();
- iOcspInProgress = EFalse;
- break;
-
- case Swi::EEventDevCert:
- {
- HBufC* messageString = StringLoader::LoadLC( R_SISXUI_DEVCERT_WARNING );
- CAknMessageQueryDialog* dlg =
- CAknMessageQueryDialog::NewL( *messageString, CAknQueryDialog::EWarningTone );
- if ( !dlg->ExecuteLD( R_SISXUI_DEVCERT_DIALOG ) )
- {
- // User cancelled
- iResult = TSisxUIResult( EUiResultCancelled );
- result = EFalse;
- }
- CleanupStack::PopAndDestroy( messageString );
- }
- break;
-
- // Ignored
- case Swi::EEventCompletedUnInstall:
- case Swi::EEventCompletedInstall:
- case Swi::EEventAbortedInstall:
- case Swi::EEventAbortedUnInstall:
- case Swi::EEventLeave:
- default:
- break;
-
- }
-
- // See if user has requested an cancel and our state is cancellable
- if ( result && iCancelRequested &&
- ( aEvent == Swi::EEventSetProgressBarFinalValue ||
- aEvent == Swi::EEventUpdateProgressBar ||
- aEvent == Swi::EEventOcspCheckEnd ) )
- {
- iCancelRequested = EFalse;
- // Show the confirmation prompt
- if ( iCommonDialogs->ShowConfirmationQueryL( R_SWCOMMON_CANCEL_INSTALLATION,
- R_AVKON_SOFTKEYS_YES_NO__YES ) )
- {
- // Ok to cancel
- iResult = TSisxUIResult( EUiResultCancelled );
- iCancelObserver->UserCancelL( ETrue );
- }
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::HandleCancellableInstallEventL
-// Informs the UI of cancellable events occurring during installation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::HandleCancellableInstallEventL( const Swi::CAppInfo& /*aAppInfo*/,
- Swi::TInstallCancellableEvent aEvent,
- Swi::MCancelHandler& /*aCancelHandler*/,
- TInt /*aValue*/,
- const TDesC& /*aDes*/ )
- {
- switch ( aEvent )
- {
- case Swi::EEventOcspCheckStart:
- {
- // Show ocsp wait dialog
- iCommonDialogs->ShowWaitDialogL( R_SISXUI_DOING_OCSP, this );
- iOcspInProgress = ETrue;
- break;
- }
-
- // These are ignored
- case Swi::EEventRemovingFiles:
- case Swi::EEventCopyingFiles:
- case Swi::EEventShuttingDownApps:
- default:
- break;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplaySecurityWarningL
-// Displays a dialog indicating that the package is unsigned, or that signature
-// validation has failed.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplaySecurityWarningL( const Swi::CAppInfo& aAppInfo,
- Swi::TSignatureValidationResult aSigValidationResult,
- RPointerArray<CPKIXValidationResultBase>& aPkixResults,
- RPointerArray<Swi::CCertificateInfo>& aCertificates,
- TBool aInstallAnyway )
- {
-#ifdef RD_COMBINE_INSTALLATION_QUERIES //with new dialog sequence
- // Close the preparing wait dialog
- iCommonDialogs->CloseWaitDialogL();
-#endif //RD_COMBINE_INSTALLATION_QUERIES
- iShowingDialog = ETrue;
-
- FLOG_1( _L("CSisxUIHandler::DisplaySecurityWarningL: %d"), aSigValidationResult );
- TBool result( ETrue );
-
- switch ( aSigValidationResult )
- {
- case Swi::EValidationSucceeded:
- {
- CSisxUIAppInfo* appInfo = CSisxUIAppInfo::NewL( aAppInfo, ETrue );
- iPackages.Append( appInfo );
-
- for ( TInt index = 0; index < aCertificates.Count(); index++ )
- {
- TValidationStatus status = aPkixResults[index]->Error();
- if ( status.iReason == EValidatedOK )
- {
- CSisxUICertificateInfo* certInfo = CSisxUICertificateInfo::NewL( *aCertificates[index] );
- CleanupStack::PushL( certInfo );
- User::LeaveIfError( iCertificateArray.Append( certInfo ));
- CleanupStack::Pop( certInfo );
- }
- }
-
- appInfo->PrepareIteratorL( aAppInfo );
-#ifdef RD_COMBINE_INSTALLATION_QUERIES //with new dialog sequence
- CommonUI::CCUIDetailsDialog* details =
- CommonUI::CCUIDetailsDialog::NewL( R_AVKON_SOFTKEYS_OK_CANCEL__OK, ETrue );
-#else //with old dialog sequence
- CommonUI::CCUIDetailsDialog* details =
- CommonUI::CCUIDetailsDialog::NewL( R_SWCOMMON_SOFTKEYS_CONTINUE_CANCEL__CONTINUE, ETrue );
-#endif //RD_COMBINE_INSTALLATION_QUERIES
- if ( !iIsDrmFileSet )
- {
- result = details->ExecuteLD( *appInfo, iCertificateArray );
- }
- else
- {
- result = details->ExecuteLD( *appInfo, iCertificateArray, iDrmFile );
- }
- appInfo->FreeIterator();
-
- if ( !result )
- {
- // User cancelled
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- iCertificateArray.ResetAndDestroy();
-
- break;
- }
-
- // Non fatals
- case Swi::ESignatureSelfSigned:
- case Swi::ESignatureNotPresent:
- case Swi::ENoCertificate:
- case Swi::ECertificateValidationError:
- case Swi::ENoCodeSigningExtension:
- case Swi::ENoSupportedPolicyExtension:
- // Fatals with aInstallAnyway set as EFalse
- case Swi::ESignatureCouldNotBeValidated:
- case Swi::EMandatorySignatureMissing:
- {
- // Check if we are allowed to continue installation
- if ( aInstallAnyway && iAllowUntrusted )
- {
-#ifdef RD_COMBINE_INSTALLATION_QUERIES //with new dialog sequence
-
- CSisxUIAppInfo* appInfo = CSisxUIAppInfo::NewL( aAppInfo, EFalse );
- iPackages.Append( appInfo );
- appInfo->PrepareIteratorL( aAppInfo );
- CommonUI::CCUIDetailsDialog* details =
- CommonUI::CCUIDetailsDialog::NewL( R_AVKON_SOFTKEYS_OK_CANCEL__OK, ETrue );
- if ( !iIsDrmFileSet )
- {
- result = details->ExecuteLD( *appInfo );
- }
- else
- {
- result = details->ExecuteLD( *appInfo, iDrmFile );
- }
- appInfo->FreeIterator();
- if ( result )
- {
- result = iCommonDialogs->ShowSecurityWarningDialogL();
- }
-
-#else //with old dialog sequence
-
- result = iCommonDialogs->ShowSecurityWarningDialogL();
-
- if ( result )
- {
- CSisxUIAppInfo* appInfo = CSisxUIAppInfo::NewL( aAppInfo, EFalse );
- iPackages.Append( appInfo );
- appInfo->PrepareIteratorL( aAppInfo );
- CommonUI::CCUIDetailsDialog* details =
- CommonUI::CCUIDetailsDialog::NewL( R_SWCOMMON_SOFTKEYS_CONTINUE_CANCEL__CONTINUE );
- if ( !iIsDrmFileSet )
- {
- result = details->ExecuteLD( *appInfo );
- }
- else
- {
- result = details->ExecuteLD( *appInfo, iDrmFile );
- }
- appInfo->FreeIterator();
- }
-
-#endif //RD_COMBINE_INSTALLATION_QUERIES
-
- if ( !result )
- {
- // User cancelled
- iResult = TSisxUIResult( EUiResultCancelled );
- }
- }
- else
- {
- iResult = TSisxUIResult( aSigValidationResult );
- result = EFalse;
-
- // Fatal error, not allowed to continue
- // Try to see if the error was due to invalid date in the certificate
- for ( TInt index = 0; index < aPkixResults.Count(); index++ )
- {
- TValidationStatus status = aPkixResults[index]->Error();
- if ( status.iReason == EDateOutOfRange )
- {
- // Compare timestamps, use secure time if available
- TTime now;
- if( now.UniversalTimeSecure() != KErrNone )
- {
- // KErrNoSecureTime or other error
- now.UniversalTime();
- }
- TTime validFrom( aCertificates[index]->ValidFrom() );
-
- if ( now < validFrom )
- {
- // Certificate valid in future
- iResult = TSisxUIResult( EUiResultCertificateValidInFuture );
- }
- else
- {
- // Certificate expired
- iResult = TSisxUIResult( EUiResultCertificateExpired );
- }
-
- break;
- }
- }
- }
- break;
- }
-
- default:
- iResult = TSisxUIResult( aSigValidationResult );
- result = EFalse;
- break;
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayOcspResultL
-// Displays a dialog indicating that there was an error carrying out online
-// certificate status checking.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayOcspResultL( const Swi::CAppInfo& /*aAppInfo*/,
- Swi::TRevocationDialogMessage aMessage,
- RPointerArray<TOCSPOutcome>& /*aOutcomes*/,
- RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/,
- TBool aWarningOnly )
- {
- iShowingDialog = ETrue;
-
- FLOG_1( _L("CSisxUIHandler::DisplayOcspResultL: %d"), aMessage );
- TBool result( ETrue );
-
- // This will be treated as warning if engine says it's a warning and
- // ocsp setting is on. In case it's must, we abort the installation.
- if ( aWarningOnly && iOcspProc == ESisxUIOcspProcOn )
- {
- result = iCommonDialogs->ShowConfirmationQueryL( R_SISXUI_OCSP_SECURITY_WARNING );
- if ( !result )
- {
- // User cancelled the installation
- iResult = TSisxUIResult( EUiResultCancelled );
- }
- }
- // error or ocsp is set to must
- else
- {
- iResult = TSisxUIResult( aMessage );
- result = EFalse;
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayCannotOverwriteFileL
-// 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.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::DisplayCannotOverwriteFileL( const Swi::CAppInfo& /*aAppInfo*/,
- const Swi::CAppInfo& /*aInstalledAppInfo*/,
- const TDesC& aFileName )
- {
- FLOG_1( _L("CSisxUIHandler::DisplayCannotOverwriteFileL: %S"), &aFileName );
- iResult = TSisxUIResult( EUiResultUnableToOverwrite );
- // Keep compiler happy
- (void)aFileName;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayMissingDependencyL
-// 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.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayMissingDependencyL( const Swi::CAppInfo& /*aAppInfo*/,
- const TDesC& aDependencyName,
- TVersion aWantedVersionFrom,
- TVersion aWantedVersionTo,
- TVersion aInstalledVersion )
- {
- iShowingDialog = ETrue;
-
- TBool result( EFalse );
-
- // Dependency component not installed
- if ( ( aInstalledVersion.iMajor == 0 &&
- aInstalledVersion.iMinor == 0 &&
- aInstalledVersion.iBuild == 0 ) ||
- ( aWantedVersionFrom.iMajor == 0 &&
- aWantedVersionFrom.iMinor == 0 &&
- aWantedVersionFrom.iBuild == 0 ) )
- {
- HBufC* prompt =
- StringLoader::LoadLC( R_SISXUI_COMPONENT_MISSING, aDependencyName );
-
- if ( iCommonDialogs->ShowConfirmationQueryL( *prompt ) )
- {
- result = ETrue;
- }
-
- CleanupStack::PopAndDestroy( prompt );
- }
-
- else
- {
- CDesCArray* stringArray = new ( ELeave ) CDesCArrayFlat( 2 );
- CleanupStack::PushL( stringArray );
-
- stringArray->AppendL( aDependencyName );
- stringArray->AppendL( aWantedVersionFrom.Name() );
-
- HBufC* string = NULL;
-
- // Specific version is needed
- if ( aWantedVersionTo.iMajor == aWantedVersionFrom.iMajor &&
- aWantedVersionTo.iMinor == aWantedVersionFrom.iMinor &&
- aWantedVersionTo.iBuild == aWantedVersionFrom.iBuild )
- {
- string = StringLoader::LoadLC( R_SISXUI_REQUIRE_VER, *stringArray );
- }
-
- // Version or greater is needed
- else
- {
- string = StringLoader::LoadLC( R_SISXUI_REQUIRE_VER_OR_GREATER, *stringArray );
- }
-
- TPtr ptr = string->Des();
- AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
-
- ShowErrorL( *string );
-
- CleanupStack::PopAndDestroy( 2); // stringArray, string
- }
-
- if ( !result )
- {
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayUninstallL
-// 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.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayUninstallL( const Swi::CAppInfo& aAppInfo )
- {
- iShowingDialog = ETrue;
-
- TBool result( EFalse );
-
- CSisxUIAppInfo* appInfo = CSisxUIAppInfo::NewL( aAppInfo, EFalse );
- iPackages.Append( appInfo );
-
- HBufC* prompt = StringLoader::LoadLC( R_SISXUI_UNINSTALL_PROMPT, aAppInfo.AppName() );
- if ( iCommonDialogs->ShowConfirmationQueryL( *prompt, R_AVKON_SOFTKEYS_YES_NO__YES ) )
- {
- result = ETrue;
- }
- else
- {
- iResult = TSisxUIResult( EUiResultCancelled );
- // Make sure no notes are shown after this
- iShownFinalNote = ETrue;
- }
- CleanupStack::PopAndDestroy( prompt );
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayTextL
-// Displays a dialog containing text. This dialog has only a Continue button if
-// aOption is EInstFileTextOptionContinue, or Yes and No buttons otherwise.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayTextL( const Swi::CAppInfo& aAppInfo,
- Swi::TFileTextOption aOption,
- const TDesC& aText )
- {
- iShowingDialog = ETrue;
-
- HBufC* text = aText.AllocLC();
- CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *text );
- dlg->PrepareLC( R_SISXUI_TEXT_DIALOG );
- CleanupStack::PushL( dlg );
-
- switch ( aOption )
- {
- case Swi::EInstFileTextOptionContinue:
- dlg->ButtonGroupContainer().SetCommandSetL( R_SISXUI_SOFTKEYS_CONTINUE_EMPTY__CONTINUE );
- break;
-
- case Swi::EInstFileTextOptionSkipOneIfNo:
- dlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_YES_NO__YES );
- break;
-
- case Swi::EInstFileTextOptionAbortIfNo:
- dlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL__OK );
- break;
-
- case Swi::EInstFileTextOptionExitIfNo:
- dlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL__OK );
- break;
-
- default:
- dlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_EMPTY__OK );
- break;
- }
-
- dlg->QueryHeading()->SetTextL( aAppInfo.AppName() );
- CleanupStack::Pop( dlg );
- TBool result = dlg->RunLD();
-
- CleanupStack::PopAndDestroy( text );
-
- if ( !result )
- {
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayErrorL
-// Displays a dialog showing an error message.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::DisplayErrorL( const Swi::CAppInfo& /*aAppInfo*/,
- Swi::TErrorDialog aType,
- const TDesC& aParam )
- {
- FLOG_2( _L("CSisxUIHandler::DisplayErrorL: %d, %S"), aType, &aParam );
- iResult = TSisxUIResult( aType );
- // Keep compiler happy
- (void)aParam;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayDependencyBreakL
-// Displays a dialog indicating that a component which is being uninstalled is
-// a dependency of another component installed.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayDependencyBreakL( const Swi::CAppInfo& /*aAppInfo*/,
- const RPointerArray<TDesC>& /*aComponents*/ )
- {
- iShowingDialog = ETrue;
-
- TBool result( ETrue );
-
- result = iCommonDialogs->ShowConfirmationQueryL( R_SISXUI_DEPENDENCY_BREAK );
-
- if ( !result )
- {
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayApplicationsInUseL
-// Informs user that the applications are in use during an (un)installation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayApplicationsInUseL( const Swi::CAppInfo& /*aAppInfo*/,
- const RPointerArray<TDesC>& /*aAppNames*/ )
- {
- iShowingDialog = ETrue;
-
- TBool result( ETrue );
-
- if ( iMode == EModeInstall )
- {
- result = iCommonDialogs->ShowConfirmationQueryL( R_SISXUI_CLOSE_MULTI_INST );
- }
- else
- {
- result = iCommonDialogs->ShowConfirmationQueryL( R_SISXUI_CLOSE_MULTI_UNINST );
- }
-
- if ( !result )
- {
- TRAP_IGNORE( iCommonDialogs->CloseProgressDialogL() );
- iResult = TSisxUIResult( EUiResultCancelled );
- if ( iMode == EModeUninstall )
- {
- // Display Wait dialog while Symbian SWI is cancelling uninstall process.
- iCommonDialogs->ShowWaitDialogL( R_SISXUI_CANCELLING,
- this,
- R_AVKON_SOFTKEYS_EMPTY );
- iShowingWaitDialog = ETrue;
- }
-
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayQuestionL
-// Displays a generic question dialog with a Yes/No answer.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::DisplayQuestionL( const Swi::CAppInfo& /*aAppInfo*/,
- Swi::TQuestionDialog aQuestion,
- const TDesC& /*aDes*/ )
- {
- iShowingDialog = ETrue;
-
- TBool result( ETrue );
-
- if ( aQuestion == Swi::EQuestionIncompatible && !iIncompatibleShown )
- {
- // Incompatible application
- result = iCommonDialogs->ShowConfirmationQueryL( R_SISXUI_INCOMP_PACKAGE, R_AVKON_SOFTKEYS_YES_NO__YES );
- // Make sure this question is not asked twice.
- iIncompatibleShown = ETrue;
- }
-
- if ( !result )
- {
- iResult = TSisxUIResult( EUiResultCancelled );
- }
-
- iShowingDialog = EFalse;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::HandleDialogExitL
-// Called when wait/progress dialog is about to be cancelled.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::HandleDialogExitL( TInt aButtonId )
- {
- TBool result( EFalse );
-
- if ( aButtonId == EAknSoftkeyCancel )
- {
- if ( iOcspInProgress )
- {
- result = ETrue;
- // We need to cancel immediately
- iResult = TSisxUIResult( EUiResultCancelled );
- iCancelObserver->UserCancelL( EFalse );
- }
- else
- {
- // User will still get confirmation
- iCancelRequested = ETrue;
- }
-
- }
-
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ProcessResult
-// Process the result of the (un)installation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ProcessResult( TInt aResult )
- {
- // In case we havent got a result from callbacks, we need to use one
- // from the engine complete code.
- if ( iResult.iResult == EUiResultNoResult )
- {
- switch ( aResult )
- {
- case KErrNone:
- // This means that the result was ok
- iResult = TSisxUIResult( EUiResultOk );
- break;
-
- case KErrAccessDenied:
- iResult = TSisxUIResult( EUiResultAccessDenied );
- break;
-
- case KSWInstErrUserCancel:
- iResult = TSisxUIResult( EUiResultCancelled );
- break;
-
- case KSWInstErrFileCorrupted:
- iResult = TSisxUIResult( EUiResultFileCorrupt );
- break;
-
- case KErrInvalidUpgrade:
- iResult = TSisxUIResult( EUiResultInvalidUpgrade );
- break;
-
- case KErrNoMemory:
- case KErrDiskFull:
- iResult = TSisxUIResult( EUiResultInsufficientMemory );
- break;
-
- case KErrCancel:
- iResult = TSisxUIResult( EUiResultCancelled );
- break;
-
- default:
- if ( iMode == EModeInstall && !iIntegrityCheckDone )
- {
- // Sisx integrity check has not been done, report file
- // corrupt
- iResult = TSisxUIResult( EUiResultFileCorrupt );
- }
- else
- {
- // Report general error
- iResult = TSisxUIResult( EUiResultGeneralError );
- iResult.iDetailedErrorCode = aResult;
- }
- break;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::GetResult
-// Return result of the installation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TSisxUIResult CSisxUIHandler::GetResult() const
- {
- return iResult;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ShowFinalNoteL
-// Show the final note.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ShowFinalNoteL()
- {
- switch ( iResult.iResult )
- {
- case EUiResultOk:
- DisplayCompleteL();
- break;
-
- case EUiResultCancelled:
- DisplayCancelL();
- break;
-
- case EUiResultUnableToOverwrite:
- case EUiResultInvalidUpgrade:
- case EUiResultBlockingEclipsingFile:
- ShowErrorL( R_SISXUI_UPDATE_ERROR );
- break;
-
- case EUiResultAlreadyInRom:
- ShowErrorL( R_SISXUI_ALREADY_IN_ROM );
- break;
-
- case EUiResultUnknownFile:
- case EUiResultFileNotFound:
- case EUiResultInvalidFileName:
- case EUiResultFileCorrupt:
- ShowErrorL( R_SISXUI_FILE_CORRUPT );
- break;
-
- case EUiResultDiskNotPresent:
- ShowErrorL( R_SISXUI_DISK_NOT_PRESENT );
- break;
-
- case EUiResultCannotRead:
- ShowErrorL( R_SISXUI_CANNOT_READ );
- break;
-
- case EUiResultCannotDelete:
- ShowErrorL( R_SISXUI_CANNOT_DELETE );
- break;
-
- case EUiResultInsufficientMemory:
- case EUiResultInsufficientSpaceOnDrive:
- ShowErrorL( R_SISXUI_NOT_ENOUGH_MEMORY );
- break;
-
- case EUiResultCapabilitiesCannotBeGranted:
- ShowErrorL( R_SISXUI_CAPABILITIES_CANNOT_BE_GRANTED );
- break;
-
- case EUiResultNoCertificate:
- case EUiResultCertificateValidationError:
- case EUiResultSignatureNotPresent:
- case EUiResultSignatureCouldNotBeValidated:
- case EUiResultNoCodeSigningExtension:
- case EUiResultNoSupportedPolicyExtension:
- case EUiResultMandatorySignatureMissing:
- ShowErrorL( R_SISXUI_CERTIFICATE_ERROR );
- break;
- case EUiResultSignatureSelfSigned:
- ShowErrorL( R_SISXUI_SELFSIGNED_ERROR );
- break;
- case EUiResultCertificateExpired:
- ShowErrorL( R_SISXUI_CERT_EXPIRED );
- break;
-
- case EUiResultCertificateValidInFuture:
- ShowErrorL( R_SISXUI_CERT_DATE_INVALID );
- break;
-
- case EUiResultInvalidRevocationServerResponse:
- case EUiResultInvalidRevocationServerUrl:
- case EUiResultResponseSignatureValidationFailure:
- ShowErrorL( R_SISXUI_OCSP_SETTINGS_ERROR );
- break;
-
- case EUiResultUnableToObtainCertificateStatus:
- case EUiResultInvalidCertificateStatusInformation:
- case EUiResultCertificateStatusIsUnknown:
- case EUiResultCertificateStatusIsUnknownSelfSigned:
- ShowErrorL( R_SISXUI_OCSP_GENERAL_ERROR );
- break;
-
- case EUiResultCertificateStatusIsRevoked:
- ShowErrorL( R_SISXUI_OCSP_REVOKED );
- break;
-
- case EUiResultAccessDenied:
- case EUiResultOSExeViolation:
- ShowErrorL( R_SISXUI_ACCESS_DENIED );
- break;
-
- case EUiResultMissingBasePackage:
- ShowErrorL( R_SISXUI_BASE_MISSING );
- break;
-
- case EUiResultCannotUninstallPartialUpgrade:
- ShowErrorL( R_SISXUI_UNINSTALL_PARTIAL_ERROR );
- break;
-
- case EUiResultSIDViolation:
- case EUiResultVIDViolation:
- case EUiResultUIDPackageViolation:
- case EUiResultSIDMismatch:
- ShowErrorL( R_SISXUI_PROTECTED_ERROR );
- break;
-
- case EUiResultConstraintsExceeded:
- ShowErrorL( R_SISXUI_CONSTRAINED_ERROR );
- break;
-
- //These should not come here
- case EUiResultMissingDependency:
- case EUiResultRequireVer:
- case EUiResultRequireVerOrGreater:
- //
- case EUiResultGeneralError:
- case EUiResultNoResult:
- default:
- if ( iMode == EModeInstall )
- {
- ShowErrorL( R_SISXUI_INSTALL_ERROR );
- }
- else
- {
- ShowErrorL( R_SISXUI_UNINSTALL_ERROR );
- }
- break;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ProcessedPackages
-// Return the package information about this install/uninstall.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ProcessedPackages( RPointerArray<CSisxUIAppInfo>& aPackages )
- {
- for ( TInt index = 0; index < iPackages.Count(); index++ )
- {
- aPackages.Append( iPackages[index] );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::InstallMode
-// Return the install mode of this instance.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CSisxUIHandler::TInstallMode CSisxUIHandler::InstallMode() const
- {
- return iMode;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::SetOcspProcedure
-// Sets the ocsp procedure for the installation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::SetOcspProcedure( const TSisxUIOcspProc& aOcspProc )
- {
- iOcspProc = aOcspProc;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::IsShowingDialog
-// Indicates if a dialog is shown to user and expecting some user input.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CSisxUIHandler::IsShowingDialog()
- {
- return iShowingDialog;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ShowCancellingL
-// Shows a cancelling wait dialog.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ShowCancellingL()
- {
- // We need to show this only in case of ocsp.
- if ( iOcspInProgress )
- {
- // Show cancelling wait dialog
- iCommonDialogs->ShowDelayedWaitDialogL( R_SISXUI_CANCELLING,
- this,
- R_AVKON_SOFTKEYS_EMPTY );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DoNotShowFinalNote
-// Sets the UI not to show final note.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::DoNotShowFinalNote()
- {
- iShownFinalNote = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ResetResult
-// Resets the result to no result.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ResetResult()
- {
- iResult.iResult = EUiResultNoResult;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::SetFileForDrm
-// Sets the file handle for showing drm details.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::SetFileForDrm( RFile& aFile )
- {
- iDrmFile.Duplicate( aFile );
- iIsDrmFileSet = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::SetAllowUntrusted
-// Sets the policy for allowing the installation of untrusted packages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::SetAllowUntrusted( TBool aAllowUntrusted )
- {
- iAllowUntrusted = aAllowUntrusted;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayCancelL
-// Displays a cancel note.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::DisplayCancelL()
- {
- if ( !iShownFinalNote )
- {
- // Make sure that no wait or progress dialog is running
- Finalize();
-
- HBufC* string = NULL;
- if ( iMode == EModeInstall )
- {
- string = StringLoader::LoadLC( R_SISXUI_INSTALL_CANCELLED );
- }
- else
- {
- string = StringLoader::LoadLC( R_SISXUI_UNINSTALL_CANCELLED );
- }
-
- CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
- note->ExecuteLD( *string );
- CleanupStack::PopAndDestroy( string );
- }
-
- iShownFinalNote = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::DisplayCompleteL
-// Displays a complete note.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::DisplayCompleteL()
- {
- if ( !iShownFinalNote )
- {
- // Make sure that no wait or progress dialog is running
- Finalize();
-
- HBufC* string = NULL;
- if ( iMode == EModeInstall )
- {
- string = StringLoader::LoadLC( R_SISXUI_INSTALL_COMPLETED );
- }
- else
- {
- string = StringLoader::LoadLC( R_SISXUI_UNINSTALL_COMPLETED );
- }
-
- CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote( ETrue );
- note->ExecuteLD( *string );
- CleanupStack::PopAndDestroy( string );
- }
-
- iShownFinalNote = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ShowErrorL
-// Convenience function for showing a Sisx specific error.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ShowErrorL( TInt aResourceString )
- {
- if ( !iShownFinalNote )
- {
- Finalize();
-
- HBufC* errorString = StringLoader::LoadLC( aResourceString );
-
- RFs fs;
- User::LeaveIfError( fs.Connect() );
- CleanupClosePushL( fs );
-
- CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
-
- TEntry entry;
- TInt status = fs.Entry( KSwiTempFile, entry );
-
- if ( status == KErrNone )
- {
- // File exists. Status code will be appended to the message
- HBufC* detailedMessage = HBufC::NewLC( errorString->Length() + KSpaceForErrorCode );
- if( iResult.iResult != EUiResultGeneralError ) {
- detailedMessage->Des().Format( KDetailedError, errorString, iResult.iResult );
- } else {
- detailedMessage->Des().Format( KDetailedError, errorString,
- iResult.iDetailedErrorCode );
- }
- note->ExecuteLD( *detailedMessage );
- CleanupStack::PopAndDestroy( detailedMessage );
- }
- else
- {
- // File doesn't exist. Show the message without status code
- note->ExecuteLD( *errorString );
- }
-
- CleanupStack::PopAndDestroy( 2 ); // fs, errorString
-
- // No notes after error
- iShownFinalNote = ETrue;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ShowErrorL
-// Convenience function for showing a Sisx specific error.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::ShowErrorL( const TDesC& aDes )
- {
- if ( !iShownFinalNote )
- {
- Finalize();
-
- CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
- note->ExecuteLD( aDes );
-
- // No notes after error
- iShownFinalNote = ETrue;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::AddCapabilityL
-// Adds the given capability string to the descriptor.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::AddCapabilityL( HBufC*& aString, TInt aResourceId )
- {
- HBufC* tmpString = StringLoader::LoadLC( aResourceId );
- HBufC* newString;
-
- if ( aString->Length() > 0 )
- {
- newString = HBufC::NewL( tmpString->Length() + aString->Length() + 1 ); // + \n
-
- TPtr ptr( newString->Des() );
- ptr += *aString;
- ptr += KNextLine;
- ptr += *tmpString;
- }
- else
- {
- newString = HBufC::NewL( tmpString->Length() );
-
- TPtr ptr( newString->Des() );
- ptr += *tmpString;
- }
-
- CleanupStack::PopAndDestroy( tmpString );
- CleanupStack::PopAndDestroy( aString );
-
- aString = newString;
- CleanupStack::PushL( aString );
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::Finalize
-// Finalizes the installation by closing all open dialogs.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSisxUIHandler::Finalize()
- {
- TRAP_IGNORE( iCommonDialogs->CloseWaitDialogL() );
- TRAP_IGNORE( iCommonDialogs->CloseProgressDialogL() );
- // No notes after this
- iShownFinalNote = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSisxUIHandler::ShowCapabilitiesHelp
-// Callback used in message query.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CSisxUIHandler::ShowCapabilitiesHelp( TAny* aPtr )
- {
- //TRAP_IGNORE(
- // reinterpret_cast<CSisxUIHandler*>(aPtr)->iCommonDialogs->LaunchHelpL( KAM_HLP_INSTALL_CAPAB )
- // );
-
- return KErrNone;
- }
-
-
-// End of File