locationtriggering/ltserver/ltserverlogic/inc/lbtappchangehandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 17:05:00 +0300
branchRCL_3
changeset 10 d6e4203b7ebe
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201015 Kit: 201017

/*
* Copyright (c) 2006 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 header file describes the class reposnible for handling
*              : removal of applications
*
*/


#ifndef C_LBTAPPCHANGEHANDLER_H
#define C_LBTAPPCHANGEHANDLER_H

#include <e32base.h>
#include <apgnotif.h>
#include "lbttriggerchangeobserver.h"

// FORWARD DECLARATION
class TApaAppInfo;
class RApaLsSession;
class CApaAppListNotifier;
class CLbtContainer;
class CLbtContainerTriggerEntry;
class CLbtCleanupHandler;
class MLbtServerLogicTriggerChangeObserver;
struct TLbtAppInfo;

/**
 *
 */
class CLbtAppChangeHandler : public CActive,
							 public MApaAppListServObserver,
							 public MLbtContainerChangeEventObserver
							 
	{	
	public:
		/**
	     * Constructs a new instance of App Change handler.
	     *
	     * @return The new instance of App Change handler object.
	     */
		static CLbtAppChangeHandler* NewL(CLbtContainer& aContainer, CLbtCleanupHandler& iCleanupHandler,
		                                  MLbtServerLogicTriggerChangeObserver& aTriggerChangeObserver);		
		
		/**
	     * Destructor.
	     */
		~CLbtAppChangeHandler();
		
		/**
		 * Start listening to application un-installation events
		 *
		 */
		void StartListeningL();
		
		/**
		 * Stops listening to application un-installation events
		 *
		 */
		void StopListening();
		
	private: // New functions
		/**
	     * C++ constructor
	     */
		CLbtAppChangeHandler(CLbtContainer& aContainer, CLbtCleanupHandler& iCleanupHandler,
		                     MLbtServerLogicTriggerChangeObserver& aTriggerChangeObserver);
		
		/**
	     * Symbian 2nd phase of construction
	     */
		void ConstructL();
		
		/**
		 * Handles removal of an application that resided on the MMC. The function 
		 * checks if same MMC card is still inserted. If it still inserted it implies
		 * that the application has been un-installed and hence takes appropriate action.
		 * If the MMC is not present in its slot then it means that the MMC card is 
		 * removed for the time being and may be inserted again, based on which it takes
		 * appropriate action
		 *
		 * @param aAppInfo information of the application removed
		 */
		void HandleMMCApplicationRemovalL();
		
		/**
		 * Handles un-installation of an application.
		 *
		 * @param aAppInfo information of the application un-installed
		 */
		void HandleApplicationUninstallationL();
		
		
		/**
		 * Checks if MMC is present in its slot
		 * 
		 * @return ETrue if MMC is present EFlase otherwise
		 */
		TBool IsMemoryCardPresent();
		
		/**
         * Get Memory card character
         */
        void MemoryCardChar();        
		
		/**
		 * Finds the a particular element in the array. The search is based on the 
		 * UID in the application info. If the application is not present then the
		 * function return KErrNotFound
		 *
		 * @param aArray the array in which the element needs to be searched
		 * @param aElement the element which needs to be searched for
		 */ 
		TInt FindElementInArray(RArray<TLbtAppInfo>& aArray, TLbtAppInfo& aElement);
		
		/**
		 * Handles list notification event when notification is for addition of an
		 * application
		 */
		void HandleAppListAdditionEvent(RArray<TLbtAppInfo>& aNewAppList);
		
		/**
		 * Handles list notification event when notification is for removal of an
		 * application		 
		 */
		void HandleAppListRemovalEvent(RArray<TLbtAppInfo>& aNewAppList);
		
		
		/**
		 * Validates the triggers of the applications present in iAppList
		 */
		void SetValidTriggersOfApplicationsL();
		
		
		
	public: // from MLbtContainerChangeEventObserver
	    void TriggerStoreChanged( RArray<TLbtTriggerId>& aTriggerIds,
                                  TLbtTriggerEventMask aEventMask,
                                  TLbtContainerChangedAreaType aAreaType,
                                  RArray<TUid>& aManagerUids );

	private: // From CActive
		
		void DoCancel();
		
		void RunL();
		
		TInt RunError(TInt aError);
		
	
	private: /// from MApaAppListServObserver
		/**
	     * Handles notification from app list observer when ever an application is 
	     * installed or uninstalled
	     *
	     */
		void HandleAppListEvent(TInt aEvent);
		
		/**
		 * Lists triggers for which apps iAppList in are the 
		 * startup process
		 */
		void ListTriggersOfStartupProcessL();
		
		/**
		 * Deletes triggers for which apps iAppList in are the 
		 * startup process
		 */
		void DeleteTriggersOfStartupProcessL();

	private: // data members
	
		
		// Reference to the container
		CLbtContainer& iContainer;
		
		// Reference to cleanup handler
        CLbtCleanupHandler& iCleanupHandler;
		        
		// Reference to MLbtServerLogicTriggerChangeObserver
		MLbtServerLogicTriggerChangeObserver& iTriggerChangeObserver;
		
		// Session with the application architecture framework
        RApaLsSession iAppArcSession;
        
        // Pointer to application scanner
        CApaAppListNotifier* iAppListNotifier;
		        
		// Array to hold the currently installed applications on the system
        RArray<TLbtAppInfo> iCurrentInstalledApps;
		        
		// The async operation in progress.
		TInt iOperation;
		
		// Array of pointers to container trigger entries
		RPointerArray<CLbtContainerTriggerEntry> iTriggerEntries;
		
		// Array to store the list of app removed
		RArray<TLbtAppInfo> iAppList;
	
		// Operation id for calls to container. Needed for any cancellation
		TInt iOpId;
		
		// External Memory card drive character
		TBuf<2> iMMCDriveChar; // drive and colon
	};

#endif // C_LBTAPPREMOVALHANDLER_H