voicerecorder/RecViewSrc/CVRRecViewModel.cpp
branchRCL_3
changeset 20 072a5fa0c63b
parent 19 2f5c9ee7098c
child 21 c6bafb5162d8
--- a/voicerecorder/RecViewSrc/CVRRecViewModel.cpp	Thu Aug 19 09:57:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2476 +0,0 @@
-/*
-* Copyright (c) 2002 - 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 class is the data model and state machine of the Recorder View.
-*     The state machine is defined by a VR_STATEMACHINE resource structure.
-*
-*/
-
-
-// INCLUDE FILES
-
-#include <bldvariant.hrh>
-#include <e32cmn.h>
-#include <ctsydomainpskeys.h>
-#include <UsbWatcherInternalPSKeys.h>
-#include <usbpersonalityids.h>
-#include <barsread.h>
-#include <eikenv.h>
-#include <eikappui.h>
-#include <avkon.rsg>
-#include <StringLoader.h>
-#include <bautils.h>
-#include <avkon.hrh>		// Key definitions
-#include <AknGlobalNote.h>
-#include <sendui.h>
-#include <AknLayoutDef.h>
-#include <AknUtils.h>
-#include <featmgr.h>
-#include <data_caging_path_literals.hrh>
-#include <CMessageData.h>
-
-#include <featmgr.h>	// Feature manager
-#include <SendUiConsts.h>          // Disable e-mail  
-#include "MessagingDomainCRKeys.h" // Disable e-mail variation flag
-
-#include <centralrepository.h> // link against centralrepository.lib
-#ifdef RD_MULTIPLE_DRIVE
-#include <driveinfo.h>
-#endif
-#include "VoiceRecorderInternalCRKeys.h"
-
-#include <voicerecorder.rsg>
-#include "CVRMemo.h"
-#include "TVRState.h"
-#include "CVRMdaRecorder.h"
-#include "VRConsts.h"
-#include "CVRSystemEventHandler.h"
-#include "CVRMediaRemovalMonitor.h"
-#include "VRUtils.h"
-#include "CVRRecViewModel.h"
-#include <csxhelp/vorec.hlp.hrh>
-
-#include "VRUSBStateHanlder.h"
-
-
-// CONSTANTS
-const TInt KAllowInCallRecording( 1 );
-
-// Shown if maximum recording time is not known
-_LIT( KVRBeforeFirstEstimateLabel, "--:--:--" );
-// MMS/High text is inserted here
-_LIT( placeForQuality, "%U" );
-
-
-// ================= MEMBER FUNCTIONS ========================================
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CVRRecViewModel
-// 
-// ---------------------------------------------------------------------------
-//
-CVRRecViewModel::CVRRecViewModel()
-	: iStateArray( 2 ),
-	iLabelSets( 2 ),
-	iPreviousCallState( EPSCTsyCallStateNone ),
-	iCanHandleCommands( ETrue ),
-	iCBAEnabled( ETrue ),
-	iIsDriveReady( ETrue )
-	{
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::~CVRRecViewModel
-// 
-// ---------------------------------------------------------------------------
-//
-CVRRecViewModel::~CVRRecViewModel()
-	{
-	// It might be possible to make this method leaving and put it
-	// somewhere else than destructor
-	SaveVolumeSettings();
-	iLabelSets.ResetAndDestroy();
-	iStateArray.Reset();
-
-	delete[] iLabelLayoutLinks;
-	delete iMemo;
-	delete iRecorder;
-	if ( iGlobalNote && iIsNoteLaunched )
-		{
-		// nothing much to do but ignore.
-		TRAP_IGNORE( iGlobalNote->CancelNoteL( iNoteId ) );
-		}
-
-	delete iGlobalNote;
-	
-	if (iCurrentCallHandler) 
-		{
-		delete iCurrentCallHandler;
-		}
-	delete iCurrentMMCEjectHandler;
-	
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ConstructFromResourceL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::ConstructFromResourceL( TResourceReader& aReader )
-	{
-
-	TRAP_IGNORE( iCurrentCallHandler = CVRSystemEventHandler::NewL() );
-	iCurrentCallHandler->Listen( KPSUidCtsyCallInformation, KCTsyCallState, 
-								 this );
-	//listen MMC eject
-	TInt driveRemovableMassStorage = VRUtils::GetRemovableMassStorageL();
-	iCurrentMMCEjectHandler = CVRMediaRemovalMonitor::NewL(driveRemovableMassStorage, CEikonEnv::Static()->FsSession(), this);
-
-	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
-		FeatureManager::FeatureSupported( 
-						KFeatureIdApplicationControllableAudioRouting ) )
-		{
-		ReadDefaultSpeakerL();
-		}
-	else
-		{
-		iIhfState = ETrue;
-		}
-
-	LoadVolumeSettingsL();
-   // Connecting and initialization:
-    CRepository* myRepSession = CRepository::NewLC( KCRUidVoiceRecorder );
-
-    // Get the values from the repository
-    User::LeaveIfError( myRepSession->Get( KVRDefaultAudioFormat, 
-    									   iVRAudioFormat ) );
-    									   
-    User::LeaveIfError( myRepSession->Get( KVRAllowInCallRecording, 
-    									   iVRAllowInCallRecording ) );
-    CleanupStack::PopAndDestroy( myRepSession ); 
-
-	iGlobalNote = CAknGlobalNote::NewL();
-
-	iMemo = new( ELeave ) CVRMemo;
-	iMemo->ConstructL( iVRAudioFormat );
-
-	TInt numLabelSets( aReader.ReadInt16() );
-	TInt i;
-
-	for ( i = 0; i < numLabelSets; i++ )
-		{
-		CDesCArray* labelSet;
-		TInt numLabels( aReader.ReadInt16() );
-
-		if ( numLabels > 0 )
-			{
-			// TResourceReader re-reads the length, have to rewind
-			aReader.Rewind( sizeof( TInt16 ) );
-			labelSet = aReader.ReadDesCArrayL();
-			}
-		else
-			{
-			// create an empty array "by hand",
-			// TResourceReader is not able to do this
-			labelSet = new( ELeave ) CDesCArrayFlat( 1 );
-			}
-
-		CleanupStack::PushL( labelSet );
-		iLabelSets.AppendL( labelSet );
-		CleanupStack::Pop( labelSet);
-		}
-
-	TInt linkCount( aReader.ReadInt16() );
-	iLabelLayoutLinks = new( ELeave ) TVRLabelLayoutLink[ linkCount ];
-	for ( i = 0; i < linkCount; i++ )
-		{
-		iLabelLayoutLinks[ i ].ReadFromResource( aReader );
-		}
-
-	TInt numUiStates( aReader.ReadInt16() );
-
-	TVRState uistate;
-	for ( i = 0; i < numUiStates; i++ )
-		{
-		uistate.ReadFromResource( aReader );
-		uistate.iId =  i;
-		iStateArray.AppendL( uistate );
-		}
-
-	iState = &iStateArray.At( 0 );
-
-	TInt numContexts( aReader.ReadInt16() );
-	for ( i = 0; i < numContexts; i++ )
-		{
-		TInt id( aReader.ReadInt8() );
-		TVRContext* context = &iContexts[ id ];
-		context->iValid = ETrue;
-		context->iInitialTransition.iCommandId = aReader.ReadUint8();
-		context->iInitialTransition.iNewState = aReader.ReadUint8();
-		context->iInitialTransition.iFunctionId = aReader.ReadUint8();
-		context->iInitialTransition.iValid = ETrue;
-
-
-		TInt numStates( aReader.ReadInt16() );
-		for ( TInt j = 0; j < numStates; j++ )
-			{
-			TInt id( aReader.ReadInt8() );
-			TVRContext::TState* state = &context->iStates[ id ];
-			state->iValid = ETrue;
-			TInt numTransitions( aReader.ReadInt16() );
-			__ASSERT_DEBUG( numTransitions <= KVRMaxTransitions,
-						User::Panic( KVRPanic, EPanicTooManyTransitions ) );
-
-			for ( TInt k = 0; k < numTransitions; k++ )
-				{
-				TVRContext::TTransition* trans = &state->iTransitions[ k ];
-				trans->iCommandId = aReader.ReadUint8();
-				trans->iNewState = aReader.ReadUint8();
-				trans->iFunctionId = aReader.ReadUint8();
-				trans->iValid = ETrue;
-				}
-			}
-		}
-
-	StringLoader::Load( iDateUsualWithZero, R_QTN_DATE_USUAL_WITH_ZERO );
-	StringLoader::Load( iTimeUsualWithZero, R_QTN_TIME_USUAL_WITH_ZERO );
-	StringLoader::Load( iTimeDuratLong,	R_QTN_TIME_DURAT_LONG );	
-	StringLoader::Load( iTimeDuratMinSecWithZero,
-										R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO );
-										
-										
-	
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ProcessKeyEventL
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::ProcessKeyEventL( const TKeyEvent& aKeyEvent,
-										 const TEventCode aType )
-	{
-	TBool retval( EFalse );
-	if ( aType != EEventKey )
-		{
-		return retval;
-		}
-
-	switch ( aKeyEvent.iCode )
-		{
-		case EKeyPhoneEnd:
-			{
-			TInt currentState( iCurrentCallHandler->StateL(KPSUidCtsyCallInformation, KCTsyCallState) );
-        										
-			if ( ( currentState != EPSCTsyCallStateNone ) )
-				{
-				HandleCommandL( ECmdDisconnectCall );
-				retval = EKeyWasNotConsumed;
-				}
-			else
-				{
-				// Voice recorder wasn't here =), retval stays EFalse
-				iIsEndKey = ETrue;	
-				
-				// Exit if app is not fully initialized
-				if ( !iContextEntered )
-					{
-					CEikonEnv::Static()->EikAppUi()->
-											HandleCommandL( EEikCmdExit );
-					}
-				}
-			break;
-			}
-		case EKeyBackspace:
-			{
-			HandleCommandL( ECmdDelete );
-			retval = ETrue;
-			break;
-			}
-		case EKeyYes:
-			{
-			if( aKeyEvent.iRepeats > 0 )
-				{
-				if( VisualStateId() == EStateRecording ||
-						VisualStateId() == EStatePlaying )
-					{
-					HandleCommandL( ECmdPause );
-					}
-				}
-			break;
-			}
-		case EKeySide:
-            {
-            retval = ETrue;
-            
-            if ( aKeyEvent.iRepeats )
-                {
-                switch ( iState->iId )
-                    {
-                    case EStateIdle:
-                        {
-                        HandleCommandL( ECmdPlay );
-                        break;
-                        }
-                    case EStateRecording:
-                    case EStateRecordEmbedded:
-                    case EStateRecordingPaused:
-                    case EStatePlaying:
-                    case EStatePlayingPaused:
-                        {
-                        HandleCommandL( ECmdStop );
-                        break;
-                        }
-                    case EStateDeleted:
-                    default:
-                        {
-                        retval = EFalse;
-                        break;
-                        }
-                    }
-                }
-            else
-                {
-                switch ( iState->iId )
-                    {
-                    case EStateIdle:
-                    case EStateDeleted:
-                    case EStateRecordingPaused:
-                        {
-                        HandleCommandL( ECmdRecord );
-                        break;
-                        }
-                    case EStateRecording:
-                    case EStateRecordEmbedded:
-                    case EStatePlaying:
-                        {
-                        HandleCommandL( ECmdPause );
-                        break;
-                        }
-                    case EStatePlayingPaused:
-                        {
-                        HandleCommandL( ECmdPlay );
-                        break;
-                        }
-                    default:
-                        {
-                        retval = EFalse;
-                        break;
-                        }
-                    }
-                }
-            break;
-            }
-		default:
-			{
-			break;
-			}
-		}
-	return retval;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::HandleCommandL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::HandleCommandL( TInt aCommandId )
-	{
-	// This command must be acceptable all times.
-	if ( aCommandId == ECmdCancelNote )
-		{
-		if ( iIsNoteLaunched )
-			{
-			// nothing much to do but ignore.
-			TRAP_IGNORE( iGlobalNote->CancelNoteL( iNoteId ) );
-			}
-		return;
-		}
-
-	if ( !CanAcceptCommands() )
-		{
-		return;
-		}
-
-	if ( !CanHandleCommands() )
-		{
-		return;
-		}
-	if ( EStateRecording == iState->iId && ECmdRecord == aCommandId ||
-			EStateRecording == iState->iId && ECmdRename == aCommandId )
-		{
-		return;
-		}
-	
-	switch ( aCommandId )
-		{
-		case ECmdHelp:
-			{
-			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
-			break;
-			}	
-		case EEikCmdExit:
-			{
-			CEikonEnv::Static()->EikAppUi()->HandleCommandL( EAknSoftkeyExit);
-			break;
-			}
-		
-		case EAknSoftkeyExit:
-			{
-			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
-			break;
-			}
-		case ECmdSendVia:
-			{
-			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
-			break;
-			}
-		case ECmdSaveAttachment:
-			{
-			__ASSERT_DEBUG( iRecorder, User::Panic( KVRPanic, KErrNotFound ) );
-			iRecorder->DetachMemo();
-			// Save permanently but do not remove the original
-
-			HBufC* label = StringLoader::LoadLC( R_VR_SAVE_WAITNOTE_LABEL );
-
-			iIsNoteLaunched = ETrue;
-			iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label, ETrue );
-
-			if ( iStateInfoObserver )
-				{
-				iStateInfoObserver->Update();
-				}
-			iRecorder->AttachToMemoL( iMemo );
-
-			// Remove the waitnote
-			iGlobalNote->CancelNoteL( iNoteId );
-			iIsNoteLaunched = EFalse;
-
-			CleanupStack::PopAndDestroy( label );
-			break;
-			}
-		// FLOWTHROUGH
-		// in case of end key, different command must be given to state
-		// machine - recview gives ECmdAutoStopInterrupted
-		case ECmdAutoStopInterrupted:
-			{
-			if ( iIsEndKey )
-				{
-				aCommandId = ECmdEndKey;
-				iIsEndKey = EFalse;
-				}
-			}
-		// Other commands are given to the state machine
-		default:
-			{
-			TVRContext::TTransition transition;
-			GetTransition( transition, aCommandId );
-			TBool functionOK( ETrue );
-			TRAPD( err, functionOK = 
-								CallFunctionByIdL( transition.iFunctionId ) );
-			
-			if ( err != KErrNone )
-				{
-				// This is done to enable button events
-				iCanHandleCommands = ETrue;
-				}
-				
-			// We may have detached memo and we must reattach
-			if ( err == KErrInUse )
-				{
-				__ASSERT_DEBUG( iRecorder, 
-								User::Panic( KVRPanic, KErrNotFound ) );
-				iRecorder->AttachToMemoL( iMemo );
-				}
-
-			if ( err == KErrNotReady && iIsNoteLaunched && iGlobalNote )
-				{
-				// nothing much to do but ignore.
-				TRAP_IGNORE( iGlobalNote->CancelNoteL( iNoteId ) );
-				}
-
-			// If the disk gets full while saving, the next state is deleted
-			if ( err == KErrDiskFull || err == KErrArgument )
-				{
-				if ( iContext == EContextRecordNewNormal ||
-					 iContext == EContextNormal ||
-					 iContext == EContextEmptyNormal )
-					{
-					ChangeState( EStateDeleted, ETrue );
-					}
-				else
-					{
-					// In record new embedded context the UI is left in
-					// idle state, so the memo must be attached
-					// (EFunctionOK detaches it)
-					__ASSERT_DEBUG( iRecorder, 
-									User::Panic( KVRPanic, KErrNotFound ) );
-					if(!dynamic_cast<CVRMdaRecorder*>(iRecorder)->IsAttachedToMemo())
-						{
-					    iRecorder->AttachToMemoL( iMemo );	
-						}
-					}
-
-				if ( err == KErrDiskFull )
-					{
-					// Maybe an error note should be shown
-					return;
-					}
-
-				// Propagate to the error handler to show a note.
-				User::Leave( err );
-				}
-			else
-				{
-				// The LeaveIfError must be here because CallFunctionByIdL
-				// might have called Exit() (leaving with -1002) and the
-				// framework might be half-dead leading to access violation,
-				// if the UI state is changed
-				User::LeaveIfError( err );
-				if ( functionOK )
-					{
-					// If the in-call recording disabling feature is active,
-					// then the state of the UI will have to reflect that
-					TUint newState(transition.iNewState);
-
-					if ( iVRAllowInCallRecording != KAllowInCallRecording )
-						{
-						TInt currentState( iCurrentCallHandler->StateL(	KPSUidCtsyCallInformation, KCTsyCallState ) );
-												
-						if ( currentState != EPSCTsyCallStateNone )
-							{
-							currentState = iCurrentCallHandler->StateL(
-												KPSUidCtsyCallInformation, KCTsyCallType );
-
-							switch ( currentState )
-								{
-								case EPSCTsyCallTypeCSVoice:
-								case EPSCTsyCallTypeHSCSD:
-								case EPSCTsyCallTypeH324Multimedia:
-								case EPSCTsyCallTypeVoIP:
-									{
-									newState = EStateDisableButtons;										
-									break;
-									}
-								default:
-									{
-									break;										
-									}
-								}
-														
-							}
-						}
-
-					// Function didn't want to cancel the state change
-					ChangeState( newState );
-					}
-				}
-
-			break;
-			}
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetTransition
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::GetTransition( TVRContext::TTransition& aTransition,
-									 TUint aCommandId ) const
-	{
-	__ASSERT_DEBUG( iContexts[ iContext ].iValid, User::Panic( KVRPanic,
-					EPanicInvalidContext ) );
-	__ASSERT_DEBUG( iContexts[ iContext ].iStates[ iState->iId ].iValid,
-					User::Panic( KVRPanic, EPanicInvalidState ) );
-
-	const TVRContext::TState* state =
-							&(iContexts[ iContext ].iStates[ iState->iId ]);
-	for ( TInt i = 0; i < KVRMaxTransitions; i++ )
-		{
-		const TVRContext::TTransition* transition = &state->iTransitions[ i ];
-		if ( ( transition->iCommandId == aCommandId ) &&
-			( transition->iValid ) )
-			{
-			aTransition = *transition;
-			return;
-			}
-		}
-
-	User::Panic( KVRPanic, EPanicInvalidTransition );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetTransition
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::GetTransition(
-								TVRContext::TTransition& aTransition ) const
-	{
-	aTransition = iContexts[ iContext ].iInitialTransition;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ChangeState
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::ChangeState( TUint aNewState, TBool aForced )
-	{
-	if ( !aForced )
-		{
-		if ( ( aNewState == iState->iId ) || ( aNewState == EStateInitial ) )
-			{
-			return;
-			}
-		}
-
-	iState = &iStateArray.At( aNewState );
-
-	if ( iStateInfoObserver )
-		{
-		iStateInfoObserver->Update();
-		}
-	if ( iButtonPanelObserver )
-		{
-		iResetButtons = ETrue;
-		iButtonPanelObserver->Update( EVRUpdateStateChange );
-		}
-	if ( iDecoratorObserver )
-		{
-		iDecoratorObserver->Update();
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::EnterContextL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::EnterContextL( const TVRRecViewContexts& aContext )
-	{
-	iContextEntered = EFalse;
-	if ( iRecorder )
-		{
-		delete iRecorder;
-		iRecorder = NULL;
-		}
-
-	CVRMdaRecorder* recorder = new( ELeave ) CVRMdaRecorder();
-	CleanupStack::PushL( recorder );
-	recorder->ConstructL();
-	CleanupStack::Pop();
-	iRecorder = recorder;
-
-	iRecorder->RegisterObserver( iStateInfoObserver );
-	iRecorder->SetAutoStopObserver( this );
-
-	LeaveContext();
-	iContext = aContext;
-
-	iRecorder->AttachToMemoL(iMemo);
-
-	TVRContext::TTransition transition;
-	GetTransition( transition );
-
-	ChangeState( transition.iNewState, ETrue );
-	CallFunctionByIdL( transition.iFunctionId );
-
-	iContextEntered = ETrue;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::LeaveContext
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::LeaveContext()
-	{
-	iContextEntered = EFalse;
-	if( iRecorder )
-		{
-		iRecorder->UnregisterObserver( iStateInfoObserver );
-		iRecorder->UnregisterObserver( iButtonPanelObserver );
-
-		iRecorder->DetachMemo();
-
-		iRecorder->RegisterObserver( iStateInfoObserver );
-		iRecorder->RegisterObserver( iButtonPanelObserver );
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CbaResourceId
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CVRRecViewModel::CbaResourceId() const
-	{
-	return iState->iCbaResourceId;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetHelpContext
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::GetHelpContext( TCoeHelpContext& aContext ) const
-	{
-       if (FeatureManager::FeatureSupported(KFeatureIdHelp))
-  	   {   
-		  if ( iState->iId == EStateDeleted )
-			{
-			aContext.iContext = KVOREC_HLP_EMPTY_RECORDER;
-			}
-		   else
-			{
-			aContext.iContext = KVOREC_HLP_MAIN;
-			}
-    	}
-	}
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetDecoratorObserver
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetDecoratorObserver( MVRObserver* aObserver )
-	{
-	iDecoratorObserver = aObserver;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::MenuBarResourceId
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CVRRecViewModel::MenuBarResourceId() const
-	{
-	return iState->iMenubarResourceId;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ButtonCount
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CVRRecViewModel::ButtonCount() const
-	{
-
-	return iState->iButtonCount;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CBAEnabled
-// from MVRDecoratorModel
-// ---------------------------------------------------------------------------
-//	
-TBool CVRRecViewModel::CBAEnabled() const
-	{
-	return iCBAEnabled;	
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ButtonState
-// Checks and returns whether the state of the button should be in active or 
-// dimmed state. aButtonId tells the index of the button to be checked. Few 
-// special cases (end and the beginning of the clip) can be handled here.
-// ---------------------------------------------------------------------------
-//	
-TInt CVRRecViewModel::ButtonState( TInt aButtonId ) const
-	{
-    if(CVRUSBStateHanlder::IsUsbActive() || !iIsDriveReady)
-        {
-            return EDimmed;
-        }
-	// Disable rewind button if there's nothing to rewind
-	if ( aButtonId == EButtonRewind &&
-		( Position().Int64() / KVRSecondAsMicroSeconds ) < 1 )
-		{
-		return EDimmed;
-		}
-	
-	// Disable forward button if position is at the end or the length of the
-	// clip is smaller than 1	
-	if ( aButtonId == EButtonForward && ( Position() == Duration() || 
-			( Duration().Int64() / KVRSecondAsMicroSeconds ) < 1 ) )
-		{
-		return EDimmed;
-		}
-
-    // Jeffery: the following ifs are temperary.  they need to be removed after "Pause" is supported in plugin
-#ifdef    __AAC_ENCODER_PLUGIN 
-    if  ( iState->iId == EStateRecording &&  aButtonId == EButtonRecord  && iMemo->Quality() == EQualityHigh)
-		{
-		return EDimmed;
-		}
-#endif
-		
-	return iState->ButtonState( aButtonId );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CommandId
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CVRRecViewModel::CommandId( TInt aButtonId ) const
-	{
-	return iState->ButtonCommandId( aButtonId );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::InitialFocusButtonId
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CVRRecViewModel::InitialFocusButtonId() const
-	{
-	return iState->iFocusButtonId;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetButtonPanelObserver
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetButtonPanelObserver( MVRObserver* aObserver )
-	{
-	if ( iRecorder )
-		{
-		if ( iButtonPanelObserver )
-			{
-			iRecorder->RegisterObserver( aObserver );
-			}
-		else
-			{
-			iRecorder->UnregisterObserver( iButtonPanelObserver );
-			}
-		}
-		
-		iButtonPanelObserver = aObserver;	
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ResetNeeded
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::ResetNeeded()
-	{
-	if ( iResetButtons )
-		{
-		iResetButtons = EFalse;
-		return ETrue;		
-		}
-
-	return iResetButtons; // EFalse always
-	}
-
-	
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::VisualStateId()
-// Returns the id of VR current (visual) state
-// ---------------------------------------------------------------------------
-//	
-TUint CVRRecViewModel::VisualStateId() const
-	{
-	return iState->iStateId;	
-	}
-
-	
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CanHandleCommands()
-// Returns ETrue if model can handle new commands, EFalse otherwise
-// ---------------------------------------------------------------------------
-//	
-TBool CVRRecViewModel::CanHandleCommands() const
-	{
-	return iCanHandleCommands;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::Duration
-// 
-// ---------------------------------------------------------------------------
-//	
-TTimeIntervalMicroSeconds CVRRecViewModel::Duration() const
-	{
-	if ( ( iState->iId == EStateRecording ) ||
-		 ( iState->iId == EStateRecordingPaused ) )
-		{
-		return iMemo->MaxDuration();
-		}
-	return iMemo->Duration();
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::Position
-// 
-// ---------------------------------------------------------------------------
-//
-TTimeIntervalMicroSeconds CVRRecViewModel::Position() const
-	{
-	if ( ( iState->iId == EStateRecording ) ||
-		 ( iState->iId == EStateRecordingPaused ) )
-		{
-		return iMemo->Duration();
-		}
-	return iMemo->Position();
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetLabel
-// Non-leaving version
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::GetLabel( TDes& aName, TInt aLabelIndex ) const
-	{
-	TRAP_IGNORE( GetLabelL( aName, aLabelIndex ) );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetLabelL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::GetLabelL( TDes& aName, TInt aLabelIndex ) const
-	{
-	if ( !iMemo->IsValid() )
-		{
-		aName.SetLength( 0 );
-		return;
-		}
-
-	CDesCArray* labels = iLabelSets.At( iState->iLabelSetId );
-	User::LeaveIfNull( labels );
-
-	if ( aLabelIndex < labels->Count() )
-		{
-		TInt index = aLabelIndex;
-
-		TBuf< VRLABELMAXLENGTH > formatStr(
-										labels->MdcaPoint( index ) );
-		TBuf< VRLABELMAXLENGTH > formattedTime;
-
-		switch ( aLabelIndex )
-			{
-			case ELabelMemoName:
-				{
-				//StringLoader::Format( aName, formatStr, -1, iMemo->Name() );
-                                aName.Copy(iMemo->Name());
-				break;
-				}
-			case ELabelMemoDate:
-				{
-				iMemo->DateCreated().FormatL( formattedTime,
-											  iDateUsualWithZero );
-				StringLoader::Format( aName, formatStr, 0, formattedTime );
-
-				iMemo->DateCreated().FormatL( formattedTime,
-											  iTimeUsualWithZero );
-				formatStr.Copy( aName );
-				StringLoader::Format( aName, formatStr, 1, formattedTime );
-				AknTextUtils::LanguageSpecificNumberConversion( aName );
-				break;
-				}
-			case ELabelMemoQuality:
-				{
-				// Display empty row if feature is not on
-                if ( !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
-                    {
-                    aName.Copy( KNullDesC );
-                    break;
-                    }
-				
-				aName.Copy( formatStr );
-				break;
-				}
-			case ELabelQualityText:	
-				{
-					// Display empty row if feature is not on
-                if ( !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
-                    {
-                    aName.Copy( KNullDesC );
-                    break;
-                    }
-                    
-				formatStr.Copy( placeForQuality );
-					
-					switch( iMemo->Quality() )
-				    {
-				    case EQualityMMSOptimized:
-				        {
-				        StringLoader::Load( formattedTime, R_VOREC_QUALITY_MMS_OPTIMIZED );
-				        StringLoader::Format( aName, formatStr, -1, formattedTime );
-				        break;
-				        }
-				        
-				        // EQualityNormal is used only when mp4 is supported.  In this case the file is saved as wav.
-#ifdef  __AAC_ENCODER_PLUGIN
-				    case EQualityNormal:
-				        {
-				        StringLoader::Load( formattedTime, R_VOREC_QUALITY_NORMAL );				        
-				        StringLoader::Format( aName, formatStr, -1, formattedTime );				        
-				        break;
-				        }
-#endif
-
-				    case EQualityHigh:
-				        {
-				        StringLoader::Load( formattedTime, R_VOREC_QUALITY_HIGH );				        
-				        StringLoader::Format( aName, formatStr, -1, formattedTime );				        
-				        break;
-				        }
-				    default:
-				        {
-				        aName.Copy( KNullDesC );
-				        break;
-				        }
-				    }
-				break;
-				}
-			case ELabelBarMin:
-				{
-				aName.Copy( KNullDesC );
-				break;
-				}
-			case ELabelBarMax:
-				{
-				// This label layout is nowadays taking automatically care of 
-				// string mirroring in the case of mirrored layout. So use of 
-				// AknLayoutUtils::LayoutMirrored() isn't needed anymore
-				
-				TTimeIntervalMicroSeconds max( 0 );
-				if ( ( iState->iId == EStateRecording ) ||
-				 ( iState->iId == EStateRecordingPaused ) )
-					{
-					max = iMemo->MaxDuration();
-					}
-				else
-					{
-					max = iMemo->Duration().Int64();
-
-					if ( max.Int64() < 0 )
-						{
-						max = 0;
-						}
-					}
-
-				TTime lengthAsTime( max.Int64() );
-				TTime positionAsTime( iMemo->Position().Int64() );
-				TBuf< VRLABELMAXLENGTH > formattedPosition;
-
-				// current memo quality 
-				TVRQuality quality( iMemo->Quality() );
-				
-				// Show --:--:-- if estimate for maximum recording time is not
-				// known yet. Done only when memo quality is High
-				if ( ( ( iState->iId == EStateRecording ) || 
-					   ( iState->iId == EStateRecordingPaused )) && 
-					   ( Position() < KVRFirstEstimateTime ) && 
-					   ( quality == EQualityHigh ) &&
-					   ( max.Int64() < 0) )
-					{
-					formattedTime.Append( KVRBeforeFirstEstimateLabel );
-					}
-				// Show normal maximum time	
-				else	
-					{
-					// Show longer format if time is more than 1 hour
-					FormatTimeL( lengthAsTime, formattedTime );		
-					}
-	
-				// Show longer format if time is more than 1 hour
-				FormatTimeL( positionAsTime, formattedPosition );
-						
-				StringLoader::Format( aName, formatStr, 0, formattedPosition );
-				formatStr.Copy( aName );
-				StringLoader::Format( aName, formatStr, 1, formattedTime );
-				AknTextUtils::LanguageSpecificNumberConversion( aName );
-
-				break;						
-				}
-			case ELabelStatus:
-				{
-				aName.Copy( iState->iStatus );
-				break;
-				}
-			default:
-				{
-				break;
-				}
-			}
-		}
-	else
-		{
-		aName.SetLength( 0 );
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ResourceIdForLabel
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CVRRecViewModel::ResourceIdForLabel( TInt aLabelIndex,
-										  TAknLayoutId aLayout ) const
-	{
-	switch ( aLayout )
-		{
-		case EAknLayoutIdELAF:
-		default:
-			return iLabelLayoutLinks[ aLabelIndex ].iEuroId;
-
-		case EAknLayoutIdABRW:
-			return iLabelLayoutLinks[ aLabelIndex ].iArabicHebrewId;
-
-		case EAknLayoutIdAPAC:
-			return iLabelLayoutLinks[ aLabelIndex ].iApacId;
-
-		}
-
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetStateInfoObserver
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetStateInfoObserver( MVRObserver* aObserver )
-	{
-	iStateInfoObserver = aObserver;
-	if( iRecorder )
-		{
-		iRecorder->RegisterObserver( iStateInfoObserver );
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetStateInfoPanelObserver
-// Observes changes in state info panel
-// ---------------------------------------------------------------------------
-//	
-void CVRRecViewModel::SetStateInfoPanelObserver( MVRStateInfoObserver* 
-																	aObserver )
-	{
-	iStateInfoPanelObserver = aObserver;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::HasProgressBar
-// 
-// ---------------------------------------------------------------------------
-//	
-TBool CVRRecViewModel::HasProgressBar() const
-	{
-	return iState->iHasProgressBar;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetSelectedFilesLC
-// 
-// ---------------------------------------------------------------------------
-//
-MDesCArray* CVRRecViewModel::GetSelectedFilesLC() const
-	{
-	CDesCArray* array = new( ELeave ) CDesCArrayFlat( 1 ); // granularity = 1
-	CleanupStack::PushL( array );
-	array->AppendL( iMemo->Filename() );
-	return array;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetVolume
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetVolume( TInt aStep, TInt aMaxSteps )
-	{
-	iIhfVolume = aStep;
-    iRecorder->SetVolume( aStep, aMaxSteps );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetMemoName
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetMemoName( const TDesC& aFilename )
-	{
-	iMemo->SetName( aFilename );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetMemoNameNewL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetMemoNameNewL( TBool aEmbedded )
-	{
-	iMemo->SetTemporaryNameL( aEmbedded );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::Filename
-// 
-// ---------------------------------------------------------------------------
-//
-const TDesC& CVRRecViewModel::Filename() const
-	{
-	return iMemo->Filename();
-	}
-
-void CVRRecViewModel::SetSavingLocationL( const TDesC& aPath )
-	{
-	iMemo->SetSavingLocationL( aPath );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::Update
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::Update( TVRUpdateCommand /*aCommand*/ )
-	{
-	// Error is propagated to error handling method
-	TRAPD( err, HandleCommandL( ECmdAutoStopAtEnd ) );
-
-	// Ignore further errors
-	TRAP_IGNORE( HandleUpdateErrorL( err ) );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::IsEmbedded
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::IsEmbedded() const
-	{
-	return ( iContext == EContextRecordNewForRemote )
-			|| ( iContext == EContextViewer );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CanAcceptCommands
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::CanAcceptCommands() const
-	{
-	return ( iContextEntered != EFalse ) && iRecorder->CanAcceptCommands();
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SendViaL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SendViaL( CSendUi* aSendUi )
-	{
-	// Don't accept commands during sending operation
-	iContextEntered = EFalse;
-	
-	iRecorder->DetachMemo();
-	// Detaching resets the clip position so button panel needs to be updated
-	iButtonPanelObserver->Update( EVRUpdatePositionChange );
-	
-	TSendingCapabilities capabilities
-			(0, KVRSendUiMsgSize, TSendingCapabilities::ESupportsAttachments);
-	CMessageData* messageData = CMessageData::NewL();
-	CleanupStack::PushL( messageData );
-
-	messageData->AppendAttachmentHandleL( iMemo->File() );
-	
-	// Get an array of the services that should be dimmed
-	CArrayFixFlat< TUid >* servicesToDim = SendViaServicesToDimLC();
-
-	// For some reason this function leaves when 'NO' is selected in bluetooth 
-	// case's activation question. If this is not Trapped iContextEntered stays
-	// EFalse and no commands can be executed
-	TRAPD( err, aSendUi->ShowQueryAndSendL( messageData, 
-											capabilities, 
-											servicesToDim ) );
-	
-	CleanupStack::PopAndDestroy( servicesToDim );
-	CleanupStack::PopAndDestroy( messageData );
-
-	iRecorder->AttachToMemoL( iMemo );
-	
-	iContextEntered = ETrue;
-	
-	// This is done so we get possible "Feature not supported" 
-	// infonote from the framework
-	User::LeaveIfError( err );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SendViaServicesToDimLC
-// Generates an array of the services (Uids) that should be dimmed from Send
-// via menu. Returns a pointer to that array. Configuration in Messaging 
-// central repository defines services to dim.
-// ---------------------------------------------------------------------------
-//	
-CArrayFixFlat<TUid>* CVRRecViewModel::SendViaServicesToDimLC()
-	{
-	CArrayFixFlat< TUid >* servicesToDim = 
-									new( ELeave ) CArrayFixFlat< TUid >( 1 );
-    CleanupStack::PushL( servicesToDim );
-     
-    CRepository* repository = 
-    					CRepository::NewL( KCRUidMuiuMessagingConfiguration );
-    TInt configuration = 0;
-    if ( !repository->Get( KMuiuSendUiConfiguration, configuration ) )
-        {
-        configuration = configuration & KMuiuEmailDisabledInMultimedia;
-        }
-    delete repository;
-
-  	if ( configuration )
-    	{
-    	servicesToDim->AppendL( KSenduiMtmSmtpUid );		// normal email
-    	servicesToDim->AppendL( KSenduiMtmSyncMLEmailUid );	// sync email
-    	}
-    	
-    return servicesToDim;	
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CallFunctionByIdL
-// 
-// ---------------------------------------------------------------------------
-//	
-/*
-IMPLEMENTATION NOTE:
-This method needs refactoring with CVRMemo and CVRMdaRecorder.
-Probably most of the logic should be transferred to CVRMemo.
-*/
-TBool CVRRecViewModel::CallFunctionByIdL( TInt aFunctionId )
-	{
-	switch ( aFunctionId )
-		{
-		case EFunctionPlay:
-			{
-			CVRMdaRecorder* iRecorderUtility = NULL;
-			iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
-			if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) || iRecorderUtility == NULL || !iRecorderUtility->IsAttachedToMemo())
-				{
-				return EFalse;
-				}
-
-			iIgnoreNextIhfChange = EFalse;
-			SetRecorderVolume();
-			SetIHFIfCallNotActive( iIhfState );
-			TInt mediaservErr( KErrNone );
-			
-			// Don't accept CBA commands
-			iCBAEnabled = EFalse;
-			// Update CBAs
-			iDecoratorObserver->Update( EVRUpdateCBA );
-			TRAPD( leaveErr, mediaservErr = iRecorder->PlayL() );
-			
-			// Accept CBAs again. CBAs are updated when state is changed
-			iCBAEnabled = ETrue;
-			
-			if ( leaveErr == KErrNotReady )
-				{
-				ShowNoteL( R_VR_CORRUPT_INFONOTE_LABEL, EAknGlobalErrorNote );
-				return EFalse;
-				}
-
-			if ( mediaservErr != KErrNone )
-				{
-				// cancel the state change
-				// the error note is shown in CVRMdaRecorder
-				return EFalse;
-				}
-			User::LeaveIfError( leaveErr );
-			break;
-			}
-		case EFunctionStop:
-			{
-			// Turn off the IHF after playing
-			SetIHFIfCallNotActive( EFalse );
-			iRecorder->Stop();
-			CheckIhfState();
-			break;
-			}
-		case EFunctionStopWithNote:
-			{
-			// No need to do anything to IHF here since this is
-			// called after recording (IHF is not used)
-			iRecorder->Stop();
-			ShowNoteL( R_VR_STOP_INFONOTE_LABEL, EAknGlobalInformationNote );
-			break;
-			}
-		case EFunctionStopAndSave:
-			{
-			// No need to do anything to IHF here since this is
-			// called after recording (IHF is not used)
-			StopAndSaveL( 0 );
-			break;
-			}
-		case EFunctionAutoStopAndSave:
-			{
-			// No need to do anything to IHF here since this is
-			// called after recording (IHF is not used)
-			StopAndSaveL( R_VR_STOP_INFONOTE_LABEL );
-			break;
-			}
-		case EFunctionSilentStopAndSave:
-			{
-			// No need to do anything to IHF here since this is
-			// called after recording (IHF is not used)
-			StopAndSaveL( 0 );
-			break;
-			}
-
-		case EFunctionAutoStop:
-			{
-			// Turn off the IHF after playing
-			SetIHFIfCallNotActive( EFalse );
-			iRecorder->Stop();
-			CheckIhfState();
-			break;
-			}
-		case EFunctionSaveBeforeExit:
-			{
-			StopAndCloseL( R_VR_STOP_SAVE_WAITNOTE_LABEL );
-			break;
-			}
-		case EFunctionRecord:
-			{
-			CVRMdaRecorder* iRecorderUtility = NULL;
-			if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) )
-				{
-				return EFalse;
-				}			
-         
-			//if ( iRecorder->RecordL() != KErrNone )
-			//	{
-			//	return EFalse;
-			//	}
-			
-			if(iCurrentCallHandler->StateL(KPSUidCtsyCallInformation,KCTsyCallState )==EPSCTsyCallStateConnected)
-				{
-				iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
-				if(iRecorderUtility != NULL)
-					{
-					iRecorderUtility->SetAudioInputL(CAudioInput::EVoiceCall);	
-					iRecorderUtility->ConfigSampleRateOfVoiceCallL();
-					}
-				}
-			//Audioinput can't be changed after Record
-			if ( iRecorder->RecordL() != KErrNone )
-				{
-				return EFalse;
-				}	
-			break;
-			}
-		case EFunctionPause:
-			{
-			
-			iRecorder->Pause();
-			// Turn off the IHF after playing
-			SetIHFIfCallNotActive( EFalse );         
-			break;
-			}
-		case EFunctionForward:
-			{
-			TInt result = iRecorder->ForwardL();
-
-			// The volume setting is lost when the media server client object
-			// is stopped.
-			SetRecorderVolume();
-
-			if ( result )
-				{
-				return EFalse;
-				}
-			break;
-			}
-		case EFunctionRewind:
-			{
-			iRecorder->RewindL();
-			if ( iButtonPanelObserver )
-			    {
-			    iButtonPanelObserver->Update();
-			    }
-
-			// The volume setting is lost when the media server client object
-			// is stopped
-			SetRecorderVolume();
-			break;
-			}
-		case EFunctionRecordNew:
-			{
-			CVRMdaRecorder* iRecorderUtility = NULL;
-			if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) )
-				{
-				return EFalse;
-				}
-			iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
-			if(iRecorderUtility == NULL)
-				{
-				return EFalse;
-				}
-			iRecorderUtility->SetInRecordingFlag(ETrue);
-            
-			iCanHandleCommands = EFalse;
-			// Don't accept CBA commands
-			iCBAEnabled = EFalse;
-			// Update CBAs
-			iDecoratorObserver->Update( EVRUpdateCBA );
-            
-		    iRecorder->DetachMemo();
-			
-			TRAPD( leaveErr1, SetMemoNameNewL( 
-					iContext == EContextRecordNewForRemote ) );
-			
-			// Can't attach if memo name couldn't be generated
-			TInt leaveErr2( KErrNone );
-			if( !leaveErr1 )
-				{
-				TRAP( leaveErr2, iRecorder->AttachToMemoL( iMemo ) );	
-				}
-			
-			TBool ifAttach = iRecorderUtility->IsAttachedToMemo();		
-	
-			if ( leaveErr1 || leaveErr2 || !ifAttach)
-				{
-				iCanHandleCommands = ETrue;
-				iCBAEnabled = ETrue;
-				if ( leaveErr1 == KErrDiskFull || leaveErr2 == KErrDiskFull )	
-					{
-					if ( iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL())
-						{
-		 				VRUtils::ShowMemoryFullConfirmationQuery(ETrue);
-						}
-					else
-						{
-				 		VRUtils::ShowMemoryFullConfirmationQuery();
-						}
-					}
-				}
-			
-			User::LeaveIfError( leaveErr1 );
-			User::LeaveIfError( leaveErr2 );
-			if(!ifAttach)
-				{
-			    User::Leave(KErrNotReady);	
-				}
-				
-			// Indicates that a new memo is attached but not yet recording 
-			// started -> handle can be reused and memo can be deleted in exit
-			iMemo->SetRecorded( EFalse );
-			
-			TInt recError( KErrNone );
-
-			//TRAPD( recLeaveErr, recError = iRecorder->RecordL() );
-			if(iCurrentCallHandler->StateL(KPSUidCtsyCallInformation,KCTsyCallState )==EPSCTsyCallStateConnected)
-				{
-				iRecorderUtility->SetAudioInputL(CAudioInput::EVoiceCall);
-				iRecorderUtility->ConfigSampleRateOfVoiceCallL();
-				}
-			//Change for CS call:Audio input can't be changed after Record
-            TRAPD( recLeaveErr, recError = iRecorder->RecordL() );
-            
-            if (GetInRecordingFlag())
-            	{
-            	iRecorderUtility->SetInRecordingFlag(EFalse);
-            	}
-            	
-			if ( recError != KErrNone || recLeaveErr )
-				{
-				iCanHandleCommands = ETrue;
-				iCBAEnabled = ETrue;
-				if ( recLeaveErr )
-					{
-					User::LeaveIfError( recLeaveErr );					
-					}
-				else
-					{
-					return EFalse;	
-					}
-				}
-			
-			
-			iCanHandleCommands = ETrue;	
-			// Accept CBAs again. CBAs are updated when state is changed
-			iCBAEnabled = ETrue;
-			break;
-			}
-		case EFunctionDelete:
-			{
-			iRecorder->DetachMemo();
-			// Detaching resets the clip position so button panel 
-			// needs to be updated
-			iButtonPanelObserver->Update( EVRUpdatePositionChange );
-			if ( !iMemo->QueryAndDeleteL() )
-				{
-				iRecorder->AttachToMemoL( iMemo );
-				return EFalse;
-				}
-			break;
-			}
-		case EFunctionRename:
-			{
-			iRecorder->DetachMemo();
-			// Detaching resets the clip position so button panel 
-			// needs to be updated
-			iButtonPanelObserver->Update( EVRUpdatePositionChange );
-			if ( iMemo->QueryAndRenameL() )
-				{
-				if ( iStateInfoObserver )
-					{
-					iStateInfoObserver->Update();
-					}
-				}
-			iRecorder->AttachToMemoL( iMemo );
-			break;
-			}
-		case EFunctionOk:
-			{
-
-			HBufC* label = StringLoader::LoadLC( R_VR_SAVE_WAITNOTE_LABEL );
-
-			iRecorder->DetachMemo();
-			iIsNoteLaunched = ETrue;
-			iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label );
-
-			CEikonEnv::Static()->EikAppUi()->HandleCommandL( 
-												ECmdEmbeddedRecordingReady );
-
-			iGlobalNote->CancelNoteL( iNoteId );
-			iIsNoteLaunched = EFalse;
-#ifdef _DEBUG
-			RDebug::Print( _L( 
-						"VoiceRecorder: CVRRecViewModel Note cancelled" ) );
-#endif
-			CleanupStack::PopAndDestroy( label );
-
-			HandleCommandL( EEikCmdExit );
-			break;
-			}
-		case EFunctionCancel:
-			{
-			iRecorder->DetachMemo();
-			iMemo->DeleteL();
-			HandleCommandL( EEikCmdExit );
-			break;
-			}
-		case EFunctionNop:
-			{
-			// dummy command, do nothing
-			break;
-			}
-		case EFunctionNRTStop:
-			{
-			// Turn off the IHF after playing
-			SetIHFIfCallNotActive( EFalse );
-
-			iRecorder->Stop();
-			CheckIhfState();
-			break;
-			}
-		case EFunctionNRTAutoStop:
-			{
-			// Turn off the IHF after playing
-			SetIHFIfCallNotActive( EFalse );
-			CheckIhfState();
-			break;
-			}
-		case EFunctionSetNewPosition:	
-			{
-			TInt newValue( 0 );
-			if ( iStateInfoPanelObserver )
-				{
-				newValue = iStateInfoPanelObserver->ProgressBarPosition();		
-				}
-
-			iRecorder->SetPositionL( newValue );
-			
-			//Inform button Panel
-			if ( iButtonPanelObserver )
-			    {
-			    iButtonPanelObserver->Update( EVRUpdateStateChange );
-			    }
-			break;
-			}	
-		default:
-			{
-			User::Panic( KVRPanic, EPanicFunctionUnknown );
-			break;
-			}
-		}
-		return ETrue;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::StopAndSaveL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::StopAndSaveL( TInt aResourceId )
-	{
-	HBufC* label = NULL;
-
-	// Don't show the note if aResourceId was not defined
-	if ( aResourceId )
-		{
-		label = StringLoader::LoadLC( aResourceId );
-		}
-
-	iRecorder->DetachMemo();
-
-	if ( label )
-		{
-		iIsNoteLaunched = ETrue;
-		if(iMemo)
-			{
-		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label );	
-			}
-		
-		// There is no more note showing in SavePermanentlyL() -function
-		// the note is shown here
-		ShowNoteL( aResourceId, EAknGlobalInformationNote );
-		}
-	else
-		{
-		iIsNoteLaunched = ETrue;
-		if(iMemo)
-			{
-		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, KNullDesC );
-			}
-		}
-
-	TRAP_IGNORE(iRecorder->AttachToMemoL( iMemo ));
-
-	iGlobalNote->CancelNoteL( iNoteId );
-	iIsNoteLaunched = EFalse;
-
-	if ( aResourceId )
-		{
-		CleanupStack::PopAndDestroy( label );
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::StopAndCloseL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::StopAndCloseL( TInt aResourceId )
-	{
-	HBufC* label = NULL;
-
-	// Don't show the note if aResourceId was not defined
-	if ( aResourceId )
-		{
-		label = StringLoader::LoadLC( aResourceId );
-		}
-
-	iRecorder->DetachMemo();
-
-	if ( label )
-		{
-		iIsNoteLaunched = ETrue;
-		if(iMemo)
-			{
-		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label );	
-			}
-		}
-	else
-		{
-		iIsNoteLaunched = ETrue;
-		if(iMemo)
-			{
-		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, KNullDesC );	
-			}
-		}
-
-	iGlobalNote->CancelNoteL( iNoteId );
-	iIsNoteLaunched = EFalse;
-
-	if ( aResourceId )
-		{
-		CleanupStack::PopAndDestroy( label );
-		}
-	}
-
-void CVRRecViewModel::ShowNoteL( TInt aResourceId,
-								 TAknGlobalNoteType aNoteType )
-	{
-	HBufC* label = StringLoader::LoadLC( aResourceId );
-	iGlobalNote->ShowNoteL( aNoteType, *label );
-	CleanupStack::PopAndDestroy( label );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetVolumeControlState
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::GetVolumeControlState( TVRVolumeControlState& aState,
-											TInt& aVolume )
-	{
-	// ignored
-	TRAP_IGNORE( ReadDefaultSpeakerL() );
-	if ( iState->iHasVolumeControl )
-		{
-		if ( iIhfState )
-			{
-			aState = EIhf;
-
-			}
-		else
-			{
-			aState = EEarPiece;
-			}
-		aVolume = iIhfVolume;
-		}
-	else
-		{
-		aState = EDisabled;
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::LoadVolumeSettingsL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::LoadVolumeSettingsL()
-	{
-	iIhfVolume = VRUtils::DefaultVolumeL( ESpeakerIhf );
-	// Prevent using incorrect values
-	if ( iIhfVolume < KVRVolumeControlMin ||
-		iIhfVolume > KVRVolumeControlMax )
-		{
-		iIhfVolume = KVRDefaultVolume;
-		}		
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SaveVolumeSettings
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SaveVolumeSettings()
-	{
-	// Ignore all errors, because this will be called in destructor. It isn't 
-	// disastrous if new values aren't saved, the previous values will be there
-	TRAP_IGNORE( VRUtils::SetDefaultVolumeL( ESpeakerIhf, iIhfVolume ); );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::HandleSystemEventL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::HandleSystemEventL()
-	{
-	// Fetch the changed value from Pubsub
-	TInt currentState( iCurrentCallHandler->StateL(KPSUidCtsyCallInformation, KCTsyCallState ) );
-
-	if ( !iActive )
-		{
-		iPreviousCallState = currentState;
-		return;
-		}
-
-
-	// Actions to take when playing
-	if ( iState->iId == EStatePlaying )
-		{
-		switch ( currentState )
-			{
-			case EPSCTsyCallStateAlerting:
-			case EPSCTsyCallStateRinging:
-			case EPSCTsyCallStateAnswering:
-				{
-				HandleCommandL( ECmdAutoStopAtEnd );
-				break;
-				}
-			default:
-				{
-				break;
-				}
-			}			
-		}
-
-	// Actions to take when recording
-	if ( iState->iId == EStateRecording )
-		{
-		switch ( currentState )
-			{
-			case EPSCTsyCallStateAlerting:
-			case EPSCTsyCallStateRinging:
-			case EPSCTsyCallStateAnswering:
-			case EPSCTsyCallStateDisconnecting:
-				{
-				HandleCommandL( ECmdAutoStopAtEnd );
-				break;
-				}
-			case EPSCTsyCallStateNone:
-				{
-				if( iPreviousCallState == EPSCTsyCallStateConnected )
-					{
-					CVRMdaRecorder* iRecorderUtility = NULL;
-					iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
-					if(iRecorderUtility != NULL)
-						{
-						iRecorderUtility->SetAudioInputL(CAudioInput::EDefaultMic);					
-						}
-					HandleCommandL( ECmdAutoStopAtEnd );
-					}
-				break;										
-				}
-			default:
-				{
-				break;
-				}
-			}			
-		}		
-
-	if ( iState->iId == EStateIdle && 
-		 currentState == EPSCTsyCallStateNone )
-		{
-		iIhfState = ETrue;
-		}
-
-	/* -------------------------
-	 * Disable in-call recording
-	 * -------------------------
-	 */
-	if ( iVRAllowInCallRecording != KAllowInCallRecording )
-		{
-		if (( iState->iId == EStateIdle || iState->iId == EStateDeleted ) &&
-			 currentState == EPSCTsyCallStateAnswering)
-			{
-			// Disable record button
-			ChangeState( EStateDisableButtons, ETrue );
-			}
-		if (( iState->iId == EStateDisableButtons ) &&
-			 ((currentState == EPSCTsyCallStateDisconnecting)|| (currentState == EPSCTsyCallStateNone)))
-			{
-			if (iContext != EContextRecordNewForRemote)
-				{
-			// Enable record button
-			ChangeState( EStateDeleted, ETrue );
-				}
-		     else
-		        {
-		        if (!(iMemo->Duration() > TTimeIntervalMicroSeconds(0)))
-		        	{
-		        	ChangeState( EStateRecordEmbedded, ETrue );
-		        	}
-		        else
-		        	{
-		        	ChangeState( EStateIdleRecordEmbedded, ETrue );
-		        	}
-		        }
-			}
-		}
-		
-	iPreviousCallState = currentState;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetIHFIfCallNotActive
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetIHFIfCallNotActive( TBool aIhf )
-	{
-	if ( FeatureManager::FeatureSupported( 
-							KFeatureIdApplicationControllableAudioRouting ) )
-		{
-		TInt currentState( EPSCTsyCallStateNone );
-        // Ignore the error, ihf is not set
-		TRAP_IGNORE( currentState = iCurrentCallHandler->StateL( 
-									KPSUidCtsyCallInformation, KCTsyCallState ) );
-
-		if ( currentState == EPSCTsyCallStateNone )
-			{
-			if ( iRecorder->SetIhf( aIhf ) == KErrNone )
-				{
-				// So that the model knows that the next notify from shared 
-				// data client is not a voice key activated IHF change.
-				iIgnoreNextIhfChange = ETrue;
-				}
-			}
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CheckIhfState
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::CheckIhfState()
-	{
-	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
-		FeatureManager::FeatureSupported( 
-							KFeatureIdApplicationControllableAudioRouting ) )
-		{
-		if ( iDefaultSpeaker == ESpeakerIhf )
-			{
-			iIhfState = ETrue;
-			}
-		else
-			{
-			iIhfState = EFalse;
-			}
-		}
-	else
-		{
-		// IHF is default on phones with voice key
-		iIhfState = ETrue;
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetRecorderVolume
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetRecorderVolume()
-	{
-	TInt activeVolume = iIhfVolume;
-	iRecorder->SetVolume( activeVolume, KVRMaxVolumeSteps );
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ActivateL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::ActivateL()
-	{
-	iActive = ETrue;
-
-	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
-		FeatureManager::FeatureSupported( 
-				KFeatureIdApplicationControllableAudioRouting ) )
-		{
-		// The user has visited another view and possibly altered the
-		// settings
-		ReadDefaultSpeakerL();
-		}
-
-	// If the in-call disable recording feature has been enabled, then check 
-	// current status and enable/disable UI accordingly
-	if ( iVRAllowInCallRecording != KAllowInCallRecording )
-		{
-		TInt currentState( iCurrentCallHandler->StateL(
-			KPSUidCtsyCallInformation, KCTsyCallState ) );
-		if ( currentState != EPSCTsyCallStateNone )
-			{
-			ChangeState (EStateDisableButtons, ETrue);
-			}
-        }
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::Deactivate
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::Deactivate()
-	{
-	iActive = EFalse;
-	}
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::ReadDefaultSpeakerL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::ReadDefaultSpeakerL()
-	{
-	iDefaultSpeaker = VRUtils::DefaultSpeakerL();
-
-	if ( iDefaultSpeaker == ESpeakerIhf )
-		{
-		iIhfState = ETrue;
-		}
-	else
-		{
-		iIhfState = EFalse;
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::TVRLabelLayoutLink::ReadFromResource
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::TVRLabelLayoutLink::ReadFromResource
-										( TResourceReader& aReader )
-	{
-	iEuroId = aReader.ReadUint32();
-	iApacId = aReader.ReadUint32();
-	iArabicHebrewId = aReader.ReadUint32();
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::CanSetVolume
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::CanSetVolume()
-	{
-	return ETrue;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::HandleUpdateErrorL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::HandleUpdateErrorL( TInt aErr )
-	{
-	// Show error note.
-	if ( aErr == KErrDiskFull )
-		{
-
-#ifndef RD_MULTIPLE_DRIVE    
-		if ( VRUtils::MemoStoreL() == EMemoStorePhoneMemory )
-			{
-			ShowNoteL( R_VR_MEMORY_WARNING, EAknGlobalWarningNote );
-			}
-		else
-			{
-			ShowNoteL( R_VR_MEMORY_MMC_WARNING, EAknGlobalWarningNote );
-			}
-			
-//multiple drive
-#else
-		TInt memoDrive = VRUtils::MemoDriveL();
-		TUint status( 0 );
-		VRUtils::GetDriveInfo( memoDrive, status );
-		        
-		if ( status & DriveInfo::EDriveInternal )
-		    {
-			ShowNoteL( R_VR_MEMORY_WARNING, EAknGlobalWarningNote );
-			}
-		else
-			{
-			ShowNoteL( R_VR_MEMORY_MMC_WARNING, EAknGlobalWarningNote );
-			}
-#endif
-
-
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::MemoFileHandle
-// 
-// ---------------------------------------------------------------------------
-//
-RFile& CVRRecViewModel::MemoFileHandle()
-	{
-	return iMemo->File();
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetFileHandle
-// 
-// ---------------------------------------------------------------------------
-//	
-void CVRRecViewModel::SetFileHandle( RFile& aFile )
-	{
-	// Use app startup type as embbedding flag
-	iMemo->SetFileHandle( aFile, CEikonEnv::Static()->StartedAsServerApp() );
-	if ( iRecorder )
-		{
-		// First detach if already attached
-		iRecorder->DetachMemo();
-		// The media server error will rise again somewhere where it's
-		// easier to handle if needed
-		TRAP_IGNORE( iRecorder->AttachToMemoL( iMemo ) );		
-		}
-
-	}	
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::FormatTimeL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::FormatTimeL( const TTime& aTime, TDes& aString ) const
-	{
-
-	// Show longer format if duration more than 1 hour
-	if ( aTime.DateTime().Hour() >= 1 )
-		{
-		aTime.FormatL( aString,
-			  iTimeDuratLong );						
-		}
-	else
-		{
-		aTime.FormatL( aString,
-			  iTimeDuratMinSecWithZero );						
-		}	
-	}
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::EnableVolumeControl
-// Enables/Disables the navi pane Volume Control drawing in the VR current 
-// visual state
-// ---------------------------------------------------------------------------
-//	
-void CVRRecViewModel::EnableVolumeControl( TBool aVolumeControl )
-	{
-	iState->iHasVolumeControl = aVolumeControl;
-	}
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::HasVolumeControl
-// Returns ETrue if volume setting is enabled in this VoiceRecorder state.
-// Otherwise returns EFalse
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::HasVolumeControl() const
-	{
-	if( iState->iHasVolumeControl )
-		{
-		return ETrue;
-		}
-	return EFalse;	
-	}
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::IncomingCall
-// Returns ETrue if a phone call is coming.
-// Otherwise returns EFalse
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::IncomingCall() const
-	{
-#ifdef _DEBUG
-	RDebug::Print( _L("CVRRecViewModel::IncomingCall enter") );
-#endif	
-	
-	// Fetch the current value from Pubsub
-	TInt currentState = 0;
-	TRAP_IGNORE(currentState = iCurrentCallHandler->StateL( KPSUidCtsyCallInformation, KCTsyCallState ));
-	
-	if (currentState == EPSCTsyCallStateAlerting ||
-		currentState == EPSCTsyCallStateRinging ||
-		currentState == EPSCTsyCallStateAnswering )
-		{
-		return ETrue;
-		}
-	else
-		{
-		return EFalse;	
-		}	
-	}
-
-
-// ---------------------------------------------------------------------------
-//Returns the active quality setting.
-//return Quality setting of the active memo
-// ---------------------------------------------------------------------------
-TVRQuality CVRRecViewModel::Quality() const
-	{
-		return iMemo->Quality();
-	}
-
-
-// ---------------------------------------------------------
-// GetInRecordingFlag
-// 
-// ---------------------------------------------------------
-//		
-TBool CVRRecViewModel::GetInRecordingFlag()
-	{
-	if(iRecorder)
-		{
-		CVRMdaRecorder* iRecorderUtility = NULL;
-		iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);	
-		if(iRecorderUtility != NULL)
-			{
-			return iRecorderUtility->GetInRecordingFlag();
-			}
-		return EFalse;
-		}
-	else
-		{
-		return EFalse;
-		}
-		
-	}
-	
-
-// ---------------------------------------------------------
-// GetIfStopCalled
-// 
-// ---------------------------------------------------------
-//		
-TBool CVRRecViewModel::GetIfStopCalled()
-	{
-	if(iRecorder)
-		{
-		CVRMdaRecorder* iRecorderUtility = NULL;
-		iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);	
-		if(iRecorderUtility != NULL)
-			{
-			return iRecorderUtility->GetIfStopCalled();
-			}
-		return EFalse;
-		}
-	else
-		{
-		return EFalse;
-		}
-		
-	}
-
-	
-// ---------------------------------------------------------
-// SetInRecordingFlag
-// ---------------------------------------------------------
-//
-void CVRRecViewModel::SetInRecordingFlag(TBool aFlag)
-	{
-	if(iRecorder)
-		{
-		CVRMdaRecorder* iRecorderUtility = NULL;
-		iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);	
-		if(iRecorderUtility != NULL)
-			{
-			return iRecorderUtility->SetInRecordingFlag(aFlag);
-			}		
-		}
-	}
-
-
-
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::HandleMMCEjectEventL
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::HandleMMCEjectEventL()
-	{
-	
-	// Actions to take when recording
-	TInt storageDrive = VRUtils::MemoDriveL();   	 
-    if ( ( ( storageDrive == VRUtils::GetRemovableMassStorageL()) ||
-            ( iMemo != NULL && iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL() ) ) && 
-            ( !CVRUSBStateHanlder::IsUsbActive() ) )
-		{
-        //exit for mmc dismount	
-        SendExitEvent();   
-		}
-    }
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SendExitEvent
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SendExitEvent()
-    {
-    TWsEvent event;
-    event.SetType( EAknSoftkeyExit );
-    event.SetTimeNow();
-    event.SetHandle( CCoeEnv::Static()->WsSession().WsHandle() );
-    CCoeEnv::Static()->WsSession().SendEventToWindowGroup( CEikonEnv::Static()->RootWin().Identifier(), event );
-    return;
-    }
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::SetIsDriveReady
-// 
-// ---------------------------------------------------------------------------
-//
-void CVRRecViewModel::SetIsDriveReady(TBool aIsDriveReady)
-    {
-    iIsDriveReady = aIsDriveReady;
-    }
-
-// ---------------------------------------------------------------------------
-// CVRRecViewModel::GetIsDriveReady
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CVRRecViewModel::GetIsDriveReady()
-    {
-    return iIsDriveReady;
-    }
-
-
-// End of file