# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1273583758 -10800 # Node ID 4e5b531d23cb5ac77d119086a328623bf2f38cf9 # Parent a2fdc35b8f46a7a774085aafc6b02cb2551316dc Revision: 201017 Kit: 201019 diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/AppSrc/CVRAppUI.cpp --- a/voicerecorder/AppSrc/CVRAppUI.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/AppSrc/CVRAppUI.cpp Tue May 11 16:15:58 2010 +0300 @@ -51,7 +51,7 @@ #ifdef RD_MULTIPLE_DRIVE #include #endif - +#include _LIT( KVRCommandRecord, "record" ); // --------------------------------------------------------------------------- @@ -71,15 +71,15 @@ // CVRAppUi::~CVRAppUi() { - if ( iActiveWait.IsStarted() ) - { - iActiveWait.AsyncStop(); - } - - if ( iDoorObserver ) - { - iDoorObserver->NotifyExit( MApaEmbeddedDocObserver::EEmpty ); - } + if (iActiveWait.IsStarted()) + { + iActiveWait.AsyncStop(); + } + + if (iDoorObserver) + { + iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::EEmpty); + } delete iErrorUI; FeatureManager::UnInitializeLib(); @@ -119,16 +119,16 @@ if ( memoStore == EMemoStoreMMC ) { // check if USB is connected, if so, then need to switch to phone memory - if (IsUsbActive()) - { - HBufC* noteText = iCoeEnv->AllocReadResourceLC( - R_QTN_MEMC_VOREC_NOTE1 ); - CAknInformationNote* infoNote = - new( ELeave ) CAknInformationNote( ETrue ); - infoNote->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy( noteText ); - VRUtils::SetMemoStoreL( EMemoStorePhoneMemory ); - } + if (CVRUSBStateHanlder::IsUsbActive()) + { + HBufC* noteText = iCoeEnv->AllocReadResourceLC( + R_QTN_MEMC_VOREC_NOTE1 ); + CAknInformationNote* infoNote = + new( ELeave ) CAknInformationNote( ETrue ); + infoNote->ExecuteLD( *noteText ); + CleanupStack::PopAndDestroy( noteText ); + VRUtils::SetMemoStoreL( EMemoStorePhoneMemory ); + } // MMC not available or locked else if ( memoStore && ( mmcInfo.iDriveLocked || !mmcInfo.iDrivePresent ) ) @@ -160,71 +160,51 @@ } // for multiple drives #else - TInt memoDrive = VRUtils::MemoDriveL(); - TInt defaultDrive = VRUtils::DefaultMemoDriveL(); - - //not default phone memory - if ( memoDrive != defaultDrive ) - { - // check if USB is connected, if so, then need to switch to phone memory - if (IsUsbActive()) - { - HBufC* noteText = iCoeEnv->AllocReadResourceLC( - R_QTN_MEMC_VOREC_NOTE1 ); - CAknInformationNote* infoNote = - new( ELeave ) CAknInformationNote( ETrue ); - infoNote->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy( noteText ); - VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive ); - } - else - { - TUint status( 0 ); - VRUtils::GetDriveInfo(memoDrive, status); - - // Drive not available or locked - if ((status & DriveInfo::EDriveLocked) || !(status & DriveInfo::EDrivePresent)) - { - HBufC* noteText = iCoeEnv->AllocReadResourceLC(R_QTN_MEMC_VOREC_NOTE1 ); - CAknInformationNote* infoNote = new( ELeave ) CAknInformationNote( ETrue ); - infoNote->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy( noteText ); - VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive ); - } - else if ( status & DriveInfo::EDriveReadOnly ) - { - HBufC* noteText = iCoeEnv->AllocReadResourceLC(R_QTN_MEMC_VOREC_NOTE2 ); - CAknInformationNote* infoNote = new( ELeave ) CAknInformationNote( ETrue ); - infoNote->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy( noteText ); - VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive ); - } - else if ( status & DriveInfo::EDriveCorrupt ) - { - // Drive corrupted -> use phone memory - VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive ); - } - } - } + 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(); + } + } + } - /***** 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 ); - Exit(); - } - // check memory size end + /***** 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); + Exit(); + } + // check memory size end #endif } - CVRRecView* view = CVRRecView::NewLC( - R_VR_RECORDER_VIEW, R_VR_RECVIEW_STATES ); + CVRRecView* view = CVRRecView::NewLC(R_VR_RECORDER_VIEW, + R_VR_RECVIEW_STATES); AddViewL( view ); iLayoutChangeObserver = view; @@ -233,15 +213,78 @@ SetDefaultViewL( *view ); // Activate view straight away, if started through new file service - if ( iEikonEnv->StartedAsServerApp() ) - { - ActivateLocalViewL( TUid::Uid( KVRRecorderViewUID ), - TUid::Uid( EContextRecordNewForRemote ), KNullDesC8 ); - } + if (iEikonEnv->StartedAsServerApp()) + { + ActivateLocalViewL(TUid::Uid(KVRRecorderViewUID), TUid::Uid( + EContextRecordNewForRemote), KNullDesC8); + } } // --------------------------------------------------------------------------- +// Make user insert the SD card, and choose SD card as the memo storage +// --------------------------------------------------------------------------- +// +void CVRAppUi::SetDriveL() + { + if ( VRUtils::DriveValid( EDriveF ) ) + { + VRUtils::SetMemoDriveL((TDriveNumber)EDriveF ); + } + else + { + if (CVRUSBStateHanlder::IsUsbActive()) + { + ShowDialogForWaitUSBPluggingOutL(); + Exit(); + + } + while (!VRUtils::DriveValid(EDriveF)) + { + if (!ShowDialogForWaitStorageCardL()) + { + Exit(); + } + } + // Come to here when drive F is valid + VRUtils::SetMemoDriveL((TDriveNumber) EDriveF); + } + } + +// --------------------------------------------------------------------------- +// This method show a dialog to warn user to insert the SD card. +// --------------------------------------------------------------------------- +// +TBool CVRAppUi::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; + } + + +TBool CVRAppUi::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; +} + +// --------------------------------------------------------------------------- // CVRAppUi::HandleCommandL // // --------------------------------------------------------------------------- @@ -266,17 +309,18 @@ iView->HandleCommandL( ECmdCancelNote ); } - // The file service needs to abort if it's still going on - if ( iEmbeddedObserver ) - { - CNewFileServiceBase * iNewFileService = NULL; - iNewFileService = dynamic_cast(iEmbeddedObserver); - if(iNewFileService != NULL) - { - iNewFileService->SetErrorCode(KErrAbort); - } - iEmbeddedObserver->AbortL(); - } + // The file service needs to abort if it's still going on + if (iEmbeddedObserver) + { + CNewFileServiceBase * iNewFileService = NULL; + iNewFileService + = dynamic_cast (iEmbeddedObserver); + if (iNewFileService != NULL) + { + iNewFileService->SetErrorCode(KErrAbort); + } + iEmbeddedObserver->AbortL(); + } Exit(); break; @@ -288,75 +332,75 @@ iView->HandleCommandL( ECmdCancelNote ); } - // The file service needs to abort if it's still going on - if ( iEmbeddedObserver ) - { - CNewFileServiceBase * iNewFileService = NULL; - iNewFileService = dynamic_cast(iEmbeddedObserver); - if(iNewFileService != NULL) - { - iNewFileService->SetErrorCode(KErrAbort); - } - iEmbeddedObserver->AbortL(); - } - - Exit(); + // The file service needs to abort if it's still going on + if (iEmbeddedObserver) + { + CNewFileServiceBase * iNewFileService = NULL; + iNewFileService + = dynamic_cast (iEmbeddedObserver); + if (iNewFileService != NULL) + { + iNewFileService->SetErrorCode(KErrAbort); + } + iEmbeddedObserver->AbortL(); + } + + Exit(); + break; + } + case ECmdHelp: + { + if (FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + if (iIsSettingsOpen) + { + CArrayFix* contexts = AppHelpContextL(); + contexts->At(0).iContext = KVOREC_HLP_SETTINGS; + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), contexts); + } + else + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), AppHelpContextL()); + } + } break; - } - case ECmdHelp: - { - if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - if ( iIsSettingsOpen ) - { - CArrayFix* contexts = AppHelpContextL(); - contexts->At(0).iContext = KVOREC_HLP_SETTINGS; - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - contexts ); - } - else - { - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - AppHelpContextL() ); - } - } - break; - } - case ECmdSettings: - { - if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) || - VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) ) - { - iIsSettingsOpen = ETrue; - CVRSettingsDialog* settingsDlg = CVRSettingsDialog::NewL(); - settingsDlg->ExecuteLD( R_VR_SETTINGS_DIALOG ); - iIsSettingsOpen = EFalse; - } - break; - } - case ECmdNewFileServiceNotify: - { - if ( iActiveWait.IsStarted() ) - { - iActiveWait.AsyncStop(); - } - break; - } - case ECmdEmbeddedRecordingReady: - { - if ( iEmbeddedObserver ) - { - TBool canExit( ETrue ); - - TVRSelectionStyle selStyle; - TPtrC memoFile( SelectionProviderL()-> - GetSelectedFilesLC( selStyle )-> - MdcaPoint( 0 ) ); - if ( memoFile.Length() > 0 ) - { - TFileName myFilename( memoFile ); - canExit = iEmbeddedObserver->FileCompleteL( myFilename ); - } + } + case ECmdSettings: + { + if (FeatureManager::FeatureSupported(KFeatureIdMmc) + || VRUtils::FeatureEnabled(EVRFeatureShowQualitySetting)) + { + iIsSettingsOpen = ETrue; + CVRSettingsDialog* settingsDlg = CVRSettingsDialog::NewL(); + settingsDlg->ExecuteLD(R_VR_SETTINGS_DIALOG); + iIsSettingsOpen = EFalse; + } + break; + } + case ECmdNewFileServiceNotify: + { + if (iActiveWait.IsStarted()) + { + iActiveWait.AsyncStop(); + } + break; + } + case ECmdEmbeddedRecordingReady: + { + if (iEmbeddedObserver) + { + TBool canExit(ETrue); + + TVRSelectionStyle selStyle; + TPtrC memoFile(SelectionProviderL()-> GetSelectedFilesLC( + selStyle)-> MdcaPoint(0)); + if (memoFile.Length() > 0) + { + TFileName myFilename(memoFile); + canExit = iEmbeddedObserver->FileCompleteL(myFilename); + } // destroy array from GetSelectedFilesLC() CleanupStack::PopAndDestroy(); @@ -404,12 +448,12 @@ { CAknViewAppUi::HandleResourceChangeL( aType ); - if ( aType == KEikDynamicLayoutVariantSwitch || - aType == KAknsMessageSkinChange ) - { - iLayoutChangeObserver->LayoutChangedL( aType ); - } - } + if (aType == KEikDynamicLayoutVariantSwitch || aType + == KAknsMessageSkinChange) + { + iLayoutChangeObserver->LayoutChangedL(aType); + } + } // --------------------------------------------------------------------------- // CVRAppUi::RecordNewFileL @@ -439,24 +483,23 @@ TFileName& aDocumentName, const TDesC8& aTail ) { - // Check if we got "-record" as command line parameter - // convert 8-bit descriptor to a 16-bit one without altering data. - const TUint16* ptr16 = reinterpret_cast< const TUint16* >( - aTail.Ptr() ); - TPtrC16 tail( ptr16, aTail.Size() >> 1); + // Check if we got "-record" as command line parameter + // convert 8-bit descriptor to a 16-bit one without altering data. + const TUint16* ptr16 = reinterpret_cast (aTail.Ptr()); + TPtrC16 tail(ptr16, aTail.Size() >> 1); - if ( aDocumentName.Compare( KVRCommandRecord ) == 0 - || tail.Compare( KVRCommandRecord ) == 0 ) - { - // Enter recording context - ActivateLocalViewL( TUid::Uid( KVRRecorderViewUID ), - TUid::Uid( EContextRecordNewNormal ), KNullDesC8 ); - return EFalse; - } + if (aDocumentName.Compare(KVRCommandRecord) == 0 || tail.Compare( + KVRCommandRecord) == 0) + { + // Enter recording context + ActivateLocalViewL(TUid::Uid(KVRRecorderViewUID), TUid::Uid( + EContextRecordNewNormal), KNullDesC8); + return EFalse; + } else // No record parameter, start normally { - ActivateLocalViewL( TUid::Uid( KVRRecorderViewUID ), - TUid::Uid( EContextEmptyNormal ), KNullDesC8 ); + ActivateLocalViewL(TUid::Uid(KVRRecorderViewUID), TUid::Uid( + EContextEmptyNormal), KNullDesC8); } if ( !ConeUtils::FileExists( aDocumentName ) ) @@ -471,9 +514,10 @@ // // --------------------------------------------------------------------------- // -void CVRAppUi::HandleApplicationSpecificEventL(TInt aType,const TWsEvent& aEvent) +void CVRAppUi::HandleApplicationSpecificEventL(TInt aType, + const TWsEvent& aEvent) { - if( aType == EAknSoftkeyExit ) + if( aType == EAknSoftkeyExit || aType == KAknShutOrHideApp) { Exit(); } @@ -489,16 +533,5 @@ { iEmbeddedObserver = aObserver; } - - -// --------------------------------------------------------------------------- -// CVRAppUi::IsUsbActive -// --------------------------------------------------------------------------- -// -TBool CVRAppUi::IsUsbActive() - { - TInt usbState; - TInt err = RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality,usbState); - return !err && usbState == KUsbPersonalityIdMS; - } + // End of file diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/AppSrc/CVRAppUi.h --- a/voicerecorder/AppSrc/CVRAppUi.h Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/AppSrc/CVRAppUi.h Tue May 11 16:15:58 2010 +0300 @@ -27,11 +27,12 @@ #include // MApaEmbeddedDocObserver #include "MVREmbeddedObserver.h" - +#include "VRUSBStateHanlder.h" // FORWARD DECLARATIONS class MVRSelectionProvider; class CErrorUI; class MVRLayoutChangeObserver; +class CAknWaitDialog; // CLASS DECLARATION /** @@ -104,7 +105,10 @@ */ void HandleApplicationSpecificEventL(TInt aType, const TWsEvent& aEvent); - + + private: // from MVRUSBEventObserver + void HandleUSBEventL(); + private: // new methods /** @@ -114,12 +118,23 @@ */ MVRSelectionProvider* SelectionProviderL(); - /** - * Check USB connection state - * interface. - * @return True/False - */ - TBool IsUsbActive(); + + /** + * This method show a dialog to warn user to insert the SD card. + * @return if user insert the SD card or not + */ + static TBool ShowDialogForWaitStorageCardL(); + + /** + * This method show a dialog to warn user to plug the usb cable. + * @return if user plug the usb cable or not + */ + static TBool ShowDialogForWaitUSBPluggingOutL(); + + /** + * Make user insert the SD card, and choose SD card as the memo storage + */ + void SetDriveL(); private: // data /** @@ -148,7 +163,8 @@ /* * For help context, whether settings page is active. */ - TBool iIsSettingsOpen; + TBool iIsSettingsOpen; + }; diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.cpp --- a/voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.cpp Tue May 11 16:15:58 2010 +0300 @@ -177,7 +177,6 @@ ECFDDialogTypeNormal, R_VOREC_MEMORY_SELECTION_DIALOG, // Default resource Id EFalse, - AknCommonDialogsDynMem::EMemoryTypePhone | AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage | AknCommonDialogsDynMem::EMemoryTypeMMCExternal); diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/AppSrc/MVRUSBEventObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/AppSrc/MVRUSBEventObserver.h Tue May 11 16:15:58 2010 +0300 @@ -0,0 +1,42 @@ +/* +* 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 can be used to observe changes that has been happened in +* CVRUSBEventHandler class +* +*/ + + +#ifndef __MVRUSBEVENTOBSERVER_H +#define __MVRUSBEVENTOBSERVER_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +/** +* MVRUSBEventObserver +*/ +class MVRUSBEventObserver + { + public: // Constructors and destructor + + virtual void HandleUSBEventL() = 0; + + }; + +#endif // __MVRUSBEVENTOBSERVER_H + +// End of File diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/BWINS/VoiceRecorderUtilsUU.DEF --- a/voicerecorder/BWINS/VoiceRecorderUtilsUU.DEF Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/BWINS/VoiceRecorderUtilsUU.DEF Tue May 11 16:15:58 2010 +0300 @@ -27,5 +27,8 @@ ?SetQualityL@VRUtils@@SAXW4TVRQuality@@@Z @ 26 NONAME ; void VRUtils::SetQualityL(enum TVRQuality) ?ShowMemoryFullConfirmationQuery@VRUtils@@SAXH@Z @ 27 NONAME ; void VRUtils::ShowMemoryFullConfirmationQuery(int) ?UnsupportedCallTypeOngoing@VRUtils@@SAHH@Z @ 28 NONAME ; int VRUtils::UnsupportedCallTypeOngoing(int) - ?GetDriveInfo@VRUtils@@SAXHAAI@Z @ 29 NONAME ; void VRUtils::GetDriveInfo(int, unsigned int &) + ?GetDriveInfo@VRUtils@@SAHHAAI@Z @ 29 NONAME ; int VRUtils::GetDriveInfo(int, unsigned int &) + ?IsUsbActive@CVRUSBStateHanlder@@SAHXZ @ 30 NONAME ; int CVRUSBStateHanlder::IsUsbActive(void) + ?NewL@CVRUSBStateHanlder@@SAPAV1@PAVMVRUSBStateObserver@@@Z @ 31 NONAME ; class CVRUSBStateHanlder * CVRUSBStateHanlder::NewL(class MVRUSBStateObserver *) + ?DriveValid@VRUtils@@SAHH@Z @ 32 NONAME ; int VRUtils::DriveValid(int) diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/Conf/voicerecorder.confml Binary file voicerecorder/Conf/voicerecorder.confml has changed diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/EABI/VoiceRecorderUtilsUU.DEF --- a/voicerecorder/EABI/VoiceRecorderUtilsUU.DEF Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/EABI/VoiceRecorderUtilsUU.DEF Tue May 11 16:15:58 2010 +0300 @@ -29,4 +29,9 @@ _ZN7VRUtils12GetDriveInfoEiRj @ 28 NONAME _ZN7VRUtils13SetMemoDriveLE12TDriveNumber @ 29 NONAME _ZN7VRUtils17DefaultMemoDriveLEv @ 30 NONAME + _ZN18CVRUSBStateHanlder11IsUsbActiveEv @ 31 NONAME + _ZN18CVRUSBStateHanlder4NewLEP19MVRUSBStateObserver @ 32 NONAME + _ZN7VRUtils10DriveValidEi @ 33 NONAME + _ZTI18CVRUSBStateHanlder @ 34 NONAME + _ZTV18CVRUSBStateHanlder @ 35 NONAME diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewInc/CVRRecView.h --- a/voicerecorder/RecViewInc/CVRRecView.h Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewInc/CVRRecView.h Tue May 11 16:15:58 2010 +0300 @@ -25,10 +25,14 @@ // INCLUDES #include +#include +#include +#include + #include "MVRSelectionProvider.h" #include "MVRLayoutChangeObserver.h" -#include #include "voicerecorder.hrh" +#include "VRUSBStateHanlder.h" // FORWARD DECLARATIONS class CAknLaunchAppService; @@ -39,16 +43,19 @@ // CLASS DEFINITION /** -* CVRRecView is an CAknView inherited view class that implements -* the recorder view functionality of Voicer Recorder. -* It owns the view container (which, in turn, owns all the ui controls) -* and the view model. -*/ -class CVRRecView - : public CAknView, public MVRSelectionProvider, - public MVRLayoutChangeObserver - { - private: // nested classes + * CVRRecView is an CAknView inherited view class that implements + * the recorder view functionality of Voicer Recorder. + * It owns the view container (which, in turn, owns all the ui controls) + * and the view model. + */ +class CVRRecView : public CAknView, + public MVRSelectionProvider, + public MVRLayoutChangeObserver, + public MVRUSBStateObserver, + public MProgressDialogCallback + { +private: + // nested classes /* * One shot class for model activation. Receives a pointer to @@ -265,32 +272,39 @@ TUid aCustomMessageId, const TDesC8& aCustomMessage ); - /* - * Called by iModelActivator object after model has been - * fully activated. - * @param aRecView Always a valid pointer to CVRRecView object - * @return Return value required by TCallBack, not used. - */ - static TInt ActivationCallBack( TAny* aRecView ); - - /* - * Non-static method called by ActivationCallBack. Activates - * the actual UI container and deletes the empty one. - */ - void ActivateContainerL(); - - private: // data - - /** - * Pointer to the UI control container. Owned. - */ - CVRRecViewContainer* iContainer; - - /** - * Pointer to the container that is displayed during - * model construction. Owned - */ - CVRRecViewActivationContainer* iActivationContainer; + /* + * Called by iModelActivator object after model has been + * fully activated. + * @param aRecView Always a valid pointer to CVRRecView object + * @return Return value required by TCallBack, not used. + */ + static TInt ActivationCallBack(TAny* aRecView); + + /* + * Non-static method called by ActivationCallBack. Activates + * the actual UI container and deletes the empty one. + */ + void ActivateContainerL(); + +public: + virtual TInt HandleUsbPlugInL(); + virtual TInt HandleUsbPlugOutL(); + + virtual void DialogDismissedL( TInt aButtonId ); + +private: + // data + + /** + * Pointer to the UI control container. Owned. + */ + CVRRecViewContainer* iContainer; + + /** + * Pointer to the container that is displayed during + * model construction. Owned + */ + CVRRecViewActivationContainer* iActivationContainer; /** * Pointer to the view model (statemachine). Owned. @@ -308,14 +322,19 @@ */ CVRRecViewModelActivator* iModelActivator; - /** - * The command that passed to Handlecommand - * - */ - TInt iCommand; - - CAknLaunchAppService* iLaunchService; - }; + /** + * The command that passed to Handlecommand + * + */ + TInt iCommand; + + CAknLaunchAppService* iLaunchService; + + CAknWaitDialog* iUsbWaitDialog; + + CVRUSBStateHanlder* iUSBStateHandler; + + }; #endif // __CVRRECVIEW_H__ diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRMdaRecorder.cpp --- a/voicerecorder/RecViewSrc/CVRMdaRecorder.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRMdaRecorder.cpp Tue May 11 16:15:58 2010 +0300 @@ -187,11 +187,11 @@ iViewModel = dynamic_cast (iAutoStopObserver); if(iViewModel != NULL) { - iViewModel->HandleCommandL(EEikCmdExit); + TRAP_IGNORE( iViewModel->HandleCommandL(EEikCmdExit) ); } else { - CEikonEnv::Static()->EikAppUi()->HandleCommandL( EAknSoftkeyExit); + TRAP_IGNORE( CEikonEnv::Static()->EikAppUi()->HandleCommandL( EAknSoftkeyExit) ); } } @@ -934,10 +934,15 @@ iPropVRState.Set( KPSUidVoiceRecorder, KVoiceRecorderMode, EVRIdle ); // Used to check the state of a phone call if any - if ( iCurrentCallHandler ) delete iCurrentCallHandler; + if ( iCurrentCallHandler ) + { + delete iCurrentCallHandler; + iCurrentCallHandler = NULL; + } TRAP_IGNORE( iCurrentCallHandler = CVRSystemEventHandler::NewL() ); - TInt currentState( iCurrentCallHandler->StateL( KPSUidCtsyCallInformation, KCTsyCallState ) ); + TInt currentState( 0 ); + TRAP_IGNORE( currentState = iCurrentCallHandler->StateL( KPSUidCtsyCallInformation, KCTsyCallState ) ); // Do not allow screen saver if there is an active phone call if(currentState == EPSCTsyCallStateRinging) diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h --- a/voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h Tue May 11 16:15:58 2010 +0300 @@ -27,7 +27,7 @@ * @lib Harvester * @since S60 3.0 */ -class CVRMediaRemovalMonitor : public CActive +NONSHARABLE_CLASS( CVRMediaRemovalMonitor ) : public CActive { public: diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRRecView.cpp --- a/voicerecorder/RecViewSrc/CVRRecView.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRRecView.cpp Tue May 11 16:15:58 2010 +0300 @@ -50,11 +50,38 @@ #include "CVRRecViewActivationContainer.h" #include "CVRRecViewModel.h" #include "VRUtils.h" +#include "VRUSBStateHanlder.h" // CONSTANTS -const TUid KUidMmsEditor = { 0x100058DE }; -const TUid KUidMailEditor = { 0x101F4CD6 }; +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 ======================================== @@ -63,12 +90,12 @@ // // --------------------------------------------------------------------------- // -CVRRecView::CVRRecViewModelActivator::CVRRecViewModelActivator( - CVRRecViewModel* aModel ) - : CAsyncOneShot( EPriorityNormal ), iModel( aModel ), - iContext( EContextEmptyNormal ) - { - } +CVRRecView::CVRRecViewModelActivator::CVRRecViewModelActivator( + CVRRecViewModel* aModel) : + CAsyncOneShot(EPriorityNormal), iModel(aModel), iContext( + EContextEmptyNormal) + { + } // --------------------------------------------------------------------------- @@ -157,14 +184,19 @@ AppUi()->RemoveFromViewStack( *this, iActivationContainer ); } - delete iContainer; - delete iActivationContainer; - delete iModel; - delete iSendUi; - delete iModelActivator; - delete iLaunchService; - } + delete iContainer; + delete iActivationContainer; + delete iModel; + delete iSendUi; + delete iModelActivator; + delete iLaunchService; + delete iUSBStateHandler; + if (iUsbWaitDialog) + { + TRAP_IGNORE(iUsbWaitDialog->ProcessFinishedL()); + } + } // --------------------------------------------------------------------------- // CVRRecView::ConstructL @@ -181,13 +213,19 @@ iModel->ConstructFromResourceL( reader ); CleanupStack::PopAndDestroy(); // reader; - // Create SendUi (Send as MMS, E-Mail, etc...) - iSendUi = CSendUi::NewL(); - - iModelActivator = new(ELeave) CVRRecViewModelActivator( iModel ); - // iCommand = 0; - } + // Create SendUi (Send as MMS, E-Mail, etc...) + iSendUi = CSendUi::NewL(); + + iModelActivator = new (ELeave) CVRRecViewModelActivator(iModel); + + iUSBStateHandler = CVRUSBStateHanlder::NewL(this); + if (CVRUSBStateHanlder::IsUsbActive()) + { + ShowDialogForWaitUSBPluggingOutL(); + AppUi()->Exit(); + } + } // --------------------------------------------------------------------------- // CVRRecView::Id @@ -195,8 +233,11 @@ // --------------------------------------------------------------------------- // TUid CVRRecView::Id() const - { - const TUid KVRRecViewUID = { KVRRecorderViewUID }; + { + const TUid KVRRecViewUID = + { + KVRRecorderViewUID + }; return KVRRecViewUID; } @@ -267,52 +308,57 @@ VRUtils::MemoStoreDirectoryL( path ); TInt sortMode = 0; - CAiwGenericParamList* inParams = CAiwGenericParamList::NewLC(); - inParams->AppendL(TAiwGenericParam( - EGenericParamDir, TAiwVariant( path ) ) ); - inParams->AppendL(TAiwGenericParam( - EGenericParamDir, TAiwVariant( sortMode ) ) ); + 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; - } - - default: - { - iModel->HandleCommandL( aCommandId ); - AppUi()->HandleCommandL( aCommandId ); - break; - } - } - } + 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 @@ -328,9 +374,16 @@ { // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) - { - aMenuPane->SetItemDimmed(ECmdHelp, ETrue); - } + { + aMenuPane->SetItemDimmed(ECmdHelp, ETrue); + } + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdRecord, ETrue); + aMenuPane->SetItemDimmed(ECmdDelete, ETrue); + aMenuPane->SetItemDimmed(ECmdRename, ETrue); + aMenuPane->SetItemDimmed(ECmdGoToMyClips, ETrue); + } AddSendToMenuL( aResourceId, aMenuPane ); break; @@ -348,17 +401,21 @@ aMenuPane->SetItemDimmed(ECmdHelp, ETrue); } - appuid = container->Application()->AppDllUid(); - if ( ( appuid == KUidMmsEditor ) || - ( appuid == KUidMailEditor ) ) - { - aMenuPane->SetItemDimmed( ECmdSaveAttachment, ETrue ); - } - else - { - AddSendToMenuL( aResourceId, aMenuPane ); - } - } + if (CVRUSBStateHanlder::IsUsbActive()) + { + aMenuPane->SetItemDimmed(ECmdSaveAttachment, ETrue); + } + + appuid = container->Application()->AppDllUid(); + if ((appuid == KUidMmsEditor) || (appuid == KUidMailEditor)) + { + aMenuPane->SetItemDimmed(ECmdSaveAttachment, ETrue); + } + else + { + AddSendToMenuL(aResourceId, aMenuPane); + } + } break; } @@ -380,26 +437,44 @@ aMenuPane->SetItemDimmed(ECmdHelp, ETrue); } - // if recording already started, not allow to start recording again. - if (iModel->GetInRecordingFlag()) - { - aMenuPane->SetItemDimmed(ECmdRecord, ETrue); - aMenuPane->SetItemDimmed(ECmdSettings, 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); - } - - break; - } + } + + 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); - } - 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: { @@ -436,15 +511,14 @@ // // --------------------------------------------------------------------------- // -void CVRRecView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - TRAP_IGNORE( ReallyDoActivateL( aPrevViewId, - aCustomMessageId, - aCustomMessage ) ); - } +void CVRRecView::DoActivateL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, const TDesC8& aCustomMessage) + { + TRAP_IGNORE( ReallyDoActivateL( aPrevViewId, + aCustomMessageId, + aCustomMessage ) ); + } // --------------------------------------------------------------------------- // CVRRecView::DoDeactivate @@ -487,16 +561,17 @@ #endif TInt err = 0; - - if ( !iModel->IncomingCall() && ( iModel->VisualStateId() == EStatePlaying || - iModel->VisualStateId() == EStateRecording ) ) - { - - if (iModel->VisualStateId() == EStateRecording && iCommand == ECmdCancelNote ) - { - TRAP_IGNORE (iModel->HandleCommandL( ECmdSaveAttachment )); - } - + + 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; @@ -508,14 +583,15 @@ //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 ) ); - } + if ((iModel->Quality() == EQualityHigh) && (GetStateId() + == EStateRecording)) + { + TRAP_IGNORE (iModel->HandleCommandL( ECmdAutoStopInterrupted )); + } + else + { + TRAP( err, iModel->HandleCommandL( ECmdPause ) ); + } #else TRAP( err, iModel->HandleCommandL( ECmdPause ) ); @@ -525,11 +601,12 @@ if( err ) { #ifdef _DEBUG - RDebug::Print( _L("CVRRecView::ViewDeactivated, PauseError Id: %d"), - err ); -#endif - } - } + RDebug::Print( + _L("CVRRecView::ViewDeactivated, PauseError Id: %d"), + err); +#endif + } + } } else @@ -549,8 +626,7 @@ // --------------------------------------------------------------------------- // void CVRRecView::ViewActivatedL(const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage) + TUid aCustomMessageId, const TDesC8& aCustomMessage) { // dismiss sound player / file manager if it was active so that recording // view becomes visible @@ -579,39 +655,38 @@ // 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 ); +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++; - - iSendUi->AddSendMenuItemL( *aMenuPane, - itemPosForSend, - ECmdSendVia, - capabilities ); - } - CleanupStack::PopAndDestroy( 2 ); // ccp, filenames - } - + // 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 @@ -633,22 +708,21 @@ // // --------------------------------------------------------------------------- // -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(); - } +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; @@ -657,18 +731,18 @@ appUi->AddToViewStackL( *this, iActivationContainer ); iActivationContainer->ActivateL(); - // Activate model in correct context asynchronically. - // iContainer will be activated trough callback after model activation - TCallBack cb( ActivationCallBack, this ); - iModelActivator->Activate( static_cast< TVRRecViewContexts >( - aCustomMessageId.iUid ), cb ); - - // Construct the real container - iContainer = new( ELeave ) CVRRecViewContainer; - iContainer->ConstructL( ClientRect(), iModel, iModel, iModel, this ); - iContainer->SetKeyObserver( iModel ); - iContainer->SetVolumeChangeObserver( iModel ); - } + // Activate model in correct context asynchronically. + // iContainer will be activated trough callback after model activation + TCallBack cb(ActivationCallBack, this); + iModelActivator->Activate( + static_cast (aCustomMessageId.iUid), cb); + + // Construct the real container + iContainer = new (ELeave) CVRRecViewContainer; + iContainer->ConstructL(ClientRect(), iModel, iModel, iModel, this); + iContainer->SetKeyObserver(iModel); + iContainer->SetVolumeChangeObserver(iModel); + } // --------------------------------------------------------------------------- @@ -758,6 +832,45 @@ return iModel->Quality(); } +TInt CVRRecView::HandleUsbPlugInL() + { + 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); + WaitDialogForUSBPluggingOut(iUsbWaitDialog); + return KErrNone; + } + +TInt CVRRecView::HandleUsbPlugOutL() + { + if (iUsbWaitDialog) + { + iUsbWaitDialog->ProcessFinishedL(); + } + + HandleCommandL(ECmdUSBChange); + return KErrNone; + } + +void CVRRecView::DialogDismissedL(TInt /*aButtonId*/) + { + HandleCommandL(ECmdUSBChange); + } + // --------------------------------------------------------------------------- // Called by UI Framework when view switches to and from foreground // --------------------------------------------------------------------------- diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRRecViewModel.cpp --- a/voicerecorder/RecViewSrc/CVRRecViewModel.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRRecViewModel.cpp Tue May 11 16:15:58 2010 +0300 @@ -45,6 +45,9 @@ #include "MessagingDomainCRKeys.h" // Disable e-mail variation flag #include // link against centralrepository.lib +#ifdef RD_MULTIPLE_DRIVE +#include +#endif #include "VoiceRecorderInternalCRKeys.h" #include @@ -53,12 +56,13 @@ #include "CVRMdaRecorder.h" #include "VRConsts.h" #include "CVRSystemEventHandler.h" -#include "CVRUSBEventHandler.h" #include "CVRMediaRemovalMonitor.h" #include "VRUtils.h" #include "CVRRecViewModel.h" #include +#include "VRUSBStateHanlder.h" + // CONSTANTS const TInt KAllowInCallRecording( 1 ); @@ -113,9 +117,6 @@ { delete iCurrentCallHandler; } - - delete iCurrentUSBHandler; - delete iCurrentMMCEjectHandler; } @@ -132,12 +133,6 @@ TRAP_IGNORE( iCurrentCallHandler = CVRSystemEventHandler::NewL() ); iCurrentCallHandler->Listen( KPSUidCtsyCallInformation, KCTsyCallState, this ); - - // for USB - iCurrentUSBHandler = CVRUSBEventHandler::NewL(); - iCurrentUSBHandler->Listen( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, - this ); - //listen MMC eject iCurrentMMCEjectHandler = CVRMediaRemovalMonitor::NewL(EDriveF, CEikonEnv::Static()->FsSession(), this); @@ -808,6 +803,10 @@ // TInt CVRRecViewModel::ButtonState( TInt aButtonId ) const { + if(CVRUSBStateHanlder::IsUsbActive()) + { + return EDimmed; + } // Disable rewind button if there's nothing to rewind if ( aButtonId == EButtonRewind && ( Position().Int64() / KVRSecondAsMicroSeconds ) < 1 ) @@ -2209,8 +2208,12 @@ //multiple drive #else - if (VRUtils::MemoDriveL() == VRUtils::DefaultMemoDriveL()) - { + TInt memoDrive = VRUtils::MemoDriveL(); + TUint status( 0 ); + VRUtils::GetDriveInfo( memoDrive, status ); + + if ( status & DriveInfo::EDriveInternal ) + { ShowNoteL( R_VR_MEMORY_WARNING, EAknGlobalWarningNote ); } else @@ -2411,45 +2414,6 @@ } -// --------------------------------------------------------------------------- -// CVRRecViewModel::HandleUSBEventL -// -// --------------------------------------------------------------------------- -// -void CVRRecViewModel::HandleUSBEventL() - { - // Fetch the changed value from Pubsub - TInt usbState( 0 ); - RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbState ); - if ( !iActive ) - { - return; - } - - // Actions to take when playing - if ( usbState == KUsbPersonalityIdMS ) - { - ShowNoteL( R_QTN_MEMC_VOREC_NOTE1, EAknGlobalInformationNote ); -// when not support multiple drives -#ifndef RD_MULTIPLE_DRIVE - if (iMemo->MemoStore() != EMemoStorePhoneMemory) - { - HandleCommandL( EEikCmdExit); - } -//multiple drive -#else - if (iMemo->StorageDrive() != VRUtils::DefaultMemoDriveL()) - { - - HandleCommandL( EEikCmdExit ); - } -#endif - } - - } - - -// End of file // --------------------------------------------------------------------------- @@ -2462,7 +2426,7 @@ // Actions to take when recording TInt storageDrive = VRUtils::MemoDriveL(); - if ( storageDrive == EDriveF) + if ( storageDrive == EDriveF && !CVRUSBStateHanlder::IsUsbActive()) { //exit for mmc dismount TWsEvent event; diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRRecViewModel.h --- a/voicerecorder/RecViewSrc/CVRRecViewModel.h Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRRecViewModel.h Tue May 11 16:15:58 2010 +0300 @@ -38,7 +38,6 @@ #include "MVRVolumeChangeObserver.h" #include "MVRSystemEventObserver.h" -#include "MVRUSBEventObserver.h" #include "MVRMediaRemovalObserver.h" @@ -56,7 +55,6 @@ class TResourceReader; class TVRState; class CVRSystemEventHandler; -class CVRUSBEventHandler; class CVRMediaRemovalMonitor; @@ -71,7 +69,7 @@ public MVRStateInfoModel, public MVRObserver, public MVRKeyObserver, public MVRVolumeChangeObserver, public MVRSystemEventObserver, - public MVRUSBEventObserver, public MVRMediaRemovalObserver + public MVRMediaRemovalObserver { private: // nested classes @@ -315,10 +313,6 @@ void HandleSystemEventL(); - - void HandleUSBEventL(); - - void HandleMMCEjectEventL(); public: // new methods @@ -656,11 +650,6 @@ */ CVRSystemEventHandler* iCurrentCallHandler; - /** - * For listening USB events. Owned. - */ - CVRUSBEventHandler* iCurrentUSBHandler; - CVRMediaRemovalMonitor* iCurrentMMCEjectHandler; diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRStateInfoPanel.cpp --- a/voicerecorder/RecViewSrc/CVRStateInfoPanel.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRStateInfoPanel.cpp Tue May 11 16:15:58 2010 +0300 @@ -171,12 +171,36 @@ // ---------------------------------------------------------------------------- // void CVRStateInfoPanel::SizeChanged() - { - - for ( TInt i = 0; i < ENumLabels; i++ ) - { - TAknTextComponentLayout layoutText = AknLayoutScalable_Apps::vorec_t( - KVRLabelMap[i] ); + { + TAknTextComponentLayout layoutText; + + for ( TInt i = 0; i < ENumLabels; i++ ) + { + switch ( KVRLabelMap[i] ) + { + case 0: + layoutText = AknLayoutScalable_Apps::vorec_t1(); + break; + case 1: + layoutText = AknLayoutScalable_Apps::vorec_t2(); + break; + case 2: + layoutText = AknLayoutScalable_Apps::vorec_t3(); + break; + case 3: + layoutText = AknLayoutScalable_Apps::vorec_t4(); + break; + case 4: + layoutText = AknLayoutScalable_Apps::vorec_t5(); + break; + case 5: + layoutText = AknLayoutScalable_Apps::vorec_t6(); + break; + case 6: + layoutText = AknLayoutScalable_Apps::vorec_t7(); + break; + } + AknLayoutUtils::LayoutLabel( iLabels.At( i ), Rect(), layoutText.LayoutLine() ); if ( i != ELabelStatus ) diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRUSBEventHandler.cpp --- a/voicerecorder/RecViewSrc/CVRUSBEventHandler.cpp Tue Apr 27 16:40:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* -* Copyright (c) 2005 - 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: An active object class that is used to receive -* phone call related events from Publish&Subscribe and forward them -* to an MVRUSBEventObserver instance. -* Has to be attached to certain P&S -key, so it means having multiple -* -* -* -*/ - - -// INCLUDE FILES -#include - -#include "CVRUSBEventHandler.h" -#include "MVRUSBEventObserver.h" - - -// ================= MEMBER FUNCTIONS ======================================== - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::CVRUSBEventHandler -// -// --------------------------------------------------------------------------- -// -CVRUSBEventHandler::CVRUSBEventHandler() : CActive( EPriorityHigh ) - { - CActiveScheduler::Add( this ); - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::ConstructL -// -// --------------------------------------------------------------------------- -// -void CVRUSBEventHandler::ConstructL() - { - - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::NewL -// -// --------------------------------------------------------------------------- -// -// Two-phased constructor. -CVRUSBEventHandler* CVRUSBEventHandler::NewL() - { - CVRUSBEventHandler* self = new (ELeave) CVRUSBEventHandler; - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::~CVRUSBEventHandler -// -// --------------------------------------------------------------------------- -// -// Destructor -CVRUSBEventHandler::~CVRUSBEventHandler() - { - Cancel(); - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::IssueRequest -// -// --------------------------------------------------------------------------- -// -void CVRUSBEventHandler::IssueRequest() - { - SetActive(); - iProperty.Subscribe( iStatus ); - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::RunL -// -// --------------------------------------------------------------------------- -// -void CVRUSBEventHandler::RunL() - { - // Event received - - if ( iStatus != KErrCancel ) - { - // Request a new event - IssueRequest(); - // Notify the observer - iObserver->HandleUSBEventL(); - } - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::Listen -// -// --------------------------------------------------------------------------- -// -void CVRUSBEventHandler::Listen( TUid aUid, - TUint aKey, - MVRUSBEventObserver* aObserver ) - { - iProperty.Attach( aUid, aKey ); - - iObserver = aObserver; - IssueRequest(); - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::DoCancel -// -// --------------------------------------------------------------------------- -// -void CVRUSBEventHandler::DoCancel() - { - iProperty.Cancel(); - } - - -// --------------------------------------------------------------------------- -// CVRUSBEventHandler::StateL -// -// --------------------------------------------------------------------------- -// -TInt CVRUSBEventHandler::StateL( TUid aUid, TUint aKey ) - { - TInt value; - User::LeaveIfError( RProperty::Get( aUid, aKey, value ) ); - return value; - } - -// End of File diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/CVRUSBEventHandler.h --- a/voicerecorder/RecViewSrc/CVRUSBEventHandler.h Tue Apr 27 16:40:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +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: An active object class that is used to receive -* phone call related events from PS API and forward them -* to an MVRUSBEventObserver instance. -* -* -*/ - - - -#ifndef __CVRUSBEVENTHANDLER_H -#define __CVRUSBEVENTHANDLER_H - -// INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class MVRUSBEventObserver; - -// CLASS DECLARATION - -/** -* An active object class that is used to receive -* phone call related events from RUSBAgent and forward them -* to an MVRUSBEventObserver instance. -*/ -NONSHARABLE_CLASS( CVRUSBEventHandler ): public CActive - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - * @return A pointer to fully constructed instance of CVRUSBEventHandler - */ - static CVRUSBEventHandler* NewL(); - - /** - * Destructor. - */ - virtual ~CVRUSBEventHandler(); - - public: // New functions - /** - * Get the current state of any pubsub key - * @param aUid The UID of the PS category - * @param aKey The id identifying the PS key - * @return The value of the state variable - */ - TInt StateL( TUid aUid, TUint aKey ); - - /** - * Start listening to USB events - * @param aUid The UID identifying the USB agent's state variable - * @param aObserver The observer who will be notified of events - */ - void Listen( TUid aUid, TUint aKey, MVRUSBEventObserver* aObserver ); - - public: // from CActive - - /** - * When this method is called, an event has been received. - * Notify the observer. - */ - void RunL(); - - /** - * Cancel the request for event notifications. - */ - void DoCancel(); - - private: - - /** - * Ask USB agent to notify us about events - */ - void IssueRequest(); - - /** - * Default constructor. - */ - CVRUSBEventHandler(); - - /** - * 2nd phase constructor. - */ - void ConstructL(); - - private: // Data - - /** - * For observing the USB events - */ - RProperty iProperty; - - /** - * Pointer to the observer. Not owned. - */ - MVRUSBEventObserver* iObserver; - }; - -#endif // __CVRUSBEVENTHANDLER_H - -// End of File diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/RecViewSrc/MVRUSBEventObserver.h --- a/voicerecorder/RecViewSrc/MVRUSBEventObserver.h Tue Apr 27 16:40:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +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 can be used to observe changes that has been happened in -* CVRUSBEventHandler class -* -*/ - - -#ifndef __MVRUSBEVENTOBSERVER_H -#define __MVRUSBEVENTOBSERVER_H - -// INCLUDES -#include -#include - -// CLASS DECLARATION -/** -* MVRUSBEventObserver -*/ -class MVRUSBEventObserver - { - public: // Constructors and destructor - - virtual void HandleUSBEventL() = 0; - - }; - -#endif // __MVRUSBEVENTOBSERVER_H - -// End of File diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/UtilsInc/VRUSBStateHanlder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/UtilsInc/VRUSBStateHanlder.h Tue May 11 16:15:58 2010 +0300 @@ -0,0 +1,73 @@ +/* + ============================================================================ + Name : VRUSBStateHanlder.h + Author : Junhua Xu + Version : 1.0 + Copyright : Your copyright notice + Description : CVRUSBStateHanlder declaration + ============================================================================ + */ + +#ifndef VRUSBSTATEHANLDER_H +#define VRUSBSTATEHANLDER_H + +#include // For CActive, link against: euser.lib +#include // For RTimer, link against: euser.lib +#include + +//#include "DummyUSBState.h" // for dummy testing + +class MVRUSBStateObserver + { +public: + // Constructors and destructor + + virtual TInt HandleUsbPlugInL() = 0; + virtual TInt HandleUsbPlugOutL() = 0; + + }; + +class CVRUSBStateHanlder : public CActive + { +public: + // Cancel and destroy + ~CVRUSBStateHanlder(); + + IMPORT_C static CVRUSBStateHanlder* NewL(MVRUSBStateObserver* aObserver); + +public: + + IMPORT_C static TBool IsUsbActive(); + +private: + // C++ constructor + CVRUSBStateHanlder(MVRUSBStateObserver* aObserver); + + // Second-phase constructor + void ConstructL(); + +private: + // From CActive + // Handle completion + void RunL(); + + // How to cancel me + void DoCancel(); + + // Override to handle leaves from RunL(). Default implementation causes + // the active scheduler to panic. + TInt RunError(TInt aError); + + void StartL(); + +private: +#ifdef DUMMY_USB_TESTING + RTimer iTimer; // Provides async timing service, for dummy testing + TInt isUSBActive; +#else + RProperty iProperty; +#endif + MVRUSBStateObserver* iObserver; + }; + +#endif // VRUSBSTATEHANLDER_H diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/UtilsInc/VRUtils.h --- a/voicerecorder/UtilsInc/VRUtils.h Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/UtilsInc/VRUtils.h Tue May 11 16:15:58 2010 +0300 @@ -189,6 +189,14 @@ */ IMPORT_C static TInt AACAudioModeL(); + /** + * This method checks the drive is valid or not + * @param aDrive is the drive id + * @param aNoteId store the note id + * @return The default memo store + */ + IMPORT_C static TBool DriveValid( const TInt aDrive ); + #ifdef RD_MULTIPLE_DRIVE /** * This method sets the default memo store setting (to support multipledrives) @@ -208,7 +216,7 @@ * This method returns the current status of Drive (inserted/locked/etc...) * @param aDriveInfo MMC status */ - IMPORT_C static void GetDriveInfo( TInt aDrive, TUint& aDriveInfo ); + IMPORT_C static TInt GetDriveInfo( TInt aDrive, TUint& aDriveInfo ); /** * This method returns the default memo drive setting diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/UtilsSrc/VRUSBStateHanlder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/UtilsSrc/VRUSBStateHanlder.cpp Tue May 11 16:15:58 2010 +0300 @@ -0,0 +1,130 @@ +/* + ============================================================================ + Name : VRUSBStateHanlder.cpp + Author : Junhua Xu + Version : 1.0 + Copyright : Your copyright notice + Description : CVRUSBStateHanlder implementation + ============================================================================ + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include "VRUSBStateHanlder.h" +#include "CVRRecView.h" + +CVRUSBStateHanlder::CVRUSBStateHanlder(MVRUSBStateObserver* aObserver) : + CActive(EPriorityStandard), // Standard priority + iObserver(aObserver) + { + } + +EXPORT_C CVRUSBStateHanlder* CVRUSBStateHanlder::NewL( + MVRUSBStateObserver* aObserver) + { + CVRUSBStateHanlder* self = new (ELeave) CVRUSBStateHanlder(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self; + return self; + } + +void CVRUSBStateHanlder::ConstructL() + { +#ifdef DUMMY_USB_TESTING + User::LeaveIfError(iTimer.CreateLocal()); // Initialize timer +#else + iProperty.Attach(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality); +#endif + CActiveScheduler::Add(this); // Add to scheduler + StartL(); + } + +CVRUSBStateHanlder::~CVRUSBStateHanlder() + { + Cancel(); // Cancel any request, if outstanding +#ifdef DUMMY_USB_TESTING + iTimer.Close(); +#else + iProperty.Close(); +#endif + } + +void CVRUSBStateHanlder::DoCancel() + { +#ifdef DUMMY_USB_TESTING + iTimer.Cancel(); +#else + iProperty.Cancel(); +#endif + + } + +void CVRUSBStateHanlder::StartL() + { + Cancel(); // Cancel any request, just to be sure +#ifdef DUMMY_USB_TESTING + iTimer.After(iStatus, 10000000); // Set for later + SetActive(); // Tell scheduler a request is active +#else + SetActive(); + iProperty.Subscribe(iStatus); +#endif + } + +void CVRUSBStateHanlder::RunL() + { +#ifdef DUMMY_USB_TESTING + CDummyUSBState::HandleUSBEventL(); +#endif + if (IsUsbActive()) + { + iObserver->HandleUsbPlugInL(); + } + else + { + iObserver->HandleUsbPlugOutL(); + } +#ifdef DUMMY_USB_TESTING + // iStatus = KRequestPending; + SetActive(); // Tell scheduler a request is active + iTimer.After(iStatus, 10000000); // Set for later +#else + StartL(); +#endif + } + +TInt CVRUSBStateHanlder::RunError(TInt aError) + { + return aError; + } + +EXPORT_C TBool CVRUSBStateHanlder::IsUsbActive() + { +#ifdef DUMMY_USB_TESTING + //dummy + return CDummyUSBState::IsUSBActive(); +#else + + TInt usbState; + TInt err = RProperty::Get(KPSUidUsbWatcher, + KUsbWatcherSelectedPersonality, usbState); + + if (KErrNone == err && KUsbPersonalityIdMS == usbState) + { + return true; + } + else + { + return false; + } +#endif + } + diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/UtilsSrc/VRUtils.cpp --- a/voicerecorder/UtilsSrc/VRUtils.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/UtilsSrc/VRUtils.cpp Tue May 11 16:15:58 2010 +0300 @@ -138,9 +138,9 @@ else { TUint status( 0 ); - VRUtils::GetDriveInfo(memoDrive, status); + TInt err = VRUtils::GetDriveInfo(memoDrive, status); // check if drive status is ok - if ( (status & DriveInfo::EDrivePresent) && !(status & DriveInfo::EDriveLocked) && + if ( ( err == KErrNone ) && (status & DriveInfo::EDrivePresent) && !(status & DriveInfo::EDriveLocked) && !( status & DriveInfo::EDriveCorrupt ) && !( status & DriveInfo::EDriveReadOnly ) ) { // Drive usage is OK. @@ -1053,6 +1053,29 @@ return mode; } +// --------------------------------------------------------------------------- +// DriveValid checks the drive is valid or not +// --------------------------------------------------------------------------- +// +EXPORT_C TBool VRUtils::DriveValid( const TInt aDrive ) + { + TUint status( 0 ); + TBool flag( ETrue ); + TInt err = VRUtils::GetDriveInfo( aDrive, status ); + if ( err != KErrNone ) + { flag = EFalse; } + else + { + if ( !(status & DriveInfo::EDrivePresent) || + (status & DriveInfo::EDriveLocked) || + (status & DriveInfo::EDriveReadOnly) || + (status & DriveInfo::EDriveCorrupt) || + (status & DriveInfo::EDriveInUse) ) + { flag = EFalse; } + } + return flag; + + } #ifdef RD_MULTIPLE_DRIVE // --------------------------------------------------------------------------- @@ -1103,7 +1126,7 @@ EXPORT_C TInt VRUtils::DefaultMemoDriveL() { TInt drive(0); - User::LeaveIfError( DriveInfo::GetDefaultDrive(DriveInfo::EDefaultPhoneMemory, drive ) ); + User::LeaveIfError( DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, drive ) ); return drive; } @@ -1113,10 +1136,11 @@ // it is for multiple drive feature // --------------------------------------------------------------------------- // -EXPORT_C void VRUtils::GetDriveInfo( TInt aDrive, TUint& aDriveInfo ) +EXPORT_C TInt VRUtils::GetDriveInfo( TInt aDrive, TUint& aDriveInfo ) { RFs& iFs = CCoeEnv::Static()->FsSession() ; - DriveInfo::GetDriveStatus( iFs, aDrive, aDriveInfo ); + TInt err = DriveInfo::GetDriveStatus( iFs, aDrive, aDriveInfo ); + return err; } #endif diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/group/RecView.mmp --- a/voicerecorder/group/RecView.mmp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/group/RecView.mmp Tue May 11 16:15:58 2010 +0300 @@ -48,7 +48,6 @@ SOURCE CVRRemConObserver.cpp SOURCE CVRTonePlayer.cpp SOURCE CVRDiskSpaceWatcher.cpp -SOURCE CVRUSBEventHandler.cpp SOURCE CVRMediaRemovalMonitor.cpp USERINCLUDE ../RecViewSrc diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/group/Utils.mmp --- a/voicerecorder/group/Utils.mmp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/group/Utils.mmp Tue May 11 16:15:58 2010 +0300 @@ -35,9 +35,11 @@ SOURCEPATH ../UtilsSrc SOURCE TVRRename.cpp SOURCE DllMain.cpp -SOURCE VRUtils.cpp +SOURCE VRUtils.cpp VRUSBStateHanlder.cpp -USERINCLUDE ../UtilsInc ../group +USERINCLUDE ../UtilsInc ../group ../../inc .. +USERINCLUDE ../RecViewInc + APP_LAYER_SYSTEMINCLUDE LIBRARY euser.lib diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/group/VoiceRecorderApp.mmp --- a/voicerecorder/group/VoiceRecorderApp.mmp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/group/VoiceRecorderApp.mmp Tue May 11 16:15:58 2010 +0300 @@ -54,6 +54,7 @@ SOURCE CVRSettingsDialog.cpp #endif + USERINCLUDE ../AppSrc USERINCLUDE ../group USERINCLUDE ../UtilsInc diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/group/voicerecorder.hrh --- a/voicerecorder/group/voicerecorder.hrh Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/group/voicerecorder.hrh Tue May 11 16:15:58 2010 +0300 @@ -68,7 +68,8 @@ ECmdMSK, // When Middle Softkey is pressed ECmdSetNewPosition, // Progress Bar Touch ECmdNOP, // No operation - ECmdGoToMyClips, + ECmdGoToMyClips, + ECmdUSBChange, ECmdSendVia // This MUST be the last entry }; diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/group/voicerecorder.rss --- a/voicerecorder/group/voicerecorder.rss Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/group/voicerecorder.rss Tue May 11 16:15:58 2010 +0300 @@ -39,6 +39,7 @@ #include "voicerecorder.hrh" #include "VoiceRecorder.rh" #include +#include NAME VREC @@ -201,6 +202,44 @@ RESOURCE TBUF r_qtn_memc_unlock_query1 { buf = qtn_memc_unlock_query1; } RESOURCE TBUF r_qtn_memc_set_password_error { buf = qtn_memc_set_password_error; } RESOURCE TBUF r_qtn_memc_readonly { buf = qtn_memc_memorycard_read_only; } +RESOURCE TBUF r_qtn_ccor_insert_mmc { buf = qtn_ccor_insert_mmc; } +RESOURCE TBUF r_qtn_usb_mode_note_mode { buf = qtn_usb_mode_note_mode_activated; } + +RESOURCE DIALOG r_insert_f_card_dialog + { + flags = EGeneralQueryFlags | EEikDialogFlagWait | EEikDialogFlagNoBackgroundFade; + buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationLayout; + }; + } + }; + } + +RESOURCE DIALOG r_insert_f_usb_plug_in_dialog + { + flags = EGeneralQueryFlags | EEikDialogFlagWait | EEikDialogFlagNoBackgroundFade; + buttons = R_AVKON_SOFTKEYS_OK_EMPTY; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationLayout; + }; + } + }; + } // Settings dialog stuff needed when there's an MMC (default store setting) // or the voice key is missing (defauly speaker setting) @@ -2194,3 +2233,23 @@ } }; } + +RESOURCE DIALOG r_vorec_usb_connected_dialog + { + flags = EAknWaitNoteFlags|EEikDialogFlagModeless; + buttons = R_AVKON_SOFTKEYS_BACK; + items= + { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralQuery; + control= AVKON_NOTE + { + layout = EWaitLayout; + singular_label = qtn_usb_mode_note_mode_activated; + animation = R_QGN_GRAF_WAIT_BAR_ANIM; + }; + } + }; + } diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/gsplugin/src/CVRGSPluginContainer.cpp --- a/voicerecorder/gsplugin/src/CVRGSPluginContainer.cpp Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/gsplugin/src/CVRGSPluginContainer.cpp Tue May 11 16:15:58 2010 +0300 @@ -40,6 +40,7 @@ #ifdef RD_MULTIPLE_DRIVE #include #include +#include #endif const TUid KVRAppUID = { KVoiceRecorderAppUID3 }; @@ -195,6 +196,9 @@ #else settingItem = new( ELeave ) CAknMemorySelectionSettingItemMultiDrive(0, iDrive ); + TInt includedMedias = AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage | + AknCommonDialogsDynMem::EMemoryTypeMMCExternal; + static_cast< CAknMemorySelectionSettingItemMultiDrive *> ( settingItem )->SetIncludedMediasL( includedMedias ); #endif CleanupStack::PushL( settingItem ); diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/loc/voicerecorder.loc --- a/voicerecorder/loc/voicerecorder.loc Tue Apr 27 16:40:59 2010 +0300 +++ b/voicerecorder/loc/voicerecorder.loc Tue May 11 16:15:58 2010 +0300 @@ -269,6 +269,20 @@ // l: popup_note_window #define qtn_memc_unlock_query1 "The selected memory store is locked, it can't be used. Do you want to unlock it?" +// d: Information note +// d: Shown when VR is started and the SD card is not inserted +// l: popup_note_window +// w: +// r: 3.1 +#define qtn_ccor_insert_mmc "Please insert memory card." + +// d: Information note +// d: Shown when VR is started and the USB is inserted in Mass Storage mode +// l: popup_note_window +// w: +// r: 3.1 +#define qtn_usb_mode_note_mode_activated "USB connected in Mass storage mode" + // --------------------------------------------------------------------------- // No voice key specific strings diff -r a2fdc35b8f46 -r 4e5b531d23cb voicerecorder/sis/VoiceRecorderCenrep.pkg Binary file voicerecorder/sis/VoiceRecorderCenrep.pkg has changed