camerauis/cameraapp/generic/src/CamDriveChangeNotifier.cpp
changeset 0 1ddebce53859
child 20 38fb6f7eacd5
--- /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    <pathinfo.h>
+
+#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