--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDialogs.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,783 @@
+/*
+* 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 CCUIDialogs
+* class member functions.
+*
+*/
+
+
+// INCLUDE FILES
+#include <bautils.h>
+#include <eikenv.h>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <eikprogi.h>
+#include <aknnotewrappers.h>
+#include <data_caging_path_literals.hrh>
+#include <SWInstCommonUI.rsg>
+#include <aknmessagequerydialog.h>
+#include <hlplch.h>
+#include <csxhelp/am.hlp.hrh>
+#include <coehelp.h>
+#include <featmgr.h>
+#include <sysutil.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif //RD_MULTIPLE_DRIVE
+#include <akninputblock.h>
+
+#include "CUIDialogs.h"
+#include "CUIDriveUtils.h"
+#include "CUIWaitDialog.h"
+#include "CUIProgressDialog.h"
+#include "CUIDetailsDialog.h"
+#include "CUIUtils.h"
+#include "SWInstPrivateUid.h"
+
+ using namespace SwiUI::CommonUI;
+
+_LIT( KNextLine, "\n" );
+_LIT( KFormat, "%d\t%S\t%S" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::CCUIDialogs
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCUIDialogs::CCUIDialogs()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCUIDialogs::ConstructL()
+ {
+ iCoeEnv = CEikonEnv::Static();
+ if ( !iCoeEnv )
+ {
+ User::Leave( KErrGeneral );
+ }
+
+ TFileName fileName;
+ fileName.Append( KDC_RESOURCE_FILES_DIR );
+ fileName.Append( KCUIResourceFileName );
+ iResourceFileOffset = CUIUtils::LoadResourceFileL( fileName, iCoeEnv );
+
+ iAbsorber = CAknInputBlock::NewLC();
+ CleanupStack::Pop( iAbsorber );
+
+ FeatureManager::InitializeLibL();
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CCUIDialogs* CCUIDialogs::NewL()
+ {
+ CCUIDialogs* self = new ( ELeave ) CCUIDialogs();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// Destructor
+EXPORT_C CCUIDialogs::~CCUIDialogs()
+ {
+ // Close non-modal dialogs
+ TRAP_IGNORE( CloseProgressDialogL() );
+ TRAP_IGNORE( CloseWaitDialogL() );
+
+ if( iResourceFileOffset )
+ {
+ iCoeEnv->DeleteResourceFile( iResourceFileOffset );
+ }
+
+ delete iAbsorber;
+
+ FeatureManager::UnInitializeLib();
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowWaitDialogL
+// Show a wait dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::ShowWaitDialogL( TInt aResourceId,
+ MCUIWaitDialogCallback* aCallback,
+ TInt aSoftkeyResourceId )
+ {
+ HBufC* displayString = StringLoader::LoadLC( aResourceId );
+
+ if ( iWaitDialog )
+ {
+ iWaitDialog->SetTextL( *displayString );
+ SetWaitDialogCallback( aCallback );
+ }
+ else
+ {
+ iWaitDialog = new (ELeave) CCUIWaitDialog ( reinterpret_cast
+ < CEikDialog** >
+ ( &iWaitDialog ),
+ ETrue );
+
+ iWaitDialog->PrepareLC( R_SWCOMMON_GENERAL_WAIT_DIALOG );
+ iWaitDialog->SetTextL( *displayString );
+ SetWaitDialogCallback( aCallback );
+ iWaitDialog->ButtonGroupContainer().SetCommandSetL( aSoftkeyResourceId );
+ iWaitDialog->RunLD();
+ }
+
+ CleanupStack::PopAndDestroy( displayString );
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::CloseWaitDialogL
+// Closes the wait dialog
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::CloseWaitDialogL()
+ {
+ if ( iWaitDialog )
+ {
+ // Set callback to NULL as we want no callbacks from this.
+ delete iWaitDialog;
+ iWaitDialog = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowProgressDialog
+// Show a progress dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::ShowProgressDialogL( TInt aResourceId,
+ MCUIWaitDialogCallback* aCallback,
+ TInt aSoftkeyResourceId )
+ {
+ HBufC* displayString = StringLoader::LoadLC( aResourceId );
+ ShowProgressDialogL( *displayString, aCallback, aSoftkeyResourceId );
+ CleanupStack::PopAndDestroy( displayString );
+ }
+
+EXPORT_C void CCUIDialogs::ShowProgressDialogL( const TDesC& aText,
+ MCUIWaitDialogCallback* aCallback,
+ TInt aSoftkeyResourceId )
+ {
+ if ( iProgressDialog )
+ {
+ iProgressDialog->SetTextL( aText );
+ SetProgressDialogCallback( aCallback );
+ }
+ else
+ {
+ iProgressDialog = new (ELeave) CCUIProgressDialog ( reinterpret_cast
+ < CEikDialog** >
+ ( &iProgressDialog ),
+ ETrue );
+
+ iProgressDialog->PrepareLC( R_SWCOMMON_GENERAL_PROGRESS_DIALOG );
+ iProgressDialog->SetTextL( aText );
+ SetProgressDialogCallback( aCallback );
+ iProgressDialog->ButtonGroupContainer().SetCommandSetL( aSoftkeyResourceId );
+ iProgressDialog->RunLD();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::SetProgressDialogFinalValueL
+// Set final value for the progress bar in progress dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::SetProgressDialogFinalValueL( TInt aValue )
+ {
+ if ( iProgressDialog )
+ {
+ CEikProgressInfo* progressInfo = iProgressDialog->GetProgressInfoL();
+ progressInfo->SetFinalValue( aValue );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::UpdateProgressDialogValuL
+// Increments the progress bar in progress dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::UpdateProgressDialogValueL( TInt aValue )
+ {
+ if ( iProgressDialog )
+ {
+ CEikProgressInfo* progressInfo = iProgressDialog->GetProgressInfoL();
+ progressInfo->IncrementAndDraw( aValue );
+ User::ResetInactivityTime(); // keep lights on and screensaver disabled
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::CloseProgressDialogL
+// Closes the progress dialog
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::CloseProgressDialogL()
+ {
+ if ( iProgressDialog )
+ {
+ // Set callback to NULL as we want no callbacks from this.
+ iProgressDialog->SetCallback( NULL );
+ iProgressDialog->ProcessFinishedL();
+ delete iProgressDialog;
+ iProgressDialog = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// SwiUI::CSWCUIDialogs::ShowConfirmationQueryL
+// Show confirmation dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CCUIDialogs::ShowConfirmationQueryL( TInt aResourceId,
+ TInt aSoftkeyResourceId ) const
+ {
+ TBool response( EFalse );
+
+ HBufC* displayString = StringLoader::LoadLC( aResourceId );
+
+ response = ShowConfirmationQueryL( *displayString, aSoftkeyResourceId );
+
+ CleanupStack::PopAndDestroy( displayString );
+
+ return response;
+ }
+
+// -----------------------------------------------------------------------------
+// SwiUI::CSWCUIDialogs::ShowConfirmationQueryL
+// Show confirmation dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CCUIDialogs::ShowConfirmationQueryL( const TDesC& aDisplayString,
+ TInt aSoftkeyResourceId ) const
+ {
+ TBool response( EFalse );
+
+ CAknQueryDialog* note =
+ CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
+
+ note->PrepareLC( R_SWCOMMON_GENERAL_CONFIRMATION_QUERY );
+ note->SetPromptL( aDisplayString );
+ note->ButtonGroupContainer().SetCommandSetL( aSoftkeyResourceId );
+
+ if ( note->RunLD() )
+ {
+ response = ETrue;
+ }
+
+ return response;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowDriveSelectionDialogL
+// Show a drive / memory selection dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CCUIDialogs::ShowDriveSelectionDialogL(
+ TInt64 aSize,
+ const RArray<TDriveUnit>& aDriveUnits,
+ const RArray<TInt64>& aDriveSpaces,
+ TInt& aSelectionResult )
+ {
+ TInt result( KErrNone );
+
+ // Sanity check
+ if ( aSize <= 0 )
+ {
+ aSize = 1;
+ }
+
+ CCUIDriveUtils* driveUtils =
+ CCUIDriveUtils::NewL( aSize,
+ aDriveUnits,
+ aDriveSpaces );
+ CleanupStack::PushL( driveUtils );
+
+ aSelectionResult = -1;
+
+#ifdef RD_MULTIPLE_DRIVE
+ TDriveList driveList;
+ TInt driveCount = 0;
+ DriveInfo::GetUserVisibleDrives( iCoeEnv->FsSession(),
+ driveList,
+ driveCount );
+ TInt driveCountWithoutRemoteDrives = driveCount;
+
+
+ TUint driveStatus = 0;
+ TInt firstFoundDrive = 0;
+ for ( TInt i = 0; i < KMaxDrives; i++ )
+ {
+ if ( driveList[i] )
+ {
+ User::LeaveIfError( DriveInfo::GetDriveStatus( iCoeEnv->FsSession(),
+ i,
+ driveStatus ) );
+ TFileName path;
+ TDriveUnit driveUnit( i );
+ if ( ( driveStatus & DriveInfo::EDriveRemote ) )
+ {
+ driveCountWithoutRemoteDrives--;
+ }
+ else
+ {
+ if ( !firstFoundDrive )
+ {
+ firstFoundDrive = (TInt) driveUnit;
+ }
+ }
+ }
+ }
+
+ if ( driveCountWithoutRemoteDrives == 1 )
+ {
+ // Only one drive available, force install to available drive
+ for ( TInt index = 0; index < aDriveUnits.Count(); index++ )
+ {
+ if ( firstFoundDrive == (TInt)aDriveUnits[index] )
+ {
+ aSelectionResult = index;
+ break;
+ }
+ }
+ }
+#else
+ // See if the whole device has enough memory
+ if ( SysUtil::FFSSpaceBelowCriticalLevelL( &iCoeEnv->FsSession(), aSize ) &&
+ ( !driveUtils->IsCardDrivePresent() ||
+ SysUtil::MMCSpaceBelowCriticalLevelL( &iCoeEnv->FsSession(), aSize ) ) )
+ {
+ result = KErrNoMemory;
+ }
+
+ // See if the memory card is present
+ else if ( !driveUtils->IsCardDrivePresent() )
+ {
+ // No memory card present, force install to phone memory
+ aSelectionResult = driveUtils->GetInternalDriveIndex();
+ }
+
+ // Show the dialog until user selects valid memory or cancels it
+#endif //RD_MULTIPLE_DRIVE
+ else
+ {
+ while ( ETrue )
+ {
+ if ( !driveUtils->ShowSelectionDialogL( aSelectionResult ) )
+ {
+ // User canceled the query
+ result = KErrCancel;
+ aSelectionResult = -1;
+ break;
+ }
+#ifdef RD_MULTIPLE_DRIVE
+ // See if there is enough space in the selected drive
+ // Internal memory selected?
+ if ( !SysUtil::DiskSpaceBelowCriticalLevelL( &iCoeEnv->FsSession(), aSize, aDriveUnits[aSelectionResult] ) )
+ {
+ break;
+ }
+#else
+ // See if there is enough space in the selected drive
+ // Internal memory selected?
+ if ( driveUtils->GetInternalDriveIndex() == aSelectionResult )
+ {
+ if ( !SysUtil::FFSSpaceBelowCriticalLevelL( &iCoeEnv->FsSession(), aSize ) )
+ {
+ break;
+ }
+ }
+ // The user selected the card. Check the free space from there
+ else if ( !SysUtil::MMCSpaceBelowCriticalLevelL( &iCoeEnv->FsSession(), aSize ) )
+ {
+ break;
+ }
+#endif //RD_MULTIPLE_DRIVE
+
+ // Show error and let user try again
+ HBufC* string = StringLoader::LoadLC( R_SWCOMMON_NOT_ENOUGH_MEMORY_IN_DRIVE );
+
+ CAknErrorNote* note = new( ELeave )CAknErrorNote( ETrue );
+ note->ExecuteLD( string->Des() );
+
+ CleanupStack::PopAndDestroy( string );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( driveUtils );
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowSecurityWarningDialogL
+// Show a security warning dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CCUIDialogs::ShowSecurityWarningDialogL()
+ {
+ TBool result( EFalse );
+
+ // Load resources
+ HBufC* text = StringLoader::LoadLC( R_SWCOMMON_SECURITY_WARNING );
+ HBufC* linkText = NULL;
+ if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ linkText = StringLoader::LoadLC( R_SWCOMMON_SECURITY_WARNING_MORE_INFO );
+ }
+ else
+ {
+ linkText = KNullDesC().AllocLC();
+ }
+
+ HBufC* message = HBufC::NewLC( text->Length() + linkText->Length() + 1 );
+ TPtr msgPtr( message->Des() );
+ msgPtr += *text;
+ msgPtr += KNextLine;
+ msgPtr += *linkText;
+
+ // Show the dialog
+ CAknMessageQueryDialog* dlg =
+ CAknMessageQueryDialog::NewL( *message, CAknQueryDialog::EWarningTone );
+ dlg->PrepareLC( R_SWCOMMON_SECURITY_WARNING_DIALOG );
+ CleanupStack::PushL( dlg );
+ if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ dlg->SetLinkTextL( *linkText );
+ TCallBack callback( ShowSecurityWarningHelp, this );
+ dlg->SetLink( callback );
+ }
+ CleanupStack::Pop( dlg );
+
+ if ( dlg->RunLD() )
+ {
+ result = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( 3, text ); // message, linkText, text
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowErrorNoteL
+// Show an error note.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::ShowErrorNoteL( TInt aResourceId ) const
+ {
+ HBufC* errorString = StringLoader::LoadLC( aResourceId );
+ ShowErrorNoteL( *errorString );
+ CleanupStack::PopAndDestroy( errorString );
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowErrorNoteL
+// Show an error note.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::ShowErrorNoteL( const TDesC& aErrorText ) const
+ {
+ CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
+ note->ExecuteLD( aErrorText );
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ResetProgressDialogL
+// Resets the progress bar in the progress dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::ResetProgressDialogL()
+ {
+ if ( iProgressDialog )
+ {
+ CEikProgressInfo* progressInfo = iProgressDialog->GetProgressInfoL();
+ progressInfo->SetAndDraw( 0 );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::LaunchHelpL
+// Launches a help with the given context.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::LaunchHelpL( const TDesC& aContext )
+ {
+ CArrayFix<TCoeHelpContext>* contexts =
+ new(ELeave) CArrayFixFlat<TCoeHelpContext>( 1 );
+ CleanupStack::PushL( contexts );
+ TCoeHelpContext context;
+ context.iMajor = TUid::Uid( KSWInstHelpUid );
+ context.iContext = aContext;
+ contexts->AppendL( context );
+ CleanupStack::Pop(); // contexts
+ HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(), contexts );
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowDelayedWaitDialogL
+// Show a wait dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCUIDialogs::ShowDelayedWaitDialogL( TInt aResourceId,
+ MCUIWaitDialogCallback* aCallback,
+ TInt aSoftkeyResourceId )
+ {
+ if ( iWaitDialog )
+ {
+ ShowWaitDialogL( aResourceId, aCallback, aSoftkeyResourceId );
+ }
+ else
+ {
+ HBufC* displayString = StringLoader::LoadLC( aResourceId );
+ iWaitDialog = new (ELeave) CCUIWaitDialog ( reinterpret_cast
+ < CEikDialog** >
+ ( &iWaitDialog ),
+ EFalse );
+
+ iWaitDialog->PrepareLC( R_SWCOMMON_GENERAL_WAIT_DIALOG );
+ iWaitDialog->SetTextL( *displayString );
+ SetWaitDialogCallback( aCallback );
+ iWaitDialog->ButtonGroupContainer().SetCommandSetL( aSoftkeyResourceId );
+ iWaitDialog->RunLD();
+ CleanupStack::PopAndDestroy( displayString );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowInstallationCompleteQueryL
+// Show an installation complete query.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CCUIDialogs::ShowInstallationCompleteQueryL(
+ const MDesCArray& aApplicationArray,
+ const MDesCArray& aInstalledFolderArray,
+ const CAknIconArray& aIconArray,
+ TInt& aIndexOfAppToBeStarted ) const
+
+ {
+ aIndexOfAppToBeStarted = KErrNotFound;
+
+ // Prepare for showing the installation complete query
+ CDesCArray *itemArray = new( ELeave ) CDesCArrayFlat( 1 );
+ CleanupStack::PushL( itemArray );
+ CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
+ CleanupStack::PushL( iconArray );
+
+ for ( TInt i = 0; i <= aApplicationArray.MdcaCount() - 1; i++ )
+ {
+ HBufC* firstLine = aApplicationArray.MdcaPoint( i ).AllocLC();
+ HBufC* secondLine = NULL;
+ if ( !(aInstalledFolderArray.MdcaCount() < (i + 1 ) ) )
+ {
+ if ( aInstalledFolderArray.MdcaPoint( i ).Length() > 0 )
+ {
+ secondLine = StringLoader::LoadLC(
+ R_SWCOMMON_INSTALLED_FOLDER_HEAD,
+ aInstalledFolderArray.MdcaPoint( i ) );
+ }
+ else
+ {
+ // show just empty second lines for empty folder names
+ secondLine = KNullDesC().AllocLC();
+ }
+ }
+ if ( secondLine == NULL )
+ {
+ // default folder is used
+ secondLine = StringLoader::LoadLC( R_SWCOMMON_INSTALLED_FOLDER );
+ }
+ HBufC* listItem = HBufC::NewLC( firstLine->Length() +
+ secondLine->Length() + 10 );
+ listItem->Des().Format( KFormat, i, firstLine, secondLine );
+
+ itemArray->AppendL( listItem->Des() );
+ CleanupStack::PopAndDestroy( listItem );
+ CleanupStack::PopAndDestroy( secondLine );
+ CleanupStack::PopAndDestroy( firstLine );
+
+
+ // Check first that there is an item in array
+ if ( !( aIconArray.Count() < ( i + 1 ) ) )
+ {
+ CGulIcon* icon = CGulIcon::NewL();
+ CleanupStack::PushL( icon );
+ icon->SetBitmapsOwnedExternally( ETrue );
+ icon->SetBitmap( aIconArray.At(i)->Bitmap() );
+ icon->SetMask( aIconArray.At(i)->Mask() );
+ iconArray->AppendL( icon );
+ CleanupStack::Pop( icon );
+ }
+ }
+
+ // show list query
+ CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog(
+ &aIndexOfAppToBeStarted );
+ dlg->PrepareLC( R_SWCOMMON_START_QUERY );
+ dlg->SetItemTextArray( itemArray );
+ dlg->SetIconArrayL( iconArray );
+
+ dlg->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ TInt retQuery = dlg->RunLD();
+ CleanupStack::Pop( iconArray );
+
+ CleanupStack::PopAndDestroy( itemArray );
+
+ TBool appIsStarted = EFalse;
+ if ( retQuery == EAknSoftkeyOk )
+ {
+ appIsStarted = ETrue;
+ }
+ else
+ {
+ aIndexOfAppToBeStarted = KErrNotFound;
+ }
+
+ return appIsStarted;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowUninstallConfirmationForSeveralAppsL
+// Show an installation complete query.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CCUIDialogs::ShowUninstallConfirmationForSeveralAppsL(
+ const TDesC& aApplicationGroup,
+ const MDesCArray& aApplicationArray,
+ TInt aSoftkeyResourceId ) const
+ {
+ HBufC* appList = HBufC::NewLC( 0 );
+ TInt count = aApplicationArray.MdcaCount();
+ for ( TInt i = 0; i < count; i++ )
+ {
+ HBufC* tmp = appList;
+ appList = appList->ReAllocL(
+ tmp->Length() +
+ aApplicationArray.MdcaPoint( i ).Length() +
+ KNextLine().Length() );
+ CleanupStack::Pop( tmp );
+ CleanupStack::PushL( appList );
+ appList->Des().Append( aApplicationArray.MdcaPoint( i ) );
+ if ( (i+1) < count )
+ {
+ appList->Des().Append( KNextLine() );
+ }
+ }
+ CDesCArray* stringArray = new( ELeave ) CDesCArrayFlat( 2 );
+ CleanupStack::PushL( stringArray );
+ stringArray->AppendL( aApplicationGroup );
+ stringArray->AppendL( *appList );
+ CleanupStack::Pop( stringArray );
+ CleanupStack::PopAndDestroy( appList );
+ CleanupStack::PushL( stringArray );
+ HBufC* message = StringLoader::LoadLC(
+ R_SWCOMMON_QUERY_UNINST_MIDLET_SUITE,
+ *stringArray );
+ CleanupStack::Pop( message );
+ CleanupStack::PopAndDestroy( stringArray );
+ CleanupStack::PushL( message );
+
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *message );
+ dlg->PrepareLC( R_SWCOMMON_MULTI_UNINSTALL_DIALOG );
+ dlg->ButtonGroupContainer().SetCommandSetL( aSoftkeyResourceId );
+
+ TBool response( EFalse );
+ if ( dlg->RunLD() )
+ {
+ response = ETrue;
+ }
+ CleanupStack::PopAndDestroy( message );
+ return response;
+ }
+
+
+//
+// -----------------------------------------------------------------------------
+// CCUIDialogs::SetWaitDialogCallback
+// Set callback for the wait dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUIDialogs::SetWaitDialogCallback( MCUIWaitDialogCallback* aCallback )
+ {
+ if ( aCallback )
+ {
+ iWaitDialog->SetCallback( aCallback );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::SetProgressDialogCallback
+// Set callback for the progress dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUIDialogs::SetProgressDialogCallback( MCUIWaitDialogCallback* aCallback )
+ {
+ if ( aCallback )
+ {
+ iProgressDialog->SetCallback( aCallback );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCUIDialogs::ShowSecurityWarningHelp
+// Used as a callback function in message query. Launches help for security
+// warning.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUIDialogs::ShowSecurityWarningHelp( TAny* aPtr )
+ {
+ TRAP_IGNORE( reinterpret_cast<CCUIDialogs*>(aPtr)->LaunchHelpL( KAM_HLP_INSTALL_UNTRUSTED ) );
+
+ return KErrNone;
+ }
+
+
+
+
+