diff -r 000000000000 -r 1ddebce53859 camerauis/cameraapp/generic/src/CamDriveChangeNotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/CamDriveChangeNotifier.cpp Thu Jan 07 16:18:56 2010 +0200 @@ -0,0 +1,264 @@ +/* +* 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 + +#include "CamDriveChangeNotifier.h" +#include "camlogging.h" +#include "CamUtility.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDiskChangeListener::NewL +// ----------------------------------------------------------------------------- +// +CCamDriveChangeNotifier::CCamDiskChangeListener* + CCamDriveChangeNotifier::CCamDiskChangeListener::NewLC( + RFs& aFs, + TDriveNumber aDrive, + MCamDriveChangeNotifierObserver::TCamDriveChangeType aType, + CCamDriveChangeNotifier& aObserver ) + { + PRINT( _L( "Camera => CCamDiskChangeListener::NewLC" ) ); + + CCamDiskChangeListener* self = + new( ELeave ) CCamDiskChangeListener( aFs, aDrive, aType, aObserver ); + CleanupStack::PushL( self ); + + PRINT( _L( "Camera <= CCamDiskChangeListener::NewLC" ) ); + return self; + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDiskChangeListener::~CCamDiskChangeListener +// ----------------------------------------------------------------------------- +// +CCamDriveChangeNotifier::CCamDiskChangeListener::~CCamDiskChangeListener() + { + PRINT( _L( "Camera => CCamDiskChangeListener::~CCamDiskChangeListener" ) ); + Cancel(); + PRINT( _L( "Camera <= CCamDiskChangeListener::~CCamDiskChangeListener" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDiskChangeListener::CCamDiskChangeListener +// ----------------------------------------------------------------------------- +// +CCamDriveChangeNotifier::CCamDiskChangeListener::CCamDiskChangeListener( + RFs& aFs, + TDriveNumber aDrive, + MCamDriveChangeNotifierObserver::TCamDriveChangeType aType, + CCamDriveChangeNotifier& aObserver ) + : CActive( CActive::EPriorityIdle ), + iFs( aFs ), + iDrive( aDrive ), + iType( aType ), + iObserver( aObserver ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDiskChangeListener::Start +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::CCamDiskChangeListener::Start() + { + PRINT( _L( "Camera => CCamDiskChangeListener::Start" ) ); + if ( !IsActive() ) + { + PRINT( _L( "Camera <> CCamDiskChangeListener::Start SetActive()" ) ); + + // Start listening for change events + iFs.NotifyChange( ENotifyDisk, iStatus ); + SetActive(); + } + PRINT( _L( "Camera <= CCamDiskChangeListener::Start" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDiskChangeListener::Stop +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::CCamDiskChangeListener::Stop() + { + PRINT( _L( "Camera => CCamDiskChangeListener::Stop" ) ); + Cancel(); + PRINT( _L( "Camera <= CCamDiskChangeListener::Stop" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier:::CCamDiskChangeListener::DoCancel +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::CCamDiskChangeListener::DoCancel() + { + PRINT( _L( "Camera => CCamDiskChangeListener::DoCancel" ) ); + iFs.NotifyChangeCancel(); + PRINT( _L( "Camera <= CCamDiskChangeListener::DoCancel" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDiskChangeListener::RunL +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::CCamDiskChangeListener::RunL() + { + PRINT2( _L( "Camera => CCamDiskChangeListener::RunL iType: %d, iStatus: %d" ), iType, iStatus.Int() ); + TInt ret = KErrNone; + + if ( iStatus == KErrNone ) + { + ret = iObserver.NotifyChangeL( iType ); + + if( ret == KErrNone ) + { + Start(); + } + } + else if ( iStatus == KErrNotReady ) + { + // Give other threads chance to run + User::After( 0 ); + Start(); + } + + PRINT( _L( "Camera <= CCamDiskChangeListener::RunL" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CCamDriveChangeNotifier +// ----------------------------------------------------------------------------- +// +CCamDriveChangeNotifier::CCamDriveChangeNotifier( + RFs& aFs, + MCamDriveChangeNotifierObserver& aObserver ) + : iObserver( aObserver ), + iFs( aFs ) + { + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::NewL +// ----------------------------------------------------------------------------- +// +CCamDriveChangeNotifier* CCamDriveChangeNotifier::NewL( + RFs& aFs, + MCamDriveChangeNotifierObserver& aObserver ) + { + PRINT( _L( "Camera => CCamDriveChangeNotifier::NewL" ) ); + + CCamDriveChangeNotifier* self = + new( ELeave ) CCamDriveChangeNotifier( aFs, aObserver ); + + self->iListeners.AppendL( CCamDiskChangeListener::NewLC( self->iFs, EDriveE, + MCamDriveChangeNotifierObserver::EDriveMount, *self ) ); + + self->iListeners.AppendL( CCamDiskChangeListener::NewLC( self->iFs, EDriveD, + MCamDriveChangeNotifierObserver::EDriveMount, *self ) ); + + CleanupStack::Pop(); // listener + CleanupStack::Pop(); // listener 2 + + self->StartMonitoring(); + + PRINT( _L( "Camera <= CCamDriveChangeNotifier::NewL" ) ); + return self; + } + + +// Destructor +CCamDriveChangeNotifier::~CCamDriveChangeNotifier() + { + PRINT( _L( "Camera => CCamDriveChangeNotifier::~CCamDriveChangeNotifier" ) ); + CancelMonitoring(); + iListeners.ResetAndDestroy(); + PRINT( _L( "Camera <= CCamDriveChangeNotifier::~CCamDriveChangeNotifier" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::StartMonitoring +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::StartMonitoring() + { + PRINT( _L( "Camera => CCamDriveChangeNotifier::StartMonitoring" ) ); + + for ( TInt i = iListeners.Count(); --i >= 0; ) + { + iListeners[i]->Start(); + } + + PRINT( _L( "Camera <= CCamDriveChangeNotifier::StartMonitoring" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::CancelMonitoring +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::CancelMonitoring() + { + PRINT( _L( "Camera => CCamDriveChangeNotifier::CancelMonitoring" ) ); + + for ( TInt i = iListeners.Count(); --i >= 0; ) + { + iListeners[i]->Stop(); + } + + PRINT( _L( "Camera <= CCamDriveChangeNotifier::CancelMonitoring" ) ); + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::NotifyChangeL +// ----------------------------------------------------------------------------- +// +TInt CCamDriveChangeNotifier::NotifyChangeL( + MCamDriveChangeNotifierObserver::TCamDriveChangeType aType ) + { + PRINT( _L( "Camera => CCamDriveChangeNotifier::NotifyChangeL" ) ); + TInt ret = iObserver.DriveChangeL( aType ); + if ( ret == KErrNone && aType == + MCamDriveChangeNotifierObserver::EDriveDismount ) + { + PRINT( _L("Camera <> iFs.AllowDismount( EDriveE )") ) + iFs.AllowDismount( EDriveE ); + PRINT( _L("Camera <> iFs.AllowDismount( EDriveD )") ) + iFs.AllowDismount( EDriveD ); + } + + PRINT( _L( "Camera <= CCamDriveChangeNotifier::NotifyChangeL" ) ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CCamDriveChangeNotifier::SendAllowDismount +// ----------------------------------------------------------------------------- +// +void CCamDriveChangeNotifier::SendAllowDismount() + { + PRINT( _L( "Camera => CCamDriveChangeNotifier::SendAllowDismount" ) ); + iFs.AllowDismount( EDriveE ); + iFs.AllowDismount( EDriveD ); + StartMonitoring(); + PRINT( _L( "Camera <= CCamDriveChangeNotifier::SendAllowDismount" ) ); + } +// End of File