menucontentsrv/srvsrc/mcssuitehandler.cpp
branchRCL_3
changeset 23 ace62b58f4b2
parent 22 1b207dd38b72
child 25 9e077f9a342c
--- a/menucontentsrv/srvsrc/mcssuitehandler.cpp	Tue May 25 13:01:39 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,699 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  
-*
-*/
-
-// INCLUDE FILES
-#include <badesca.h>
-#include <sacls.h>
-
-#include "mcssuitehandler.h"
-#include "menueng.h"
-#include "mcsinstallnotifier.h"
-#include "mcssuiteparser.h"
-#include "mcssuiteobject.h"
-#include "menusrvengutils.h"
-#include "mcsmenuitem.h"
-
-// ================= LOCAL FUNCTIONS =======================
-
-/**
-* Cleanup support method. Call ResetAndDestroy() on the array.
-* @param RMenuItemArray* as TAny*
-*/
-LOCAL_C void ResetAndDestroy( TAny* aArray )
-    {
-    ((RPointerArray<CSuiteObject>*)aArray)->ResetAndDestroy();
-    }
-
-// ---------------------------------------------------------
-// CleanupResetAndDestroyPushL
-// ---------------------------------------------------------
-//
-LOCAL_C void CleanupResetAndDestroyPushL( RPointerArray<CSuiteObject>& aArray )
-    {
-    CleanupStack::PushL( TCleanupItem( ResetAndDestroy, &aArray ) );
-    }
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::NewL
-// ---------------------------------------------------------
-//
-CMcsSuiteHandler* CMcsSuiteHandler::NewL( CMenuEng& aEng, const TDesC& aDirName )
-	{
-	CMcsSuiteHandler* self = new( ELeave ) CMcsSuiteHandler( aEng );
-	CleanupStack::PushL( self );
-	self->ConstructL(aDirName);
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::~CMcsSuiteHandler
-// ---------------------------------------------------------
-//
-CMcsSuiteHandler::~CMcsSuiteHandler()
-	{
-	iSuites.ResetAndDestroy();
-	delete iMmcObserver;
-	delete iFreeSpaceObserver;
-	delete iInstallNotifier;
-	iTimestamps.Close();
-	iNewTimestamps.Close();
-	iEng.DequeueOperation( *this );
-	delete iInstalledFileList;
-	delete iFileNewList;
-	iDirPath.Close();
-	iFs.Close();
-	}
-
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::HaveSuite
-// ---------------------------------------------------------
-//
-TBool CMcsSuiteHandler::HaveSuite(const TDesC& aSuiteName)
-	{
-	return iSuites.Exist(aSuiteName);
-	}
-
-void CMcsSuiteHandler::GetAttribute( const TDesC& aSuiteName, const TDesC& aAttrName, 
-	TBool& aAttrExists, TDes& aAttrVal )
-	{
-	TInt suitePos = iSuites.FindLastSuite(aSuiteName);
-	if (suitePos != KErrNotFound)
-		{
-		iSuites[suitePos]->GetAttribute(aAttrName, aAttrExists, aAttrVal);
-		}
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::CMcsSuiteHandler
-// ---------------------------------------------------------
-//
-CMcsSuiteHandler::CMcsSuiteHandler( CMenuEng& aEng ) :
-	iEng(aEng)
-	{
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::ConstructL(const TDesC& aDirName)
-	{
-	User::LeaveIfError( iFs.Connect( ) );
-	iDirPath.CreateL( KMaxPath );
-	User::LeaveIfError( iFs.PrivatePath( iDirPath ) );
-	iDirPath.Append(KImportDir);
-	iDirPath.Append(KBackSlash);
-	iDirPath.Append(aDirName);
-	iDirPath.Append(KBackSlash);
-	iFileNewList = new (ELeave) CDesCArrayFlat(KDefaultGranularity);
-	iInstalledFileList = new (ELeave) CDesCArrayFlat(KDefaultGranularity);
-	iInstallNotifier = CMcsInstallNotifier::NewL(*this, KSAUidSoftwareInstallKeyValue);
-	iMmcObserver = CMcsMmcObserver::NewL( *this );
-	iFreeSpaceObserver = CMcsFreeSpaceObserver::NewL( *this );
-	// Import suites form suite dir
-	CheckSuiteDirL();
-	iEvent = EInstOpRestore;
-	iEng.QueueOperationL( *this );
-	}
-    
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::HandleInstallNotifyL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::HandleInstallNotifyL(TInt aEvent)
-	{
-	// Look for new files
-    CheckSuiteDirL();
-    iEvent = aEvent;
-    iEng.QueueOperationL( *this );
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::HandleMmcEventL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::HandleMmcEventL(TInt aEvent)
-    {
-    CheckSuiteDirL();
-    if (aEvent == EMmcInsert)
-        {
-        iEvent = EInstOpInstall;
-        }
-    else if (aEvent == EMmcRemove)
-        {
-        iEvent = EInstOpUninstall;
-        }
-    iEng.QueueOperationL( *this );
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::HandleFreeSpaceEventL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::HandleFreeSpaceEventL()
-    {
-    CheckSuiteDirL();
-    iEvent = EInstOpUninstall;
-    iEng.QueueOperationL( *this );
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::CheckSuiteDirL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::CheckSuiteDirL()
-	{
-	// Get file list
-	iFileNewList->Reset();
-	iNewTimestamps.Reset();
-
-	TDriveList driveList;
-	TChar driveLetter;
-	User::LeaveIfError(iFs.DriveList(driveList));
-	for (TInt driveNumber = EDriveA; driveNumber <= EDriveZ; driveNumber++)
-		{
-		if (driveList[driveNumber])
-			{
-			User::LeaveIfError(iFs.DriveToChar(driveNumber, driveLetter));
-			RBuf filePath;
-			filePath.CreateL(KMaxPath);
-			CleanupClosePushL(filePath);
-			filePath.Append(driveLetter);
-			filePath.Append(KColen);
-			filePath.Append(iDirPath);
-			CDir* fileList;
-			
-			iFs.GetDir(filePath, KEntryAttMaskSupported,
-					ESortByName, fileList);
-			
-			CleanupStack::PopAndDestroy(&filePath);
-			if (fileList)
-				{
-				CleanupStack::PushL(fileList);
-				for (TInt i = 0; i < fileList->Count(); i++)
-					{
-					// Not dir, xml file
-					if (!(*fileList)[i].IsDir() && ValidExtansion(
-							(*fileList)[i].iName))
-						{
-						// Don't add same file names more then once
-						// Or else it will case trouble during update
-						TInt dummy;
-						if ( iFileNewList->Find((*fileList)[i].iName, dummy) )
-							{
-							iFileNewList->AppendL((*fileList)[i].iName);
-							iNewTimestamps.AppendL((*fileList)[i].iModified);
-							}
-						}
-					}
-				CleanupStack::PopAndDestroy(fileList);
-				}
-			}
-		}
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::AddNewL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::AddNew()
-	{
-	for ( TInt i = 0; i < iFileNewList->Count(); i++ )
-		{
-		TPtrC fileNewName = (*iFileNewList)[i];
-		TTime fileTimestamp = iNewTimestamps[i];
-		
-		if ( !FileInstalled(fileNewName) )
-			{
-			// Not yet installed, install it
-			TRAP_IGNORE( InstallFileL(fileNewName, fileTimestamp) );
-			}
-		else if (FileNeedUpdate(fileNewName, fileTimestamp) )
-			{
-			//Installed, but needs update
-			TRAP_IGNORE( UpdateFileL( fileNewName, fileTimestamp) );
-			}
-		}
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::RemoveOldL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::RemoveOld()
-	{
-	for ( TInt i = 0; i < iInstalledFileList->Count(); i++ )
-		{
-		TPtrC fileNewName = (*iInstalledFileList)[i]; 
-
-		// File was removed, unistall it
-		if ( FileUninstalled(fileNewName) )
-			{
-			TRAP_IGNORE( UninstallFileL(fileNewName) );
-			}
-		}
-	iInstalledFileList->Compress();
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::ScanSuitesL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::ScanSuitesL()
-	{
-	RArray<TMenuItem> suiteItems; 
-	CleanupClosePushL( suiteItems );
-	GetMenuSuitesL( suiteItems, KMenuAttSuiteAdded(), KMenuTrue() );
-	
-	for ( TInt i = 0; i < suiteItems.Count(); i++ )
-		{
-		TBool dummy(EFalse);
-		TPtrC suiteName(KNullDesC);
-		iEng.ObjectL( suiteItems[i].Id() ).
-			FindAttribute( KMenuAttSuiteName, suiteName, dummy );
-
-		if ( !HaveSuite( suiteName ) )
-			{
-			iEng.RemoveL( suiteItems[i].Id() );
-			}
-		}
-	CleanupStack::PopAndDestroy(&suiteItems);
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::FileExistL
-// ---------------------------------------------------------
-//
-TBool CMcsSuiteHandler::FileInstalled(const TDesC& aFileName)
-	{
-	TInt posInArray;
-	// uses Folded Comparing
-	if (iInstalledFileList->Find(aFileName, posInArray) == KErrNone)
-		{
-		return ETrue;
-		}
-	return EFalse;
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::FileUninstalled
-// ---------------------------------------------------------
-//
-TBool CMcsSuiteHandler::FileUninstalled(const TDesC& aFileName)
-	{
-	for (TInt j = 0 ; j < iFileNewList->Count(); j++)
-		{
-		if ( !(*iFileNewList)[j].Compare( aFileName ) )
-			{
-			// Wasn't removed but maybe needs to be updated (rom case)
-			return FileNeedUpdate(aFileName, iNewTimestamps[j]);
-			}
-		}
-	return ETrue;
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::FileNeedUpdate
-// ---------------------------------------------------------
-//
-TBool CMcsSuiteHandler::FileNeedUpdate(const TDesC& aFileName, const TTime& aTimestamp)
-	{
-	TInt posInArray;
-	// uses Folded Comparing
-	if (iInstalledFileList->Find(aFileName, posInArray) == KErrNone)
-		{
-		// If timestamps mach then it's the same file
-		return (iTimestamps[posInArray] != aTimestamp);
-		}
-	return EFalse;
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::ValidExtansion
-// ---------------------------------------------------------
-//
-TBool CMcsSuiteHandler::ValidExtansion(const TDesC& aFileName)
-	{
-	TPtrC fileExt = 
-		aFileName.Mid( aFileName.LocateReverse( KDot ) + 1 );
-
-	return ( fileExt.CompareF(KXmlExt) == 0 );
-	}
-
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::InstallFile
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::InstallFileL(const TDesC& aFileName, const TTime& aTimestam)
-	{	
-	RPointerArray<CSuiteObject> suiteArray;
-	CleanupResetAndDestroyPushL(suiteArray);
-	
-	// Get suite from suite file
-	GetSuitesL(aFileName, suiteArray);
-	
-	//Add filename to installed suites files array
-	//If Leave occured during GetSuitesL filename wont be added 
-	iInstalledFileList->AppendL(aFileName);
-	iTimestamps.AppendL(aTimestam);
-	
-	// Take the ownership of suite items
-	for (TInt i = 0; i < suiteArray.Count(); i++ )
-		{
-		User::LeaveIfError( iSuites.Append( suiteArray[i] ) );
-        TRAPD( err, AddSuiteL( suiteArray[i]->SuiteName() ) );
-		if( err!=KErrNone )
-		    {
-		    if( i==0 )
-                {
-                iInstalledFileList->Delete( iInstalledFileList->Count()-1 );
-                iTimestamps.Remove( iTimestamps.Count()-1 );
-                }
-            iSuites.Remove( iSuites.Count()-1 );
-            User::Leave( err );
-		    }
-		suiteArray[i] = NULL;
-		}
-	CleanupStack::Pop(&suiteArray);
-	suiteArray.Close();
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::UninstallFile
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::UninstallFileL(const TDesC& aFileName)
-	{
-	TInt pos(KErrNotFound);
-	if ( !iInstalledFileList->Find(aFileName, pos))
-		{
-		
-		// Need to know what suites are beeing removed
-		CDesCArrayFlat* removedSuites = 
-			new (ELeave) CDesCArrayFlat(KDefaultGranularity);
-		CleanupStack::PushL(removedSuites);
-		for (TInt i = 0; i < iSuites.Count(); i++)
-			{
-			if ( aFileName.Compare( iSuites[i]->FileName() ) == KErrNone )
-			    {
-				removedSuites->AppendL( iSuites[i]->SuiteName() );
-				}
-			}
-		
-		// We know what suites are beeing removed, we can remove those safly
-		iSuites.RemoveByFileName(aFileName);
-		
-		// Remove uninstalled file from our list
-		iInstalledFileList->Delete(pos);
-		iTimestamps.Remove(pos);
-		
-		// And reopen removed suites defined in other files
-		for (TInt i = 0; i < removedSuites->Count(); i++)
-			{
-			TInt suitePos = iSuites.FindLastSuite( (*removedSuites)[i] );
-			if (suitePos != KErrNotFound)
-				{
-				ReopenSuiteL(suitePos);
-				}
-			else
-			    {
-			    RemoveSuiteFromXmlL( (*removedSuites)[i] );
-			    }
-			}
-
-		CleanupStack::PopAndDestroy(removedSuites);
-		}
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::UpdateFileL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::UpdateFileL(const TDesC& aFileName, const TTime& aTimestam)
-	{
-	TInt pos;
-	if (iInstalledFileList->Find(aFileName, pos) == KErrNone)
-		{
-		// Get rid of out of date suites
-		iSuites.RemoveByFileName(aFileName);
-		iInstalledFileList->Delete(pos);
-		//iInstalledFileList->Compress();
-		iTimestamps.Remove(pos);
-		
-		// Instal suites form file name 
-		InstallFileL(aFileName, aTimestam);
-		}
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::GetSuites
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::GetSuitesL(const TDesC& aFileName, 
-		RPointerArray<CSuiteObject>& aSuiteArray)
-	{
-	TDriveList driveList;
-    TChar driveLetter;
-    User::LeaveIfError( iFs.DriveList( driveList ) );
-    for ( TInt driveNumber = EDriveZ; driveNumber >= EDriveA; driveNumber-- )
-        {
-        if ( driveList[driveNumber] )
-            {
-            User::LeaveIfError( iFs.DriveToChar( driveNumber, driveLetter ) );
-            RBuf file;
-            file.CleanupClosePushL();
-            file.CreateL( KMaxPath );
-            file.Append( driveLetter );
-            file.Append( KColen );
-            file.Append( iDirPath );
-            file.Append( aFileName );
-            CSuiteParser* suiteParser = CSuiteParser::NewL(file);
-            CleanupStack::PushL(suiteParser);
-            TRAP_IGNORE( suiteParser->GetSuitsArrayL( aSuiteArray ) );
-            CleanupStack::PopAndDestroy(suiteParser);
-            CleanupStack::PopAndDestroy( &file );
-            }
-        }
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::ReopenSuite
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::ReopenSuiteL(TInt aSuiteArrayPos)
-	{
-	RPointerArray<CSuiteObject> suiteArray;
-	CleanupResetAndDestroyPushL(suiteArray);
-	
-	TPtrC suiteName = iSuites[aSuiteArrayPos]->SuiteName();
-	TPtrC fileName = iSuites[aSuiteArrayPos]->FileName();
-	
-	// Get suite from suite file
-	GetSuitesL(fileName, suiteArray);
-	
-	// Find our suite in suites from specified file
-	CSuiteObject* neededSuite = NULL;
-	for (TInt j = 0; j < suiteArray.Count(); j++)
-		{
-		if (suiteArray[j]->SuiteName().Compare(suiteName) == KErrNone)
-			{
-			// Take ownership of Suite Object
-			neededSuite = suiteArray[j];
-			suiteArray.Remove(j);
-			break;
-			}
-		}
-	
-	if ( neededSuite )
-		{
-		// Replace Suite Object in suiteArray
-		delete iSuites[aSuiteArrayPos];
-		iSuites[aSuiteArrayPos] = neededSuite;
-		}
-	else
-		{
-		// Must be some error, delete that suite
-		delete iSuites[aSuiteArrayPos];
-		iSuites.Remove( aSuiteArrayPos );
-		}
-	
-	CleanupStack::PopAndDestroy(&suiteArray);
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::GetMenuSuitesL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::GetMenuSuitesL( 
-		RArray<TMenuItem>& aItemArray, 
-		const TDesC& aAttrName, 
-		const TDesC& aAttrValue )
-    {
-    TInt root( 0 );
-    iEng.RootFolderL( root );
-    TMenuSrvTypeAttrFilter suiteFilter;
-    suiteFilter.SetType( KMenuTypeSuite() );   
-    suiteFilter.SetAttr( aAttrName, aAttrValue );
-    iEng.GetItemsL( aItemArray, root, &suiteFilter, ETrue );
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::AddSuiteL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::AddSuiteL( const TPtrC& aSuiteName )
-    {
-    RArray<TMenuItem> mcsItems; 
-    CleanupClosePushL( mcsItems );
-    GetMenuSuitesL( mcsItems, KMenuAttSuiteName(), aSuiteName );
-    
-    if( mcsItems.Count() == KErrNone )
-        {
-        AddSuiteToXmlL( aSuiteName );
-        }
-    else
-        {
-        UpdateItemsL( mcsItems );
-        }
-    CleanupStack::PopAndDestroy(&mcsItems);
-    }
-
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::AddSuiteL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::RemoveSuiteFromXmlL( const TPtrC& aSuiteName )
-    {
-    RArray<TMenuItem> mcsItems; 
-    CleanupClosePushL( mcsItems );
-    GetMenuSuitesL( mcsItems, KMenuAttSuiteName(), aSuiteName );
-
-    for( TInt i( 0 ); i < mcsItems.Count(); i++ )
-        {
-        UpdateSuiteInXmlL( mcsItems, i );
-        }
-    
-    CleanupStack::PopAndDestroy(&mcsItems);
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::UpdateSuiteInXmlL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::UpdateSuiteInXmlL( 
-		RArray<TMenuItem> & aMcsItems, TInt aIndex )
-	{
-	TBool dummy(EFalse);
-	TPtrC val(KNullDesC);
-	if( iEng.ObjectL(aMcsItems[aIndex].Id()).
-			FindAttribute( KMenuAttSuiteAdded, val, dummy ) )
-		{
-		if ( val.Compare(KMenuTrue) == KErrNone )
-			{
-			iEng.RemoveL(aMcsItems[aIndex].Id());
-			}
-		else if ( val.Compare(KMenuFalse) == KErrNone )
-			{
-			iEng.ModifiableObjectL(aMcsItems[aIndex].Id()).
-				RemoveAttribute( KMenuAttSuiteAdded );
-			}
-		}
-	}
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::RunMenuEngOperationL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::RunMenuEngOperationL()
-    {
-    if ( iEvent & EInstOpInstall )
-        {
-        // Add new suites
-        AddNew();
-        }
-    else if ( ( iEvent & EInstOpUninstall ) )
-        {
-        // Remove old suites, andd new if needed (stub sis case)
-        RemoveOld();
-        AddNew();
-        }
-    else if( ( iEvent & EInstOpRestore ) )
-    	{
-        AddNew();
-        ScanSuitesL();
-    	}
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::CompletedMenuEngOperation
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::CompletedMenuEngOperation( TInt /*aErr*/ )
-    {
-    
-    }
-// ---------------------------------------------------------
-// CMcsSuiteHandler::AddSuiteToXmlL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::AddSuiteToXmlL( const TPtrC& aSuiteName )
-    {
-    TInt root( 0 );
-    iEng.RootFolderL( root );
-    
-    CMenuEngObject* obj = iEng.NewObjectL( KMenuTypeSuite );
-    CleanupStack::PushL( obj );
-    obj->SetAttributeL( KMenuAttSuiteName, aSuiteName, EFalse );
-    obj->SetAttributeL( KMenuAttSuiteAdded, KMenuTrue, EFalse );
-    iEng.AddL( *obj, root, 0 );
-    CleanupStack::Pop( obj );
-    }
-
-// ---------------------------------------------------------
-// CMcsSuiteHandler::UpdateItemsL
-// ---------------------------------------------------------
-//
-void CMcsSuiteHandler::UpdateItemsL( 
-    const RArray<TMenuItem>& aItemArray )
-    {
-    for( TInt i( 0 ); i < aItemArray.Count(); ++i )
-        {
-        TPtrC val(KNullDesC);
-        TBool dummy( EFalse );
-        iEng.ObjectL( aItemArray[i].Id() ).
-            FindAttribute( KMenuAttSuiteAdded, val, dummy );
-        if( val.Compare( KMenuTrue ) != KErrNone )
-            {
-            iEng.ModifiableObjectL( aItemArray[i].Id() ).
-                        SetAttributeL( KMenuAttSuiteAdded, KMenuFalse, EFalse);
-            }
-        else
-        	{
-        	iEng.ModifiableObjectL( aItemArray[i].Id() ).
-        	            SetAttributeL( KMenuAttSuiteAdded, KMenuTrue, EFalse);
-        	}
-        }
-    }
-