/** Copyright (c) 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:**/#ifndef __MENUSRVFOLDERSCANNER_H__#define __MENUSRVFOLDERSCANNER_H__#include <e32base.h>#include <apgcli.h>#include <apgnotif.h>#include <cenrepnotifyhandler.h> #include "menuengoperation.h"#include "menuengfilter.h"#include "mcsfreespaceobserver.h"// FORWARD DECLARATIONclass CMenuEng;class TMenuItem;class CMenuSrvMmcHistory;class CRepository;class CCenRepNotifyHandler;/*** Folder scanner.* Using AppArc application information, keeps menu application* items ("menu:application") up-to-date.** Operation is asynchronous (because AppArc startup is asynchronous):* 1. ConstructL(): invokes iApaLsSession to build app list (async).* 2. RunL(): App list is complete, this object schedules itself to Engine.* 3. RunMenuEngOperationL(): The operation is executed by the engine.* 4. HandleAppListEvent(): change in app list, go back to step 2.** App scanning does the following:* - Applications present in the system but not appearing in the menu are added* to the appropriate folder.* - Java apps should appear / disappear.* - Hide hidden applications, show non-hidden applications (flag "hidden").* - Hide / show MMC-related items, according to whether MMC is present or not* (flag "missing"). Keep an MMC history, purge old MMC-based menu items* (== missing menu items whose MMC card has not been seen for long).* - Observing AppArc (and MMC, and Java, etc etc) to keep the menu data up* to date continuously.*/NONSHARABLE_CLASS( CMenuSrvFolderCrNotifier ): public CActive, public MMenuEngOperation, public MCenRepNotifyHandlerCallback, MMcsFreeSpaceObserver {public: // Constructor /** * Destructor. */ virtual ~CMenuSrvFolderCrNotifier(); /** * Two-phased constructor. * @param aEng Engine. */ static CMenuSrvFolderCrNotifier* NewL( CMenuEng& aEng );private: // Constructors and destructor /** * Constructor. * @param aEng Engine. */ CMenuSrvFolderCrNotifier( CMenuEng& aEng ); /** * Second phased constructor. */ void ConstructL();private: // from CActive /** * Request completed, schedule engine operation. */ void RunL(); /** * Cancel request. */ void DoCancel(); /** * Error handling: ignore error. * @param aErr Error code. */ TInt RunError( TInt aError );private: // from MMcsFreeSpaceObserver /** * Handle Free Space Event. */ void HandleFreeSpaceEventL();private: // from MMenuEngOperation /** * Execute engine operation: * Do the application scan and update menu accordingly. */ void RunMenuEngOperationL(); /** * Error handling: ignore error. * @param aErr Error code. */ void CompletedMenuEngOperation( TInt aErr ); /** * Notifies engine with events * @param aNewHiddenFolder nome of a folder. */ void NotifyEngineL( const TDesC& aFolder ); /** * Compares arrays and sends notification to engine abaut differences * @param aLeftArray array with folders names. * @param aRightArray array with folders names. */ void NotifyEngineL( const RArray<TPtrC>& aLeftArray, const RArray<TPtrC>& aRightArray ); /** */ void HandleNewCrHiddenFoldersL( const TDesC& aNewHiddenFolder );private: // from MCenRepNotifyHandlerCallback /** * Called if one of CR keys has changed * @param aId Id of the key that has changed. * @param aNewValue The new value of the key. */ void HandleNotifyString( TUint32 aKey, const TDesC16& aNewValue );private: // new methods /** */ void ParseHiddenFoldersL( const TDesC& aHiddenFolders, RArray<TPtrC>& aHiddenFoldersArray );private: // data CMenuEng& iEng ; ///< Engine. RFs iFs; ///< File Server Session. Own. /* * Central repository session */ CRepository* iCenRepSession; /* *Central repository change handler for Control Panel Hidden Folders */ CCenRepNotifyHandler* iCenRepNotifyHandlerCPHiddenFolders; TBool iOpStatus; /* * Free Space observer. */ CMcsFreeSpaceObserver* iFreeSpaceObserver; /* * Old value from central repository. */ RBuf iHiddenCRFolders; /* * New value from central repository. */ RBuf iNewHiddenCRFolders; };#endif // __MENUSRVFOLDERSCANNER_H__