diff -r 072a5fa0c63b -r c6bafb5162d8 voicerecorder/RecViewSrc/CVRRecView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/RecViewSrc/CVRRecView.cpp Wed Sep 01 12:29:14 2010 +0100 @@ -0,0 +1,1136 @@ +/* +* 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: +* Voice Recorder Record View +* +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "voicerecorder.hrh" +#include "CVRRecView.h" +#include "CVRRecViewContainer.h" +#include "CVRRecViewActivationContainer.h" +#include "CVRRecViewModel.h" +#include "VRUtils.h" +#include "VRUSBStateHanlder.h" + +// CONSTANTS +const TUid KUidMmsEditor = + { + 0x100058DE + }; +const TUid KUidMailEditor = + { + 0x101F4CD6 + }; + +inline TBool ShowDialogForWaitUSBPluggingOutL() + { + HBufC* text = StringLoader::LoadLC(R_QTN_USB_MODE_NOTE_MODE); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + TInt result(dlg->ExecuteLD(R_INSERT_F_USB_PLUG_IN_DIALOG, *text)); + CleanupStack::PopAndDestroy(text); + if (result) + { + return ETrue; + } + return EFalse; + } + +inline TInt WaitDialogForUSBPluggingOut(CAknWaitDialog*& aDialog) + { + aDialog = new (ELeave) CAknWaitDialog( + (REINTERPRET_CAST(CEikDialog**,&aDialog))); + aDialog->SetTone(CAknNoteDialog::EConfirmationTone); + return aDialog->ExecuteLD(R_VOREC_USB_CONNECTED_DIALOG); + } + +// ================= MEMBER FUNCTIONS ======================================== + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewModelActivator::CVRRecViewModelActivator +// +// --------------------------------------------------------------------------- +// +CVRRecView::CVRRecViewModelActivator::CVRRecViewModelActivator( + CVRRecViewModel* aModel) : + CAsyncOneShot(EPriorityNormal), iModel(aModel), iContext( + EContextEmptyNormal) + { + } + + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewModelActivator::~CVRRecViewModelActivator +// +// --------------------------------------------------------------------------- +// +CVRRecView::CVRRecViewModelActivator::~CVRRecViewModelActivator() + { + Cancel(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewModelActivator::RunL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewModelActivator::RunL() + { + if(iModel->GetIsDriveReady()) + { + // Activate model in correct context + iModel->SetMemoNameNewL( iContext == EContextRecordNewForRemote); + iModel->EnterContextL( iContext ); + iModel->ActivateL(); + } + + // Notify recview + iCallback.CallBack(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewModelActivator::Activate +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewModelActivator::Activate( + TVRRecViewContexts aContext, TCallBack aCallback ) + { + iContext = aContext; + iCallback = aCallback; + Call(); + + } + + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewModelActivator::DoCancel +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewModelActivator::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewDialogActivator::CVRRecViewDialogActivator +// +// --------------------------------------------------------------------------- +// +CVRRecView::CVRRecViewDialogActivator::CVRRecViewDialogActivator( CVRRecViewModel* aModel) +:CAsyncOneShot(EPriorityNormal), iModel(aModel) + { + + } + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewDialogActivator::~CVRRecViewDialogActivator +// +// --------------------------------------------------------------------------- +// +CVRRecView::CVRRecViewDialogActivator::~CVRRecViewDialogActivator() + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewDialogActivator::~CVRRecViewDialogActivator +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewDialogActivator::SetDialogType(TDialogTypeID aType) + { + iType = aType; + } + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewDialogActivator::SetViewContexts +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewDialogActivator::SetViewContexts(TVRRecViewContexts aContext) + { + iContext = aContext; + } + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewDialogActivator::DoCancel +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewDialogActivator::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// CVRRecView::CVRRecViewNoteActivator::RunL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CVRRecViewDialogActivator::RunL() + { + if(iType == EDialogForWaitStorageCard) + { + TInt driveRemovableMassStorage = VRUtils::GetRemovableMassStorageL(); + while ( !VRUtils::DriveValid( (TDriveNumber) driveRemovableMassStorage ) ) + { + if (!ShowDialogForWaitStorageCardL()) + { + iModel->SendExitEvent(); + } + } + // Come to here when driveRemovableMassStorage is valid + VRUtils::SetMemoDriveL( (TDriveNumber) driveRemovableMassStorage ); + + /***** check if memory is below min value, if yes, close app*****/ + RFs& fs(CEikonEnv::Static()->FsSession()); + if (SysUtil::DiskSpaceBelowCriticalLevelL(&fs, 0, VRUtils::MemoDriveL())) + { + HBufC* errorText = StringLoader::LoadLC( + R_VR_MEMORY_LOW_STOP_WARNING); + CAknErrorNote* dlg = new (ELeave) CAknErrorNote(ETrue); + dlg->ExecuteLD(*errorText); + CleanupStack::PopAndDestroy(errorText); + iModel->SendExitEvent(); + } + // check memory size end + + // To activate view model + iModel->SetMemoNameNewL( iContext == EContextRecordNewForRemote); + iModel->SetIsDriveReady(ETrue); + iModel->EnterContextL( iContext ); + iModel->ActivateL(); + } + else if(iType == EDialogForWaitUSBPluggingOut) + { + ShowDialogForWaitUSBPluggingOutL(); + iModel->SendExitEvent(); + } + } + +// --------------------------------------------------------------------------- +// CVRRecView::NewLC +// +// --------------------------------------------------------------------------- +// +EXPORT_C CVRRecView* CVRRecView::NewLC( TInt aViewResourceId, + TInt aModelResourceId ) + { + CVRRecView* recview = new( ELeave ) CVRRecView; + CleanupStack::PushL( recview ); + recview->ConstructL( aViewResourceId, aModelResourceId ); + + return recview; + } + + +// --------------------------------------------------------------------------- +// CVRRecView::~CVRRecView +// +// --------------------------------------------------------------------------- +// +CVRRecView::~CVRRecView() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + if ( iActivationContainer ) + { + AppUi()->RemoveFromViewStack( *this, iActivationContainer ); + } + + delete iContainer; + delete iActivationContainer; + delete iDialogActivator; + delete iModel; + delete iSendUi; + delete iModelActivator; + delete iLaunchService; + delete iUSBStateHandler; + + if (iUsbWaitDialog) + { + TRAP_IGNORE(iUsbWaitDialog->ProcessFinishedL()); + } + } + +// --------------------------------------------------------------------------- +// CVRRecView::ConstructL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::ConstructL( TInt aViewResourceId, TInt aModelResourceId ) + { + BaseConstructL( aViewResourceId ); + + iModel = new( ELeave ) CVRRecViewModel; + TResourceReader reader; + iEikonEnv->CreateResourceReaderLC( reader, aModelResourceId ); + iModel->ConstructFromResourceL( reader ); + CleanupStack::PopAndDestroy(); // reader; + + // Create SendUi (Send as MMS, E-Mail, etc...) + iSendUi = CSendUi::NewL(); + + iModelActivator = new (ELeave) CVRRecViewModelActivator(iModel); + + iUSBStateHandler = CVRUSBStateHanlder::NewL(this); + } + +// --------------------------------------------------------------------------- +// CVRRecView::Id +// +// --------------------------------------------------------------------------- +// +TUid CVRRecView::Id() const + { + const TUid KVRRecViewUID = + { + KVRRecorderViewUID + }; + + return KVRRecViewUID; + } + + +// --------------------------------------------------------------------------- +// CVRRecView::HandleCommandL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::HandleCommandL( TInt aCommandId ) + { + // This command must be acceptable all times. + if ( aCommandId == ECmdCancelNote ) + { + iCommand = aCommandId; + if( iModel ) + { + iModel->HandleCommandL( aCommandId ); + } + return; + } + + if ( !iModel->CanAcceptCommands() ) + { + return; + } + + switch ( aCommandId ) + { + // Don't do anything in case of a Task Swapper command + case EAknCmdTaskSwapper: + { + break; + } + // No operation + case ECmdNOP: + { + break; + } + // Go back to voice memo list view + case EAknSoftkeyBack: + { + AppUi()->HandleCommandL( EEikCmdExit ); + break; + } + case ECmdSettings: + { + // Saving the volume control state before entering settings + TBool hasVolumeControl( iModel->HasVolumeControl() ); + // Disabling volume control + iModel->EnableVolumeControl( EFalse ); + iContainer->Update(); + + AppUi()->HandleCommandL( aCommandId ); + + // Set volume control as it was before settings dialog + iModel->EnableVolumeControl( hasVolumeControl ); + iContainer->Update(); + break; + } + case ECmdGoToMyClips: + { + delete iLaunchService; + iLaunchService = NULL; + + TFileName path; + VRUtils::MemoStoreDirectoryL( path ); + TInt sortMode = 0; + + CAiwGenericParamList* inParams = CAiwGenericParamList::NewLC(); + inParams->AppendL(TAiwGenericParam(EGenericParamDir, TAiwVariant( + path))); + inParams->AppendL(TAiwGenericParam(EGenericParamDir, TAiwVariant( + sortMode))); + iLaunchService = CAknLaunchAppService::NewL( + TUid::Uid(0x101F84EB), NULL, inParams); + CleanupStack::PopAndDestroy(inParams); + break; + } + case ECmdSendVia: + { + iModel->SendViaL(iSendUi); + break; + } + + // Handles Middle SoftKey presses in this view + case ECmdMSK: + { + // Don't forward the command if dimmed button was clicked or + // if model can't handle commands + if (iModel->ButtonState(iContainer->FocusedButton()) == EDimmed + || !iModel->CanHandleCommands()) + { + break; + } + + // Fetch the command to execute + TInt commandId(iModel->CommandId(iContainer->FocusedButton())); + + iModel->HandleCommandL(commandId); + AppUi()->HandleCommandL(commandId); + + iContainer->UpdateButtonPanel(EVRUpdateStateChange); + break; + } + case ECmdUSBChange: + if (iUsbWaitDialog) + { + iUsbWaitDialog->ProcessFinishedL(); + } + iContainer->UpdateButtonPanel(EVRUpdateStateChange); + break; + default: + { + iModel->HandleCommandL(aCommandId); + AppUi()->HandleCommandL(aCommandId); + break; + } + } + } + +// --------------------------------------------------------------------------- +// CVRRecView::DynInitMenuPaneL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) + { + + switch ( aResourceId ) + { + case R_VR_REC_MENUPANE_DEFAULT: + { + // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(ECmdHelp, ETrue); + } + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdRecord, ETrue); + aMenuPane->SetItemDimmed(ECmdDelete, ETrue); + aMenuPane->SetItemDimmed(ECmdRename, ETrue); + aMenuPane->SetItemDimmed(ECmdGoToMyClips, ETrue); + } + + TRAP_IGNORE(AddSendToMenuL( aResourceId, aMenuPane )); + + break; + } + + case R_VR_REC_MENUPANE_VIEWER: + { + TUid appuid( KNullUid ); + CEikAppUi* container = iEikonEnv->EikAppUi()->ContainerAppUi(); + if ( container ) + { + // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(ECmdHelp, ETrue); + } + + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdSaveAttachment, ETrue); + } + + appuid = container->Application()->AppDllUid(); + if ((appuid == KUidMmsEditor) || (appuid == KUidMailEditor)) + { + aMenuPane->SetItemDimmed(ECmdSaveAttachment, ETrue); + } + else + { + TRAP_IGNORE(AddSendToMenuL(aResourceId, aMenuPane)); + } + } + + break; + } + case R_VR_SETTINGS_MENUPANE: + { + // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(ECmdHelp, ETrue); + } + break; + } + + case R_VR_REC_MENUPANE_DELETED: + { + // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(ECmdHelp, ETrue); + } + + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdRecord, ETrue); + aMenuPane->SetItemDimmed(ECmdGoToMyClips, ETrue); + + } + + // if recording already started, not allow to start recording again. + if (iModel->GetInRecordingFlag()) + { + aMenuPane->SetItemDimmed(ECmdRecord, ETrue); + aMenuPane->SetItemDimmed(ECmdSettings, ETrue); + iModel->SetInRecordingFlag(EFalse); + } + + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdRecord, ETrue); + aMenuPane->SetItemDimmed(ECmdGoToMyClips, ETrue); + } + + break; + } + + case R_VR_REC_MENUPANE_INCALL_RECORDING_DISABLED: + { + // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(ECmdHelp, ETrue); + } + + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdGoToMyClips, ETrue); + } + break; + } + + case R_VOREC_GS_SETTINGS_MENUPANE: + { + // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(EAknCmdHelp, ETrue); + } + break; + } + + default: + { + break; + } + } + } + + +// --------------------------------------------------------------------------- +// CVRRecView::GetSelectedFilesLC +// +// --------------------------------------------------------------------------- +// +MDesCArray* CVRRecView::GetSelectedFilesLC( TVRSelectionStyle& aStyle ) const + { + aStyle = EFocusedItem; + return iModel->GetSelectedFilesLC(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::DoActivateL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::DoActivateL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, const TDesC8& aCustomMessage) + { + TRAP_IGNORE( ReallyDoActivateL( aPrevViewId, + aCustomMessageId, + aCustomMessage ) ); + + } + +// --------------------------------------------------------------------------- +// CVRRecView::DoDeactivate +// +// --------------------------------------------------------------------------- +// +void CVRRecView::DoDeactivate() + { + iModel->Deactivate(); + + iModel->LeaveContext(); + + CAknViewAppUi* appUi = AppUi(); + if ( iContainer ) + { + appUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + + if ( iActivationContainer ) + { + appUi->RemoveFromViewStack( *this, iActivationContainer ); + delete iActivationContainer; + iActivationContainer = NULL; + } + + } + + +// --------------------------------------------------------------------------- +// CVRRecView::ViewDeactivated +// +// --------------------------------------------------------------------------- +// +void CVRRecView::ViewDeactivated() + { +#ifdef _DEBUG + RDebug::Print( _L( "CVRRecView::ViewDeactivated" )); +#endif + + TInt err = 0; + + if (!iModel->IncomingCall() && (iModel->VisualStateId() == EStatePlaying + || iModel->VisualStateId() == EStateRecording)) + { + + if (iModel->VisualStateId() == EStateRecording && iCommand + == ECmdCancelNote) + { + TRAP_IGNORE (iModel->HandleCommandL( ECmdSaveAttachment )); + } + + // Is autolock activating? + RProperty prop; + TInt val; + prop.Get( KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, val ); + + if ( val == EAutolockOff && //Do not pause when focus is lost because of autolock + !iModel->GetIfStopCalled()) + { + + //messy, if it is ACC format, stop it. in the future when Pause is supported, it needs change +#ifdef __AAC_ENCODER_PLUGIN + if ((iModel->Quality() == EQualityHigh) && (GetStateId() + == EStateRecording)) + { + TRAP_IGNORE (iModel->HandleCommandL( ECmdAutoStopInterrupted )); + } + else + { + TRAP( err, iModel->HandleCommandL( ECmdPause ) ); + } + +#else + TRAP( err, iModel->HandleCommandL( ECmdPause ) ); +#endif + + + if( err ) + { +#ifdef _DEBUG + RDebug::Print( + _L("CVRRecView::ViewDeactivated, PauseError Id: %d"), + err); +#endif + } + } + + } + else + { + TRAP_IGNORE( iModel->HandleCommandL( ECmdAutoStopInterrupted ) ); + } + + CAknView::ViewDeactivated(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::ViewActivatedL +// The model's ActivateL() function is called to invoke any functionality +// required when the UI is activated (e.g., for In-call recording diabling +// feature) +// --------------------------------------------------------------------------- +// +void CVRRecView::ViewActivatedL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, const TDesC8& aCustomMessage) + { + // dismiss sound player / file manager if it was active so that recording + // view becomes visible + delete iLaunchService; + iLaunchService = NULL; + + iModel->ActivateL(); + + CAknView::ViewActivatedL(aPrevViewId, aCustomMessageId, aCustomMessage); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::Cba +// +// --------------------------------------------------------------------------- +// +CEikButtonGroupContainer* CVRRecView::Cba() const + { + return CAknView::Cba(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::AddSendToMenuL +// Use CSendAppUi to display the Send cascade +// --------------------------------------------------------------------------- +// +void CVRRecView::AddSendToMenuL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + // If the focused file is closed content (e.g. a DRM file or a protected + // MIDI file), the whole Send option mustn't be shown. + CCommonContentPolicy* ccp = CCommonContentPolicy::NewLC(); + MDesCArray* filenames = iModel->GetSelectedFilesLC(); + if (filenames->MdcaCount() > 0 && !ccp->IsClosedFileL( + filenames->MdcaPoint(0))) + { + // Set proper capabilities + TSendingCapabilities capabilities(0, KVRSendUiMsgSize, + TSendingCapabilities::ESupportsAttachments); + + // We want the send menuitem after a specific item + TInt itemPosForSend(0); + if (aResourceId == R_VR_REC_MENUPANE_DEFAULT) + { + aMenuPane->ItemAndPos(ECmdRename, itemPosForSend); + } + else if (aResourceId == R_VR_REC_MENUPANE_VIEWER) + { + aMenuPane->ItemAndPos(ECmdSaveAttachment, itemPosForSend); + } + itemPosForSend++; + if (!CVRUSBStateHanlder::IsUsbActive()) + { + iSendUi->AddSendMenuItemL(*aMenuPane, itemPosForSend, + ECmdSendVia, capabilities); + } + } + CleanupStack::PopAndDestroy(2); // ccp, filenames + } + +// --------------------------------------------------------------------------- +// CVRRecView::LayoutChangedL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::LayoutChangedL( TInt aType ) + { + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + iContainer->HandleResourceChangeL( aType ); + } + } + + +// --------------------------------------------------------------------------- +// CVRRecView::ReallyDoActivateL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::ReallyDoActivateL(const TVwsViewId& /*aPrevViewId*/, + TUid aCustomMessageId, const TDesC8& /*aCustomMessage*/) + { + // Don't do anything if activation is ongoing + if (iActivationContainer) + { + return; + } + + // If container exists, we have already been activated + // Deactivate needed before new activation. + if (iContainer) + { + DoDeactivate(); + } + + // Display an empty UI container until model has been fully activated + iActivationContainer = new( ELeave ) CVRRecViewActivationContainer; + iActivationContainer->ConstructL( ClientRect() ); + CAknViewAppUi* appUi = AppUi(); + appUi->AddToViewStackL( *this, iActivationContainer ); + iActivationContainer->ActivateL(); + + iDialogActivator = new( ELeave ) CVRRecViewDialogActivator(iModel); + CheckDriveState(); + + // Activate model in correct context asynchronically. + // iContainer will be activated trough callback after model activation + TCallBack cb(ActivationCallBack, this); + iContext = static_cast (aCustomMessageId.iUid); + iDialogActivator->SetViewContexts(iContext); + iModelActivator->Activate(iContext , cb); + + // Construct the real container + iContainer = new (ELeave) CVRRecViewContainer; + iContainer->ConstructL(ClientRect(), iModel, iModel, iModel, this); + iContainer->SetKeyObserver(iModel); + iContainer->SetVolumeChangeObserver(iModel); + } + +// --------------------------------------------------------------------------- +// CVRRecView::CheckDriveState +// +// --------------------------------------------------------------------------- +// +void CVRRecView::CheckDriveState() + { + TInt memoDrive = VRUtils::MemoDriveL(); + if (VRUtils::DriveValid(memoDrive)) + { + VRUtils::SetMemoDriveL((TDriveNumber) memoDrive); + } + else + { + TInt defaultDrive = VRUtils::DefaultMemoDriveL(); //eMMC + if (defaultDrive == memoDrive) + { + SetDriveL(); + } + else + { + if (VRUtils::DriveValid(defaultDrive)) + { + VRUtils::SetMemoDriveL((TDriveNumber) defaultDrive); + } + else + { + SetDriveL(); + } + } + } + + + if (iModel->GetIsDriveReady() && CVRUSBStateHanlder::IsUsbActive()) + { + iModel->SetIsDriveReady(EFalse); + iDialogActivator->SetDialogType(EDialogForWaitUSBPluggingOut); + iDialogActivator->Call(); + } + + + if(iModel->GetIsDriveReady()) + { + /***** check if memory is below min value, if yes, close app*****/ + RFs& fs(CEikonEnv::Static()->FsSession()); + if (SysUtil::DiskSpaceBelowCriticalLevelL(&fs, 0, VRUtils::MemoDriveL())) + { + HBufC* errorText = StringLoader::LoadLC( + R_VR_MEMORY_LOW_STOP_WARNING); + CAknErrorNote* dlg = new (ELeave) CAknErrorNote(ETrue); + dlg->ExecuteLD(*errorText); + CleanupStack::PopAndDestroy(errorText); + iModel->SendExitEvent(); + } + // check memory size end + } + } + +// --------------------------------------------------------------------------- +// Make user insert the SD card, and choose SD card as the memo storage +// --------------------------------------------------------------------------- +// +void CVRRecView::SetDriveL() + { + TInt driveRemovableMassStorage = VRUtils::GetRemovableMassStorageL(); + if ( VRUtils::DriveValid( (TDriveNumber) driveRemovableMassStorage ) ) + { + VRUtils::SetMemoDriveL( (TDriveNumber) driveRemovableMassStorage ); + } + else + { + iModel->SetIsDriveReady(EFalse); + if (CVRUSBStateHanlder::IsUsbActive()) + { + iDialogActivator->SetDialogType(EDialogForWaitUSBPluggingOut); + iDialogActivator->Call(); + } + else + { + iDialogActivator->SetDialogType(EDialogForWaitStorageCard); + iDialogActivator->Call(); + } + } + } + +// --------------------------------------------------------------------------- +// This method show a dialog to warn user to insert the SD card. +// --------------------------------------------------------------------------- +// +TBool CVRRecView::ShowDialogForWaitStorageCardL() + { + HBufC* text = StringLoader::LoadLC( R_QTN_CCOR_INSERT_MMC ); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + TInt result( dlg->ExecuteLD( R_INSERT_F_CARD_DIALOG, *text ) ); + CleanupStack::PopAndDestroy( text ); + + if ( result ) + { + return ETrue; + } + return EFalse; + } + +// --------------------------------------------------------------------------- +// CVRRecView::SetFileHandle +// +// --------------------------------------------------------------------------- +// +void CVRRecView::SetFileHandle( RFile& aFile ) + { + iModel->SetFileHandle( aFile ); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::GetFile +// +// --------------------------------------------------------------------------- +// +RFile& CVRRecView::GetFile() + { + return iModel->MemoFileHandle(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::ActivationCallBack +// +// --------------------------------------------------------------------------- +// +TInt CVRRecView::ActivationCallBack( TAny* aRecView ) + { + CVRRecView* view = reinterpret_cast< CVRRecView* >( aRecView ); + TRAP_IGNORE( view->ActivateContainerL() ); + return ETrue; + } + + +// --------------------------------------------------------------------------- +// CVRRecView::ActivateContainerL +// +// --------------------------------------------------------------------------- +// +void CVRRecView::ActivateContainerL() + { + // Activate the actual container and remove + // the one used during model construction + CAknViewAppUi* appUi = AppUi(); + appUi->AddToViewStackL( *this, iContainer ); + iContainer->ActivateL(); + + // Delete the empty container, it's not needed anymore + if ( iActivationContainer ) + { + appUi->RemoveFromViewStack( *this, iActivationContainer ); + delete iActivationContainer; + iActivationContainer = NULL; + } + + } + +TUint CVRRecView::GetStateId() const + { +// if (iModel) + return iModel->VisualStateId(); + } + + +// --------------------------------------------------------------------------- +// CVRRecView::IsEmbedded +// +// --------------------------------------------------------------------------- +// +TBool CVRRecView::IsEmbedded() const + { + + return iModel->IsEmbedded(); + + } + + +// --------------------------------------------------------------------------- +//Returns the active quality setting. +//return Quality setting of the active memo +// --------------------------------------------------------------------------- +TVRQuality CVRRecView::Quality() const + { + return iModel->Quality(); + } + +TInt CVRRecView::HandleUsbPlugInL() + { + if(MenuBar()->IsDisplayed()) + { + MenuBar()->StopDisplayingMenuBar(); + MenuBar()->TryDisplayMenuBarL(); + } + + if (EStateRecording == iModel->VisualStateId() || EStateRecordingPaused + == iModel->VisualStateId() || EStatePlaying + == iModel->VisualStateId() || EStatePlayingPaused + == iModel->VisualStateId()) + { + HandleCommandL(ECmdStop); + } + + if (EStateIdleEmbedded == iModel->VisualStateId() || EStateRecordEmbedded + == iModel->VisualStateId() || EStateIdleRecordEmbedded + == iModel->VisualStateId()) + { + ShowDialogForWaitUSBPluggingOutL(); + AppUi()->Exit(); + } + + HandleCommandL(ECmdUSBChange); + if(iUsbWaitDialog == NULL) + WaitDialogForUSBPluggingOut(iUsbWaitDialog); + return KErrNone; + } + +TInt CVRRecView::HandleUsbPlugOutL() + { + if(MenuBar()->IsDisplayed()) + { + MenuBar()->StopDisplayingMenuBar(); + MenuBar()->TryDisplayMenuBarL(); + } + + + HandleCommandL(ECmdUSBChange); + + if(!VRUtils::DriveValid(VRUtils::MemoDriveL())) + { + iModel->SendExitEvent(); + } + return KErrNone; + } + +void CVRRecView::DialogDismissedL(TInt /*aButtonId*/) + { + HandleCommandL(ECmdUSBChange); + } + +// --------------------------------------------------------------------------- +// Called by UI Framework when view switches to and from foreground +// --------------------------------------------------------------------------- +/* +void CVRRecView::HandleForegroundEventL( TBool aForeground ) + { + // If the view is going to background, pause recording for stand alone + // application mode + if ( !aForeground && !iModel->IsEmbedded() && iCommand != ECmdCancelNote ) + { + TInt err(0); + if ( !iModel->IncomingCall() && ( iModel->VisualStateId() == EStatePlaying ||iModel->VisualStateId() == EStateRecording ) ) + { + //messy, if it is ACC format, stop it. in the future when Pause is supported, it needs change +#ifdef __AAC_ENCODER_PLUGIN + if ((iModel->Quality() == EQualityHigh) && (GetStateId() == EStateRecording)) + { + TRAP_IGNORE (iModel->HandleCommandL( ECmdAutoStopInterrupted )); + } + else + { + TRAP( err, iModel->HandleCommandL( ECmdPause ) ); + } + +#else + TRAP( err, iModel->HandleCommandL( ECmdPause ) ); +#endif + + if( err ) + { +#ifdef _DEBUG + RDebug::Print( _L("CVRRecView::ViewDeactivated, PauseError Id: %d"), err ); +#endif + } + } + else + { + TRAP_IGNORE( iModel->HandleCommandL( ECmdAutoStopInterrupted ) ); + } + } + + // iCommand = 0; + + // Forward to handle default event handling. + CAknView::HandleForegroundEventL(aForeground); + } +*/