--- /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 <aknViewAppUi.h>
+#include <AknQueryDialog.h>
+#include <avkon.hrh>
+#include <barsread.h>
+#include <eikbtgpc.h>
+#include <eikmenub.h>
+#include <StringLoader.h>
+#include <apparc.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <CommonContentPolicy.h>
+#include <vwsdef.h>
+#include <pathinfo.h>
+#include <sendui.h>
+#include <avkon.rsg>
+#include <featmgr.h>
+#include <VoiceRecorderUID.h>
+#include <voicerecorder.rsg>
+#include <e32property.h>
+#include <coreapplicationuisdomainpskeys.h>
+#include <AknLaunchAppService.h>
+#include <AiwGenericParam.h>
+#include <sysutil.h>
+#include <aknnotewrappers.h>
+
+#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<TVRRecViewContexts> (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);
+ }
+*/