--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/memorycard/sysapdriveejecthandler.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2007-2009 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: Drive eject handler implementation
+ *
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include "sysapdriveejecthandler.h"
+#include "sysapdrivelist.h"
+#include "SysApAppUi.h"
+#include "SysAp.hrh"
+
+// CONSTANTS
+const TInt KSecondsToMicro = 1000000; // seconds to microseconds multiplier
+
+// ============================ MEMBER FUNCTIONS =============================
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::CSysApDriveEjectHandler
+// ---------------------------------------------------------------------------
+//
+CSysApDriveEjectHandler* CSysApDriveEjectHandler::NewL(
+ CSysApDriveList& aSysApDriveList,
+ CSysApAppUi& aSysApAppUi,
+ RFs& aFs )
+ {
+ CSysApDriveEjectHandler* self = new ( ELeave ) CSysApDriveEjectHandler(
+ aSysApDriveList, aSysApAppUi );
+ CleanupStack::PushL( self );
+ self->ConstructL( aFs );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::CSysApDriveEjectHandler
+// ---------------------------------------------------------------------------
+//
+CSysApDriveEjectHandler::CSysApDriveEjectHandler(
+ CSysApDriveList& aSysApDriveList,
+ CSysApAppUi& aSysApAppUi ) :
+ iSysApDriveList( aSysApDriveList ),
+ iSysApAppUi( aSysApAppUi ),
+ iDriveToEject( KErrNotFound )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveEjectHandler::ConstructL( RFs& aFs )
+ {
+ iDiskNotifyHandler = CDiskNotifyHandler::NewL( *this, aFs );
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::~CSysApDriveEjectHandler
+// ---------------------------------------------------------------------------
+//
+CSysApDriveEjectHandler::~CSysApDriveEjectHandler()
+ {
+ TRACES( RDebug::Print(
+ _L( "CSysApDriveEjectHandler::~CSysApDriveEjectHandler" ) ) );
+
+ delete iDiskNotifyHandler;
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::StartEject
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveEjectHandler::StartEject()
+ {
+ TBool isOngoing( iDriveToEject != KErrNotFound );
+
+ TRACES( RDebug::Print(
+ _L( "CSysApDriveEjectHandler::StartEject: ongoing: %d" ),
+ isOngoing ) );
+
+ if ( isOngoing )
+ {
+ return;
+ }
+ TRAPD( err, DoStartEjectL() );
+ if ( err != KErrNone )
+ {
+ StopEject( err );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::DoStartEjectL()
+// ---------------------------------------------------------------------------
+//
+TBool CSysApDriveEjectHandler::DoStartEjectL()
+ {
+ CSysApDriveList::TDriveEjectType ejectType;
+ iDriveToEject = iSysApDriveList.DriveToEject( ejectType );
+
+ TRACES( RDebug::Print(
+ _L( "CSysApDriveEjectHandler::DoStartEjectL: drive: %d" ),
+ iDriveToEject ) );
+
+ if ( iDriveToEject == KErrNotFound )
+ {
+ return EFalse;
+ }
+
+ iSysApAppUi.ShowEjectWaitNoteL( iDriveToEject );
+ User::LeaveIfError( iDiskNotifyHandler->StartDismount(
+ iDriveToEject, KMaxExitTimeInHotSwap * KSecondsToMicro ) );
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::CompleteDismount
+// ---------------------------------------------------------------------------
+//
+TBool CSysApDriveEjectHandler::CompleteDismount( TInt aDrive )
+ {
+ TRACES( RDebug::Print(
+ _L( "CSysApDriveEjectHandler::CompleteDismount: aDrive: %d" ),
+ aDrive ) );
+
+ if ( aDrive != KErrNotFound )
+ {
+ iSysApDriveList.ResetDriveToEject( aDrive );
+ }
+
+ TBool ret( EFalse );
+ TRAPD( err, ret = DoStartEjectL() );
+ if ( err != KErrNone )
+ {
+ StopEject( err );
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::StopEject
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveEjectHandler::StopEject( TInt aError )
+ {
+ if ( aError != KErrNone )
+ {
+ TRACES( RDebug::Print(
+ _L( "CSysApDriveEjectHandler::StopEject: error: %d" ),
+ aError ) );
+ }
+ // Ensure that the wait note without softkeys gets closed
+ iSysApAppUi.CancelWaitNote();
+ iSysApDriveList.ResetDrivesToEject();
+ iDriveToEject = KErrNotFound;
+ iDiskNotifyHandler->CancelStartedDismount();
+ }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveEjectHandler::HandleNotifyDismountFinished
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveEjectHandler::HandleNotifyDismountFinished(
+ TInt aError,
+ const TDismountFinishedEvent& aEvent )
+ {
+ (void)aError;
+ (void)aEvent;
+
+ TRACES( RDebug::Print(
+ _L( "CSysApDriveEjectHandler::HandleNotifyDismountFinished: error: %d drive: %d forced: %d" ),
+ aError, aEvent.iDrive, aEvent.iForcedDismount ) );
+
+ iDriveToEject = KErrNotFound;
+ iSysApAppUi.CancelWaitNote();
+
+ // Show dismount ready note
+ TBool dialogShown( EFalse );
+ TRAPD( err, dialogShown = iSysApAppUi.ShowMMCDismountedDialogL(
+ aEvent.iDrive, CSysApDriveList::EEjectFromMenu ) );
+ if ( err != KErrNone || !dialogShown )
+ {
+ StopEject( err );
+ }
+ }
+
+// End of File