menucontentsrv/srvinc/mcsrunningappshandler.h
changeset 0 79c6a41cd166
child 22 1b207dd38b72
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menucontentsrv/srvinc/mcsrunningappshandler.h	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,275 @@
+/*
+* 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:  This class maintains a list of the running apps, and listen 
+*  for changes in the running apps. It calls the observer if there is such a 
+*  change.
+*
+*
+*/
+
+
+#ifndef __MCSRUNNINGAPPSHANDLER_H__
+#define __MCSRUNNINGAPPSHANDLER_H__
+
+#include <e32base.h>
+#include <e32property.h>
+#include <w32std.h>
+
+#include "menuengoperation.h"
+#include "menusrvengutils.h"
+
+//Forward declatations
+class CMenuEng;
+class CMcsCacheHandler;
+class CMcsRunningAppsWgMonitor;
+class CMcsRunningAppsFswMonitor;
+class CMcsRunningAppsHiddenAttrScanner;
+class CMcsRunningAppsAddRemoveHandler;
+
+/**
+ * Interface for updating RunningApps list stored in CMcsRunningAppsHandler class
+ *
+ * @since S60 v3.2
+ */
+class MMcsRunningAppsHandler
+    {
+public:
+	enum TArrayDataType
+    	{
+    	ERunningApps,
+    	EFswHiddenApps,
+    	EHiddenApps
+    	};
+    /*
+	 * Called by HiddenAttr scanner, FSW monitor or WindowsGroup 
+	 * Monitor.
+     * @param aArray an array containing UIDs of running, hidden or
+     * 	fsw apps  
+     * @param aType type of data stored in aArray   
+	 */
+    virtual void HandleListUpdateL(const RArray<TUid>& aArray, 
+    		TArrayDataType aType ) = 0;
+    
+	/*
+	 * Called by AddRemoveHandler
+	 * @param aFolder id of folder for which the method was invoked
+	 */
+    virtual void HandleAddRemoveRunningAppL( TInt aFolder ) = 0;
+    
+    };
+
+/*
+ *  RunningApps Handler.
+ *  @lib mcsmenu.lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CMcsRunningAppsHandler ): public CBase, MMcsRunningAppsHandler
+    {
+    public:
+
+	/**
+	*   Factory method.
+	*/
+    static CMcsRunningAppsHandler* NewL( 
+		CMenuEng& aEng,
+    	CMcsCacheHandler& aCacheHandler );
+
+    /**
+    *   Destructor.
+    */
+    ~CMcsRunningAppsHandler();
+    
+    /**
+     * Called by EngineEvents method
+     * @param aFolder folder id
+     * @param aEvents events
+     */
+    void EngineEventsL( TInt aFolder, TInt aEvents );
+
+    /**
+     * Called by CMenuSrvEng class object
+     * @param aFolder folder id
+     * @param aEvents events
+     */
+    void EngineEvents( TInt aFolder, TInt aEvents );
+    
+    /**
+     * Fills aArray with UIDs of running apps
+     * @param aArray array to be filled with UIDs of running apps
+     */
+    void GetRunningAppsL( RArray<TUid>& aArray );
+
+    /**
+     * Returns running status of an item
+     * @param aItemId id of the item
+     * @return running status of an item
+     */    
+    TBool GetRunningStatusL( TInt aItemId );
+
+    
+// from MMcsRunningAppsHandler
+    
+    /*
+	 * Called by HiddenAttr scanner, FSW monitor or WindowsGroup 
+	 * Monitor.
+     * @param aArray an array containing UIDs of running, hidden or
+     * 	fsw apps  
+     * @param aType type of data stored in aArray   
+	 */
+    void HandleListUpdateL(const RArray<TUid>& aArray, TArrayDataType aType );
+
+	/*
+	 * Called by AddRemoveHandler
+	 * @param id of folder for which the method was invoked
+	 */
+	void HandleAddRemoveRunningAppL( TInt aFolder );    
+
+private:
+	/**
+	*   Constructor.
+	*/
+	CMcsRunningAppsHandler( 
+		CMenuEng& aEng, 
+	    CMcsCacheHandler& aCacheHandler );
+
+	/**
+	 * 2nd phase constructor
+	 */
+	void ConstructL();
+
+    /**
+    * Called by HandleListUpdateL
+    * @param aArray array with UIDs of running apps
+    */
+	void HandleRunningAppsChangedL( const RArray<TUid>& aArray );
+
+    /**
+    * Called by HandleListUpdateL
+    * @param aArray array with UIDs of FSW hidden apps
+    */
+	void HandleFswHiddenAppsChangedL( const RArray<TUid>& aArray );
+
+    /**
+    * Called by HandleListUpdateL
+    * @param aArray array with UIDs of hidden apps
+    */
+	void HandleHiddenAppsChangedL(const RArray<TUid>& aArray );
+	
+	/**
+	 * Sends AttributeChange notification for item and parents of the item
+	 * it it is necessary, it is also responsible for removing data from cache
+	 * if attribute value cahnged
+	 * @param aId id of item with changed running status attribute
+	 */
+	void HandleNotificationL( TInt aId );
+
+	/**
+	 * Sends AttributeChange notification for items and parents of items with
+	 * given uid, it is also responsible for removing data from cache
+	 * if attribute value has changed
+	 * @param aAppUid uid of items with changed running status attribute
+	 */
+	void HandleNotificationL( TUid aAppUid );
+	
+	/**
+	 * Gets list of items with secified uid
+	 * @param aAppUid items uid
+	 * @return KErrNotFound if no item was found KErrNone if succesfull
+	 */
+	TInt GetItemsListL( TUid aAppUid, RArray<TMenuItem>& aItemArray );
+
+	/*
+	 * Updates array containing folders with running status
+	 * @param aFolderId id of a folder
+	 * @param aNewRunningStatus current running status
+	 */
+	void UpdateFolderRunningStatusL( TInt aFolderId, TBool aNewRunningStatus );
+
+	
+	/**
+	 * Updates array containing folders with running status.
+	 * It is called at startup and it scans all folders
+	 */
+	void UpdateFoldersRunningStatusL( );
+	
+	/**
+	 * Gets running status for CMenuEngObject
+	 * @param aEngObj object to be checked
+	 * @return running status of an object
+	 */
+	TBool GetRunningStatusL( const CMenuEngObject& aEngObj );
+
+	/**
+	 * Gets previous Folder running status
+	 * @param aId id of the folder
+	 * @return previous running status of a folder (stored in 
+	 * 	iRunningFolderStatus array )
+	 */
+	TBool GetFolderPreviousRunningStatusL( TInt aId );
+
+	
+	/**
+	 * Gets current folder running status
+	 * @param aId id of the folder
+	 * @return running status of a folder
+	 */
+	TBool GetFolderRunningStatusL( TInt aId );
+	
+	/**
+	 * Gets current application running status
+	 * @param aUid UID of an application
+	 * @return running status of an application
+	 */
+	TBool GetAppRunningStatusL( TUid aUid );
+
+private:    
+
+    CMenuEng& iEng ; ///< Engine. not own
+
+    /** not own
+    */
+    CMcsCacheHandler& iCacheHandler;
+    
+    /*
+    * own
+    */
+    CMcsRunningAppsWgMonitor* iWindowGroupMonitor;
+
+    /*
+    * own
+    */
+    CMcsRunningAppsFswMonitor* iFswMonitor;
+    
+    /*
+     * own
+     */
+    CMcsRunningAppsHiddenAttrScanner* iHiddenAttrScanner;    
+    
+    /*
+     * own 
+     */
+    CMcsRunningAppsAddRemoveHandler* iAddRemoveHandler;
+    
+    /*
+    * own
+    */
+    RArray<TRunningAppsAttr> iRunningApps;
+    
+    /*
+    * own
+    */
+    RArray<TInt> iRunningFolderStatus;
+    };
+	
+#endif // __MCSRUNNINGAPPSHANDLER_H__