diff -r 7333d7932ef7 -r 8b7f4e561641 installationservices/swi/source/daemon/drivewatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/installationservices/swi/source/daemon/drivewatcher.h Wed Sep 01 12:22:02 2010 +0100 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + +/** + @file + @internalComponent + @released +*/ + +#ifndef __DRIVEWATCHER_H__ +#define __DRIVEWATCHER_H__ + +#include +#include + +namespace Swi +{ + +/** + * Observer interface called whenever a media change is detected. + */ +class MDriveObserver + { +public: + /// Enumeration indicating whether a card was inserted or removed + enum TChangeType { EMediaInserted, EMediaRemoved }; + + /** + * This function is called to indicate a media change has occurred. + * + * @param aChangeType EInserted to indicate media has been inserted, + * or ERemoved to indicate media has been removed. + */ + virtual void MediaChangeL(TInt aDrive, TChangeType aChangeType)=0; + }; + +/** + * This active object waits for an indication that the media has changed, + * and then notifies its observer. + */ +class CDriveWatcher : public CActive + { +public: + static CDriveWatcher* NewL(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,TInt aPriority = EPriorityStandard); + static CDriveWatcher* NewLC(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,TInt aPriority = EPriorityStandard); + + ~CDriveWatcher(); + + TInt Drive() const; +private: + CDriveWatcher(RFs& aFs, TInt aDrive, MDriveObserver& aObserver, TInt aPriority); + + void ConstructL(); + +// from CActive + void DoCancel(); + void RunL(); + + /// Set up change notification. + void WaitForChangeL(); + + /** + * Notifies the observer of the appropriate media change depending on whether + * media is now present on the drive we're currently watching. + */ + void NotifyMediaChange(); + + /** + * Determines if the media is present in the drive we are currently watching. + * + * @return ETrue if the media is present, EFalse otherwise. + */ + TBool IsMediaPresentL(); + +private: + /// Not owned by this class + RFs& iFs; + + /// Drive number we are watching + TInt iDrive; + + /// Observer to notify of changes + MDriveObserver& iObserver; + }; + +// inline functions from CDriveWatcher + +inline TInt CDriveWatcher::Drive() const + { + return iDrive; + } + +} //namespace Swi + +#endif // #ifndef __DRIVEWATCHER_H__ +