Revert incorrect RCL_3 drop: RCL_3 PDK_3.0.2 PDK_3.0.3
authorPat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:14 +0100
branchRCL_3
changeset 21 c6bafb5162d8
parent 20 072a5fa0c63b
Revert incorrect RCL_3 drop: Revision: 201030 Kit: 201035
group/bld.inf
layers.sysdef.xml
sysdef_1_4_0.dtd
tsrc/group/bld.inf
voicerec_plat/group/bld.inf
voicerec_plat/new_file_service_api/group/bld.inf
voicerec_plat/new_file_service_api/inc/CNewFileServiceBase.h
voicerec_plat/new_file_service_api/inc/NewFileService.hrh
voicerec_plat/new_file_service_api/inc/NewFileServiceClient.h
voicerec_plat/new_file_service_api/inc/NewFileServiceDefs.h
voicerec_plat/new_file_service_api/new_file_service_api.metaxml
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/Bmarm/UI_NewFileServiceTestU.DEF
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/Bwins/UI_NewFileServiceTestU.DEF
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/EABI/UI_NewFileServiceTestU.def
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/group/UI_NewFileServiceTest.mmp
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/group/UI_NewFileServiceTest.pkg
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/group/bld.inf
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/inc/CDummyNewFileServiceBase.h
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/inc/UI_NewFileServiceTest.h
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/src/CDummyNewFileServiceBase.cpp
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/src/UI_NewFileServiceTest.cpp
voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/src/UI_NewFileServiceTestBlocks.cpp
voicerec_plat/new_file_service_api/tsrc/conf/UI_NewFileServiceTest.cfg
voicerec_plat/new_file_service_api/tsrc/conf/tcNewFileServiceTest.cfg
voicerec_plat/new_file_service_api/tsrc/group/bld.inf
voicerec_plat/new_file_service_api/tsrc/init/TestFramework.ini
voicerec_plat/voicerecorder_public_constants_api/group/bld.inf
voicerec_plat/voicerecorder_public_constants_api/inc/VoiceRecorderContexts.h
voicerec_plat/voicerecorder_public_constants_api/inc/VoiceRecorderUID.h
voicerec_plat/voicerecorder_public_constants_api/voicerecorder_public_constants_api.metaxml
voicerecorder/Aif/VoiceRecorderAif.rss
voicerecorder/AppSrc/CVRAppServer.cpp
voicerecorder/AppSrc/CVRAppServer.h
voicerecorder/AppSrc/CVRAppUI.cpp
voicerecorder/AppSrc/CVRAppUi.h
voicerecorder/AppSrc/CVRApplication.cpp
voicerecorder/AppSrc/CVRApplication.h
voicerecorder/AppSrc/CVRDocument.cpp
voicerecorder/AppSrc/CVRDocument.h
voicerecorder/AppSrc/CVRNewFileService.cpp
voicerecorder/AppSrc/CVRNewFileService.h
voicerecorder/AppSrc/CVRSettingItem.cpp
voicerecorder/AppSrc/CVRSettingItem.h
voicerecorder/AppSrc/CVRSettingsDialog.cpp
voicerecorder/AppSrc/CVRSettingsDialog.h
voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.cpp
voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.h
voicerecorder/AppSrc/MVREmbeddedObserver.h
voicerecorder/AppSrc/MVRUSBEventObserver.h
voicerecorder/BMARM/VOICERECORDERRECVIEWU.DEF
voicerecorder/BMARM/VOICERECORDERUTILSU.DEF
voicerecorder/BWINS/NewServiceU.DEF
voicerecorder/BWINS/VOICERECORDERRECVIEWU.DEF
voicerecorder/BWINS/VoiceRecorderUtilsU.DEF
voicerecorder/BWINS/VoiceRecorderUtilsUU.DEF
voicerecorder/Conf/voicerecorder.confml
voicerecorder/Conf/voicerecorder_101F87A3.crml
voicerecorder/EABI/NewServiceU.DEF
voicerecorder/EABI/VoiceRecorderRecViewU.DEF
voicerecorder/EABI/VoiceRecorderUtilsU.DEF
voicerecorder/EABI/VoiceRecorderUtilsUU.DEF
voicerecorder/NewServiceInc/CNewFileServiceDiscovery.h
voicerecorder/NewServiceInc/NewFileService.rh
voicerecorder/NewServiceInc/NewFileServiceUID.h
voicerecorder/NewServiceSrc/CNewFileServiceBase.cpp
voicerecorder/NewServiceSrc/CNewFileServiceClientImpl.cpp
voicerecorder/NewServiceSrc/CNewFileServiceClientImpl.h
voicerecorder/NewServiceSrc/CNewFileServiceDiscovery.cpp
voicerecorder/NewServiceSrc/DllMain.cpp
voicerecorder/NewServiceSrc/NewFileServiceDefs.h
voicerecorder/NewServiceSrc/RNewFileServiceClient.cpp
voicerecorder/NewServiceSrc/RNewFileServiceClient.h
voicerecorder/NewServiceSrc/cnewfileserviceserverobserver.cpp
voicerecorder/NewServiceSrc/cnewfileserviceserverobserver.h
voicerecorder/RecViewInc/CVRRecView.h
voicerecorder/RecViewInc/RecView.rh
voicerecorder/RecViewSrc/CVRButtonPanel.cpp
voicerecorder/RecViewSrc/CVRButtonPanel.h
voicerecorder/RecViewSrc/CVRDiskSpaceWatcher.cpp
voicerecorder/RecViewSrc/CVRDiskSpaceWatcher.h
voicerecorder/RecViewSrc/CVRLabel.cpp
voicerecorder/RecViewSrc/CVRLabel.h
voicerecorder/RecViewSrc/CVRMdaRecorder.cpp
voicerecorder/RecViewSrc/CVRMdaRecorder.h
voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.cpp
voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h
voicerecorder/RecViewSrc/CVRMemo.cpp
voicerecorder/RecViewSrc/CVRMemo.h
voicerecorder/RecViewSrc/CVRMemo.inl
voicerecorder/RecViewSrc/CVRRecView.cpp
voicerecorder/RecViewSrc/CVRRecViewActivationContainer.cpp
voicerecorder/RecViewSrc/CVRRecViewActivationContainer.h
voicerecorder/RecViewSrc/CVRRecViewContainer.cpp
voicerecorder/RecViewSrc/CVRRecViewContainer.h
voicerecorder/RecViewSrc/CVRRecViewModel.cpp
voicerecorder/RecViewSrc/CVRRecViewModel.h
voicerecorder/RecViewSrc/CVRRemConObserver.cpp
voicerecorder/RecViewSrc/CVRRemConObserver.h
voicerecorder/RecViewSrc/CVRStateInfoPanel.cpp
voicerecorder/RecViewSrc/CVRStateInfoPanel.h
voicerecorder/RecViewSrc/CVRSystemEventHandler.cpp
voicerecorder/RecViewSrc/CVRSystemEventHandler.h
voicerecorder/RecViewSrc/CVRTonePlayer.cpp
voicerecorder/RecViewSrc/CVRTonePlayer.h
voicerecorder/RecViewSrc/DllMain.cpp
voicerecorder/RecViewSrc/MVRButtonPanelModel.h
voicerecorder/RecViewSrc/MVRDecoratorModel.h
voicerecorder/RecViewSrc/MVRIHFObserver.h
voicerecorder/RecViewSrc/MVRKeyObserver.h
voicerecorder/RecViewSrc/MVRMdaRecorder.h
voicerecorder/RecViewSrc/MVRMediaRemovalObserver.h
voicerecorder/RecViewSrc/MVRObserver.h
voicerecorder/RecViewSrc/MVRStateInfoModel.h
voicerecorder/RecViewSrc/MVRStateInfoObserver.h
voicerecorder/RecViewSrc/MVRSystemEventObserver.h
voicerecorder/RecViewSrc/MVRUpdateEventProvider.h
voicerecorder/RecViewSrc/MVRVolumeChangeObserver.h
voicerecorder/RecViewSrc/MVRVolumeEventObserver.h
voicerecorder/RecViewSrc/TVRContext.h
voicerecorder/RecViewSrc/TVRState.cpp
voicerecorder/RecViewSrc/TVRState.h
voicerecorder/UtilsInc/MVRLayoutChangeObserver.h
voicerecorder/UtilsInc/MVRSelectionProvider.h
voicerecorder/UtilsInc/TVRRename.h
voicerecorder/UtilsInc/VRUSBStateHanlder.h
voicerecorder/UtilsInc/VRUtils.h
voicerecorder/UtilsSrc/DllMain.cpp
voicerecorder/UtilsSrc/TVRRename.cpp
voicerecorder/UtilsSrc/VRUSBStateHanlder.cpp
voicerecorder/UtilsSrc/VRUtils.cpp
voicerecorder/cenrep/keys_voicerecorder.xls
voicerecorder/group/App.lnt
voicerecorder/group/NewService.mmp
voicerecorder/group/ProjLint.bat
voicerecorder/group/RecView.lnt
voicerecorder/group/RecView.mmp
voicerecorder/group/RecViewLint.bat
voicerecorder/group/Utils.lnt
voicerecorder/group/Utils.mmp
voicerecorder/group/UtilsLint.bat
voicerecorder/group/VRConsts.h
voicerecorder/group/VoiceRecorder.pkg
voicerecorder/group/VoiceRecorder.rh
voicerecorder/group/VoiceRecorderApp.mmp
voicerecorder/group/VoiceRecorderInternalCRKeys.h
voicerecorder/group/VoiceRecorderPrivatePSKeys.h
voicerecorder/group/VoiceRecorderSingleClick.hrh
voicerecorder/group/VoiceRecorder_reg.rss
voicerecorder/group/backup_registration.xml
voicerecorder/group/bld.inf
voicerecorder/group/lscan.bat
voicerecorder/group/moveudeb.bat
voicerecorder/group/voicerecorder.hrh
voicerecorder/group/voicerecorder.rss
voicerecorder/gsplugin/data/1020729D.rss
voicerecorder/gsplugin/group/GSVoiceRecorderPlugin.mmp
voicerecorder/gsplugin/group/bld.inf
voicerecorder/gsplugin/inc/CVRGSPlugin.h
voicerecorder/gsplugin/inc/CVRGSPluginContainer.h
voicerecorder/gsplugin/src/CVRGSPlugin.cpp
voicerecorder/gsplugin/src/CVRGSPluginContainer.cpp
voicerecorder/gsplugin/src/VRGSPluginImplementationTable.cpp
voicerecorder/help/data/xhtml.zip
voicerecorder/help/group/bld.inf
voicerecorder/help/inc/vorec.hlp.hrh
voicerecorder/help/rom/voicerechelps_variant.iby
voicerecorder/loc/voicerecorder.loc
voicerecorder/rom/Voicerecorder.iby
voicerecorder/rom/VoicerecorderResources.iby
voicerecorder/sis/101F87A3.cre
voicerecorder/sis/VoiceRecorder.pkg
voicerecorder/sis/VoiceRecorder.xml
voicerecorder/sis/VoiceRecorderCenrep.pkg
voicerecorder/sis/VoiceRecorder_stub.pkg
voicerecorder/sis/VoiceRecorder_stub.sis
voicerecorder/sis/VoiceRecorder_udeb.pkg
voicerecorder/sis/build_cenrep_sisx.bat
voicerecorder/sis/build_sis_stub.bat
voicerecorder/sis/build_sisx.bat
voicerecorder/sis/build_sisx_udeb.bat
voicerecorder/sis/change_version.bat
voicerecorder/sis/readme.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 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:  Project build file for voicerec.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+#include "../voicerec_plat/group/bld.inf"
+#include "../voicerecorder/group/bld.inf"
+
+
+//  End of File  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+  <!ENTITY layer_real_source_path "sf/app/voicerec" >
+]> 
+
+<SystemDefinition name="avdomain" schema="1.4.0">
+	<systemModel>
+  <!-- Common file for prebuild layers-->
+  	<layer name="app_layer">
+			<module name="voicerec">
+				<unit unitID="voicerec" mrp="" bldFile="&layer_real_source_path;/group" name="voicerec" />
+			</module>
+    </layer> 
+
+  	<layer name="api_test_layer">
+			<module name="voicerec_tsrc">
+				<unit unitID="voicerec_tsrc" name="voicerec_tsrc" bldFile="&layer_real_source_path;/tsrc/group" mrp="" />
+			</module>
+    </layer>
+
+  	<layer name="pref_test_layer">
+			<module name="voicerec_tsrc_group">
+				<unit unitID="voicerec_tsrc_group" name="voicerec_tsrc_group" bldFile="&layer_real_source_path;/tsrc/group" mrp="" filter="TA_VOICEREC" />
+			</module>
+    </layer>
+
+  	<layer name="app_voicerec_layer">
+			<module name="voicerec_group">
+				<unit unitID="voicerec_group" mrp="" bldFile="&layer_real_source_path;/group" name="voicerec_group" />
+			</module>
+    </layer>
+   
+  </systemModel>
+</SystemDefinition>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 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:  Project specification for mmenhs projects.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_TESTEXPORTS
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+#include "../../voicerec_plat/new_file_service_api/tsrc/group/bld.inf"
+
+PRJ_MMPFILES
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 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:  Includes all the Domain API specific bld.inf files, which 
+*                export files.
+*
+*/
+
+
+
+#include "../new_file_service_api/group/bld.inf"
+#include "../voicerecorder_public_constants_api/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 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:  File that exports the files belonging to 
+:                New File Service API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/NewFileServiceClient.h     APP_LAYER_PLATFORM_EXPORT_PATH(NewFileServiceClient.h)
+../inc/CNewFileServiceBase.h     APP_LAYER_PLATFORM_EXPORT_PATH(CNewFileServiceBase.h)
+../inc/NewFileServiceDefs.h     APP_LAYER_PLATFORM_EXPORT_PATH(NewFileServiceDefs.h)
+../inc/NewFileService.hrh     APP_LAYER_PLATFORM_EXPORT_PATH(NewFileService.hrh)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/inc/CNewFileServiceBase.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2002-2004 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:  Interface for recording new media files using platform
+                 applications
+*
+*/
+
+
+
+#ifndef CNEWFILESERVICEBASE_H
+#define CNEWFILESERVICEBASE_H
+
+//  INCLUDES
+#include <AknServerApp.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <NewFileService.hrh>
+
+// FORWARD DECLARATIONS
+class CAiwGenericParamList;
+
+
+// CLASS DECLARATION
+
+/**
+*  Observer interface to get notification from server application
+*
+*  @lib NewService.lib
+*  @since Series 60 3.0
+*/
+class MNewFileServiceObserver
+	{
+	public:
+		virtual void HandleCompletedNewServiceL( TBool aReturnValue ) = 0;
+	};
+
+/**
+*  Base class for server applications
+*
+*  @lib NewService.lib
+*  @since Series 60 3.0
+*/
+class CNewFileServiceBase : public CAknAppServiceBase, public MNewFileServiceObserver
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CNewFileServiceBase();
+
+        /**
+        * return iErrorCode.
+        */
+        IMPORT_C TInt GetErrorCode();
+        
+        /**
+        * set iErrorCode.
+        */        
+        IMPORT_C void SetErrorCode(TInt);
+
+
+    protected:  // New functions
+
+        /**
+        * From CAknAppServiceBase
+        * @since Series 60 3.0
+        * @param aMessage The client message
+        */
+        IMPORT_C void ServiceL( const RMessage2& aMessage );
+
+        /**
+        * From MNewFileServiceObserver
+        * @since Series 60 3.0
+        * @param aReturnValue ETrue if the media file was succesfully created
+        */
+		IMPORT_C void HandleCompletedNewServiceL( TBool aReturnValue );
+
+        /**
+        * Getter for member variable
+        * @since Series 60 3.0
+        * @return Pointer to iGenericParams
+        */        
+		IMPORT_C CAiwGenericParamList* GenericParams();
+
+        /**
+        * Create a new media file
+        * @since Series 60 3.0
+        * @param aObserver Object that is notified when recording is ready
+        * @param aFilenameArray Array for the filename(s) of the recorded files
+        * @param aType Required media type
+        * @param aMultiplefiles ETrue if multiples files can be recorded
+        */
+        virtual void HandleNewFileL( MNewFileServiceObserver* aObserver,
+        							  CDesCArray& aFilenameArray,
+        							  TNewServiceFileType aType,
+        							  TBool aMultipleFiles ) = 0;
+        /**
+        * Create a new media file
+        * @since Series 60 3.0
+        * @param aObserver Object that is notified when recording is ready
+        * @param aFile File handle that the media file is to be recorded
+        * @param aType Required media type
+        */
+        virtual void HandleNewFileL( MNewFileServiceObserver* aObserver,
+        							  RFile& aFile,
+        							  TNewServiceFileType aType ) = 0;
+
+        /**
+        * Notifies the server application that service is complete
+        * and it may safely close
+        * @since Series 60 3.0
+        */
+		virtual void ServiceCompleteL() = 0;
+
+	private:
+
+		void DeserializeGenericParamsL( const RMessage2& aMessage );
+
+
+    protected:
+
+        /**
+        * C++ default constructor.
+        */
+        IMPORT_C CNewFileServiceBase();
+
+    private:    // Data
+        // Array for the filenames
+        CDesCArrayFlat* iFilenameArray;
+
+        // Last received message
+        RMessage2 iPendingMessage;
+
+        // Generic parameter array
+        CAiwGenericParamList* iGenericParams;
+        
+        // Error code that send back to client
+        TInt iError;
+
+    };
+
+#endif      // CNewFileServiceBase_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/inc/NewFileService.hrh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2002-2004 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:  Definitions for the API
+*
+*/
+
+
+#ifndef NEWFILESERVICE_HRH
+#define NEWFILESERVICE_HRH
+
+// DATA TYPES
+enum TNewServiceFileType
+	{
+	ENewFileServiceImage,
+	ENewFileServiceVideo,
+	ENewFileServiceAudio
+	};
+
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/inc/NewFileServiceClient.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2002-2004 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:  Client side API
+*
+*/
+
+
+
+#ifndef NEWFILESERVICECLIENT_H
+#define NEWFILESERVICECLIENT_H
+
+//  INCLUDES
+#include <NewFileService.hrh>
+#include <e32std.h>
+#include <badesca.h>
+#include <AknServerApp.h>
+
+// FORWARD DECLARATIONS
+class RFile;
+class CApaServerAppExitMonitor;
+class CNewFileServiceClient;
+class CAiwGenericParamList;
+
+// CLASS DECLARATION
+
+
+class NewFileServiceFactory
+	{
+	public:
+		IMPORT_C static CNewFileServiceClient* NewClientL();
+	};
+
+/**
+*  Client side API for New File Service
+*
+*  @lib NewService.lib
+*  @since Series 60 3.0
+*/
+class CNewFileServiceClient : public CBase
+    {
+
+    public: // New functions
+
+        /**
+        * Create new media file
+        * @since Series 60 3.0
+        * @param aApplicationUid Uid for the server application
+        * @param aFileNames Array for the created media files
+        * @param aParams Parameters for the operation
+        * @param aFileType Type of media file requested
+        * @param aMultipleFiles Multiple files can be created
+        * @return ETrue if new file was succesfully created
+        */        
+		virtual TBool NewFileL( CDesCArray& aFileNames,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType,
+							   TBool aMultipleFiles ) = 0;
+		virtual TBool NewFileL( TUid aApplicationUid,
+							   CDesCArray& aFileNames,
+							   	CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType,
+							   TBool aMultipleFiles ) = 0;
+
+
+		/**
+        * NOTE: When you pass file handles to new file service,
+        * the handle should be opened using ShareProtected()
+        * file session, otherwise handles can't be transfered through
+        * client-server interface.
+        */
+        
+        /**
+        * Create new media file
+        * @since Series 60 3.0
+        * @param aApplicationUid Uid for the server application
+        * @param aFile File handle for the media file
+        * @param aParams Parameters for the operation        
+        * @param aFileType Type of media file requested
+        * @return ETrue if new file was succesfully created
+        */                
+		virtual TBool NewFileL( RFile& aFileHandle,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType ) = 0;
+
+		virtual TBool NewFileL( TUid aApplicationUid,
+							   RFile& aFileHandle,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType ) = 0;
+
+
+
+    };
+
+#endif      // NEWFILESERVICECLIENT_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/inc/NewFileServiceDefs.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* 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:  Definitions for the API
+*
+*/
+
+
+
+#ifndef NEWSERVICEDEFS_H
+#define NEWSERVICEDEFS_H
+
+//  INCLUDES
+#include <apaserverapp.h>
+
+#define NEWSERVICEUID 0x101F8861
+
+// DATA TYPES
+enum TIpcMessageIds
+	{
+	ECreateNewFile = RApaAppServiceBase::KServiceCmdBase,
+	ENewFileToHandle,
+	EGetFilenameArrayLength,
+	EGetFilenameArray
+	};
+
+enum TIpcNewFileArgumentIndices
+    {
+    ENewServiceIndexParams = 0,
+    ENewServiceIndexFsHandle,
+    ENewServiceIndexFileHandle,
+    ENewServiceIndexFileName
+    };
+
+/**
+*  Parameter class transferred through client-server interface.
+*
+*  @since Series 60 3.0
+*/
+class TNewServiceParamPack
+	{
+	public:
+		TNewServiceFileType iType;
+		TBool iMultipleFiles;
+		TBool iReturnValue;
+	};
+
+
+#endif      // NEWSERVICEDEFS_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/new_file_service_api.metaxml	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="ecb6096534db5e9b24c61774ad144cd4" dataversion="2.0">
+  <name>New File Service API</name>
+  <description>New File Service API</description>
+  <type>c++</type>
+  <collection>voicerecorder</collection>
+  <libs>
+    <lib name="NewService.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/Bmarm/UI_NewFileServiceTestU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/Bwins/UI_NewFileServiceTestU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/EABI/UI_NewFileServiceTestU.def	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+	_ZTI24CDummyNewFileServiceBase @ 2 NONAME ; #<TI>#
+	_ZTV24CDummyNewFileServiceBase @ 3 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/group/UI_NewFileServiceTest.mmp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2002 - 2007 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: API test automation file for project UI_NewFileServiceTest
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OS_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          UI_NewFileServiceTest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+/* Remove comments and replace 0x00000000 with correct vendor id */
+// VENDORID     0x00000000
+/* Remove comments and replace 0x00000000 with correct secure id */
+// SECUREID     0x00000000
+
+//TARGETPATH      ?target_path
+DEFFILE         UI_NewFileServiceTest.def
+
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      ../src
+SOURCE          UI_NewFileServiceTest.cpp
+SOURCE          UI_NewFileServiceTestBlocks.cpp
+SOURCE          CDummyNewFileServiceBase.cpp
+
+USERINCLUDE     ../inc 
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY         NewService.lib bafl.lib ServiceHandler.lib
+LIBRARY         cone.lib ws32.lib avkon.lib eikcoctl.lib eikctl.lib apgrfx.lib aknskins.lib aknskinsrv.lib aknswallpaperutils.lib eikcore.lib mpxviewutility.lib efsrv.lib
+
+LANG            SC
+
+/*
+START WINS      
+?wins_specific_information
+END
+
+START MARM
+?marm_specific_information
+END
+*/
+// Other possible keywords:
+ 
+// DOCUMENT     ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes)
+/*
+START BITMAP ?target
+TARGETPATH   ?emulated_path_on_target_machine
+HEADER
+SOURCE       ?color_depth ?source_bitmap
+END
+*/
+// DEFFILE ?filename
+// AIF ?filename
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/group/UI_NewFileServiceTest.pkg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,64 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: pakage file for make installation file for STIF
+;
+;
+; Installation file for STIF
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF UI_NewFileServiceTest Application"},(0x10005942),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"\epoc32\release\armv5\urel\UI_NewFileServiceTest.dll"   -   "c:\Sys\Bin\UI_NewFileServiceTest.dll"
+"..\..\init\TestFramework.ini"   -   "c:\testframework\TestFramework.ini" 
+"..\..\conf\UI_NewFileServiceTest.cfg"   -   "c:\testframework\UI_NewFileServiceTest.cfg"
+"..\..\conf\tcNewFileServiceTest.cfg"   -   "c:\testframework\tcNewFileServiceTest.cfg"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 - 2007 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:  build information file for project UI_NewFileServiceTest.
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+UI_NewFileServiceTest.mmp
+// NOTE: If using ARS requirements .mmp file operation should be done under this.
+// 'abld test build'
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/inc/CDummyNewFileServiceBase.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2002 - 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:    Sample file of  newfile server
+*
+*/
+
+
+
+
+
+
+#ifndef CDUMMYNEWFILESERVICEBASE_H_
+#define CDUMMYNEWFILESERVICEBASE_H_
+#include <CNewfileServiceBase.h>
+
+class CDummyNewFileServiceBase : public CNewFileServiceBase 
+    {
+public:  // Constructors and destructor
+	CDummyNewFileServiceBase();  
+    ~CDummyNewFileServiceBase();
+    void HandleNewFileL( MNewFileServiceObserver* aObserver,
+           							  CDesCArray& aFilenameArray,
+           							  TNewServiceFileType aType,
+           							  TBool aMultipleFiles );
+    CPolicyServer::TCustomResult SecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);
+    TInt CountResources();  
+    void Disconnect(const RMessage2& aMessage);
+    void ExtensionInterface(TUid aInterfaceId, TAny*& aImplementaion);
+    void CApaAppServiceBase_Reserved1();
+    void CApaAppServiceBase_Reserved2();
+    void HandleNewFileL( MNewFileServiceObserver* aObserver,
+           							  RFile& aFile,
+           				  TNewServiceFileType aType );
+   	void ServiceCompleteL();
+   	void ServiceLtest(const RMessage2& aMessage);
+   	void HandleCompletedNewServiceLtest(TBool aBool);
+   	CAiwGenericParamList* GenericParamstest();
+
+    };
+#endif /*CDUMMYNEWFILESERVICEBASE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/inc/UI_NewFileServiceTest.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2002 - 2007 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:    UI_NewFileServiceTest test class for STIF Test Framework TestScripter.
+*
+*/
+
+
+
+
+
+
+#ifndef UI_NewFileServiceTest_H
+#define UI_NewFileServiceTest_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+
+#include <CNewFileServiceBase.h>
+#include <NewFileServiceClient.h>
+#include <AiwGenericParam.h>
+#include <coeaui.h>
+#include "CDummyNewFileServiceBase.h"
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+// Logging path
+_LIT( KUI_NewFileServiceTestLogPath, "\\logs\\testframework\\UI_NewFileServiceTest\\" );
+//Data path
+_LIT( KNewFileServiceTestDataPath, "c:\\testing\\data\\" ); 
+// Log file
+_LIT( KUI_NewFileServiceTestLogFile, "UI_NewFileServiceTest.txt" ); 
+_LIT( KUI_NewFileServiceTestLogFileWithTitle, "UI_NewFileServiceTest_[%S].txt" );
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+class CUI_NewFileServiceTest;
+class CCoeControl;
+class CNewFileServiceClient;
+class NewFileServiceFactory;
+class CNewFileServiceBase;
+class CEdwinTestControl;
+class CListBoxTestControl;
+
+// DATA TYPES
+//enum ?declaration
+//typedef ?declaration
+//extern ?data_type;
+
+// CLASS DECLARATION
+
+/**
+*  CUI_NewFileServiceTest test class for STIF Test Framework TestScripter.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since ?Series60_version
+*/
+NONSHARABLE_CLASS(CUI_NewFileServiceTest) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+    	enum TIpcNewFileArgumentIndices
+    	    {
+    	    ENewServiceIndexParams = 0,
+    	    ENewServiceIndexFsHandle,
+    	    ENewServiceIndexFileHandle,
+    	    ENewServiceIndexFileName
+    	    };
+        /**
+        * Two-phased constructor.
+        */
+        static CUI_NewFileServiceTest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CUI_NewFileServiceTest();
+
+    public: // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CUI_NewFileServiceTest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // ?classname( const ?classname& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // ?classname& operator=( const ?classname& );
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+
+        /**
+        * Test methods are listed below. 
+        */
+
+        /**
+        * Example test method.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+     
+        TInt CNewFileServiceClientCreate( CStifItemParser& aItem );
+        TInt NewFileL( CStifItemParser& aItem );
+        TInt NewFileByUid( CStifItemParser& aItem );
+        TInt NewFileByRFile( CStifItemParser& aItem );
+        TInt NewFileByRFileAndUid( CStifItemParser& aItem );
+        
+        TInt CreateCDummyNewFileServiceBase( CStifItemParser& /*aItem*/ );
+        TInt DestroyCDummyNewFileServiceBase( CStifItemParser& /*aItem*/ );
+        TInt CDummyNewFileServiceBaseGetErrorCode( CStifItemParser& /*aItem*/ );
+        TInt CDummyNewFileServiceBaseSetErrorCode( CStifItemParser& aItem );
+        TInt CDummyNewFileServiceBaseServiceL( CStifItemParser& /*aItem*/ );
+        TInt CDummyNewFileServiceBaseHandleCompletedNewServiceL( CStifItemParser& /*aItem*/ );
+        TInt CDummyNewFileServiceBaseGenericParams( CStifItemParser& /*aItem*/ );
+        
+        //ADD NEW METHOD DEC HERE
+        //[TestMethods] - Do not remove
+
+    
+    private:    // Friend classes
+        //?friend_class_declaration;
+    	
+    	CNewFileServiceClient* iNewFileServiceClient;
+    	CNewFileServiceBase* iNewFileServiceBase;
+    	CDummyNewFileServiceBase* iDummyNewFileServiceBase;
+    };
+
+#endif      // UI_NewFileServiceTest_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/src/CDummyNewFileServiceBase.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2002 - 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:    sample file of Newfile server
+*
+*/
+
+
+
+
+
+
+#include "CDummyNewFileServiceBase.h"
+
+CDummyNewFileServiceBase::CDummyNewFileServiceBase():CNewFileServiceBase()
+	{
+	}
+CDummyNewFileServiceBase::~CDummyNewFileServiceBase()
+	{
+	}
+void CDummyNewFileServiceBase::HandleNewFileL( MNewFileServiceObserver* /*aObserver*/,
+          							  CDesCArray& /*aFilenameArray*/,
+          							  TNewServiceFileType /*aType*/,
+          							  TBool /*aMultipleFiles*/ )
+	{}
+         
+void CDummyNewFileServiceBase::HandleNewFileL( MNewFileServiceObserver* /*aObserver*/,
+          							  RFile& /*aFile*/,
+          				  TNewServiceFileType /*aType*/ )
+	{}
+
+void CDummyNewFileServiceBase::ServiceCompleteL()
+	{
+	GenericParams();
+	}
+CPolicyServer::TCustomResult CDummyNewFileServiceBase::SecurityCheckL(const RMessage2& /*aMsg*/, TInt& /*aAction*/, TSecurityInfo& /*aMissing*/)
+	{return CPolicyServer::EPass;}
+TInt CDummyNewFileServiceBase::CountResources()
+	{return 0;}
+void CDummyNewFileServiceBase::Disconnect(const RMessage2& /*aMessage*/)
+	{}
+void CDummyNewFileServiceBase::ExtensionInterface(TUid /*aInterfaceId*/, TAny*& /*aImplementaion*/)
+	{}
+void CDummyNewFileServiceBase::CApaAppServiceBase_Reserved1()
+	{}
+void CDummyNewFileServiceBase::CApaAppServiceBase_Reserved2()
+	{}
+
+void CDummyNewFileServiceBase::ServiceLtest(const RMessage2& aMessage)
+	{
+	ServiceL( aMessage );
+	}
+
+void CDummyNewFileServiceBase::HandleCompletedNewServiceLtest(TBool aBool)
+	{
+	HandleCompletedNewServiceL( aBool);
+	}
+
+CAiwGenericParamList* CDummyNewFileServiceBase::GenericParamstest()
+	{
+	return GenericParams();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/src/UI_NewFileServiceTest.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2002 - 2007 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:     UI_NewFileServiceTest test class for STIF Test Framework TestScripter.
+*
+*/
+
+
+
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "UI_NewFileServiceTest.h"
+#include <SettingServerClient.h>
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CUI_NewFileServiceTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CUI_NewFileServiceTest::CUI_NewFileServiceTest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUI_NewFileServiceTest::ConstructL()
+    {
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+    TInt ret = settingServer.Connect();
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        } 
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if(loggerSettings.iAddTestCaseTitle)
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KUI_NewFileServiceTestLogFileWithTitle, &title);
+        }
+    else
+        {
+        logFileName.Copy(KUI_NewFileServiceTestLogFile);
+        }
+
+    iLog = CStifLogger::NewL( KUI_NewFileServiceTestLogPath, 
+                          logFileName,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          EFalse );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CUI_NewFileServiceTest* CUI_NewFileServiceTest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CUI_NewFileServiceTest* self = new (ELeave) CUI_NewFileServiceTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CUI_NewFileServiceTest::~CUI_NewFileServiceTest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+    
+    if ( iNewFileServiceClient != NULL )
+    	{
+    	delete iNewFileServiceClient;
+    	iNewFileServiceClient=NULL;
+    	}
+    
+    // Delete logger
+    delete iLog; 
+
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CUI_NewFileServiceTest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/UI_NewFileServiceTest/src/UI_NewFileServiceTestBlocks.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,414 @@
+/*
+* Copyright (c) 2002 - 2007 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:    UI_NewFileServiceTest test class for STIF Test Framework TestScripter.
+*
+*/
+
+
+
+
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "UI_NewFileServiceTest.h"
+
+#include <coeaui.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CUI_NewFileServiceTest::Delete() 
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CUI_NewFileServiceTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+      
+        // test cases for the header "NewFileServiceClient.h"
+        ENTRY( "CNewFileServiceClientCreate", CUI_NewFileServiceTest::CNewFileServiceClientCreate ),
+        ENTRY( "NewFileL", CUI_NewFileServiceTest::NewFileL ),
+        ENTRY( "NewFileByUid", CUI_NewFileServiceTest::NewFileByUid ),
+        ENTRY( "NewFileByRFile", CUI_NewFileServiceTest::NewFileByRFile ),
+        ENTRY( "NewFileByRFileAndUid", CUI_NewFileServiceTest::NewFileByRFileAndUid ),
+        // test cases for the header "CNewFileServiceBase.h"
+     
+        ENTRY( "CreateCDummyNewFileServiceBase", CUI_NewFileServiceTest::CreateCDummyNewFileServiceBase ),
+        ENTRY( "DestroyCDummyNewFileServiceBase", CUI_NewFileServiceTest::DestroyCDummyNewFileServiceBase ),
+        ENTRY( "CDummyNewFileServiceBaseGetErrorCode", CUI_NewFileServiceTest::CDummyNewFileServiceBaseGetErrorCode ),
+        ENTRY( "CDummyNewFileServiceBaseSetErrorCode", CUI_NewFileServiceTest::CDummyNewFileServiceBaseSetErrorCode ),
+        ENTRY( "CDummyNewFileServiceBaseServiceL", CUI_NewFileServiceTest::CDummyNewFileServiceBaseServiceL ),
+        ENTRY( "CDummyNewFileServiceBaseHandleCompletedNewServiceL", CUI_NewFileServiceTest::CDummyNewFileServiceBaseHandleCompletedNewServiceL ),
+        ENTRY( "CDummyNewFileServiceBaseGenericParams", CUI_NewFileServiceTest::CDummyNewFileServiceBaseGenericParams )
+  
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CNewFileServiceClientCreate
+// NewClientL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CUI_NewFileServiceTest::CNewFileServiceClientCreate( CStifItemParser& /*aItem*/ )
+    {
+    TInt err = KErrNone;
+    iLog->Log(_L("CUI_NewFileServiceTest::CNewFileServiceClientCreate begin:"));
+    
+    TRAP(err,iNewFileServiceClient=NewFileServiceFactory::NewClientL());
+   
+    iLog->Log(_L("CUI_NewFileServiceTest::CNewFileServiceClientCreate returned: %d"), err);
+    return err;
+
+    }
+	
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::NewFileL
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::NewFileL( CStifItemParser& aItem )
+    {
+    TInt err = KErrNone;
+    TPtrC string;
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileL begin:"));
+    
+    CDesCArray* files = new (ELeave)CDesCArrayFlat(1);
+    
+    CleanupStack::PushL(files);
+    CAiwGenericParamList* iCAiwGenericParamList=CAiwGenericParamList::NewL();
+    
+   
+    while ( aItem.GetNextString( string ) == KErrNone )
+    	{
+		TBuf<120> KFrom;
+		KFrom.Append(KNewFileServiceTestDataPath);
+		KFrom.Append(string);
+	    files->AppendL(KFrom);
+	    iNewFileServiceClient=NewFileServiceFactory::NewClientL();
+	    
+	    TRAP(err,iNewFileServiceClient->NewFileL(*files,iCAiwGenericParamList,ENewFileServiceAudio,ETrue));
+	    
+	    
+    	}
+    CleanupStack::PopAndDestroy(files);
+ 
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileL returned: %d"), err);
+    return err;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::NewFileByUid
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::NewFileByUid( CStifItemParser& aItem )
+    {
+    TInt err = KErrNone;
+    TPtrC string;
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileByUid begin:"));
+    TUid uid = TUid::Uid(0x100058CA);//0x101F87A3 0x101F87A4  0x100058CA 
+    CDesCArray* files = new (ELeave)CDesCArrayFlat(1);
+    CleanupStack::PushL(files);
+    CAiwGenericParamList* iCAiwGenericParamList=CAiwGenericParamList::NewL();
+    
+   
+    while ( aItem.GetNextString( string ) == KErrNone )
+    	{
+		TBuf<120> KFrom;
+		KFrom.Append(KNewFileServiceTestDataPath);
+		KFrom.Append(string);
+	    files->AppendL(KFrom);
+	    iNewFileServiceClient=NewFileServiceFactory::NewClientL();
+	    
+	    TRAP(err,iNewFileServiceClient->NewFileL(uid,*files,iCAiwGenericParamList,ENewFileServiceAudio,ETrue));
+	    
+    
+    	}
+    CleanupStack::PopAndDestroy(files);
+ 
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileByUid returned: %d"), err);
+    return err;
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::NewFileByRFile
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::NewFileByRFile( CStifItemParser& aItem )
+    {
+    TInt err = KErrNone;
+    TPtrC string;
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileByRFile begin:"));
+    
+    CAiwGenericParamList* iCAiwGenericParamList=CAiwGenericParamList::NewL();
+      
+    while ( aItem.GetNextString( string ) == KErrNone )
+    	{
+		TBuf<120> KFrom;
+		KFrom.Append(KNewFileServiceTestDataPath);
+		KFrom.Append(string);
+	   
+	    RFile file;
+	    RFs fs;
+	    fs.Connect();
+	    file.Open(fs,KFrom,EFileShareAny|EFileWrite);
+	    iNewFileServiceClient=NewFileServiceFactory::NewClientL();
+	    
+	    TRAP(err,iNewFileServiceClient->NewFileL(file,iCAiwGenericParamList,ENewFileServiceAudio));
+	    file.Close();
+	    fs.Close();
+    
+    	}
+    
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileByRFile returned: %d"), err);
+     return err;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::NewFileByRFileAndUid
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::NewFileByRFileAndUid( CStifItemParser& aItem )
+    {
+    TInt err = KErrNone;
+    TPtrC string;
+    iLog->Log(_L("CUI_NewFileServiceTest::NewFileByRFileAndUid begin:"));
+    TUid uid = TUid::Uid(0x100058CA); 
+  
+    CAiwGenericParamList* iCAiwGenericParamList=CAiwGenericParamList::NewL();
+    
+   
+    while ( aItem.GetNextString( string ) == KErrNone )
+    	{
+		TBuf<120> KFrom;
+		KFrom.Append(KNewFileServiceTestDataPath);
+		KFrom.Append(string);
+	   
+	    RFile file;
+	    RFs fs;
+	    fs.Connect();
+	    file.Open(fs,KFrom,EFileShareAny|EFileWrite);
+	    iNewFileServiceClient=NewFileServiceFactory::NewClientL();
+	    
+	    TRAP(err,iNewFileServiceClient->NewFileL(uid,file,iCAiwGenericParamList,ENewFileServiceAudio));
+	    file.Close();
+	    fs.Close();
+    
+    	}
+  
+ 
+     iLog->Log(_L("CUI_NewFileServiceTest::NewFileByRFileAndUid returned: %d"), err);
+     return err;
+
+    }
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CreateCDummyNewFileServiceBase
+// Create CDummyNewFileServiceBase
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::CreateCDummyNewFileServiceBase( CStifItemParser& /*aItem*/ )
+    {
+    TInt err = KErrNone;
+    iLog->Log(_L("CUI_NewFileServiceTest::CreateCDummyNewFileServiceBase begin:"));
+    
+	iDummyNewFileServiceBase = new (ELeave)CDummyNewFileServiceBase();
+    
+	if ( iDummyNewFileServiceBase == NULL )
+		
+    	{
+    	  err = KErrNotFound;
+    	  iLog->Log(_L("CUI_NewFileServiceTest::CreateCDummyNewFileServiceBase returned: %d"), err);
+    	}
+	
+    return err;
+    
+    }
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::DestroyCDummyNewFileServiceBase
+// Destroy CDummyNewFileServiceBase
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::DestroyCDummyNewFileServiceBase( CStifItemParser& /*aItem*/ )
+    {
+    TInt err = KErrNone;
+    iLog->Log(_L("CUI_NewFileServiceTest::DestroyCDummyNewFileServiceBase begin:"));
+    if ( iDummyNewFileServiceBase != NULL )
+    	{
+	    delete iDummyNewFileServiceBase;
+	    iDummyNewFileServiceBase = NULL;
+    	}
+    iLog->Log(_L("CUI_NewFileServiceTest::DestroyCDummyNewFileServiceBase returned: %d"), err);
+    return err;
+    }
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CDummyNewFileServiceBaseGetErrorCode
+// CDummyNewFileServiceBase GetErrorCode
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::CDummyNewFileServiceBaseGetErrorCode( CStifItemParser& /*aItem*/ )
+    {
+    TInt err = KErrNone;
+    TInt errcode = 0;
+    iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseGetErrorCode begin:"));
+    
+	errcode = iDummyNewFileServiceBase->GetErrorCode();
+	if ( errcode > 0 )
+    	{
+    	  err = KErrNotFound;
+    	  iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseGetErrorCode returned: %d"), err);
+    	}
+	
+    return err;
+    }
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CDummyNewFileServiceBaseSetErrorCode
+// CDummyNewFileServiceBase SetErrorCode 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+TInt CUI_NewFileServiceTest::CDummyNewFileServiceBaseSetErrorCode( CStifItemParser& aItem )
+    {
+    TInt err = KErrNone;
+    TInt errcode;
+    TInt compare;
+    iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseSetErrorCode begin:"));
+	 while ( aItem.GetNextInt(errcode) == KErrNone )
+	        {
+	        iDummyNewFileServiceBase->SetErrorCode(errcode);
+	        }
+	 
+	 compare = iDummyNewFileServiceBase->GetErrorCode();
+	 
+	if ( compare != errcode )
+		{
+		err = KErrNotFound;
+		iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseSetErrorCode returned: %d"), err);
+		}
+	
+    return err;
+    }
+
+ 
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CDummyNewFileServiceBaseServiceL
+// CDummyNewFileServiceBase ServiceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::CDummyNewFileServiceBaseServiceL( CStifItemParser& /*aItem*/ )
+    {
+	    TInt err = KErrNone;
+	    iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseServiceL begin:"));
+//	    RMessage2* msg = new(ELeave)RMessage2();
+//		HBufC* buf = HBufC::NewLC(100);
+//		 buf->Des().Append(_L("aa"));
+//	    TPtr ptr = buf->Des();
+//	    ptr.Copy(_L("aa"));
+//	    message->ReadL(0,ptr);
+	    RMessage2* msg = new(ELeave)RMessage2();
+	    HBufC* msg1 = HBufC::New( 20 );
+	    TUint16 msgContent = ENewServiceIndexFileName; //(TUint8)3;
+	    msg1->Des().Copy( &msgContent );
+	    TPtr msgPtr1 = msg1->Des();
+	    msg->ReadL( msgContent,msgPtr1 );
+	    
+		iDummyNewFileServiceBase->ServiceLtest(*msg);
+		CleanupStack::PopAndDestroy();   // msg1
+		//delete 	message;
+		//delete buf;
+	    iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseServiceL returned: %d"), err);
+    	
+	
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CDummyNewFileServiceBaseHandleCompletedNewServiceL
+// CDummyNewFileServiceBase HandleCompletedNewServiceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::CDummyNewFileServiceBaseHandleCompletedNewServiceL( CStifItemParser& /*aItem*/ )
+    {
+     TInt err = KErrNone;
+	 TBool tbool = ETrue;
+	 iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseHandleCompletedNewServiceL begin:"));
+	
+	 iDummyNewFileServiceBase->HandleCompletedNewServiceLtest(tbool);
+	
+	 iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseHandleCompletedNewServiceL returned: %d"), err);
+    	
+     return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CUI_NewFileServiceTest::CDummyNewFileServiceBaseGenericParams
+// CDummyNewFileServiceBase GenericParams
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+
+TInt CUI_NewFileServiceTest::CDummyNewFileServiceBaseGenericParams( CStifItemParser& /*aItem*/ )
+    {
+    TInt err = KErrNone;
+    iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseGenericParams begin:"));
+    
+    iDummyNewFileServiceBase->GenericParamstest();
+	 
+    iLog->Log(_L("CUI_NewFileServiceTest::CDummyNewFileServiceBaseGenericParams  returned: %d"), err);
+	
+    return err;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/conf/UI_NewFileServiceTest.cfg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,70 @@
+[Test]
+title 1: CNewFileServiceClientCreate
+create UI_NewFileServiceTest client
+client CNewFileServiceClientCreate
+delete client
+[Endtest] 
+
+[Test]
+title 2: CreateCDummyNewFileServiceBase
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest] 
+
+[Test]
+title 3: DestroyCDummyNewFileServiceBase
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest] 
+
+[Test]
+title 4: CDummyNewFileServiceBaseGetErrorCode
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client CDummyNewFileServiceBaseSetErrorCode -12
+client CDummyNewFileServiceBaseGetErrorCode
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest] 
+
+[Test]
+title 5: CDummyNewFileServiceBaseSetErrorCode
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client CDummyNewFileServiceBaseSetErrorCode -12
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest]
+
+
+[Test]
+title 6: CDummyNewFileServiceBaseHandleCompletedNewServiceL
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client CDummyNewFileServiceBaseHandleCompletedNewServiceL
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest]
+
+[Test]
+title 7: CDummyNewFileServiceBaseGenericParams
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client CDummyNewFileServiceBaseGenericParams
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest]
+
+[Test]
+title 8: CDummyNewFileServiceBaseServiceL
+create UI_NewFileServiceTest client
+client CreateCDummyNewFileServiceBase
+client CDummyNewFileServiceBaseServiceL
+pause 1000
+client DestroyCDummyNewFileServiceBase
+delete client
+[Endtest]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/conf/tcNewFileServiceTest.cfg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,40 @@
+[Test]
+title 1: CNewFileServiceClientCreate
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 1
+[Endtest] 
+
+[Test]
+title 2: CreateCDummyNewFileServiceBase
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 2
+[Endtest] 
+
+[Test]
+title 3: DestroyCDummyNewFileServiceBase
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 3
+[Endtest] 
+
+[Test]
+title 4: CDummyNewFileServiceBaseGetErrorCode
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 4
+[Endtest] 
+
+[Test]
+title 5: CDummyNewFileServiceBaseSetErrorCode
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 5
+[Endtest]
+
+
+[Test]
+title 6: CDummyNewFileServiceBaseHandleCompletedNewServiceL
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 6
+[Endtest]
+
+[Test]
+title 7: CDummyNewFileServiceBaseGenericParams
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 7
+[Endtest]
+
+[Test]
+title 8: CDummyNewFileServiceBaseServiceL
+run testscripter c:\testframework\UI_NewFileServiceTest.cfg 8
+[Endtest]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2007 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:     Build information file for project UI_NewFileServiceTest
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTEXPORTS
+// Test sound file
+
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+#include "../UI_NewFileServiceTest/group/bld.inf"
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/new_file_service_api/tsrc/init/TestFramework.ini	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,197 @@
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport		# Possible values are: 'Empty', 'Summary', 'Environment',
+                                                               'TestCases' or 'FullReport'
+
+CreateTestReport= YES			# Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport_UI_NewFileServiceTest
+
+TestReportFormat= TXT			# Possible values: TXT or HTML
+TestReportOutput= FILE			# Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE	# Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone	# Possible values are:
+						# 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+					  	# 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+					  	# 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+					  	# 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                              # Default timeout value for each test case. In milliseconds
+UITestingSupport= YES
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testcombiner
+TestCaseFile= c:\testframework\tcNewFileServiceTest.cfg
+[End_Module]
+
+
+# Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES    # Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/voicerecorder_public_constants_api/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 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:  File that exports the files belonging to 
+:                VoiceRecorder Public Constants API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/VoiceRecorderUID.h     APP_LAYER_PLATFORM_EXPORT_PATH(VoiceRecorderUID.h)
+../inc/VoiceRecorderContexts.h     APP_LAYER_PLATFORM_EXPORT_PATH(VoiceRecorderContexts.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/voicerecorder_public_constants_api/inc/VoiceRecorderContexts.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 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: 
+*     Defines commands and control identifiers.
+*     The file can be included in C++ or resource file.
+*
+*/
+
+
+#ifndef __VOICERECORDERCONTEXTS_H_
+#define __VOICERECORDERCONTEXTS_H_
+
+// Recorder View context IDs
+enum TVRRecViewContexts
+	{
+	EContextNormal = 0,
+	EContextEmptyNormal,
+	EContextRecordNewNormal,
+	EContextRecordNewForRemote,
+	EContextViewer,
+	EContextNokiaRingTone,
+	ENumContexts	// this must be the last line
+	};
+
+#endif // __VOICERECORDERCONTEXTS_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/voicerecorder_public_constants_api/inc/VoiceRecorderUID.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2002 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: 
+*     Contains the UIDs for Voice Recorder application modules and views
+*
+*/
+
+
+#ifndef __VOICERECORDERUID_H__
+#define __VOICERECORDERUID_H__
+
+// CONSTANTS
+#define KVoiceRecorderAppUID3 0x100058CA
+#define KEPOCAppUID2 0x100039ce		// Symbian defined
+#define KEPOCDLLUID2 0x1000008d		// Symbian defined
+
+// View UIDs
+#define KVRRecorderViewUID 1
+
+#endif // __VOICERECORDERUID_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerec_plat/voicerecorder_public_constants_api/voicerecorder_public_constants_api.metaxml	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<api id="204b6973385e929760f05fa66812f2ce" dataversion="2.0">
+  <name>VoiceRecorder Public Constants API</name>
+  <description>VoiceRecorder Public Constants API</description>
+  <type>c++</type>
+  <collection>voicerecorder</collection>
+  <libs>
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/Aif/VoiceRecorderAif.rss	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 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: 
+*     Application Information resource file for Voice Recorder
+*
+*
+*/
+
+
+#include <aiftool.rh>
+#include <bldvariant.hrh>
+
+RESOURCE AIF_DATA
+    {
+    app_uid       = 0x100058CA;
+    num_icons     = 2;
+    hidden        = KAppNotHidden;
+    embeddability = KAppEmbeddable;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRAppServer.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is part of new file service framework.
+*
+*/
+
+
+#include	<NewFileService.hrh>
+#include    <NewFileServiceDefs.h>
+#include	"CVRNewFileService.h"
+#include	"CVRAppServer.h"
+
+CApaAppServiceBase* CVRAppServer::CreateServiceL( TUid aServiceType ) const
+	{
+	if ( aServiceType == TUid::Uid( NEWSERVICEUID ) )
+		{
+		CVRNewFileService* service = CVRNewFileService::NewL();
+		iNewFileServiceObserver = service;
+		return service;
+		}
+	else
+		{
+		return CAknAppServer::CreateServiceL(aServiceType);
+		}
+	}
+
+MNewFileServiceObserver* CVRAppServer::NewFileServiceObserver() const
+	{
+	return iNewFileServiceObserver;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRAppServer.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is part of application framework.
+*
+*/
+
+
+#ifndef __CVRAPPSERVER_H__
+#define __CVRAPPSERVER_H__
+
+// INCLUDES
+#include <AknServerApp.h>
+#include <CNewFileServiceBase.h>
+
+// CONSTANTS
+
+// CLASS DECLARATION
+/**
+* This class is part of new file service framework.
+*/
+class CVRAppServer
+	: public CAknAppServer
+	{
+
+	public: // from CAknAppServer
+		CApaAppServiceBase* CreateServiceL( TUid aServiceType ) const;
+		
+	public:
+		MNewFileServiceObserver* NewFileServiceObserver() const;
+
+	private:
+		mutable MNewFileServiceObserver* iNewFileServiceObserver;
+	};
+
+#endif // __CVNEWFILESERVICE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRAppUI.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+ *     This class is a part of the standard application framework.
+ *     It instantiates the application views.
+ *     It also acts as the default command handler for the application.
+ *
+*/
+
+
+
+#include <ErrorUI.h>
+#include <coeutils.h>
+
+#include <AknDef.h> // For layout change event definitions
+
+#include "CVRRecView.h"
+#include "MVRSelectionProvider.h"
+#include "CVRAppUi.h"
+#include <sysutil.h>
+#include <StringLoader.h>
+#include "CVRDocument.h"
+#include <featmgr.h>
+#include "VRConsts.h"
+
+#include <VoiceRecorderUID.h>
+#include <voicerecorder.rsg>
+#include "voicerecorder.hrh"
+#include "VRUtils.h"
+#include "CVRSettingsDialog.h"
+#include <hlplch.h>
+#include <AknsConstants.h>
+#include <aknnotewrappers.h>
+#include <csxhelp/vorec.hlp.hrh>
+#include <aknradiobuttonsettingpage.h>
+#include <CNewFileServiceBase.h>
+#include <e32property.h> 
+#include <UsbWatcherInternalPSKeys.h>
+#include <usbpersonalityids.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif
+#include <AknWaitDialog.h>
+_LIT( KVRCommandRecord, "record" );
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::CVRAppUi
+// 
+// ---------------------------------------------------------------------------
+//
+CVRAppUi::CVRAppUi()
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::~CVRAppUi
+// 
+// ---------------------------------------------------------------------------
+//
+CVRAppUi::~CVRAppUi()
+    {
+    if (iActiveWait.IsStarted())
+        {
+        iActiveWait.AsyncStop();
+        }
+
+    if (iDoorObserver)
+        {
+        iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::EEmpty);
+        }
+
+	delete iErrorUI;
+	FeatureManager::UnInitializeLib();
+	}
+
+// ---------------------------------------------------------------------------
+//CVRAppUi::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::ConstructL()
+    {
+    BaseConstructL( EAknEnableSkin | EAknEnableMSK 
+#ifdef SINGLE_CLICK_INCLUDED
+    | EAknSingleClickCompatible
+#endif
+	);
+
+	iErrorUI = CErrorUI::NewL();
+
+	// Exit if video or voip call is ongoing
+	if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) )
+		{
+		Exit();
+		}
+
+	FeatureManager::InitializeLibL();
+
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+
+#ifndef RD_MULTIPLE_DRIVE
+		TVRDriveInfo mmcInfo;
+		VRUtils::GetMMCInfo( mmcInfo );
+		TVRMemoStore memoStore = VRUtils::MemoStoreL();
+
+		if ( memoStore == EMemoStoreMMC )
+			{
+            // check if USB is connected, if so, then need to switch to phone memory
+            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 ) )
+				{
+				HBufC* noteText = iCoeEnv->AllocReadResourceLC(
+														 R_QTN_MEMC_VOREC_NOTE1 );
+				CAknInformationNote* infoNote =
+									   new( ELeave ) CAknInformationNote( ETrue );
+				infoNote->ExecuteLD( *noteText );
+				CleanupStack::PopAndDestroy( noteText );
+				VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+				}
+			else if ( mmcInfo.iDriveReadOnly )
+				{
+				HBufC* noteText = iCoeEnv->AllocReadResourceLC(
+														 R_QTN_MEMC_VOREC_NOTE2 );
+				CAknInformationNote* infoNote =
+									   new( ELeave ) CAknInformationNote( ETrue );
+				infoNote->ExecuteLD( *noteText );
+				CleanupStack::PopAndDestroy( noteText );				
+				VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+				}
+			else if ( mmcInfo.iDriveCorrupted )
+				{
+				// MMC corrupted -> use phone memory
+				VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+				}
+			
+			}
+// for multiple drives
+#else
+
+
+#endif
+		}
+
+    CVRRecView* view = CVRRecView::NewLC(R_VR_RECORDER_VIEW,
+            R_VR_RECVIEW_STATES);
+
+	AddViewL( view );
+	iLayoutChangeObserver = view;
+	CleanupStack::Pop( view );
+
+	SetDefaultViewL( *view );
+
+    // Activate view straight away, if started through new file service	
+    if (iEikonEnv->StartedAsServerApp())
+        {
+        ActivateLocalViewL(TUid::Uid(KVRRecorderViewUID), TUid::Uid(
+                EContextRecordNewForRemote), KNullDesC8);
+        }
+
+	}
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::HandleCommandL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::HandleCommandL( TInt aCommand )
+    {
+	switch ( aCommand )
+        {
+		case EAknSoftkeyExit:	// Fall through
+			{
+			if ( iView )
+				{
+				iView->HandleCommandL( ECmdCancelNote );				
+				}
+            Exit();
+			break;
+			}
+        case EEikCmdExit:
+		   	{
+			if ( iView )
+				{
+				iView->HandleCommandL( ECmdCancelNote );				
+				}
+
+            // The file service needs to abort if it's still going on
+            if (iEmbeddedObserver)
+                {
+                CNewFileServiceBase * iNewFileService = NULL;
+                iNewFileService
+                        = dynamic_cast<CNewFileServiceBase*> (iEmbeddedObserver);
+                if (iNewFileService != NULL)
+                    {
+                    iNewFileService->SetErrorCode(KErrAbort);
+                    }
+                iEmbeddedObserver->AbortL();
+                }
+
+            Exit();
+			break;
+            }
+		case EAknCmdExit:
+			{
+			if ( iView )
+				{
+				iView->HandleCommandL( ECmdCancelNote );				
+				}
+
+            // The file service needs to abort if it's still going on
+            if (iEmbeddedObserver)
+                {
+                CNewFileServiceBase * iNewFileService = NULL;
+                iNewFileService
+                        = dynamic_cast<CNewFileServiceBase*> (iEmbeddedObserver);
+                if (iNewFileService != NULL)
+                    {
+                    iNewFileService->SetErrorCode(KErrAbort);
+                    }
+                iEmbeddedObserver->AbortL();
+                }
+
+            Exit();
+            break;
+            }
+        case ECmdHelp:
+            {
+            if (FeatureManager::FeatureSupported(KFeatureIdHelp))
+                {
+                if (iIsSettingsOpen)
+                    {
+                    CArrayFix<TCoeHelpContext>* 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);
+                    }
+
+				// destroy array from GetSelectedFilesLC()
+				CleanupStack::PopAndDestroy();
+
+				if ( canExit )
+					{
+					HandleCommandL( EEikCmdExit );
+					}
+				else
+					{
+					// Wait until file service has completed
+					// transfering filename array back to client
+					if( !iActiveWait.IsStarted() )
+					    {
+					    iActiveWait.Start(); // CSI: 10 #
+					    }
+					}
+   				}
+			break;
+  			}
+       	
+        default:
+			{
+			break;
+			}
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::SelectionProviderL
+// 
+// ---------------------------------------------------------------------------
+//
+MVRSelectionProvider* CVRAppUi::SelectionProviderL()
+	{
+    return reinterpret_cast< CVRRecView* >( iView );
+	}
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::HandleResourceChangeL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::HandleResourceChangeL( TInt aType )
+	{
+	CAknViewAppUi::HandleResourceChangeL( aType );
+
+    if (iLayoutChangeObserver != NULL && (aType == KEikDynamicLayoutVariantSwitch || aType
+            == KAknsMessageSkinChange))
+        {
+        iLayoutChangeObserver->LayoutChangedL(aType);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::RecordNewFileL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::RecordNewFileL( RFile& aFile, MVREmbeddedObserver* aObserver )
+	{
+	if ( aObserver )
+		{
+		iEmbeddedObserver = aObserver;
+
+		if ( aFile.SubSessionHandle() != 0)
+			{
+			// Pass file handle to recview
+			SelectionProviderL()->SetFileHandle( aFile );
+			}				
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::ProcessCommandParametersL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRAppUi::ProcessCommandParametersL( TApaCommand /*aCommand*/,
+    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);
+
+    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);
+        }
+        
+	if ( !ConeUtils::FileExists( aDocumentName ) )
+		{
+		aDocumentName.Copy( aTail );
+		}		
+	return ConeUtils::FileExists( aDocumentName );
+    }
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::HandleApplicationSpecificEventL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::HandleApplicationSpecificEventL(TInt aType,
+        const TWsEvent& aEvent)
+    {
+    if( aType == EAknSoftkeyExit || aType == KAknShutOrHideApp)
+    	{
+    	Exit();
+    	}
+    	CEikAppUi::HandleApplicationSpecificEventL(aType, aEvent);
+    }
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::SetEmbeddedObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::SetEmbeddedObserver( MVREmbeddedObserver* aObserver )
+    {
+    iEmbeddedObserver = aObserver;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRAppUi.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a part of the standard application framework.
+*     It instantiates the application views.
+*     It also acts as the default command handler for the application.
+*
+*/
+
+
+#ifndef __CVRAPPUI_H__
+#define __CVRAPPUI_H__
+
+// INCLUDES
+#include <aknViewAppUi.h>
+#include <apparc.h>			// MApaEmbeddedDocObserver
+
+#include "MVREmbeddedObserver.h"
+#include "VRUSBStateHanlder.h"
+// FORWARD DECLARATIONS
+class MVRSelectionProvider;
+class CErrorUI;
+class MVRLayoutChangeObserver;
+class CAknWaitDialog;
+
+// CLASS DECLARATION
+/**
+* This class is a part of the standard application framework.
+* It instantiates the application views.
+* It also acts as the default command handler for the application.
+*/
+class CVRAppUi
+	: public CAknViewAppUi
+	{
+	public: // Constructors and destructor
+
+		/**
+        * Default constructor.
+        */
+		CVRAppUi();
+
+		/**
+		* Destructor.
+		*/
+		~CVRAppUi();
+
+		/**
+        * 2nd phase constructor.
+        */
+		void ConstructL();
+
+		/**
+		* Receive file handle and observer for recording
+		* for file new service
+		* @param aFile File handle
+		* @param aObserver Observer for handing events back to file service
+		*/
+		void RecordNewFileL( RFile& aFile, MVREmbeddedObserver* aObserver );
+
+		/**
+		* Method for setting observer for file new service
+		* @param aObserver Observer for handing events back to file service
+		*/
+		void SetEmbeddedObserver( MVREmbeddedObserver* aObserver );
+
+	private: // from CEikAppUi
+
+		/**
+		* Takes care of command handling.
+		* @param aCommand Command to be handled
+		*/
+		void HandleCommandL( TInt aCommand );
+
+		/**
+		* Handles a change to the application's resources
+		* @param aType The type of changed resource
+		*/
+		void HandleResourceChangeL( TInt aType );
+
+		/**
+		* CEikAppUi::ProcessCommandParametersL() is overwritten here, because
+		* otherwise it messes with the document name.
+		* @param aCommand The shell command sent to the application
+		* @param aDocumentName The document name that will be given to OpenFileL()
+		* @param aTail The rest of the command line
+		* @return Whether the final document name represents an existing file
+		*/
+		TBool ProcessCommandParametersL( TApaCommand aCommand,
+		    TFileName& aDocumentName, const TDesC8& aTail );
+
+		/**
+		* Handles events from window group  
+		* @param aType The type of event
+		*/
+		
+		void HandleApplicationSpecificEventL(TInt aType, const TWsEvent& aEvent);
+
+	private: // from MVRUSBEventObserver
+		void HandleUSBEventL();
+	
+	private: // new methods
+
+		/**
+		* Provides access to the current view's MVRSelectionProvider
+		* interface.
+		* @return pointer to the active view as MVRSelectionProvider.
+		*/
+		MVRSelectionProvider* SelectionProviderL();
+
+	private: // data
+		/**
+		* CActiveScheduler wrapper object. Owned.
+		*/
+		CActiveSchedulerWait iActiveWait;
+
+		/**
+		* Owned: CErrorUI object used to display notes when errors occur
+		* in embedded activation
+		*/
+		CErrorUI* iErrorUI;
+
+		/**
+		* Pointer to object that observers layout changes and forwards
+		* notification to all UI controls
+		*/
+		MVRLayoutChangeObserver* iLayoutChangeObserver;
+		
+		/**
+		* Pointer to embedded observer which is notified (if not null) when
+		* embedded recording is ready
+		*/
+		MVREmbeddedObserver* iEmbeddedObserver;
+
+		/*
+		* For help context, whether settings page is active.
+		*/
+		TBool iIsSettingsOpen;		
+
+
+	};
+
+#endif // __CVRAPPUI_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRApplication.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a part of the standard application framework.
+*     The application gets instantiated starting from this class.
+*     Provides a factory method for instantiating the document object.
+*
+*/
+
+
+#include <eikstart.h>
+#include "CVRApplication.h"
+#include "CVRAppServer.h"
+#include "CVRDocument.h"
+
+TUid CVRApplication::AppDllUid() const
+    {
+    return KVRAppUID;
+    }
+
+CApaDocument* CVRApplication::CreateDocumentL()
+    {
+    return CVRDocument::NewL( *this );
+    }
+
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CVRApplication;
+	}
+
+void CVRApplication::NewAppServerL( CApaAppServer*& aAppServer )
+	{
+	aAppServer = new( ELeave ) CVRAppServer;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication( NewApplication );
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRApplication.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a part of the standard application framework.
+*     The application gets instantiated starting from this class.
+*     Provides a factory method for instantiating the document object.
+*
+*/
+
+
+#ifndef CVRAPPLICATION_H
+#define CVRAPPLICATION_H
+
+// INCLUDES
+#include <aknapp.h>
+#include <VoiceRecorderUID.h>
+
+// CONSTANTS
+const TUid KVRAppUID = { KVoiceRecorderAppUID3 };
+
+// CLASS DECLARATION
+/**
+* This class is a part of the standard application framework.
+* The application gets instantiated starting from this class.
+* Provides a factory method for instantiating the document object.
+*/
+class CVRApplication
+	: public CAknApplication
+	{
+
+	private: // from CApaApplication
+
+		/**
+		* Creates a CVRDocument instance.
+		* @return A pointer to the created document object.
+		*/
+		CApaDocument* CreateDocumentL();
+
+		/**
+		* Returns application's UID value.
+		* @return KVRAppUID.
+		*/
+		TUid AppDllUid() const;
+		
+		/**
+		* Returns a pointer to first-stage constructed server
+		* @ return A pointer to AppServer object
+		*/
+		void NewAppServerL( CApaAppServer*& aAppServer );		
+	};
+
+#endif // CVRAPPLICATION_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRDocument.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a part of the standard application framework.
+*     Declares the document class for this application.
+*
+*/
+
+
+#include "CVRDocument.h"
+#include "CVRAppUi.h"
+
+CVRDocument::~CVRDocument()
+    {
+    }
+
+CVRDocument* CVRDocument::NewL( CEikApplication& aApp )
+    {
+    CVRDocument* self = new( ELeave ) CVRDocument( aApp );
+    return self;
+    }
+
+CEikAppUi* CVRDocument::CreateAppUiL()
+    {
+    return new( ELeave ) CVRAppUi;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRDocument.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a part of the standard application framework.
+*     Declares the document class for this application.
+*
+*/
+
+
+#ifndef __CVRDOCUMENT_H__
+#define __CVRDOCUMENT_H__
+
+// INCLUDES
+#include <MediaSharedDocument.h>
+
+// FORWARD DECLARATIONS
+class CEikAppUi;
+
+// CLASS DECLARATION
+/**
+* This class is a part of the standard application framework.
+* Declares the document class for this application.
+*/
+class CVRDocument
+	: public CMediaSharedDocument
+	{
+	public: // Constructors and destructor
+
+		/**
+		* Destructor.
+		*/
+		~CVRDocument();
+
+		/**
+        * Static two-phased constructor.
+		* @param aApp Reference to the application object.
+        */
+		static CVRDocument* NewL( CEikApplication& aApp );
+
+	 private:
+
+		/**
+		* Default constructor. Private, not implemented.
+		*/
+		CVRDocument();
+
+		/**
+        * Constructor. Inlined to save a few bytes.
+		* @param aApp Reference to the application object.
+        */
+		inline CVRDocument( CEikApplication& aApp )
+							: CMediaSharedDocument( aApp ) {}
+
+	private: // from CEikDocument
+
+		/**
+        * Instantiates the application UI class.
+		* @return CCnvAppUi object instance.
+        */
+		CEikAppUi* CreateAppUiL();
+
+	};
+
+#endif // __CVRDOCUMENT_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRNewFileService.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is part of new file service framework.
+*
+*/
+
+
+#include "CVRNewFileService.h"
+#include "CVRAppUi.h"
+#include <f32file.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+
+#include "voicerecorder.hrh"
+
+CVRNewFileService* CVRNewFileService::NewL()
+	{
+	return new( ELeave ) CVRNewFileService;
+	}
+
+CVRNewFileService::CVRNewFileService()
+: iCompleted( EFalse ), iFileHandleUsed( EFalse )
+	{
+		
+	}
+
+CVRNewFileService::~CVRNewFileService()
+	{
+	// Make sure that appui wont use this deleted class
+	CVRAppUi* appUi( static_cast<CVRAppUi*> (CEikonEnv::Static()
+	                ->EikAppUi() ) );
+    if ( appUi )
+        {
+        appUi->SetEmbeddedObserver( NULL );
+        }
+          
+	if ( !iCompleted)
+		{
+		if ( iObserver )
+			{
+			// Can't leave in destructor
+			TRAP_IGNORE( iObserver->HandleCompletedNewServiceL( EFalse ) );				
+			iCompleted = ETrue;
+			}
+		}
+	}
+	
+void CVRNewFileService::HandleNewFileL( MNewFileServiceObserver* aObserver,
+							  CDesCArray& aFilenameArray,
+							  TNewServiceFileType aType,
+							  TBool /*aMultipleFiles*/ )
+	{
+	RFile dummyFile;
+
+	iFilenameArray = &aFilenameArray;
+	iObserver = aObserver;
+
+	if ( aType != ENewFileServiceAudio )
+		{
+		iCompleted = ETrue;
+		aObserver->HandleCompletedNewServiceL( EFalse );
+
+		// Send NULL to AppUi as observer, AppUi exits
+
+		( static_cast<CVRAppUi*> (CEikonEnv::Static()->EikAppUi() ) )
+			->RecordNewFileL( dummyFile, NULL );		
+		return;
+		}
+
+	// Send message to AppUi to fully construct application
+	( static_cast<CVRAppUi*> (CEikonEnv::Static()->EikAppUi() ) )
+		->RecordNewFileL( dummyFile, this );
+
+	}
+
+void CVRNewFileService::HandleNewFileL( MNewFileServiceObserver* aObserver,
+							  RFile& aFile,
+							  TNewServiceFileType aType )
+	{
+	iObserver = aObserver;
+
+	if ( aType != ENewFileServiceAudio )
+		{
+		iCompleted = ETrue;
+		aObserver->HandleCompletedNewServiceL( EFalse );
+
+		// Send NULL to AppUi as observer, AppUi exits
+		RFile dummyFile;
+		( static_cast<CVRAppUi*> (CEikonEnv::Static()->EikAppUi() ) )
+			->RecordNewFileL( dummyFile, NULL );		
+		return;
+		}
+
+	iFileHandleUsed = ETrue;
+
+	// Send the file handle to application and finish ui construction
+	( static_cast<CVRAppUi*> (CEikonEnv::Static()->EikAppUi() ) )
+	                        ->RecordNewFileL( aFile, this );
+	}
+
+TBool CVRNewFileService::FileCompleteL( const TDesC& aName )
+	{
+	if ( iFilenameArray )
+		{
+		iFilenameArray->AppendL( aName );
+		}
+
+	iCompleted = ETrue;
+	iObserver->HandleCompletedNewServiceL( ETrue );	
+
+	// Notify the appui
+	if ( iFileHandleUsed )
+		{
+		// Application can be closed immediately
+		return ETrue;
+		}
+	
+	// Application waits for ECmdNewFileServiceNotify before it quits
+	// File service needs to transfer filenames back to client first
+	return EFalse;
+	}
+
+void CVRNewFileService::ServiceCompleteL()
+	{
+	CEikonEnv::Static()->EikAppUi()->HandleCommandL( ECmdNewFileServiceNotify );	
+	}
+
+void CVRNewFileService::AbortL()
+	{
+	if ( !iCompleted )
+		{
+		iCompleted = ETrue;
+		iObserver->HandleCompletedNewServiceL( EFalse );
+		}
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRNewFileService.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is part of new file service framework.
+*
+*/
+
+
+#ifndef __CVRNEWFILESERVICE_H__
+#define __CVRNEWFILESERVICE_H__
+
+// INCLUDES
+#include <CNewFileServiceBase.h>
+#include "MVREmbeddedObserver.h"
+
+// CONSTANTS
+
+// CLASS DECLARATION
+/**
+* This class is part of new file service framework.
+*/
+class CVRNewFileService
+	: public CNewFileServiceBase, public MVREmbeddedObserver
+	{
+
+	public:
+		static CVRNewFileService* NewL();
+		~CVRNewFileService();
+
+		/*
+		* Receive message from service to record new files
+		*/
+        void HandleNewFileL( MNewFileServiceObserver* aObserver,
+        							  CDesCArray& aFilenameArray,
+        							  TNewServiceFileType aType,
+        							  TBool aMultipleFiles );
+		/*
+		* Receive message from service to record new file into file handle
+		*/
+        void HandleNewFileL( MNewFileServiceObserver* aObserver,
+        							  RFile& aFile,
+        							  TNewServiceFileType aType );
+
+		/*
+		* Receive message from service that file service has completed
+		* and can be closed
+		*/
+		void ServiceCompleteL();
+		
+	public: // MVREmbeddedObserver        							  
+		/*
+		* Receive comand from application that file named aName has been recorded
+		* @param aName The name of the recorded file
+		* @return Can the application be closed or should we wait
+		*/
+		virtual TBool FileCompleteL( const TDesC& aName );
+		
+		/*
+		* Receive command from application that file service must be aborted
+		*/
+		void AbortL();		
+
+	private:
+		CVRNewFileService();
+		
+	private: // data
+		/*
+		* Pointer to file service observer
+		*/
+		MNewFileServiceObserver* iObserver;
+		
+		/*
+		* If file service has already completed
+		*/
+		TBool iCompleted;
+
+        /*
+        * Are we recording to file handle or filenamearray
+        */		
+		TBool iFileHandleUsed;
+	
+	    /*
+	    * Contains name of the target file. Not owned.
+	    */
+		CDesCArray* iFilenameArray;
+		
+		/*
+		* Used for asynchronic operations
+		*/
+		CActiveSchedulerWait iActiveWait;
+		
+	};
+
+#endif // __CVNEWFILESERVICE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRSettingItem.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2003, 2004 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:  Setting item for default image/video name
+*
+*/
+
+
+// INCLUDE FILES
+#include "CVRSettingItem.h"
+#include <aknViewAppUi.h>
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CCVRSettingItem::CCVRSettingItem
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCVRSettingItem::CCVRSettingItem( TInt aIdentifier,TDes& aText )
+: CAknTextSettingItem( aIdentifier, aText )
+    {
+    }
+
+
+// Destructor
+CCVRSettingItem::~CCVRSettingItem()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCVRSettingItem::EditItemL
+// This launches the setting page for text editing. Overridden here
+// to use CCVRSettingPage instead of CAknTextSettingPage.
+// ---------------------------------------------------------------------------
+//
+void CCVRSettingItem::EditItemL( TBool /* aCalledFromMenu */ )
+    {
+    }
+
+
+	/**
+	*  Access for re-implementors to the internal text 
+	*
+	* @return	reference to a TPtr holding the internal text
+	*/
+	 TPtr& CCVRSettingItem::InternalTextPtr()
+	 	{
+	 	  return CAknTextSettingItem::InternalTextPtr();
+	 	}
+
+	/**
+	*  Access for re-implementors to the external text
+	*
+	* @return	TPtrC pointing to the external text
+	*/
+	TPtrC CCVRSettingItem::ExternalText()
+		{
+			return CAknTextSettingItem::ExternalText();
+		}
+
+	/**
+	* Allows re-implementors to set the external text
+	* No change of ownership is implied.
+	*
+	* @param	 a reference to the external text
+	*
+	*/
+	void CCVRSettingItem:: SetExternalText( TDesC& aNewExternalText )
+		{
+			CAknTextSettingItem::SetExternalText(aNewExternalText);
+		}
+
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRSettingItem.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2003, 2004 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:  Setting item for memory settings
+*
+*/
+
+
+#ifndef CCVRSETTINGITEM_H
+#define CCVRSETTINGITEM_H
+
+// INCLUDES
+#include <akntextsettingpage.h>
+#include <aknsettingitemlist.h>
+
+// CLASS DECLARATION
+
+/**
+* Setting item for name base setting
+*/
+class CCVRSettingItem : public CAknTextSettingItem
+    {
+    public: // Constructors and destructor
+        /**
+        * C++ constructor
+        * @param aIdentifier identifier ID
+        * @param aText text related to identifier
+        * @since 3.1
+        */
+        CCVRSettingItem( TInt aIdentifier, TDes& aText );
+        
+	/**
+	*  Access for re-implementors to the internal text 
+	*
+	* @return	reference to a TPtr holding the internal text
+	*/
+	TPtr& InternalTextPtr();
+
+	/**
+	*  Access for re-implementors to the external text
+	*
+	* @return	TPtrC pointing to the external text
+	*/
+	TPtrC ExternalText();
+
+	/**
+	* Allows re-implementors to set the external text
+	* No change of ownership is implied.
+	*
+	* @param	 a reference to the external text
+	*
+	*/
+	void SetExternalText( TDesC& aNewExternalText );
+        /**
+        * Destructor
+        */
+        virtual ~CCVRSettingItem();
+
+    private: // Functions from base classes
+        /**
+        * From CAknTextSettingItem.
+        * This launches the setting page for text editing. Overridden here
+        * to use CCVRSettingPage instead of CAknTextSettingPage.
+        *
+        * @param        aCalledFromMenu - ignored in this class
+        */
+        void EditItemL( TBool aCalledFromMenu );
+
+    };
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRSettingsDialog.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2002 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 defines a settings dialog for the Voice Recorder application.
+*
+*/
+
+
+#include <bldvariant.hrh>
+
+#include <AknLists.h>
+#include <aknform.h>
+#include <featmgr.h>
+#include "CVRSettingsDialog.h"
+#include "VoiceRecorder.hrh"
+#include <VoiceRecorder.rsg>
+#include "VRConsts.h"
+#include "VRUtils.h"
+
+CVRSettingsDialog::~CVRSettingsDialog()
+    {
+	iSettingItemArray.ResetAndDestroy();
+    }
+
+CVRSettingsDialog* CVRSettingsDialog::NewL()
+    {
+    CVRSettingsDialog* self = new( ELeave ) CVRSettingsDialog;
+	CleanupStack::PushL( self );
+	self->ConstructL( R_VR_SETTINGS_MENUBAR );
+	CleanupStack::Pop();
+    return self;
+    }
+
+TBool CVRSettingsDialog::OkToExitL( TInt aButtonId )
+	{
+	if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        return EFalse;
+        }
+
+	TInt settingItemCount( iSettingItemArray.Count() );
+
+	for ( TInt i( 0 ); i < settingItemCount; i++ )
+		{
+		iSettingItemArray.At( i )->StoreL();
+		}
+
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+        // Save the quality setting	
+	    VRUtils::SetQualityL( iQuality );
+        }
+
+	return ETrue;
+	}
+
+void CVRSettingsDialog::PreLayoutDynInitL()
+	{
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+	    iQuality = VRUtils::QualityL();
+        }
+
+	CAknSettingStyleListBox* listBox = static_cast< CAknSettingStyleListBox* >
+										( Control( EVRSettingsListboxId ) );
+	User::LeaveIfNull( listBox );
+
+	CAknSettingItem* settingItem;
+	HBufC* itemTitle = NULL;
+	TInt id( 0 );
+
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+    	// Add quality setting
+    	settingItem = new( ELeave ) CAknBinaryPopupSettingItem( 0, ( TInt& ) iQuality );
+    	CleanupStack::PushL( settingItem );
+
+    	itemTitle = iCoeEnv->AllocReadResourceLC( R_QTN_VOREC_SET_QUALITY );
+    	settingItem->ConstructL( EFalse, id, *itemTitle, NULL,
+    	                     R_VR_SETTINGS_DEFAULT_SPEAKER_PAGE, EAknCtPopupField, NULL,
+    						 R_VR_SETTINGS_QUALITY_TEXTS );
+    	CleanupStack::PopAndDestroy();		// itemTitle
+
+    	// Add quality item to the settings array
+    	iSettingItemArray.AppendL( settingItem );
+    	CleanupStack::Pop();	// settingItem
+    	id++;
+        }
+        
+	CTextListBoxModel* model = listBox->Model();
+	model->SetItemTextArray( &iSettingItemArray );
+	// Ownership retained by us
+	model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+	iSettingItemArray.RecalculateVisibleIndicesL();
+	listBox->CreateScrollBarFrameL( ETrue );
+	listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+						CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+	listBox->HandleItemAdditionL();
+	listBox->SetListBoxObserver( this );
+	listBox->UpdateScrollBarsL();
+
+	}
+
+void CVRSettingsDialog::HandleListBoxEventL( CEikListBox* aListBox,
+											 TListBoxEvent aEventType )
+	{
+	TInt index( aListBox->CurrentItemIndex() );
+		if ( index >=0 )	// index is -1 if there are no items in the list
+			{
+			iSettingItemArray.At( index )->EditItemL(
+				aEventType == EEventEditingStarted );
+			aListBox->DrawItem( index );
+			}
+	}
+
+void CVRSettingsDialog::ProcessCommandL( TInt aCommandId )
+	{
+	HideMenu();
+	switch ( aCommandId )
+		{
+		case ECmdChange:
+			{
+			CEikListBox* listBox = static_cast< CEikListBox* >( Control( EVRSettingsListboxId ) );
+			HandleListBoxEventL( listBox, EEventEditingStarted );
+			break;
+			}
+		case EEikCmdExit:
+			{
+			TryExitL( EAknSoftkeyBack );
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}
+		default:
+			{
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::DynInitMenuPaneL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSettingsDialog::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+	{
+
+	switch ( aResourceId )
+		{
+		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; 
+			}
+		default:
+			{
+			break;
+			}
+		}
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRSettingsDialog.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2002 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 defines a settings dialog for the Voice Recorder application.
+*
+*/
+
+
+#ifndef __CVRSETTINGSDIALOG_H__
+#define __CVRSETTINGSDIALOG_H__
+
+//	INCLUDES
+#include <AknDialog.h>
+#include <eiklbo.h>
+#include "VRUtils.h"
+
+#include <aknsettingitemlist.h>
+
+// CLASS DECLARATION
+
+/**
+* This class defines a settings dialog for the Voice Recorder application.
+*/
+class CVRSettingsDialog
+	: public CAknDialog,
+	  public MEikListBoxObserver
+	{
+
+	public:  // Constructors and destructor
+		
+		/**
+		* Destructor.
+		*/
+		~CVRSettingsDialog();
+
+		/**
+		* Two-phased constructor.
+		*/
+		static CVRSettingsDialog* NewL();
+		
+	private: // Constructors
+
+		/**
+        * Default constructor. Inlined to save a few bytes.
+		* Parameters to array: granularity, isnumered, 1st ordinal
+        */
+		inline CVRSettingsDialog() : iSettingItemArray( 1, EFalse, 1 ) {}
+	
+	protected: // from CEikDialog
+
+		/**
+		* Tests if it is OK to exit the dialog.
+		* @param aButtonId The ID of the button that was activated.
+		* @return ETrue to validate and exit the dialog,
+		*         EFalse to keep the dialog active. 
+		*/
+		TBool OkToExitL( TInt aButtonId );
+
+		/**
+		* Pre-layout dialog initialisation.
+		*/
+		void PreLayoutDynInitL();
+
+		void ProcessCommandL( TInt aCommandId );
+		
+        void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+	public: // From MEikListBoxObserver
+
+		/**
+		* Handles list box events.
+		* This is invoked by CEikListBox to notify the observer of
+		* list box events.
+		* @param aListBox The originating list box.
+		* @param aEventType A code for the event.
+		*/
+		void HandleListBoxEventL( CEikListBox* aListBox,
+								  TListBoxEvent aEventType );
+
+   private:    // data
+
+		/**
+		* Array of setting items contained in the listbox. Owned.
+		*/
+		CAknSettingItemArray iSettingItemArray;
+		
+		TVRQuality iQuality;
+	};
+
+#endif	// __CVRSETTINGSDIALOG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,387 @@
+/*
+* 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 defines a settings dialog for the Voice Recorder application.
+*
+*/
+
+#include <bldvariant.hrh>
+
+#include <aknlists.h>
+#include <featmgr.h>
+#include "CVRSettingsDialogMMCSupported.h"
+#include "voicerecorder.hrh"
+#include <voicerecorder.rsg>
+#include "VRConsts.h"
+#include "VRUtils.h"
+#include <hlplch.h>
+
+#include <CAknMemorySelectionSettingItem.h>
+#include <aknnotewrappers.h>
+#include <StringLoader.h>
+#include <AknCommonDialogsDynMem.h>
+
+#ifdef RD_MULTIPLE_DRIVE
+#include <AknCommonDialogsDynMem.h>
+#include <driveinfo.h>
+#include <CAknMemorySelectionDialogMultiDrive.h>
+#include <CAknMemorySelectionSettingItemMultiDrive.h>
+#endif
+
+// ListBox item index
+enum TListItemIndex
+    {
+    EListItemQualityIndex = 0,
+    ElistItemMemoStoreIndex,
+    };
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::~CVRSettingsDialog
+// 
+// ---------------------------------------------------------------------------
+//
+CVRSettingsDialog::~CVRSettingsDialog()
+    {
+	iSettingItemArray.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::CVRSettingsDialog
+// 
+// ---------------------------------------------------------------------------
+//
+CVRSettingsDialog* CVRSettingsDialog::NewL()
+    {
+    CVRSettingsDialog* self = new( ELeave ) CVRSettingsDialog;
+	CleanupStack::PushL( self );
+	self->ConstructL( R_VR_SETTINGS_MENUBAR );
+	CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::OkToExitL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRSettingsDialog::OkToExitL( TInt aButtonId )
+	{
+	if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        return EFalse;
+        }
+	
+	// If want to exit settings afterwards
+	TBool exitAfter( ETrue );
+	
+	// MSK button pressed in settings view
+	if ( aButtonId == ECmdMSK )
+		{
+		// A new key event is simulated
+		TKeyEvent key;
+        key.iRepeats = 0;
+        key.iCode = EKeyEnter;
+        key.iModifiers = 0;
+        CEikonEnv::Static()->SimulateKeyEventL( key, EEventKey );
+		
+
+		exitAfter = EFalse;	// No Exit
+		}
+	// Do not store settings anymore when exit
+	return exitAfter;
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::PreLayoutDynInitL
+// Intialize layout
+// ---------------------------------------------------------------------------
+//
+void CVRSettingsDialog::PreLayoutDynInitL()
+	{
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+	    iQuality = VRUtils::QualityL();
+        }
+    // Convert the internal memory enumeration to CFD enumeration
+#ifndef RD_MULTIPLE_DRIVE 
+	if ( VRUtils::MemoStoreL() == EMemoStorePhoneMemory )
+		{
+		iMemoStore = CAknMemorySelectionSettingPage::EPhoneMemory;
+		}
+	else
+		{
+		iMemoStore = CAknMemorySelectionSettingPage::EMemoryCard;
+		}
+    
+    // for multiple drives
+#else
+    iDrive = (TDriveNumber)VRUtils::MemoDriveL();
+    
+#endif
+
+	CAknSettingStyleListBox* listBox = static_cast< CAknSettingStyleListBox* >
+										( Control( EVRSettingsListboxId ) );
+	User::LeaveIfNull( listBox );
+    CAknSettingItem* settingItem;
+  
+    HBufC* itemTitle;
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+    	// Add quality setting
+#ifdef  __AAC_ENCODER_PLUGIN    	
+    	settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem ( 0, ( TInt& ) iQuality );
+
+#else
+        settingItem = new( ELeave ) CAknBinaryPopupSettingItem ( 0, ( TInt& ) iQuality );
+#endif
+
+    	CleanupStack::PushL( settingItem );
+
+    	itemTitle = iCoeEnv->AllocReadResourceLC( R_QTN_VOREC_SET_QUALITY );
+    	settingItem->ConstructL( EFalse, EListItemQualityIndex, *itemTitle, NULL,
+    	                     R_VR_SETTINGS_DEFAULT_SPEAKER_PAGE, EAknCtPopupField, NULL,
+    						 R_VR_SETTINGS_QUALITY_TEXTS );
+    	CleanupStack::PopAndDestroy();		// itemTitle
+
+    	// Add quality item to the settings array
+    	iSettingItemArray.AppendL( settingItem ); 
+    	CleanupStack::Pop();	// settingItem
+        }
+
+    if ( VRUtils::MultipleMassStorageAvailable() )
+    	{
+    	// Create the memo store item
+    	// Set memo store item's title
+
+    	itemTitle = iCoeEnv->AllocReadResourceLC( R_QTN_VOREC_SET_STORE );
+#ifndef RD_MULTIPLE_DRIVE
+	settingItem = new( ELeave ) CAknMemorySelectionSettingItem( 0, iMemoStore );
+	CleanupStack::PushL( settingItem ); 
+    settingItem->ConstructL( EFalse, id, *itemTitle, NULL,
+       R_VOREC_MEMORY_SELECTION_DIALOG, EAknCtPopupSettingList );
+	// Add memo store item to the settings array
+	iSettingItemArray.AppendL( settingItem );
+	id++;
+	CleanupStack::Pop();	// settingItem
+
+#else    //multiple drives
+        settingItem = new( ELeave ) CAknMemorySelectionSettingItemMultiDrive(0, iDrive );
+        CleanupStack::PushL( settingItem );
+        TInt includedMedias = AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage |
+                                 AknCommonDialogsDynMem::EMemoryTypeMMCExternal;
+        static_cast< CAknMemorySelectionSettingItemMultiDrive *> ( settingItem )->SetIncludedMediasL( includedMedias );
+        // Set memo store item's title
+        settingItem->ConstructL( EFalse, ElistItemMemoStoreIndex, *itemTitle, NULL, 0, EAknSetListBox );
+        // Add memo store item to the settings array
+        iSettingItemArray.AppendL( settingItem );
+        CleanupStack::Pop();	// settingItem
+ 
+#endif
+
+		CleanupStack::PopAndDestroy();	// itemTitle
+	}
+	CTextListBoxModel* model = listBox->Model();
+	model->SetItemTextArray( &iSettingItemArray );
+	// Ownership retained by us
+	model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+	iSettingItemArray.RecalculateVisibleIndicesL();
+	listBox->CreateScrollBarFrameL( ETrue );
+	listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+						CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+	listBox->HandleItemAdditionL();
+	listBox->SetListBoxObserver( this );
+	listBox->UpdateScrollBarsL();
+
+	}
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::HandleListBoxEventL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSettingsDialog::HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType)
+	{
+
+	switch ( aEventType )
+		{
+#ifdef SINGLE_CLICK_INCLUDED
+        case EEventItemSingleClicked:
+#endif
+		case EEventItemDoubleClicked: // Pointer events (highlighted item before pressing) 
+		case EEventEnterKeyPressed:	// Normal button presses
+		case EEventEditingStarted: // From ProcessCommand->ECmdChange
+			{
+			TInt index( aListBox->CurrentItemIndex() );
+			TInt driveDefaultMassStorage = VRUtils::DefaultMemoDriveL();
+			TInt driveRemovableMassStorage = VRUtils::GetRemovableMassStorageL();
+			
+			if ( index >=0 )	// index is -1 if there are no items in the list
+				{
+			    if(index == ElistItemMemoStoreIndex && 
+			        !VRUtils::DriveValid(driveDefaultMassStorage) && 
+			            !VRUtils::DriveValid(driveRemovableMassStorage) )
+			        {
+			        break;
+			        }
+			    iSettingItemArray.At( index )->EditItemL( 
+				aEventType == EEventEditingStarted );
+			    aListBox->DrawItem( index );
+				}
+			StoreAllSettingsL();	
+			break;
+			}
+		default:
+			{
+			break;	
+			}
+		}
+
+	}
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::ProcessCommandL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSettingsDialog::ProcessCommandL( TInt aCommandId )
+	{
+	HideMenu();
+	switch ( aCommandId )
+		{
+		case ECmdChange:
+			{
+			CEikListBox* listBox = static_cast< CEikListBox* >( Control( EVRSettingsListboxId ) );
+			HandleListBoxEventL( listBox, EEventEditingStarted );
+			StoreAllSettingsL();
+			break;
+			}
+		case EEikCmdExit:
+			{
+			TryExitL( EEikCmdExit );
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}
+		default:
+			{
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::StoreAllSettingsL
+// Stores values in settings list to permanent storage
+// ---------------------------------------------------------------------------
+//
+void CVRSettingsDialog::StoreAllSettingsL()
+    {
+
+    TInt settingItemCount( iSettingItemArray.Count() );
+
+	for ( TInt i( 0 ); i < settingItemCount; i++ )
+		{
+		iSettingItemArray.At( i )->StoreL();
+		}
+
+#ifndef RD_MULTIPLE_DRIVE    
+	if ( iMemoStore == CAknMemorySelectionSettingPage::EPhoneMemory )
+		{
+		VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+		}
+	else
+		{
+		// check if MMC is read-only
+		TVRDriveInfo mmcInfo;
+		VRUtils::GetMMCInfo( mmcInfo );
+
+		if ( mmcInfo.iDriveReadOnly )
+			{
+			HBufC* noteText = iCoeEnv->AllocReadResourceLC(
+													 R_QTN_MEMC_READONLY );
+			CAknInformationNote* infoNote =
+								new( ELeave ) CAknInformationNote( ETrue );
+			infoNote->ExecuteLD( *noteText );
+			CleanupStack::PopAndDestroy();	// noteText
+			VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+			}
+		else
+			{
+			VRUtils::SetMemoStoreL( EMemoStoreMMC );
+			}
+		}
+
+    // for multiple drives
+#else
+     TUint status( 0 );
+	 TInt defaultDrive = VRUtils::DefaultMemoDriveL();
+	 if (VRUtils::MemoDriveL() != defaultDrive)
+	 	{
+ 	    VRUtils::GetDriveInfo(iDrive, status);
+     	// check if drive status is ok 
+	 	if ( status & DriveInfo::EDriveReadOnly )
+			{
+			HBufC* noteText = iCoeEnv->AllocReadResourceLC(R_QTN_MEMC_READONLY );
+			CAknInformationNote* infoNote =	new( ELeave ) CAknInformationNote( ETrue );
+			infoNote->ExecuteLD( *noteText );
+			CleanupStack::PopAndDestroy();	// noteText
+        
+        	// use default device drive to save files
+        	iDrive = (TDriveNumber)defaultDrive;
+  			}
+	 	}
+    if(iDrive == defaultDrive || iDrive == VRUtils::GetRemovableMassStorageL())
+        {
+        VRUtils::SetMemoDriveL( iDrive );
+        }
+#endif 
+     
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+        // Save the quality setting	
+	    VRUtils::SetQualityL( iQuality );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::DynInitMenuPaneL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSettingsDialog::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+	{
+
+	switch ( aResourceId )
+		{
+		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; 
+			}
+		default:
+			{
+			break;
+			}
+		}
+	}
+
+
+// End of file    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRSettingsDialogMMCSupported.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2002 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 defines a settings dialog for the Voice Recorder application.
+*
+*/
+
+
+#ifndef __CVRSETTINGSDIALOG_H__
+#define __CVRSETTINGSDIALOG_H__
+
+//	INCLUDES
+
+#include <AknDialog.h>
+#include <eiklbo.h>
+#include "VRUtils.h"
+#include "CVRSettingItem.h"
+
+
+#include <CAknMemorySelectionDialog.h>
+#include <aknsettingitemlist.h>
+
+// CLASS DECLARATION
+
+/**
+* This class defines a settings dialog for the Voice Recorder application.
+*/
+class CVRSettingsDialog
+	: public CAknDialog,
+	  public MEikListBoxObserver
+	{
+
+	public:  // Constructors and destructor
+		
+		/**
+		* Destructor.
+		*/
+		~CVRSettingsDialog();
+
+		/**
+		* Two-phased constructor.
+		*/
+		static CVRSettingsDialog* NewL();
+		
+	private: // Constructors
+
+		/**
+        * Default constructor. Inlined to save a few bytes.
+		* Parameters to array: granularity, isnumered, 1st ordinal
+        */
+
+		inline CVRSettingsDialog() : iSettingItemArray( 1, EFalse, 1 ){}
+	
+	protected: // from CEikDialog
+
+		/**
+		* Tests if it is OK to exit the dialog.
+		* @param aButtonId The ID of the button that was activated.
+		* @return ETrue to validate and exit the dialog,
+		*         EFalse to keep the dialog active. 
+		*/
+		TBool OkToExitL( TInt aButtonId );
+
+		/**
+		* Pre-layout dialog initialisation.
+		*/
+		void PreLayoutDynInitL();
+
+		void ProcessCommandL( TInt aCommandId );
+		
+        void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+	public: // From MEikListBoxObserver
+
+
+		/**
+		* Handles list box events.
+		* This is invoked by CEikListBox to notify the observer of
+		* list box events.
+		* @param aListBox The originating list box.
+		* @param aEventType A code for the event.
+		*/
+		void HandleListBoxEventL( CEikListBox* aListBox,
+								  TListBoxEvent aEventType );
+								         
+	private: //new methods		
+		
+		/**
+		* Stores all settings to Central Repository when called
+		*/
+		void StoreAllSettingsL();
+    
+   	private:    // data
+
+		/**
+		* Array of setting items contained in the listbox. Owned.
+		*/
+
+		CAknSettingItemArray iSettingItemArray;
+
+ 		/**
+		* Selected memo store
+		*/
+		CAknMemorySelectionDialog::TMemory iMemoStore;
+
+        /**
+        * Selected memo quality
+        */		
+		TVRQuality iQuality;
+		
+        /**
+        * Multiple drives
+        */		
+        TDriveNumber iDrive;		
+
+
+	};
+
+#endif	// __CVRSETTINGSDIALOG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/MVREmbeddedObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2002 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 observer class used to notify objects that embedded recording
+*	  was completed
+*
+*/
+
+
+#ifndef MVREMBEDDEDOBSERVER_H
+#define MVREMBEDDEDOBSERVER_H
+
+// INCLUDES
+#include <w32std.h>
+
+// CLASS DECLARATION
+/**
+* An observer class used to notify objects that embedded recording
+* was completed
+*/
+class MVREmbeddedObserver 
+    {
+
+    public: // new methods
+
+		/**
+		* This function is called when application wants to notify
+		* the observer that embedded clip was recorded
+		* @param aName The name of the file that was recorded
+		*              or EEventKeyDown
+		* @return Can we close the application
+		*/
+		virtual TBool FileCompleteL( const TDesC& aName ) = 0;
+		
+		/**
+		* This function may be used to inform server to abort transfer.
+		* If operation already has completed, nothing is done.
+		*/
+		virtual void AbortL() = 0;
+    };
+
+#endif // MVREMBEDDEDOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/MVRUSBEventObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -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 <e32def.h>
+#include <bldvariant.hrh>
+
+// CLASS DECLARATION
+/**
+*  MVRUSBEventObserver
+*/
+class MVRUSBEventObserver
+    {
+    public:  // Constructors and destructor		
+    
+    virtual void HandleUSBEventL() = 0;
+
+	};
+
+#endif      // __MVRUSBEVENTOBSERVER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/BMARM/VOICERECORDERRECVIEWU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	NewLC__10CVRRecViewii @ 1 NONAME R3UNUSED ; CVRRecView::NewLC(int, int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/BMARM/VOICERECORDERUTILSU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,15 @@
+EXPORTS
+	__9TVRRenameR3RFs @ 1 NONAME R3UNUSED ; TVRRename::TVRRename(RFs &)
+	GetMMCInfo__7VRUtilsR12TVRDriveInfo @ 2 NONAME R3UNUSED ; VRUtils::GetMMCInfo(TVRDriveInfo &)
+	GetNewNameL__9TVRRenameRC7TDesC16R6TDes16i @ 3 NONAME ; TVRRename::GetNewNameL(TDesC16 const &, TDes16 &, int)
+	MemoStoreDirectoryL__7VRUtils @ 4 NONAME R3UNUSED ; VRUtils::MemoStoreDirectoryL(void)
+	MemoStoreL__7VRUtils @ 5 NONAME R3UNUSED ; VRUtils::MemoStoreL(void)
+	NewL__17CVRFileRecognizer @ 6 NONAME R3UNUSED ; CVRFileRecognizer::NewL(void)
+	RecognizeL__17CVRFileRecognizerRC7TDesC16 @ 7 NONAME R3UNUSED ; CVRFileRecognizer::RecognizeL(TDesC16 const &)
+	RenameL__9TVRRenameR6TDes16i @ 8 NONAME R3UNUSED ; TVRRename::RenameL(TDes16 &, int)
+	SetDefaultSpeakerL__7VRUtils10TVRSpeaker @ 9 NONAME R3UNUSED ; VRUtils::SetDefaultSpeakerL(TVRSpeaker)
+	SetMemoStoreL__7VRUtils12TVRMemoStore @ 10 NONAME R3UNUSED ; VRUtils::SetMemoStoreL(TVRMemoStore)
+	"_._17CVRFileRecognizer" @ 11 NONAME R3UNUSED ; CVRFileRecognizer::~CVRFileRecognizer(void)
+	"_._9TVRRename" @ 12 NONAME R3UNUSED ; TVRRename::~TVRRename(void)
+	DefaultSpeakerL__7VRUtils @ 13 NONAME R3UNUSED ; VRUtils::DefaultSpeakerL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/BWINS/NewServiceU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+	??0CNewFileServiceBase@@IAE@XZ @ 1 NONAME ; CNewFileServiceBase::CNewFileServiceBase(void)
+	??1CNewFileServiceBase@@UAE@XZ @ 2 NONAME ; CNewFileServiceBase::~CNewFileServiceBase(void)
+	?GenericParams@CNewFileServiceBase@@IAEPAVCAiwGenericParamList@@XZ @ 3 NONAME ; class CAiwGenericParamList * CNewFileServiceBase::GenericParams(void)
+	?HandleCompletedNewServiceL@CNewFileServiceBase@@MAEXH@Z @ 4 NONAME ; void CNewFileServiceBase::HandleCompletedNewServiceL(int)
+	?NewClientL@NewFileServiceFactory@@SAPAVCNewFileServiceClient@@XZ @ 5 NONAME ; class CNewFileServiceClient * NewFileServiceFactory::NewClientL(void)
+	?ServiceL@CNewFileServiceBase@@MAEXABVRMessage2@@@Z @ 6 NONAME ; void CNewFileServiceBase::ServiceL(class RMessage2 const &)
+	?GetErrorCode@CNewFileServiceBase@@QAEHXZ @ 7 NONAME ; int CNewFileServiceBase::GetErrorCode(void)
+	?SetErrorCode@CNewFileServiceBase@@QAEXH@Z @ 8 NONAME ; void CNewFileServiceBase::SetErrorCode(int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/BWINS/VOICERECORDERRECVIEWU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+	?MrccatoCommand@CVRRemConObserver@@MAEXW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 1 NONAME ; void CVRRemConObserver::MrccatoCommand(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
+	?NewLC@CVRRecView@@SAPAV1@HH@Z @ 2 NONAME ; class CVRRecView * CVRRecView::NewLC(int, int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/BWINS/VoiceRecorderUtilsU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,27 @@
+EXPORTS
+	??0TVRRename@@QAE@AAVRFs@@@Z @ 1 NONAME ; TVRRename::TVRRename(class RFs &)
+	?AACAudioModeL@VRUtils@@SAHXZ @ 2 NONAME ; int VRUtils::AACAudioModeL(void)
+	?AACBitrateL@VRUtils@@SAIXZ @ 3 NONAME ; unsigned int VRUtils::AACBitrateL(void)
+	?AACSamplerateL@VRUtils@@SAHXZ @ 4 NONAME ; int VRUtils::AACSamplerateL(void)
+	?AMRBitrateL@VRUtils@@SAIXZ @ 5 NONAME ; unsigned int VRUtils::AMRBitrateL(void)
+	?DefaultSpeakerL@VRUtils@@SA?AW4TVRSpeaker@@XZ @ 6 NONAME ; enum TVRSpeaker VRUtils::DefaultSpeakerL(void)
+	?DefaultVolumeL@VRUtils@@SAHW4TVRSpeaker@@@Z @ 7 NONAME ; int VRUtils::DefaultVolumeL(enum TVRSpeaker)
+	?FeatureEnabled@VRUtils@@SAHW4TVRFeature@@@Z @ 8 NONAME ; int VRUtils::FeatureEnabled(enum TVRFeature)
+	?GenerateUniqueFilenameL@VRUtils@@SAXAAVRFs@@AAV?$TBuf@$0BAA@@@W4TVRFiletype@@@Z @ 9 NONAME ; void VRUtils::GenerateUniqueFilenameL(class RFs &, class TBuf<256> &, enum TVRFiletype)
+	?GetMMCInfo@VRUtils@@SAXAAVTVRDriveInfo@@@Z @ 10 NONAME ; void VRUtils::GetMMCInfo(class TVRDriveInfo &)
+	?GetNewNameL@TVRRename@@QAEHABVTDesC16@@AAVTDes16@@H@Z @ 11 NONAME ; int TVRRename::GetNewNameL(class TDesC16 const &, class TDes16 &, int)
+	?MaxLengthL@VRUtils@@SAHXZ @ 12 NONAME ; int VRUtils::MaxLengthL(void)
+	?MemoCount@VRUtils@@SAHXZ @ 13 NONAME ; int VRUtils::MemoCount(void)
+	?MemoStoreDirectoryL@VRUtils@@SAXAAVTDes16@@@Z @ 14 NONAME ; void VRUtils::MemoStoreDirectoryL(class TDes16 &)
+	?MemoStoreL@VRUtils@@SA?AW4TVRMemoStore@@XZ @ 15 NONAME ; enum TVRMemoStore VRUtils::MemoStoreL(void)
+	?QualityL@VRUtils@@SA?AW4TVRQuality@@XZ @ 16 NONAME ; enum TVRQuality VRUtils::QualityL(void)
+	?RenameL@TVRRename@@QAEHAAVRFile@@H@Z @ 17 NONAME ; int TVRRename::RenameL(class RFile &, int)
+	?RenameL@TVRRename@@QAEHAAVTDes16@@H@Z @ 18 NONAME ; int TVRRename::RenameL(class TDes16 &, int)
+	?SetDefaultSpeakerL@VRUtils@@SAXW4TVRSpeaker@@@Z @ 19 NONAME ; void VRUtils::SetDefaultSpeakerL(enum TVRSpeaker)
+	?SetDefaultVolumeL@VRUtils@@SAXW4TVRSpeaker@@H@Z @ 20 NONAME ; void VRUtils::SetDefaultVolumeL(enum TVRSpeaker, int)
+	?SetMemoCount@VRUtils@@SAXH@Z @ 21 NONAME ; void VRUtils::SetMemoCount(int)
+	?SetMemoStoreL@VRUtils@@SAXW4TVRMemoStore@@@Z @ 22 NONAME ; void VRUtils::SetMemoStoreL(enum TVRMemoStore)
+	?SetQualityL@VRUtils@@SAXW4TVRQuality@@@Z @ 23 NONAME ; void VRUtils::SetQualityL(enum TVRQuality)
+	?ShowMemoryFullConfirmationQuery@VRUtils@@SAXH@Z @ 24 NONAME ; void VRUtils::ShowMemoryFullConfirmationQuery(int)
+	?UnsupportedCallTypeOngoing@VRUtils@@SAHH@Z @ 25 NONAME ; int VRUtils::UnsupportedCallTypeOngoing(int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/BWINS/VoiceRecorderUtilsUU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,36 @@
+EXPORTS
+	??0TVRRename@@QAE@AAVRFs@@@Z @ 1 NONAME ; TVRRename::TVRRename(class RFs &)
+	?AACAudioModeL@VRUtils@@SAHXZ @ 2 NONAME ; int VRUtils::AACAudioModeL(void)
+	?AACBitrateL@VRUtils@@SAIXZ @ 3 NONAME ; unsigned int VRUtils::AACBitrateL(void)
+	?AACSamplerateL@VRUtils@@SAHXZ @ 4 NONAME ; int VRUtils::AACSamplerateL(void)
+	?AMRBitrateL@VRUtils@@SAIXZ @ 5 NONAME ; unsigned int VRUtils::AMRBitrateL(void)
+	?DefaultMemoDriveL@VRUtils@@SAHXZ @ 6 NONAME ; int VRUtils::DefaultMemoDriveL(void)
+	?DefaultSpeakerL@VRUtils@@SA?AW4TVRSpeaker@@XZ @ 7 NONAME ; enum TVRSpeaker VRUtils::DefaultSpeakerL(void)
+	?DefaultVolumeL@VRUtils@@SAHW4TVRSpeaker@@@Z @ 8 NONAME ; int VRUtils::DefaultVolumeL(enum TVRSpeaker)
+	?FeatureEnabled@VRUtils@@SAHW4TVRFeature@@@Z @ 9 NONAME ; int VRUtils::FeatureEnabled(enum TVRFeature)
+	?GenerateUniqueFilenameL@VRUtils@@SAXAAVRFs@@AAV?$TBuf@$0BAA@@@W4TVRFiletype@@@Z @ 10 NONAME ; void VRUtils::GenerateUniqueFilenameL(class RFs &, class TBuf<256> &, enum TVRFiletype)
+	?GetMMCInfo@VRUtils@@SAXAAVTVRDriveInfo@@@Z @ 11 NONAME ; void VRUtils::GetMMCInfo(class TVRDriveInfo &)
+	?GetNewNameL@TVRRename@@QAEHABVTDesC16@@AAVTDes16@@H@Z @ 12 NONAME ; int TVRRename::GetNewNameL(class TDesC16 const &, class TDes16 &, int)
+	?MaxLengthL@VRUtils@@SAHXZ @ 13 NONAME ; int VRUtils::MaxLengthL(void)
+	?MemoCount@VRUtils@@SAHXZ @ 14 NONAME ; int VRUtils::MemoCount(void)
+	?MemoDriveL@VRUtils@@SAHXZ @ 15 NONAME ; int VRUtils::MemoDriveL(void)
+	?MemoStoreDirectoryL@VRUtils@@SAXAAVTDes16@@@Z @ 16 NONAME ; void VRUtils::MemoStoreDirectoryL(class TDes16 &)
+	?MemoStoreL@VRUtils@@SA?AW4TVRMemoStore@@XZ @ 17 NONAME ; enum TVRMemoStore VRUtils::MemoStoreL(void)
+	?QualityL@VRUtils@@SA?AW4TVRQuality@@XZ @ 18 NONAME ; enum TVRQuality VRUtils::QualityL(void)
+	?RenameL@TVRRename@@QAEHAAVRFile@@H@Z @ 19 NONAME ; int TVRRename::RenameL(class RFile &, int)
+	?RenameL@TVRRename@@QAEHAAVTDes16@@H@Z @ 20 NONAME ; int TVRRename::RenameL(class TDes16 &, int)
+	?SetDefaultSpeakerL@VRUtils@@SAXW4TVRSpeaker@@@Z @ 21 NONAME ; void VRUtils::SetDefaultSpeakerL(enum TVRSpeaker)
+	?SetDefaultVolumeL@VRUtils@@SAXW4TVRSpeaker@@H@Z @ 22 NONAME ; void VRUtils::SetDefaultVolumeL(enum TVRSpeaker, int)
+	?SetMemoCount@VRUtils@@SAXH@Z @ 23 NONAME ; void VRUtils::SetMemoCount(int)
+	?SetMemoDriveL@VRUtils@@SAXW4TDriveNumber@@@Z @ 24 NONAME ; void VRUtils::SetMemoDriveL(enum TDriveNumber)
+	?SetMemoStoreL@VRUtils@@SAXW4TVRMemoStore@@@Z @ 25 NONAME ; void VRUtils::SetMemoStoreL(enum TVRMemoStore)
+	?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@@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)
+	?MultipleMassStorageAvailable@VRUtils@@SAHXZ @ 33 NONAME ; int VRUtils::MultipleMassStorageAvailable(void)
+	?GetRemovableMassStorageL@VRUtils@@SAHXZ @ 34 NONAME ; int VRUtils::GetRemovableMassStorageL(void)
+
Binary file voicerecorder/Conf/voicerecorder.confml has changed
Binary file voicerecorder/Conf/voicerecorder_101F87A3.crml has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/EABI/NewServiceU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,21 @@
+EXPORTS
+	_ZN19CNewFileServiceBase13GenericParamsEv @ 1 NONAME
+	_ZN19CNewFileServiceBase26HandleCompletedNewServiceLEi @ 2 NONAME
+	_ZN19CNewFileServiceBase8ServiceLERK9RMessage2 @ 3 NONAME
+	_ZN19CNewFileServiceBaseC2Ev @ 4 NONAME
+	_ZN19CNewFileServiceBaseD0Ev @ 5 NONAME
+	_ZN19CNewFileServiceBaseD1Ev @ 6 NONAME
+	_ZN19CNewFileServiceBaseD2Ev @ 7 NONAME
+	_ZN21NewFileServiceFactory10NewClientLEv @ 8 NONAME
+	_ZTI19CNewFileServiceBase @ 9 NONAME ; #<TI>#
+	_ZTI21RNewFileServiceClient @ 10 NONAME ; #<TI>#
+	_ZTI24CNewFileServiceDiscovery @ 11 NONAME ; #<TI>#
+	_ZTI25CNewFileServiceClientImpl @ 12 NONAME ; #<TI>#
+	_ZTV19CNewFileServiceBase @ 13 NONAME ; #<VT>#
+	_ZTV21RNewFileServiceClient @ 14 NONAME ; #<VT>#
+	_ZTV24CNewFileServiceDiscovery @ 15 NONAME ; #<VT>#
+	_ZTV25CNewFileServiceClientImpl @ 16 NONAME ; #<VT>#
+	_ZThn36_N19CNewFileServiceBase26HandleCompletedNewServiceLEi @ 17 NONAME ; #<thunk>#
+	_ZN19CNewFileServiceBase12GetErrorCodeEv @ 18 NONAME
+	_ZN19CNewFileServiceBase12SetErrorCodeEi @ 19 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/EABI/VoiceRecorderRecViewU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN10CVRRecView5NewLCEii @ 1 NONAME
+	_ZTI10CVRRecView @ 2 NONAME ; #<TI>#
+	_ZTV10CVRRecView @ 3 NONAME ; #<VT>#
+	_ZN17CVRRemConObserver14MrccatoCommandE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 4 NONAME
+	_ZThn4_N17CVRRemConObserver14MrccatoCommandE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 5 NONAME ; #<thunk>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/EABI/VoiceRecorderUtilsU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,28 @@
+EXPORTS
+	_ZN7VRUtils10GetMMCInfoER12TVRDriveInfo @ 1 NONAME
+	_ZN7VRUtils10MaxLengthLEv @ 2 NONAME
+	_ZN7VRUtils10MemoStoreLEv @ 3 NONAME
+	_ZN7VRUtils11AACBitrateLEv @ 4 NONAME
+	_ZN7VRUtils11AMRBitrateLEv @ 5 NONAME
+	_ZN7VRUtils11SetQualityLE10TVRQuality @ 6 NONAME
+	_ZN7VRUtils12SetMemoCountEi @ 7 NONAME
+	_ZN7VRUtils13AACAudioModeLEv @ 8 NONAME
+	_ZN7VRUtils13SetMemoStoreLE12TVRMemoStore @ 9 NONAME
+	_ZN7VRUtils14AACSamplerateLEv @ 10 NONAME
+	_ZN7VRUtils14DefaultVolumeLE10TVRSpeaker @ 11 NONAME
+	_ZN7VRUtils14FeatureEnabledE10TVRFeature @ 12 NONAME
+	_ZN7VRUtils15DefaultSpeakerLEv @ 13 NONAME
+	_ZN7VRUtils17SetDefaultVolumeLE10TVRSpeakeri @ 14 NONAME
+	_ZN7VRUtils18SetDefaultSpeakerLE10TVRSpeaker @ 15 NONAME
+	_ZN7VRUtils19MemoStoreDirectoryLER6TDes16 @ 16 NONAME
+	_ZN7VRUtils23GenerateUniqueFilenameLER3RFsR4TBufILi256EE11TVRFiletype @ 17 NONAME
+	_ZN7VRUtils26UnsupportedCallTypeOngoingEi @ 18 NONAME
+	_ZN7VRUtils31ShowMemoryFullConfirmationQueryEi @ 19 NONAME
+	_ZN7VRUtils8QualityLEv @ 20 NONAME
+	_ZN7VRUtils9MemoCountEv @ 21 NONAME
+	_ZN9TVRRename11GetNewNameLERK7TDesC16R6TDes16i @ 22 NONAME
+	_ZN9TVRRename7RenameLER5RFilei @ 23 NONAME
+	_ZN9TVRRename7RenameLER6TDes16i @ 24 NONAME
+	_ZN9TVRRenameC1ER3RFs @ 25 NONAME
+	_ZN9TVRRenameC2ER3RFs @ 26 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/EABI/VoiceRecorderUtilsUU.DEF	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,39 @@
+EXPORTS
+	_ZN7VRUtils10GetMMCInfoER12TVRDriveInfo @ 1 NONAME
+	_ZN7VRUtils10MaxLengthLEv @ 2 NONAME
+	_ZN7VRUtils10MemoStoreLEv @ 3 NONAME
+	_ZN7VRUtils11AACBitrateLEv @ 4 NONAME
+	_ZN7VRUtils11AMRBitrateLEv @ 5 NONAME
+	_ZN7VRUtils11SetQualityLE10TVRQuality @ 6 NONAME
+	_ZN7VRUtils12SetMemoCountEi @ 7 NONAME
+	_ZN7VRUtils13AACAudioModeLEv @ 8 NONAME
+	_ZN7VRUtils13SetMemoStoreLE12TVRMemoStore @ 9 NONAME
+	_ZN7VRUtils14AACSamplerateLEv @ 10 NONAME
+	_ZN7VRUtils14DefaultVolumeLE10TVRSpeaker @ 11 NONAME
+	_ZN7VRUtils14FeatureEnabledE10TVRFeature @ 12 NONAME
+	_ZN7VRUtils15DefaultSpeakerLEv @ 13 NONAME
+	_ZN7VRUtils17SetDefaultVolumeLE10TVRSpeakeri @ 14 NONAME
+	_ZN7VRUtils18SetDefaultSpeakerLE10TVRSpeaker @ 15 NONAME
+	_ZN7VRUtils19MemoStoreDirectoryLER6TDes16 @ 16 NONAME
+	_ZN7VRUtils23GenerateUniqueFilenameLER3RFsR4TBufILi256EE11TVRFiletype @ 17 NONAME
+	_ZN7VRUtils26UnsupportedCallTypeOngoingEi @ 18 NONAME
+	_ZN7VRUtils31ShowMemoryFullConfirmationQueryEi @ 19 NONAME
+	_ZN7VRUtils8QualityLEv @ 20 NONAME
+	_ZN7VRUtils9MemoCountEv @ 21 NONAME
+	_ZN9TVRRename11GetNewNameLERK7TDesC16R6TDes16i @ 22 NONAME
+	_ZN9TVRRename7RenameLER5RFilei @ 23 NONAME
+	_ZN9TVRRename7RenameLER6TDes16i @ 24 NONAME
+	_ZN9TVRRenameC1ER3RFs @ 25 NONAME
+	_ZN9TVRRenameC2ER3RFs @ 26 NONAME
+	_ZN7VRUtils10MemoDriveLEv @ 27 NONAME
+	_ZN7VRUtils12GetDriveInfoEiRj @ 28 NONAME
+	_ZN7VRUtils13SetMemoDriveLE12TDriveNumber @ 29 NONAME
+	_ZN7VRUtils17DefaultMemoDriveLEv @ 30 NONAME
+	_ZN18CVRUSBStateHanlder11IsUsbActiveEv @ 31 NONAME
+	_ZN18CVRUSBStateHanlder4NewLEP19MVRUSBStateObserver @ 32 NONAME
+	_ZN7VRUtils10DriveValidEi @ 33 NONAME
+	_ZTI18CVRUSBStateHanlder @ 34 NONAME
+	_ZTV18CVRUSBStateHanlder @ 35 NONAME
+	_ZN7VRUtils28MultipleMassStorageAvailableEv @ 36 NONAME
+	_ZN7VRUtils24GetRemovableMassStorageLEv @ 37 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceInc/CNewFileServiceDiscovery.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* 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:  Class implementing the discovery of New file Service servers
+*
+*/
+
+
+
+#ifndef CNEWFILESERVICEDISCOVERY_H
+#define CNEWFILESERVICEDISCOVERY_H
+
+//  INCLUDES
+#include <e32base.h>
+
+/**
+*  Discovery is not supported
+*
+*  @lib NewService.dll
+*  @since Series 60 3.0
+*/
+class CNewFileServiceDiscovery : public CBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CNewFileServiceDiscovery* NewL();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CNewFileServiceDiscovery();
+
+    public: // New functions
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CNewFileServiceDiscovery();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    };
+
+#endif      // CNEWFILESERVICEDISCOVERY_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceInc/NewFileService.rh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2002-2004 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:  Definitions for the API
+*
+*/
+
+
+#ifndef NEWFILESERVICE_RH
+#define NEWFILESERVICE_RH
+
+
+#endif // NEWFILESERVICE_RH
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceInc/NewFileServiceUID.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2005 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: 
+*     Contains the UID for New file service
+*
+*/
+
+
+#ifndef __NEWSERVICEUID_H__
+#define __NEWSERVICEUID_H__
+
+// CONSTANTS
+#define NEWSERVICEUID 0x101F8861
+
+#endif // __NEWSERVICEUID_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/CNewFileServiceBase.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,284 @@
+/*
+* 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:  Base class for app servers
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <badesca.h>
+#include <s32mem.h>
+#include <AiwGenericParam.h>
+
+#include "CNewFileServiceBase.h"
+#include "NewFileServiceDefs.h"
+
+// CONSTANTS
+const TInt KFilenameArrayGranularity( 2 );
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::CNewFileServiceBase
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNewFileServiceBase::CNewFileServiceBase():iError(0)
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::~CNewFileServiceBase
+//
+// ---------------------------------------------------------------------------
+//
+// Destructor
+EXPORT_C CNewFileServiceBase::~CNewFileServiceBase()
+    {
+	delete iFilenameArray;
+	delete iGenericParams;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::DeserializeGenericParamsL
+//
+// ---------------------------------------------------------------------------
+//
+void CNewFileServiceBase::DeserializeGenericParamsL( const RMessage2& aMessage )
+	{
+	if ( !iGenericParams )
+		{
+		iGenericParams = CAiwGenericParamList::NewL();
+		}
+	else
+		{
+		iGenericParams->Reset();
+		}
+
+	TInt dataLength( aMessage.GetDesLengthL( ENewServiceIndexFileName ) );
+	if ( dataLength == 0 )
+		{
+		return;
+		}
+
+	HBufC8* buffer = HBufC8::NewLC( dataLength );
+	TPtr8 ptr( buffer->Des() );
+	aMessage.ReadL( ENewServiceIndexFileName, ptr );
+
+	RDesReadStream stream( ptr );
+	iGenericParams->InternalizeL( stream );
+	CleanupStack::PopAndDestroy();   // buffer
+	}
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::ServiceL
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNewFileServiceBase::ServiceL( const RMessage2& aMessage )
+	{
+#ifdef _DEBUG
+	RDebug::Print( _L("CNewFileServiceBase::ServiceL %d"), 
+			aMessage.Function() );
+#endif
+	switch ( aMessage.Function() )
+		{
+			case ECreateNewFile:
+				{
+				TPckgBuf< TNewServiceParamPack > paramPack;
+				aMessage.ReadL( ENewServiceIndexParams, paramPack );
+
+				if ( !iFilenameArray )
+					{
+					iFilenameArray = new ( ELeave )
+						CDesCArrayFlat( KFilenameArrayGranularity );
+					}
+				iFilenameArray->Reset();
+
+				DeserializeGenericParamsL( aMessage );
+
+				// Copy the message handle so we can reply to the message when
+				// the service observer gets called
+				iPendingMessage = aMessage;
+
+				HandleNewFileL( this, *iFilenameArray, paramPack().iType, 
+								paramPack().iMultipleFiles );
+
+    			break;
+				}
+
+			case ENewFileToHandle:
+				{
+				TPckgBuf< TNewServiceParamPack > paramPack;
+				aMessage.ReadL( ENewServiceIndexParams, paramPack );
+
+				DeserializeGenericParamsL( aMessage );
+
+				// Adopt file handle from client
+				RFile file;
+				TInt err = file.AdoptFromClient( aMessage, 
+												 ENewServiceIndexFsHandle, 
+												 ENewServiceIndexFileHandle );
+#ifdef _DEBUG
+				RDebug::Print( _L("adopt error: %d" ), err );
+#endif
+				// Copy the message handle so we can reply to the message when
+				// the service observer gets called
+				iPendingMessage = aMessage;
+
+				HandleNewFileL( this, file, paramPack().iType );
+
+				break;
+				}
+
+			case EGetFilenameArrayLength:
+				{
+				// Calculate the size of the buffer needed to transfer the 
+				//filenames to the client side
+				TPckgBuf< TInt > lengthBuf;
+				TInt count( iFilenameArray->MdcaCount() );
+#ifdef _DEBUG
+				RDebug::Print( _L("Filename array count: %d"), count );
+#endif
+				TInt length = sizeof( TInt ) + count * sizeof( TUint16 );
+				for ( TInt i( 0 ); i < count; i++ )
+					{
+					length += iFilenameArray->MdcaPoint( i ).Size();
+					}
+
+				lengthBuf = length;
+				aMessage.WriteL( ENewServiceIndexParams, lengthBuf );
+				aMessage.Complete( KErrNone );
+				break;
+				}
+
+			case EGetFilenameArray:
+				{
+				// Allocate a buffer with the same size as in the client side
+				TInt length( aMessage.GetDesMaxLengthL( ENewServiceIndexParams ) );
+				HBufC8* buffer = HBufC8::NewLC( length );
+
+				TPtr8 ptr = buffer->Des();
+				RDesWriteStream stream( ptr );
+
+				// Stream the filename array to the buffer
+				TInt count( iFilenameArray->MdcaCount() );
+				stream.WriteInt32L( count );
+				for ( TInt i( 0 ); i < count; i++ )
+					{
+					TPtrC filename = iFilenameArray->MdcaPoint( i );
+					stream.WriteUint16L( filename.Length() );
+					stream.WriteL( filename );
+					}
+
+				stream.CommitL();
+
+				// Return the buffer to the client side
+				aMessage.WriteL( ENewServiceIndexParams, ptr );
+				aMessage.Complete( KErrNone );
+				CleanupStack::PopAndDestroy();	// buffer
+
+				// notify the application that the transfer is complete and
+				// it's ok to quit / whatever
+				ServiceCompleteL();
+
+				break;
+				}
+			default:
+			    {
+			    // Complete old message if still open
+                if ( !iPendingMessage.IsNull() )
+                    {
+                    iPendingMessage.Complete( KErrCancel );	
+                    }
+
+				CApaAppServiceBase::ServiceL(aMessage);
+				break;
+			    }
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::HandleCompletedNewServiceL
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNewFileServiceBase::HandleCompletedNewServiceL( 
+														TBool aReturnValue )
+	{
+	// Message was already completed in ServiceL
+	if ( iPendingMessage.IsNull() )
+	    {
+	    return;
+	    }
+
+	TNewServiceParamPack pack;
+	TPckgBuf< TNewServiceParamPack > paramPack;
+	pack.iReturnValue = aReturnValue;
+	paramPack = pack;
+
+	iPendingMessage.WriteL( ENewServiceIndexParams, paramPack );
+    if(iError != KErrAbort)
+    	{
+  	    iPendingMessage.Complete( KErrNone );
+    	}
+    else
+    	{
+  	    iPendingMessage.Complete( KErrAbort );
+  	    iError = 0;    		
+    	}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::GenericParams
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAiwGenericParamList* CNewFileServiceBase::GenericParams()
+	{
+	return iGenericParams;
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::GenericParams
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CNewFileServiceBase::GetErrorCode()
+	{
+	return iError;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// CNewFileServiceBase::GenericParams
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNewFileServiceBase::SetErrorCode(TInt aError)
+	{
+    iError = aError;
+	}	
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/CNewFileServiceClientImpl.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,255 @@
+/*
+* 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:  Implementation for Client side API
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <s32mem.h>
+#include <e32cmn.h>
+#include <AiwGenericParam.h>
+
+#include "NewFileServiceClient.h"
+#include "RNewFileServiceClient.h"
+#include "CNewFileServiceClientImpl.h"
+
+#include <VoiceRecorderUID.h>
+#include <CcorUiConstants.h>
+#include <avkon.hrh>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// NewFileServiceFactory::NewClientL
+//
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CNewFileServiceClient* NewFileServiceFactory::NewClientL()
+	{
+	return CNewFileServiceClientImpl::NewL();
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::NewL
+//
+// ----------------------------------------------------------------------------
+//
+CNewFileServiceClientImpl* CNewFileServiceClientImpl::NewL()
+	{
+	CNewFileServiceClientImpl* self =
+					new( ELeave )CNewFileServiceClientImpl;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::~CNewFileServiceClientImpl
+//
+// ----------------------------------------------------------------------------
+//
+CNewFileServiceClientImpl::~CNewFileServiceClientImpl()
+	{
+	delete iServerAppMonitor;
+	iClient.Close();
+	if(iClient.iError == KErrAbort)
+		{
+		iClient.iError = 0;
+		MAknServerAppExitObserver::HandleServerAppExit(EAknCmdExit);	
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::ConstructL
+//
+// ----------------------------------------------------------------------------
+//
+void CNewFileServiceClientImpl::ConstructL()
+	{
+	iClient.SetFileServiceClient(this);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::NewFileL
+//
+// ----------------------------------------------------------------------------
+//
+TBool CNewFileServiceClientImpl::NewFileL( CDesCArray& aFileNames,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType,
+							   TBool aMultipleFiles )
+	{
+	TUid uid( KNullUid );
+
+	switch ( aFileType )
+		{
+		case ENewFileServiceAudio:
+			{
+			uid = TUid::Uid( KVoiceRecorderAppUID3 );
+			break;
+			}
+
+		case ENewFileServiceVideo:
+		case ENewFileServiceImage:
+			{
+			uid = KUidCamcorder;
+			break;
+			}
+		default:
+		    {
+			User::Leave( KErrNotSupported );
+		    }
+		};
+
+	return NewFileL( uid, aFileNames, aParams, aFileType, aMultipleFiles );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::HandleServerAppExit
+//
+// ----------------------------------------------------------------------------
+//
+void CNewFileServiceClientImpl::HandleServerAppExit(TInt aReason)
+    {
+#ifdef _DEBUG    
+    RDebug::Print( _L("CNewFileServiceClientImpl::HandleServerAppExit") );
+#endif
+    iClient.Close();
+    MAknServerAppExitObserver::HandleServerAppExit(aReason);
+    }
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::NewFileL
+//
+// ----------------------------------------------------------------------------
+//
+TBool CNewFileServiceClientImpl::NewFileL( TUid aApplicationUid,
+							   CDesCArray& aFileNames,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType,
+							   TBool aMultipleFiles )
+	{
+	iClient.ConnectChainedAppL( aApplicationUid );
+
+	if ( !iServerAppMonitor )
+		{
+		iServerAppMonitor = CApaServerAppExitMonitor::NewL( iClient, *this,
+												CActive::EPriorityStandard );
+		}
+
+	HBufC8* serializedParams = SerializeGenericParamListLC( aParams );
+	TBool ret = iClient.NewFileL( aFileNames, serializedParams, 
+								  aFileType, aMultipleFiles );
+	CleanupStack::PopAndDestroy();	// serializedParams
+	return ret;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::NewFileL
+//
+// ----------------------------------------------------------------------------
+//
+TBool CNewFileServiceClientImpl::NewFileL( RFile& aFileHandle,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType )
+	{
+	TUid uid( KNullUid );
+
+	switch ( aFileType )
+		{
+		case ENewFileServiceAudio:
+			{
+			uid = TUid::Uid( KVoiceRecorderAppUID3 );
+			break;
+			}
+
+		case ENewFileServiceVideo:
+		case ENewFileServiceImage:
+			{
+			uid = KUidCamcorder;
+			break;
+			}
+		default:
+		    {
+		    User::Leave( KErrNotSupported );
+		    }
+		};
+
+	return NewFileL( uid, aFileHandle, aParams, aFileType );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::NewFileL
+//
+// ----------------------------------------------------------------------------
+//
+TBool CNewFileServiceClientImpl::NewFileL( TUid aApplicationUid,
+							   RFile& aFileHandle,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType )
+	{
+
+	iClient.ConnectChainedAppL( aApplicationUid );
+
+	if ( !iServerAppMonitor )
+		{
+		iServerAppMonitor = CApaServerAppExitMonitor::NewL( iClient, *this,
+												CActive::EPriorityStandard );
+		}
+
+	HBufC8* serializedParams = SerializeGenericParamListLC( aParams );
+	TBool ret = iClient.NewFileL( aFileHandle, serializedParams, aFileType );
+
+	CleanupStack::PopAndDestroy();	// serializedParams
+
+	return ret;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CNewFileServiceClientImpl::SerializeGenericParamListLC
+//
+// ----------------------------------------------------------------------------
+//
+HBufC8* CNewFileServiceClientImpl::SerializeGenericParamListLC( 
+												CAiwGenericParamList* aParams )
+	{
+	if ( !aParams )
+		{
+		HBufC8* dummy = HBufC8::NewLC( 0 );	// return dummy
+		return dummy;
+		}
+
+	TInt size( aParams->Size() );
+	HBufC8* serialized = HBufC8::NewLC( size );
+	TPtr8 ptr = serialized->Des();
+	RDesWriteStream stream( ptr );
+	aParams->ExternalizeL( stream );
+	stream.Close();
+	return serialized;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/CNewFileServiceClientImpl.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* 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:  Implementation for client side API
+*
+*/
+
+
+
+#ifndef NEWFILESERVICECLIENTIMPL_H
+#define NEWFILESERVICECLIENTIMPL_H
+
+//  INCLUDES
+#include <NewFileService.hrh>
+#include <e32std.h>
+#include <badesca.h>
+#include <AknServerApp.h>
+#include <NewFileServiceClient.h>
+
+// FORWARD DECLARATIONS
+class RFile;
+class CApaServerAppExitMonitor;
+class CAiwGenericParamList;
+
+// CLASS DECLARATION
+
+/**
+*  Actual implementation class for client side API
+*
+*  @lib NewService.lib
+*  @since Series 60 3.0
+*/
+class CNewFileServiceClientImpl : public CNewFileServiceClient,
+								  public MAknServerAppExitObserver
+    {
+
+    public: // New functions
+
+		static CNewFileServiceClientImpl* NewL();
+
+		~CNewFileServiceClientImpl();
+
+    public: // From CNewFileServiceClient
+		TBool NewFileL( CDesCArray& aFileNames,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType,
+							   TBool aMultipleFiles );
+
+		TBool NewFileL( TUid aApplicationUid,
+							   CDesCArray& aFileNames,
+							   	CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType,
+							   TBool aMultipleFiles );
+
+		TBool NewFileL( RFile& aFileHandle,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType );
+
+		TBool NewFileL( TUid aApplicationUid,
+							   RFile& aFileHandle,
+							   CAiwGenericParamList* aParams,
+							   TNewServiceFileType aFileType );
+
+    public: // from MApaServerAppExitObserver
+		void HandleServerAppExit( TInt aReason );
+
+	private:
+
+		void ConstructL();
+
+		HBufC8* SerializeGenericParamListLC( CAiwGenericParamList* aParams );
+
+	private:
+
+		CApaServerAppExitMonitor* iServerAppMonitor;
+
+		RNewFileServiceClient iClient;
+
+    };
+
+#endif      // NEWFILESERVICECLIENTIMPL_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/CNewFileServiceDiscovery.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* 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:  Empty implementation for discovery class
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CNewFileServiceDiscovery.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNewFileServiceDiscovery::CNewFileServiceDiscovery
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CNewFileServiceDiscovery::CNewFileServiceDiscovery()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNewFileServiceDiscovery::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNewFileServiceDiscovery::ConstructL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNewFileServiceDiscovery::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNewFileServiceDiscovery* CNewFileServiceDiscovery::NewL()
+    {
+    CNewFileServiceDiscovery* self = new( ELeave ) CNewFileServiceDiscovery;
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+    
+// Destructor
+CNewFileServiceDiscovery::~CNewFileServiceDiscovery()
+    {
+    
+    }
+
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/DllMain.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,22 @@
+/*
+* 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: 
+*      Dll entry point
+*
+*
+*/
+
+
+#include <e32base.h>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/NewFileServiceDefs.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* 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:  Definitions for the API
+*
+*/
+
+
+
+#ifndef NEWSERVICEDEFS_H
+#define NEWSERVICEDEFS_H
+
+//  INCLUDES
+#include <apaserverapp.h>
+
+#define NEWSERVICEUID 0x101F8861
+
+// DATA TYPES
+enum TIpcMessageIds
+	{
+	ECreateNewFile = RApaAppServiceBase::KServiceCmdBase,
+	ENewFileToHandle,
+	EGetFilenameArrayLength,
+	EGetFilenameArray
+	};
+
+enum TIpcNewFileArgumentIndices
+    {
+    ENewServiceIndexParams = 0,
+    ENewServiceIndexFsHandle,
+    ENewServiceIndexFileHandle,
+    ENewServiceIndexFileName
+    };
+
+/**
+*  Parameter class transferred through client-server interface.
+*
+*  @since Series 60 3.0
+*/
+class TNewServiceParamPack
+	{
+	public:
+		TNewServiceFileType iType;
+		TBool iMultipleFiles;
+		TBool iReturnValue;
+	};
+
+
+#endif      // NEWSERVICEDEFS_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/RNewFileServiceClient.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,236 @@
+/*
+* 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:  Service implementation class
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "RNewFileServiceClient.h"
+#include    "NewFileServiceDefs.h"
+#include    "cnewfileserviceserverobserver.h"
+#include <NewFileServiceClient.h>
+
+#include <s32mem.h>
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// RNewFileServiceClient::RNewFileServiceClient
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+RNewFileServiceClient::RNewFileServiceClient()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// RNewFileServiceClient::~RNewFileServiceClient
+// Destructor
+// ---------------------------------------------------------------------------
+//
+RNewFileServiceClient::~RNewFileServiceClient()
+    {
+    delete iObserver;
+    
+    if ( iWait.IsStarted() )
+        {
+        iWait.AsyncStop();
+        }
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// RNewFileServiceClient::ServiceUid
+// 
+// ---------------------------------------------------------------------------
+//
+TUid RNewFileServiceClient::ServiceUid() const
+	{
+	return TUid::Uid( NEWSERVICEUID );
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// RNewFileServiceClient::NewFileL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool RNewFileServiceClient::NewFileL( RFile& aFile, TDesC8* aGenericParams,
+													TNewServiceFileType aType )
+	{
+	TIpcArgs args;
+
+	TNewServiceParamPack pack;
+	pack.iType = aType;
+	pack.iMultipleFiles = EFalse;
+
+	TPckgBuf< TNewServiceParamPack > paramPack;
+	paramPack = pack;
+	args.Set( 0, &paramPack );
+
+
+	if ( aGenericParams )
+	{
+		args.Set( ENewServiceIndexFileName, aGenericParams );
+	}
+
+	TInt err = aFile.TransferToServer( args, ENewServiceIndexFsHandle,
+	                                   ENewServiceIndexFileHandle );
+#ifdef _DEBUG	
+	RDebug::Print( _L("transfer to server error: %d"), err );
+#endif	
+
+    iObserver = CNewFileServiceServerObserver::NewL();
+
+  	// Send through IPC, pass iObservers TRequestStatus to server
+	SendReceive( ENewFileToHandle, args, iObserver->IssueWait( this ) );
+
+    // Wait until server notifies iObserver
+    if ( !iWait.IsStarted() )
+        {
+        iWait.Start(); // CSI: 10 #
+        }
+
+	return paramPack().iReturnValue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// RNewFileServiceClient::NewFileL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool RNewFileServiceClient::NewFileL( CDesCArray& aFilenames, 
+									   TDesC8* aGenericParams,
+									   TNewServiceFileType aType, 
+									   TBool aMultipleFiles )
+	{
+#ifdef _DEBUG	
+	RDebug::Print( _L("RNewFileServiceClient::NewFileL") );
+#endif
+
+	TIpcArgs args;
+
+	TNewServiceParamPack pack;
+	pack.iType = aType;
+	pack.iMultipleFiles = aMultipleFiles;
+
+	TPckgBuf< TNewServiceParamPack > paramPack = pack;
+	args.Set( ENewServiceIndexParams, &paramPack );
+
+	if ( aGenericParams )
+	{
+		args.Set( ENewServiceIndexFileName, aGenericParams );
+	}
+	else
+	{
+		args.Set( ENewServiceIndexFileName, &KNullDesC() );
+	}
+
+    iObserver = CNewFileServiceServerObserver::NewL();
+
+	// Send through IPC, pass iObservers TRequestStatus to server
+	SendReceive( ECreateNewFile, args, iObserver->IssueWait( this )  );
+
+    // Wait until server notifies iObserver
+    if ( !iWait.IsStarted() )
+        {
+        iWait.Start(); // CSI: 10 #
+        }
+
+	pack = paramPack();
+
+	if ( !pack.iReturnValue )
+		{
+#ifdef _DEBUG
+		RDebug::Print( _L("RNewFileServiceClient::NewFileL - return value received: False") );
+#endif	
+		// don't bother with filename array if the user canceled	
+		return EFalse;		
+		}
+
+#ifdef _DEBUG
+	RDebug::Print( _L("RNewFileServiceClient::NewFileL - return value received: True") );
+#endif	
+
+	TPckgBuf< TInt > lengthBuf;
+	args.Set( ENewServiceIndexParams, &lengthBuf );
+	User::LeaveIfError( SendReceive( EGetFilenameArrayLength, args ) );
+
+	TInt length( lengthBuf() );
+
+	HBufC8* buffer = HBufC8::NewLC( length );
+	TPtr8 ptr = buffer->Des();
+	args.Set( ENewServiceIndexParams, &ptr );
+	User::LeaveIfError( SendReceive( EGetFilenameArray, args ) );
+
+	// Unpack filename array
+	RDesReadStream stream;
+	stream.Open( ptr );
+
+	TInt count( stream.ReadInt32L() );
+
+	for ( TInt i( 0 ); i < count; i++ )
+		{
+		TInt length( stream.ReadInt16L() );
+		TFileName filename;
+		stream.ReadL( filename, length );
+#ifdef _DEBUG
+		RDebug::Print( filename );
+#endif		
+		aFilenames.AppendL( filename );
+		}
+
+	CleanupStack::PopAndDestroy(); // buffer
+
+
+	return ETrue;
+	}
+
+
+// ----------------------------------------------------------------------------
+// RNewFileServiceClient::ServerRequestReady
+// 
+// ----------------------------------------------------------------------------
+//
+void RNewFileServiceClient::ServerRequestReady( TInt aError )
+    {
+
+    if (aError == KErrAbort)
+    	{
+    		iError = KErrAbort;
+    	}
+    // Server processed command and active object was notified and
+    // client can continue now
+    if ( iWait.IsStarted() )
+        {
+        iWait.AsyncStop();
+        }
+    }
+
+
+void RNewFileServiceClient::SetFileServiceClient(CNewFileServiceClient* aClient)
+	{
+	iNewFileServiceClient = aClient;	
+	}
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/RNewFileServiceClient.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* 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:  Service implementation class
+*
+*/
+
+
+
+#ifndef RNEWFILESERVICECLIENT_H
+#define RNEWFILESERVICECLIENT_H
+
+//  INCLUDES
+#include <AknServerApp.h>
+#include <e32base.h>
+#include <f32file.h>
+#include <badesca.h>
+#include <NewFileService.hrh>
+
+// FORWARD DECLARATIONS
+class CNewFileServiceServerObserver;
+class CNewFileServiceClient;
+
+
+class MNewFileServiceServerObserver
+	{
+	public: // New functions
+
+		/**
+		* This is a callback function which is called when a IHF mode changes.
+		* User must derive his class from MVRIHFObserver
+		* and implement this method if he is to use notify services.
+		*/
+		virtual void ServerRequestReady( TInt aError ) = 0;
+    };
+
+/**
+*  Class that implements the actual client-server communication
+*
+*  @lib NewService.lib
+*  @since Series 60 3.0
+*/
+class RNewFileServiceClient : public RAknAppServiceBase,
+    public MNewFileServiceServerObserver
+    {
+
+   public:  // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        RNewFileServiceClient();
+
+        /**
+        * Destructor.
+        */
+        virtual ~RNewFileServiceClient();
+
+    public: // New functions
+
+        /**
+        * Handles the communication between server application.
+        * After this synchronic operation the new file service has completed
+        * and the new file is available for the client
+        * @since Series 60 3.0
+        * @param aFile File handle to media file
+        * @param aGenericParams Parameters passed to server
+        * @param aType Type of the media file
+        * @param aMultipleFiles ETrue if multiple files can be created
+        * @return Was the creation succesful
+        */
+        TBool NewFileL( RFile& aFile, TDesC8* aGenericParams, TNewServiceFileType aType );
+        TBool NewFileL( CDesCArray& aFilenames, TDesC8* aGenericParams, TNewServiceFileType aType, TBool aMultipleFiles );
+
+        void SetFileServiceClient(CNewFileServiceClient*);
+        
+        CNewFileServiceClient* iNewFileServiceClient;
+        
+        TInt iError;
+
+    public: // Functions from base classes
+
+        /**
+        * Returns the Uid of the service
+        * @since Series 60 3.0
+        */
+        TUid ServiceUid() const;
+
+        /**
+        * From MNewFileServiceServerObserver
+        */
+        void ServerRequestReady( TInt aError );
+
+    private:
+		// Wait object used to synchronise asynchronic server request
+        CActiveSchedulerWait iWait;
+
+		// Active object observing server request completion. Owned.
+        CNewFileServiceServerObserver* iObserver;
+     };
+
+#endif      // RNEWFILESERVICECLIENT_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/cnewfileserviceserverobserver.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 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:  CActive-derived class for synchronizing server commands.
+*
+*/
+
+
+// INCLUDE FILES
+#include "cnewfileserviceserverobserver.h"
+#include "RNewFileServiceClient.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::CNewFileServiceServerObserver
+//
+// ---------------------------------------------------------------------------
+//
+CNewFileServiceServerObserver::CNewFileServiceServerObserver()
+    : CActive( EPriorityNormal )
+    {
+    CActiveScheduler::Add( this );    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CNewFileServiceServerObserver::ConstructL()
+    {
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CNewFileServiceServerObserver* CNewFileServiceServerObserver::NewL()
+    {
+    CNewFileServiceServerObserver* self = new( ELeave ) CNewFileServiceServerObserver;
+    CleanupStack::PushL( self );
+    self->ConstructL();    
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::~CNewFileServiceServerObserver
+//
+// ---------------------------------------------------------------------------
+//
+CNewFileServiceServerObserver::~CNewFileServiceServerObserver()
+    {
+    iObserver = NULL;
+RDebug::Print( _L("VoiceRecorder::delete cnewfileserviceobserver") );	    
+    Cancel();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::RunL
+//
+// ---------------------------------------------------------------------------
+//
+void CNewFileServiceServerObserver::RunL()
+    {
+    RDebug::Print( _L("VoiceRecorder CNewFileServiceServerObserver::RunL") );
+    if ( iObserver )
+        {
+        iObserver->ServerRequestReady( iStatus.Int() );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::DoCancel
+//
+// ---------------------------------------------------------------------------
+//
+void CNewFileServiceServerObserver::DoCancel()
+    {
+    RDebug::Print( _L("VoiceRecorder CNewFileServiceServerObserver::DoCancel") );            
+    if ( iObserver )
+        {
+        iObserver->ServerRequestReady( KErrCancel );
+        }
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNewFileServiceServerObserver::IssueWait
+//
+// ---------------------------------------------------------------------------
+//
+TRequestStatus& CNewFileServiceServerObserver::IssueWait( 
+									MNewFileServiceServerObserver* aObserver )
+    {
+    iObserver = aObserver;
+    
+    SetActive();
+    RDebug::Print( _L("VoiceRecorder CNewFileServiceServerObserver::IssueWait") );    
+    return iStatus;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/NewServiceSrc/cnewfileserviceserverobserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2006-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:  CActive-derived class for synchronizing server commands
+*
+*/
+
+#ifndef CNEWFILESERVICESERVEROBSERVER_H
+#define CNEWFILESERVICESERVEROBSERVER_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class MNewFileServiceServerObserver;
+
+/**
+ *  CActive-derived class for synchronizing server commands
+ *
+ *  @lib newservice.lib
+ *  @since S60 v3.0
+ */
+NONSHARABLE_CLASS( CNewFileServiceServerObserver )
+    : public CActive
+    {
+public:
+    static CNewFileServiceServerObserver* NewL();
+
+    ~CNewFileServiceServerObserver();
+
+    /**
+     * Wait until RunL is called from server
+     *
+     * @since S60 3.1
+     * @param aObserver The object that is notified when request completes
+     * @return Reference to this objects TRequestStatus so that it can be
+     *         supplied to server
+     */
+    TRequestStatus& IssueWait( MNewFileServiceServerObserver* aObserver );
+
+private: // from base class CActive
+    /**
+     * From CActive
+     */
+    void RunL();
+    void DoCancel();
+
+protected:
+
+
+private:
+    CNewFileServiceServerObserver();
+
+    void ConstructL();
+
+private: // data
+    MNewFileServiceServerObserver* iObserver;
+    };
+
+#endif // CNEWFILESERVICESERVEROBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewInc/CVRRecView.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,416 @@
+/*
+* 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: 
+*     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.
+*
+*/
+
+
+#ifndef __CVRRECVIEW_H__
+#define __CVRRECVIEW_H__
+
+// INCLUDES
+#include <aknview.h>
+#include <VoiceRecorderContexts.h>
+#include <voicerecorder.rsg>
+#include <AknWaitDialog.h>
+
+#include "MVRSelectionProvider.h"
+#include "MVRLayoutChangeObserver.h"
+#include "voicerecorder.hrh"
+#include "VRUSBStateHanlder.h"
+
+// FORWARD DECLARATIONS
+class CAknLaunchAppService;
+class CSendUi;
+class CVRRecViewContainer;
+class CVRRecViewActivationContainer;
+class CVRRecViewModel;
+
+enum TDialogTypeID {
+        EDialogForWaitStorageCard = 0,
+        EDialogForWaitUSBPluggingOut
+    };
+
+// 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,
+        public MVRUSBStateObserver,
+        public MProgressDialogCallback
+    {
+private:
+    // nested classes
+
+        /*
+        * One shot class for model activation. Receives a pointer to
+        * constructed CVRRecViewModel object and activates it asynchronically
+        * when Activate() is called.
+        */
+        NONSHARABLE_CLASS( CVRRecViewModelActivator ) 
+            : public CAsyncOneShot
+            {
+            public:  // constructor and destructor
+                CVRRecViewModelActivator( CVRRecViewModel* aModel );
+                ~CVRRecViewModelActivator(); 
+
+            public: // New functions:
+
+				/**
+				 * Activate model in given context
+                 */
+                void Activate( TVRRecViewContexts aContext, TCallBack aCallback );
+                
+            private: // Functions from base classes
+
+                /**
+                 * From CActive.
+                 */
+                void RunL();
+                void DoCancel();
+
+            private: // Data:
+
+                /*
+                * State machine model, not owned
+                */
+                CVRRecViewModel* iModel;
+
+				/*
+				* Context that is used to activate model in RunL
+				*/                
+                TVRRecViewContexts iContext;
+                
+                /*
+                * Callback that is called after model is activated
+                */
+                TCallBack iCallback;
+            };
+        
+        /*
+        * One shot class for note pop-up
+        */
+        NONSHARABLE_CLASS( CVRRecViewDialogActivator ) 
+            : public CAsyncOneShot
+            {
+            public:  // constructor and destructor
+                CVRRecViewDialogActivator( CVRRecViewModel* aModel);
+                ~CVRRecViewDialogActivator(); 
+                
+            public: // new method
+                void SetDialogType(TDialogTypeID aType);
+                
+                void SetViewContexts(TVRRecViewContexts aContext);
+                
+            private: // Functions from base classes
+
+                /**
+                 * From CActive.
+                 */
+                void RunL();
+                void DoCancel();
+
+            private: // Data:
+
+                /*
+                * State machine model, not owned
+                */
+                CVRRecViewModel* iModel;
+                
+                /*
+                * The type of dialog
+                */
+                TDialogTypeID iType;
+                
+                /*
+                * Context that is used to activate model
+                */                
+                TVRRecViewContexts iContext;  
+            };
+	
+	
+	public: // Constructors and destructor
+
+		/**
+		* Static constructor.
+		* @param aViewResourceId The resource used in view construction.
+		* @param aModelResourceId The resource used in model construction.
+		*/
+		IMPORT_C static CVRRecView* NewLC( TInt aViewResourceId,
+										   TInt aModelResourceId );
+
+		/**
+		* Destructor
+		*/
+		~CVRRecView();
+
+	private: // Constructors
+
+		/**
+		* Default constructor.
+		* The inline saves a few bytes.
+		*/
+		inline CVRRecView() {};
+
+		/**
+		* 2nd phase constructor.
+		* @param aViewResourceId The resource used in view construction.
+		* @param aModelResourceId The resource used in model construction.
+		*/
+		void ConstructL( TInt aViewResourceId, TInt aModelResourceId );
+
+	public: // from MVRSelectionProvider
+
+		/**
+		* Returns an array of currently selected files.
+		* Ownership is transferred. Caller must destroy the returned array.
+		* @param aStyle Used to return the style of selection
+		*               (empty/focused/marked)
+		* @return An array of selected files (0 or more).
+		*/
+		MDesCArray* GetSelectedFilesLC( TVRSelectionStyle& aStyle ) const;
+
+		/**
+		* Pass the file handle to recview.
+		* Recorded memo is placed there.
+		* @param aFile File handle
+		*/
+		void SetFileHandle( RFile& aFile );
+		
+		/**
+		* Return the recorded open file handle
+		* @param aFile File handle
+		*/
+		RFile& GetFile();		
+
+	public: // from MVRLayoutChangeObserver
+
+		/**
+		* This method gets called by the AppUI when a dynamic layout change
+		* event occurs.
+		*/
+		void LayoutChangedL( TInt aType );
+
+	public: // from CAknView
+		
+		/**
+		* Returns the id of the view.
+		* @return KVRRecViewUID
+		*/
+		TUid Id() const;
+
+		/**
+        * Handles menu commands.
+ 		* @param aCommand Command identifier.
+        */
+		void HandleCommandL( TInt aCommandId );
+
+	protected: // from CAknView
+
+		/**
+		* Dynamically initialises a menu pane. The Uikon framework calls this
+		* function, immediately before the menu pane is activated.
+		* @param aResourceId Resource ID identifying a menu pane to initialise
+		* @param aMenuPane The in-memory representation of the menu pane.
+		*/
+		void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+        /** 
+         * Foreground event handling function.
+         *
+         * Called by UI Framework when view switches to and from foreground
+         *  
+         * @param aForeground True if view is switched to foreground else false.
+         */	
+//		void HandleForegroundEventL( TBool aForeground );
+		
+	private: // from CAknView
+		
+        /**
+ 		* Is called by the framework when the view is activated.
+		* @param aPrevViewId Id of the previous view that was active
+		* @param aCustomMessageId Id of the custom message passed
+		* @param aCustomMessage Descriptor containing the custom message data
+        */
+		void DoActivateL( const TVwsViewId& aPrevViewId,
+						  TUid aCustomMessageId,
+						  const TDesC8& aCustomMessage );
+
+        /**
+ 		* Is called by the framework when the view is deactivated.
+        */
+		void DoDeactivate();
+
+	protected: // from MCoeView
+
+		/**
+		* Is called by the view server when the application goes to background.
+		*/
+		void ViewDeactivated();
+
+		/**
+		* Is called by the view server when the application goes to the foreground.
+		*/
+		void ViewActivatedL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,const TDesC8& aCustomMessage);
+
+	public: // from CAknView
+
+		/**
+		* Returns a pointer to the CBA container
+		* Calls base class Cba() (which is protected)
+		*/
+		CEikButtonGroupContainer* Cba() const;
+
+    	/**
+		* Returns a the StateId
+		* 
+		*/
+        TUint GetStateId() const;
+
+		/**
+		* Returns embedding status.
+		* @param ETrue if the current context is an embedded one.
+		*/
+		TBool IsEmbedded() const;
+
+        /**
+		* Returns the active quality setting.
+		* @return Quality setting of the active memo
+		*/
+		TVRQuality Quality() const;
+
+	private: // new methods
+
+		/**
+		* Dynamically adds a Send Via menu item plus associated cascade
+		* to the given menu pane.
+		* @param aResourceId Resource ID identifying a menu pane
+		* @param aMenuPane The in-memory representation of the menu pane.
+		*/
+		void AddSendToMenuL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+		/*
+		* Trappable version of DoActivateL. Activates an empty UI container
+		* and starts asynchronic model activation.
+		* See CAknView::DoActivateL for parameters
+		*/
+		void ReallyDoActivateL( const TVwsViewId& aPrevViewId,
+								  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();    
+    
+    /*
+     * Check the current state of drives
+     */
+    void CheckDriveState();    
+    
+    /**
+    * 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();
+    
+    /**
+     * Make user insert the SD card, and choose SD card as the memo storage
+     */
+    void SetDriveL();
+   
+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.
+		*/
+		CVRRecViewModel* iModel;
+
+		/**
+		* SendUi used to implement the Send Via feature. Owned.
+		*/
+		CSendUi* iSendUi;			
+		
+		/**
+		* One shot object that is used to activate model in correct context
+		* asynchronically. Owned.
+		*/
+		CVRRecViewModelActivator* iModelActivator;
+		
+		/**
+        * One shot object that is used to pop up the note
+        */
+		CVRRecViewDialogActivator* iDialogActivator;
+
+    /**
+     * The type of dialog
+     */
+	TDialogTypeID iDialogType;
+		
+    /**
+     * The command that passed to Handlecommand
+     * 
+     */
+    TInt iCommand;
+
+    CAknLaunchAppService* iLaunchService;
+    
+    CAknWaitDialog* iUsbWaitDialog;
+    
+    CVRUSBStateHanlder* iUSBStateHandler;
+    
+    /*
+    * Context that is used to activate model
+    */                
+    TVRRecViewContexts iContext;
+    };
+
+#endif // __CVRRECVIEW_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewInc/RecView.rh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* 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: 
+*     Defines resource structures for defining recording view states (visual).
+*     The file can be included in a resource file only.
+*
+*/
+
+
+#ifndef __RECVIEW_RH__
+#define __RECVIEW_RH__
+
+#include <uikon.rh>
+#include <badef.rh>
+
+#include "voicerecorder.hrh"
+
+STRUCT VR_TRANSITION
+	{
+	BYTE cmd = 0;
+	BYTE next = 0;
+	BYTE function = 0;
+	}
+
+STRUCT VR_CONTEXT
+	{
+	BYTE id;
+	STRUCT transition;
+	STRUCT states[];
+	}
+
+STRUCT VR_STATE
+	{
+	BYTE id;
+	STRUCT transitions[];
+	}
+
+
+STRUCT VR_STATEMACHINE
+	{
+	STRUCT labelsets[];			// a VR_LABELSET array
+	STRUCT labelLayouts[];			// a VR_LABEL array
+	STRUCT states[];			// a VR_VISUAL_STATE array
+	STRUCT contexts[];			// a VR_CONTEXT array
+	}
+
+STRUCT VR_VISUAL_STATE
+	{
+	LLINK menubar;
+	LLINK cba;
+	LTEXT< VRLABELMAXLENGTH > status;
+	BYTE labelSetId = 0;
+	BYTE hasVolumeControl = 0;
+	BYTE hasProgressBar = 1;
+	BYTE focusButton = 0;
+	BYTE stateID = 0;
+	STRUCT buttons[];
+	}
+	
+STRUCT VR_LABELSET
+	{
+	STRUCT labels[];	// an LTEXT array
+	}
+
+STRUCT VR_BUTTON_INFO
+	{
+	WORD commandId = 0;
+	BYTE state = 0;
+	}
+
+STRUCT VR_LABEL_LINK
+	{
+	LLINK euroLabelId;			 
+	LLINK apacLabelId;		
+	LLINK arabicHebrewLabelId;	
+	}
+	
+STRUCT VR_BUTTONS_NEW
+	{
+	STRUCT buttons[];
+	}
+			
+#endif // __RECVIEW_RH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRButtonPanel.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,857 @@
+/*
+* 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: 
+*     A compound control class. It is responsible for drawing and updating
+*     a set of buttons. Button selections are also handled and forwarded
+*     as commands to the AppUi.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <avkon.hrh>
+#include <eikenv.h> 
+#include <AknsUtils.h> 
+#include <voicerecorder.rsg> 
+#include <aknbutton.h> 					
+#include <e32base.h> 					
+#include <barsread.h> 					// TResourceReader
+#include <w32std.h>
+#include <aknlayoutscalable_apps.cdl.h> // New button highlight
+#include <e32std.h> 					// Timer
+#include <AknsDrawUtils.h>
+#include <applayout.cdl.h>
+#include <AknsConstants.h> 
+#include <AknIconUtils.h>
+#include <data_caging_path_literals.hrh>
+#include <eikappui.h> 
+#include <aknViewAppUi.h>
+#include <aknview.h>
+
+#include <voicerecorder.mbg>
+#include "CVRButtonPanel.h"
+#include "MVRButtonPanelModel.h"
+#include "voicerecorder.hrh"
+#include "VRConsts.h"
+
+// CONSTANTS
+
+// Timer delays
+const TInt KVRFastForwStartDelay( 500000 );
+const TInt KVRFastForwUpdateDelay( 170000 );
+
+const TInt KVRButtonCount( 5 );			   // Total number of buttons
+const TInt KVRAmountOfFocusShrink( 5 );
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::CVRButtonPanel
+// 
+// ---------------------------------------------------------------------------
+//	
+CVRButtonPanel::CVRButtonPanel( MVRButtonPanelModel* aModel )
+    : iModel( aModel ),
+    iVRButtons( KVRButtonCount )
+	{
+	__ASSERT_DEBUG( iModel, User::Panic( KVRPanic, KErrNotFound ) );
+	iModel->SetButtonPanelObserver( this );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::CVRButtonPanel
+// 
+// ---------------------------------------------------------------------------
+//	
+CVRButtonPanel::CVRButtonPanel( MVRButtonPanelModel* aModel,
+                               TUid aParentViewUid )
+    : iModel( aModel ),  
+    iParentViewUid( aParentViewUid ),
+    iVRButtons( KVRButtonCount )
+	{
+	__ASSERT_DEBUG( iModel, User::Panic( KVRPanic, KErrNotFound ) );
+	iModel->SetButtonPanelObserver( this );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::~CVRButtonPanel
+// Destructor
+// ---------------------------------------------------------------------------
+//	
+CVRButtonPanel::~CVRButtonPanel()
+	{
+	if ( iModel )
+		{
+		iModel->SetButtonPanelObserver( NULL );
+		}
+
+	iVRButtons.ResetAndDestroy();
+	delete iTimer;
+	iModel = NULL;
+	iSkin = NULL;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::ConstructL()
+	{
+	iSkin = AknsUtils::SkinInstance();
+	
+	// Create buttons from resources
+   	CreateButtonsFromResourcesL( R_VR_BUTTON_PANEL_BUTTONS );
+   	UpdateButtons();
+   	
+   	// Has to be done to get the buttons' background shown correctly
+   	for ( TInt i = 0; i < iVRButtons.Count(); i++ )
+    	{
+    	iVRButtons.At( i )->SetBackground( this );
+    	}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::CreateButtonsFromResourcesL
+// Creates buttons from resources
+// ---------------------------------------------------------------------------
+//    
+void CVRButtonPanel::CreateButtonsFromResourcesL( TInt aButtonsResourceId )
+	{	
+	TResourceReader reader;
+	iEikonEnv->CreateResourceReaderLC( reader, aButtonsResourceId );
+	
+	TInt numButtons( reader.ReadInt16() );
+
+	// Create buttons
+	for (TInt i = 0; i < numButtons; i++ )
+		{
+		CAknButton* aknButton = CAknButton::NewL();
+		CleanupStack::PushL( aknButton );
+		
+		aknButton->SetContainerWindowL( *this );
+		aknButton->SetMopParent( this ); 
+	    aknButton->ConstructFromResourceL( reader );
+		aknButton->SetObserver( this );
+	    
+	    // Set ready to be drawn and add it to array
+	    aknButton->ActivateL();
+	   	iVRButtons.AppendL( aknButton );
+	   	
+	   	CleanupStack::Pop( aknButton ); // aknButton
+		}
+		
+	CleanupStack::PopAndDestroy(); // reader;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::Update
+// This method can be called via MVRObserver class when Button Panel needs 
+// to be updated. 
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::Update( TVRUpdateCommand aCommand )
+	{
+	
+	TBool drawNow( ETrue );
+	
+	// Recorder calls this after each tick, we have to check if button reset
+	// is needed. Redraw is needed also after 1 secs playback to enable
+	// rewind button.
+    switch( aCommand )
+        {
+        case EVRUpdate1Second:
+	case EVRUpdate:
+        case EVRUpdateStateChange:
+            {
+            // Redraw
+           	drawNow = ETrue;
+            break;
+            }
+        case EVRUpdatePositionChange:
+        	{
+			// Skip redraw
+			drawNow = EFalse;
+            break;
+            }    
+        default:
+            {
+            // Skip redraw
+            drawNow = EFalse;
+            return;
+            }
+        }
+
+	if ( iModel->ResetNeeded() )
+		{
+		iFocusedButton = iModel->InitialFocusButtonId();
+		}
+		
+	UpdateButtons();
+	
+	// Change focus if focused button is dimmed
+	TuneButtonFocus();
+	
+	if ( drawNow )	
+		{
+	    DrawNow();				
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::SizeChanged
+// Called when Button Panel layout needs to be updated 
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::SizeChanged()
+	{
+    TInt count( iModel->ButtonCount() );
+
+    TSize size; // Size of the bitmap
+
+    for ( TInt i( 0 ); i < count; i++ )
+		{
+		// Layout button.
+        TAknWindowLineLayout cell = AppLayout::cell_vorec_pane( i );
+        
+    	TAknLayoutRect buttonLayout;
+		buttonLayout.LayoutRect( Rect(), cell );
+		TRect buttonRect = buttonLayout.Rect();
+		TInt newSize = (TInt)(buttonRect.Width() * 0.1); // used to reduce the size of button
+		buttonRect.Shrink( TSize(newSize,newSize) );
+    	iVRButtons.At( i )->SetRect( buttonRect );
+   		} 
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::OfferKeyEventL
+// Key event handling
+// ---------------------------------------------------------------------------
+//	
+TKeyResponse CVRButtonPanel::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+											 TEventCode aType )
+	{
+	if ( aType != EEventKey )
+		{
+		if( aType == EEventKeyDown )
+			{
+			// Rocker key pressed
+			if ( aKeyEvent.iScanCode == EStdKeyDevice3 )
+				{
+				// Start timer to get continuous timercallbacks for 
+				// FastForwarding and FastRewinding
+				StartTimerL();
+				}
+			}	
+		else if( aType == EEventKeyUp )
+			{
+			// Rocker key pressed
+			if ( aKeyEvent.iScanCode == EStdKeyDevice3 )
+				{
+				StopTimer();
+				}
+			}			
+		return EKeyWasNotConsumed;
+		}
+	// EEventKey
+	switch ( aKeyEvent.iCode )
+		{
+		case EKeyDownArrow:
+			{
+			MoveFocus( EFocusDown, ETrue );
+			break;
+			}
+		case EKeyUpArrow:
+			{
+			MoveFocus( EFocusUp, ETrue );
+			break;
+			}
+		case EKeyEnter:	
+		case EKeyOK:
+			{	
+			// This is in use as long as there are only 2 CBA buttons. When MSK
+			// enabled, execution goes straight to CVRRecView::HandleCommandL
+			FetchAndSendCommandL();
+			break;
+			}
+		default:
+			{
+			return EKeyWasNotConsumed;
+			}
+		}
+
+	return EKeyWasConsumed;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::Draw
+// Needed to get correct focus drawing with AknButtons
+// ---------------------------------------------------------------------------
+//		
+void CVRButtonPanel::Draw( CWindowGc& /*aGc*/, const CCoeControl& /*aControl*/, 
+		const TRect& /*aRect*/ ) const
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::Draw
+// 
+// ---------------------------------------------------------------------------
+//		
+void CVRButtonPanel::Draw( const TRect& /*aRect*/ ) const
+	{
+	CWindowGc& gc = SystemGc();
+	// Acquire the control context through the MOP-chain
+	MAknsControlContext* context = AknsDrawUtils::ControlContext( this );
+
+	// Draw the background using the control context
+	// Note: if there is no skin, the background is just cleared
+	// (which is OK for us)
+	AknsDrawUtils::Background( iSkin, context, this, gc, Rect() );
+
+	// Draw button highlight
+	DrawFocus( gc );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::CountComponentControls
+// 
+// ---------------------------------------------------------------------------
+//	
+TInt CVRButtonPanel::CountComponentControls() const
+	{
+	return iVRButtons.Count();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::ComponentControl
+// 
+// ---------------------------------------------------------------------------
+//	
+CCoeControl* CVRButtonPanel::ComponentControl( TInt aIndex ) const
+	{
+	return iVRButtons.At( aIndex );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::MoveFocus
+// Moves the focus to next button up or down. aDirection tells the which.
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::MoveFocus( const TFocusChange aDirection, TBool aDrawNow )
+	{
+	TInt buttonCount( iModel->ButtonCount() );
+	TInt newButton( iFocusedButton );
+
+	for ( TInt i( 0 ); i < buttonCount; i++ )
+		{
+		// calculate new button id. the modulo operator (%) handles looping
+		newButton = ( newButton + aDirection + buttonCount ) % buttonCount;
+		// dimmed buttons are skipped
+		if ( iModel->ButtonState( newButton ) != EDimmed )
+			{
+			iFocusedButton = newButton;
+			
+			// Timer is used for FastForward/-Rewind. Stop that when focus is 
+			// changed.
+			StopTimer();
+			break;
+			}
+		}
+	
+	if ( aDrawNow )
+		{
+		DrawNow();	
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::UpdateLayoutL
+// 
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::UpdateLayoutL( )
+	{
+	SizeChanged();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::HandleResourceChangeL
+// 
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::HandleResourceChangeL( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	
+	if ( aType == KEikDynamicLayoutVariantSwitch )
+		{
+		UpdateLayoutL();
+		}
+	else if ( aType == KAknsMessageSkinChange )
+		{
+		// New skin instance is loaded
+		iSkin = AknsUtils::SkinInstance();
+		}
+	
+	// Inform Avkon Buttons		
+	for( TInt buttonIndex = 0; buttonIndex < iVRButtons.Count() ; 
+			buttonIndex++ )
+		{
+		iVRButtons.At( buttonIndex )->HandleResourceChange( aType );
+		}
+	}
+
+	
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::UpdateButtons
+// Updates all Button Panel buttons to correct visual state. Also few  
+// exceptional cases are handled here (1. clip position is at the beginning 
+// 2. clip position is at the end)
+// ---------------------------------------------------------------------------
+//		
+void CVRButtonPanel::UpdateButtons()
+	{
+	TUint stateId;
+	// Update all the buttons	
+	for( TInt buttonIndex = 0; buttonIndex < iVRButtons.Count() ; 
+			buttonIndex++ )
+		{
+		stateId = iModel->VisualStateId();
+		
+		// dim rewind button if there is nothing to rewind
+		if ( buttonIndex == EButtonRewind && 
+				iModel->ButtonState( buttonIndex ) == EDimmed )
+			{
+			iVRButtons.At( buttonIndex )->SetDimmed(ETrue);			
+			stateId = EStateDisableButtons;
+			}
+		if ( buttonIndex == EButtonRewind && 
+				iModel->ButtonState( buttonIndex ) != EDimmed )
+			{
+			iVRButtons.At( buttonIndex )->SetDimmed(EFalse);			
+			}
+		// dim forward button if there is nothing to forward
+		if( buttonIndex == EButtonForward && 
+				iModel->ButtonState( buttonIndex ) == EDimmed )
+			{
+			iVRButtons.At( buttonIndex )->SetDimmed(ETrue);		
+			stateId = EStateDisableButtons;	
+			}
+		if( buttonIndex == EButtonForward && 
+				iModel->ButtonState( buttonIndex ) != EDimmed )
+			{
+			iVRButtons.At( buttonIndex )->SetDimmed(EFalse);		
+			}
+		
+		// ************ADDED CODE STARTS****************************
+		if( buttonIndex == EButtonRecord && 
+				iModel->ButtonState( buttonIndex ) == EDimmed )
+			{								
+			stateId = EStateDisableButtons;	
+			}
+		// ************ADDED CODE ENDS******************************
+
+		if( iModel->ButtonState( buttonIndex ) == EDimmed )
+			{
+			iVRButtons.At( buttonIndex )->SetDimmed(ETrue);		
+			}
+		else
+			{
+			iVRButtons.At( buttonIndex )->SetDimmed(EFalse);	
+			}	
+		
+		// Change the button state, don't redraw
+		iVRButtons.At( buttonIndex )->SetCurrentState( stateId , EFalse );
+		}
+	}	
+	
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::DrawFocus() 
+// Draws the focus rectangle around the currently focused button
+// ---------------------------------------------------------------------------
+//    
+void CVRButtonPanel::DrawFocus( CWindowGc& aGc ) const
+	{
+	
+	aGc.SetBrushStyle( CGraphicsContext::ENullBrush );
+
+	if ( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+		{
+		// From LAF-table
+//		TAknWindowLineLayout area = 
+//			AknLayoutScalable_Apps::grid_highlight_pane_cp05().LayoutLine();
+		
+//		TRect buttonRect = iVRButtons.At( iFocusedButton )->Rect();
+		TAknWindowLineLayout area = AppLayout::cell_vorec_pane( iFocusedButton );
+
+		TAknLayoutRect layoutRect;
+		layoutRect.LayoutRect( Rect(), area );
+//		layoutRect.LayoutRect( buttonRect, area );
+		
+		// The outer rectangle is calculated from the layoutRect
+		TRect outerRect = TRect( layoutRect.Rect().iTl, layoutRect.Rect().iBr );
+		
+		// Inner rectangle is generated by shrinking the outer rect.
+		TRect innerRect = outerRect;
+		innerRect.Shrink( TSize( KVRAmountOfFocusShrink, 
+									KVRAmountOfFocusShrink ) );
+		
+		if (iModel->ButtonState( iFocusedButton ) != EDimmed )
+			{
+			//Focus frame is drawn
+			aGc.SetPenStyle( CGraphicsContext::ENullPen );
+			TBool highlightDrawn = AknsDrawUtils::DrawFrame( iSkin, aGc, 
+					outerRect, innerRect, KAknsIIDQsnFrGrid, KAknsIIDNone );
+			} 
+		}
+	else
+		{
+		if ( iModel->ButtonState( iFocusedButton ) != EDimmed )
+			{
+			// Old basic rectangle is drawn
+			aGc.SetPenStyle( CGraphicsContext::ESolidPen );
+			aGc.DrawRect( iVRButtons.At( iFocusedButton )->Rect() );
+			}
+		}
+	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::FocusedButton() 
+// Returns the index for the currently focused button
+// ---------------------------------------------------------------------------
+//
+TInt CVRButtonPanel::FocusedButton() const
+	{
+	return iFocusedButton;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::StartTimerL
+// Create and start a timer with initial delay of KVRFastForwStartDelay
+// and with callback frequency of KVRFastForwUpdateDelay
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::StartTimerL()
+	{
+	if ( iTimer )
+		{
+		// stop if iTimer is already running
+		StopTimer();	
+		}
+
+	TCallBack cb( TimerCallBack, this );
+	iTimer = CPeriodic::NewL( 0 );
+	iTimer->Start( KVRFastForwStartDelay, KVRFastForwUpdateDelay, cb );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::StopTimer
+// Stop the timer by deleting the CPeriodic object
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::StopTimer()
+	{
+	delete iTimer;
+	iTimer = NULL;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::TimerCallBack
+// Timer callback for iTimer. Time between callbacks is KVRFastForwUpdateDelay
+// ---------------------------------------------------------------------------
+//	
+TInt CVRButtonPanel::TimerCallBack( TAny* aButtonPanel )
+	{
+	CVRButtonPanel* buttonPanel = reinterpret_cast< CVRButtonPanel* >
+															( aButtonPanel );
+	
+	buttonPanel->HandleTimerCallBack();
+		
+	return ETrue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::HandleTimerCallBack
+// Non-static variant of TimerCallBack (more convinient to implement)
+// ---------------------------------------------------------------------------
+//
+void CVRButtonPanel::HandleTimerCallBack()
+	{
+	// Callbacks are handled only if focus is on rewind or forward button
+	if (iFocusedButton == EButtonRewind || iFocusedButton == EButtonForward)
+		{
+		TRAPD( err, FetchAndSendCommandL() );
+		
+		if ( err )
+			{
+		RDebug::Print(_L("VoiceRecorder: FetchAndSendCommandL, error ID: %d"), 
+				err);
+			StopTimer();
+			}
+		}
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::FetchAndSendCommand
+// Fetches the command relating to focused button from the model. Command is 
+// sent on to active view.
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::FetchAndSendCommandL()
+	{
+	// Don't forward the command if dimmed button was clicked or 
+	// if model can't handle commands
+	if ( iModel->ButtonState( iFocusedButton ) == EDimmed || 
+		!iModel->CanHandleCommands() )
+		{
+		return;
+		}
+	
+	// Send a command id to the active view specified in the button
+	CAknViewAppUi* appUi = reinterpret_cast< CAknViewAppUi* >(
+									CEikonEnv::Static()->EikAppUi() );
+	CAknView* view = appUi->View( iParentViewUid );
+	view->HandleCommandL( iModel->CommandId( iFocusedButton ) );
+	
+	Update( EVRUpdateStateChange );
+
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::TuneButtonFocus
+// The special cases when button focus has to be moved are handled here
+// ---------------------------------------------------------------------------
+//	
+void CVRButtonPanel::TuneButtonFocus()
+	{
+	
+	// CVRRecViewModel::ButtonState() returns EDimmed for EButtonRewind if
+	// the position of the clip is at the beginning
+	if ( iFocusedButton == EButtonRewind && 
+			iModel->ButtonState( iFocusedButton ) == EDimmed )
+		{
+		iVRButtons.At( iFocusedButton )->SetDimmed(ETrue);	
+		MoveFocus( EFocusDown, EFalse );	
+		}
+		
+	// CVRRecViewModel::ButtonState() returns EDimmed for EButtonForward if
+	// the position of the clip is at the end	
+	else if( iFocusedButton == EButtonForward && 
+				iModel->ButtonState( iFocusedButton ) == EDimmed )	
+		{
+		iVRButtons.At( iFocusedButton )->SetDimmed(ETrue);	
+		MoveFocus( EFocusUp, EFalse );
+		}	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::HandleControlEventL
+// A callback function of Avkon buttons. Handles EEventStateChanged type events 
+// which happen every time when some of the buttons is pressed and button state 
+// changes. Event comes before CAknButton::Draw method is executed. 
+// ---------------------------------------------------------------------------
+//			
+void CVRButtonPanel::HandleControlEventL( CCoeControl *aControl, 
+										  TCoeEvent aEventType )
+	{
+	if( AknLayoutUtils::PenEnabled() )
+		{	
+		
+		switch( aEventType )
+			{
+			case EEventStateChanged:
+				{
+				
+				TInt newFocusedButton( 0 );
+				for( TInt i = 0; i < iVRButtons.Count() ; i++ )
+					{
+					// Which of buttons was pressed 
+					if ( aControl == iVRButtons.At( i ) )
+						{
+						// When new state is the first state, we have to set 
+						// new state to ENumStates to be able to se a correct 
+						// state in SetCurrentState( stateId - 1 , EFalse );
+						TInt stateId( iVRButtons.At( i )->StateIndex() );
+						if( stateId == 0 )
+							{
+							stateId = ENumStates;
+							}
+						
+						// CAknButton automatically changes the state to next 
+						// one always when it's ,pressed whether we want it or 
+						// not. To prevent this we set the previous state 
+						// before button draws itself
+						iVRButtons.At( i )->SetCurrentState( stateId - 1,
+															 EFalse );
+						newFocusedButton = i;
+						break;
+						}
+					}
+				
+				// Focus already was on pressed button so button's command is 
+				// executed	
+				if ( iFocusedButton == newFocusedButton )
+					{
+					// Don't forward the command if dimmed button was clicked
+					if ( iModel->ButtonState( iFocusedButton ) == EDimmed )
+						{
+						break;
+						}
+					
+					// Send a command id specified in the button to an 
+					// active view 
+					CAknViewAppUi* appUi = reinterpret_cast< CAknViewAppUi* >(
+											CEikonEnv::Static()->EikAppUi() );
+					CAknView* view = appUi->View( iParentViewUid );
+					view->HandleCommandL( iModel->CommandId( iFocusedButton ) );
+					
+					// To make FastForwarding/FastRewinding possible
+					if ( iFocusedButton == EButtonRewind || 
+						 iFocusedButton == EButtonForward )
+						{
+						if ( iLastPointerEvent == EVRButtonDownEvent )
+							{
+							StartTimerL();	
+							}							
+						}
+					
+					Update( EVRUpdateStateChange );
+					}
+				// Focus was not on the focused button -> 
+				// Focus should be changed	
+				else if ( newFocusedButton >= 0 && 
+						  newFocusedButton < iVRButtons.Count() )
+					{
+					//draw focus
+					if ( iModel->ButtonState( newFocusedButton ) != EDimmed )
+						{
+						iFocusedButton = newFocusedButton;
+						DrawNow();
+
+						// Send a command id specified in the button to an 
+						// active view 
+						CAknViewAppUi* appUi = reinterpret_cast< CAknViewAppUi* >(
+											CEikonEnv::Static()->EikAppUi() );
+						CAknView* view = appUi->View( iParentViewUid );
+						view->HandleCommandL( iModel->CommandId( iFocusedButton ) );
+						// To make FastForwarding/FastRewinding possible
+						if ( iFocusedButton == EButtonRewind || 
+							 iFocusedButton == EButtonForward )
+							{
+							if ( iLastPointerEvent == EVRButtonDownEvent )
+								{
+								StartTimerL();	
+								}							
+							}
+						}
+                // for one error about touch UI, when click a dimmed button, the dimmed
+                // button should not go back to umdimmed.                   
+				else
+					{
+					DrawNow();	
+					}
+				}													
+				break;	
+				}
+			default:
+				{
+				// No default behaviour
+				break;	
+				}
+			}
+			
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRButtonPanel::HandlePointerEventL
+// Handles Button panel pointer events. True functionality is to stop 
+// FastForward timer when FF should be stopped.
+// ---------------------------------------------------------------------------
+//		
+void CVRButtonPanel::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+	{
+	if( AknLayoutUtils::PenEnabled() )
+		{
+		
+		
+		switch( aPointerEvent.iType )
+			{
+			case TPointerEvent::EButton1Down:
+				{
+				// Don't start timer here. It's started in HandleControlEventL() 
+				iLastPointerEvent = EVRButtonDownEvent;
+				break;
+				}
+			case TPointerEvent::EDrag:
+				{
+				// Don't stop timer if just dragging inside the currently 
+				// focused button
+				TRect focusedButtonRect( 
+									 iVRButtons.At( iFocusedButton )->Rect() );
+				if( !focusedButtonRect.Contains( aPointerEvent.iPosition ) )
+					{
+					// Dragged outside
+					iLastPointerEvent = EVRButtonDragOutsideEvent;
+					StopTimer();	
+					}
+				break;		
+				}
+			case TPointerEvent::EButton1Up:
+				{
+				// Pen up
+				iLastPointerEvent = EVRButtonUpEvent;
+				StopTimer();	
+				break;
+				}		
+			default:
+				{
+				break;	
+				}	
+			}
+		
+		CCoeControl::HandlePointerEventL( aPointerEvent );
+		}
+	}
+
+// End of file	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRButtonPanel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,294 @@
+/*
+* 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: 
+*     A compound control class. It is responsible for drawing and updating
+*     a set of buttons. Button selections are also handled and forwarded
+*     as commands to the AppUi.
+*
+*/
+
+
+#ifndef __CVRBUTTONPANEL_H__
+#define __CVRBUTTONPANEL_H__
+
+// INCLUDES
+#include <coecntrl.h>
+#include <AknUtils.h>
+#include <coecobs.h>	// MCoeControlObserver
+
+#include "MVRObserver.h"
+
+// FORWARD DECLARATIONS
+class MVRButtonPanelModel;
+class MAknsSkinInstance;
+class CApaMaskedBitmap;
+class TAknsItemID;
+class CAknButton;
+
+// CLASS DEFINITION
+/**
+* A compound control class. It is responsible for drawing and updating
+* a set of buttons. Button selections are also handled and forwarded
+* as commands to the AppUi.
+*/
+NONSHARABLE_CLASS( CVRButtonPanel )
+	: 	public CCoeControl, 
+		public MVRObserver, 
+		public MCoeControlObserver,
+		public MCoeControlBackground
+	{
+	public: // data types
+	    enum TFocusChange 
+	        {
+	        EFocusUp = -1,
+	        EFocusDown = 1,
+	        EFocusInvalid = 2
+	        };
+	
+	// pointer event types used in VR        
+	enum TLastPointerEventType
+	        {
+	        EVRButtonDownEvent,
+	        EVRButtonDragOutsideEvent,
+	        EVRButtonUpEvent
+	        };
+	        
+	public: // constructors and destructor
+		
+		/**
+		* Constructor.
+		* @param aModel Pointer to the button panel model.
+		* Ownership is not transferred.
+		*/
+		CVRButtonPanel( MVRButtonPanelModel* aModel );
+
+		/**
+		* Constructor.
+		* @param aModel Pointer to the button panel model.
+		* @param aParentViewUid Uid of CVRRecView for fast swap
+		* Ownership is not transferred.
+		*/
+		CVRButtonPanel( MVRButtonPanelModel* aModel, TUid aParentViewUid );
+
+		/**
+		* Destructor
+		*/
+		virtual ~CVRButtonPanel();
+
+		/**
+		* 2nd phase constructor.
+		*/
+		void ConstructL();
+
+	private: // constructors
+
+		/**
+		* Default constructor. Not implemented.
+		*/
+		CVRButtonPanel();
+		
+		/**
+		* Creates control buttons from given resources
+		* @param aButtonsResourceId The resource used in buttons' construction.
+		*/
+		void CreateButtonsFromResourcesL( TInt aButtonsResourceId );
+
+	public:
+		
+		/**
+		* Updates the layout of all child controls to current active
+		* layout (Euro, Apac, Arabic/Hebrew)
+		*/		
+		void UpdateLayoutL( );
+
+		/**
+		* Handles a change to the application's resources
+		* @param aType The type of changed resource
+		*/
+		void HandleResourceChangeL( TInt aType );
+		
+	public: // from CCoeControl
+
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		void SizeChanged();
+
+		/**
+		* When a key event occurs, the control framework calls this function
+		* for each control on the control stack, until one of them can process
+		* the key event (and returns EKeyWasConsumed).
+		* @param aKeyEvent The key event.
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown
+		* @return Indicates whether or not the key event was used by this
+		*         control
+		*/
+		TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+									 TEventCode aType );
+		
+		/**
+		* Gets called whenever a pointer event occurs.
+		* @param aPointerEvent The pointer event to handle.
+		*/							 
+		void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+		
+	public:	// from MVRObserver
+
+		/**
+		* Called to notify a change in the observed subject's state.
+		*/
+		void Update( TVRUpdateCommand aCommand );
+	
+	public:	// from MCoeControlObserver
+		
+		/**
+		* This function is called when a control for which this control is the observer 
+		* calls CCoeControl::ReportEventL(). In VoiceRecorder button pointer events are
+		* handled here.
+		* @param aControl The control that sent the event.
+		* @param aEventType The event type. 
+		*/
+		void HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType);
+	
+	private:  // from MCoeControlBackground
+		
+		/*
+		* From MCoeControlBackground
+		* @see MCoeControlBackground
+		*/
+		void Draw(CWindowGc& aGc, const CCoeControl& aControl, const TRect& aRect) const;								 
+
+	public:		// new methods
+		
+		/*
+		* Checks which button is currently focused and returns the index
+		* value of that
+		* @return The index for the currently focused button
+		*/
+		TInt FocusedButton() const;
+	
+	private: // from CCoeControl
+
+		/**
+		* Draws this control.
+		* @param aRect The area that needs updating. Ignored.
+		*/
+		void Draw( const TRect& aRect ) const;
+		
+		/**
+		* Called by the framework to get the number of sub-components
+		* contained in this component. 
+		* @return The number of component controls contained by this control
+		*/
+		TInt CountComponentControls() const;
+		
+		/**
+		* Called by the framework to get a specified sub-component
+		* of this component.
+		* @param aIndex The index of the component to get.
+		* @return The component control with an index of aIndex.
+		*/
+		CCoeControl* ComponentControl( TInt aIndex ) const;
+		                          	  
+	private: // new methods
+
+		/**
+		* Moves focus to the next non-dimmed button.
+		* @param aDirection EFocusDown to move downwards, EFocusUp upwards
+		*/
+		void MoveFocus( const TFocusChange aDirection, TBool aDrawNow );
+
+		/**
+		* Updates buttons by changing their state
+		*/
+		void UpdateButtons();
+		
+		/**
+		* Draws highlight rectangle for the focused button.
+		* @param aGc Current Graphic Context in use.
+		*/
+		void DrawFocus( CWindowGc& aGc ) const;
+		
+		/**
+		* Creates and starts a CPeriodic timer object
+		* with a resolution of KVRFastForwUpdateDelay
+		*/
+		void StartTimerL();
+		
+		/**
+		* Stops and deletes the timer object.
+		*/
+		void StopTimer();
+		
+		/**
+		* Called by the CPeriodic timer to handle a tick.
+		* Uses HandleTimerCallBack() to do the actual work.
+		* @param aButtonPanel Always a valid pointer to CVRButtonPanel object
+		* @return ETrue to indicate that the timer should continue.
+		*/	
+		static TInt TimerCallBack( TAny* aButtonPanel );
+		
+		/**
+		* Non-static variant of TimerCallBack (more convinient to implement).
+		*/
+		void HandleTimerCallBack();
+		
+		/**
+		* Search corresponding command of the focused/pressed button and 
+		* sends it to active view 
+		*/
+		void FetchAndSendCommandL();
+		
+		/**
+		* Handles special cases concerning button focus
+		*/
+		void TuneButtonFocus();
+		
+		
+	private: // data
+
+		/**
+		* Pointer to the button panel model. Not owned.
+		*/
+		MVRButtonPanelModel* iModel;
+
+		/**
+		* The index of the currently focused button.
+		*/
+		TInt iFocusedButton;
+
+		// Skin instance. Not owned.
+		MAknsSkinInstance* iSkin;
+
+		// Uid of the parent view
+		TUid iParentViewUid;
+
+		/**
+		* Pointer to the timer object. Owned.
+		*/
+		CPeriodic* iTimer;
+		
+		// Button panel's button controls. Owned.
+		CArrayPtrFlat< CAknButton > iVRButtons;
+		
+		/**
+		* Tells what pointer event is the last that has happened
+		*/
+		TLastPointerEventType iLastPointerEvent;	
+		
+	};
+
+#endif // __CVRBUTTONPANEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRDiskSpaceWatcher.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2002 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: 
+*       Observe the Disk Space
+*
+*/
+
+
+// INCLUDE FILES
+#include "CVRMdaRecorder.h"
+#include "CVRDiskSpaceWatcher.h" 
+#include "CVRMemo.h"
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------------------------
+// CVRDiskSpaceWatcher::CVRDiskSpaceWatcher
+// 
+// ---------------------------------------------------------------------------
+//
+inline CVRDiskSpaceWatcher::CVRDiskSpaceWatcher
+        (CVRMdaRecorder& aRecorder, RFs& aFs) :
+    CActive(CActive::EPriorityIdle),
+    iRecorder(aRecorder), iFs(aFs)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// ---------------------------------------------------------------------------
+//CVRDiskSpaceWatcher::NewL
+// 
+// ---------------------------------------------------------------------------
+//
+CVRDiskSpaceWatcher* CVRDiskSpaceWatcher::NewL
+        (CVRMdaRecorder& aRecorder, RFs& aFs)
+    {
+    CVRDiskSpaceWatcher* self = new(ELeave) CVRDiskSpaceWatcher(aRecorder, aFs);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRDiskSpaceWatcher::~CVRDiskSpaceWatcher
+// 
+// ---------------------------------------------------------------------------
+//
+CVRDiskSpaceWatcher::~CVRDiskSpaceWatcher()
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CVRDiskSpaceWatcher::DoCancel
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRDiskSpaceWatcher::DoCancel()
+    {
+    iFs.NotifyDiskSpaceCancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CVRDiskSpaceWatcher::RunL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRDiskSpaceWatcher::RunL()
+    {
+    // if error returns, restart AO
+    if (iStatus.Int())
+    	{
+   	    if (iRecorder.iMemo->Quality() == EQualityHigh)
+   	    	{
+    	    RequestNotification( iThreshold, iDrive);	
+   	    	}
+    	return;	
+    	}
+
+    // Disk space is below CL -> initiate a compress
+    if(iRecorder.iAudioRecorder->State() == CMdaAudioClipUtility::ERecording)
+    	{
+        iRecorder.StopAndNotify();	
+    	}
+ 
+    // Renew notification request
+    if (iRecorder.iMemo)
+    	{
+    	if (iRecorder.iMemo->Quality() == EQualityHigh)
+    		{
+   	    	RequestNotification( iThreshold, iDrive);	
+    		}    		
+    	}
+
+    }
+
+// ---------------------------------------------------------------------------
+// CVRDiskSpaceWatcher::RunError
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRDiskSpaceWatcher::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRDiskSpaceWatcher::RequestNotification
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRDiskSpaceWatcher::RequestNotification( TInt64 aThreshold, TInt aDrive)
+    {
+    iThreshold = aThreshold;
+    iDrive = aDrive;
+    Cancel();
+    iFs.NotifyDiskSpace(iThreshold,iDrive,iStatus);
+    SetActive();
+    }
+
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRDiskSpaceWatcher.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2002 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: 
+*     Disk space level watcher 
+*
+*/
+
+
+#ifndef __CVRDISKSPACEWATCHER_H__
+#define __CVRDISKSPACEWATCHER_H__
+
+
+// CLASS DECLARATION
+class CVRMdaRecorder;
+
+/**
+ * Database compression timeout timer.
+ */
+ NONSHARABLE_CLASS(CVRDiskSpaceWatcher) : public CActive
+    {
+    public:  // Interface
+		/**
+         * Creates a new instance of this class.
+		 * @param aCompressionStrategy compressions strategy
+		 * @param aFs file server session
+		 * @param aThreshold threshold
+		 * @param aDrive disk drive
+         */
+        static CVRDiskSpaceWatcher* NewL
+                (CVRMdaRecorder&, RFs& aFs);
+
+        void RequestNotification(TInt64 aThreshold, TInt aDrive);
+
+		/**
+         * Destructor.
+         */
+        ~CVRDiskSpaceWatcher();
+
+    private:  // from CActive
+	    void DoCancel();
+        void RunL();
+	    TInt RunError(TInt aError);
+
+    private:  // Implementation
+        CVRDiskSpaceWatcher(CVRMdaRecorder&, RFs& aFs);
+
+    private:  // Data
+		/// Ref. compression strategy
+        CVRMdaRecorder& iRecorder;
+		/// Ref: file server session
+        RFs iFs;
+		/// Own: threshold
+        TInt64 iThreshold;
+		/// Own: disk drive
+        TInt iDrive;
+    };
+
+#endif // __CVRDISKSPACEWATCHER_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRLabel.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is an extension to the standard Eikon label.
+*     It provides leave-safe SetText() and is able to
+*     clear its background before drawing.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <AknBidiTextUtils.h>
+#include <AknsDrawUtils.h>
+
+#include "CVRLabel.h"
+#include "voicerecorder.hrh"
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CVRLabel::NewLC
+// 
+// ---------------------------------------------------------------------------
+//	
+CVRLabel* CVRLabel::NewLC( const CCoeControl& aContainer )
+	{
+	CVRLabel* self = new( ELeave ) CVRLabel;
+	CleanupStack::PushL( self );
+	self->ConstructL( aContainer );
+
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRLabel::~CVRLabel
+// 
+// ---------------------------------------------------------------------------
+//	
+CVRLabel::~CVRLabel()
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRLabel::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//	
+void CVRLabel::ConstructL( const CCoeControl& aContainer )
+	{
+	SetContainerWindowL( aContainer );
+	SetBufferReserveLengthL( VRLABELMAXLENGTH );
+	iSkin = AknsUtils::SkinInstance();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRLabel::Draw
+// Clears the label area and then draws the text
+// ---------------------------------------------------------------------------
+//	
+void CVRLabel::Draw( const TRect& aRect ) const
+	{
+	// Acquire the control context through the MOP-chain
+	MAknsControlContext* context = AknsDrawUtils::ControlContext( this );
+
+	// Draw the background using the control context
+	// Note: if there is no skin, the background is just cleared 
+	// (which is OK for us)
+	AknsDrawUtils::Background( iSkin, context, this, SystemGc(), Rect() );
+	
+	// Draw the actual text
+	CEikLabel::Draw( aRect );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRLabel::SetText
+// Non-leaving SetText variant.
+// ---------------------------------------------------------------------------
+//	
+void CVRLabel::SetText( const TDesC& aText )
+	{
+	TBuf< VRLABELMAXLENGTH > clipped( aText );
+	// will Panic if clipped is longer than VRLABELMAXLENGTH
+	// AknTextUtils::ClipToFit( clipped, *iFont, iSize.iWidth );
+        // AknBidiTextUtils::ConvertToVisualAndClipL(clipped,*iFont,iSize.iWidth, iSize.iWidth );
+	*iText = clipped;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRLabel::SetTextAndDraw
+// Updates the label if the given text is differentfrom the label's 
+// current text.
+// ---------------------------------------------------------------------------
+//	
+void CVRLabel::SetTextAndDraw( const TDesC& aText )
+	{
+	if ( iText->Compare( aText ) )
+		{
+		SetText( aText );
+		DrawNow();
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRLabel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is an extension to the standard Eikon label.
+*     It provides leave-safe SetText() and is able to
+*     clear its background before drawing.
+*
+*/
+
+
+#ifndef __CVRLABEL_H__
+#define __CVRLABEL_H__
+
+// INCLUDES
+#include <eiklabel.h>
+#include <AknUtils.h>
+
+// FORWARD DECLARATIONS
+class MAknsSkinInstance;
+
+// CLASS DEFINITION
+/**
+* This class is an extension to the standard Eikon label.
+* It provides leave-safe SetText() and is able to
+* clear its background before drawing.
+*/
+NONSHARABLE_CLASS( CVRLabel )
+	: public CEikLabel
+	{
+	public: // Constructors and destructor
+
+		/**
+		* Two-phased constructor
+		* @param aContainer Reference to the owning CCoeControl
+		*/
+		static CVRLabel* NewLC( const CCoeControl& aContainer );
+
+		/**
+		* Destructor.
+		*/
+		~CVRLabel();
+
+	private: // Constructors
+
+		/**
+		* Default constructor.
+		*/
+		inline CVRLabel() {};
+
+		/**
+		* 2nd phase constructor.
+		* @param aContainer Reference to the owning CCoeControl
+		*/
+		void ConstructL( const CCoeControl& aContainer );
+
+	private: // from CCoeControl
+
+		/**
+		* Draws this label.
+		* @param aRect The area that needs updating.
+		*/
+		void Draw( const TRect& aRect ) const;
+
+	public: // New methods
+
+		/**
+		* Sets the text in this label.
+		* Leave-safe. Panics if aText is too long.
+		* @param aText The new contents.
+		*/
+		void SetText( const TDesC& aText );
+
+		/**
+		* Sets the text in this label.
+		* Will draw the label if the given text
+		* is different from the current one.
+		* Leave-safe. Panics if aText is too long.
+		* @param aText The new contents.
+		*/
+		void SetTextAndDraw( const TDesC& aText );
+
+	private:
+		// Skin instance. Not owned.
+		MAknsSkinInstance* iSkin;
+
+		TAknLayoutText iTextLayout;
+	};
+
+#endif	// __CVRLABEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMdaRecorder.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,1639 @@
+/*
+* 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 acts as a high level wrapper around the media server
+*     playback and recording functionalities.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CVRSystemEventHandler.h"
+#include <ctsydomainpskeys.h>
+
+#include <e32svr.h>
+#include <bautils.h>
+#include <eikenv.h>
+#include <aknappui.h>
+#include <e32property.h>
+#include <AudioPreference.h>
+#include <aknsoundsystem.h>
+#include <ScreensaverInternalPSKeys.h>
+#include <AknGlobalNote.h>
+#include <StringLoader.h>
+#include <ErrorUI.h>
+#include <sysutil.h>
+
+#include <featmgr.h> // Feature manager
+
+#include <voicerecorder.rsg>
+#include <VoiceRecorderUID.h>
+#include "VoiceRecorderPrivatePSKeys.h"
+#include "CVRMemo.h"
+#include "MVRObserver.h"
+#include "VRConsts.h"
+#include "VRUtils.h"
+#include "CVRTonePlayer.h"
+#include "CVRMdaRecorder.h"
+#include "CVRDiskSpaceWatcher.h"
+#include "CVRRecViewModel.h"
+#include <AudioInput.h> 
+
+
+// MACROS
+#ifdef _DEBUG
+#define DEB_PRN_0(str) RDebug::Print(str)
+#else
+#define DEB_PRN_0(str)
+#endif
+
+// CONSTANTS
+const TInt KVRMdaRecorderDefaultStep( 5 );
+const TInt KVRObserverArrayGranularity( 2 );
+const TInt KVRMaxNoteLabelLength( 256 );
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::CVRMdaRecorder
+// 
+// ---------------------------------------------------------------------------
+//
+CVRMdaRecorder::CVRMdaRecorder() :
+	iObservers( KVRObserverArrayGranularity ),
+	iIsAttachedToMemo( EFalse ),
+	iMediaServerError( KErrNone ),
+	iDimLight (EFalse),
+	iAttachingToMemo(EFalse),
+	ifInRecording(EFalse),
+	ifStopCalled(EFalse)
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::~CVRMdaRecorder
+// 
+// ---------------------------------------------------------------------------
+//
+CVRMdaRecorder::~CVRMdaRecorder()
+	{
+
+	delete iGlobalNote;
+	delete iAudioInput; 
+	delete iAudioRecorder;
+	delete iErrorUI;
+	delete iTimer;
+	delete iTonePlayer;
+	delete iLight;
+	delete iDiskSpaceWatcher;
+    iObservers.Close();
+    
+    if (iCurrentCallHandler)
+    	{
+    	delete iCurrentCallHandler;
+    	}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::ConstructL()
+	{
+	_LIT_SECURITY_POLICY_S0( KVRWritePolicy, KVoiceRecorderAppUID3 );
+	_LIT_SECURITY_POLICY_PASS( KVRReadPolicy );
+    // Connect to Pub&Sub:
+    // Error ignored, key may be already defined which is ok for us
+	iPropVRState.Define( KPSUidVoiceRecorder, KVoiceRecorderMode, 0,
+	                     KVRReadPolicy, KVRWritePolicy );    
+    
+    User::LeaveIfError(
+        iPropVRState.Attach(
+        KPSUidVoiceRecorder, KVoiceRecorderMode ) );
+        
+   	// To allow/don't allow screensaver
+   	// Errors ignored, no actions needed if API is not available
+    iPropScreenSaver.Attach( KPSUidScreenSaver,
+       KScreenSaverAllowScreenSaver );
+	iAudioRecorder = CMdaAudioRecorderUtility::NewL( *this, NULL,
+	  KAudioPriorityRecording, TMdaPriorityPreference( 
+                               KAudioPrefRealOneLocalPlayback ) );
+
+	iGlobalNote = CAknGlobalNote::NewL();
+
+	iErrorUI = CErrorUI::NewL();
+
+	iTonePlayer = CVRTonePlayer::NewL();
+	iTonePlayer->PrepareToneL( EAvkonSIDVoiceRecordingStartTone );
+	
+	iLight = CHWRMLight::NewL(this);
+
+	// start observe diskdrive
+    RFs& fs( CEikonEnv::Static()->FsSession() );
+ 
+    iDiskSpaceWatcher = CVRDiskSpaceWatcher::NewL(*this, fs);	
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::MoscoStateChangeEvent
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::MoscoStateChangeEvent( CBase* /*aObject*/,
+										    TInt aPreviousState,
+											TInt aCurrentState,
+											TInt aErrorCode )
+	{
+#ifdef _DEBUG
+	RDebug::Print( _L( "VoiceRecorder: MoscoStateChangeEvent() prev: %d, current: %d, error: %d" ), 
+			aPreviousState, aCurrentState, aErrorCode );
+#endif
+	iMediaServerError = aErrorCode;
+	
+   	TRAP_IGNORE(CreateAudioInputL());
+   
+
+	// Stop the active scheduler wait (if present)
+	if ( iActiveWait.IsStarted() )
+		{
+		iActiveWait.AsyncStop();
+		}
+
+	if (iMediaServerError != KErrNone ) 
+		{
+        
+        // when mmc card is used and unpluged, this error returned
+        if (iMediaServerError == KErrCorrupt || iMediaServerError == KErrNotReady)
+        	{
+        	CVRRecViewModel* iViewModel = NULL;
+        	//iAudioRecorder->Close();
+        	iViewModel = dynamic_cast <CVRRecViewModel*>(iAutoStopObserver);
+        	if(iViewModel != NULL)
+        		{
+        		TRAP_IGNORE( iViewModel->HandleCommandL(EEikCmdExit) );
+        		}
+        	else
+        		{
+        		TRAP_IGNORE( CEikonEnv::Static()->EikAppUi()->HandleCommandL( EAknSoftkeyExit) );
+        		}
+        	}
+ 		
+		// Media server reports KErrDied if the playing was interrupted
+		// by some other system sound triggered by for example incoming SMS
+
+        if (aPreviousState == CMdaAudioClipUtility::ERecording || aPreviousState == CMdaAudioClipUtility::EPlaying )
+        	{ 	
+
+        	//if ( iMediaServerError != KErrDied &&  iMediaServerError != KErrAccessDenied )
+        	if ( iMediaServerError != KErrDied &&  
+        		 iMediaServerError != KErrAccessDenied &&  
+        		 iMediaServerError != KErrInUse )
+				{
+				TBuf< KVRMaxNoteLabelLength > label;
+
+				// If showing of error note fails, then.. well it fails
+				if ( iMediaServerError == KErrNotSupported )
+					{
+					CCoeEnv::Static()->
+					ReadResourceAsDes16( label, R_VR_UNSUPPORTED_INFONOTE_LABEL );
+				
+					TRAP_IGNORE( iGlobalNote->
+					ShowNoteL( EAknGlobalErrorNote, label ) );
+				
+					}
+				else if ( iMediaServerError == KErrCorrupt )
+					{
+					CCoeEnv::Static()->
+					ReadResourceAsDes16( label, R_VR_CORRUPT_INFONOTE_LABEL );
+				
+					TRAP_IGNORE( iGlobalNote->ShowNoteL( EAknGlobalErrorNote, 
+													 label ) );
+					}
+
+				else
+					{
+					TRAP_IGNORE( iErrorUI->ShowGlobalErrorNoteL( iMediaServerError ) );
+					}
+
+				}
+        	    if(iMediaServerError == KErrInUse && aPreviousState == CMdaAudioClipUtility::EPlaying)
+        	    	{
+					CVRRecViewModel* iViewModel = NULL;
+					iViewModel = dynamic_cast <CVRRecViewModel*>(iAutoStopObserver);
+					if(iViewModel != NULL)
+            		{
+            		iViewModel->HandleCommandL(ECmdPause);
+            		}
+        	        return;
+        	    	}
+        	    else
+        	    	{
+					StopAndNotify();
+        	    	}
+        	}
+        
+        //it will happen when the openfile fails
+        if (aPreviousState == CMdaAudioClipUtility::ENotReady && aCurrentState == CMdaAudioClipUtility::ENotReady )
+        	{
+#ifdef _DEBUG        	
+        	RDebug::Print( _L( "VoiceRecorder: callback stop called" ) );
+#endif	    	
+	    	iAudioRecorder->Close();				
+        	}
+        
+#ifdef _DEBUG
+		if ( aCurrentState == CMdaAudioClipUtility::ERecording)
+			{
+	        RDebug::Print( _L( "VoiceRecorder: ERecording" ) );
+			}
+#endif
+
+		} // if ( iMediaServerError != KErrNone )
+
+	if ( aCurrentState == CMdaAudioClipUtility::ERecording ||
+		 aCurrentState == CMdaAudioClipUtility::EPlaying )
+		{
+	   	// Do not allow screen saver while playing
+   	    // Errors ignored, no actions needed if API is not available	   	
+	   	iPropScreenSaver.Set( KPSUidScreenSaver,
+			KScreenSaverAllowScreenSaver, EVRScreenSaverNotAllowed );
+		}
+
+	if ( aCurrentState == CMdaAudioClipUtility::EOpen )
+		{
+		switch ( aPreviousState )
+			{
+			case CMdaAudioClipUtility::ENotReady:
+				{
+				iMemo->UpdateModifiedDate();
+				if ( iAttachingToMemo )
+				    {
+				    iAttachingToMemo = EFalse;
+				    TRAP_IGNORE( ConfigureMemoL());
+				    }
+				break;
+				}
+			default:
+				{
+				StopAndNotify();
+				break;
+				}
+			}
+		}
+    DEB_PRN_0( _L( "CVRMdaRecorder::MoscoStateChangeEvent::Exit"));
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::RegisterObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::RegisterObserver( MVRObserver* aObserver )
+	{
+	if ( aObserver && iObservers.Find( aObserver ) == KErrNotFound )
+		{
+		iObservers.Append( aObserver );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::UnregisterObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::UnregisterObserver( MVRObserver* aObserver )
+	{
+	if ( !aObserver )
+		{
+		return;
+		}
+		
+	TInt index( iObservers.Find( aObserver ) );
+	if ( index != KErrNotFound )
+		{
+		iObservers.Remove( index );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::SetAutoStopObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::SetAutoStopObserver( MVRObserver* aObserver )
+	{
+	iAutoStopObserver = aObserver;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::AttachToMemoL
+// Opens a memo file.
+// If the specified file does not exist (yet), it is created. 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::AttachToMemoL( CVRMemo* aMemo )
+	{
+#ifdef _DEBUG
+     RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL -enter" ));      	
+#endif
+
+     // if error happen, attach will fail 
+     	
+	if( iIsAttachedToMemo )
+		{
+		User::Panic( KVRPanic,EPanicAlreadyAttached );
+		}
+
+	if( !aMemo )
+		{
+		User::Panic( KVRPanic, KErrNotFound );
+		}
+
+	iMemo = aMemo;
+
+    // if the mmc card is full, should not attach to it
+
+     RFs& fs( CEikonEnv::Static()->FsSession() );
+
+
+// old storage system
+#ifndef RD_MULTIPLE_DRIVE
+	if ( iMemo->MemoStore() == EMemoStorePhoneMemory )
+		{
+#ifdef  __AAC_ENCODER_PLUGIN
+		if (((iMemo->Quality() != EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || 
+		((iMemo->Quality() == EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel )))
+#else
+        // now AAC format is not enabled
+        if (SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf ))
+#endif
+        	{
+ 			VRUtils::ShowMemoryFullConfirmationQuery();
+			if(GetInRecordingFlag())
+				{
+				SetInRecordingFlag(EFalse);	
+				}       		
+        	}
+			
+		}
+		
+     // MMC card
+        else
+     	{
+#ifdef  __AAC_ENCODER_PLUGIN
+		if (((iMemo->Quality() != EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || 
+		((iMemo->Quality() == EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel )))
+#else
+        // now AAC format is not enabled
+        if (SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf ))
+#endif
+        	{
+			VRUtils::ShowMemoryFullConfirmationQuery(ETrue);
+
+			if(GetInRecordingFlag())
+				{
+				SetInRecordingFlag(EFalse);	
+				}       		
+        	}     		
+     	}
+
+// now multiple drives
+#else
+
+#ifdef  __AAC_ENCODER_PLUGIN
+		if (((iMemo->Quality() != EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive())) ||
+		((iMemo->Quality() == EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel, iMemo->StorageDrive())))		 
+#else
+        // now AAC format is not enabled
+        if (SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive()))
+#endif 
+
+			{
+			//mmc card			
+			if ( iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL())
+				{
+ 				VRUtils::ShowMemoryFullConfirmationQuery(ETrue);
+				}
+			else
+				{
+		 		VRUtils::ShowMemoryFullConfirmationQuery();
+				}
+			if(GetInRecordingFlag())
+				{
+				SetInRecordingFlag(EFalse);	
+				}			
+			}
+
+
+#endif
+	
+	// opens an existing file or creates new
+	iAudioRecorder->OpenFileL( iMemo->File() );
+	
+	iAttachingToMemo = ETrue;
+		
+	if( !iActiveWait.IsStarted() )
+		{
+#ifdef _DEBUG
+		RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWaitStarting..."));
+#endif
+		iActiveWait.Start(); // CSI: 10 #
+
+#ifdef _DEBUG
+		RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWResuming...[%d]"), iMediaServerError);
+#endif
+		}    
+       
+	User::LeaveIfError( iMediaServerError );
+		
+
+
+/*
+	if( !iActiveWait.IsStarted() )
+		{
+		RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWaitStarting..."));
+		iActiveWait.Start(); // CSI: 10 #
+		RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWResuming...[%d]"), iMediaServerError);
+		}    
+    
+	User::LeaveIfError( iMediaServerError );
+
+    // Configure bitrate if recording an AMR clip.
+    // Default bitrate is 12200 and it's used if codec doesn't support
+    // the bitrate that is retrieved from Central Repository.
+    if (iMemo->Quality() == EQualityMMSOptimized )
+        {
+        TUint configuredAmrBitrate( VRUtils::AMRBitrateL() );
+        TUint amrBitrate( KVRDefaultAmrBitrate );
+        
+        // Fetch supported bitrates and find out if configured bitrate
+        // is supported
+        RArray<TUint> rates;
+        iAudioRecorder->GetSupportedBitRatesL( rates );        
+        TInt num = rates.Count();
+        if(num > 0)
+        	{
+            rates.Sort();
+            TInt found = rates.Find(configuredAmrBitrate);
+            if (found == KErrNotFound)
+            	{
+            		amrBitrate = rates[num-1];
+            	}
+        	}
+        rates.Reset();  // Clear array      
+        iAudioRecorder->SetDestinationBitRateL( amrBitrate );                  
+        }
+
+
+// added for supporting mp4 format
+#ifdef __AAC_ENCODER_PLUGIN
+  else if (iMemo->Quality() == EQualityHigh)
+    	{
+
+         TInt configuredAacSamplerate( VRUtils::AACSamplerateL() );
+         TInt aacSampleRate( KVRDefaultSamplerateAac );
+ 
+         TInt configuredAacBitrate( VRUtils::AACBitrateL() );
+         TInt aacBitrate( KVRDefaultBitrateAac );
+
+         TInt configuredAudioMode( VRUtils::AACAudioModeL() );   
+ 
+         // Sample rate
+     	 RArray<TUint> supportedSampleRates;
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedSampleRatesL -before" ));      	
+#endif
+         iAudioRecorder->GetSupportedSampleRatesL(supportedSampleRates);        
+
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedSampleRatesL -after" ));      	
+#endif
+
+        TInt num1 = supportedSampleRates.Count();
+        if(num1 > 0)
+        	{
+            supportedSampleRates.Sort();
+            TInt found1 = supportedSampleRates.Find(configuredAacSamplerate);
+            if (found1 == KErrNotFound)
+            	{
+            		aacSampleRate = supportedSampleRates[num1-1];
+            	}
+        	}
+
+          supportedSampleRates.Reset();                           
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationSampleRateL -before, sampleRate is %d"), aacSampleRate);      	
+#endif
+          iAudioRecorder->SetDestinationSampleRateL(aacSampleRate);
+
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationSampleRateL -after" ));      	
+#endif
+
+
+         // Bit reate      
+         RArray<TUint> supportedBitRates;         
+
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedBitRatesL -before" ));      	
+#endif
+         iAudioRecorder->GetSupportedBitRatesL(supportedBitRates);
+
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedBitRatesL -after" ));      	
+#endif
+
+        TInt num2 = supportedBitRates.Count();
+        if(num2 > 0)
+        	{
+            supportedBitRates.Sort();
+            TInt found2 = supportedBitRates.Find(configuredAacBitrate);
+            if (found2 == KErrNotFound)
+            	{
+            		aacBitrate = supportedBitRates[num2-1];
+            	}
+        	}
+
+         supportedBitRates.Reset();
+
+#ifdef _DEBUG 
+        RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationBitRateL -before, bitrate is %d"), aacBitrate);      	
+#endif
+         iAudioRecorder->SetDestinationBitRateL(aacBitrate);
+         
+#ifdef _DEBUG 
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationBitRateL -after" ));      	
+#endif
+         
+         // the audio mode flag                                    
+
+#ifdef _DEBUG
+      RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedNumberOfChannelsL -before" ));      	
+#endif
+         RArray<TUint> supportedNumberOfChannels;       
+         iAudioRecorder->GetSupportedNumberOfChannelsL(supportedNumberOfChannels); 
+         TInt num3 = supportedNumberOfChannels.Count();
+         if (num3 > 0)
+         	{
+         	supportedNumberOfChannels.Sort();
+            TInt ifFound = supportedNumberOfChannels.Find(configuredAudioMode);
+            if (ifFound == KErrNotFound)
+         	    {
+         	     configuredAudioMode = supportedNumberOfChannels [0];	
+         	    }
+         	}
+         supportedNumberOfChannels.Reset();
+         iAudioRecorder->SetDestinationNumberOfChannelsL(configuredAudioMode);
+        
+    	}
+#endif
+ 	    iIsAttachedToMemo = ETrue;
+	    ResetPosition();	
+*/
+
+#ifdef _DEBUG
+    RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL -exit" ));      	
+#endif
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::CreateNewMemoL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::CreateNewMemoL( CVRMemo* aMemo )
+	{
+	iMemo = aMemo;
+	iAudioRecorder->OpenFileL( aMemo->File() );
+	if ( !iActiveWait.IsStarted() )
+		{
+		iActiveWait.Start(); // CSI: 10 #
+		}    
+	User::LeaveIfError( iMediaServerError );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::DetachMemo
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::DetachMemo()
+	{
+	if ( iIsAttachedToMemo )
+		{
+		Stop();
+		//Need to delete iAudioInput before close!!!
+	    	DeleteAudioInput();
+		
+	    	iAudioRecorder->Close();				
+
+		iMemo = NULL;
+		iIsAttachedToMemo = EFalse;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::SetVolume
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::SetVolume( TInt aStep, TInt aMaxSteps )
+	{
+	if ( iIsAttachedToMemo )
+		{
+		// On device, MaxVolume() typically returns 9.
+		TInt maxVolume( iAudioRecorder->MaxVolume() );
+		TInt volume = maxVolume * aStep / aMaxSteps;
+		
+		// Just to make sure that volume is between 0 .. MaxVolume
+		if ( volume < 0)
+			{
+			volume = 0;
+			}
+		else if ( volume > maxVolume )
+			{
+			volume = maxVolume;
+			}
+			
+#ifdef _DEBUG
+		RDebug::Print( _L( "VoiceRecorder: Set volume: %d, max volume: %d" ),
+						 volume, maxVolume  );
+#endif			
+		iAudioRecorder->SetVolume( volume );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::PlayL
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRMdaRecorder::PlayL()
+	{
+	__ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic,
+		EPanicNotAttached ) );
+
+	if( iPause )
+		{
+		iAudioRecorder->SetPosition( iPosition );
+		iPosition = 0;
+		iPause = EFalse;
+		}
+
+	// This line was added to prevent MMF crash, remove it when play works 
+	// without this
+	iAudioRecorder->SetPlaybackBalance( KMMFBalanceCenter );
+	
+	SetIfStopCalled(EFalse);
+	iAudioRecorder->PlayL();
+
+    User::LeaveIfError( iPropVRState.Set( KPSUidVoiceRecorder,
+        KVoiceRecorderMode, EVRPlaying ) );
+
+   	// Do not allow screen saver while playing
+   	// Errors ignored, no actions needed if API is not available   	
+   	iPropScreenSaver.Set( KPSUidScreenSaver,
+		KScreenSaverAllowScreenSaver, EVRScreenSaverNotAllowed );
+
+	if( !iActiveWait.IsStarted() )
+		{
+		iActiveWait.Start(); // CSI: 10 #
+		}    
+	StartTimerL();
+	return iMediaServerError;
+	}
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::RecordL
+// Starts the recording of a sound clip. Checks the memory space situation
+// and plays start tone before starting recording.
+// ---------------------------------------------------------------------------
+//
+TInt CVRMdaRecorder::RecordL()
+	{
+	// If we receive record command and file is not opened yet. wait for file
+	// to be opened and then resume.
+	if ( !iIsAttachedToMemo && iAttachingToMemo && !iActiveWait.IsStarted() )
+		{
+		iActiveWait.Start();
+		User::LeaveIfError( iMediaServerError );
+	    }
+	
+	__ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic,
+														EPanicNotAttached ) );
+    TBool wasPaused( iPause );
+	iPause = EFalse;
+
+	// Check if available memory is/goes below critical level 
+	// in that case record is not performed
+	// KVRRecStartMemBuf should be size of 60 sec AMR and 5 sec WAV
+	// New max time estimation for WAV is calculated after 5 secs
+	RFs& fs( CEikonEnv::Static()->FsSession() );
+	
+	TBool critical( EFalse );
+
+// the current storage system (phone memory and mmc card)
+#ifndef RD_MULTIPLE_DRIVE
+	if ( iMemo->MemoStore() == EMemoStorePhoneMemory )
+		{
+#ifdef  __AAC_ENCODER_PLUGIN
+		if (((iMemo->Quality() != EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || 
+		((iMemo->Quality() == EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel )))
+#else
+        // now AAC format is not enabled
+        if (SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf ))
+#endif 	    
+			{
+			VRUtils::ShowMemoryFullConfirmationQuery();
+			critical = ETrue;
+			}
+		}
+
+     // MMC card
+     else
+     	{
+#ifdef  __AAC_ENCODER_PLUGIN
+		if (((iMemo->Quality() != EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || 
+		((iMemo->Quality() == EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel )))
+#else
+        // now AAC format is not enabled
+        if (SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf ))
+#endif
+		    {
+			VRUtils::ShowMemoryFullConfirmationQuery( ETrue );
+			critical = ETrue;
+			}
+		
+     	}
+
+// now for multiple drives
+#else
+#ifdef  __AAC_ENCODER_PLUGIN
+		if (((iMemo->Quality() != EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive())) ||
+		((iMemo->Quality() == EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel, iMemo->StorageDrive())))		 
+#else
+        // now AAC format is not enabled
+        if (SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive()))
+#endif 
+			{
+			if ( iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL())
+				{
+ 				VRUtils::ShowMemoryFullConfirmationQuery(ETrue);
+				}
+			else
+				{
+		 		VRUtils::ShowMemoryFullConfirmationQuery();
+				}
+			critical = ETrue;
+			}
+
+
+#endif
+
+	if( critical )
+		{
+		User::Leave( KErrDiskFull );
+		}
+
+
+    if ( !wasPaused )
+        {
+    	iTonePlayer->PlayTone( EAvkonSIDVoiceRecordingStartTone );
+    	iTonePlayer->PrepareToneL( EAvkonSIDVoiceRecordingStopTone );
+        }
+
+// start monitor disk space 	 
+#ifdef  __AAC_ENCODER_PLUGIN
+    if (iMemo->Quality() == EQualityHigh)
+    	{
+        TInt drive (0);
+#ifndef RD_MULTIPLE_DRIVE
+	    if ( iMemo->MemoStore() == EMemoStorePhoneMemory )
+		    {
+		    drive = EDriveC;	
+		    }
+        else
+    	    {
+    	    drive = EDriveE;	
+    	    }
+// multiple drives
+#else
+        drive = iMemo->StorageDrive();
+#endif
+
+        iDiskSpaceWatcher->RequestNotification(KVRAACCriticalMemoryLevel,drive);		
+    	}
+#endif
+
+	// Set recording preference
+	iAudioRecorder->SetPriority( KAudioPriorityRecording, 
+				TMdaPriorityPreference( KAudioPrefVoiceRec ) );	
+	iAudioRecorder->SetGain( iAudioRecorder->MaxGain() );
+
+	SetIfStopCalled(EFalse);
+
+	iAudioRecorder->RecordL();
+	
+	// Sets the indication that recording has started -> 
+	// Current file's handle can't be reused for next file
+	iMemo->SetRecorded( ETrue );
+	
+			
+    User::LeaveIfError( iPropVRState.Set( KPSUidVoiceRecorder,
+        KVoiceRecorderMode, EVRRecording ) );
+
+   	// Do not allow screen saver while recording
+   	// Errors ignored, no actions needed if API is not available
+   	iPropScreenSaver.Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver,
+   		EVRScreenSaverNotAllowed );
+
+	if( !iActiveWait.IsStarted() )
+		{
+		iActiveWait.Start(); // CSI: 10 #
+		}    
+	StartTimerL();
+
+	return iMediaServerError;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::Stop
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::Stop()
+	{
+	if ( iIsAttachedToMemo )
+		{
+		TBool reallyStopping( iPause );		
+#ifdef _DEBUG
+		RDebug::Print( _L( "VoiceRecorder: Stop error: %d" ), 
+				iMediaServerError );
+#endif
+		iPause = EFalse;
+
+		if( iAudioRecorder->State() == CMdaAudioRecorderUtility::ERecording )
+			{
+			reallyStopping = ETrue;
+            
+            // if the dim light is on, turn off it.
+            if(iDimLight)
+				{
+	            
+				iLight->ReleaseLight (CHWRMLight::EPrimaryDisplay);
+				User::ResetInactivityTime();
+                iDimLight = EFalse;
+				}			
+			
+			}
+	    // it will tell VRecorder not pause because it has been stopped.
+		SetIfStopCalled(ETrue);	
+		iAudioRecorder->Stop();
+
+	    // if error does not happen in recording, change the file to visible 
+	    iMemo->File().SetAtt( KEntryAttNormal, KEntryAttHidden);	
+				
+		iTonePlayer->PlayTone( EAvkonSIDVoiceRecordingStopTone );
+		iTonePlayer->PrepareTone( EAvkonSIDVoiceRecordingStartTone );			
+
+		if( ( iAudioRecorder->State() == CMdaAudioRecorderUtility::EOpen ) ||
+				reallyStopping )
+			{
+			// Set lower preference to ensure other sounds will 
+			// be played correctly
+			iAudioRecorder->SetPriority( KAudioPriorityRecording, 
+				TMdaPriorityPreference( KAudioPrefRealOneLocalPlayback ) );
+			}
+
+        // Error value ignored if PS key is not available
+        iPropVRState.Set( KPSUidVoiceRecorder, KVoiceRecorderMode, EVRIdle );
+        // Used to check the state of a phone call if any
+       
+        if ( iCurrentCallHandler ) 
+        	{
+        	delete iCurrentCallHandler;
+        	iCurrentCallHandler = NULL;
+        	}
+        
+    	TRAP_IGNORE( iCurrentCallHandler = CVRSystemEventHandler::NewL() );
+    	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)
+    		{
+    	   	// Do not allow screen saver
+       	  // Errors ignored, no actions needed if API is not available	   	
+    	   	iPropScreenSaver.Set( KPSUidScreenSaver,
+        		KScreenSaverAllowScreenSaver, EVRScreenSaverNotAllowed );
+    		}
+    	else
+    		{
+    	   	// Allow screen saver
+       	    // Errors ignored, no actions needed if API is not available	   	
+    	   	iPropScreenSaver.Set( KPSUidScreenSaver,
+        		KScreenSaverAllowScreenSaver, EVRScreenSaverAllowed );
+    		}
+
+		StopTimer();
+		ResetPosition();
+		iMemo->UpdateModifiedDate();
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::StopAndNotify
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::StopAndNotify()
+	{
+	Stop();
+	if ( iAutoStopObserver )
+		{
+#ifdef _DEBUG
+		RDebug::Print( _L( "VoiceRecorder: StopAndNotify AutoStopObserver: %d" ),
+				iMediaServerError );
+#endif
+		iAutoStopObserver->Update();
+#ifdef _DEBUG
+		RDebug::Print( _L( "VoiceRecorder: StopAndNotify AutoStopObserver: %d" ),
+				iMediaServerError );
+#endif
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::Pause
+// 
+// ---------------------------------------------------------------------------
+void CVRMdaRecorder::Pause()
+	{
+	__ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic,
+		EPanicNotAttached ) );
+
+	iPause = ETrue;
+
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder: Pause called. Position: %d:%d"),
+	    I64HIGH( iPosition.Int64() ), I64LOW( iPosition.Int64() )  );
+#endif
+
+	iAudioRecorder->Stop();
+
+    // Error value ignored if PS key is not available
+    iPropVRState.Set( KPSUidVoiceRecorder, KVoiceRecorderMode, EVRIdle );
+
+   	// Don't allow screen saver
+   	// Errors ignored, no actions needed if API is not available   	
+   	iPropScreenSaver.Set( KPSUidScreenSaver,
+		KScreenSaverAllowScreenSaver, EVRScreenSaverAllowed );
+
+	StopTimer();
+	SyncAndNotify();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::ForwardL
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRMdaRecorder::ForwardL()
+	{
+	if ( !MovePositionL( KVRMdaRecorderDefaultStep ) )
+		{
+		return KErrOverflow;
+		}
+	return iMediaServerError;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::RewindL
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRMdaRecorder::RewindL()
+	{
+	MovePositionL( -KVRMdaRecorderDefaultStep );
+	return iMediaServerError;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::CanAcceptCommands
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRMdaRecorder::CanAcceptCommands() const
+	{
+	return !iActiveWait.IsStarted();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::MovePositionL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRMdaRecorder::MovePositionL( TInt aSeconds )
+	{
+	__ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic,
+													EPanicNotAttached ) );
+
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder: MovePosition called. Base position: %d:%d"),
+	    I64HIGH( iAudioRecorder->Position().Int64() ),
+        I64LOW( iAudioRecorder->Position().Int64() )  );
+#endif
+
+	TInt64 interval;
+	if (iPause)
+		{
+		interval = iPosition.Int64() + aSeconds * KVRSecondAsMicroSeconds;
+		}
+	// Not sure if iPosition value is valid other than when paused, so do as
+	// previous for all other states:
+	else 
+		{
+		interval = iAudioRecorder->Position().Int64() + 
+								   aSeconds * 
+								   KVRSecondAsMicroSeconds;
+		}
+	
+	// Truncated to integer values	
+	TInt integerInterval( interval / KVRSecondAsMicroSeconds );
+	TInt integerDuration( iAudioRecorder->Duration().Int64() / 
+						  KVRSecondAsMicroSeconds );	
+	if ( interval < 0 )
+		{
+		interval = 0;
+		}
+	// if gone past the end or integer values are the same 
+	// in duration and position	
+	else if ( interval > iAudioRecorder->Duration().Int64() || 
+		integerInterval == integerDuration )
+		{
+		interval = iAudioRecorder->Duration().Int64();
+		}
+
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder: MovePosition called. Interval: %d:%d"),
+	 I64HIGH( interval ), I64LOW( interval )  );
+#endif
+
+	TTimeIntervalMicroSeconds newPosition( interval );
+
+	if (iPause)
+		{
+		iPosition = newPosition;
+		}
+	else if ( iAudioRecorder->State() == CMdaAudioClipUtility::EOpen )
+		{
+		// not playing, recording or paused.
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder. Idle.: MovePosition called. New Position: %d:%d"),
+	 I64HIGH( newPosition.Int64() ), I64LOW( newPosition.Int64() )  );
+#endif
+		iAudioRecorder->SetPosition( newPosition );
+		}
+	else
+		{
+
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder. Playing.: MovePosition called. New Position: %d:%d"),
+	 I64HIGH( newPosition.Int64() ), I64LOW( newPosition.Int64() )  );
+#endif
+
+		iAudioRecorder->Stop();
+		iAudioRecorder->SetPosition( newPosition );
+		iAudioRecorder->PlayL();
+		if( !iActiveWait.IsStarted() )
+			{
+			iActiveWait.Start(); // CSI: 10 #
+			}		
+		}
+	SyncAndNotify();
+	return ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::ConfigureMemoL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::ConfigureMemoL()
+    {
+    DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Enter" ));
+
+    // Configure bitrate if recording an AMR clip.
+    // Default bitrate is 12200 and it's used if codec doesn't support
+    // the bitrate that is retrieved from Central Repository.
+    if (iMemo->Quality() == EQualityMMSOptimized )
+        {
+        TUint configuredAmrBitrate( VRUtils::AMRBitrateL() );
+        TUint amrBitrate( KVRDefaultAmrBitrate );
+
+        // Fetch supported bitrates and find out if configured bitrate
+        // is supported
+        RArray<TUint> rates;
+        iAudioRecorder->GetSupportedBitRatesL( rates );        
+        TInt num = rates.Count();
+        if(num > 0)
+            {
+            rates.Sort();
+            TInt found = rates.Find(configuredAmrBitrate);
+            if (found == KErrNotFound)
+                {
+                amrBitrate = rates[num-1];
+                }
+            }
+        rates.Reset();  // Clear array      
+        iAudioRecorder->SetDestinationBitRateL( amrBitrate );                  
+
+        DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured MMSOpt bitrate" ));
+        }
+
+
+    // added for supporting mp4 format
+#ifdef __AAC_ENCODER_PLUGIN
+    else if (iMemo->Quality() == EQualityHigh)
+    	{
+        TInt configuredAacSamplerate( VRUtils::AACSamplerateL() );
+        TInt aacSampleRate( KVRDefaultSamplerateAac );
+
+        TInt configuredAacBitrate( VRUtils::AACBitrateL() );
+        TInt aacBitrate( KVRDefaultBitrateAac );
+
+        TInt configuredAudioMode( VRUtils::AACAudioModeL() );   
+
+        // Sample rate
+        RArray<TUint> supportedSampleRates;
+        iAudioRecorder->GetSupportedSampleRatesL(supportedSampleRates);        
+
+        TInt num1 = supportedSampleRates.Count();
+        if(num1 > 0)
+            {
+            supportedSampleRates.Sort();
+            TInt found1 = supportedSampleRates.Find(configuredAacSamplerate);
+            if (found1 == KErrNotFound)
+                {
+                aacSampleRate = supportedSampleRates[num1-1];
+                }
+            }
+        supportedSampleRates.Reset();                           
+        iAudioRecorder->SetDestinationSampleRateL(aacSampleRate);
+
+        DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured HiQ sampling rate" ));
+
+        // Bit reate      
+        RArray<TUint> supportedBitRates;         
+        iAudioRecorder->GetSupportedBitRatesL(supportedBitRates);
+        TInt num2 = supportedBitRates.Count();
+        if(num2 > 0)
+            {
+            supportedBitRates.Sort();
+            TInt found2 = supportedBitRates.Find(configuredAacBitrate);
+            if (found2 == KErrNotFound)
+                {
+                aacBitrate = supportedBitRates[num2-1];
+                }
+            }
+        supportedBitRates.Reset();
+        iAudioRecorder->SetDestinationBitRateL(aacBitrate);
+        DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured HiQ bit rate" ));
+
+        // the audio mode flag                                    
+        RArray<TUint> supportedNumberOfChannels;       
+        iAudioRecorder->GetSupportedNumberOfChannelsL(supportedNumberOfChannels); 
+        TInt num3 = supportedNumberOfChannels.Count();
+        if (num3 > 0)
+            {
+            supportedNumberOfChannels.Sort();
+            TInt ifFound = supportedNumberOfChannels.Find(configuredAudioMode);
+            if (ifFound == KErrNotFound)
+                {
+                configuredAudioMode = supportedNumberOfChannels [0];	
+                }
+            }
+        supportedNumberOfChannels.Reset();
+        iAudioRecorder->SetDestinationNumberOfChannelsL(configuredAudioMode);
+        
+        DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured HiQ channel" ));        
+        }
+#endif // __AAC_ENCODER_PLUGIN
+    iIsAttachedToMemo = ETrue;
+    ResetPosition();
+    DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Exit" ));
+    }
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::ResetPosition
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::ResetPosition()
+	{
+	if ( iIsAttachedToMemo )
+		{
+		iAudioRecorder->SetPosition( TTimeIntervalMicroSeconds( 0 ) );
+		SyncAndNotify();
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::StartTimerL
+// Create and start a timer with initial delay of 0
+// and a frequency of one second 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::StartTimerL()
+	{
+	StopTimer();	// stop if already running
+
+	TCallBack cb( TimerCallBack, this );
+	iTimer = CPeriodic::NewL( 1 );  // priority = EPriorityNormal + 1 = 1
+	iTimer->Start( 0, KVRDisplayUpdateDelay, cb );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::StopTimer
+// Stop the timer by deleting the CPeriodic object 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::StopTimer()
+	{
+	delete iTimer;
+	iTimer = NULL;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::SyncAndNotify
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::SyncAndNotify()
+	{
+	if(!iPause)
+		{
+		iPosition = iAudioRecorder->Position();
+		}
+	iMemo->SetPosition( iPosition );
+
+	iMemo->SetDuration( iAudioRecorder->Duration() );
+
+	for ( int i = 0; i < iObservers.Count(); i++ )
+		{
+		TVRUpdateCommand command( EVRUpdate );
+		if ( ( iMemo->Position().Int64() / KVRSecondAsMicroSeconds ) == 1 )
+		    {
+		    command = EVRUpdate1Second;
+		    }
+		iObservers[ i ]->Update( command );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::TimerCallBack
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRMdaRecorder::TimerCallBack( TAny* aMdaRecorder )
+	{
+	CVRMdaRecorder* recorder = reinterpret_cast< CVRMdaRecorder* >(
+															   aMdaRecorder );
+	recorder->HandleTick();
+	return ETrue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::HandleTick
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::HandleTick()
+	{
+	SyncAndNotify();
+
+	if ( iAudioRecorder->State() == CMdaAudioClipUtility::ERecording )
+		{
+		
+		TTimeIntervalMicroSeconds position( 0 );
+		TTimeIntervalMicroSeconds duration( 0 );
+		TTimeIntervalMicroSeconds maxDuration( 0 );
+		
+		position = iMemo->Position();
+		duration = iMemo->Duration();
+		maxDuration = iMemo->MaxDuration();
+		
+		// Position value is used for comparison because it gives more accurate 
+		// value than Duration value
+		if ( position >= maxDuration )
+			{
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder: Max duration passed. Position: %d:%d"),
+	 I64HIGH( position.Int64() ), I64LOW( position.Int64() )  );
+#endif	
+
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder: Max duration passed. Duration: %d:%d"),
+	 I64HIGH( duration.Int64() ), I64LOW( duration.Int64() )  );
+#endif	
+
+#ifdef _DEBUG
+	RDebug::Print( _L("VoiceRecorder: Max duration passed. MaxDuration: %d:%d"),
+	 I64HIGH( maxDuration.Int64() ), I64LOW( maxDuration.Int64() )  );
+#endif	
+			// Note that some data cropping is possible after stopping
+			// ->Duration decreases
+			StopAndNotify();
+			}
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::SetIhf
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRMdaRecorder::SetIhf( TBool /*aEnabled*/ )
+	{
+	return KErrNotSupported;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMdaRecorder::SetPositionL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMdaRecorder::SetPositionL( TInt aSeconds )
+	{
+	__ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic,
+											EPanicNotAttached ) );
+	
+	if( iAudioRecorder->State() == CMdaAudioClipUtility::ERecording ||
+		iAudioRecorder->State() == CMdaAudioClipUtility::ENotReady )
+		{
+		return;
+		}
+		
+	TInt64 interval ( TInt64( aSeconds ) * KVRSecondAsMicroSeconds );
+	
+	// Truncated to integer values	
+	TInt integerInterval( interval / KVRSecondAsMicroSeconds );
+	TInt integerDuration( iAudioRecorder->Duration().Int64() / 
+										  KVRSecondAsMicroSeconds );	
+	
+	if ( interval < 0 || integerDuration == 0 )
+		{
+		interval = 0;
+		}
+	// if gone past the end or integer values are the same in 
+	// duration and position
+	else if ( interval > iAudioRecorder->Duration().Int64() || 
+		integerInterval == integerDuration )
+		{
+		interval = iAudioRecorder->Duration().Int64();
+		}
+
+	TTimeIntervalMicroSeconds newPosition( interval );
+
+	if ( iPause )
+		{
+		iPosition = newPosition;
+		}
+	else if ( iAudioRecorder->State() == CMdaAudioClipUtility::EOpen )
+		{
+		iAudioRecorder->SetPosition( newPosition );
+		}
+	else
+		{
+		iAudioRecorder->Stop();
+		iAudioRecorder->SetPosition( newPosition );
+		iAudioRecorder->PlayL();
+		if( !iActiveWait.IsStarted() )
+			{
+			iActiveWait.Start(); // CSI: 10 #
+			}
+		}
+	SyncAndNotify();	
+	}
+
+// ---------------------------------------------------------
+// From class MBacklightControlObserver.
+// CNTExternalEventObserver::LightStatusChanged
+// ---------------------------------------------------------
+//
+void CVRMdaRecorder::LightStatusChanged(TInt aTarget, CHWRMLight::TLightStatus aStatus)
+     {
+
+     if(aTarget == CHWRMLight::EPrimaryDisplayAndKeyboard || aTarget == CHWRMLight::EPrimaryDisplay)
+     	{
+        if(aStatus == CHWRMLight::ELightOff)
+            {
+ 	        if (iAudioRecorder)
+ 	        	{	
+ 	            if (iAudioRecorder->State() == CMdaAudioClipUtility::ERecording ) // set light to dimmed
+ 	                {
+
+                    TRAPD(err, iLight->LightOnL(CHWRMLight::EPrimaryDisplay, KHWRMInfiniteDuration, 10, ETrue));
+                    if ( err == KErrNone )
+                       {
+                       iDimLight = ETrue;
+                       }
+
+ 	                }
+               	}
+               	
+                return;
+             }
+         
+         if((aStatus == CHWRMLight::ELightOn) && (aTarget == CHWRMLight::EPrimaryKeyboard))
+         	{
+             
+             if (iLight)
+             	{
+             		             	
+                CHWRMLight::TLightStatus status = iLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+                
+                if( (status == CHWRMLight::ELightOn)  && iDimLight )
+                	{
+                	    User::ResetInactivityTime();
+                		iDimLight = EFalse;
+                	}
+             	}
+            return;
+         	}
+     
+     	}
+     }
+
+
+// ---------------------------------------------------------
+// GetInRecordingFlag
+// 
+// ---------------------------------------------------------
+//		
+TBool CVRMdaRecorder::GetInRecordingFlag()
+	{
+		return ifInRecording;
+	}
+	
+	
+// ---------------------------------------------------------
+// SetInRecordingFlag
+// ---------------------------------------------------------
+//
+void CVRMdaRecorder::SetInRecordingFlag(TBool aFlag)
+	{
+	ifInRecording = aFlag;	
+	}
+
+
+// ---------------------------------------------------------
+// GetInRecordingFlag
+// 
+// ---------------------------------------------------------
+//		
+TBool CVRMdaRecorder::GetIfStopCalled()
+	{
+		return ifStopCalled;
+	}
+	
+	
+// ---------------------------------------------------------
+// SetInRecordingFlag
+// ---------------------------------------------------------
+//
+void CVRMdaRecorder::SetIfStopCalled(TBool aFlag)
+	{
+	ifStopCalled = aFlag;	
+	}
+
+// ---------------------------------------------------------
+// IsAttachedToMemo
+// ---------------------------------------------------------
+//
+TBool CVRMdaRecorder::IsAttachedToMemo()
+	{
+	return iIsAttachedToMemo;
+	}
+
+
+// ---------------------------------------------------------
+// CreateAudioInput
+// ---------------------------------------------------------
+//	
+void CVRMdaRecorder::CreateAudioInputL()
+	{
+	CAudioInput::TAudioInputPreference audioInput = CAudioInput::EDefaultMic;
+  
+	if ((iAudioRecorder->State() == CMdaAudioClipUtility::EOpen)&&
+	    (!iAudioInput))
+    	{  
+        iAudioInput = CAudioInput::NewL(*iAudioRecorder);        
+        SetAudioInputL(audioInput); 
+        iCurrentAudioInput = audioInput;                                    
+    	}
+    
+	}
+// ---------------------------------------------------------
+// SetAudioInputL
+// ---------------------------------------------------------
+//
+void CVRMdaRecorder::SetAudioInputL(CAudioInput::TAudioInputPreference aAudioInput)
+	{
+	if((iAudioInput)&&(iCurrentAudioInput!=aAudioInput))
+    	{	
+        RArray<CAudioInput::TAudioInputPreference> inputArray(4);
+        CleanupClosePushL( inputArray );
+        inputArray.Append( aAudioInput );
+        iAudioInput->SetAudioInputL( inputArray.Array() );   
+        CleanupStack::PopAndDestroy( &inputArray );
+        iCurrentAudioInput = aAudioInput;
+    	}
+    	
+	}
+	
+// ---------------------------------------------------------
+// DeleteAudioInput
+// ---------------------------------------------------------
+//	
+void CVRMdaRecorder::DeleteAudioInput()
+	{
+	delete iAudioInput;
+	iAudioInput = NULL;
+	}
+	
+// ---------------------------------------------------------
+// ConfigSampleRateOfVoiceCallL
+// ---------------------------------------------------------
+//	
+void CVRMdaRecorder::ConfigSampleRateOfVoiceCallL()
+	{
+	// Sample rate
+	TUint sampleRates = iAudioRecorder->DestinationSampleRateL();
+	TInt configuredAacSamplerate( VRUtils::AACSamplerateL() );
+	if(sampleRates == configuredAacSamplerate)
+		{
+		return;
+		}
+	
+	if (iMemo->Quality() == EQualityHigh)
+		{
+		TInt aacSampleRate( KVRDefaultSamplerateAac );
+		// Sample rate
+		RArray<TUint> supportedSampleRates;
+		iAudioRecorder->GetSupportedSampleRatesL(supportedSampleRates);
+		TInt num1 = supportedSampleRates.Count();
+		if(num1 > 0)
+			{
+			supportedSampleRates.Sort();
+			TInt found1 = supportedSampleRates.Find(configuredAacSamplerate);
+			if (found1 == KErrNotFound)
+				{
+				aacSampleRate = supportedSampleRates[num1-1];
+				}
+			}
+		supportedSampleRates.Reset(); 
+		iAudioRecorder->SetDestinationSampleRateL(aacSampleRate);
+		}
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMdaRecorder.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,441 @@
+/*
+* 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 acts as a high level wrapper around the media server
+*     playback and recording functionalities.
+*
+*/
+
+
+#ifndef __CVRMDARECORDER_H__
+#define __CVRMDARECORDER_H__
+
+// INCLUDES
+#include <e32property.h>
+#include <mdaaudiosampleeditor.h>
+#include <hwrmlight.h>
+
+#include "MVRMdaRecorder.h"
+#include "MVRUpdateEventProvider.h"
+
+#include <AudioInput.h>
+// FORWARD DECLARATIONS
+class CVRSystemEventHandler;
+class CAknGlobalNote;
+class CMdaAudioRecorderUtility;
+class CVRMemo;
+class MVRObserver;
+class CErrorUI;
+class CAudioOutput;
+class CVRTonePlayer;
+class CVRDiskSpaceWatcher;
+class CAudioInput;
+
+// CLASS DEFINITION
+/**
+* This class acts as a high level wrapper around the media server
+* playback and recording functionalities.
+*/
+NONSHARABLE_CLASS( CVRMdaRecorder )
+    : public CBase, public MVRMdaRecorder,
+      public MMdaObjectStateChangeObserver, 
+      public MVRUpdateEventProvider,
+      public MHWRMLightObserver   // for light control
+	{
+	public: // Constructors and destructor
+
+		/**
+		* Default constructor
+		*/
+		CVRMdaRecorder();
+
+		/**
+		* Destructor
+		*/
+		~CVRMdaRecorder();
+
+		/**
+		* 2nd phase constructor
+		*/
+		void ConstructL();
+
+	public: // from MMdaObjectStateChangeObserver
+
+		/**
+		* Encapsulates the interface for handling the change of state of
+		* an audio data sample object.
+		* @param aObject A pointer to the audio sample object that has
+		*				 changed state.
+		* @param aPreviousState The state before the change
+		* @param aCurrentState The state after the change
+		* @param aErrorCode If not KErrNone, then the error that
+		*					caused the state change
+		*/
+		void MoscoStateChangeEvent( CBase* aObject, TInt aPreviousState,
+									TInt aCurrentState, TInt aErrorCode );
+
+		/**
+		* Registers an observer for receiving update notifications.
+		* @param aObserver The observer object.
+		*/
+		void RegisterObserver( MVRObserver* aObserver );
+
+		/**
+		* Unregisters a previously registered observer
+		* @param aObserver The observer object.
+		*/
+		void UnregisterObserver( MVRObserver* aObserver );
+
+		/**
+		* Registers an observer for receiving auto stop notifications.
+		* @param aObserver The observer object.
+		*/
+		void SetAutoStopObserver( MVRObserver* aObserver );
+
+		/**
+		* Attachs this recorder to a memo file, i.e. opens it
+		* and initialises media server.
+		* @param aMemo Specifies the file to be attached to.
+		*/
+		void AttachToMemoL( CVRMemo* aMemo );
+
+		/**
+		* Creates a new memo file and attachs to it.
+		* @param aMemo Specifies the file to be created.
+		*/
+		void CreateNewMemoL( CVRMemo* aMemo );
+
+		/**
+		* Detachs from the current memo, i.e. closes the file.
+		*/
+		void DetachMemo();
+
+		/**
+		* Sets playback volume.
+		* @param aStep Volume level in steps
+		* @param aMaxSteps How many steps there are (10 usually).
+		*/
+		void SetVolume( TInt aStep, TInt aMaxSteps );
+
+		/**
+		* Starts playback.
+		* @return System wide error code
+		*/
+		TInt PlayL();
+
+		/**
+		* Starts recording.
+		* @return System wide error code
+		*/
+		TInt RecordL();
+
+		/**
+		* Stops playback or recording.
+		*/
+		void Stop();
+
+		/**
+		* Pauses playback or recording.
+		*/
+		void Pause();
+
+		/**
+		* Moves the playing position forward 5 seconds.
+		* @return System wide error code. KErrOverflow if the
+		* position was forwarded past the end.
+		*/
+		TInt ForwardL();
+
+		/**
+		* Moves the playing position backward 5 seconds.
+		* @return System wide error code
+		*/
+		TInt RewindL();
+
+		/**
+		* Indicates if we are in a state that can accept
+		* more commands (i.e. all async calls have completed).
+		* @return ETrue if it's ok to proceed calling methods.
+		*/
+		TBool CanAcceptCommands() const;
+
+		/**
+		* Set active speaker if feature is supported
+		* @param aEnabled ETrue if playback should be routed to IHF
+		* @return Error code returned by routing operation
+		*/
+		TInt SetIhf( TBool aEnabled );
+
+		/**
+		* Set the audio recorder position to a new value
+		* @param aSeconds The position to set
+		*/
+		void SetPositionL( TInt aSeconds );
+
+        /**
+        * From MBacklightControlObserver.
+        * Callback for change in backlight status
+        *
+        * @since S60 ?S60_version
+        * @param aTarget The target of light change event; keypad, screen or both
+        * @param aTarget New status of the target
+        */
+        void LightStatusChanged(TInt aTarget, CHWRMLight::TLightStatus aStatus);
+	
+		/**
+		* Returns iInRecording flag
+		* @return True or False
+		*/
+        TBool GetInRecordingFlag();
+        
+       /**
+		* set iInRecording flag
+		* 
+		*/
+        void SetInRecordingFlag(TBool);
+ 
+		/**
+		* Returns ifStopCalled flag
+		* @return True or False
+		*/
+        TBool GetIfStopCalled();
+        
+       /**
+		* set ifStopCalled flag
+		* 
+		*/
+        void SetIfStopCalled(TBool); 
+ 
+       /**
+		* return the iIsAttachToMemo flag
+		* 
+		*/
+        TBool IsAttachedToMemo();
+            	/** 
+		* Sets the AudioInput.
+		* 
+		* Leaves on error.
+		*/
+        void SetAudioInputL(CAudioInput::TAudioInputPreference aAudioInput);
+        
+       /**
+		* set sample rate during voice call
+		* 
+		*/
+        void ConfigSampleRateOfVoiceCallL();
+                 
+public:
+      friend class CVRDiskSpaceWatcher;        
+  
+	private: // new methods
+
+		/**
+		* Moves the playing position to beginning.
+		*/
+		void ResetPosition();
+
+		/**
+		* Stops playing or recording and notifies the observer
+		* registered with SetAutoStopObserver().
+		*/
+		void StopAndNotify();
+
+		/**
+		* Updates duration and position fields in CVRMemo
+		* and notifies the observer registered with SetObserver();
+		*/
+		void SyncAndNotify();
+
+		/**
+		* Creates and starts a CPeriodic timer object
+		* with a resolution of one second.
+		*/
+		void StartTimerL();
+
+		/**
+		* Stops and deletes the timer object.
+		*/
+		void StopTimer();
+
+		/**
+		* Called by the CPeriodic timer to handle a tick.
+		* Uses HandleTick() to do the actual work.
+		* @param aMdaRecorder Always a valid pointer to CVRMdaRecorder object
+		* @return ETrue to indicate that the timer should continue.
+		*/
+		static TInt TimerCallBack( TAny* aMdaRecorder );
+
+		/**
+		* Non-static variant of TimerCallBack (more convinient to implement).
+		*/
+		void HandleTick();
+
+		/**
+		* Moves the playing position forward or backward.
+		* @param aSeconds Negative for bacward, positive for forward
+		* @return EFalse if the position moved past the end
+		*/
+		TBool MovePositionL( TInt aSeconds );
+		
+		/**
+		* Configures the memo to be recorded.
+		*
+		* This function reads configuration data (bitrate, sampling rate,
+		* mono/stereo information from utility and configures the clip opened
+		* recording.
+		*
+		* Leaves on error.
+		*
+		*/
+		void ConfigureMemoL();
+		
+        
+        	/** 
+		* Creates the AudioInput.
+		* 
+		* Leaves on error.
+		*/
+        	void CreateAudioInputL();
+        
+      
+		/**
+		* Deletes the AudioInput.
+		*
+		*/
+        	void DeleteAudioInput();
+        
+        
+
+	private: // data
+		
+		/**
+		* For listening call events. Owned.
+		*/
+		CVRSystemEventHandler* iCurrentCallHandler;
+
+		/**
+		* Pointer to the media server audio recorder object. Owned.
+		*/
+		CMdaAudioRecorderUtility* iAudioRecorder;
+
+		/**
+		* Pointer to the voice memo object. Not owned.
+		*/
+		CVRMemo* iMemo;
+
+		/**
+		* Pointer to the timer object. Owned.
+		*/
+		CPeriodic* iTimer;
+
+		/**
+		* Pointers to the memo status observers. Not owned.
+		*/
+		RPointerArray<MVRObserver> iObservers;
+
+		/**
+		* Pointer to the auto stop (non-user initiated) observer. Not owned.
+		*/
+		MVRObserver* iAutoStopObserver;
+
+
+		/**
+		* ETrue if a memo is currently attached.
+		*/
+		TBool iIsAttachedToMemo;
+
+		/**
+		* Identifies the last media server error, or KErrNone.
+		*/
+		TInt iMediaServerError;
+
+		/**
+		* CActiveScheduler wrapper object. Owned.
+		*/
+		CActiveSchedulerWait iActiveWait;
+
+		/**
+		* Pointer to the generic error note object. Owned.
+		*/
+		CAknGlobalNote* iGlobalNote;
+
+		/**
+		* Pointer to a Error UI object. Owned.
+		* Used for showing system error notes
+		*/
+		CErrorUI* iErrorUI;
+
+        /**
+		* Pub&Sub property.
+		* For notifying voice dialing about the state of voice recorder
+		*/        
+        RProperty iPropVRState;
+
+        /**
+		* Pub&Sub property.
+		* For checking and setting the state of the screen saver.
+		*/
+        RProperty iPropScreenSaver;
+        
+		/**
+		* Fix for pause problem
+		*/
+		TBool iPause;
+
+		/**
+		* For storing current position
+		*/
+		TTimeIntervalMicroSeconds iPosition;
+		
+		/**
+		* For playing the recording start and stop tones. Owned.
+		*/
+		CVRTonePlayer* iTonePlayer;
+
+	    /**
+		* Pointer to the CHWRMLight. owned.
+		*/
+        CHWRMLight* iLight;
+
+	    /**
+		* State of the Light. If EFalse the dimmed light is set as off
+		* causes no action.
+		*/
+		TBool iDimLight;
+		
+		// Boolean to maintain attaching to memo state.
+		TBool iAttachingToMemo;
+
+       /**
+		* Returns if Voice Recorder start to record new file (real recording not necessary started) .
+		* @return True or False
+		*/
+        TBool ifInRecording;
+
+
+       /**
+		* Returns if Voice Recorder has called stoped, if so should not handle Pause .
+		* @return True or False
+		*/
+        TBool ifStopCalled;
+
+        
+        CVRDiskSpaceWatcher* iDiskSpaceWatcher;
+        CAudioInput* iAudioInput;
+        CAudioInput::TAudioInputPreference iCurrentAudioInput;
+
+
+  	};
+
+#endif // __CVRMDARECORDER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 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:  Monitors for Media removal
+*
+*/
+
+
+#include <e32base.h>
+#include <f32file.h>
+#include "CVRMediaRemovalMonitor.h"
+
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//
+CVRMediaRemovalMonitor::CVRMediaRemovalMonitor
+                  ( TInt aDrive, RFs& aFs, MVRMediaRemovalObserver* aObserver ) 
+                                                       : CActive(EPriorityHigh),
+                                                         iDrive( aDrive ),
+                                                         iFs( aFs ),
+                                                         iDiskRemoved( EFalse ),
+                                                         iObserver( aObserver )
+                                                         
+    {
+    CActiveScheduler::Add(this);
+    }
+
+
+// ---------------------------------------------------------------------------
+// 2nd Phase Constructor
+// ---------------------------------------------------------------------------
+//
+void CVRMediaRemovalMonitor::ConstructL()
+    {
+ 
+    // Initial state
+    TDriveInfo drive;
+  	User::LeaveIfError(iFs.Drive(drive, TInt(iDrive)));
+   	iDiskRemoved = (drive.iType == EMediaNotPresent);
+
+    // Start listening
+    TNotifyType notType(ENotifyDisk);
+    iFs.NotifyChange( notType, iStatus );
+    SetActive();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-Phased Constructor
+// ---------------------------------------------------------------------------
+//
+CVRMediaRemovalMonitor* CVRMediaRemovalMonitor::NewL
+                ( TInt aDrive, RFs& aFs, MVRMediaRemovalObserver* aObserver )
+    {
+    CVRMediaRemovalMonitor* self
+                               = CVRMediaRemovalMonitor::NewLC( aDrive,
+                                                                 aFs,
+                                                                 aObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-Phased Constructor
+// ---------------------------------------------------------------------------
+//
+CVRMediaRemovalMonitor* CVRMediaRemovalMonitor::NewLC
+               ( TInt aDrive, RFs& aFs, MVRMediaRemovalObserver* aObserver )
+    {
+    CVRMediaRemovalMonitor* self = 
+                          new( ELeave ) CVRMediaRemovalMonitor( aDrive,
+                                                                 aFs,
+                                                                 aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVRMediaRemovalMonitor::~CVRMediaRemovalMonitor()
+    {
+    Cancel();
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Service the request
+// ---------------------------------------------------------------------------
+//
+void CVRMediaRemovalMonitor::RunL()
+    {
+    // Re-subscribe to event.
+    TNotifyType notType(ENotifyDisk);
+    iFs.NotifyChange( notType, iStatus );
+    SetActive();
+    
+    // Check state
+    TDriveInfo drive;
+	User::LeaveIfError(iFs.Drive(drive, TInt(iDrive)));
+	
+	  // Notify Observer
+    switch(drive.iType)
+        {
+        case EMediaNotPresent:
+            {
+            if (!iDiskRemoved)
+                {
+                iObserver->HandleMMCEjectEventL( );
+                }
+                iDiskRemoved = ETrue;
+            break;
+            }
+        default:
+            {
+            if ( iDiskRemoved &&
+        		 ( drive.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) != 
+ 				 ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) 
+                {
+                //do nothing
+                iDiskRemoved = EFalse;
+                }
+            break;
+            }
+        }
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// Cancel NotifyChange request from file system
+// ---------------------------------------------------------------------------
+//
+void CVRMediaRemovalMonitor::DoCancel()
+    {
+    iFs.NotifyChangeCancel();
+    }
+    
+// ----------------------------------------------------------------------------
+// Handles a leave occurring in the request completion event handler RunL()
+// Don't care if client has a User::Leave() in RunL(), keep monitoring for events
+// ----------------------------------------------------------------------------
+//
+TInt CVRMediaRemovalMonitor::RunError(TInt aError)
+    {
+    return KErrNone;
+    }           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2007 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:  Monitors for media removal events
+*
+*/
+
+
+#ifndef CVRMEDIAREMOVALMONITER_H
+#define CVRMEDIAREMOVALMONITER_H
+
+#include <e32base.h>
+#include "MVRMediaRemovalObserver.h"
+
+/**
+ *  Class to monitors for File System dismount events
+ *  @lib Harvester
+ *  @since S60 3.0
+ */
+NONSHARABLE_CLASS( CVRMediaRemovalMonitor ) : public CActive
+    {
+
+public:
+
+    /**
+    * Two-phase constructor
+    * @param aDrive drive to monitor
+    * @param aFs file server session
+    * @param aObserver observer to the event
+    */
+    static CVRMediaRemovalMonitor* NewL(  TInt aDrive, 
+                                          RFs& aFs,
+                                          MVRMediaRemovalObserver* aObserver );
+    /**
+    * Two-phase constructor
+    * @param aDrive drive to monitor
+    * @param aFs file server session
+    * @param aObserver observer to the event
+    */
+    static CVRMediaRemovalMonitor* NewLC(  TInt aDrive, 
+                                           RFs& aFs,
+                                           MVRMediaRemovalObserver* aObserver );
+
+    /**
+    * Virtual destructor
+    */
+    virtual ~CVRMediaRemovalMonitor();
+
+protected: // From base class 
+    
+    /*
+    * From CActive
+    */
+    void RunL();
+    
+    /*
+    * From CActive
+    */
+    void DoCancel();
+
+    /**
+    *  From CActive
+    */
+    TInt RunError(TInt aError);    
+        
+private:
+
+    /**
+    *  C++ constructor
+    * @param aDrive drive to monitor
+    * @param aFs file server session
+    * @param aObserver observer to the event
+    */
+    CVRMediaRemovalMonitor(  TInt aDrive,
+                             RFs& aFs,  
+                             MVRMediaRemovalObserver* aObserver );
+
+    void ConstructL();
+
+private: // data
+    
+    TInt iDrive;        // Drive that is being monitored
+    RFs& iFs;           // File Session, not owned
+    TBool iDiskRemoved; // Is the disk inserted
+    
+    /*
+    * Observer interface to callback to an observer
+    */
+    MVRMediaRemovalObserver* iObserver;
+    };
+
+#endif // CVRMEDIAREMOVALMONITER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMemo.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,690 @@
+/*
+* 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 represents a voice memo. It is able to create new files,
+*     rename and delete existing files, and to save them to permanent storage.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <eikapp.h>
+#include <eikappui.h>
+#include <eikenv.h>
+#include <AknWaitDialog.h>
+#include <AknQueryDialog.h>
+#include <StringLoader.h>
+#include <bautils.h>
+#include <AknGlobalNote.h>
+#include <sysutil.h>
+#include <pathinfo.h>
+#include <systemwarninglevels.hrh>
+#include <AknNotifyStd.h>
+#include <coeutils.h>
+
+#include <voicerecorder.rsg>
+#include <VoiceRecorderUID.h>
+#include "CVRMemo.h"
+#include "VRConsts.h"
+#include "TVRRename.h"
+#include "VRUtils.h"
+
+// CONSTANTS
+// Max length is 300 millisecs over one minute so possible cropping
+// of the file after stop doesn't drop the length under one minute
+const TInt KVRMMSMemoMaxRecordLength( 60300000 );
+const TInt KVREstimateDelayDuration( 10000000 );
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CVRMemo::CVRMemo
+// 
+// ---------------------------------------------------------------------------
+//
+CVRMemo::CVRMemo()
+	: iDuration( 0 ), iPosition( 0 ), iMaxDuration( KVRDefaultMaxLength ),
+	iQuality( EQualityMMSOptimized ),iIsRecorded( EFalse )
+	{
+#ifndef RD_MULTIPLE_DRIVE	
+     iStoragePlace = EMemoStorePhoneMemory;
+#else
+     TRAP_IGNORE(iStorageDrive = VRUtils::DefaultMemoDriveL());
+#endif
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::~CVRMemo
+// 
+// ---------------------------------------------------------------------------
+//
+CVRMemo::~CVRMemo()
+	{
+	DeleteEmptyFile();
+	
+	// Close the file handle and file server session
+	iFile.Close();
+	iFs.Close();
+
+	delete iFileMan;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::ConstructL(TInt aDefaultAudioFormat)
+	{
+	User::LeaveIfError( iFs.Connect() );
+	iFs.ShareProtected();
+	
+	iFileMan = CFileMan::NewL( iFs );
+
+	iVRAudioFormat = aDefaultAudioFormat;
+
+	iQuality = VRUtils::QualityL();
+	if ( !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting )
+	     || iEmbedded )
+		{
+		iMaxDuration = KVRMMSMemoMaxRecordLength;
+		iQuality = EQualityMMSOptimized;
+		}
+	else 
+		{
+		TInt64 max( VRUtils::MaxLengthL() );
+		max = max * KVRMinuteAsMicroSeconds;
+		iMaxDuration = max;
+		}
+	
+	// Current storage place
+#ifndef RD_MULTIPLE_DRIVE	
+	iStoragePlace = VRUtils::MemoStoreL();	
+#else
+    iStorageDrive = VRUtils::MemoDriveL();
+#endif	
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::SetName
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::SetName( const TDesC& aFilename )
+	{
+	iFilename.Copy( aFilename );
+	TParsePtrC parse( iFilename );
+	iNamePtr.Set( parse.Name().Left( VRMEMONAMEMAXLENGTH ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::SetTemporaryNameL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::SetTemporaryNameL( TBool aEmbedded )
+	{
+	iEmbedded = aEmbedded;
+
+	// We can use the same handle, no need to create new name	
+	// Empty the file so it can be overwritten with new memo
+	if ( iEmbedded && !iExternalFileHandle )
+		{
+		if ( iFile.SubSessionHandle() )
+			{
+			iFile.SetSize( 0 );
+			return;
+			}
+		}		
+	
+	// Checks if the file handle can be found i.e if file is created 	
+	if ( iFile.SubSessionHandle() )
+		{	
+		// Retrieving new settings
+		TVRQuality newQuality( VRUtils::QualityL() );
+
+#ifndef RD_MULTIPLE_DRIVE
+		TVRMemoStore newStoragePlace ( VRUtils::MemoStoreL() );			
+
+		// If the current file is empty, we can reuse it if quality or 
+		// the storage place hasn't changed
+		if ( iQuality == newQuality && iStoragePlace == newStoragePlace )	
+		    {
+    	    TInt size( 0 );		
+    		iFile.Size( size );
+			
+			// If current file has already been recorded to, a new file has 
+			// to be generated 
+    		if ( !IsRecorded() )    		
+    			{
+    			iFile.SetSize( 0 );
+    			return;
+    			}
+    		}
+    	// The file has been created but the settings have been changed 
+    	// before using the file -> delete file and create a new one
+	    else
+	    	{
+	    	DeleteEmptyFile();
+	    	}
+
+#else
+        // for Multiple drives
+		TInt newStorageDrive ( VRUtils::MemoDriveL() );			
+
+		// If the current file is empty, we can reuse it if quality or 
+		// the storage place hasn't changed
+		if ( iQuality == newQuality && iStorageDrive == newStorageDrive )	
+		    {
+    	    TInt size( 0 );		
+    		iFile.Size( size );
+			
+			// If current file has already been recorded to, a new file has 
+			// to be generated 
+    		if ( !IsRecorded() )    		
+    			{
+    			iFile.SetSize( 0 );
+    			return;
+    			}
+    		}
+    	// The file has been created but the settings have been changed 
+    	// before using the file -> delete file and create a new one
+	    else
+	    	{
+	    	DeleteEmptyFile();
+	    	}
+
+
+#endif
+	    }
+
+	TFileName memoName;	
+    // Retrieve storage path
+	if ( iSavingLocation.Length() > 0 )
+		{
+		memoName = iSavingLocation;
+		}
+	else
+		{
+		VRUtils::MemoStoreDirectoryL( memoName );
+		}
+
+	// Recheck the quality before naming memo
+	if ( !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting )
+	     || iEmbedded )
+		{
+		iQuality = EQualityMMSOptimized;
+		}
+    else
+        {
+	    iQuality = VRUtils::QualityL();
+        }
+	
+	// Current storage place
+#ifndef RD_MULTIPLE_DRIVE		
+	iStoragePlace = VRUtils::MemoStoreL();
+#else
+    iStorageDrive = VRUtils::MemoDriveL();
+#endif
+
+    // Choose the file type
+	// Use amr if quality is MMS Optimized or we are recording
+	// in embedded mode, wav otherwise    
+	TVRFiletype type( EVRFileAmr );
+    if( iEmbedded || iQuality == EQualityMMSOptimized )
+		{
+		type = EVRFileAmr;
+		}
+		
+// **** updated for new CR, if it QualitySetting is Normal, save as WAV
+
+#ifdef  __AAC_ENCODER_PLUGIN
+    else if (iQuality == EQualityNormal)
+		{
+		type = EVRFileWav;
+		}
+		
+// ****  the following are updated for new CR, if it QualitySetting is High, save as mp4
+    else if (iQuality == EQualityHigh)
+		{
+		type = EVRFileAAC_LC;
+		}
+#else
+
+	else
+		{
+		type = EVRFileWav;
+		}
+
+#endif
+	
+    TFileName memoNameTemp;  
+    memoNameTemp = memoName;
+    memoNameTemp.Delete(memoName.Length()-1, 1);
+
+    TBool boolTemp = EFalse;
+
+    TInt intTemp = BaflUtils::IsFolder( iFs, memoNameTemp, boolTemp );
+    
+    if( ! boolTemp )
+        {
+        if( BaflUtils::FileExists( iFs, memoNameTemp ) )
+            {
+            if( intTemp != KErrNone )
+            	{
+            	User::LeaveIfError(intTemp);
+            	}
+            else
+            	{
+            	User::LeaveIfError(iFs.Delete( memoNameTemp ));
+            	}
+            }
+        }
+    
+	// Generate unique final file name
+    VRUtils::GenerateUniqueFilenameL( iFs, memoName, type );
+
+	// Make sure that file handles are not leaked
+	if ( iFile.SubSessionHandle() )
+		{
+		iFile.Close();
+		}
+	
+	// Ensure that path exists
+	BaflUtils::EnsurePathExistsL( iFs, memoName );
+	
+// Open the memo file
+ 
+#ifdef  __AAC_ENCODER_PLUGIN 
+    if((iQuality == EQualityHigh))  //for mp4 format	, 3gplib does not support EFileShareExclusive so EFileShareAny is used here
+    	{
+        User::LeaveIfError( iFile.Create( iFs, memoName, EFileWrite|EFileShareAny) );
+    	}
+    else  // for other formats
+    	{
+        User::LeaveIfError( iFile.Create( iFs, memoName, EFileShareExclusive|EFileWrite ) );		
+
+    	}
+#else  // it is not mp4, so still use the old flag
+        User::LeaveIfError( iFile.Create( iFs, memoName, EFileShareExclusive|EFileWrite ) );		
+ 
+#endif
+
+    TInt error = iFile.SetAtt(KEntryAttHidden, KEntryAttNormal );	  		
+	SetName( memoName );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::QueryAndDeleteL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRMemo::QueryAndDeleteL()
+	{
+	//Delete?\n%U" �qtn.query.common.conf.delete�
+	TParsePtrC parse( iFilename );
+	HBufC* text = StringLoader::LoadLC( R_QTN_QUERY_COMMON_CONF_DELETE,
+										parse.Name() );
+
+	// Show confirm note
+    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+    TInt result( dlg->ExecuteLD( R_VR_CONFIRMATION_QUERY, *text ) );
+    CleanupStack::PopAndDestroy( text );
+
+	if ( result )
+		{
+		DeleteL();
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::DeleteL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::DeleteL()
+	{
+	if ( iFile.SubSessionHandle() )
+		{
+		if ( iExternalFileHandle )
+			{
+			// We shouldn't delete the file handle, so let's
+			// just empty the file
+			iFile.SetSize( 0 );
+			}
+		else
+			{
+			TFileName fileName( KNullDesC );
+			iFile.FullName( fileName );
+			iFile.Close();
+
+			TInt err( iFileMan->Delete( fileName ) );
+			if ( err != KErrNone && err != KErrNotFound )
+				{
+				// Try to open the file again so we wont end up
+				// in goofy state without open file
+				User::LeaveIfError( iFile.Open( iFs, fileName,
+				                      EFileShareReadersOnly ) );
+				User::LeaveIfError( err );
+				}
+			}
+		}
+	SetName( KNullDesC );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::QueryAndRenameL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRMemo::QueryAndRenameL()
+	{
+	TVRRename renamer( iFs );
+	if ( renamer.RenameL( iFile, R_QTN_FLDR_ITEM_NAME_PRMPT ) )
+		{
+		TFileName name( KNullDesC );
+		iFile.FullName( name );
+		SetName( name );
+		
+		return ETrue;
+		}
+	return EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::SavePermanentlyL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::SavePermanentlyL( CAknGlobalNote* /*aWaitNote*/, 
+								TInt& /*aNoteId*/,
+								const TDesC& /*aLabel*/, 
+								TBool /*aProduceCopy*/ )
+
+	{
+	// Don't do anything if recording to external file handle
+	if ( iExternalFileHandle )
+	    {
+	    return;
+	    }
+	
+	// Change file open mode to read
+	TFileName name( KNullDesC );
+	iFile.FullName( name );
+	iFile.Close();
+	User::LeaveIfError( iFile.Open( iFs, 
+									name, 
+									EFileRead|EFileShareReadersOnly) );	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::IsValid
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRMemo::IsValid() const
+	{
+	return iFile.SubSessionHandle() == 0 ? EFalse : ETrue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::UpdateModifiedDate
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::UpdateModifiedDate()
+	{
+	if ( IsValid() )
+		{
+		TLocale locale;
+		iFile.Modified( iDateCreated );		
+		iDateCreated += locale.UniversalTimeOffset();
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::SetSavingLocationL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRMemo::SetSavingLocationL( const TDesC& aPath )
+	{
+	iSavingLocation = aPath;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::DeleteEmptyFile
+// Deletes an empty file that hasn't been recorded into. After deleting 
+// also decreases central repository's memo count value
+// ---------------------------------------------------------------------------
+//	
+TBool CVRMemo::DeleteEmptyFile()
+	{
+	if ( iFile.SubSessionHandle() != 0 )
+		{
+		TInt size( 0 );
+        
+        // Error code ignored
+        iFile.Size( size );
+		
+		if ( !iIsRecorded )
+		    {
+		    TFileName name( KNullDesC );
+		    iFile.FullName( name );
+		    
+			iFile.Close();
+			iFileMan->Delete( name );			
+	
+			// Central repository value has to be decreased by one because it 
+			// was increased earlier, when current filename was generated
+			VRUtils::SetMemoCount( VRUtils::MemoCount() - 1 );
+			
+			return ETrue;
+    	    }
+		}
+		return EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::SetFileHandle
+// 
+// ---------------------------------------------------------------------------
+//	
+void CVRMemo::SetFileHandle( RFile& aFile, const TBool aEmbedded )
+	{
+	iEmbedded = aEmbedded;
+	iExternalFileHandle = ETrue;
+	
+	iFile = aFile;
+
+	// Set the correct name for UI
+	TFileName name( KNullDesC );
+	iFile.FullName( name );
+	SetName( name );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::MaxDuration
+// Returns in microseconds the maximum time that can be still recorded with 
+// current settings (codecs and mem storage place)
+// ---------------------------------------------------------------------------
+//	
+const TTimeIntervalMicroSeconds& CVRMemo::MaxDuration()
+	{
+	if ( iEmbedded || 
+		 !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) ||
+	     iQuality == EQualityMMSOptimized )
+		{
+		//Voice Recorder change to remove 1 Min. limit for AMR for Stand alone recording
+		//if embedded allow 1 min recording for EQualityMMSOptimized(AMR)
+		//else allow 1 hour recording
+		if(iEmbedded)
+			{
+			iMaxDuration = KVRMMSMemoMaxRecordLength;
+			return iMaxDuration;
+			}		
+		}
+
+	// Make the first estimate after KVRFirstEstimateTime seconds recording
+	if ( Duration() < KVRFirstEstimateTime )
+		{
+		// Fetch the setting for high quality max length
+		TInt64 max( 0 );
+		TRAPD( err, max = VRUtils::MaxLengthL() );
+		if ( err != KErrNone )
+		    {
+		    max = KVRMMSMemoMaxRecordLength;
+		    }
+
+		max = max * KVRMinuteAsMicroSeconds;
+		iMaxDuration = max;
+
+		// Reset the time of last estimate
+		TDateTime date;
+		date.SetYear( -1 );
+		iLastEstimate = date; // invalid
+		
+		return iMaxDuration;
+		}
+
+	// Make new estimate if there's no last estimate or if 10 secs have passed
+	// from the previous estimate
+	TTime currentTime;
+	currentTime.HomeTime();
+	if ( iLastEstimate.DateTime().Year() == -1 ||
+		currentTime.MicroSecondsFrom( iLastEstimate ) >=
+		        TTimeIntervalMicroSeconds( KVREstimateDelayDuration ) )
+		{
+		iLastEstimate = currentTime;
+		
+		TEntry fileEntry;
+		TFileName name( KNullDesC );
+		iFile.FullName( name );		
+
+		TInt err = iFs.Entry( name, fileEntry );
+		if( err != KErrNone )
+			{
+			return iMaxDuration;
+			}
+
+		// Retrieve free space
+		TVolumeInfo volInfo;
+
+// old storage
+#ifndef RD_MULTIPLE_DRIVE   
+		TVRMemoStore memoStore( EMemoStorePhoneMemory );
+		TRAP( err, memoStore = VRUtils::MemoStoreL() );
+        if ( err != KErrNone )
+            {
+            memoStore = EMemoStorePhoneMemory;
+		    }
+ 
+		    if ( memoStore == EMemoStorePhoneMemory )
+			{
+			err = iFs.Volume( volInfo, EDriveC );			
+			}
+		else // memostore is MMC 
+			{
+			err = iFs.Volume( volInfo, EDriveE );
+			}
+			
+// multiple drive
+#else
+
+        TInt drive = 0;
+        TRAP_IGNORE(drive = VRUtils::DefaultMemoDriveL());
+		TRAP( err, drive = VRUtils::MemoDriveL() );
+        if ( err != KErrNone )
+            {
+            TRAP_IGNORE(drive = VRUtils::DefaultMemoDriveL());
+		    }       
+		err = iFs.Volume( volInfo, drive );			
+
+#endif
+
+		if( err != KErrNone )
+			{
+
+			return iMaxDuration;
+			}
+			
+		// Calculate the current disk consumption "speed" of the memo
+		TReal speed( fileEntry.iSize / ( Duration().Int64() / 
+			KVRSecondAsMicroSeconds ) );
+		
+		// The total free memory
+		TInt64 freeSpace(volInfo.iFree);
+		// Free memory if Critical Memory isn't taken into account
+		TInt64 freeSpaceMinusCrlevel( freeSpace -  KDRIVECCRITICALTHRESHOLD);
+		
+		// Estimate the time left
+		TInt64 value( freeSpaceMinusCrlevel / speed );
+		TTimeIntervalMicroSeconds estimate( value * KVRSecondAsMicroSeconds );
+
+		// Estimate should include also the length of clip
+		estimate = TTimeIntervalMicroSeconds( estimate.Int64()
+										 + Duration().Int64() );
+		if ( estimate < iMaxDuration)
+			{
+			iMaxDuration = estimate;
+			}
+		}
+
+	return iMaxDuration;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRMemo::IsRecorded
+// Returns the attribute iIsRecorded value that indicates if the recording of
+// the clip currently open is started or not
+// ---------------------------------------------------------------------------
+//	
+TBool CVRMemo::IsRecorded() const
+	{
+	return iIsRecorded;
+	}	 
+		
+
+// ---------------------------------------------------------------------------
+// CVRMemo::SetRecorded
+// Sets the value of iIsRecorded attribute
+// ---------------------------------------------------------------------------
+//		
+void CVRMemo::SetRecorded( TBool aRecorded )
+	{
+	iIsRecorded = aRecorded;
+	}
+	
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMemo.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,344 @@
+/*
+* 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 represents a voice memo. It is able to create new files,
+*     rename and delete existing files, and to save them to permanent storage.
+*
+*/
+
+
+#ifndef __CVRMEMO_H__
+#define __CVRMEMO_H__
+
+// INCLUDES
+#include <f32file.h>
+#include "voicerecorder.hrh"
+#include "VRConsts.h"
+
+// FORWARD DECLARATIONS
+class CAknWaitDialog;
+class CAknGlobalNote;
+
+// CLASS DEFINITION
+/**
+* This class represents a voice memo. It is able to create new files,
+* rename and delete existing files, and to save them to permanent storage.
+*/
+NONSHARABLE_CLASS( CVRMemo )
+	: public CBase
+	{
+
+    public: // enumerations
+
+        /*
+        * File format of voice recorder
+        * Possible values = 0 (AMR).
+        */
+        enum TVRFileFormat
+	        {
+	        EVRFormatAMR = 0	        
+	        };
+
+	public: // constructors and destructor
+
+		/**
+		* Default constructor.
+		*/
+		CVRMemo();
+
+		/**
+		* Destructor.
+		*/
+		~CVRMemo();
+
+		/**
+		* 2nd phase constructor.
+        * @param aDefaultAudioFormat Default audio file format of VR
+        *        Is really defined as TVRFileFormat, but for legacy reasons
+        *        not used that way yet.
+		*/
+		void ConstructL(TInt aDefaultAudioFormat);
+	
+	public: // new methods
+
+		/**
+		* Changes the file name of this memo object.
+		* @param aFilename New file name.
+		*/
+		void SetName( const TDesC& aFilename );
+
+		/**
+		* Sets the file name to a non-existent, new, name.
+		* @param aEmbedded is true if creating temporary name for embedded
+		* 				recording (different path)
+		*/
+		void SetTemporaryNameL( TBool aEmbedded = EFalse );
+
+		/**
+		* Shows a confirmation query and deletes the memo file
+		* if user accepts.
+		* @return ETrue if deletion was confirmed.
+		*/
+		TBool QueryAndDeleteL();
+
+		/**
+		* Deletes the current memo file.
+		* The memo file name is set to KNullDesC
+		*/
+		void DeleteL();
+
+		/**
+		* Queries the user for a new name for the current memo file.
+		* @return ETrue if rename was confirmed.
+		*/
+		TBool QueryAndRenameL();
+
+		/**
+		* Saves this memo to permanent storage. Removes the original
+		* copy from RAM unless otherwise requested.
+		* @param aProduceCopy Specify ETrue if you want to leave the
+		*                     original memo file intact.
+		*/
+		void SavePermanentlyL( CAknGlobalNote* aWaitNote, TInt& aNoteId,
+							   const TDesC& aLabel, TBool aProduceCopy = EFalse );
+
+		/**
+		* Checks wether the memo file represented by this object exists or not
+		* @return ETrue if the file exists
+		*/ 
+		TBool IsValid() const;
+
+		/**
+		* Re-reads the file modification timestamp.
+		*/
+		void UpdateModifiedDate();
+
+		/**
+		* Returns the duration of the memo in microseconds.
+		* @return Duration
+		*/
+		inline const TTimeIntervalMicroSeconds& Duration() const;
+
+		/**
+		* Sets the duration of the memo in microseconds.
+		* This is for data storage only (does not affect playback).
+		* @param aDuration The new duration.
+		*/
+		inline void SetDuration( const TTimeIntervalMicroSeconds& aDuration );
+
+		/**
+		* Returns the current playing position of the memo in microseconds.
+		* @return Playing position
+		*/
+		inline const TTimeIntervalMicroSeconds& Position() const;
+
+		/**
+		* Sets the current playing position of the memo in microseconds.
+		* This is for data storage only (does not affect playback).
+		* @param aPosition The new position
+		*/
+		inline void SetPosition( const TTimeIntervalMicroSeconds& aPosition );
+
+		/**
+		* Returns the maximum duration of the memo in microseconds.
+		* @return Maximum duration (for recording)
+		*/
+		const TTimeIntervalMicroSeconds& MaxDuration();
+
+		/**
+		* Returns the complete file name (path and everything).
+		* @return Reference to the memo name.
+		*/
+		inline const TDesC& Filename() const;
+
+		/**
+		* Returns the name portion of the complete file name.
+		* @return Reference to the memo name.
+		*/
+		inline const TPtrC& Name() const;
+
+		/**
+		* Returns the creation date of this file.
+		* @return Reference to the date.
+		*/
+		inline const TTime& DateCreated() const;
+
+		void SetSavingLocationL( const TDesC& aPath );
+		
+		/**
+		* Returns the handle of the memo file.
+		* You may have to check the SubSessionHandle() to
+		* now if the file has been opened
+		* @return Reference to the file handle
+		*/
+		inline RFile& File();
+
+		/**
+		* Returns the active quality setting.
+		* @return Quality setting of the active memo
+		*/
+		inline TVRQuality Quality() const;
+
+		/**
+		* Used to set the target file handle.
+		* @param aFile File handle
+		* @param aEmbedded True if recording for external application and
+		*		 handle must be kept open all the time
+		*/
+		void SetFileHandle( RFile& aFile, const TBool aEmbedded = EFalse );
+
+		/**
+		* Check if quality setting has changed and memo needs to be renamed.
+		* Should be called at least before starting to record first memo
+		* after application launch.
+		*/
+		void CheckQualityL();
+		
+		/**
+		* Sets the attribute iIsRecorded ETrue if recording is started. EFalse
+		* if memo is attached but recording isn't started.
+		* @param aRecorded ETrue when recording is started
+		*/
+		void SetRecorded( TBool aRecorded );
+		
+		/**
+		* Returns the current memo store.
+		* .
+		*/
+		inline TVRMemoStore MemoStore() const;
+
+		/**
+		* Returns the creation date of this file.
+		* @return Reference to the date.
+		*/
+		inline TInt StorageDrive() const;
+		
+		
+		
+	private:
+		/**
+		* Checks if iFile has an empty file open
+		* and deletes it, leaving iFile closed
+		* @return returns ETrue if file was deleted
+		*/
+		TBool DeleteEmptyFile();
+		
+		/**
+		* Checks if recording to the currently open memo is started
+		* Returns ETrue if recording is started, EFalse if not
+		*/
+		TBool IsRecorded() const;
+
+	private: // data
+
+		/**
+		* Length of this memo in microseconds.
+		*/
+		TTimeIntervalMicroSeconds iDuration;
+
+		/**
+		* Length of this memo in microseconds.
+		*/
+		TTimeIntervalMicroSeconds iPosition;
+
+		/**
+		* Maximum length for all memos.
+		*/
+		TTimeIntervalMicroSeconds iMaxDuration;
+
+		/**
+		* The final path and file name of the memo.
+		* Memo is moved to this path from temp drive when 
+		* when it's saved
+		*/
+		TFileName iFilename;
+
+		/**
+		* Handle to actual file system file
+		*/
+		RFile iFile;
+
+		/**
+		* The name of this memo (the file name minus extension).
+		* This is a ptr descriptor to the iFileName;
+		*/
+		TPtrC iNamePtr;
+
+		/**
+		* The creation time of this memo.
+		*/
+		TTime iDateCreated;
+
+		/**
+		* A reference to a connected file server session.
+		* Used as a short cut. Not owned.
+		*/
+		RFs iFs;
+
+		/**
+		* Pointer to a file manager object. Owned.
+		*/
+		CFileMan* iFileMan;
+
+		/**
+		* The directory where memos will be saved.
+		*/
+		TFileName iSavingLocation;
+
+		/**
+		* Default audio format for recording audio clip
+		*/
+		TInt iVRAudioFormat;
+        
+		/**
+		* Are we in embedded mode
+		*/        
+		TBool iEmbedded;
+		
+		/**
+		* Is the RFile received from outside or should we close it
+		*/        
+		TBool iExternalFileHandle;		
+
+        /**
+        * Cached quality setting
+        */
+        TVRQuality iQuality;
+		
+		/**
+		* Cached storage place setting
+		*/
+		TVRMemoStore iStoragePlace;
+
+		/**
+		* Cached storage drive setting
+		*/
+		TInt iStorageDrive;
+		
+		/**
+		* Last time that the estimate was updated
+		*/
+		TTime iLastEstimate;
+		
+		/**
+		* Tells if recording of current open memo is started. 
+		* EFalse: not recording started
+		* ETrue: recording is started
+		*/
+		TBool iIsRecorded;
+	};
+
+#include "CVRMemo.inl"
+
+#endif	// __CVRMEMO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRMemo.inl	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* 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:  Inline versions of some member functions
+*
+*/
+
+
+inline const TTimeIntervalMicroSeconds& CVRMemo::Duration() const
+	{
+	return iDuration;
+	}
+
+inline void CVRMemo::SetDuration( const TTimeIntervalMicroSeconds& aDuration )
+	{
+	iDuration = aDuration;
+	}
+
+inline const TTimeIntervalMicroSeconds& CVRMemo::Position() const
+	{
+	return iPosition;
+	}
+
+inline void CVRMemo::SetPosition( const TTimeIntervalMicroSeconds& aPosition )
+	{
+	iPosition = aPosition;
+	}
+
+
+inline const TDesC& CVRMemo::Filename() const
+	{
+	return iFilename;
+	}
+
+inline const TTime& CVRMemo::DateCreated() const
+	{
+	return iDateCreated;
+	}
+
+inline const TPtrC& CVRMemo::Name() const
+	{
+	return iNamePtr;
+	}
+
+inline RFile& CVRMemo::File()
+	{
+	return iFile;
+	}
+
+inline TVRQuality CVRMemo::Quality() const
+	{
+	return iQuality;
+	}
+
+	
+inline TVRMemoStore CVRMemo::MemoStore() const
+   {
+   return iStoragePlace;
+   }
+
+inline TInt CVRMemo::StorageDrive() const
+  {
+  return iStorageDrive;
+  }
+
+// End of file
--- /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);
+    }
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRecViewActivationContainer.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* 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 empty control that is displayed until application is fully
+*	  constructed
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknDef.h> // For layout change event definitions
+#include <AknsUtils.h>
+#include <AknsDrawUtils.h>
+#include <AknsBasicBackgroundControlContext.h>
+
+#include "CVRRecViewActivationContainer.h"
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::CVRRecViewActivationContainer
+//
+// ---------------------------------------------------------------------------
+//
+CVRRecViewActivationContainer::CVRRecViewActivationContainer()
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::~CVRRecViewActivationContainer
+//
+// ---------------------------------------------------------------------------
+//
+CVRRecViewActivationContainer::~CVRRecViewActivationContainer()
+	{
+	delete iBackgroundSkinContext;	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewActivationContainer::ConstructL( const TRect& aRect )
+	{
+	CreateWindowL();
+
+	// Get the skin instance
+	iSkinInstance = AknsUtils::SkinInstance();
+
+	// Create background control context for skinning the background
+	iBackgroundSkinContext = CAknsBasicBackgroundControlContext::NewL( 
+			KAknsIIDQsnBgAreaMain, aRect, ETrue );
+
+    SetRect( aRect );
+	} 
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::HandleResourceChange
+//
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewActivationContainer::HandleResourceChange(TInt /*aType*/)
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::CountComponentControls
+//
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewActivationContainer::CountComponentControls() const
+	{
+	return 0;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::ComponentControl
+//
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CVRRecViewActivationContainer::ComponentControl( 
+													TInt /*aIndex*/ ) const
+	{
+	return NULL;
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::OfferKeyEventL
+//
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CVRRecViewActivationContainer::OfferKeyEventL( 
+		const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/ )
+	{
+	return EKeyWasNotConsumed;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::SizeChanged
+//
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewActivationContainer::SizeChanged()
+	{
+	TRect bgRect;
+	AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, bgRect);
+	iBackgroundSkinContext->SetRect( bgRect );		
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::Draw
+//
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewActivationContainer::Draw( const TRect& /*aRect*/ ) const
+	{
+	CWindowGc& gc = SystemGc();
+
+	// Fill the background with the background bitmap from the skin
+	// Note: if the skin doesn't define a background the area is simply
+	// cleared (which is OK for us).
+	AknsDrawUtils::Background( iSkinInstance, iBackgroundSkinContext,
+			this, gc, Rect() );
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewActivationContainer::MopSupplyObject
+//
+// ---------------------------------------------------------------------------
+//
+TTypeUid::Ptr CVRRecViewActivationContainer::MopSupplyObject(TTypeUid aId)
+	{
+	
+	if ( aId.iUid == MAknsControlContext::ETypeId )
+		{
+		// Return the control context for the childs
+		return MAknsControlContext::SupplyMopObject( aId, 
+													 iBackgroundSkinContext );
+		
+		}
+	return CCoeControl::MopSupplyObject( aId );
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRecViewActivationContainer.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,148 @@
+/*
+* 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 empty control that is displayed until application is fully
+*	  constructed
+*
+*/
+
+
+#ifndef CVRRECVIEWACTIVATIONCONTAINER_H
+#define CVRRECVIEWACTIVATIONCONTAINER_H
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <coecntrl.h>
+#include "MVRObserver.h"
+#include <remconcoreapitargetobserver.h>
+#include <remconinterfaceselector.h>
+#include <remconcoreapitarget.h>
+#include <AknUtils.h>
+
+// FORWARD DECLARATIONS
+class CVRButtonPanel;
+class CVRStateInfoPanel;
+class MVRButtonPanelModel;
+class MVRDecoratorModel;
+class MVRStateInfoModel;
+class MVRKeyObserver;
+class MVRVolumeChangeObserver;
+class CVRRecView;
+class CAknNavigationDecorator;
+class CAknNavigationControlContainer;
+class MAknsSkinInstance;
+class CAknsBasicBackgroundControlContext;
+
+
+// CLASS DEFINITION
+/**
+* An empty control that is displayed until application is fully
+* constructed
+*/
+NONSHARABLE_CLASS( CVRRecViewActivationContainer )
+	: public CCoeControl
+	{
+	public:	// Constructors and destructor
+
+		/**
+		* Default constructor.
+		*/
+		CVRRecViewActivationContainer();
+
+		/**
+		* Destructor
+		*/
+		~CVRRecViewActivationContainer();
+
+		/**
+		* 2nd phase constructor
+		* @param aRect The screen rectangle for this component
+		*/
+		void ConstructL( const TRect& aRect );
+	public: // from CCoeControl
+		/*
+		*
+		*/
+		void HandleResourceChange(TInt aType); 
+
+	public:
+		// from CCoeControl
+
+		/**
+		* Called by the framework to get the number of sub-components
+		* contained in this component.
+		* @return The number of component controls contained by this control
+		*/
+		TInt CountComponentControls() const;
+
+		/**
+		* Called by the framework to get a specified sub-component
+		* of this component.
+		* @param aIndex The index of the component to get.
+		* @return The component control with an index of aIndex.
+		*/
+		CCoeControl* ComponentControl( TInt aIndex ) const;
+
+		/**
+		* When a key event occurs, the control framework calls this function
+		* for each control on the control stack, until one of them can process
+		* the key event (and returns EKeyWasConsumed).
+		* @param aKeyEvent The key event.
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown
+		* @return Indicates whether or not the key event was used by this
+		*         control
+		*/
+		TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+									 TEventCode aType );
+
+	private: // from CCoeControl
+
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		void SizeChanged();
+
+		/**
+		* Draws this control.
+		* @param aRect The area that needs updating. Ignored.
+		*/
+		void Draw( const TRect& aRect ) const;
+
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+
+		/**
+		* Handles a change to the application's resources
+		* @param aType The type of changed resource
+		*/
+		void HandleResourceChangeL( TInt aType );
+
+	private: // data
+	    /**
+	    * Skin instance from AknsUtils. Not owned.
+	    */
+		MAknsSkinInstance* iSkinInstance;
+
+        /**
+        * Background context for clearing screen. Owned.
+        */
+		CAknsBasicBackgroundControlContext* iBackgroundSkinContext;	
+	};
+
+#endif // CVRRECVIEWACTIVATIONCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRecViewContainer.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,707 @@
+/*
+* 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: 
+*     A compound control class. It is responsible for owning CVRButtonPanel
+*     and CVRStateInfoPanel. It also handles the changing of softkeys, menubar
+*     and volume control.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <eikenv.h>
+#include <bldvariant.hrh>
+
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <eikspane.h>
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <aknappui.h>
+#include <aknsoundsystem.h>
+#include <aknview.h>
+#include <eikbtgpc.h>
+#include <eikmenub.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <AknsDrawUtils.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include <akncontext.h>
+#include <applayout.cdl.h>
+#include <voicerecorder.rsg>
+#include <AknDef.h>		// For layout change event definitions
+#include <AknVolumePopup.h>
+#include <featmgr.h>	// Feature manager
+
+#include "CVRRecViewContainer.h"
+#include "CVRButtonPanel.h"
+#include "CVRStateInfoPanel.h"
+#include "MVRDecoratorModel.h"
+#include "MVRVolumeChangeObserver.h"
+#include "CVRRecView.h"
+#include "MVRKeyObserver.h"
+#include "CVRRemConObserver.h"
+#include "VRConsts.h"
+
+#include <VoiceRecorderUID.h>
+
+#include "VRUtils.h"
+
+// ================= MEMBER FUNCTIONS =========================================
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::CVRRecViewContainer
+//
+// ----------------------------------------------------------------------------
+//
+CVRRecViewContainer::CVRRecViewContainer()
+	{
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::~CVRRecViewContainer
+//
+// ----------------------------------------------------------------------------
+//
+CVRRecViewContainer::~CVRRecViewContainer()
+	{
+	if ( iModel )
+		{
+		iModel->SetDecoratorObserver( NULL );
+		}
+	delete iButtonPanel;
+	delete iStateInfoPanel;
+	delete iIhfVolumeControl;
+	delete iEarPieceVolumeControl;
+
+	delete iBackgroundSkinContext;
+	
+	delete iRemConObserver;
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::ConstructL
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::ConstructL( const TRect& aRect,
+									  MVRButtonPanelModel* aButtonModel,
+									  MVRDecoratorModel* aDecoratorModel,
+									  MVRStateInfoModel* aStateInfoModel,
+									  CVRRecView* aOwningView )
+	{
+	CreateWindowL();
+
+	iRemConObserver = CVRRemConObserver::NewL( this );
+
+	// Get the skin instance
+	iSkinInstance = AknsUtils::SkinInstance();
+	if ( !iSkinInstance )
+	    {
+	    User::Leave( KErrNoMemory );
+	    }
+
+	// Create background control context for skinning the background
+	iBackgroundSkinContext = CAknsBasicBackgroundControlContext::NewL( 
+			KAknsIIDQsnBgAreaMain, aRect, ETrue );
+
+	// Refer to Series 60 European Application LAF for coordinate descriptions
+	iButtonPanel = new( ELeave ) CVRButtonPanel( aButtonModel, 
+												 aOwningView->Id() );
+	iButtonPanel->SetContainerWindowL( *this );
+	iButtonPanel->ConstructL();
+	iButtonPanel->SetMopParent( this );
+	TAknWindowLineLayout buttonPanelLayout = AppLayout::grid_vorec_pane();   
+    AknLayoutUtils::LayoutControl( iButtonPanel, Rect(), buttonPanelLayout );
+
+	// Refer to Series 60 European Application LAF for coordinate descriptions
+	iStateInfoPanel = new( ELeave ) CVRStateInfoPanel( aStateInfoModel, 
+													   aOwningView->Id() );
+	iStateInfoPanel->SetContainerWindowL( *this );
+	iStateInfoPanel->ConstructL();
+    iStateInfoPanel->SetRect( TRect( TPoint( 0,0 ), aRect.Size() ) );
+
+	// Set state info panel's MOP-parent so that it can get hold of the bg 
+	// control context
+	iStateInfoPanel->SetMopParent( this );
+
+	iNaviPane = static_cast< CAknNavigationControlContainer* >(
+				iEikonEnv->AppUiFactory()->StatusPane()->ControlL(
+				TUid::Uid( EEikStatusPaneUidNavi ) ) );
+
+
+	// Volume indicator with IHF icon
+	iIhfVolumeControl = iNaviPane->CreateVolumeIndicatorL(
+										 R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
+    // when touch UI is enabled
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        static_cast<CAknVolumeControl*>
+                  ( iIhfVolumeControl->DecoratedControl() )->SetObserver( this );     
+        }
+										     
+    iEarPieceVolumeControl = iNaviPane->CreateVolumeIndicatorL(
+	                            R_AVKON_NAVI_PANE_EARPIECE_VOLUME_INDICATOR );
+
+    // when touch UI is enabled
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        static_cast<CAknVolumeControl*>
+                  ( iEarPieceVolumeControl->DecoratedControl() )->SetObserver( this );     
+        }
+
+    iIhfVolumeControl->MakeVisible( ETrue );
+    iEarPieceVolumeControl->MakeVisible( ETrue );
+
+	iModel = aDecoratorModel;
+	iModel->SetDecoratorObserver( this );
+
+	iOwningView = aOwningView;
+
+    SetRect( aRect );
+	// Update child control rects and other co-ordinates for current
+	// layout ( Euro/APAC/Arabic&Hebrew )
+	UpdateLayoutL();
+	} 
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::GetHelpContext
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+	{
+	aContext.iMajor = TUid::Uid( KVoiceRecorderAppUID3 );
+	if ( iModel )
+		{
+		iModel->GetHelpContext( aContext );
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::CountComponentControls
+//
+// ----------------------------------------------------------------------------
+//
+TInt CVRRecViewContainer::CountComponentControls() const
+	{
+	return 2;
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::ComponentControl
+//
+// ----------------------------------------------------------------------------
+//
+CCoeControl* CVRRecViewContainer::ComponentControl( TInt aIndex ) const
+	{
+	switch ( aIndex )
+		{
+		case 0:
+			{
+			return iButtonPanel;
+			}
+		case 1:
+			{
+			return iStateInfoPanel;
+			}
+
+		case 2:
+			{
+			return iIhfVolumeControl->DecoratedControl();
+			}
+		case 3:
+			{
+            return iEarPieceVolumeControl->DecoratedControl();
+			} 
+
+		default:
+			{
+			return NULL;
+			}
+		}
+	}
+
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::OfferKeyEventL
+//
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CVRRecViewContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+												  TEventCode aType )
+	{
+	TBool consumed( EFalse );
+
+			if ( aType == EEventKeyDown )
+				{
+				aType = aType;
+				}
+
+	if ( iKeyObserver )
+		{
+		consumed = iKeyObserver->ProcessKeyEventL( aKeyEvent, aType );
+		}
+
+	if ( !consumed )
+		{
+		if ( iActiveVolumeControl && iVolumeChangeObserver->CanSetVolume() && 
+			   !FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys ) )
+			{
+			if ( ( aKeyEvent.iCode == EKeyLeftArrow ) ||
+				 ( aKeyEvent.iCode == EKeyRightArrow ) )
+				{
+				HandleVolumeChangeL( aKeyEvent, aType );
+				}
+			}
+
+		return iButtonPanel->OfferKeyEventL( aKeyEvent, aType );
+		}
+
+	return EKeyWasNotConsumed;
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::SizeChanged
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::SizeChanged()
+	{
+	iStateInfoPanel->SetRect( Rect() );
+
+	TRect bgRect;
+	AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, bgRect);
+	iBackgroundSkinContext->SetRect( bgRect );	
+
+	TAknWindowLineLayout buttonPanelLayout = AppLayout::grid_vorec_pane();   
+    AknLayoutUtils::LayoutControl( iButtonPanel, Rect(), buttonPanelLayout );
+
+	TAknWindowLineLayout statusPaneLayout = 
+								AknLayout::status_pane( Rect(), 0 );
+								
+    TAknLayoutRect statusPanelRect;
+    statusPanelRect.LayoutRect( Rect(), statusPaneLayout );
+
+	TAknWindowLineLayout verticalLineLayout = 
+								AppLayout::Voice_Recorder_elements_Line_2();
+								
+	iVerticalLineRect.LayoutRect( statusPanelRect.Rect(), verticalLineLayout );
+
+	TAknWindowLineLayout horizontalLineLayout = 
+								AppLayout::Voice_Recorder_elements_Line_3();
+								
+	iHorizontalLineRect.LayoutRect( statusPanelRect.Rect(), 
+									horizontalLineLayout );
+	}
+
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::Draw
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::Draw( const TRect& /*aRect*/ ) const
+	{
+	CWindowGc& gc = SystemGc();
+
+	// Fill the background with the background bitmap from the skin
+	// Note: if the skin doesn't define a background the area is simply
+	// cleared (which is OK for us).
+	AknsDrawUtils::Background( iSkinInstance, iBackgroundSkinContext,
+			this, gc, Rect() );
+
+	iVerticalLineRect.DrawRect( gc );
+	iHorizontalLineRect.DrawRect( gc );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::SetKeyObserver
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::SetKeyObserver( MVRKeyObserver* aObserver )
+	{
+	iKeyObserver = aObserver;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::SetVolumeChangeObserver
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::SetVolumeChangeObserver(
+										  MVRVolumeChangeObserver* aObserver )
+	{
+	iVolumeChangeObserver = aObserver;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::Update
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::Update( TVRUpdateCommand aCommand )
+	{
+	
+	if ( aCommand == EVRUpdateCBA )
+		{
+		UpdateCBA();
+		return;
+		}
+		
+	// Change menubar
+	iOwningView->MenuBar()->SetMenuTitleResourceId(
+												iModel->MenuBarResourceId() );
+	
+	// error ignored, this rarely leaves but just to make sure
+	TRAP_IGNORE( iNaviPane = static_cast< CAknNavigationControlContainer* >(iEikonEnv->AppUiFactory()->StatusPane()->ControlL( // CSI: 42 #
+				TUid::Uid( EEikStatusPaneUidNavi ) ) ) ); 
+
+	iNaviPane->DrawNow();
+	
+	UpdateCBA();
+
+	TRAP_IGNORE( UpdateVolumeControlL() );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::UpdateCBA
+// Updates the CBA buttons (LSK, MSK & RSK) according to the current state and 
+// draws them
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::UpdateCBA()
+	{
+	// Change CBA buttons
+	// Ignore any errors. SetCommandSetL() will leave if there is
+	// not enough memory
+	CEikButtonGroupContainer* cba = iOwningView->Cba();
+	
+	// e.g. recording is about to start and options menu shouldn't be opened
+	if ( iModel->CbaResourceId() == R_VR_SOFTKEYS_OPTIONS_EXIT_SELECT &&
+			!iModel->CBAEnabled() )
+		{
+		// Same texts remain but disables LSK and RSK use
+		TRAP_IGNORE( cba->SetCommandSetL( 
+						R_VR_SOFTKEYS_OPTIONS_EXIT_SELECT_NO_COMMAND ) );
+		}
+	
+	// jeffery: added for CR to disable "Pause" key, will remove it later when plugin is updatedd
+
+#ifdef  __AAC_ENCODER_PLUGIN   
+	if (!iOwningView->IsEmbedded() && (iOwningView->Quality() == EQualityHigh) && (iOwningView->GetStateId() == EStateRecording ))
+
+    	{
+    	TRAP_IGNORE(cba->SetCommandSetL(R_VR_SOFTKEYS_STOP_SELECT));    	 
+    	} 
+#endif
+	
+	else
+		{
+		// Normal behaviour
+		TRAP_IGNORE( cba->SetCommandSetL( iModel->CbaResourceId() ) );	
+		}	
+	
+	cba->DrawNow();
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::UpdateVolumeControlL
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::UpdateVolumeControlL()
+	{
+    TVRVolumeControlState state; 	
+    TInt volume;
+
+    // Get volume control data from model
+    iModel->GetVolumeControlState( state, volume );
+
+    if ( iActiveVolumeControl )
+	    {
+	    // pop the previous volume control if there was one
+	    iNaviPane->Pop();
+	    }
+
+    switch ( state )
+	    {
+	    case EDisabled:
+		    {
+		    iActiveVolumeControl = NULL;
+		    break;
+		    }
+
+	    case EIhf:
+		    {
+
+		    iActiveVolumeControl = iIhfVolumeControl;
+
+		    break;
+		    }
+
+	    case EEarPiece:
+		    {
+
+		    iActiveVolumeControl = iEarPieceVolumeControl;
+		    break;
+		    }
+        }
+
+    if ( state != EDisabled )
+        if(iActiveVolumeControl != NULL)
+	    {
+	    iNaviPane->PushL( *iActiveVolumeControl );
+	    CAknVolumeControl* control = static_cast< CAknVolumeControl* >(
+								    iActiveVolumeControl->DecoratedControl() );
+	    
+	    
+	    control->SetValue( volume );
+	    }
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::UpdateLayoutL
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::UpdateLayoutL()
+	{
+	SizeChanged();
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::MopSupplyObject
+//
+// ----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CVRRecViewContainer::MopSupplyObject(TTypeUid aId)
+	{
+	if ( aId.iUid == MAknsControlContext::ETypeId )
+		{
+		// Return the control context for the childs
+		return MAknsControlContext::SupplyMopObject( aId, iBackgroundSkinContext );
+		}
+	return CCoeControl::MopSupplyObject( aId );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::HandleResourceChangeL
+//
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::HandleResourceChangeL( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	
+	if ( aType == KEikDynamicLayoutVariantSwitch )
+		{
+		UpdateLayoutL();
+		}
+	else if ( aType == KAknsMessageSkinChange )
+		{
+		// New skin instance is loaded
+		iSkinInstance = AknsUtils::SkinInstance();
+		}
+	
+	// Inform other controls	
+	iButtonPanel->HandleResourceChangeL( aType );
+	iStateInfoPanel->HandleResourceChangeL( aType );	
+		
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRecViewContainer::HandleVolumeChangeL
+//
+// ----------------------------------------------------------------------------
+//
+TInt CVRRecViewContainer::HandleVolumeChangeL( const TKeyEvent& aKeyEvent,
+											   TEventCode aType )
+	{
+	
+	if( iActiveVolumeControl == NULL || iVolumeChangeObserver == NULL || !iVolumeChangeObserver->CanSetVolume() )
+		{
+		// Can't process volume change yet
+		return KErrNotReady;
+		}
+	
+	CAknAppUi* appUi = static_cast< CAknAppUi* >(
+										  iEikonEnv->EikAppUi() );
+	CAknVolumeControl* control = static_cast< CAknVolumeControl* >
+					( iActiveVolumeControl->DecoratedControl() );
+
+	TInt prevLevel( control->Value() );
+	
+	control->OfferKeyEventL( aKeyEvent, aType );
+
+	// Values range from 1 to 10 so the cast is ok
+	TUint8 newValue( ( TUint8 ) control->Value() );
+
+	if ( iVolumeChangeObserver )
+		{
+		iVolumeChangeObserver->SetVolume( newValue,
+										  KVRMaxVolumeSteps );
+		}
+
+	// determine if the volume was already at either end
+	// (of the scale)
+	// play a system sound in that case.
+	if ( prevLevel == control->Value() )
+		{
+		TInt sid( EAvkonSIDVolumeMaxTone );
+		if ( prevLevel == 1 )
+			{
+			sid = EAvkonSIDVolumeMinTone;
+			}
+		appUi->KeySounds()->PlaySound( sid );
+		return KErrTooBig;
+		}	
+		
+	return KErrNone;
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CVRRecViewContainer::HandlePointerEventL
+// Handles pointer events by passing them on to controls
+// ---------------------------------------------------------------------------
+//		
+void CVRRecViewContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+	{
+	if( AknLayoutUtils::PenEnabled() )
+		{
+		CCoeControl::HandlePointerEventL(aPointerEvent);	
+		iButtonPanel->HandlePointerEventL(aPointerEvent);
+
+		if ( iActiveVolumeControl && iVolumeChangeObserver->CanSetVolume() )
+	    	{
+	    	if ( (iOwningView->GetStateId() == EStatePlayingPaused ) || (iOwningView->GetStateId() == EStatePlaying ) )
+	    		{
+	    		// pop the previous volume control if there was one
+	    		CAknVolumeControl* control = static_cast< CAknVolumeControl* >
+	    						( iActiveVolumeControl->DecoratedControl() );
+	    		CAknVolumePopup* popup = static_cast<CAknVolumePopup*> ( control->Parent() );
+	    		TRect volumePopupRect( popup->Rect() );
+	    		volumePopupRect.Move( popup->Position() );
+	    		if( volumePopupRect.Contains(aPointerEvent.iParentPosition) )
+	    			{
+	    			TRAP_IGNORE( popup->ShowVolumePopupL() );
+	    			}
+		    	}
+	    	}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CVRRecViewContainer::FocusedButton
+// Returns the currently focused button in Button Panel
+// ---------------------------------------------------------------------------
+//		
+TInt CVRRecViewContainer::FocusedButton() const
+	{
+	return iButtonPanel->FocusedButton();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewContainer::UpdateButtonPanel
+// Gives the update command to Button Panel
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewContainer::UpdateButtonPanel( TVRUpdateCommand aCommand )
+	{
+	iButtonPanel->Update( aCommand );
+	}
+
+	
+// ----------------------------------------------------------------------------
+// void CVRRecViewContainer::HandleControlEventL
+// ----------------------------------------------------------------------------
+//
+void CVRRecViewContainer::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
+	{
+    // Added for touch UI to adjust volume
+	if( AknLayoutUtils::PenEnabled() )
+		{			
+		switch( aEventType )
+			{
+			case EEventStateChanged:
+				{
+				if ( iActiveVolumeControl && aControl == static_cast< CAknVolumeControl*>(iActiveVolumeControl->DecoratedControl()))
+ 				    {
+						if(iVolumeChangeObserver == NULL || !iVolumeChangeObserver->CanSetVolume() )
+						{
+						// Can't process volume change yet
+						User::Leave(KErrNotReady);
+						}
+	
+						CAknAppUi* appUi = static_cast< CAknAppUi* >(iEikonEnv->EikAppUi() );
+						CAknVolumeControl* control = static_cast< CAknVolumeControl* >(iActiveVolumeControl->DecoratedControl() );
+
+						TInt prevLevel( control->Value() );
+	
+						// Values range from 1 to 10 so the cast is ok
+						TUint8 newValue( ( TUint8 ) control->Value() );
+
+						if ( iVolumeChangeObserver )
+							{
+							iVolumeChangeObserver->SetVolume( newValue, KVRMaxVolumeSteps );
+							}
+
+						TInt sid( EAvkonSIDStandardKeyClick );
+
+						if ( prevLevel <= KVRVolumeControlMin )
+							{
+							sid = EAvkonSIDVolumeMinTone;
+							}
+						else if ( prevLevel >= KVRVolumeControlMax )
+							{
+							sid = EAvkonSIDVolumeMaxTone;
+							}
+						appUi->KeySounds()->PlaySound( sid );
+						User::Leave(KErrTooBig);
+						
+ 				    }
+				else if(iActiveVolumeControl == NULL)
+					{
+						User::Leave(KErrNotReady);
+					}
+                }
+			default:
+				break;                
+            }
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRecViewContainer.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,315 @@
+/*
+* 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: 
+*     A compound control class. It is responsible for owning CVRButtonPanel
+*     and CVRStateInfoPanel. It also handles the changing of softkeys, menubar
+*     and volume control.
+*
+*/
+
+
+#ifndef __CVRRECVIEWCONTAINER_H__
+#define __CVRRECVIEWCONTAINER_H__
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <coecntrl.h>
+#include "MVRObserver.h"
+#include "MVRVolumeEventObserver.h"
+#include <AknUtils.h>
+
+// FORWARD DECLARATIONS
+class CVRButtonPanel;
+class CVRStateInfoPanel;
+class MVRButtonPanelModel;
+class MVRDecoratorModel;
+class MVRStateInfoModel;
+class MVRKeyObserver;
+class MVRVolumeChangeObserver;
+class MVRVolumeEventObserver;
+class CVRRecView;
+class CAknNavigationDecorator;
+class CAknNavigationControlContainer;
+class MAknsSkinInstance;
+class CAknsBasicBackgroundControlContext;
+class CVRRemConObserver;
+
+
+// CLASS DEFINITION
+/**
+* A compound control class. It is responsible for owning CVRButtonPanel
+* and CVRStateInfoPanel. It also handles the changing of softkeys, menubar,
+* volume control and navipane. It also observers volume changes through
+* MRemConCoreApiTargetObserver interface.
+*/
+NONSHARABLE_CLASS( CVRRecViewContainer )
+	: public CCoeControl, 
+	  public MVRObserver, 
+	  public MVRVolumeEventObserver,
+	  public MCoeControlObserver
+	{
+	public:	// Constructors and destructor
+
+		/**
+		* Default constructor.
+		*/
+		CVRRecViewContainer();
+
+		/**
+		* Destructor
+		*/
+		~CVRRecViewContainer();
+
+		/**
+		* 2nd phase constructor
+		* @param aRect The screen rectangle for this component
+		* @param aButtonModelPointer to a button panel observer (or NULL)
+		* @param aDecoratorModel Pointer to a decorator observer (or NULL)
+		* @param aStateInfoModel Pointer to a state info observer (or NULL)
+		* @param aOwningView Pointer to the view that owns us.
+		*/
+		void ConstructL( const TRect& aRect,
+						 MVRButtonPanelModel* aButtonModel,
+						 MVRDecoratorModel* aDecoratorModel,
+						 MVRStateInfoModel* aStateInfoModel,
+						 CVRRecView* aOwningView );
+
+	public: // from CCoeControl
+
+		/**
+		* Specifies the help context for this form.
+		* @param aContext the context IDs are placed here
+		*/
+		void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+	public:
+		// from CCoeControl
+
+		/**
+		* Called by the framework to get the number of sub-components
+		* contained in this component.
+		* @return The number of component controls contained by this control
+		*/
+		TInt CountComponentControls() const;
+
+		/**
+		* Called by the framework to get a specified sub-component
+		* of this component.
+		* @param aIndex The index of the component to get.
+		* @return The component control with an index of aIndex.
+		*/
+		CCoeControl* ComponentControl( TInt aIndex ) const;
+
+		/**
+		* When a key event occurs, the control framework calls this function
+		* for each control on the control stack, until one of them can process
+		* the key event (and returns EKeyWasConsumed).
+		* @param aKeyEvent The key event.
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown
+		* @return Indicates whether or not the key event was used by this
+		*         control
+		*/
+		TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+									 TEventCode aType );
+
+	private: // from CCoeControl
+
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		void SizeChanged();
+
+		/**
+		* Draws this control.
+		* @param aRect The area that needs updating. Ignored.
+		*/
+		void Draw( const TRect& aRect ) const;
+
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+		
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+	    /**
+		*From MCoeControlObserver. To handle the volume events for touch UI.
+		*/
+    	void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+
+
+	public: // from MVRObserver
+
+		/**
+		* Called to notify a change in the observed subject's state.
+		*/
+		void Update( TVRUpdateCommand aCommand = EVRUpdate );
+
+	public: // from MVRVolumeEventObserver
+
+		/**
+		* Handles volume change event received from either side volume
+		* keys or left-right rocker presses.
+		* @param aKeyEvent The key event. Will be forwarded to CAknVolumeControl
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown. Will be forwarded to CAknVolumeControl
+		*/
+
+		TInt HandleVolumeChangeL( const TKeyEvent& aKeyEvent,
+									 TEventCode aType );		
+
+
+	public: // new methods
+
+		/**
+		* Registers an observer for receiving
+		* key event notifications from this class.
+		* @param aObserver The observer object.
+		*/
+		void SetKeyObserver( MVRKeyObserver* aObserver );
+
+		/**
+		* Registers an observer for receiving
+		* audio volume change notifications from this class.
+		* @param aObserver The observer object.
+		*/
+		void SetVolumeChangeObserver( MVRVolumeChangeObserver* aObserver );
+
+		/**
+		* Updates the layout of all child controls to current active
+		* layout (Euro, Apac, Arabic/Hebrew)
+		*/
+		void UpdateLayoutL();
+
+		/**
+		* Handles a change to the application's resources
+		* @param aType The type of changed resource
+		*/
+		void HandleResourceChangeL( TInt aType );
+		
+		/**
+		* Returns the currently focused button index in Button Panel
+		* @return The focused button index
+		*/
+		TInt FocusedButton() const;
+		
+		/**
+		* Gives the update command to Button Panel
+		* @param Update command
+		*/
+		void UpdateButtonPanel( TVRUpdateCommand aCommand );
+
+
+	private:
+
+		/**
+		* Tells the volume observer to update the volume
+		*/
+		void UpdateVolumeObserver();
+
+		/**
+		* Updates the navipane according to the current IHF setting
+		*/
+		void UpdateVolumeControlL();
+		
+		/**
+		* Updates the CBA Buttons (LSK, RSK, MSK)
+		*/
+		void UpdateCBA();
+
+	private: // data
+
+		/**
+		* The ihf volume control (in navi pane),
+		*/
+		CAknNavigationDecorator* iIhfVolumeControl;
+
+		/**
+		* The ear piece volume control (in navi pane),
+		*/
+		CAknNavigationDecorator* iEarPieceVolumeControl;
+
+		/**
+		* A pointer to the active volume control (ihf or ear piece)
+		*/
+		CAknNavigationDecorator* iActiveVolumeControl;
+
+		/**
+		* Pointer to the navi pane,
+		* used as a short cut. Not owned.
+		*/
+		CAknNavigationControlContainer* iNaviPane;
+
+		/**
+		* Pointer to the button panel component. Owned.
+		*/
+		CVRButtonPanel* iButtonPanel;
+
+		/**
+		* Pointer to the state info panel component. Owned.
+		*/
+		CVRStateInfoPanel* iStateInfoPanel;
+
+		/**
+		* Pointer to the view that owns us. Not owned.
+		*/
+		CVRRecView* iOwningView;
+
+		/**
+		* Pointer to the decorator data model. Not owned.
+		*/
+		MVRDecoratorModel* iModel;
+
+		/**
+		* Pointer to the key event observer (or NULL). Not owned.
+		*/
+		MVRKeyObserver* iKeyObserver;
+
+		/**
+		* Pointer to the audio volume change observer (or NULL). Not owned.
+		*/
+		MVRVolumeChangeObserver* iVolumeChangeObserver;
+
+		TRect iHorizontalLine;
+		TRect iVerticalLine;
+
+		TAknLayoutRect	iHorizontalLineRect;
+		TAknLayoutRect	iVerticalLineRect;
+		TAknLayoutRect	iButtonPanelRect;
+
+	    /**
+	    * Skin instance from AknsUtils. Not owned.
+	    */
+		MAknsSkinInstance* iSkinInstance;
+
+        /**
+        * Background context for clearing screen. Owned.
+        */
+		CAknsBasicBackgroundControlContext* iBackgroundSkinContext;	
+		
+		/**
+		* Notifier for side volume key events. Owned.
+		*/
+		CVRRemConObserver* iRemConObserver;
+	};
+
+#endif // __CVRRECVIEWCONTAINER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRecViewModel.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,2476 @@
+/*
+* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is the data model and state machine of the Recorder View.
+*     The state machine is defined by a VR_STATEMACHINE resource structure.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <bldvariant.hrh>
+#include <e32cmn.h>
+#include <ctsydomainpskeys.h>
+#include <UsbWatcherInternalPSKeys.h>
+#include <usbpersonalityids.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <avkon.rsg>
+#include <StringLoader.h>
+#include <bautils.h>
+#include <avkon.hrh>		// Key definitions
+#include <AknGlobalNote.h>
+#include <sendui.h>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <featmgr.h>
+#include <data_caging_path_literals.hrh>
+#include <CMessageData.h>
+
+#include <featmgr.h>	// Feature manager
+#include <SendUiConsts.h>          // Disable e-mail  
+#include "MessagingDomainCRKeys.h" // Disable e-mail variation flag
+
+#include <centralrepository.h> // link against centralrepository.lib
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif
+#include "VoiceRecorderInternalCRKeys.h"
+
+#include <voicerecorder.rsg>
+#include "CVRMemo.h"
+#include "TVRState.h"
+#include "CVRMdaRecorder.h"
+#include "VRConsts.h"
+#include "CVRSystemEventHandler.h"
+#include "CVRMediaRemovalMonitor.h"
+#include "VRUtils.h"
+#include "CVRRecViewModel.h"
+#include <csxhelp/vorec.hlp.hrh>
+
+#include "VRUSBStateHanlder.h"
+
+
+// CONSTANTS
+const TInt KAllowInCallRecording( 1 );
+
+// Shown if maximum recording time is not known
+_LIT( KVRBeforeFirstEstimateLabel, "--:--:--" );
+// MMS/High text is inserted here
+_LIT( placeForQuality, "%U" );
+
+
+// ================= MEMBER FUNCTIONS ========================================
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CVRRecViewModel
+// 
+// ---------------------------------------------------------------------------
+//
+CVRRecViewModel::CVRRecViewModel()
+	: iStateArray( 2 ),
+	iLabelSets( 2 ),
+	iPreviousCallState( EPSCTsyCallStateNone ),
+	iCanHandleCommands( ETrue ),
+	iCBAEnabled( ETrue ),
+	iIsDriveReady( ETrue )
+	{
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::~CVRRecViewModel
+// 
+// ---------------------------------------------------------------------------
+//
+CVRRecViewModel::~CVRRecViewModel()
+	{
+	// It might be possible to make this method leaving and put it
+	// somewhere else than destructor
+	SaveVolumeSettings();
+	iLabelSets.ResetAndDestroy();
+	iStateArray.Reset();
+
+	delete[] iLabelLayoutLinks;
+	delete iMemo;
+	delete iRecorder;
+	if ( iGlobalNote && iIsNoteLaunched )
+		{
+		// nothing much to do but ignore.
+		TRAP_IGNORE( iGlobalNote->CancelNoteL( iNoteId ) );
+		}
+
+	delete iGlobalNote;
+	
+	if (iCurrentCallHandler) 
+		{
+		delete iCurrentCallHandler;
+		}
+	delete iCurrentMMCEjectHandler;
+	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ConstructFromResourceL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::ConstructFromResourceL( TResourceReader& aReader )
+	{
+
+	TRAP_IGNORE( iCurrentCallHandler = CVRSystemEventHandler::NewL() );
+	iCurrentCallHandler->Listen( KPSUidCtsyCallInformation, KCTsyCallState, 
+								 this );
+	//listen MMC eject
+	TInt driveRemovableMassStorage = VRUtils::GetRemovableMassStorageL();
+	iCurrentMMCEjectHandler = CVRMediaRemovalMonitor::NewL(driveRemovableMassStorage, CEikonEnv::Static()->FsSession(), this);
+
+	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
+		FeatureManager::FeatureSupported( 
+						KFeatureIdApplicationControllableAudioRouting ) )
+		{
+		ReadDefaultSpeakerL();
+		}
+	else
+		{
+		iIhfState = ETrue;
+		}
+
+	LoadVolumeSettingsL();
+   // Connecting and initialization:
+    CRepository* myRepSession = CRepository::NewLC( KCRUidVoiceRecorder );
+
+    // Get the values from the repository
+    User::LeaveIfError( myRepSession->Get( KVRDefaultAudioFormat, 
+    									   iVRAudioFormat ) );
+    									   
+    User::LeaveIfError( myRepSession->Get( KVRAllowInCallRecording, 
+    									   iVRAllowInCallRecording ) );
+    CleanupStack::PopAndDestroy( myRepSession ); 
+
+	iGlobalNote = CAknGlobalNote::NewL();
+
+	iMemo = new( ELeave ) CVRMemo;
+	iMemo->ConstructL( iVRAudioFormat );
+
+	TInt numLabelSets( aReader.ReadInt16() );
+	TInt i;
+
+	for ( i = 0; i < numLabelSets; i++ )
+		{
+		CDesCArray* labelSet;
+		TInt numLabels( aReader.ReadInt16() );
+
+		if ( numLabels > 0 )
+			{
+			// TResourceReader re-reads the length, have to rewind
+			aReader.Rewind( sizeof( TInt16 ) );
+			labelSet = aReader.ReadDesCArrayL();
+			}
+		else
+			{
+			// create an empty array "by hand",
+			// TResourceReader is not able to do this
+			labelSet = new( ELeave ) CDesCArrayFlat( 1 );
+			}
+
+		CleanupStack::PushL( labelSet );
+		iLabelSets.AppendL( labelSet );
+		CleanupStack::Pop( labelSet);
+		}
+
+	TInt linkCount( aReader.ReadInt16() );
+	iLabelLayoutLinks = new( ELeave ) TVRLabelLayoutLink[ linkCount ];
+	for ( i = 0; i < linkCount; i++ )
+		{
+		iLabelLayoutLinks[ i ].ReadFromResource( aReader );
+		}
+
+	TInt numUiStates( aReader.ReadInt16() );
+
+	TVRState uistate;
+	for ( i = 0; i < numUiStates; i++ )
+		{
+		uistate.ReadFromResource( aReader );
+		uistate.iId =  i;
+		iStateArray.AppendL( uistate );
+		}
+
+	iState = &iStateArray.At( 0 );
+
+	TInt numContexts( aReader.ReadInt16() );
+	for ( i = 0; i < numContexts; i++ )
+		{
+		TInt id( aReader.ReadInt8() );
+		TVRContext* context = &iContexts[ id ];
+		context->iValid = ETrue;
+		context->iInitialTransition.iCommandId = aReader.ReadUint8();
+		context->iInitialTransition.iNewState = aReader.ReadUint8();
+		context->iInitialTransition.iFunctionId = aReader.ReadUint8();
+		context->iInitialTransition.iValid = ETrue;
+
+
+		TInt numStates( aReader.ReadInt16() );
+		for ( TInt j = 0; j < numStates; j++ )
+			{
+			TInt id( aReader.ReadInt8() );
+			TVRContext::TState* state = &context->iStates[ id ];
+			state->iValid = ETrue;
+			TInt numTransitions( aReader.ReadInt16() );
+			__ASSERT_DEBUG( numTransitions <= KVRMaxTransitions,
+						User::Panic( KVRPanic, EPanicTooManyTransitions ) );
+
+			for ( TInt k = 0; k < numTransitions; k++ )
+				{
+				TVRContext::TTransition* trans = &state->iTransitions[ k ];
+				trans->iCommandId = aReader.ReadUint8();
+				trans->iNewState = aReader.ReadUint8();
+				trans->iFunctionId = aReader.ReadUint8();
+				trans->iValid = ETrue;
+				}
+			}
+		}
+
+	StringLoader::Load( iDateUsualWithZero, R_QTN_DATE_USUAL_WITH_ZERO );
+	StringLoader::Load( iTimeUsualWithZero, R_QTN_TIME_USUAL_WITH_ZERO );
+	StringLoader::Load( iTimeDuratLong,	R_QTN_TIME_DURAT_LONG );	
+	StringLoader::Load( iTimeDuratMinSecWithZero,
+										R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO );
+										
+										
+	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ProcessKeyEventL
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::ProcessKeyEventL( const TKeyEvent& aKeyEvent,
+										 const TEventCode aType )
+	{
+	TBool retval( EFalse );
+	if ( aType != EEventKey )
+		{
+		return retval;
+		}
+
+	switch ( aKeyEvent.iCode )
+		{
+		case EKeyPhoneEnd:
+			{
+			TInt currentState( iCurrentCallHandler->StateL(KPSUidCtsyCallInformation, KCTsyCallState) );
+        										
+			if ( ( currentState != EPSCTsyCallStateNone ) )
+				{
+				HandleCommandL( ECmdDisconnectCall );
+				retval = EKeyWasNotConsumed;
+				}
+			else
+				{
+				// Voice recorder wasn't here =), retval stays EFalse
+				iIsEndKey = ETrue;	
+				
+				// Exit if app is not fully initialized
+				if ( !iContextEntered )
+					{
+					CEikonEnv::Static()->EikAppUi()->
+											HandleCommandL( EEikCmdExit );
+					}
+				}
+			break;
+			}
+		case EKeyBackspace:
+			{
+			HandleCommandL( ECmdDelete );
+			retval = ETrue;
+			break;
+			}
+		case EKeyYes:
+			{
+			if( aKeyEvent.iRepeats > 0 )
+				{
+				if( VisualStateId() == EStateRecording ||
+						VisualStateId() == EStatePlaying )
+					{
+					HandleCommandL( ECmdPause );
+					}
+				}
+			break;
+			}
+		case EKeySide:
+            {
+            retval = ETrue;
+            
+            if ( aKeyEvent.iRepeats )
+                {
+                switch ( iState->iId )
+                    {
+                    case EStateIdle:
+                        {
+                        HandleCommandL( ECmdPlay );
+                        break;
+                        }
+                    case EStateRecording:
+                    case EStateRecordEmbedded:
+                    case EStateRecordingPaused:
+                    case EStatePlaying:
+                    case EStatePlayingPaused:
+                        {
+                        HandleCommandL( ECmdStop );
+                        break;
+                        }
+                    case EStateDeleted:
+                    default:
+                        {
+                        retval = EFalse;
+                        break;
+                        }
+                    }
+                }
+            else
+                {
+                switch ( iState->iId )
+                    {
+                    case EStateIdle:
+                    case EStateDeleted:
+                    case EStateRecordingPaused:
+                        {
+                        HandleCommandL( ECmdRecord );
+                        break;
+                        }
+                    case EStateRecording:
+                    case EStateRecordEmbedded:
+                    case EStatePlaying:
+                        {
+                        HandleCommandL( ECmdPause );
+                        break;
+                        }
+                    case EStatePlayingPaused:
+                        {
+                        HandleCommandL( ECmdPlay );
+                        break;
+                        }
+                    default:
+                        {
+                        retval = EFalse;
+                        break;
+                        }
+                    }
+                }
+            break;
+            }
+		default:
+			{
+			break;
+			}
+		}
+	return retval;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::HandleCommandL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::HandleCommandL( TInt aCommandId )
+	{
+	// This command must be acceptable all times.
+	if ( aCommandId == ECmdCancelNote )
+		{
+		if ( iIsNoteLaunched )
+			{
+			// nothing much to do but ignore.
+			TRAP_IGNORE( iGlobalNote->CancelNoteL( iNoteId ) );
+			}
+		return;
+		}
+
+	if ( !CanAcceptCommands() )
+		{
+		return;
+		}
+
+	if ( !CanHandleCommands() )
+		{
+		return;
+		}
+	if ( EStateRecording == iState->iId && ECmdRecord == aCommandId ||
+			EStateRecording == iState->iId && ECmdRename == aCommandId )
+		{
+		return;
+		}
+	
+	switch ( aCommandId )
+		{
+		case ECmdHelp:
+			{
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}	
+		case EEikCmdExit:
+			{
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( EAknSoftkeyExit);
+			break;
+			}
+		
+		case EAknSoftkeyExit:
+			{
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}
+		case ECmdSendVia:
+			{
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( aCommandId );
+			break;
+			}
+		case ECmdSaveAttachment:
+			{
+			__ASSERT_DEBUG( iRecorder, User::Panic( KVRPanic, KErrNotFound ) );
+			iRecorder->DetachMemo();
+			// Save permanently but do not remove the original
+
+			HBufC* label = StringLoader::LoadLC( R_VR_SAVE_WAITNOTE_LABEL );
+
+			iIsNoteLaunched = ETrue;
+			iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label, ETrue );
+
+			if ( iStateInfoObserver )
+				{
+				iStateInfoObserver->Update();
+				}
+			iRecorder->AttachToMemoL( iMemo );
+
+			// Remove the waitnote
+			iGlobalNote->CancelNoteL( iNoteId );
+			iIsNoteLaunched = EFalse;
+
+			CleanupStack::PopAndDestroy( label );
+			break;
+			}
+		// FLOWTHROUGH
+		// in case of end key, different command must be given to state
+		// machine - recview gives ECmdAutoStopInterrupted
+		case ECmdAutoStopInterrupted:
+			{
+			if ( iIsEndKey )
+				{
+				aCommandId = ECmdEndKey;
+				iIsEndKey = EFalse;
+				}
+			}
+		// Other commands are given to the state machine
+		default:
+			{
+			TVRContext::TTransition transition;
+			GetTransition( transition, aCommandId );
+			TBool functionOK( ETrue );
+			TRAPD( err, functionOK = 
+								CallFunctionByIdL( transition.iFunctionId ) );
+			
+			if ( err != KErrNone )
+				{
+				// This is done to enable button events
+				iCanHandleCommands = ETrue;
+				}
+				
+			// We may have detached memo and we must reattach
+			if ( err == KErrInUse )
+				{
+				__ASSERT_DEBUG( iRecorder, 
+								User::Panic( KVRPanic, KErrNotFound ) );
+				iRecorder->AttachToMemoL( iMemo );
+				}
+
+			if ( err == KErrNotReady && iIsNoteLaunched && iGlobalNote )
+				{
+				// nothing much to do but ignore.
+				TRAP_IGNORE( iGlobalNote->CancelNoteL( iNoteId ) );
+				}
+
+			// If the disk gets full while saving, the next state is deleted
+			if ( err == KErrDiskFull || err == KErrArgument )
+				{
+				if ( iContext == EContextRecordNewNormal ||
+					 iContext == EContextNormal ||
+					 iContext == EContextEmptyNormal )
+					{
+					ChangeState( EStateDeleted, ETrue );
+					}
+				else
+					{
+					// In record new embedded context the UI is left in
+					// idle state, so the memo must be attached
+					// (EFunctionOK detaches it)
+					__ASSERT_DEBUG( iRecorder, 
+									User::Panic( KVRPanic, KErrNotFound ) );
+					if(!dynamic_cast<CVRMdaRecorder*>(iRecorder)->IsAttachedToMemo())
+						{
+					    iRecorder->AttachToMemoL( iMemo );	
+						}
+					}
+
+				if ( err == KErrDiskFull )
+					{
+					// Maybe an error note should be shown
+					return;
+					}
+
+				// Propagate to the error handler to show a note.
+				User::Leave( err );
+				}
+			else
+				{
+				// The LeaveIfError must be here because CallFunctionByIdL
+				// might have called Exit() (leaving with -1002) and the
+				// framework might be half-dead leading to access violation,
+				// if the UI state is changed
+				User::LeaveIfError( err );
+				if ( functionOK )
+					{
+					// If the in-call recording disabling feature is active,
+					// then the state of the UI will have to reflect that
+					TUint newState(transition.iNewState);
+
+					if ( iVRAllowInCallRecording != KAllowInCallRecording )
+						{
+						TInt currentState( iCurrentCallHandler->StateL(	KPSUidCtsyCallInformation, KCTsyCallState ) );
+												
+						if ( currentState != EPSCTsyCallStateNone )
+							{
+							currentState = iCurrentCallHandler->StateL(
+												KPSUidCtsyCallInformation, KCTsyCallType );
+
+							switch ( currentState )
+								{
+								case EPSCTsyCallTypeCSVoice:
+								case EPSCTsyCallTypeHSCSD:
+								case EPSCTsyCallTypeH324Multimedia:
+								case EPSCTsyCallTypeVoIP:
+									{
+									newState = EStateDisableButtons;										
+									break;
+									}
+								default:
+									{
+									break;										
+									}
+								}
+														
+							}
+						}
+
+					// Function didn't want to cancel the state change
+					ChangeState( newState );
+					}
+				}
+
+			break;
+			}
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetTransition
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::GetTransition( TVRContext::TTransition& aTransition,
+									 TUint aCommandId ) const
+	{
+	__ASSERT_DEBUG( iContexts[ iContext ].iValid, User::Panic( KVRPanic,
+					EPanicInvalidContext ) );
+	__ASSERT_DEBUG( iContexts[ iContext ].iStates[ iState->iId ].iValid,
+					User::Panic( KVRPanic, EPanicInvalidState ) );
+
+	const TVRContext::TState* state =
+							&(iContexts[ iContext ].iStates[ iState->iId ]);
+	for ( TInt i = 0; i < KVRMaxTransitions; i++ )
+		{
+		const TVRContext::TTransition* transition = &state->iTransitions[ i ];
+		if ( ( transition->iCommandId == aCommandId ) &&
+			( transition->iValid ) )
+			{
+			aTransition = *transition;
+			return;
+			}
+		}
+
+	User::Panic( KVRPanic, EPanicInvalidTransition );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetTransition
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::GetTransition(
+								TVRContext::TTransition& aTransition ) const
+	{
+	aTransition = iContexts[ iContext ].iInitialTransition;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ChangeState
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::ChangeState( TUint aNewState, TBool aForced )
+	{
+	if ( !aForced )
+		{
+		if ( ( aNewState == iState->iId ) || ( aNewState == EStateInitial ) )
+			{
+			return;
+			}
+		}
+
+	iState = &iStateArray.At( aNewState );
+
+	if ( iStateInfoObserver )
+		{
+		iStateInfoObserver->Update();
+		}
+	if ( iButtonPanelObserver )
+		{
+		iResetButtons = ETrue;
+		iButtonPanelObserver->Update( EVRUpdateStateChange );
+		}
+	if ( iDecoratorObserver )
+		{
+		iDecoratorObserver->Update();
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::EnterContextL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::EnterContextL( const TVRRecViewContexts& aContext )
+	{
+	iContextEntered = EFalse;
+	if ( iRecorder )
+		{
+		delete iRecorder;
+		iRecorder = NULL;
+		}
+
+	CVRMdaRecorder* recorder = new( ELeave ) CVRMdaRecorder();
+	CleanupStack::PushL( recorder );
+	recorder->ConstructL();
+	CleanupStack::Pop();
+	iRecorder = recorder;
+
+	iRecorder->RegisterObserver( iStateInfoObserver );
+	iRecorder->SetAutoStopObserver( this );
+
+	LeaveContext();
+	iContext = aContext;
+
+	iRecorder->AttachToMemoL(iMemo);
+
+	TVRContext::TTransition transition;
+	GetTransition( transition );
+
+	ChangeState( transition.iNewState, ETrue );
+	CallFunctionByIdL( transition.iFunctionId );
+
+	iContextEntered = ETrue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::LeaveContext
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::LeaveContext()
+	{
+	iContextEntered = EFalse;
+	if( iRecorder )
+		{
+		iRecorder->UnregisterObserver( iStateInfoObserver );
+		iRecorder->UnregisterObserver( iButtonPanelObserver );
+
+		iRecorder->DetachMemo();
+
+		iRecorder->RegisterObserver( iStateInfoObserver );
+		iRecorder->RegisterObserver( iButtonPanelObserver );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CbaResourceId
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewModel::CbaResourceId() const
+	{
+	return iState->iCbaResourceId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetHelpContext
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::GetHelpContext( TCoeHelpContext& aContext ) const
+	{
+       if (FeatureManager::FeatureSupported(KFeatureIdHelp))
+  	   {   
+		  if ( iState->iId == EStateDeleted )
+			{
+			aContext.iContext = KVOREC_HLP_EMPTY_RECORDER;
+			}
+		   else
+			{
+			aContext.iContext = KVOREC_HLP_MAIN;
+			}
+    	}
+	}
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetDecoratorObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetDecoratorObserver( MVRObserver* aObserver )
+	{
+	iDecoratorObserver = aObserver;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::MenuBarResourceId
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewModel::MenuBarResourceId() const
+	{
+	return iState->iMenubarResourceId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ButtonCount
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewModel::ButtonCount() const
+	{
+
+	return iState->iButtonCount;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CBAEnabled
+// from MVRDecoratorModel
+// ---------------------------------------------------------------------------
+//	
+TBool CVRRecViewModel::CBAEnabled() const
+	{
+	return iCBAEnabled;	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ButtonState
+// Checks and returns whether the state of the button should be in active or 
+// dimmed state. aButtonId tells the index of the button to be checked. Few 
+// special cases (end and the beginning of the clip) can be handled here.
+// ---------------------------------------------------------------------------
+//	
+TInt CVRRecViewModel::ButtonState( TInt aButtonId ) const
+	{
+    if(CVRUSBStateHanlder::IsUsbActive() || !iIsDriveReady)
+        {
+            return EDimmed;
+        }
+	// Disable rewind button if there's nothing to rewind
+	if ( aButtonId == EButtonRewind &&
+		( Position().Int64() / KVRSecondAsMicroSeconds ) < 1 )
+		{
+		return EDimmed;
+		}
+	
+	// Disable forward button if position is at the end or the length of the
+	// clip is smaller than 1	
+	if ( aButtonId == EButtonForward && ( Position() == Duration() || 
+			( Duration().Int64() / KVRSecondAsMicroSeconds ) < 1 ) )
+		{
+		return EDimmed;
+		}
+
+    // Jeffery: the following ifs are temperary.  they need to be removed after "Pause" is supported in plugin
+#ifdef    __AAC_ENCODER_PLUGIN 
+    if  ( iState->iId == EStateRecording &&  aButtonId == EButtonRecord  && iMemo->Quality() == EQualityHigh)
+		{
+		return EDimmed;
+		}
+#endif
+		
+	return iState->ButtonState( aButtonId );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CommandId
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewModel::CommandId( TInt aButtonId ) const
+	{
+	return iState->ButtonCommandId( aButtonId );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::InitialFocusButtonId
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewModel::InitialFocusButtonId() const
+	{
+	return iState->iFocusButtonId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetButtonPanelObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetButtonPanelObserver( MVRObserver* aObserver )
+	{
+	if ( iRecorder )
+		{
+		if ( iButtonPanelObserver )
+			{
+			iRecorder->RegisterObserver( aObserver );
+			}
+		else
+			{
+			iRecorder->UnregisterObserver( iButtonPanelObserver );
+			}
+		}
+		
+		iButtonPanelObserver = aObserver;	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ResetNeeded
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::ResetNeeded()
+	{
+	if ( iResetButtons )
+		{
+		iResetButtons = EFalse;
+		return ETrue;		
+		}
+
+	return iResetButtons; // EFalse always
+	}
+
+	
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::VisualStateId()
+// Returns the id of VR current (visual) state
+// ---------------------------------------------------------------------------
+//	
+TUint CVRRecViewModel::VisualStateId() const
+	{
+	return iState->iStateId;	
+	}
+
+	
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CanHandleCommands()
+// Returns ETrue if model can handle new commands, EFalse otherwise
+// ---------------------------------------------------------------------------
+//	
+TBool CVRRecViewModel::CanHandleCommands() const
+	{
+	return iCanHandleCommands;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::Duration
+// 
+// ---------------------------------------------------------------------------
+//	
+TTimeIntervalMicroSeconds CVRRecViewModel::Duration() const
+	{
+	if ( ( iState->iId == EStateRecording ) ||
+		 ( iState->iId == EStateRecordingPaused ) )
+		{
+		return iMemo->MaxDuration();
+		}
+	return iMemo->Duration();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::Position
+// 
+// ---------------------------------------------------------------------------
+//
+TTimeIntervalMicroSeconds CVRRecViewModel::Position() const
+	{
+	if ( ( iState->iId == EStateRecording ) ||
+		 ( iState->iId == EStateRecordingPaused ) )
+		{
+		return iMemo->Duration();
+		}
+	return iMemo->Position();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetLabel
+// Non-leaving version
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::GetLabel( TDes& aName, TInt aLabelIndex ) const
+	{
+	TRAP_IGNORE( GetLabelL( aName, aLabelIndex ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetLabelL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::GetLabelL( TDes& aName, TInt aLabelIndex ) const
+	{
+	if ( !iMemo->IsValid() )
+		{
+		aName.SetLength( 0 );
+		return;
+		}
+
+	CDesCArray* labels = iLabelSets.At( iState->iLabelSetId );
+	User::LeaveIfNull( labels );
+
+	if ( aLabelIndex < labels->Count() )
+		{
+		TInt index = aLabelIndex;
+
+		TBuf< VRLABELMAXLENGTH > formatStr(
+										labels->MdcaPoint( index ) );
+		TBuf< VRLABELMAXLENGTH > formattedTime;
+
+		switch ( aLabelIndex )
+			{
+			case ELabelMemoName:
+				{
+				//StringLoader::Format( aName, formatStr, -1, iMemo->Name() );
+                                aName.Copy(iMemo->Name());
+				break;
+				}
+			case ELabelMemoDate:
+				{
+				iMemo->DateCreated().FormatL( formattedTime,
+											  iDateUsualWithZero );
+				StringLoader::Format( aName, formatStr, 0, formattedTime );
+
+				iMemo->DateCreated().FormatL( formattedTime,
+											  iTimeUsualWithZero );
+				formatStr.Copy( aName );
+				StringLoader::Format( aName, formatStr, 1, formattedTime );
+				AknTextUtils::LanguageSpecificNumberConversion( aName );
+				break;
+				}
+			case ELabelMemoQuality:
+				{
+				// Display empty row if feature is not on
+                if ( !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+                    {
+                    aName.Copy( KNullDesC );
+                    break;
+                    }
+				
+				aName.Copy( formatStr );
+				break;
+				}
+			case ELabelQualityText:	
+				{
+					// Display empty row if feature is not on
+                if ( !VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+                    {
+                    aName.Copy( KNullDesC );
+                    break;
+                    }
+                    
+				formatStr.Copy( placeForQuality );
+					
+					switch( iMemo->Quality() )
+				    {
+				    case EQualityMMSOptimized:
+				        {
+				        StringLoader::Load( formattedTime, R_VOREC_QUALITY_MMS_OPTIMIZED );
+				        StringLoader::Format( aName, formatStr, -1, formattedTime );
+				        break;
+				        }
+				        
+				        // EQualityNormal is used only when mp4 is supported.  In this case the file is saved as wav.
+#ifdef  __AAC_ENCODER_PLUGIN
+				    case EQualityNormal:
+				        {
+				        StringLoader::Load( formattedTime, R_VOREC_QUALITY_NORMAL );				        
+				        StringLoader::Format( aName, formatStr, -1, formattedTime );				        
+				        break;
+				        }
+#endif
+
+				    case EQualityHigh:
+				        {
+				        StringLoader::Load( formattedTime, R_VOREC_QUALITY_HIGH );				        
+				        StringLoader::Format( aName, formatStr, -1, formattedTime );				        
+				        break;
+				        }
+				    default:
+				        {
+				        aName.Copy( KNullDesC );
+				        break;
+				        }
+				    }
+				break;
+				}
+			case ELabelBarMin:
+				{
+				aName.Copy( KNullDesC );
+				break;
+				}
+			case ELabelBarMax:
+				{
+				// This label layout is nowadays taking automatically care of 
+				// string mirroring in the case of mirrored layout. So use of 
+				// AknLayoutUtils::LayoutMirrored() isn't needed anymore
+				
+				TTimeIntervalMicroSeconds max( 0 );
+				if ( ( iState->iId == EStateRecording ) ||
+				 ( iState->iId == EStateRecordingPaused ) )
+					{
+					max = iMemo->MaxDuration();
+					}
+				else
+					{
+					max = iMemo->Duration().Int64();
+
+					if ( max.Int64() < 0 )
+						{
+						max = 0;
+						}
+					}
+
+				TTime lengthAsTime( max.Int64() );
+				TTime positionAsTime( iMemo->Position().Int64() );
+				TBuf< VRLABELMAXLENGTH > formattedPosition;
+
+				// current memo quality 
+				TVRQuality quality( iMemo->Quality() );
+				
+				// Show --:--:-- if estimate for maximum recording time is not
+				// known yet. Done only when memo quality is High
+				if ( ( ( iState->iId == EStateRecording ) || 
+					   ( iState->iId == EStateRecordingPaused )) && 
+					   ( Position() < KVRFirstEstimateTime ) && 
+					   ( quality == EQualityHigh ) &&
+					   ( max.Int64() < 0) )
+					{
+					formattedTime.Append( KVRBeforeFirstEstimateLabel );
+					}
+				// Show normal maximum time	
+				else	
+					{
+					// Show longer format if time is more than 1 hour
+					FormatTimeL( lengthAsTime, formattedTime );		
+					}
+	
+				// Show longer format if time is more than 1 hour
+				FormatTimeL( positionAsTime, formattedPosition );
+						
+				StringLoader::Format( aName, formatStr, 0, formattedPosition );
+				formatStr.Copy( aName );
+				StringLoader::Format( aName, formatStr, 1, formattedTime );
+				AknTextUtils::LanguageSpecificNumberConversion( aName );
+
+				break;						
+				}
+			case ELabelStatus:
+				{
+				aName.Copy( iState->iStatus );
+				break;
+				}
+			default:
+				{
+				break;
+				}
+			}
+		}
+	else
+		{
+		aName.SetLength( 0 );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ResourceIdForLabel
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRRecViewModel::ResourceIdForLabel( TInt aLabelIndex,
+										  TAknLayoutId aLayout ) const
+	{
+	switch ( aLayout )
+		{
+		case EAknLayoutIdELAF:
+		default:
+			return iLabelLayoutLinks[ aLabelIndex ].iEuroId;
+
+		case EAknLayoutIdABRW:
+			return iLabelLayoutLinks[ aLabelIndex ].iArabicHebrewId;
+
+		case EAknLayoutIdAPAC:
+			return iLabelLayoutLinks[ aLabelIndex ].iApacId;
+
+		}
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetStateInfoObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetStateInfoObserver( MVRObserver* aObserver )
+	{
+	iStateInfoObserver = aObserver;
+	if( iRecorder )
+		{
+		iRecorder->RegisterObserver( iStateInfoObserver );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetStateInfoPanelObserver
+// Observes changes in state info panel
+// ---------------------------------------------------------------------------
+//	
+void CVRRecViewModel::SetStateInfoPanelObserver( MVRStateInfoObserver* 
+																	aObserver )
+	{
+	iStateInfoPanelObserver = aObserver;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::HasProgressBar
+// 
+// ---------------------------------------------------------------------------
+//	
+TBool CVRRecViewModel::HasProgressBar() const
+	{
+	return iState->iHasProgressBar;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetSelectedFilesLC
+// 
+// ---------------------------------------------------------------------------
+//
+MDesCArray* CVRRecViewModel::GetSelectedFilesLC() const
+	{
+	CDesCArray* array = new( ELeave ) CDesCArrayFlat( 1 ); // granularity = 1
+	CleanupStack::PushL( array );
+	array->AppendL( iMemo->Filename() );
+	return array;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetVolume
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetVolume( TInt aStep, TInt aMaxSteps )
+	{
+	iIhfVolume = aStep;
+    iRecorder->SetVolume( aStep, aMaxSteps );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetMemoName
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetMemoName( const TDesC& aFilename )
+	{
+	iMemo->SetName( aFilename );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetMemoNameNewL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetMemoNameNewL( TBool aEmbedded )
+	{
+	iMemo->SetTemporaryNameL( aEmbedded );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::Filename
+// 
+// ---------------------------------------------------------------------------
+//
+const TDesC& CVRRecViewModel::Filename() const
+	{
+	return iMemo->Filename();
+	}
+
+void CVRRecViewModel::SetSavingLocationL( const TDesC& aPath )
+	{
+	iMemo->SetSavingLocationL( aPath );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::Update
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::Update( TVRUpdateCommand /*aCommand*/ )
+	{
+	// Error is propagated to error handling method
+	TRAPD( err, HandleCommandL( ECmdAutoStopAtEnd ) );
+
+	// Ignore further errors
+	TRAP_IGNORE( HandleUpdateErrorL( err ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::IsEmbedded
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::IsEmbedded() const
+	{
+	return ( iContext == EContextRecordNewForRemote )
+			|| ( iContext == EContextViewer );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CanAcceptCommands
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::CanAcceptCommands() const
+	{
+	return ( iContextEntered != EFalse ) && iRecorder->CanAcceptCommands();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SendViaL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SendViaL( CSendUi* aSendUi )
+	{
+	// Don't accept commands during sending operation
+	iContextEntered = EFalse;
+	
+	iRecorder->DetachMemo();
+	// Detaching resets the clip position so button panel needs to be updated
+	iButtonPanelObserver->Update( EVRUpdatePositionChange );
+	
+	TSendingCapabilities capabilities
+			(0, KVRSendUiMsgSize, TSendingCapabilities::ESupportsAttachments);
+	CMessageData* messageData = CMessageData::NewL();
+	CleanupStack::PushL( messageData );
+
+	messageData->AppendAttachmentHandleL( iMemo->File() );
+	
+	// Get an array of the services that should be dimmed
+	CArrayFixFlat< TUid >* servicesToDim = SendViaServicesToDimLC();
+
+	// For some reason this function leaves when 'NO' is selected in bluetooth 
+	// case's activation question. If this is not Trapped iContextEntered stays
+	// EFalse and no commands can be executed
+	TRAPD( err, aSendUi->ShowQueryAndSendL( messageData, 
+											capabilities, 
+											servicesToDim ) );
+	
+	CleanupStack::PopAndDestroy( servicesToDim );
+	CleanupStack::PopAndDestroy( messageData );
+
+	iRecorder->AttachToMemoL( iMemo );
+	
+	iContextEntered = ETrue;
+	
+	// This is done so we get possible "Feature not supported" 
+	// infonote from the framework
+	User::LeaveIfError( err );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SendViaServicesToDimLC
+// Generates an array of the services (Uids) that should be dimmed from Send
+// via menu. Returns a pointer to that array. Configuration in Messaging 
+// central repository defines services to dim.
+// ---------------------------------------------------------------------------
+//	
+CArrayFixFlat<TUid>* CVRRecViewModel::SendViaServicesToDimLC()
+	{
+	CArrayFixFlat< TUid >* servicesToDim = 
+									new( ELeave ) CArrayFixFlat< TUid >( 1 );
+    CleanupStack::PushL( servicesToDim );
+     
+    CRepository* repository = 
+    					CRepository::NewL( KCRUidMuiuMessagingConfiguration );
+    TInt configuration = 0;
+    if ( !repository->Get( KMuiuSendUiConfiguration, configuration ) )
+        {
+        configuration = configuration & KMuiuEmailDisabledInMultimedia;
+        }
+    delete repository;
+
+  	if ( configuration )
+    	{
+    	servicesToDim->AppendL( KSenduiMtmSmtpUid );		// normal email
+    	servicesToDim->AppendL( KSenduiMtmSyncMLEmailUid );	// sync email
+    	}
+    	
+    return servicesToDim;	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CallFunctionByIdL
+// 
+// ---------------------------------------------------------------------------
+//	
+/*
+IMPLEMENTATION NOTE:
+This method needs refactoring with CVRMemo and CVRMdaRecorder.
+Probably most of the logic should be transferred to CVRMemo.
+*/
+TBool CVRRecViewModel::CallFunctionByIdL( TInt aFunctionId )
+	{
+	switch ( aFunctionId )
+		{
+		case EFunctionPlay:
+			{
+			CVRMdaRecorder* iRecorderUtility = NULL;
+			iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
+			if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) || iRecorderUtility == NULL || !iRecorderUtility->IsAttachedToMemo())
+				{
+				return EFalse;
+				}
+
+			iIgnoreNextIhfChange = EFalse;
+			SetRecorderVolume();
+			SetIHFIfCallNotActive( iIhfState );
+			TInt mediaservErr( KErrNone );
+			
+			// Don't accept CBA commands
+			iCBAEnabled = EFalse;
+			// Update CBAs
+			iDecoratorObserver->Update( EVRUpdateCBA );
+			TRAPD( leaveErr, mediaservErr = iRecorder->PlayL() );
+			
+			// Accept CBAs again. CBAs are updated when state is changed
+			iCBAEnabled = ETrue;
+			
+			if ( leaveErr == KErrNotReady )
+				{
+				ShowNoteL( R_VR_CORRUPT_INFONOTE_LABEL, EAknGlobalErrorNote );
+				return EFalse;
+				}
+
+			if ( mediaservErr != KErrNone )
+				{
+				// cancel the state change
+				// the error note is shown in CVRMdaRecorder
+				return EFalse;
+				}
+			User::LeaveIfError( leaveErr );
+			break;
+			}
+		case EFunctionStop:
+			{
+			// Turn off the IHF after playing
+			SetIHFIfCallNotActive( EFalse );
+			iRecorder->Stop();
+			CheckIhfState();
+			break;
+			}
+		case EFunctionStopWithNote:
+			{
+			// No need to do anything to IHF here since this is
+			// called after recording (IHF is not used)
+			iRecorder->Stop();
+			ShowNoteL( R_VR_STOP_INFONOTE_LABEL, EAknGlobalInformationNote );
+			break;
+			}
+		case EFunctionStopAndSave:
+			{
+			// No need to do anything to IHF here since this is
+			// called after recording (IHF is not used)
+			StopAndSaveL( 0 );
+			break;
+			}
+		case EFunctionAutoStopAndSave:
+			{
+			// No need to do anything to IHF here since this is
+			// called after recording (IHF is not used)
+			StopAndSaveL( R_VR_STOP_INFONOTE_LABEL );
+			break;
+			}
+		case EFunctionSilentStopAndSave:
+			{
+			// No need to do anything to IHF here since this is
+			// called after recording (IHF is not used)
+			StopAndSaveL( 0 );
+			break;
+			}
+
+		case EFunctionAutoStop:
+			{
+			// Turn off the IHF after playing
+			SetIHFIfCallNotActive( EFalse );
+			iRecorder->Stop();
+			CheckIhfState();
+			break;
+			}
+		case EFunctionSaveBeforeExit:
+			{
+			StopAndCloseL( R_VR_STOP_SAVE_WAITNOTE_LABEL );
+			break;
+			}
+		case EFunctionRecord:
+			{
+			CVRMdaRecorder* iRecorderUtility = NULL;
+			if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) )
+				{
+				return EFalse;
+				}			
+         
+			//if ( iRecorder->RecordL() != KErrNone )
+			//	{
+			//	return EFalse;
+			//	}
+			
+			if(iCurrentCallHandler->StateL(KPSUidCtsyCallInformation,KCTsyCallState )==EPSCTsyCallStateConnected)
+				{
+				iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
+				if(iRecorderUtility != NULL)
+					{
+					iRecorderUtility->SetAudioInputL(CAudioInput::EVoiceCall);	
+					iRecorderUtility->ConfigSampleRateOfVoiceCallL();
+					}
+				}
+			//Audioinput can't be changed after Record
+			if ( iRecorder->RecordL() != KErrNone )
+				{
+				return EFalse;
+				}	
+			break;
+			}
+		case EFunctionPause:
+			{
+			
+			iRecorder->Pause();
+			// Turn off the IHF after playing
+			SetIHFIfCallNotActive( EFalse );         
+			break;
+			}
+		case EFunctionForward:
+			{
+			TInt result = iRecorder->ForwardL();
+
+			// The volume setting is lost when the media server client object
+			// is stopped.
+			SetRecorderVolume();
+
+			if ( result )
+				{
+				return EFalse;
+				}
+			break;
+			}
+		case EFunctionRewind:
+			{
+			iRecorder->RewindL();
+			if ( iButtonPanelObserver )
+			    {
+			    iButtonPanelObserver->Update();
+			    }
+
+			// The volume setting is lost when the media server client object
+			// is stopped
+			SetRecorderVolume();
+			break;
+			}
+		case EFunctionRecordNew:
+			{
+			CVRMdaRecorder* iRecorderUtility = NULL;
+			if ( VRUtils::UnsupportedCallTypeOngoing( ETrue ) )
+				{
+				return EFalse;
+				}
+			iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
+			if(iRecorderUtility == NULL)
+				{
+				return EFalse;
+				}
+			iRecorderUtility->SetInRecordingFlag(ETrue);
+            
+			iCanHandleCommands = EFalse;
+			// Don't accept CBA commands
+			iCBAEnabled = EFalse;
+			// Update CBAs
+			iDecoratorObserver->Update( EVRUpdateCBA );
+            
+		    iRecorder->DetachMemo();
+			
+			TRAPD( leaveErr1, SetMemoNameNewL( 
+					iContext == EContextRecordNewForRemote ) );
+			
+			// Can't attach if memo name couldn't be generated
+			TInt leaveErr2( KErrNone );
+			if( !leaveErr1 )
+				{
+				TRAP( leaveErr2, iRecorder->AttachToMemoL( iMemo ) );	
+				}
+			
+			TBool ifAttach = iRecorderUtility->IsAttachedToMemo();		
+	
+			if ( leaveErr1 || leaveErr2 || !ifAttach)
+				{
+				iCanHandleCommands = ETrue;
+				iCBAEnabled = ETrue;
+				if ( leaveErr1 == KErrDiskFull || leaveErr2 == KErrDiskFull )	
+					{
+					if ( iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL())
+						{
+		 				VRUtils::ShowMemoryFullConfirmationQuery(ETrue);
+						}
+					else
+						{
+				 		VRUtils::ShowMemoryFullConfirmationQuery();
+						}
+					}
+				}
+			
+			User::LeaveIfError( leaveErr1 );
+			User::LeaveIfError( leaveErr2 );
+			if(!ifAttach)
+				{
+			    User::Leave(KErrNotReady);	
+				}
+				
+			// Indicates that a new memo is attached but not yet recording 
+			// started -> handle can be reused and memo can be deleted in exit
+			iMemo->SetRecorded( EFalse );
+			
+			TInt recError( KErrNone );
+
+			//TRAPD( recLeaveErr, recError = iRecorder->RecordL() );
+			if(iCurrentCallHandler->StateL(KPSUidCtsyCallInformation,KCTsyCallState )==EPSCTsyCallStateConnected)
+				{
+				iRecorderUtility->SetAudioInputL(CAudioInput::EVoiceCall);
+				iRecorderUtility->ConfigSampleRateOfVoiceCallL();
+				}
+			//Change for CS call:Audio input can't be changed after Record
+            TRAPD( recLeaveErr, recError = iRecorder->RecordL() );
+            
+            if (GetInRecordingFlag())
+            	{
+            	iRecorderUtility->SetInRecordingFlag(EFalse);
+            	}
+            	
+			if ( recError != KErrNone || recLeaveErr )
+				{
+				iCanHandleCommands = ETrue;
+				iCBAEnabled = ETrue;
+				if ( recLeaveErr )
+					{
+					User::LeaveIfError( recLeaveErr );					
+					}
+				else
+					{
+					return EFalse;	
+					}
+				}
+			
+			
+			iCanHandleCommands = ETrue;	
+			// Accept CBAs again. CBAs are updated when state is changed
+			iCBAEnabled = ETrue;
+			break;
+			}
+		case EFunctionDelete:
+			{
+			iRecorder->DetachMemo();
+			// Detaching resets the clip position so button panel 
+			// needs to be updated
+			iButtonPanelObserver->Update( EVRUpdatePositionChange );
+			if ( !iMemo->QueryAndDeleteL() )
+				{
+				iRecorder->AttachToMemoL( iMemo );
+				return EFalse;
+				}
+			break;
+			}
+		case EFunctionRename:
+			{
+			iRecorder->DetachMemo();
+			// Detaching resets the clip position so button panel 
+			// needs to be updated
+			iButtonPanelObserver->Update( EVRUpdatePositionChange );
+			if ( iMemo->QueryAndRenameL() )
+				{
+				if ( iStateInfoObserver )
+					{
+					iStateInfoObserver->Update();
+					}
+				}
+			iRecorder->AttachToMemoL( iMemo );
+			break;
+			}
+		case EFunctionOk:
+			{
+
+			HBufC* label = StringLoader::LoadLC( R_VR_SAVE_WAITNOTE_LABEL );
+
+			iRecorder->DetachMemo();
+			iIsNoteLaunched = ETrue;
+			iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label );
+
+			CEikonEnv::Static()->EikAppUi()->HandleCommandL( 
+												ECmdEmbeddedRecordingReady );
+
+			iGlobalNote->CancelNoteL( iNoteId );
+			iIsNoteLaunched = EFalse;
+#ifdef _DEBUG
+			RDebug::Print( _L( 
+						"VoiceRecorder: CVRRecViewModel Note cancelled" ) );
+#endif
+			CleanupStack::PopAndDestroy( label );
+
+			HandleCommandL( EEikCmdExit );
+			break;
+			}
+		case EFunctionCancel:
+			{
+			iRecorder->DetachMemo();
+			iMemo->DeleteL();
+			HandleCommandL( EEikCmdExit );
+			break;
+			}
+		case EFunctionNop:
+			{
+			// dummy command, do nothing
+			break;
+			}
+		case EFunctionNRTStop:
+			{
+			// Turn off the IHF after playing
+			SetIHFIfCallNotActive( EFalse );
+
+			iRecorder->Stop();
+			CheckIhfState();
+			break;
+			}
+		case EFunctionNRTAutoStop:
+			{
+			// Turn off the IHF after playing
+			SetIHFIfCallNotActive( EFalse );
+			CheckIhfState();
+			break;
+			}
+		case EFunctionSetNewPosition:	
+			{
+			TInt newValue( 0 );
+			if ( iStateInfoPanelObserver )
+				{
+				newValue = iStateInfoPanelObserver->ProgressBarPosition();		
+				}
+
+			iRecorder->SetPositionL( newValue );
+			
+			//Inform button Panel
+			if ( iButtonPanelObserver )
+			    {
+			    iButtonPanelObserver->Update( EVRUpdateStateChange );
+			    }
+			break;
+			}	
+		default:
+			{
+			User::Panic( KVRPanic, EPanicFunctionUnknown );
+			break;
+			}
+		}
+		return ETrue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::StopAndSaveL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::StopAndSaveL( TInt aResourceId )
+	{
+	HBufC* label = NULL;
+
+	// Don't show the note if aResourceId was not defined
+	if ( aResourceId )
+		{
+		label = StringLoader::LoadLC( aResourceId );
+		}
+
+	iRecorder->DetachMemo();
+
+	if ( label )
+		{
+		iIsNoteLaunched = ETrue;
+		if(iMemo)
+			{
+		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label );	
+			}
+		
+		// There is no more note showing in SavePermanentlyL() -function
+		// the note is shown here
+		ShowNoteL( aResourceId, EAknGlobalInformationNote );
+		}
+	else
+		{
+		iIsNoteLaunched = ETrue;
+		if(iMemo)
+			{
+		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, KNullDesC );
+			}
+		}
+
+	TRAP_IGNORE(iRecorder->AttachToMemoL( iMemo ));
+
+	iGlobalNote->CancelNoteL( iNoteId );
+	iIsNoteLaunched = EFalse;
+
+	if ( aResourceId )
+		{
+		CleanupStack::PopAndDestroy( label );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::StopAndCloseL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::StopAndCloseL( TInt aResourceId )
+	{
+	HBufC* label = NULL;
+
+	// Don't show the note if aResourceId was not defined
+	if ( aResourceId )
+		{
+		label = StringLoader::LoadLC( aResourceId );
+		}
+
+	iRecorder->DetachMemo();
+
+	if ( label )
+		{
+		iIsNoteLaunched = ETrue;
+		if(iMemo)
+			{
+		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, *label );	
+			}
+		}
+	else
+		{
+		iIsNoteLaunched = ETrue;
+		if(iMemo)
+			{
+		    iMemo->SavePermanentlyL( iGlobalNote, iNoteId, KNullDesC );	
+			}
+		}
+
+	iGlobalNote->CancelNoteL( iNoteId );
+	iIsNoteLaunched = EFalse;
+
+	if ( aResourceId )
+		{
+		CleanupStack::PopAndDestroy( label );
+		}
+	}
+
+void CVRRecViewModel::ShowNoteL( TInt aResourceId,
+								 TAknGlobalNoteType aNoteType )
+	{
+	HBufC* label = StringLoader::LoadLC( aResourceId );
+	iGlobalNote->ShowNoteL( aNoteType, *label );
+	CleanupStack::PopAndDestroy( label );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetVolumeControlState
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::GetVolumeControlState( TVRVolumeControlState& aState,
+											TInt& aVolume )
+	{
+	// ignored
+	TRAP_IGNORE( ReadDefaultSpeakerL() );
+	if ( iState->iHasVolumeControl )
+		{
+		if ( iIhfState )
+			{
+			aState = EIhf;
+
+			}
+		else
+			{
+			aState = EEarPiece;
+			}
+		aVolume = iIhfVolume;
+		}
+	else
+		{
+		aState = EDisabled;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::LoadVolumeSettingsL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::LoadVolumeSettingsL()
+	{
+	iIhfVolume = VRUtils::DefaultVolumeL( ESpeakerIhf );
+	// Prevent using incorrect values
+	if ( iIhfVolume < KVRVolumeControlMin ||
+		iIhfVolume > KVRVolumeControlMax )
+		{
+		iIhfVolume = KVRDefaultVolume;
+		}		
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SaveVolumeSettings
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SaveVolumeSettings()
+	{
+	// Ignore all errors, because this will be called in destructor. It isn't 
+	// disastrous if new values aren't saved, the previous values will be there
+	TRAP_IGNORE( VRUtils::SetDefaultVolumeL( ESpeakerIhf, iIhfVolume ); );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::HandleSystemEventL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::HandleSystemEventL()
+	{
+	// Fetch the changed value from Pubsub
+	TInt currentState( iCurrentCallHandler->StateL(KPSUidCtsyCallInformation, KCTsyCallState ) );
+
+	if ( !iActive )
+		{
+		iPreviousCallState = currentState;
+		return;
+		}
+
+
+	// Actions to take when playing
+	if ( iState->iId == EStatePlaying )
+		{
+		switch ( currentState )
+			{
+			case EPSCTsyCallStateAlerting:
+			case EPSCTsyCallStateRinging:
+			case EPSCTsyCallStateAnswering:
+				{
+				HandleCommandL( ECmdAutoStopAtEnd );
+				break;
+				}
+			default:
+				{
+				break;
+				}
+			}			
+		}
+
+	// Actions to take when recording
+	if ( iState->iId == EStateRecording )
+		{
+		switch ( currentState )
+			{
+			case EPSCTsyCallStateAlerting:
+			case EPSCTsyCallStateRinging:
+			case EPSCTsyCallStateAnswering:
+			case EPSCTsyCallStateDisconnecting:
+				{
+				HandleCommandL( ECmdAutoStopAtEnd );
+				break;
+				}
+			case EPSCTsyCallStateNone:
+				{
+				if( iPreviousCallState == EPSCTsyCallStateConnected )
+					{
+					CVRMdaRecorder* iRecorderUtility = NULL;
+					iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);
+					if(iRecorderUtility != NULL)
+						{
+						iRecorderUtility->SetAudioInputL(CAudioInput::EDefaultMic);					
+						}
+					HandleCommandL( ECmdAutoStopAtEnd );
+					}
+				break;										
+				}
+			default:
+				{
+				break;
+				}
+			}			
+		}		
+
+	if ( iState->iId == EStateIdle && 
+		 currentState == EPSCTsyCallStateNone )
+		{
+		iIhfState = ETrue;
+		}
+
+	/* -------------------------
+	 * Disable in-call recording
+	 * -------------------------
+	 */
+	if ( iVRAllowInCallRecording != KAllowInCallRecording )
+		{
+		if (( iState->iId == EStateIdle || iState->iId == EStateDeleted ) &&
+			 currentState == EPSCTsyCallStateAnswering)
+			{
+			// Disable record button
+			ChangeState( EStateDisableButtons, ETrue );
+			}
+		if (( iState->iId == EStateDisableButtons ) &&
+			 ((currentState == EPSCTsyCallStateDisconnecting)|| (currentState == EPSCTsyCallStateNone)))
+			{
+			if (iContext != EContextRecordNewForRemote)
+				{
+			// Enable record button
+			ChangeState( EStateDeleted, ETrue );
+				}
+		     else
+		        {
+		        if (!(iMemo->Duration() > TTimeIntervalMicroSeconds(0)))
+		        	{
+		        	ChangeState( EStateRecordEmbedded, ETrue );
+		        	}
+		        else
+		        	{
+		        	ChangeState( EStateIdleRecordEmbedded, ETrue );
+		        	}
+		        }
+			}
+		}
+		
+	iPreviousCallState = currentState;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetIHFIfCallNotActive
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetIHFIfCallNotActive( TBool aIhf )
+	{
+	if ( FeatureManager::FeatureSupported( 
+							KFeatureIdApplicationControllableAudioRouting ) )
+		{
+		TInt currentState( EPSCTsyCallStateNone );
+        // Ignore the error, ihf is not set
+		TRAP_IGNORE( currentState = iCurrentCallHandler->StateL( 
+									KPSUidCtsyCallInformation, KCTsyCallState ) );
+
+		if ( currentState == EPSCTsyCallStateNone )
+			{
+			if ( iRecorder->SetIhf( aIhf ) == KErrNone )
+				{
+				// So that the model knows that the next notify from shared 
+				// data client is not a voice key activated IHF change.
+				iIgnoreNextIhfChange = ETrue;
+				}
+			}
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CheckIhfState
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::CheckIhfState()
+	{
+	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
+		FeatureManager::FeatureSupported( 
+							KFeatureIdApplicationControllableAudioRouting ) )
+		{
+		if ( iDefaultSpeaker == ESpeakerIhf )
+			{
+			iIhfState = ETrue;
+			}
+		else
+			{
+			iIhfState = EFalse;
+			}
+		}
+	else
+		{
+		// IHF is default on phones with voice key
+		iIhfState = ETrue;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetRecorderVolume
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetRecorderVolume()
+	{
+	TInt activeVolume = iIhfVolume;
+	iRecorder->SetVolume( activeVolume, KVRMaxVolumeSteps );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ActivateL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::ActivateL()
+	{
+	iActive = ETrue;
+
+	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
+		FeatureManager::FeatureSupported( 
+				KFeatureIdApplicationControllableAudioRouting ) )
+		{
+		// The user has visited another view and possibly altered the
+		// settings
+		ReadDefaultSpeakerL();
+		}
+
+	// If the in-call disable recording feature has been enabled, then check 
+	// current status and enable/disable UI accordingly
+	if ( iVRAllowInCallRecording != KAllowInCallRecording )
+		{
+		TInt currentState( iCurrentCallHandler->StateL(
+			KPSUidCtsyCallInformation, KCTsyCallState ) );
+		if ( currentState != EPSCTsyCallStateNone )
+			{
+			ChangeState (EStateDisableButtons, ETrue);
+			}
+        }
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::Deactivate
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::Deactivate()
+	{
+	iActive = EFalse;
+	}
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::ReadDefaultSpeakerL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::ReadDefaultSpeakerL()
+	{
+	iDefaultSpeaker = VRUtils::DefaultSpeakerL();
+
+	if ( iDefaultSpeaker == ESpeakerIhf )
+		{
+		iIhfState = ETrue;
+		}
+	else
+		{
+		iIhfState = EFalse;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::TVRLabelLayoutLink::ReadFromResource
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::TVRLabelLayoutLink::ReadFromResource
+										( TResourceReader& aReader )
+	{
+	iEuroId = aReader.ReadUint32();
+	iApacId = aReader.ReadUint32();
+	iArabicHebrewId = aReader.ReadUint32();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::CanSetVolume
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::CanSetVolume()
+	{
+	return ETrue;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::HandleUpdateErrorL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::HandleUpdateErrorL( TInt aErr )
+	{
+	// Show error note.
+	if ( aErr == KErrDiskFull )
+		{
+
+#ifndef RD_MULTIPLE_DRIVE    
+		if ( VRUtils::MemoStoreL() == EMemoStorePhoneMemory )
+			{
+			ShowNoteL( R_VR_MEMORY_WARNING, EAknGlobalWarningNote );
+			}
+		else
+			{
+			ShowNoteL( R_VR_MEMORY_MMC_WARNING, EAknGlobalWarningNote );
+			}
+			
+//multiple drive
+#else
+		TInt memoDrive = VRUtils::MemoDriveL();
+		TUint status( 0 );
+		VRUtils::GetDriveInfo( memoDrive, status );
+		        
+		if ( status & DriveInfo::EDriveInternal )
+		    {
+			ShowNoteL( R_VR_MEMORY_WARNING, EAknGlobalWarningNote );
+			}
+		else
+			{
+			ShowNoteL( R_VR_MEMORY_MMC_WARNING, EAknGlobalWarningNote );
+			}
+#endif
+
+
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::MemoFileHandle
+// 
+// ---------------------------------------------------------------------------
+//
+RFile& CVRRecViewModel::MemoFileHandle()
+	{
+	return iMemo->File();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetFileHandle
+// 
+// ---------------------------------------------------------------------------
+//	
+void CVRRecViewModel::SetFileHandle( RFile& aFile )
+	{
+	// Use app startup type as embbedding flag
+	iMemo->SetFileHandle( aFile, CEikonEnv::Static()->StartedAsServerApp() );
+	if ( iRecorder )
+		{
+		// First detach if already attached
+		iRecorder->DetachMemo();
+		// The media server error will rise again somewhere where it's
+		// easier to handle if needed
+		TRAP_IGNORE( iRecorder->AttachToMemoL( iMemo ) );		
+		}
+
+	}	
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::FormatTimeL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::FormatTimeL( const TTime& aTime, TDes& aString ) const
+	{
+
+	// Show longer format if duration more than 1 hour
+	if ( aTime.DateTime().Hour() >= 1 )
+		{
+		aTime.FormatL( aString,
+			  iTimeDuratLong );						
+		}
+	else
+		{
+		aTime.FormatL( aString,
+			  iTimeDuratMinSecWithZero );						
+		}	
+	}
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::EnableVolumeControl
+// Enables/Disables the navi pane Volume Control drawing in the VR current 
+// visual state
+// ---------------------------------------------------------------------------
+//	
+void CVRRecViewModel::EnableVolumeControl( TBool aVolumeControl )
+	{
+	iState->iHasVolumeControl = aVolumeControl;
+	}
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::HasVolumeControl
+// Returns ETrue if volume setting is enabled in this VoiceRecorder state.
+// Otherwise returns EFalse
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::HasVolumeControl() const
+	{
+	if( iState->iHasVolumeControl )
+		{
+		return ETrue;
+		}
+	return EFalse;	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::IncomingCall
+// Returns ETrue if a phone call is coming.
+// Otherwise returns EFalse
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::IncomingCall() const
+	{
+#ifdef _DEBUG
+	RDebug::Print( _L("CVRRecViewModel::IncomingCall enter") );
+#endif	
+	
+	// Fetch the current value from Pubsub
+	TInt currentState = 0;
+	TRAP_IGNORE(currentState = iCurrentCallHandler->StateL( KPSUidCtsyCallInformation, KCTsyCallState ));
+	
+	if (currentState == EPSCTsyCallStateAlerting ||
+		currentState == EPSCTsyCallStateRinging ||
+		currentState == EPSCTsyCallStateAnswering )
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;	
+		}	
+	}
+
+
+// ---------------------------------------------------------------------------
+//Returns the active quality setting.
+//return Quality setting of the active memo
+// ---------------------------------------------------------------------------
+TVRQuality CVRRecViewModel::Quality() const
+	{
+		return iMemo->Quality();
+	}
+
+
+// ---------------------------------------------------------
+// GetInRecordingFlag
+// 
+// ---------------------------------------------------------
+//		
+TBool CVRRecViewModel::GetInRecordingFlag()
+	{
+	if(iRecorder)
+		{
+		CVRMdaRecorder* iRecorderUtility = NULL;
+		iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);	
+		if(iRecorderUtility != NULL)
+			{
+			return iRecorderUtility->GetInRecordingFlag();
+			}
+		return EFalse;
+		}
+	else
+		{
+		return EFalse;
+		}
+		
+	}
+	
+
+// ---------------------------------------------------------
+// GetIfStopCalled
+// 
+// ---------------------------------------------------------
+//		
+TBool CVRRecViewModel::GetIfStopCalled()
+	{
+	if(iRecorder)
+		{
+		CVRMdaRecorder* iRecorderUtility = NULL;
+		iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);	
+		if(iRecorderUtility != NULL)
+			{
+			return iRecorderUtility->GetIfStopCalled();
+			}
+		return EFalse;
+		}
+	else
+		{
+		return EFalse;
+		}
+		
+	}
+
+	
+// ---------------------------------------------------------
+// SetInRecordingFlag
+// ---------------------------------------------------------
+//
+void CVRRecViewModel::SetInRecordingFlag(TBool aFlag)
+	{
+	if(iRecorder)
+		{
+		CVRMdaRecorder* iRecorderUtility = NULL;
+		iRecorderUtility = dynamic_cast<CVRMdaRecorder*>(iRecorder);	
+		if(iRecorderUtility != NULL)
+			{
+			return iRecorderUtility->SetInRecordingFlag(aFlag);
+			}		
+		}
+	}
+
+
+
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::HandleMMCEjectEventL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::HandleMMCEjectEventL()
+	{
+	
+	// Actions to take when recording
+	TInt storageDrive = VRUtils::MemoDriveL();   	 
+    if ( ( ( storageDrive == VRUtils::GetRemovableMassStorageL()) ||
+            ( iMemo != NULL && iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL() ) ) && 
+            ( !CVRUSBStateHanlder::IsUsbActive() ) )
+		{
+        //exit for mmc dismount	
+        SendExitEvent();   
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SendExitEvent
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SendExitEvent()
+    {
+    TWsEvent event;
+    event.SetType( EAknSoftkeyExit );
+    event.SetTimeNow();
+    event.SetHandle( CCoeEnv::Static()->WsSession().WsHandle() );
+    CCoeEnv::Static()->WsSession().SendEventToWindowGroup( CEikonEnv::Static()->RootWin().Identifier(), event );
+    return;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::SetIsDriveReady
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRRecViewModel::SetIsDriveReady(TBool aIsDriveReady)
+    {
+    iIsDriveReady = aIsDriveReady;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRRecViewModel::GetIsDriveReady
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CVRRecViewModel::GetIsDriveReady()
+    {
+    return iIsDriveReady;
+    }
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRecViewModel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,761 @@
+/*
+* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is the data model and state machine of the Recorder View.
+*     The state machine is defined by a VR_STATEMACHINE resource structure.
+*
+*/
+
+
+#ifndef __CVRRECVIEWMODEL_H__
+#define __CVRRECVIEWMODEL_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <e32property.h> 
+#include <AknNotifyStd.h>
+#include <badesca.h>
+
+#include "MVRIHFObserver.h"
+#include "MVRKeyObserver.h"
+#include "MVRDecoratorModel.h"
+#include "MVRButtonPanelModel.h"
+#include "MVRStateInfoModel.h"
+#include "MVRObserver.h"
+#include "MVRSelectionProvider.h"
+#include "MVRVolumeChangeObserver.h"
+
+#include "MVRSystemEventObserver.h"
+#include "MVRMediaRemovalObserver.h"
+
+
+#include "TVRContext.h"
+#include "voicerecorder.hrh"
+
+#include "MVRStateInfoObserver.h"
+
+// FORWARD DECLARATIONS
+class CAknGlobalNote;
+class CSendUi;
+class MVRMdaRecorder;
+class CVRMemo;
+class MVRObserver;
+class TResourceReader;
+class TVRState;
+class CVRSystemEventHandler;
+class CVRMediaRemovalMonitor;
+
+
+// CLASS DEFINITION
+/**
+* This class is the data model and state machine of the Recorder View.
+* The state machine is defined by a VR_STATEMACHINE resource structure.
+*/
+NONSHARABLE_CLASS( CVRRecViewModel ): 
+	  public CBase,
+	  public MVRDecoratorModel, public MVRButtonPanelModel,
+	  public MVRStateInfoModel, public MVRObserver,
+	  public MVRKeyObserver, public MVRVolumeChangeObserver,
+      public MVRSystemEventObserver,
+      public MVRMediaRemovalObserver      
+	{
+	private:	// nested classes
+
+		class TVRLabelLayoutLink
+			{
+			public:
+				/**
+				* Constructs this object from a VR_LABEL_LINK resource
+				* @param aReader A resource reader object initialised
+				*		 to a resource.
+				*/
+				void ReadFromResource( TResourceReader& aReader );
+			public:
+
+				// Link to the latin layout
+				TInt iEuroId;
+				
+				// Link to the APAC layout
+				TInt iApacId;
+				
+				// Link to the A/H layout
+				TInt iArabicHebrewId;
+			};
+		
+	public: // Constructors and destructor
+
+		/**
+		* Default constructor.
+		*/
+		CVRRecViewModel();
+
+		/**
+		* Destructor
+		*/
+		~CVRRecViewModel();
+
+		/**
+		* Constructs the model from a VR_STATEMACHINE resource.
+		* @param aReader A resource reader object initialised to a resource.
+		*/
+		void ConstructFromResourceL( TResourceReader& aReader );
+
+	public: // from MVRKeyObserver
+
+		/**
+		* This function is called when a subject wants to report a key event.
+		* @param aKeyEvent The key event.
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown
+		* @return Indicates whether or not the key event was used.
+		*/
+		TBool ProcessKeyEventL( const TKeyEvent& aKeyEvent,
+								const TEventCode aType );
+
+	public: // from MVRDecoratorModel
+
+		/**
+		* Returns the resource id for current softkeys
+		* @return Softkey resource identifier
+		*/
+		TInt CbaResourceId() const;
+
+		/**
+		* Returns the resource id for current menu bar
+		* @return Menu bar resource identifier.
+		*/
+		TInt MenuBarResourceId() const;
+
+		/**
+		* Used to get the state of the volume control component.
+		*/
+		void GetVolumeControlState( TVRVolumeControlState& aState,
+											TInt& aVolume );
+
+		/**
+		* Specifies the current help context.
+		* @param aContext the context IDs are placed here
+		*/
+		void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+
+		/**
+		* Registers an observer for receiving
+		* update notifications from this interface.
+		* @param aObserver The observer object.
+		*/
+		void SetDecoratorObserver( MVRObserver* aObserver );
+		
+		/**
+		* Tells in return value if CBA Buttons should be enabled or not
+		* @return ETrue if buttons should be enabled, EFalse otherwise
+		*/
+		TBool CBAEnabled() const;
+		
+	public: // from MVRButtonPanelModel
+
+		/**
+		* Returns the number of buttons.
+		* @return number of buttons (>=0)
+		*/
+		TInt ButtonCount() const;
+
+		/**
+		* Returns the state of a specific button.
+		* @param aButtonId Button identifier
+		* @return ENormal or EDimmed
+		*/
+		TInt ButtonState( TInt aButtonId ) const;
+
+		/**
+		* Returns the command id of a specific button.
+		* @param aButtonId Button identifier
+		* @return One of TVRCommands
+		*/
+		TInt CommandId( TInt aButtonId ) const;
+
+		/**
+		* Returns the id of the button that should have initial focus.
+		* @return Button identifier
+		*/
+		TInt InitialFocusButtonId() const;
+
+		/**
+		* Registers an observer for receiving
+		* update notifications from this interface.
+		* @param aObserver The observer object.
+		*/
+		void SetButtonPanelObserver( MVRObserver* aObserver );
+
+		/**
+		* Checks if button panel model needs to reset the focus
+		* for example after a state change
+		* @return Is reset needed
+		*/		
+		TBool ResetNeeded();
+		
+		/**
+		* Returns an ID of the current visual state.
+		* @returns Visual state Id.
+		*/
+		TUint VisualStateId() const;
+		
+        /**
+		* Checks if there is a call incoming at the moment
+		* @return ETrue if call incoming, EFalse otherwise
+		*/
+        TBool IncomingCall() const;	
+
+		/**
+		* Checks if model is in a state where it can take and handle
+		* new commands
+		* @return Can model handle new commands
+		*/
+		TBool CanHandleCommands() const;
+
+	public: // from MVRStateInfoModel
+
+		/**
+		* Returns the length of the current memo
+		* @return The duration in microseconds.
+		*/
+		TTimeIntervalMicroSeconds Duration() const;
+
+		/**
+		* Returns the playing or recording position of the current memo.
+		* @return The position in microseconds.
+		*/
+		TTimeIntervalMicroSeconds Position() const;
+
+		/**
+		* Returns the text content for a label.
+		* @param aName Returned text is placed in this descriptor
+		* @param aLabelIndex Label identifier (>=0)
+		*/
+		void GetLabel( TDes& aName, TInt aLabelIndex ) const;
+
+		/**
+		* Returns the resource id for a label.
+		* @param aLabelIndex Label identifier (>=0)
+		* @return The resource id for the specified label
+		*/
+		TInt ResourceIdForLabel( TInt aLabelIndex, TAknLayoutId aLayout ) const;
+
+		/**
+		* Registers an observer for receiving
+		* update notifications from this interface.
+		* @param aObserver The observer object.
+		*/
+		void SetStateInfoObserver( MVRObserver* aObserver );
+		
+		/**
+		* Determines if model has a progress bar
+		* @return ETrue, if model has a progress bar, otherwise EFalse
+		*/
+		TBool HasProgressBar() const;
+		
+		/**
+		* Determines if model has a volume control in this state
+		* @return ETrue, if model has a volume control, otherwise EFalse
+		*/
+		TBool HasVolumeControl() const;
+		
+		/**
+		* Registers an observer to communicate about the changes in InfoPanel. 
+		* @param aObserver The observer object.
+		*/
+		void SetStateInfoPanelObserver( MVRStateInfoObserver* aObserver );
+
+	public: // from MVRObserver
+
+		/**
+		* Called to notify a change in the observed subject's state.
+		*/
+		void Update( TVRUpdateCommand aCommand );
+
+	public: // from MVRSelectionProvider
+
+		/**
+		* Returns the current memo name in an array
+		* Ownership is transferred. Caller must destroy the returned array.
+		* @return The array containing 0 or 1 names.
+		*/
+		MDesCArray* GetSelectedFilesLC() const;
+
+	public: // from MVRVolumeChangeObserver
+
+		/**
+		* Called to notify a change in volume settings.
+		* @param aStep Volume level in steps
+		* @param aMaxSteps How many steps there are (10 usually).
+		*/
+		void SetVolume( TInt aStep, TInt aMaxSteps );
+
+		/***
+		* Indicates if volume can be set, because rinto tone
+		* volume change has no effect if the tone is playing.
+		*/
+		TBool CanSetVolume();
+
+	public: // CVRSystemEventObserver
+	
+		void HandleSystemEventL();
+
+		void HandleMMCEjectEventL();
+		
+	public: // new methods
+
+		/**
+		* Handles a option menu / command button / softkey command.
+		* @param aCommandId Command identifier, one of TVRCommands
+		*/
+		void HandleCommandL( TInt aCommandId );
+		
+		/**
+		* Returns iInRecording flag
+		* @return True or False
+		*/
+        TBool GetInRecordingFlag();
+        
+       /**
+		* set iInRecording flag
+		* 
+		*/
+        void SetInRecordingFlag(TBool);
+
+
+		/**
+		* Check if stop has been called before
+		* @return True or False
+		*/
+        TBool GetIfStopCalled();
+
+
+		/**
+		* Enters a new state machine context.
+		* Executes the initial state transition defined by the context.
+		* @param aContext Identifies the new context.
+		*/
+		void EnterContextL( const TVRRecViewContexts& aContext );
+
+		/**
+		* Leaves the current state machine context.
+		*/
+		void LeaveContext();
+
+		/**
+		* Sets the memo name. Forwards the call to CVRMemo.
+		* @param aFilename The new file name
+		*/
+		void SetMemoName( const TDesC& aFilename );
+
+		/**
+		* Sets the memo name to a new, unique, one.
+		* Forwards the call to CVRMemo.
+		*/
+		void SetMemoNameNewL( TBool aEmbedded = EFalse );
+
+		/**
+		* Sets the path to directory where memos will be saved.
+		* Forwards the call to CVRMemo.
+		*/
+		void SetSavingLocationL( const TDesC& aPath );
+
+		/**
+		* Returns the complete file name (path and everything).
+		* @return Reference to the memo name.
+		*/
+		const TDesC& Filename() const;
+
+		/**
+		* Returns embedding status.
+		* @param ETrue if the current context is an embedded one.
+		*/
+		TBool IsEmbedded() const;
+
+		/**
+		* Indicates if we are in a state that can accept
+		* more commands (i.e. all async calls have completed).
+		* @return ETrue if it's ok to proceed calling methods.
+		*/
+		TBool CanAcceptCommands() const;
+
+		/**
+		* Sends the current memo via MMS/Infra/Bluetooth/Email
+		* @param aSendUi The CSendUi object used for sending
+		*/
+		void SendViaL( CSendUi* aSendUi );
+
+		/**
+		* Activates the recorder view model
+		*/
+		void ActivateL();
+
+		/**
+		* Deactivates the recorder view model
+		*/
+		void Deactivate();
+
+        /**
+        * Sets the file handle to record into
+        */
+        void SetFileHandle( RFile& aFile );
+
+        /**
+        * Returns the active file handle of CVRMemo object
+        */
+        RFile& MemoFileHandle();
+        
+        /**
+        * Enables or disables the Volume Control drawing in current
+        * visual state
+        * @param aVolumeControl ETrue if Volume Control should be enabled
+        * 						EFalse if disabled 
+        */
+        void EnableVolumeControl( TBool aVolumeControl );
+        
+        /**
+		* Returns the active quality setting.
+		* @return Quality setting of the active memo
+		*/
+		TVRQuality Quality() const;
+		
+        /**
+         * Send exit event to UI
+         */
+        void SendExitEvent();
+        
+        /**
+        * Set the value of iIsDriveReady.
+        * @param The new value of iIsDriveReady.
+        */
+        void SetIsDriveReady(TBool aIsDriveReady);
+                
+        /**
+        * Get the value of iIsDriveReady.
+        * @return The value of iIsDriveReady.
+        */
+        TBool GetIsDriveReady();
+
+	private: // new methods
+
+		/**
+		* Enters a new state.
+		* Executes a function identified by the state transition.
+		* Notifies all registered observers.
+		* @param aNewState identifies the new state.
+		* @param aForce force change state (even if new is same as old)
+		*/
+		void ChangeState( TUint aNewState, TBool aForced = EFalse );
+
+		/**
+		* Retrieves transition information to the given transition object.
+		* @param aTransition Transition to be filled in.
+		* @param aCommandId The command that triggered this transition.
+		*/
+		void GetTransition( TVRContext::TTransition& aTransition,
+							TUint aCommandId ) const;
+
+		/**
+		* Retrieves transition information to the given transition object.
+		* This is used the retrieve the initial transition of a state.
+		* @param aTransition Transition to be filled in.
+		*/
+		void GetTransition( TVRContext::TTransition& aTransition ) const;
+
+		/**
+		* Calls the specified function.
+		* @param aFunctionId Function identifier (TVRFunctions)
+		* @return EFalse if the function want's to cancel the state change
+		*/
+		TBool CallFunctionByIdL( TInt aFunctionId );
+
+		/**
+		* Returns the text content for a label.
+		* This is a leaving variant of GetLabel(). It is called by
+		* GetLabel() inside a TRAP.
+		* @param aName Returned text is placed in this descriptor
+		* @param aLabelIndex Label identifier (>=0)
+		*/
+		void GetLabelL( TDes& aName, TInt aLabelIndex ) const;
+
+		/**
+		* Stops recording and saves the memo.
+		* The specified note text is displayed while saving.
+		* @param aResourceId  Identifies the note text.
+		*/
+		void StopAndSaveL( TInt aResourceId );
+
+		/**
+		* Stops recording and saves the memo.
+		* The specified note text is displayed while saving.
+		* Leaves the memo detached so that application can be closed.
+		* @param aResourceId  Identifies the note text.
+		*/
+		void StopAndCloseL( TInt aResourceId );
+
+		/**
+		* Shows a global note.
+		* @param aResourceId Identifies the note text.
+		* @param aNoteType Identifies the note type.
+		*/
+		void ShowNoteL( TInt aResourceId, TAknGlobalNoteType aNoteType );
+
+		/**
+		* Loads the volume settings (IHF & ear piece) from VoiceRecorder.ini
+		*/
+		void LoadVolumeSettingsL();
+
+		/**
+		* Saves the volume settings (IHF & ear piece) to VoiceRecorder.ini
+		* Note: This method is non-leaving and ignores all errors, because
+		* it's called inside the destructor. LoadVolumeSettingsL() has
+		* sanity checking so the situation isn't fatal if the saving fails.
+		*/
+		void SaveVolumeSettings();
+
+		/**
+		* Sets IHF on/off, if the phone is not in voice on alerting state
+		* @param aIhf ETrue == set IHF on, EFalse == set IHF off
+		*/
+		void SetIHFIfCallNotActive( TBool aIhf );
+
+		/*
+		* Checks if the current default speaker is loudspeaker or earpiece
+		*/
+		void CheckIhfState();
+
+		/**
+		* Sets the volume on the media server client object according
+		* to the current active IHF setting.
+		*/
+		void SetRecorderVolume();
+
+		/**
+		* Reads the default speaker setting and sets iIhfState accordingly
+		*/
+		void ReadDefaultSpeakerL();
+
+		/*
+		* Handles error in Update method.
+		* @param aErr Id of the error
+		*/
+		void HandleUpdateErrorL( TInt aErr );
+
+		/*
+		* Formats time to R_QTN_TIME_DURAT_LONG or 
+		* R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO depending of time value
+		* @param aTime Time that is formatted
+		* @param aString Buffer that holds the formatted time
+		*/
+		void FormatTimeL( const TTime& aTime, TDes& aString ) const;
+		
+		/*
+		* Generates an array of services that should be dimmed from the 
+		* options menu "Send" selection list
+		* @return A pointer to an array that consists of the service Uids 
+		* 		that should be dimmed
+		*/
+		CArrayFixFlat<TUid>* SendViaServicesToDimLC();
+
+	private: // data
+
+		/**
+		* The state machine structure.
+		*/
+		TVRContext iContexts[ ENumContexts ];
+
+		/**
+		* The current context.
+		*/
+		TVRRecViewContexts iContext;
+
+		/**
+		* Pointer to the current state. Contained in iContexts.
+		*/
+		TVRState* iState;
+
+		/**
+		* Pointer to the voice memo object. Owned
+		*/
+		CVRMemo* iMemo;
+
+		/**
+		* Pointer to the recorder object. Owned
+		*/
+		MVRMdaRecorder* iRecorder;
+
+		/**
+		* Pointer to a global information note object. Owned
+		*/
+		CAknGlobalNote* iGlobalNote;
+
+		/**
+		* Pointer to an array of UI states. Owned
+		*/
+		CArrayFixSeg< TVRState > iStateArray;
+
+		/**
+		* Pointer to an array of label sets. Owned.
+		*/
+		CArrayPtrSeg< CDesCArray > iLabelSets;
+
+		/**
+		* Pointer to an array of label resource ids. Owned.
+		*/
+		TVRLabelLayoutLink* iLabelLayoutLinks;
+
+		/**
+		* Pointer to the button panel observer. Not owned.
+		*/
+		MVRObserver* iButtonPanelObserver;
+
+		/**
+		* Pointer to the decorator observer. Not owned.
+		*/
+		MVRObserver* iDecoratorObserver;
+
+		/**
+		* Pointer to the state info observer. Not owned.
+		*/
+		MVRObserver* iStateInfoObserver;
+
+		/**
+		* Format string placeholder.
+		* R_QTN_DATE_USUAL_WITH_ZERO is loaded to it in construction.
+		*/
+		TBuf< VRLABELMAXLENGTH > iDateUsualWithZero;
+
+		/**
+		* Format string placeholder.
+		* R_QTN_TIME_USUAL_WITH_ZERO is loaded to it in construction.
+		*/
+		TBuf< VRLABELMAXLENGTH > iTimeUsualWithZero;
+
+		/**
+		* Format string placeholder.
+		* R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO is loaded to it in construction.
+		*/
+		TBuf< VRLABELMAXLENGTH > iTimeDuratMinSecWithZero;
+		
+		/**
+		* Format string placeholder.
+		* R_QTN_TIME_DURAT_LONG is loaded to it in construction.
+		*/		
+		TBuf< VRLABELMAXLENGTH > iTimeDuratLong;
+
+		/**
+		* ETrue if the model has succesfully entered a context.
+		*/
+		TBool iContextEntered;
+
+		/**
+		* For listening call events. Owned.
+		*/
+		CVRSystemEventHandler* iCurrentCallHandler;
+
+		CVRMediaRemovalMonitor* iCurrentMMCEjectHandler;
+
+
+		/**
+		* Current logical state (i.e. what the user sees, not the actual
+		* state of the HW) of the IHF
+		*/
+		TBool iIhfState;
+
+		/**
+		* Prefered volume of the IHF
+		*/
+		TInt iIhfVolume;
+
+		/**
+		* Used to tell the IHF change event listener, that the next IHF
+		* change is not made with voice key and is to be ignored
+		*/
+		TBool iIgnoreNextIhfChange;
+
+		/**
+		* Indicates if the view is actually active, so that the model
+		* knows when to ignore IHF change events
+		*/
+		TBool iActive;
+
+		/**
+		* Default speaker when playing
+		*/
+		TVRSpeaker iDefaultSpeaker;
+
+		/**
+		* Indicates if End key is pressed so view deactivation can trigger 
+		* right operation ( paused memo is saved as well )
+		*/
+		TBool iIsEndKey;
+
+		/*
+		* Id for canceling waitnote
+		*/
+		TInt iNoteId;
+
+		/*
+		*
+		*/
+		TBool iIsNoteLaunched;
+
+		/**
+		* Default audio format for recording audio clip
+		*/
+		TInt iVRAudioFormat;
+
+		/**
+		* Allow In-call recording functionality
+		*/
+		TInt iVRAllowInCallRecording;
+
+
+		/**
+		* The call state retrieved on previous notification
+		*/
+		TInt iPreviousCallState;
+		
+		/**
+		* Should the button panel reset itself on update
+		*/
+		TBool iResetButtons;
+		
+		/**
+		* If model can handle commands. i.e. no critical command handling
+		* just ongoing, e.g. waiting start tone play before starting
+		* recording
+		*/
+		TBool iCanHandleCommands;
+		
+		/**
+		* Pointer to the state info panel observer. Not owned.
+		*/
+		MVRStateInfoObserver* iStateInfoPanelObserver;
+		
+		/**
+		* State of the CBA buttons. If EFalse LSK/RSK deliver ECmdNOP which
+		* causes no action.
+		*/
+		TBool iCBAEnabled;
+		
+	    /**
+	     * To judge whether the current drive is ready for recording
+	     */
+	    TBool iIsDriveReady;
+	};
+
+#endif // __CVRRECVIEWMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRemConObserver.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,185 @@
+/*
+* 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:  Class that observer remote controller framework events
+*                and forwards them as key events to observe
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <w32std.h>
+#include <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+#include <AknDef.h>
+#include <aknconsts.h>
+
+#include "MVRVolumeEventObserver.h"
+#include "CVRRemConObserver.h"
+
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CVRRemConObserver::CVRRemConObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+//
+CVRRemConObserver::CVRRemConObserver( MVRVolumeEventObserver* aObserver )
+	: iObserver( aObserver )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVRRemConObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CVRRemConObserver::ConstructL()
+    {
+    iInterfaceSelector = CRemConInterfaceSelector::NewL();
+    
+    iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
+    
+    iInterfaceSelector->OpenTargetL();
+   
+    iVolumeRepeatTimer = CPeriodic::NewL( CActive::EPriorityHigh );       
+    }
+
+// ----------------------------------------------------------------------------
+// CVRRemConObserver::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CVRRemConObserver* CVRRemConObserver::NewL( MVRVolumeEventObserver* aObserver )
+    {
+    CVRRemConObserver* self = new( ELeave ) CVRRemConObserver( aObserver );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CVRRemConObserver::~CVRRemConObserver
+// Destructor
+// ----------------------------------------------------------------------------
+//    
+CVRRemConObserver::~CVRRemConObserver()
+    {
+    delete iInterfaceSelector; // it internally deletes iCoreTarget
+    
+    if( iVolumeRepeatTimer->IsActive() ) 
+        {
+        iVolumeRepeatTimer->Cancel(); 
+        }
+    delete iVolumeRepeatTimer;    
+    }
+
+
+// ----------------------------------------------------------------------------
+// CVRRemConObserver::MrccatoCommand
+// 
+// ----------------------------------------------------------------------------
+//  
+EXPORT_C void CVRRemConObserver::MrccatoCommand( 
+										TRemConCoreApiOperationId aOperationId, 
+										TRemConCoreApiButtonAction aButtonAct )
+	{
+	TKeyEvent myEvent;
+
+    if( iVolumeRepeatTimer->IsActive())  
+        {
+        iVolumeRepeatTimer->Cancel();
+        }	
+
+	switch( aOperationId )	
+		{
+		case ERemConCoreApiVolumeUp:
+			{
+			// Simulate a "right button event" for CAknVolumeControl
+			myEvent.iCode = EKeyRightArrow;
+			break;
+			}
+		case ERemConCoreApiVolumeDown:
+			{
+			// Simulate a "left button event" for CAknVolumeControl
+			myEvent.iCode = EKeyLeftArrow;
+			break;
+			}
+		default:
+			{
+			// Ignore other commands
+			return;
+			}
+		}
+
+	// Convert the remote control event to a button click and send it to 
+	// volume control
+	switch( aButtonAct )
+		{
+		case ERemConCoreApiButtonClick:
+			{
+			TRAP_IGNORE( iObserver->HandleVolumeChangeL( myEvent, 
+														 EEventKey ) );
+			break;
+			}
+		case ERemConCoreApiButtonPress:
+			{
+			// Start repeat
+            iVolumeChange = myEvent;
+            iVolumeRepeatTimer->Cancel();
+            iVolumeRepeatTimer->Start(
+                KAknStandardKeyboardRepeatRate,
+                KAknStandardKeyboardRepeatRate,
+                TCallBack( DoHandleVolumeRepeatL, this )  );
+			break;
+			}
+		case ERemConCoreApiButtonRelease:
+			{
+			iVolumeChange.iCode = 0;
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRRemConObserver::DoHandleVolumeRepeatL
+// 
+// ----------------------------------------------------------------------------
+//  
+TInt CVRRemConObserver::DoHandleVolumeRepeatL( TAny* aAny )
+    {
+  	// Repeat last keypress
+    CVRRemConObserver* self = reinterpret_cast< CVRRemConObserver* >( aAny );
+	if ( self->iObserver->HandleVolumeChangeL( self->iVolumeChange, EEventKey )
+		!= KErrNone )
+		{
+		self->iVolumeChange.iCode = 0;
+		self->iVolumeRepeatTimer->Cancel();
+		}
+    return KErrNone;
+    }
+    
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRRemConObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* 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:  Class that observer remote controller framework events
+*                and forwards them as key events to observe
+*
+*/
+
+
+#ifndef __CVRREMCONOBSERVER_H
+#define __CVRREMCONOBSERVER_H
+
+//  INCLUDES
+#include <e32def.h>
+#include <remconcoreapitargetobserver.h>
+
+// FORWARD DECLARATIONS
+class MVRVolumeEventObserver;
+class CRemConInterfaceSelector;  
+class CRemConCoreApiTarget;
+
+// CLASS DECLARATION
+
+/**
+*  Class for monitoring side volume key events.
+*  Is also responsible for creating repeating keypresses if key is held down
+*
+*/
+NONSHARABLE_CLASS( CVRRemConObserver )
+	: public CBase,	public MRemConCoreApiTargetObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CVRRemConObserver* NewL( MVRVolumeEventObserver* aObserver );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CVRRemConObserver();
+
+    protected: // Functions from base classes
+
+        /**
+        * @see MRemConCoreApiTargetObserver.
+        *
+        * A command has been received. 
+        * @param aOperationId The operation ID of the command.
+        * @param aButtonAct The button action associated with the command.
+        */
+        void MrccatoCommand( TRemConCoreApiOperationId aOperationId, 
+                             TRemConCoreApiButtonAction aButtonAct);
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CVRRemConObserver( MVRVolumeEventObserver* aObserver );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+        /**
+        * Catch timer event. Volume command is repeated
+        @param aAny
+        */
+        static TInt DoHandleVolumeRepeatL( TAny* aAny );        
+
+    private:    // Data
+    	/** Observer to notify about a event. Not owned. **/
+		MVRVolumeEventObserver* iObserver;
+		
+		/** Remote Controller. Owned */
+        CRemConInterfaceSelector* iInterfaceSelector;  
+        
+        /** Remote Controller. Not owned. */
+        CRemConCoreApiTarget* iCoreTarget;
+
+        /** Timer for counting key press. Owned. */
+        CPeriodic *iVolumeRepeatTimer;
+         
+        /** Status of volume command */
+        TBool iRemConVolumeCommandOk;
+        
+        /** Volume change that is repeated */
+        TKeyEvent iVolumeChange;
+    };
+
+#endif      // CVRRemConObserver_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRStateInfoPanel.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,521 @@
+/*
+* 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: 
+*     A compound control class. It is responsible for drawing and updating
+*     a set of labels, and a progress bar.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <eikprogi.h>
+#include <aknenv.h>
+#include <applayout.cdl.h>
+#include <aknview.h>
+#include <aknViewAppUi.h>
+#include <AknDef.h>
+#include <AknsConstants.h>
+#include <aknlayoutscalable_apps.cdl.h>
+
+#include "CVRLabel.h"
+#include "CVRStateInfoPanel.h"
+#include "MVRStateInfoModel.h"
+#include "voicerecorder.hrh"
+#include "VRConsts.h"
+
+// CONSTANTS
+const TInt KVRLabelMap[] =
+	{
+	CVRStateInfoPanel::ELabelName,
+	CVRStateInfoPanel::ELabelDate,
+	CVRStateInfoPanel::ELabelQuality,
+	CVRStateInfoPanel::ELabelStatus,
+	CVRStateInfoPanel::ELabelMax,
+	CVRStateInfoPanel::ELabelMin,
+	CVRStateInfoPanel::ELabelQualityText
+	};
+	
+_LIT( KVREmptyLabel, " " );
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::CVRStateInfoPanel
+// 
+// ----------------------------------------------------------------------------
+//		
+CVRStateInfoPanel::CVRStateInfoPanel( MVRStateInfoModel* aModel )
+	: iModel( aModel ), iLabels( ENumLabels ), iPBposition( 0 )
+	{
+	if ( iModel )
+		{
+		iModel->SetStateInfoObserver( this );
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::CVRStateInfoPanel
+// 
+// ----------------------------------------------------------------------------
+//		
+CVRStateInfoPanel::CVRStateInfoPanel( MVRStateInfoModel* aModel,
+                               				TUid aParentViewUid )
+	: iModel( aModel ), 
+	iLabels( ENumLabels ),
+	iParentViewUid( aParentViewUid ), 
+	iPBposition( 0 )
+	{
+	if ( iModel )
+		{
+		iModel->SetStateInfoObserver( this );
+		iModel->SetStateInfoPanelObserver( this );
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::~CVRStateInfoPanel
+// 
+// ----------------------------------------------------------------------------
+//			
+CVRStateInfoPanel::~CVRStateInfoPanel()
+	{
+	if ( iModel )
+		{
+		iModel->SetStateInfoObserver( NULL );
+		}
+	iLabels.ResetAndDestroy();
+	delete iProgressBar;
+	iSkin = NULL;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::ConstructL
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::ConstructL()
+	{
+	// New skin instance is loaded
+	iSkin = AknsUtils::SkinInstance();
+	
+	// Create labels
+	for ( TInt i = 0; i < ENumLabels; i++ )
+		{
+		CVRLabel* label = CVRLabel::NewLC( *this );
+
+		// Set the MOP-parent so that the labels can get the 
+		// skin context from rec view container
+		label->SetMopParent( this );
+		iLabels.AppendL( label );
+		CleanupStack::Pop(); // label;
+
+		// Set initial text for label
+		TBuf< VRLABELMAXLENGTH > str;
+		iModel->GetLabel( str, i );
+		label->SetText( str );
+		}
+
+	CreateProgressBarL();
+	UpdateLayoutL();
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::CreateProgressBarL
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::CreateProgressBarL()
+	{
+	delete iProgressBar;
+	iProgressBar = NULL;
+
+	// Create progress bar
+	CEikProgressInfo::SInfo info = ProgressInfo();
+
+	iProgressBar = new( ELeave ) CEikProgressInfo( info );
+	iProgressBar->SetContainerWindowL( *this );
+	
+	// Set the MOP-parent so that the progress bar can get the 
+	// skin context from rec view container
+	iProgressBar->SetMopParent( this );
+	iProgressBar->ConstructL();
+
+	iProgressBar->ActivateL();
+	AknLayoutUtils::LayoutControl( iProgressBar, Rect(),
+		AppLayout::Voice_Recorder_elements_Line_4() );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::SizeChanged
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::SizeChanged()
+    {
+    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() );
+        
+        CCoeControl* label( iLabels.At( i ) );
+        TRgb color( KRgbBlack );
+        AknsUtils::GetCachedColor( iSkin, color, KAknsIIDQsnTextColors,
+        		EAknsCIQsnTextColorsCG6 );
+        // We can ignore the error, it only means we will have wrong color
+        TRAP_IGNORE( AknLayoutUtils::OverrideControlColorL( *label,
+        		EColorLabelText, color ) );
+        }
+    
+    // There's nothing rational to do here if it leaves
+    TRAP_IGNORE( CreateProgressBarL() );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::Draw
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::Draw( const TRect& /*aRect*/ ) const
+	{
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::CountComponentControls
+// 
+// ----------------------------------------------------------------------------
+//		
+TInt CVRStateInfoPanel::CountComponentControls() const
+	{
+	TInt componentCount( 0 );
+	if ( iProgressBar )
+		{
+		componentCount = ENumLabels + 1;  // +1 means iProgressBar
+		}
+	return componentCount;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::ComponentControl
+// 
+// ----------------------------------------------------------------------------
+//		
+CCoeControl* CVRStateInfoPanel::ComponentControl( TInt aIndex ) const
+	{
+	if ( aIndex < ENumLabels )
+		{
+		return iLabels.At( aIndex );
+		}
+	else
+		{
+		return iProgressBar;
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::Update
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::Update( TVRUpdateCommand /*aCommand*/ )
+	{
+	for ( TInt i = 0; i < ENumLabels; i++ )
+		{
+		TBuf< VRLABELMAXLENGTH > str;
+		iModel->GetLabel( str, i );
+		if ( str.Length() < 1 )
+			{
+			// "" doesn't empty the label, so use space
+			str = KVREmptyLabel;
+			}
+		iLabels.At( i )->SetTextAndDraw( str );
+		}
+	
+	UpdateProgressBar();
+	
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::UpdateLayoutL
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::UpdateLayoutL()
+	{
+	SizeChanged();
+	}
+
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::ProgressInfo
+// 
+// ----------------------------------------------------------------------------
+//		
+CEikProgressInfo::SInfo CVRStateInfoPanel::ProgressInfo()
+	{
+	CEikProgressInfo::SInfo info;
+
+	TAknWindowLineLayout infobarLayout =
+		AppLayout::Voice_Recorder_elements_Line_4();
+    TAknLayoutRect infobarRect;
+    infobarRect.LayoutRect( Rect(), infobarLayout );	
+  
+    info.iWidth = infobarRect.Rect().Width();
+	info.iHeight = infobarRect.Rect().Height();
+
+	return info;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::HandleResourceChangeL
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::HandleResourceChangeL( TInt aType )
+	{
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+		UpdateLayoutL();
+        }
+	else if ( aType == KAknsMessageSkinChange )
+		{
+		// New skin instance is loaded
+		iSkin = AknsUtils::SkinInstance();
+		}
+	
+	for ( TInt i = 0; i < ENumLabels; i++ )
+		{
+		if ( i < iLabels.Count() )
+			{
+			iLabels.At( i )->HandleResourceChange( aType );	
+			}
+		}
+		
+	iProgressBar->HandleResourceChange( aType );
+	UpdateProgressBar();
+	
+	CCoeControl::HandleResourceChange( aType );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::UpdateProgressBar
+// 
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::UpdateProgressBar()
+	{
+	
+	if ( iProgressBar )
+		{
+		if ( iModel->HasProgressBar() )
+			{
+			iProgressBar->SetFinalValue( I64INT( iModel->Duration().Int64() /
+										 KVRSecondAsMicroSeconds ) );
+			iProgressBar->SetAndDraw( I64INT( iModel->Position().Int64() /
+									  KVRSecondAsMicroSeconds ) );
+			iProgressBar->MakeVisible( ETrue );
+			
+			iPBposition = I64INT( iModel->Position().Int64() /
+									  KVRSecondAsMicroSeconds );
+			}
+		else
+			{
+			iProgressBar->MakeVisible( EFalse );
+			}
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::HandlePointerEventL
+// From CCoeControl
+// ----------------------------------------------------------------------------
+//		
+void CVRStateInfoPanel::HandlePointerEventL( const TPointerEvent& 
+													aPointerEvent )
+	{
+	if( AknLayoutUtils::PenEnabled() && iModel->HasProgressBar() && 
+		iProgressBar )
+		{
+		CCoeControl::HandlePointerEventL( aPointerEvent );
+		
+		switch( aPointerEvent.iType )
+			{
+			case TPointerEvent::EButton1Down:
+				{
+				TRect progressBarRect( iProgressBar->Rect() );
+				// Check if pressed position is in progress bar's rect
+				if( progressBarRect.Contains( aPointerEvent.iPosition ) )
+					{
+					HandleProgressBarTouchL( progressBarRect, 
+											 aPointerEvent.iPosition.iX );
+					}
+				break;
+				}
+			case TPointerEvent::EDrag:
+				{
+				TRect progressBarRect( iProgressBar->Rect() );
+				if( progressBarRect.Contains( aPointerEvent.iPosition ) )
+					{
+					HandleProgressBarTouchL( progressBarRect, 
+											 aPointerEvent.iPosition.iX );
+					}
+				break;		
+				}
+			case TPointerEvent::EButton1Up:
+				{		
+				break;
+				}		
+			default:
+				{
+				break;	
+				}	
+			}
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::HandleProgressBarTouchL
+// 
+// ----------------------------------------------------------------------------
+//	
+void CVRStateInfoPanel::HandleProgressBarTouchL( TRect aPBRect, 
+												 TInt aPressedPoint )
+	{
+	if ( AknLayoutUtils::PenEnabled() )
+		{
+#ifdef _DEBUG
+		RDebug::Print( _L( "VoiceRecorder: HandleProgressBarTouchL enter" ) );
+#endif
+		// Progress Bar start and end points
+		TInt pbEndPoint( aPBRect.iBr.iX );
+		TInt pbStartPoint( aPBRect.iTl.iX );
+		
+		TInt totalPBLength( pbEndPoint - pbStartPoint );
+		// calculate what is the time position that was pressed in 
+		// the progress bar
+		TTimeIntervalMicroSeconds newPosition( 
+										( ( aPressedPoint - pbStartPoint ) * 
+							  			iModel->Duration().Int64() ) / 
+							  			totalPBLength );
+							  			
+		// Round the position to the nearest second value
+		TInt roundedNewPosition( RoundMicroSecsToSecs( newPosition ) );
+
+		// Performace issue. Send command only if value has changed
+		if ( roundedNewPosition != iPBposition )
+			{
+			iPBposition = roundedNewPosition;
+
+			CAknViewAppUi* appUi = reinterpret_cast< CAknViewAppUi* >(
+											CEikonEnv::Static()->EikAppUi() );
+			CAknView* view = appUi->View( iParentViewUid );
+			
+			// inform the view that position has changed.
+			view->HandleCommandL( ECmdSetNewPosition );	
+			}	
+#ifdef _DEBUG
+		RDebug::Print( _L( "VoiceRecorder: HandleProgressBarTouchL exit" ) );
+#endif
+			
+		} // PenEnabled
+		
+	}
+	
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::RoundMicroSecsToSecs
+// Rounds aMicroSecs value to nearest second value (Round)
+// ----------------------------------------------------------------------------
+//			
+TInt CVRStateInfoPanel::RoundMicroSecsToSecs( TTimeIntervalMicroSeconds 
+											  aMicroSecs )
+	{	
+	// Rounds to secondss resolution (Floor)
+	Int64 secondsInMicroSecs( ( ( aMicroSecs.Int64() / 
+								  KVRSecondAsMicroSeconds ) * 
+								  KVRSecondAsMicroSeconds ) );
+								  
+	// takes the leftover part in seconds resolution
+	Int64 leftoversInMicroSecs ( aMicroSecs.Int64() - secondsInMicroSecs );
+	
+	// Nearer to upper sec value
+	if ( leftoversInMicroSecs / ( KVRSecondAsMilliSeconds ) > 
+		 KVRHalfSecondAsMilliSeconds )
+		{
+		// + 1 sec
+		return ( ( secondsInMicroSecs + KVRSecondAsMicroSeconds ) / 
+													 KVRSecondAsMicroSeconds );
+		}
+	// Nearer to lower sec value	
+	else
+		{
+		return secondsInMicroSecs / KVRSecondAsMicroSeconds;
+		}	
+	}
+	
+
+// ----------------------------------------------------------------------------
+// CVRStateInfoPanel::ProgressBarPosition
+// Just returns the current progress bar position
+// ----------------------------------------------------------------------------
+//		
+TInt CVRStateInfoPanel::ProgressBarPosition() const
+	{
+	return iPBposition;
+	}
+	
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRStateInfoPanel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,208 @@
+/*
+* 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: 
+*     A compound control class. It is responsible for drawing and updating
+*     a set of labels, and a progress bar.
+*
+*/
+
+
+#ifndef __CVRSTATEINFOPANEL_H__
+#define __CVRSTATEINFOPANEL_H__
+
+// INCLUDES
+#include <coecntrl.h>
+#include <eikprogi.h>
+#include <AknUtils.h>
+
+#include "MVRObserver.h"
+#include "MVRStateInfoObserver.h"
+
+// FORWARD DECLARATIONS
+class CEikProgressInfo;
+class CVRLabel;
+class MVRStateInfoModel;
+
+
+// CLASS DEFINITION
+/**
+* A compound control class. It is responsible for drawing and updating
+* a set of labels, and a progress bar.
+*/
+NONSHARABLE_CLASS( CVRStateInfoPanel )
+	: public CCoeControl, public MVRObserver, public MVRStateInfoObserver
+	{
+	public: // data types
+	    enum TVRLabels
+	        {
+	        ELabelName = 0,
+	        ELabelDate,
+	        ELabelQuality,
+	        ELabelMin,
+	        ELabelMax,
+	        ELabelStatus,
+	        ELabelQualityText
+	        };
+	
+	public: // constructors and destructor
+
+		/**
+		* Constructor.
+		* @param aModel Pointer to the state info model.
+		* Ownership is not transferred.
+		*/
+		CVRStateInfoPanel( MVRStateInfoModel* aModel );
+		
+		/**
+		* Constructor.
+		* @param aModel Pointer to the state info model.
+		* @param aParentViewUid Uid of CVRRecView for fast swap
+		* Ownership is not transferred.
+		*/
+		CVRStateInfoPanel( MVRStateInfoModel* aModel,
+						   TUid aParentViewUid );
+		/**
+		* Destructor
+		*/
+		virtual ~CVRStateInfoPanel();
+
+		/**
+		* 2nd phase constructor.
+		*/
+		void ConstructL();
+
+	private: // constructors
+
+		/**
+		* Default constructor. Not implemented.
+		*/
+		CVRStateInfoPanel();
+
+	public:
+		/**
+		* Handles a change to the application's resources
+		* @param aType The type of changed resource
+		*/		
+		void HandleResourceChangeL( TInt aType );
+
+	public: // from CCoeControl
+
+		/*
+		* From CCoeControl
+		* @see CCoeControl
+		*/
+		void SizeChanged();
+
+		/**
+		* Called by the framework to get the number of sub-components
+		* contained in this component. 
+		* @return The number of component controls contained by this control
+		*/
+		TInt CountComponentControls() const;
+
+		/**
+		* Called by the framework to get a specified sub-component
+		* of this component.
+		* @param aIndex The index of the component to get.
+		* @return The component control with an index of aIndex.
+		*/
+		CCoeControl* ComponentControl( TInt aIndex ) const;
+		
+		/**
+		* Gets called whenever a pointer event occurs.
+		* @param aPointerEvent The pointer event to handle.
+		*/					
+		void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+	
+	private: // From CCoeControl
+
+		void Draw( const TRect& aRect ) const;
+		
+	public: // from MVRObserver
+
+		/**
+		* Called to notify a change in the observed subject's state.
+		*/
+		void Update( TVRUpdateCommand aCommand );
+		
+	public: // from MVRStateInfoObserver	
+		
+		/**
+		* Returns the current progress bar position value
+		* @return Position value
+		*/
+		TInt ProgressBarPosition() const;
+		
+	private: // Helpers
+
+		CEikProgressInfo::SInfo ProgressInfo();
+
+		void UpdateLayoutL();
+
+		void CreateProgressBarL();
+		
+		/**
+        * Updates the progress bar 
+        */
+		void UpdateProgressBar();
+		
+		/**
+		* Handles progress bar touch events
+		* @param aPBRect Current progress bar rectangle 
+		* @param aPressedPoint The x coordinate value that was pressed
+		* 			inside the progress bar
+		*/
+		void HandleProgressBarTouchL( TRect aPBRect, TInt aPressedPoint );
+		
+		/**
+		* Rounds the parameter value to nearest second value
+		* @param aMicroSecs Time value in microseconds
+		* @return Rounded value in seconds
+		*/
+		TInt RoundMicroSecsToSecs( TTimeIntervalMicroSeconds aMicroSecs );
+
+
+	private: // Data
+
+		/**
+		* Pointer to the button panel model. Not owned.
+		*/
+		MVRStateInfoModel* iModel;
+
+		/**
+		* Pointer to an array of labels. Owned.
+		*/
+		CArrayPtrSeg< CVRLabel > iLabels;
+
+		/**
+		* Pointer to a progress bar control. Owned.
+		*/
+		CEikProgressInfo* iProgressBar;
+		
+		/**
+		* Uid of the parent view
+		*/
+		TUid iParentViewUid;
+		
+		/**
+		* Current progress bar position
+		*/
+		TInt iPBposition;
+		
+		// Skin instance. Not owned.
+		MAknsSkinInstance* iSkin;
+
+	};
+
+#endif // __CVRSTATEINFOPANEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRSystemEventHandler.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,155 @@
+/*
+* 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 MVRSystemEventObserver instance.
+*  Has to be attached to certain P&S -key, so it means having multiple
+*  
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+
+#include "CVRSystemEventHandler.h"
+#include "MVRSystemEventObserver.h"
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::CVRSystemEventHandler
+// 
+// ---------------------------------------------------------------------------
+//
+CVRSystemEventHandler::CVRSystemEventHandler() : CActive( EPriorityLow )
+    {
+	CActiveScheduler::Add( this );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSystemEventHandler::ConstructL()
+    {
+	
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::NewL
+// 
+// ---------------------------------------------------------------------------
+//
+// Two-phased constructor.
+CVRSystemEventHandler* CVRSystemEventHandler::NewL()
+    {
+    CVRSystemEventHandler* self = new (ELeave) CVRSystemEventHandler;
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::~CVRSystemEventHandler
+// 
+// ---------------------------------------------------------------------------
+//
+// Destructor
+CVRSystemEventHandler::~CVRSystemEventHandler()
+    {
+	Cancel();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::IssueRequest
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSystemEventHandler::IssueRequest()
+	{
+	SetActive();
+	iProperty.Subscribe( iStatus );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::RunL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSystemEventHandler::RunL()
+	{
+	// Event received
+
+	if ( iStatus != KErrCancel )
+		{
+		// Request a new event
+		IssueRequest();
+		// Notify the observer
+		iObserver->HandleSystemEventL();
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::Listen
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSystemEventHandler::Listen( TUid aUid, 
+									TUint aKey, 
+									MVRSystemEventObserver* aObserver )
+	{
+	iProperty.Attach( aUid, aKey );
+	
+	iObserver = aObserver;
+	IssueRequest();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::DoCancel
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRSystemEventHandler::DoCancel()
+	{
+	iProperty.Cancel();	
+	}
+
+
+// ---------------------------------------------------------------------------
+// CVRSystemEventHandler::StateL
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CVRSystemEventHandler::StateL( TUid aUid, TUint aKey )
+	{
+	TInt value;
+	User::LeaveIfError( RProperty::Get( aUid, aKey, value ) );
+	return value;
+	}
+	
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRSystemEventHandler.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,116 @@
+/*
+* 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 MVRSystemEventObserver instance.
+*
+*
+*/
+
+
+
+#ifndef __CVRSYSTEMEVENTHANDLER_H
+#define __CVRSYSTEMEVENTHANDLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+
+// FORWARD DECLARATIONS
+class MVRSystemEventObserver;
+
+// CLASS DECLARATION
+
+/**
+*  An active object class that is used to receive
+*  phone call related events from RSystemAgent and forward them
+*  to an MVRSystemEventObserver instance.
+*/
+NONSHARABLE_CLASS( CVRSystemEventHandler ): public CActive
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+		* @return A pointer to fully constructed instance of CVRSystemEventHandler
+        */
+        static CVRSystemEventHandler* NewL();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CVRSystemEventHandler();
+
+    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 system events
+		* @param aUid The UID identifying the system agent's state variable
+		* @param aObserver The observer who will be notified of events
+		*/
+		void Listen( TUid aUid, TUint aKey, MVRSystemEventObserver* 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 system agent to notify us about events
+		*/
+		void IssueRequest();
+
+        /**
+        * Default constructor.
+        */
+        CVRSystemEventHandler();
+
+        /**
+        * 2nd phase constructor.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+		/**
+		* For observing the system events
+		*/
+		RProperty iProperty;
+
+        /**
+        * Pointer to the observer. Not owned.
+        */
+		MVRSystemEventObserver* iObserver;
+    };
+
+#endif      // __CVRSYSTEMEVENTHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRTonePlayer.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,254 @@
+/*
+* 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:  Class that handles playback of tones in VoiceRec application
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <avkon.hrh>
+#include <aknappui.h>
+#include <AudioPreference.h>
+#include <aknsoundsystem.h>
+#include <aknSoundinfo.h>
+
+#include "CVRTonePlayer.h"
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::CVRTonePlayer
+// 
+// ---------------------------------------------------------------------------
+//
+CVRTonePlayer::CVRTonePlayer()
+	: iState( EVRToneIdle )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::ConstructL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRTonePlayer::ConstructL()
+    {
+    iPlayer = CMdaAudioToneUtility::NewL( *this );
+    
+    iSoundSystem = ( static_cast< CAknAppUi* >(
+						CEikonEnv::Static()->EikAppUi() )->KeySounds() );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::NewL
+// 
+// ---------------------------------------------------------------------------
+//
+CVRTonePlayer* CVRTonePlayer::NewL()
+    {
+    CVRTonePlayer* self = new ( ELeave ) CVRTonePlayer;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::~CVRTonePlayer
+// 
+// ---------------------------------------------------------------------------
+//
+CVRTonePlayer::~CVRTonePlayer()
+    {
+    if ( iPlayer )
+        {
+        switch ( iPlayer->State() )
+            {
+            case EMdaAudioToneUtilityNotReady:
+                {
+                iPlayer->CancelPrepare();
+                break;
+                }
+            case EMdaAudioToneUtilityPlaying:
+                {
+                iPlayer->CancelPlay();
+                break;
+                }           
+            }
+        }
+    delete iPlayer;
+    
+    // if tone play is not finished before, finish waitloop
+    if ( iShedulerWait.IsStarted() )
+		{
+		iShedulerWait.AsyncStop();
+		}		
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::PrepareToneL
+// Starts preparing the specified tone, preparing completes with call-back to
+// MatoPrepareComplete
+// ---------------------------------------------------------------------------
+//
+void CVRTonePlayer::PrepareToneL( TInt aToneId )
+    {
+	if ( iState != EVRToneIdle )
+		{
+		iQueuedTone = aToneId;
+		return;
+		}
+
+	// Retrieve the tone
+	CAknSoundInfo* info = CAknSoundInfo::NewL();
+	CleanupStack::PushL( info );
+	User::LeaveIfError( iSoundSystem->RequestSoundInfoL(
+					                  aToneId, *info ) );
+    
+    iPreparedTone = aToneId;
+    iState = EVRTonePreparing;
+    
+    iPlayer->PrepareToPlayDesSequence( *info->iSequence );
+    CleanupStack::PopAndDestroy( info );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::PrepareTone
+// Non-leaving version of PrepareToneL
+// ---------------------------------------------------------------------------
+//
+void CVRTonePlayer::PrepareTone( TInt aToneId )
+    {
+    TRAP_IGNORE( PrepareToneL( aToneId ) );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::PlayTone
+// Starts playback of specified tone. Completes with call-back to
+// MatoPlayComplete
+// ---------------------------------------------------------------------------
+//
+void CVRTonePlayer::PlayTone( TInt aToneId )
+    {
+    if ( iState != EVRToneIdle || iPreparedTone != aToneId || 
+        iPlayer->State() == EMdaAudioToneUtilityPlaying )
+    	{
+    	// Preparing an unprepared tone synchronously is not supported,
+    	// tone playback is skipped
+    	return;
+    	}
+    
+    // Preferences need to be set according to tone
+    switch( aToneId )
+    	{
+    	case EAvkonSIDVoiceRecordingStartTone:
+    		{
+    		iPlayer->SetPriority( KAudioPriorityRecording,
+    			TMdaPriorityPreference( KAudioPrefVoiceRecStart ) );
+			break;	    		
+    		}    
+    	case EAvkonSIDVoiceRecordingStopTone:
+    		{
+    		iPlayer->SetPriority( KAudioPriorityRecording,
+    			TMdaPriorityPreference( KAudioPrefVoiceRecStop ) );    		
+			break;    	    		    			
+    		}
+    	default:
+    		{
+    		break;
+    		}
+		}
+ 
+    iState = EVRTonePlaying;
+    
+    iPlayer->Play();
+    
+    // Do not continue until start tone play is finished
+    if( aToneId == EAvkonSIDVoiceRecordingStartTone )
+	    {
+#ifdef _DEBUG
+	    RDebug::Print( _L("VoiceRecorder: Waiting for Start tone play complete") );
+#endif	
+	    iShedulerWait.Start();
+	    }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::MatoPrepareComplete
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRTonePlayer::MatoPrepareComplete(TInt aError)
+	{
+	if ( aError )
+		{
+		iPreparedTone = 0;
+		}
+
+	iState = EVRToneIdle;
+
+	// Prepare the next tone in queue
+	if ( iQueuedTone )
+		{
+		TRAP_IGNORE( PrepareToneL( iQueuedTone ) );
+		iQueuedTone = 0;
+		}
+	}
+	
+
+
+// ---------------------------------------------------------------------------
+// CVRTonePlayer::MatoPlayComplete
+// 
+// ---------------------------------------------------------------------------
+//
+#ifdef _DEBUG
+void CVRTonePlayer::MatoPlayComplete(TInt aError )
+    {
+	RDebug::Print( _L("VoiceRecorder: Tone %d played, error %d"), 
+			iPreparedTone, aError );
+#else
+void CVRTonePlayer::MatoPlayComplete(TInt /*aError*/ )
+    {
+#endif    	
+
+	iState = EVRToneIdle;
+
+	// Prepare the next tone in queue
+	if ( iQueuedTone )
+		{
+		TRAP_IGNORE( PrepareToneL( iQueuedTone ) );
+		iQueuedTone = 0;
+		}
+	
+	// Started only for start-tone	
+	if ( iShedulerWait.IsStarted() )
+		{
+#ifdef _DEBUG
+	    RDebug::Print( _L("VoiceRecorder: Start tone play completed -> Recording started") );
+#endif		
+		// Start tone played -> Recording can be started
+		iShedulerWait.AsyncStop();
+		}	
+			
+	}	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRTonePlayer.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* 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:  Class that handles playback of tones in Voice Recorder application
+*
+*/
+
+
+#ifndef CVRTONEPLAYER_H
+#define CVRTONEPLAYER_H
+
+// INCLUDES
+#include <mdaaudiotoneplayer.h>
+
+// FORWARD DECLARATIONS
+class CAknKeySoundSystem;
+class CAknSoundInfo;
+
+/**
+ *  Class that handles playback of tones in Voice Recorder application
+ *
+ *  @lib VoiceRecorderRecView.lib
+ *  @since S60 v3.0
+ */
+NONSHARABLE_CLASS( CVRTonePlayer )
+	: public CBase, public MMdaAudioToneObserver
+    {
+
+private:
+	enum TVRTonePlayerState
+		{
+		EVRToneIdle,
+		EVRTonePreparing,
+		EVRTonePlaying
+		};
+
+public:
+
+    static CVRTonePlayer* NewL();
+    virtual ~CVRTonePlayer();
+
+    /**
+     * Prepares a tone for playback. This does not guarantee
+     * that preparing is ready after completion.
+     *
+     * @since S60 v3.0
+     * @param aToneId Predefined id of the tone to be prepared
+     */
+    void PrepareToneL( TInt aToneId );
+
+    /**
+     * Non-leaving method that calls PrepareToneL and ignores all leaves
+     *
+     * @since S60 v3.0
+     * @param aToneId Predefined id of the tone to be prepared
+     */
+    void PrepareTone( TInt aToneId );
+
+    /**
+     * Starts playback of tone. Playback starts immediately if the tone
+     * specified has been already been prepared. Otherwise the tone
+     * is first prepared.
+     *
+     * @since S60 v3.0
+     * @param aToneId Predefined id of the tone to be played
+     */
+    void PlayTone( TInt aToneId );
+
+// from base class MMdaAudioToneObserver
+
+    /**
+     * From MMdaAudioToneObserver.
+     * Defines required client behaviour when an attempt to configure the
+	 * audio tone player utility has completed, successfully or otherwise.
+     *
+	 * @param     aError KErrNone if successful. One of the system
+	 *            wide error codes if the attempt failed. The possible
+	 *            values depend on the EPOC platform.
+     */
+    void MatoPrepareComplete(TInt aError);
+
+    /**
+     * From MMdaAudioToneObserver.
+	 * Defines required client behaviour when the tone playing operation has
+	 * completed, successfully or otherwise.
+     *
+	 * @param     aError KErrNone if successful. One of the system
+	 *            wide error codes if the attempt failed. The possible
+	 *            values depend on the EPOC platform.
+     */
+    void MatoPlayComplete(TInt aError);
+
+private:
+
+    CVRTonePlayer();
+    void ConstructL();
+
+private: // data
+
+    /**
+     * Instance of the player class.
+     * Own.
+     */
+     CMdaAudioToneUtility* iPlayer;
+
+	/**
+	 * Pointer to sound system utility that retrieves the sound data.
+	 * Not owned.
+	 */
+	 CAknKeySoundSystem* iSoundSystem;
+
+	/**
+	 * The id of the tone that is currently prepared
+	 */
+	 TInt iPreparedTone;
+
+	/**
+	 * The id of the tone that is in queue
+	 */
+	 TInt iQueuedTone;	
+	 
+	/**	
+	 * Is a tone currently in preparation
+	 */
+	 TVRTonePlayerState iState;
+	 
+	 /**
+	 * Used for waiting tone play comlete until continuing
+	 */
+	 CActiveSchedulerWait iShedulerWait;
+    
+    };
+
+#endif // CVRTONEPLAYER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/DllMain.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2002 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: 
+*      Dll entry point
+*
+*
+*/
+
+
+#include <e32base.h>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRButtonPanelModel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* 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 defines the data model interface for CVRButtonPanel.
+*
+*/
+
+
+#ifndef __MVRBUTTONPANELMODEL_H__
+#define __MVRBUTTONPANELMODEL_H__
+
+// INCLUDES
+#include <e32def.h>
+
+// FORWARD DECLARATIONS
+class MVRObserver;
+
+// CLASS DEFINITION
+/**
+* This class defines the data model interface for CVRButtonPanel.
+*/
+class MVRButtonPanelModel 
+	{
+	public: // new methods
+
+		/**
+		* Returns the number of buttons.
+		* @return number of buttons (>=0)
+		*/
+		virtual TInt ButtonCount() const = 0;
+		
+		/**
+		* Returns the state of a specific button.
+		* @param aButtonId Button identifier
+		* @return ENormal or EDimmed
+		*/
+		virtual TInt ButtonState( TInt aButtonId ) const = 0;
+		
+		/**
+		* Returns the command id of a specific button.
+		* @param aButtonId Button identifier
+		* @return One of TVRCommands
+		*/
+		virtual TInt CommandId( TInt aButtonId ) const = 0;
+				
+		/**
+		* Returns the id of the button that should have initial focus.
+		* @return Button identifier
+		*/
+		virtual TInt InitialFocusButtonId() const = 0;
+		
+		/**
+		* Registers an observer for receiving
+		* update notifications from this interface.
+		* @param aObserver The observer object.
+		*/
+		virtual void SetButtonPanelObserver( MVRObserver* aObserver ) = 0;
+		
+		/**
+		* Checks if button panel model needs to reset the focus
+		* for example after a state change
+		* @return Is reset needed
+		*/
+		virtual TBool ResetNeeded() = 0;
+		
+		/**
+		* Returns an ID of the current visual state.
+		* @returns Visual state Id.
+		*/
+		virtual TUint VisualStateId() const = 0; 		
+		
+		/**
+		* Checks if model is in a state where it can take and handle
+		* new commands
+		* @return Can model handle new commands
+		*/
+		virtual TBool CanHandleCommands() const = 0;		
+		
+	};
+
+#endif // __MVRBUTTONPANELMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRDecoratorModel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* 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 defines the data model interface for CVRViewContainer.
+*
+*/
+
+
+#ifndef __MVRDECORATORMODEL_H__
+#define __MVRDECORATORMODEL_H__
+
+// INCLUDES
+#include <e32def.h>
+#include <bldvariant.hrh>
+
+// FORWARD DECLARATIONS
+class MVRObserver;
+class TCoeHelpContext;
+
+// ENUMERATIONS
+enum TVRVolumeControlState{ EDisabled, EIhf, EEarPiece };
+
+// CLASS DEFINITION
+/**
+* This class defines the data model interface for CVRViewContainer.
+*/
+class MVRDecoratorModel
+	{
+	public: // new methods
+
+		/**
+		* Returns the resource id for current softkeys
+		* @return Softkey resource identifier
+		*/
+		virtual TInt CbaResourceId() const = 0;
+
+		/**
+		* Returns the resource id for current menu bar
+		* @return Menu bar resource identifier.
+		*/
+		virtual TInt MenuBarResourceId() const = 0;
+
+		/**
+		* Used to get the state of the volume control component.
+		*/
+		virtual void GetVolumeControlState( TVRVolumeControlState& aState,
+											TInt& aVolume ) = 0;
+		/**
+		* Specifies the current help context.
+		* @param aContext the context IDs are placed here
+		*/
+		virtual void GetHelpContext( TCoeHelpContext& aContext ) const = 0;
+
+		/**
+		* Registers an observer for receiving
+		* update notifications from this interface.
+		* @param aObserver The observer object.
+		*/
+		virtual void SetDecoratorObserver( MVRObserver* aObserver ) = 0;
+		
+		/**
+		* Tells in return value if CBA Buttons should be enabled or not
+		* @return ETrue if buttons should be enabled, EFalse otherwise
+		*/
+		virtual TBool CBAEnabled() const = 0;
+
+	};
+
+#endif // __MVRDECORATORMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRIHFObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2004-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:  Template class for IHF change observers
+*
+*/
+
+
+#ifndef __MVRIHFOBSERVER_H__
+#define __MVRIHFOBSERVER_H__
+
+//  CLASS DEFINITION
+/**
+ *
+ * Template class for observers of IHF mode changes
+ *
+ */
+class MVRIHFObserver
+	{
+	public: // New functions
+
+		/**
+		* This is a callback function which is called when a IHF mode changes.
+		* User must derive his class from MVRIHFObserver
+		* and implement this method if he is to use notify services.
+		*/
+		virtual void HandleIHFChange() = 0;
+    };
+
+#endif      //  __MVRIHFOBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRKeyObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* 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 observer class used to hand over key events to classes
+*     that can't receive them by themselves (i.e. not CCoeControl derived
+*     classes)
+*
+*/
+
+
+#ifndef __MVRKEYOBSERVER_H__
+#define __MVRKEYOBSERVER_H__
+
+// INCLUDES
+#include <w32std.h>
+
+// CLASS DECLARATION
+/**
+* An observer class used to hand over key events to classes
+* that can't receive them by themselves (i.e. not CCoeControl derived
+* classes)
+*/
+class MVRKeyObserver 
+    {
+
+    public: // new methods
+
+		/**
+		* This function is called when a subject wants to report a key event.
+		* @param aKeyEvent The key event.
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown
+		* @return Indicates whether or not the key event was used.
+		*/
+		virtual TBool ProcessKeyEventL( const TKeyEvent& aKeyEvent,
+										const TEventCode aType ) = 0;
+
+    };
+
+#endif // __MVRKEYOBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRMdaRecorder.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,141 @@
+/*
+* 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 interface acts as a high level wrapper around the media server
+*     playback and recording functionalities. It is inherited by both 
+*	  CVRMdaRecorder
+*
+*/
+
+
+#ifndef __MVRMDARECORDER_H__
+#define __MVRMDARECORDER_H__
+
+
+// FORWARD DECLARATIONS
+class CVRMemo;
+class MVRObserver;
+
+// CLASS DEFINITION
+/**
+* This class acts as a high level wrapper around the media server
+* playback and recording functionalities.
+*/
+class MVRMdaRecorder 
+{
+
+	public: // new methods
+
+		/**
+		* Registers an observer for receiving update notifications.
+		* @param aObserver The observer object.
+		*/
+		virtual void RegisterObserver( MVRObserver* aObserver ) = 0;
+		
+		/**
+		* Unregisters a previously registered observer
+		* @param aObserver The observer object.
+		*/		
+		virtual void UnregisterObserver( MVRObserver* aObserver ) = 0;
+
+		/**
+		* Registers an observer for receiving auto stop notifications.
+		* @param aObserver The observer object.
+		*/
+		virtual void SetAutoStopObserver( MVRObserver* aObserver ) = 0;
+
+		/**
+		* Attachs this recorder to a memo file, i.e. opens it
+		* and initialises media server.
+		* @param aMemo Specifies the file to be attached to.
+		*/
+		virtual void AttachToMemoL( CVRMemo* aMemo ) = 0;
+
+		/**
+		* Creates a new memo file and attachs to it.
+		* @param aMemo Specifies the file to be created.
+		*/
+		virtual void CreateNewMemoL( CVRMemo* aMemo ) = 0;
+
+		/**
+		* Detachs from the current memo, i.e. closes the file.
+		*/
+		virtual void DetachMemo() = 0;
+
+		/**
+		* Sets playback volume.
+		* @param aStep Volume level in steps
+		* @param aMaxSteps How many steps there are (10 usually).
+		*/
+		virtual void SetVolume( TInt aStep, TInt aMaxSteps )= 0;
+
+		/**
+		* Starts playback.
+		* @return System wide error code
+		*/
+		virtual TInt PlayL() = 0;
+
+		/**
+		* Starts recording.
+		* @return System wide error code
+		*/
+		virtual TInt RecordL() = 0;
+
+		/**
+		* Stops playback or recording.
+		*/
+		virtual void Stop() = 0;
+
+		/**
+		* Pauses playback or recording.
+		*/
+		virtual void Pause() = 0;
+
+		/**
+		* Moves the playing position forward 5 seconds.
+		* @return System wide error code. KErrOverflow if the
+		* position was forwarded past the end.
+		*/
+		virtual TInt ForwardL() = 0;
+
+		/**
+		* Moves the playing position backward 5 seconds.
+		* @return System wide error code
+		*/
+		virtual TInt RewindL() = 0;
+
+		/**
+		* Indicates if we are in a state that can accept
+		* more commands (i.e. all async calls have completed).
+		* @return ETrue if it's ok to proceed calling methods.
+		*/
+		virtual TBool CanAcceptCommands() const = 0;
+
+		/**
+		* Set active speaker if feature is supported
+		* @param aEnabled ETrue if playback should be routed to IHF
+		* @return Error code returned by routing operation
+		*/
+		virtual TInt SetIhf( TBool aEnabled ) = 0;
+		
+		/**
+		* Set the audio recorder position to a new value
+		* @param aSeconds The position to set
+		*/
+		virtual void SetPositionL( TInt aSeconds ) = 0;
+		
+		virtual ~MVRMdaRecorder() {};
+	};
+
+#endif // __MVRMDARECORDER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRMediaRemovalObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* 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
+* CVRMediaRemovalHandler class 
+*
+*/
+
+
+#ifndef __MVRMEDIAREMOVALOBSERVER_H
+#define __MVRMEDIAREMOVALOBSERVER_H
+
+// INCLUDES
+#include <e32def.h>
+#include <bldvariant.hrh>
+
+// CLASS DECLARATION
+/**
+*  __MVRMEDIAREMOVALOBSERVER_H
+*/
+class MVRMediaRemovalObserver
+    {
+    public:  // Constructors and destructor		
+    
+    virtual void HandleMMCEjectEventL( ) = 0;
+
+	};
+
+#endif     
+
+// __MVRMEDIAREMOVALOBSERVER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* 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 defines a generic observer interface.
+*
+*/
+
+
+#ifndef __MVROBSERVER_H__
+#define __MVROBSERVER_H__
+
+// INCLUDES
+#include "VRConsts.h"
+
+// CLASS DEFINITION
+/**
+* This class defines a generic observer interface.
+*/
+class MVRObserver 
+	{
+	public: // new methods
+
+		/**
+		* Called to notify a change in the observed subject's state.
+		*/
+		virtual void Update( TVRUpdateCommand aCommand = EVRUpdate ) = 0;
+		
+	};
+
+#endif // __MVROBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRStateInfoModel.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* 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 defines the data model interface for CVRStateInfoPanel.
+*
+*/
+
+
+#ifndef __MVRSTATEINFOMODEL_H__
+#define __MVRSTATEINFOMODEL_H__
+
+// INCLUDES
+#include <AknLayoutDef.h>
+
+// FORWARD DECLARATIONS
+class MVRObserver;
+class MVRStateInfoObserver;
+
+// CLASS DEFINITION
+/**
+* This class defines the data model interface for CVRStateInfoPanel.
+**/
+class MVRStateInfoModel 
+	{
+	public: // new methods
+
+		/**
+		* Returns the length of the current memo
+		* @return The duration in microseconds.
+		*/
+		virtual TTimeIntervalMicroSeconds Duration() const = 0;
+		
+		/**
+		* Returns the playing or recording position of the current memo.
+		* @return The position in microseconds.
+		*/
+		virtual TTimeIntervalMicroSeconds Position() const = 0;
+
+		/**
+		* Returns the text content for a label.
+		* @param aName Returned text is placed in this descriptor
+		* @param aLabelIndex Label identifier (>=0)
+		*/
+		virtual void GetLabel( TDes& aName, TInt aLabelIndex ) const = 0;
+
+		/**
+		* Returns the resource id for a label.
+		* @param aLabelIndex Label identifier (>=0)
+		* @return The resource id for the specified label
+		*/
+		virtual TInt ResourceIdForLabel( TInt aLabelIndex, TAknLayoutId aLayout ) const = 0;
+
+		/**
+		* Registers an observer for receiving
+		* update notifications from this interface.
+		* @param aObserver The observer object.
+		*/
+		virtual void SetStateInfoObserver( MVRObserver* aObserver ) = 0;
+		
+		/**
+		* Determines is view has a progress bar
+		* @return ETrue if view has a progress bar, otherwise EFalse
+		*/
+		virtual TBool HasProgressBar() const = 0;
+		
+		/**
+		* Registers an observer to communicate about the changes in InfoPanel. 
+		* @param aObserver The observer object.
+		*/
+		virtual void SetStateInfoPanelObserver( MVRStateInfoObserver* aObserver ) = 0;
+		
+	};
+
+#endif // __MVRSTATEINFOMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRStateInfoObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 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
+* CVRStateInfoPanel class 
+*
+*
+*/
+
+
+#ifndef __MVRSTATEINFOOBSERVER_H__
+#define __MVRSTATEINFOOBSERVER_H__
+
+// CLASS DEFINITION
+/**
+* This class can be used to observe changes that has been happened in
+* CVRStateInfoPanel class 
+*/
+class MVRStateInfoObserver 
+	{
+	public: // new methods
+
+		/**
+		* Returns the current progress bar position value
+		* @return Position value
+		*/
+		virtual TInt ProgressBarPosition() const = 0;
+		
+	};
+
+#endif // __MVRSTATEINFOOBSERVER_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRSystemEventObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -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
+* CVRSystemEventHandler class 
+*
+*/
+
+
+#ifndef __MVRSYSTEMEVENTOBSERVER_H
+#define __MVRSYSTEMEVENTOBSERVER_H
+
+// INCLUDES
+#include <e32def.h>
+#include <bldvariant.hrh>
+
+// CLASS DECLARATION
+/**
+*  MVRSystemEventObserver
+*/
+class MVRSystemEventObserver
+    {
+    public:  // Constructors and destructor		
+    
+    virtual void HandleSystemEventL() = 0;
+
+	};
+
+#endif      // __MVRSYSTEMEVENTOBSERVER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRUpdateEventProvider.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* 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: 
+*  MVRUpdateEventProvider provides an interface for registering
+*  and unregistering several MVRObserver derived observers
+*
+*/
+
+
+#ifndef __MVRUPDATEEVENTPROVIDER_H
+#define __MVRUPDATEEVENTPROVIDER_H
+
+// INCLUDES
+#include <e32def.h>
+
+#include "MVRObserver.h"
+
+// CLASS DECLARATION
+
+/**
+*  MVRUpdateEventProvider provides an interface for registering
+*  and unregistering several MVRObserver derived observers
+*
+*/
+class MVRUpdateEventProvider
+    {
+    public:
+		/**
+		* Registers an observer for receiving update notifications.
+		* @param aObserver The observer object.
+		*/    
+		virtual void RegisterObserver( MVRObserver* aObserver ) = 0;
+		
+		/**
+		* Unregisters a previously registered observer
+		* @param aObserver The observer object.
+		*/		
+		virtual void UnregisterObserver( MVRObserver* aObserver ) = 0;
+	};
+
+#endif      // __MVRUPDATEEVENTPROVIDER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRVolumeChangeObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* 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 defines a audio volume change observer interface.
+*
+*/
+
+
+#ifndef __MVRVOLUMECHANGEOBSERVER_H__
+#define __MVRVOLUMECHANGEOBSERVER_H__
+
+// INCLUDES
+#include <e32def.h>
+
+// CLASS DEFINITION
+/**
+* This class defines a audio volume change observer interface.
+*/
+class MVRVolumeChangeObserver 
+	{
+	public: // new methods
+
+		/**
+		* Called to notify a change in volume settings.
+		* @param aStep Volume level in steps
+		* @param aMaxSteps How many steps there are (10 usually).
+		*/
+		virtual void SetVolume( TInt aStep, TInt aMaxSteps ) = 0;
+		
+		/***
+		* Indicates if volume can be set, because rinto tone
+		* volume change has no effect if the tone is playing.
+		*/
+		virtual TBool CanSetVolume() = 0;
+	};
+
+#endif // __MVRVOLUMECHANGEOBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/MVRVolumeEventObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* 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:  Common interface for observing volume events provided by
+*                either key presses or side volume keys
+*
+*/
+
+
+
+#ifndef __MVRVOLUMEEVENTOBSERVER_H
+#define __MVRVOLUMEEVENTOBSERVER_H
+
+// CLASS DECLARATION
+
+/**
+*  Interface for passing volume events to observer
+*/
+class MVRVolumeEventObserver
+    {
+    public: // New functions
+        
+		/**
+		* Handles volume change event received from either side volume
+		* keys or left-right rocker presses.
+		* @param aKeyEvent The key event. Will be forwarded to CAknVolumeControl
+		* @param aType The type of key event: EEventKey, EEventKeyUp
+		*              or EEventKeyDown. Will be forwarded to CAknVolumeControl
+		*/
+
+		virtual TInt HandleVolumeChangeL( const TKeyEvent& aKeyEvent,
+									 TEventCode aType ) = 0;		
+
+    };
+
+#endif      // MVRVOLUMEEVENTOBSERVER_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/TVRContext.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a data container for a single RecView context.
+*     A context contains a set of states. Each state
+*     contains a set of valid state transitions.
+*     Different contexts are defined in VoiceRecorder.hrh.
+*
+*
+*/
+
+
+#ifndef __TVRCONTEXT_H__
+#define __TVRCONTEXT_H__
+
+// INCLUDES
+#include "voicerecorder.hrh"
+#include "VRConsts.h"
+
+// CLASS DEFINITION
+/**
+* This class is a data container for a single RecView context.
+* A context contains a set of states. Each state
+* contains a set of valid state transitions.
+* Different contexts are defined in VoiceRecorder.hrh.
+*/
+class TVRContext
+	{
+	public:
+
+		// CLASS DEFINITION
+		/**
+		* This class is a data container for a single RecView
+		* state transition.
+		*/
+		class TTransition
+			{
+			public: // data
+
+				/**
+				* ETrue if this transition has been succesfully initialised.
+				*/
+				TBool iValid;
+
+				/**
+				* Identifies the command that executes this transition.
+				* This is one of TVRCommands.
+				*/
+				TUint iCommandId;
+
+				/**
+				* Identifies the state that is entered by this transition.
+				* This is an index into the TState::iStates array.
+				*/
+				TUint iNewState;
+
+				/**
+				* Identifies the function that gets called after the
+				* state transition is complete.
+				*/
+				TUint iFunctionId;
+
+			};
+
+		// CLASS DEFINITION
+		/**
+		* This class is a data container for a single RecView
+		* state. It contains a set of valid state transitions.
+		*/
+		class TState
+			{
+			public: // data
+
+				/**
+				* ETrue if this state has been succesfully initialised
+				*/
+				TBool iValid;
+
+				/**
+				* A static array of valid transitions (in this State).
+				*/
+				TTransition iTransitions[ KVRMaxTransitions ];
+			
+			};
+
+	public: // data
+
+		/**
+		* ETrue if this context has been succesfully initialised
+		*/
+		TBool iValid;
+
+		/**
+		* A static array of valid states (in this context).
+		*/
+		TState iStates[ ENumStates ];
+
+		/**
+		* Defines the transition that is automatically
+		* executed after entering this context.
+		*/
+		TTransition iInitialTransition;
+
+	};
+
+#endif // __TVRCONTEXT_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/TVRState.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a data container for a single RecView visual (UI) state
+*     It is able to read its parameters from a resource file.
+*     The run-time size of a single TVRState instance is 152 bytes
+*     (unicode build)
+*
+*/
+
+
+// INCLUDE FILES
+#include <barsread.h>	// TResourceReader
+#include "TVRState.h"
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// TVRState::ReadFromResource
+// 
+// ---------------------------------------------------------------------------
+//
+// Reads a STRUCT VR_STATE
+void TVRState::ReadFromResource( TResourceReader& aReader )
+	{
+	iMenubarResourceId = aReader.ReadUint32();
+	iCbaResourceId = aReader.ReadUint32();
+	iStatus.Copy( aReader.ReadTPtrC() );
+	iLabelSetId = TUint8( aReader.ReadUint8() );
+	iHasVolumeControl = TUint8( aReader.ReadUint8() );
+	iHasProgressBar = TUint8( aReader.ReadUint8() );
+	iFocusButtonId = TUint8( aReader.ReadUint8() );
+	iStateId = aReader.ReadUint8();
+	
+	// Reads an array of STRUCT VR_BUTTON_INFO
+	iButtonCount = aReader.ReadInt16();
+	for ( TInt i = 0; i < iButtonCount; i++ )
+		{
+		iButtons[ i ].ReadFromResource( aReader );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// TVRState::TButton::ReadFromResource
+// Reads a STRUCT VR_BUTTON 
+// ---------------------------------------------------------------------------
+//
+void TVRState::TButton::ReadFromResource( TResourceReader& aReader )
+	{
+	iCommandId = aReader.ReadUint16();
+	iState = TUint8( aReader.ReadUint8() );
+	}
+
+
+// ---------------------------------------------------------------------------
+// TVRState::ButtonState
+// 
+// ---------------------------------------------------------------------------
+//
+TUint TVRState::ButtonState( TInt aButtonId ) const
+	{
+	// aButtonId cannot be out of bounds
+	return iButtons[ aButtonId ].iState;
+	}
+
+
+// ---------------------------------------------------------------------------
+// TVRState::ButtonCommandId
+// 
+// ---------------------------------------------------------------------------
+//
+TUint TVRState::ButtonCommandId( TInt aButtonId ) const
+	{
+	// aButtonId cannot be out of bounds
+	return iButtons[ aButtonId ].iCommandId;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/TVRState.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This class is a data container for a single RecView visual (UI) state
+*     It is able to read its parameters from a resource file.
+*     The run-time size of a single TVRState instance is 152 bytes
+*     (unicode build)
+*
+*/
+
+
+#ifndef __TVRSTATE_H__
+#define __TVRSTATE_H__
+
+// INCLUDES
+#include <e32def.h>
+#include "voicerecorder.hrh"
+
+// CONSTANTS
+const TInt KVRMaxButtons( 5 );	// defined by UI spec
+
+// FORWARD DECLARATIONS
+class TResourceReader;
+
+// CLASS DEFINITION
+/**
+* This class is a data container for a single Voice Recorder visual (UI) state
+* It is able to read its parameters from a resource file.
+* The run-time size of a single TVRState instance is 152 bytes (unicode build)
+*/
+class TVRState
+	{
+	private: // nested classes
+
+		// CLASS DEFINITION
+		/**
+		* This class is a data container for a single CVRButtonPanel button
+		* defeinition. It is able to read its parameters from a resource file.
+		* The run-time size of a single TButton instance is 12 bytes.
+		*/
+		class TButton
+			{
+			public: // new methods
+
+				/**
+				* Constructs this button from a VR_BUTTON resource
+				* @param aReader A resource reader object initialised
+				*		 to a resource.
+				*/
+				void ReadFromResource( TResourceReader& aReader );
+
+			public: // data
+
+				/**
+				* The command id of this button (for HandleCommandL use).
+				*/
+				TUint iCommandId;
+
+				/**
+				* The visual state of this button
+				* (see TVRButtonStates in VoiceRecorder.hrh)
+				*/ 
+				TUint8 iState;
+
+			};
+
+	public: // new methods
+
+		/**
+		* Constructs this state from a VR_STATE resource
+		* @param aReader A resource reader object initialised to a resource.
+		*/
+		void ReadFromResource( TResourceReader& aReader );
+
+		/**
+		* Returns the state of a button.
+		* @param aButtonId Identifies a button in iButtons array;
+		* @return The current state of this button. See TButton.
+		*/
+		TUint ButtonState( TInt aButtonId ) const;
+
+		/**
+		* Returns the command id of a button.
+		* @param aButtonId Identifies a button in iButtons array;
+		* @return The command id of this button. See TButton.
+		*/
+		TUint ButtonCommandId( TInt aButtonId ) const;
+
+	public: // data
+		
+		/**
+		* An unique identifier for this visual state.
+		*/	
+		TUint iStateId;
+		
+		/**
+		* An unique identifier for this state.
+		*/
+		TUint iId;
+
+		/**
+		* Identifies the menu bar resource for this state (or null).
+		*/
+		TUint iMenubarResourceId;
+
+		/**
+		* Identifies the softkey resource for this state (or null).
+		*/
+		TUint iCbaResourceId;
+
+		/**
+		* Identifies the button that should gain initial focus.
+		*/
+		TUint8 iFocusButtonId;
+
+		/**
+		* Nonzero if this state should have a volume control.
+		*/
+		TUint8 iHasVolumeControl;
+
+		/**
+		* Nonzero if this state should have a progress bar.
+		*/
+		TUint8 iHasProgressBar;
+
+		/**
+		* Identifies the set of labels for this state.
+		*/
+		TUint8 iLabelSetId;
+
+		/**
+		* The number of buttons in this state.
+		*/
+		TInt iButtonCount;
+
+		/**
+		* Status text for this state (or KNullDesc).
+		*/
+		TBuf< VRLABELMAXLENGTH > iStatus;
+
+	private: // data
+
+		/**
+		* An array of buttons in this state.
+		* The run-time size of iButtons is 60 bytes.
+		*/
+		TButton iButtons[ KVRMaxButtons ];
+
+	};
+
+#endif	// __TVRSTATE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsInc/MVRLayoutChangeObserver.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* 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:  Declares an interface for observing
+*
+*/
+
+
+
+#ifndef MVRLAYOUTCHANGEOBSERVER_H
+#define MVRLAYOUTCHANGEOBSERVER_H
+
+// INCLUDES
+#include <e32def.h>
+
+
+// CLASS DECLARATION
+/**
+*  Notifies layot change.
+*
+*  @lib VoiceRecorderUtils.dll
+*  @since 2.0
+*/
+class MVRLayoutChangeObserver
+    {
+    public:
+        /*
+        * Used to forward HandleResourceChangeL events to observers
+        * @param aType The type of resources that have changed. 
+        */
+		virtual void LayoutChangedL( TInt aType ) = 0;
+    };
+
+#endif      // MVRLAYOUTCHANGEOBSERVER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsInc/MVRSelectionProvider.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,58 @@
+/*
+* 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: 
+*      Interface for file selection
+*
+*
+*/
+
+
+#ifndef __MVRSELECTIONPROVIDER_H__
+#define __MVRSELECTIONPROVIDER_H__
+
+// INCLUDES
+#include <bamdesca.h>
+#include <f32file.h>
+
+// ENUMERATIONS
+enum TVRSelectionStyle { EEmptyList, EFocusedItem, ESingleMarkedItem, EMarkedItems };
+
+// CLASS DEFINITION
+/**
+*
+*/
+class MVRSelectionProvider
+	{
+	public: // new methods
+
+		/**
+		* Ownership is transferred. Caller must destroy the returned array.
+		* @return array of file names
+		*/
+		virtual MDesCArray* GetSelectedFilesLC( TVRSelectionStyle& aStyle ) const = 0;
+
+		/**
+		* Transfer the file handle to view
+		* @param aFile File handle
+		*/
+		virtual void SetFileHandle( RFile& aFile ) = 0;
+		
+		/**
+		* Get the handle to the recorded clip.
+		* @return Open file handle
+		*/
+		virtual RFile& GetFile() = 0;
+	};
+
+#endif // __MVRSELECTIONPROVIDER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsInc/TVRRename.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* 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 encapsulates the functionality associated with renaming
+*     files in different situation. The implementation is made according
+*     to the Folders v.4.0 specification.
+*
+*
+*/
+
+
+#ifndef __TVRRENAME_H
+#define __TVRRENAME_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+*  This class provides functionality to use in renaming operations
+*/
+class TVRRename
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ constructor.
+		* @param aFs A reference to an open file server session.
+        */
+        IMPORT_C TVRRename( RFs& aFs );
+
+    public: // New functions
+        
+        /**
+        * This method executes a set of operations to do a file renaming operation
+		* according to the Folders specification v.4.0. The method doesn't do the
+		* actual renaming of the file, but returns the result path.
+		*
+        * @param aOldName A descriptor containing path to the file to be renamed.
+		* @param aNewName A descriptor with a size of atleast KMaxFileName. The
+		*        new path for the renamed is stored here. Do not rely on the contents
+		*        of this descriptor if the method returns EFalse.
+        * @param aPrompt A resource id to a string that is used as a prompt for the
+		*        name query dialog.
+        * @return (TBool) ETrue if the user confirmed the operation. 
+		*         EFalse if the user canceled the operation.
+        */
+		IMPORT_C TBool GetNewNameL( const TDesC& aOldName, TDes& aNewName, const TInt aPrompt );
+
+        /**
+        * This method executes a set of operations to do a file renaming operation
+		* according to the Folders specification v.4.0. This method carries out
+		* the actual renaming of the file.
+		*
+        * @param aName A descriptor containing path to the file to be renamed.
+        * @param aPrompt A resource id to a string that is used as a prompt for the
+		*        name query dialog.
+        * @return (TBool) ETrue if the user confirmed the operation. 
+		*         EFalse if the user canceled the operation.
+        */
+		IMPORT_C TBool RenameL( TDes& aName, const TInt aPrompt );
+
+        /**
+        * This method executes a set of operations to do a file renaming operation
+		* according to the Folders specification v.4.0. This method carries out
+		* the actual renaming of the file.
+		*
+        * @param aFile A handle to the file to be renamed
+        * @param aPrompt A resource id to a string that is used as a prompt for the
+		*        name query dialog.
+        * @return (TBool) ETrue if the user confirmed the operation. 
+		*         EFalse if the user canceled the operation.
+        */
+		IMPORT_C TBool RenameL( RFile& aFile, const TInt aPrompt );
+
+    private:    // Data
+
+		// A reference to an open file server session
+        RFs& iFs;
+
+    };
+
+#endif     // __TVRRENAME_H  
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsInc/VRUSBStateHanlder.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* 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: 
+*     CVRUSBStateHanlder declaration
+*     
+*
+*/
+
+
+#ifndef VRUSBSTATEHANLDER_H
+#define VRUSBSTATEHANLDER_H
+
+#include <e32base.h>	// For CActive, link against: euser.lib
+#include <e32std.h>		// For RTimer, link against: euser.lib
+#include <e32property.h> 
+
+//#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;    
+    enum TUSBConnectionStatus 
+        { 
+        EStateUninitialized, 
+        EStateConnected, 
+        EStateDisConnected
+        }; 
+    TUSBConnectionStatus iConnectionStatus;
+    };
+
+#endif // VRUSBSTATEHANLDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsInc/VRUtils.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,303 @@
+/*
+* 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 contains a collection of small static utility functions
+*     needed all around the application. The class has no prefix letter
+*     
+*
+*/
+
+
+#ifndef __VRUTILS_H
+#define __VRUTILS_H
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <f32file.h>
+#include <badesca.h>
+#include "VRConsts.h"
+#include "voicerecorder.hrh"
+
+// CLASS DECLARATION
+
+class TVRDriveInfo
+    {
+    public:
+        TBool iDrivePresent;
+        TBool iDriveLocked;
+        TBool iDriveCorrupted;
+		TBool iDriveReadOnly;
+		TBool iDriveFull;
+    };
+
+class VRUtils
+    {
+    public: // New functions
+        
+		/**
+        * Returns the currently effective path where to store voice memos
+		* The directory is affected by the settings and the availability of MMC
+		*
+        * @return Returns a non-modifiable pointer descriptor containing the
+		*         currently effective path where to store voice memos.
+		          The descriptor is left on cleanup stack.
+        */
+		IMPORT_C static void MemoStoreDirectoryL( TDes &aPath );
+
+        /**
+        * This method sets the default memo store setting (Phone Memory / MMC)
+		*
+        * @param aMemory Memory to set as default store
+        */
+		IMPORT_C static void SetMemoStoreL( TVRMemoStore aMemory );
+
+        /**
+        * This method returns the default memo store setting
+        * @return The default memo store
+        */
+		IMPORT_C static TVRMemoStore MemoStoreL();
+
+		/**
+		* This method returns the current status of MMC (inserted/locked/etc...)
+		* @param aDriveInfo MMC status
+		*/
+		IMPORT_C static void GetMMCInfo( TVRDriveInfo& aDriveInfo );
+
+		/**
+		* Set the default speaker
+		* @param aSpeaker ESpeakerEarPiece or ESpeakerIhf
+		*/
+		IMPORT_C static void SetDefaultSpeakerL( const TVRSpeaker aSpeaker);
+
+		/**
+		* This method returns the current speaker
+		* @return Default speaker, either ESpeakerEarPiece or ESpeakerIhf
+		*/
+		IMPORT_C static TVRSpeaker DefaultSpeakerL();
+
+		/**
+		* Set the default volume setting for specified speaker
+		* @param aSpeaker ESpeakerEarPiece or ESpeakerIhf
+		* @param aVolume New TInt value to save
+		*/
+		IMPORT_C static void SetDefaultVolumeL( const TVRSpeaker aSpeaker, const TInt aVolume );
+
+		/**
+		* This method returns the default volume setting for specivied speaker
+		* @param aSpeaker ESpeakerEarPiece or ESpeakerIhf
+		* @return The retrieved volume setting value
+		*/
+		IMPORT_C static TInt DefaultVolumeL( const TVRSpeaker aSpeaker );
+
+
+		/**
+		* Set the default quality setting
+		* @param aSpeaker EQualityMMSOptimized or EQualityHigh
+		*/
+		IMPORT_C static void SetQualityL( const TVRQuality aQuality );
+
+		/**
+		* This method returns the current quality setting
+		* @return Default quality, either EQualityMMSOptimized or EQualityHigh
+		*/
+		IMPORT_C static TVRQuality QualityL();
+
+		/**
+		* This method shows the out-of-memory confirmation query
+		* @param aMmc Shows qtn_memlo_not_enough_memory if EFalse or
+		*			qtn_memlo_mmc_not_enough_memory if ETrue
+		*/
+		IMPORT_C static void ShowMemoryFullConfirmationQuery( TBool aMmc = EFalse );
+
+		/**
+		* This method checks if video or VOIP call is ongoing
+		* @param aShowNote Show error note if ETrue
+		* @return ETrue if unsupported call is ongoing, EFalse otherwise
+		*/
+		IMPORT_C static TBool UnsupportedCallTypeOngoing( TBool aShowNote = EFalse );
+		
+		/**
+		* This method returns the maximum length for a memo
+		* @return Maximum length
+		*/
+		IMPORT_C static TInt MaxLengthL();		
+
+		/**
+		* Check if variated feature is configured on
+		* @param aFeature Internal feature id
+		* @return ETrue if feature is enabled
+		*/		
+		IMPORT_C static TBool FeatureEnabled( TVRFeature aFeature );
+		
+		/**
+		* Generate a filename that has unique body in given path.
+		* @param aFs Reference to connected file server session handle
+		* @param aName Path to destination folder. On return contains
+		*         a unique file name with full path and extension
+		* @param aType The type of file to be generated. Extension will be
+		          appended according to this parameter.
+		*/				
+		IMPORT_C static void GenerateUniqueFilenameL( RFs& aFs, 
+	                         TFileName& aName, TVRFiletype aType );
+		
+		/**
+		* This method returns the running count of recorded memos
+		* @return Count of recorded memos
+		*/
+		IMPORT_C static TInt MemoCount();		
+		
+		/**
+		* This method returns the running count of recorded memos
+		* @return Count of recorded memos
+		*/
+		IMPORT_C static void SetMemoCount( TInt aNewCount );
+		
+		/**
+		* This method returns the bitrate that is used when recording amr clips
+		* @return Bitrate
+		*/
+		IMPORT_C static TUint AMRBitrateL();	
+
+
+		/**
+		* This method returns the bitrate that is used when recording amr clips
+		* @return Bitrate
+		*/
+		IMPORT_C static TUint AACBitrateL();	
+
+				
+		/**
+		* This method returns the AAC-LC sampling rate that is used when recording AAC-LC clips
+		* @return Sampleing rate
+		*/		
+		IMPORT_C static TInt AACSamplerateL();
+		
+		/**
+		* This method returns the audio mode that is used when recording AAC-LC clips
+		* @return audio mode
+		*/		
+       	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 );
+       	
+		/**
+		* This method checks which MassStorage is/are valid
+	    * @return The MassStorage is multi (ETrue) or only one (EFlase)
+		*/
+       	IMPORT_C static TBool MultipleMassStorageAvailable();
+
+		/**
+		* This wrapper method return the removable MassStorage drive
+	    * @return the drive
+		*/
+       	IMPORT_C static TInt GetRemovableMassStorageL();
+
+#ifdef RD_MULTIPLE_DRIVE    	
+       	/**
+        * This method sets the default memo store setting (to support multipledrives)
+		*
+        * @param aMemory Memory to set as default store
+        */
+		IMPORT_C static void SetMemoDriveL( TDriveNumber aDrive );
+     	 
+       	/**
+        * This method returns default phone memory drive
+		*
+        * 
+        */
+		IMPORT_C static TInt DefaultMemoDriveL();
+	
+		/**
+		* This method returns the current status of Drive (inserted/locked/etc...)
+		* @param aDriveInfo MMC status
+		*/
+		IMPORT_C static TInt GetDriveInfo( TInt aDrive, TUint& aDriveInfo );
+
+        /**
+        * This method returns the default memo drive setting
+        * @return The default memo store
+        */
+		IMPORT_C static TInt MemoDriveL();
+#endif		
+				
+	private:
+
+		/**
+		* Default constructor declared as private to prohibit construction.
+		*/
+		VRUtils();	
+		
+		/**
+		* Store a setting in Central Repository
+		* @param aKey The Central Repository key 
+		* @param aValue The value for the key
+		*/
+		static void SetSettingValueL( const TUint32 aKey, const TInt aValue );
+
+		/**
+		* Get a setting from Central Repository
+		* @param aKey The requested Central Repository key
+		* @param aDefaultValue If key was not found, this is the value used
+		* @return The value of the requested key
+		*/
+		static TInt SettingValueL( const TUint32 aKey, const TInt aValue );
+		
+		/**
+		* This method shows the out-of-memory confirmation query
+		* @param aMmc Shows qtn_memlo_not_enough_memory if EFalse or
+		*			qtn_memlo_mmc_not_enough_memory if ETrue
+		*/
+		static void ShowMemoryFullConfirmationQueryL( TBool aMmc = EFalse );
+		
+		/**
+		* This method is called if video or VOIP call is ongoing and
+		* information note needs to be shown
+		* @param aResourceId
+		*/
+		static void ShowUnsupportedCallTypeNoteL( TInt aResourceId );
+		
+		/**
+		* This method appends the requested file type extension to filename
+		* @param aName Contains full file name after completion
+		* @param aType File type that defines the extension to be appended
+		*/
+		static void AppendExtension( TFileName& aName, TVRFiletype aType );		
+		
+		/**
+		* This method does the full check for the parameter filename existence
+		* @param aFs Reference to connected file server session handle
+		* @param aName Filename to check. No Path nor extension included.
+		* @return ETrue if file exists, EFalse otherwise
+		*/
+		static TBool DoesFileExistL( RFs& aFs, TFileName aName );
+		
+		/**
+		* This method checks if parameter filename exists or not
+		* @param aFs Reference to connected file server session handle
+		* @param aName Filename to check. Path included. Extension excluded.
+		* @return ETrue if file exists, EFalse otherwise
+		*/
+		static TBool CheckFileExistence( RFs& aFs, TFileName aName );
+
+    };
+
+#endif      // __VRUTILS_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsSrc/DllMain.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* 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: 
+*      Dll entry point
+*
+*
+*/
+
+
+// INCLUDES
+#include <e32base.h>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsSrc/TVRRename.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,245 @@
+/*
+* 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 encapsulates the functionality associated with renaming
+*     files in different situation. The implementation is made according
+*     to the Folders v.4.0 specification.
+*
+*
+*/
+
+
+// INCLUDES
+#include <f32file.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h>
+#include <bautils.h>
+#include <StringLoader.h>
+#include <apparc.h>
+
+#include <voicerecorder.rsg>
+#include "voicerecorder.hrh"
+#include "TVRRename.h"
+
+// CONSTANTS
+const TInt KMaxFileNameLength( 64 );
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// TVRRename::TVRRename
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TVRRename::TVRRename( RFs& aFs ) : iFs( aFs )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// TVRRename::GetNewNameL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool TVRRename::GetNewNameL( const TDesC& aOldName, 
+									   TDes& aNewName, 
+									   const TInt aPrompt )
+	{
+	CCoeEnv* coeEnv = CCoeEnv::Static();
+
+	TParsePtrC nameParse( aOldName );
+	TBuf<KMaxFileNameLength> fileName;		
+
+	// The query can fit only VRMEMONAMEMAXLENGTH characters
+	fileName.Copy( nameParse.Name().Left( VRMEMONAMEMAXLENGTH ) );
+
+	CAknStaticSizeDataQuerydialog* nameDlg = new( ELeave ) 
+								CAknTextQueryDialog( fileName ); // CSI: 35 #
+								
+	nameDlg->PrepareLC( R_VR_RENAME_DIALOG );
+	HBufC* prompt = StringLoader::LoadLC( aPrompt, coeEnv );
+	nameDlg->SetPromptL( *prompt );
+	CleanupStack::PopAndDestroy();
+
+	while ( nameDlg->RunLD() != 0 )
+		{
+		// Construct the full path of the new proposed (by the user) name 
+		aNewName.Copy( nameParse.DriveAndPath() );
+		aNewName.Append( fileName );
+		aNewName.Append( nameParse.Ext() );
+
+		TInt backslash = fileName.Find(_L( "\\" ) );
+
+		// Check that the name is valid for the fs32
+		// Is ValidFileName does not check backslash
+		if ( iFs.IsValidName( aNewName ) && backslash == KErrNotFound )
+			{	
+			// Check if it exists?
+			if ( !BaflUtils::FileExists( iFs, aNewName ) ||
+				aOldName == aNewName )
+				{
+				// Nope => accepted 
+				return ETrue;
+				}
+
+			// Prompt the user for "Overwrite?"
+			prompt = StringLoader::LoadLC( R_QTN_FLDR_OVERWRITE_QUERY, 
+										   fileName, 
+										   coeEnv );
+										   
+			CAknQueryDialog* queryDlg = CAknQueryDialog::NewL();
+			TBool accepted( queryDlg->ExecuteLD( R_VR_CONFIRMATION_QUERY, 
+												 *prompt ) );
+
+			CleanupStack::PopAndDestroy( prompt );
+
+			if ( accepted )
+				{
+				// User accepted overwrite
+				return ETrue;
+				}
+
+			// Create a new dialog for the next round
+			// TfileName. (CApaApplication::GenerateFileName needs it)
+			TFileName generatedName;	 
+			generatedName.Copy( nameParse.DriveAndPath() );
+			generatedName.Append( fileName );
+			generatedName.Append( nameParse.Ext() );
+			User::LeaveIfError( 
+					CApaApplication::GenerateFileName( iFs, generatedName ) );
+			
+			TParsePtrC generatedNameParse( generatedName );
+			TPtrC generatedNamePtr( generatedNameParse.Name() );
+			if ( generatedNamePtr.Length() > VRMEMONAMEMAXLENGTH )
+				{
+				// Name got too long => clip the suffix
+				fileName.Copy( generatedNamePtr.Left( 
+					generatedNamePtr.LocateReverse( '(' ) ) );
+				}
+			else 
+				{
+				fileName.Copy( generatedNamePtr );
+				}
+			
+			}
+		else
+			{
+			// The name wasn't a valid fs32 filename => show info note
+			HBufC* noteText = coeEnv->AllocReadResourceLC
+											( R_QTN_FLDR_ILLEGAL_CHARACTERS );
+			CAknInformationNote* infoNote = new( ELeave ) 
+												CAknInformationNote( ETrue );
+			infoNote->ExecuteLD( *noteText );
+			CleanupStack::PopAndDestroy();	// noteText
+			}
+
+		nameDlg = new( ELeave ) CAknTextQueryDialog( fileName );
+		nameDlg->PrepareLC( R_VR_RENAME_DIALOG );	
+		}
+
+	// User canceled
+	return EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// TVRRename::RenameL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool TVRRename::RenameL( TDes& aName, const TInt aPrompt )
+	{
+	HBufC* oldName = aName.AllocLC();
+	if ( GetNewNameL( *oldName, aName, aPrompt ) )
+		{
+		TInt err ( BaflUtils::RenameFile( iFs, *oldName, aName ) );
+		if ( err )
+			{
+			// Show error note "Unable to rename %U"
+			CAknInformationNote* infoNote = NULL;
+			TParsePtrC parse( oldName->Des() );
+			HBufC* noteText = StringLoader::LoadLC( R_QTN_FLDR_CANT_RENAME_ITEM, 
+													parse.Name(), 
+													CCoeEnv::Static() );
+		    if ( !noteText )
+		    	{
+		    	CleanupStack::PopAndDestroy(); // oldName 
+		    	return EFalse;
+		    	}
+			
+			infoNote = new( ELeave ) CAknInformationNote( ETrue );
+			if ( infoNote )
+				{
+				infoNote->ExecuteLD( *noteText );
+				}
+			CleanupStack::PopAndDestroy( 2 ); // oldName, noteText	
+			return EFalse;
+			}
+			
+		CleanupStack::PopAndDestroy( oldName );
+		return ETrue;
+		}
+	else
+		{
+		CleanupStack::PopAndDestroy( oldName );
+		return EFalse;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// TVRRename::RenameL
+// The file handle may not point to private folder, since renaming can't be
+// used in embedded mode
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool TVRRename::RenameL( RFile& aFile, const TInt aPrompt )
+	{
+	TFileName name( KNullDesC );
+	aFile.FullName( name );
+	HBufC* oldName = name.AllocLC();
+	
+	if ( GetNewNameL( *oldName, name, aPrompt ) )
+		{
+		aFile.Close();
+		TInt err ( BaflUtils::RenameFile( iFs, *oldName, name ) );
+		if ( err )
+			{
+			// Show error note "Unable to rename %U"
+			// and open the old file again			
+			User::LeaveIfError( aFile.Open( iFs, oldName->Des(),
+			                                EFileShareReadersOnly ) );
+			
+			CAknInformationNote* infoNote = NULL;
+			TParsePtrC parse( oldName->Des() );
+			HBufC* noteText = StringLoader::LoadLC(
+			    R_QTN_FLDR_CANT_RENAME_ITEM, parse.Name(), CCoeEnv::Static() );
+			
+			infoNote = new( ELeave ) CAknInformationNote( ETrue );
+			infoNote->ExecuteLD( *noteText );
+
+			CleanupStack::PopAndDestroy( 2 ); // oldName, noteText	
+			return EFalse;
+			}
+		CleanupStack::PopAndDestroy( oldName );
+		User::LeaveIfError( aFile.Open( iFs, name, EFileShareReadersOnly ) );
+		return ETrue;
+		}
+	else
+		{
+		CleanupStack::PopAndDestroy( oldName );
+		return EFalse;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsSrc/VRUSBStateHanlder.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* 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: 
+*     CVRUSBStateHanlder implementation
+*
+*
+*/
+
+
+// INCLUDES
+#include <e32cmn.h>
+#include <usbpersonalityids.h>
+#include <e32property.h> 
+#include <UsbWatcherInternalPSKeys.h>
+#include <usbpersonalityids.h>
+
+#include <AknWaitDialog.h>
+#include <eikenv.h> 
+
+#include "VRUSBStateHanlder.h"
+#include "CVRRecView.h"
+
+CVRUSBStateHanlder::CVRUSBStateHanlder(MVRUSBStateObserver* aObserver) :
+    CActive(EPriorityStandard), // Standard priority
+            iObserver(aObserver),
+            iConnectionStatus(EStateUninitialized)
+    {
+    }
+
+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();
+#else
+    StartL();
+#endif
+    
+ 
+    TBool isUsbActive (IsUsbActive());
+    
+    if (isUsbActive)
+        {
+        if(iConnectionStatus != EStateConnected)
+            {
+            iObserver->HandleUsbPlugInL();
+            iConnectionStatus = EStateConnected;
+            }
+        }
+    else
+        {
+        if(iConnectionStatus != EStateDisConnected)
+            {
+            iObserver->HandleUsbPlugOutL();
+            iConnectionStatus = EStateDisConnected;
+            } 
+        }
+
+#ifdef DUMMY_USB_TESTING    
+    //    iStatus = KRequestPending;
+    SetActive(); // Tell scheduler a request is active    
+    iTimer.After(iStatus, 10000000); // Set for later
+
+    
+#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
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/UtilsSrc/VRUtils.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,1172 @@
+/*
+* 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 contains a collection of small static utility functions
+*     needed all around the application. The class has no prefix letter
+*
+*
+*/
+
+
+// INCLUDES
+
+#include <eikapp.h>
+#include <eikenv.h>
+#include <bautils.h>
+#include <centralrepository.h>
+#include <coemain.h>
+#include <f32file.h>
+#include <StringLoader.h>
+#include <AknGlobalNote.h>
+#include <aknnotewrappers.h>
+#include <e32property.h>
+#include <ctsydomainpskeys.h>
+#include <pathinfo.h>
+#include <featmgr.h>
+#include <avkon.rsg>
+#include <e32math.h>
+
+#include <voicerecorder.rsg>
+#include <VoiceRecorderUID.h>
+
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#include <pathinfo.h>
+#endif
+
+#include "VoiceRecorderInternalCRKeys.h"
+#include "VRUtils.h"
+#include "VRConsts.h"
+#include <bldvariant.hrh>
+
+// CONSTANTS
+_LIT( KVRAMRFileNameExtension,   ".amr" );
+_LIT( KVRWAVFileNameExtension,   ".wav" );
+
+// added for AAC
+#ifdef  __AAC_ENCODER_PLUGIN   
+_LIT( KVRAAC_LCFileNameExtension,".mp4" );
+#endif
+
+_LIT( KVROneToNineClipCountFormat, "%02d" ); // used with clip numbers 1..9
+_LIT( KVRDefaultClipCountFormat, "%d" );	// used with clip numbers 10->
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// VRUtils::MemoStoreDirectoryL
+// Checks what is the current storage place and returns the corresponding path
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::MemoStoreDirectoryL( TDes &aPath )
+	{
+	
+	TFileName phoneMemoryPath;
+	
+#ifndef RD_MULTIPLE_DRIVE
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+   		
+		TVRMemoStore memoStore = MemoStoreL();
+		if ( memoStore == EMemoStorePhoneMemory )
+			{
+			phoneMemoryPath = PathInfo::PhoneMemoryRootPath();
+			phoneMemoryPath.Append( PathInfo::DigitalSoundsPath() );
+			aPath.Copy( phoneMemoryPath );
+			return;
+			}
+		else
+			{
+			// MMC is the selected memo store. Check if it's available.
+			TVRDriveInfo mmcInfo;
+			GetMMCInfo( mmcInfo );
+			if ( mmcInfo.iDrivePresent && !mmcInfo.iDriveLocked &&
+				!mmcInfo.iDriveCorrupted && !mmcInfo.iDriveReadOnly )
+				{
+				// MMC usage is OK.
+				TFileName mmcPath = PathInfo::MemoryCardRootPath();
+				mmcPath.Append( PathInfo::DigitalSoundsPath() );
+				aPath.Copy( mmcPath );
+				return;
+				}
+			else
+				{
+				// MMC is unavailable => return phone memory path
+				phoneMemoryPath = PathInfo::PhoneMemoryRootPath();
+				phoneMemoryPath.Append( PathInfo::DigitalSoundsPath() );
+				aPath.Copy( phoneMemoryPath );
+				return;
+				}
+
+			}
+
+		}
+	else
+		{
+		phoneMemoryPath = PathInfo::PhoneMemoryRootPath();
+		phoneMemoryPath.Append( PathInfo::DigitalSoundsPath() );
+		aPath.Copy( phoneMemoryPath );
+		return;
+		}
+
+// using multiple drive
+#else
+		TInt memoDrive = MemoDriveL();
+		TInt defaultDrive(0);
+        User::LeaveIfError( defaultDrive = DefaultMemoDriveL());
+        //default drive
+		if ( memoDrive == defaultDrive )
+			{
+            User::LeaveIfError( PathInfo::GetRootPath( phoneMemoryPath, memoDrive ) );
+			phoneMemoryPath.Append( PathInfo::DigitalSoundsPath() );
+			aPath.Copy( phoneMemoryPath );
+			return;
+			}
+		// other drives
+		else
+			{			
+            TUint status( 0 );
+            TInt err = VRUtils::GetDriveInfo(memoDrive, status);
+            // check if drive status is ok 
+			if ( ( err == KErrNone ) && (status & DriveInfo::EDrivePresent) && !(status & DriveInfo::EDriveLocked) &&
+				!( status & DriveInfo::EDriveCorrupt ) && !( status & DriveInfo::EDriveReadOnly ) )
+				{
+				// Drive usage is OK.
+                User::LeaveIfError( PathInfo::GetRootPath( phoneMemoryPath, memoDrive ) );
+			    phoneMemoryPath.Append( PathInfo::DigitalSoundsPath() );
+			    aPath.Copy( phoneMemoryPath );
+			    return;
+				}
+			
+			// if not ok, save to default device drive
+			else
+				{
+            memoDrive = defaultDrive;
+            User::LeaveIfError( PathInfo::GetRootPath( phoneMemoryPath, memoDrive ) );
+			phoneMemoryPath.Append( PathInfo::DigitalSoundsPath() );
+			aPath.Copy( phoneMemoryPath );
+			return;
+				}
+
+			}
+#endif
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SetMemoStoreL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::SetMemoStoreL( TVRMemoStore aMemory )
+	{
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+		SetSettingValueL( KVRMemoStore, aMemory );
+		}
+	else
+		{
+		__ASSERT_DEBUG( ETrue, User::Panic( KVRPanic, EPanicInvalidSetting ) );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::MemoStoreL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TVRMemoStore VRUtils::MemoStoreL()
+	{
+	// Phone memory is the default
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+		TInt ret = SettingValueL( KVRMemoStore,
+								EMemoStorePhoneMemory );
+		return static_cast< TVRMemoStore >( ret );
+		}
+	else
+		{
+		return EMemoStorePhoneMemory;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::DefaultSpeakerL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TVRSpeaker VRUtils::DefaultSpeakerL()
+	{
+	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
+		FeatureManager::FeatureSupported( 
+							KFeatureIdApplicationControllableAudioRouting ) )
+		{
+		return ( TVRSpeaker ) SettingValueL( KVRDefaultSpeaker, ESpeakerIhf );
+		}
+	else
+		{
+		return ESpeakerIhf;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SetDefaultSpeakerL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::SetDefaultSpeakerL( const TVRSpeaker aSpeaker )
+	{
+	if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) &&
+		FeatureManager::FeatureSupported( 
+							KFeatureIdApplicationControllableAudioRouting ) )
+		{
+		SetSettingValueL( KVRDefaultSpeaker, aSpeaker );
+		}
+	else
+		{
+		__ASSERT_DEBUG( ETrue, User::Panic( KVRPanic, EPanicInvalidSetting ) );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::QualityL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TVRQuality VRUtils::QualityL()
+	{
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {   	
+     	return ( TVRQuality ) SettingValueL( KVRQuality, 
+     											 EQualityMMSOptimized );
+ 		}
+	else
+		{
+		return EQualityMMSOptimized;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SetQualityL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::SetQualityL( const TVRQuality aQuality )
+	{
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+		SetSettingValueL( KVRQuality, aQuality );
+		}
+	else
+		{
+		__ASSERT_DEBUG( ETrue, User::Panic( KVRPanic, EPanicInvalidSetting ) );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SetDefaultVolumeL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::SetDefaultVolumeL( const TVRSpeaker aSpeaker,
+	const TInt aVolume )
+	{
+	switch ( aSpeaker )
+		{
+		case ESpeakerEarPiece:
+			{
+			SetSettingValueL( KVREarPieceVolume, aVolume );
+			break;
+			}
+		case ESpeakerIhf:
+			{
+			SetSettingValueL( KVRIHFVolume, aVolume );
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}	
+	return;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::DefaultVolumeL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt VRUtils::DefaultVolumeL( const TVRSpeaker aSpeaker )
+	{
+	TInt volume( KVRDefaultVolume );
+	switch ( aSpeaker )
+		{
+		case ESpeakerEarPiece:
+			{
+			volume = SettingValueL( KVREarPieceVolume, KVRDefaultVolume );
+			break;
+			}
+		case ESpeakerIhf:
+			{
+			volume = SettingValueL( KVRIHFVolume, KVRDefaultVolume );
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	return volume ? volume : KVRDefaultVolume;
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SetSettingValueL, 
+// save the data to central repository
+// ---------------------------------------------------------------------------
+//
+void VRUtils::SetSettingValueL( const TUint32 aKey, const TInt aValue )
+	{
+    CRepository* repository = CRepository::NewL( KCRUidVoiceRecorder );
+    CleanupStack::PushL( repository );
+    User::LeaveIfError( repository->Set( aKey, aValue ) );
+    CleanupStack::PopAndDestroy( repository );
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SettingValueL
+// 
+// ---------------------------------------------------------------------------
+//
+TInt VRUtils::SettingValueL( const TUint32 aKey, const TInt aDefaultValue )
+	{
+    TInt data;
+
+    CRepository* repository = CRepository::NewL( KCRUidVoiceRecorder );
+	CleanupStack::PushL( repository );
+
+	// Get the value, create the key if no value was found
+    if ( repository->Get( aKey, data ) != KErrNone )
+        {
+        User::LeaveIfError( repository->Create( aKey, aDefaultValue ) );
+        data = aDefaultValue;
+        }
+
+    CleanupStack::PopAndDestroy( repository );
+
+	return data;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::GetMMCInfo
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::GetMMCInfo( TVRDriveInfo& aMMCInfo )
+    {
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+		TDriveInfo driveInfo;
+		TVolumeInfo volumeInfo;
+		RFs& fss = CCoeEnv::Static()->FsSession() ;
+
+		TInt err( fss.Drive( driveInfo, EDriveE ) );
+
+		if ( driveInfo.iType != EMediaNotPresent )
+			{
+			aMMCInfo.iDrivePresent = ETrue;
+			if ( fss.Volume( volumeInfo, EDriveE ) == KErrCorrupt )
+				{
+				aMMCInfo.iDriveCorrupted = ETrue;
+				}
+			else
+				{
+				aMMCInfo.iDriveCorrupted = EFalse;
+				}
+			}
+		else
+			{
+			aMMCInfo.iDriveCorrupted = EFalse;
+			aMMCInfo.iDrivePresent = EFalse;
+			}
+
+		if ( driveInfo.iMediaAtt & KMediaAttLocked || err == KErrLocked )
+			{
+			aMMCInfo.iDriveLocked = ETrue;
+			}
+		else
+			{
+			aMMCInfo.iDriveLocked = EFalse;
+			}
+
+		if ( driveInfo.iMediaAtt & KMediaAttWriteProtected )
+			{
+			aMMCInfo.iDriveReadOnly = ETrue;
+			}
+		else
+			{
+			aMMCInfo.iDriveReadOnly = EFalse;
+			}
+		if ( volumeInfo.iFree ==0 )
+			{
+			aMMCInfo.iDriveFull = ETrue;
+			}
+		else
+			{
+			aMMCInfo.iDriveFull = EFalse;
+			}
+
+
+		}
+    }
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::ShowMemoryFullConfirmationQuery
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::ShowMemoryFullConfirmationQuery( TBool aMmc )
+	{
+	// Error ignored. If the note fails, there's nothing to do.
+	TRAP_IGNORE( ShowMemoryFullConfirmationQueryL( aMmc ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::UnsupportedCallTypeOngoing
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool VRUtils::UnsupportedCallTypeOngoing( TBool aShowNote )
+	{
+	TBool unsupported( EFalse );
+	TInt value( 0 );
+
+	TInt err( 0 );
+    RProperty property;
+    err = property.Attach( KPSUidCtsyCallInformation, KCTsyCallState );
+	if ( err )
+		{
+		return EFalse;
+		}
+
+    property.Get( value );
+
+    switch ( value )
+	    {
+    	case EPSCTsyCallStateUninitialized:
+    	case EPSCTsyCallStateNone:
+    		{ // No any kind of call in progress
+    		return EFalse;
+    		}
+		default: // Call in progress, check if it is videocall
+		    {
+		    err = property.Attach( KPSUidCtsyCallInformation, KCTsyCallType);
+        	if ( err )
+        		{
+        		return EFalse;
+        		}
+        	value = 0;
+    		property.Get( value );
+			break;
+		    }
+    	}
+
+	switch( value )
+		{
+		// Video call ongoing
+		case EPSCTsyCallTypeH324Multimedia:
+			{
+			unsupported = ETrue;
+			
+			if ( aShowNote )
+				{
+				// If the note fails, it's no big deal
+				TRAP_IGNORE( ShowUnsupportedCallTypeNoteL( 
+					R_VR_VIDEO_CALL_INFONOTE_LABEL ) );
+				}
+			break;			
+			}
+		// Voip call ongoing
+		case EPSCTsyCallTypeVoIP:
+			{
+			unsupported = ETrue;
+			
+			if ( aShowNote )
+				{
+				// If the note fails, it's no big deal
+				TRAP_IGNORE( ShowUnsupportedCallTypeNoteL( 
+					R_VR_INTERNET_CALL_INFONOTE_LABEL ) );
+				}
+			break;			
+			}			
+		}
+	
+	return unsupported;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::ShowMemoryFullConfirmationQueryL
+// 
+// ---------------------------------------------------------------------------
+//
+void VRUtils::ShowMemoryFullConfirmationQueryL( TBool aMmc )
+	{
+	CAknGlobalNote* note = NULL;
+	
+	note = CAknGlobalNote::NewLC();
+	
+	HBufC* label = NULL;
+	TInt noteId( 0 );
+	if ( aMmc )
+		{
+		noteId = R_VR_MEMORY_MMC_WARNING;
+		}
+	else 
+		{
+		noteId = R_VR_MEMORY_WARNING;
+		}
+
+	label = StringLoader::LoadLC( noteId );
+
+	note->SetSoftkeys( R_AVKON_SOFTKEYS_OK_EMPTY );
+	note->ShowNoteL( EAknGlobalWarningNote, *label );
+	CleanupStack::PopAndDestroy( 2 );	// label, note;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::ShowUnsupportedCallTypeNoteL
+// 
+// ---------------------------------------------------------------------------
+//
+void VRUtils::ShowUnsupportedCallTypeNoteL( TInt aResourceId )
+	{
+	CAknInformationNote* infoNote;
+    HBufC* noteText;
+    
+    noteText = CEikonEnv::Static()->
+    	AllocReadResourceLC( aResourceId );
+	
+	infoNote = new( ELeave ) CAknInformationNote( ETrue );
+	infoNote->ExecuteLD( *noteText );
+
+	CleanupStack::PopAndDestroy( noteText );
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::MaxLengthL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt VRUtils::MaxLengthL()
+	{
+	// If no value can be retrieved, use 60 minutes as max length
+	TInt value( 0 );
+	
+#ifdef __AAC_ENCODER_PLUGIN   // mp4 is supported now. 	
+    if (QualityL() == EQualityHigh)
+    	{	
+	    TRAPD( err, value = SettingValueL( KVRAacRecordLength, 
+									   KVRDefaultAacRecordLength ) );
+									   
+	    if ( err || value <= 0 || value > 9999 )
+		  {
+		  return KVRDefaultAacRecordLength;
+		  }
+    	}
+#endif
+	TRAPD( err, value = SettingValueL( KVRMaxRecordTime, 
+									   KVRDefaultMaxLength ) );
+									   
+	if ( err || value <= 0 || value > 9999 )
+		{
+		return KVRDefaultMaxLength;
+		}
+
+
+	return value;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::FeatureEnabled
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool VRUtils::FeatureEnabled( TVRFeature aFeature )
+	{
+	TBool ret( EFalse );
+    TInt data( 0 );
+
+    TRAPD( err, data = SettingValueL( KVRVariationFlags, 0 ) );
+    if( err != KErrNone )
+        {
+        return EFalse;
+        }
+
+    // Compare feature to bitmask
+	if ( data & aFeature )
+		{
+		ret = ETrue;
+		}
+	return ret;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::GenerateUniqueFilename
+// Generates unique filename that doesn't exist in the directories where VR
+// operates in. Unique filename is generated in Media Gallery sense so that no
+// two sound clips can have same name there
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::GenerateUniqueFilenameL( RFs& aFs, TFileName& aName,
+    TVRFiletype aType )
+    {
+           
+    TBuf< VRLABELMAXLENGTH > valueStr;
+    TBuf< VRLABELMAXLENGTH > formatStr;
+    TFileName name( aName );
+    TFileName clipName; // Used for file existence checking
+    TBool fileExists( EFalse );
+    
+    // Get current count from cenrep
+    TInt value( MemoCount() );
+    		
+    TBool uniqueFound( EFalse );
+    
+    // First memo
+    if ( !value )
+        {        
+        StringLoader::Load( formatStr, R_VOREC_FIRST_MEMO_NAME );        
+        name.Append( formatStr );
+        clipName.Append( formatStr );
+        
+        TRAPD( err1, fileExists = DoesFileExistL( aFs, clipName ) );
+        if ( err1 )
+        	{
+        	// if error occurs, no much to do->generate new filename
+        	fileExists = ETrue;
+        	}
+        	
+        AppendExtension( name, aType );
+        
+        if ( fileExists )
+            {
+            // Memo exists, continue name generation with next name
+            ++value;
+            }
+        else
+            {
+            uniqueFound = ETrue;
+            ++value; // This is saved to cenrep
+            }
+        }
+
+    // Continue generation
+    if ( !uniqueFound )
+        {
+        StringLoader::Load( formatStr, R_VOREC_DEFAULT_MEMO_NAME );
+
+
+        // Loop until unique filename is generated
+        FOREVER
+            {
+            // 0 is added before clip number when number is between 1 and 9
+            if(value >= 1 && value <= 9)  
+            	{
+            	valueStr.Format( KVROneToNineClipCountFormat, value);	
+            	}
+            // no addings for clip numbers 10->
+            else
+            	{
+            	valueStr.Format( KVRDefaultClipCountFormat, value);		
+            	}
+
+            StringLoader::Format( name, formatStr, -1, valueStr );
+
+            // name copied before the path is added          
+            clipName = name;
+            
+            // Insert path to beginning	
+            name.Insert( 0, aName );
+            
+            AknTextUtils::LanguageSpecificNumberConversion( name );
+        	    
+           	TRAPD( err2, fileExists = DoesFileExistL( aFs, clipName ) );
+           	if ( err2 )
+	        	{
+	        	fileExists = ETrue;
+	        	}
+  
+            AppendExtension( name, aType );
+            if ( !fileExists )
+                {
+                // Accept the name and increase value
+                // Value increasing is mandatory to prevent similarly named clips when quality 
+                // or store place is changed
+                ++value;
+                break;
+                }
+            // Try next...
+            ++value;                
+            }
+         }
+
+    aName = name;
+
+    // Save the new value to cenrep
+   SetMemoCount( value );
+    }
+   
+
+// ---------------------------------------------------------------------------
+// VRUtils::AppendExtension
+// 
+// ---------------------------------------------------------------------------
+//    
+void VRUtils::AppendExtension( TFileName& aName, TVRFiletype aType ) 
+    {
+    switch ( aType )
+        {
+        case EVRFileWav:
+            {
+            aName.Append( KVRWAVFileNameExtension );
+            break;
+            }
+
+//Jeffery: the following case added for the new CR
+#ifdef  __AAC_ENCODER_PLUGIN   
+         case EVRFileAAC_LC:
+            {
+            aName.Append( KVRAAC_LCFileNameExtension );
+            break;
+            }
+#endif
+
+        // In error case amr extension is appended
+        case EVRFileAmr:
+        default:
+            {
+            aName.Append( KVRAMRFileNameExtension );
+            break;
+            }                    
+        }    
+    }
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::MemoCount
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt VRUtils::MemoCount()
+    {
+	// If no value can be retrieved, use zero
+	TInt value( 0 );
+	TRAPD( err, value = SettingValueL( KVRMemoCount, 0 ) );
+	if ( err != KErrNone )
+		{
+		return 0;
+		}
+	return value;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::SetMemoCount
+// 
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void VRUtils::SetMemoCount( TInt aNewCount )
+    {
+    TRAP_IGNORE( SetSettingValueL( KVRMemoCount, aNewCount ) );
+    }    
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::AMRBitrateL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint VRUtils::AMRBitrateL()
+    {
+    TUint bitrate(KVRDefaultAmrBitrate);
+
+    // Fetch bitrate from 
+	TRAPD( err, bitrate = SettingValueL( KVRBitrateAmr, 
+										 KVRDefaultAmrBitrate ) );
+										 
+	if ( err || bitrate <= 0 || bitrate > 12200 )
+		{
+		bitrate = KVRDefaultAmrBitrate;
+		}
+		
+    return bitrate;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::AACBitrateL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint VRUtils::AACBitrateL()
+    {
+       
+    TUint bitrate(KVRDefaultBitrateAac);
+
+    // Fetch bitrate from 
+	TRAPD( err, bitrate = SettingValueL( KVRBitrateAac, 
+										 KVRDefaultBitrateAac ) );
+
+	if ( err || bitrate <= 8000 || bitrate > 288000 )
+	  {
+      bitrate = KVRDefaultBitrateAac;
+	  }
+    return bitrate;    
+    }
+
+// ---------------------------------------------------------------------------
+// VRUtils::DoesFileExistL
+// Makes the full checking if the filename (aName) exists in the directories 
+// that Voice Recorder uses for clip storage
+// ---------------------------------------------------------------------------
+//
+TBool VRUtils::DoesFileExistL( RFs& aFs, TFileName aName )
+	{
+// old memory storage
+#ifndef RD_MULTIPLE_DRIVE	
+	// Storage place at the moment
+	TVRMemoStore memoStore = MemoStoreL();
+	TFileName path;
+	TFileName fileName(aName);
+	
+	// The path for the current storage place
+	VRUtils::MemoStoreDirectoryL( path );
+	
+	// Add the path to the filename
+    fileName.Insert( 0, path );
+    
+    if ( CheckFileExistence( aFs, fileName ) )
+    	{
+    	return ETrue;
+    	}
+    
+    // Check possible alternative storage place
+    TVRMemoStore secondaryStore;
+	if ( memoStore == EMemoStorePhoneMemory )
+		{
+		if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+			{
+			secondaryStore = EMemoStoreMMC;	
+			}
+		else
+			{
+			secondaryStore = EMemoStorePhoneMemory;	
+			}	
+		}
+	else
+		{
+		secondaryStore = EMemoStorePhoneMemory;
+		}
+	
+	// If there is some secondary storage place to check
+	if( memoStore != secondaryStore )
+		{
+		// Temporarily change the storage place (needed by MemoStoreDirectoryL)
+		VRUtils::SetSettingValueL( KVRMemoStore, secondaryStore );
+		
+		// Retrieve the path and add it to the filename
+		VRUtils::MemoStoreDirectoryL( path );
+		    
+	    fileName = aName;
+	    fileName.Insert( 0, path );
+	    
+	    // Change back to the original 
+	    VRUtils::SetSettingValueL( KVRMemoStore, memoStore );
+		
+	    if ( CheckFileExistence( aFs, fileName ) )
+	    	{
+	    	return ETrue;
+	    	}
+		}
+
+// for multiple drives  
+#else
+	 TFileName path;
+	 TFileName fileName(aName);
+
+     TDriveList allDrives;
+     TInt allDriveCount( 0 );
+
+     User::LeaveIfError(DriveInfo::GetUserVisibleDrives( aFs, allDrives, allDriveCount ));
+
+     TInt max( allDrives.Length());
+     for ( TInt i = 0; i < max; i++ )
+       {
+  	       if ( allDrives[ i ] )
+  	       	{
+			    TUint status( 0 );  
+			    VRUtils::GetDriveInfo( i, status);
+
+			    if( status & DriveInfo::EDriveRemote )	
+                    {
+                    continue;
+                    }
+				
+                User::LeaveIfError( PathInfo::GetRootPath( path, i) );
+			    path.Append( PathInfo::DigitalSoundsPath() );
+	
+	            // Add the path to the filename
+                fileName.Insert( 0, path );
+    
+                if ( CheckFileExistence( aFs, fileName ) )
+    	            {
+    	            return ETrue;
+    	            }			         			
+                
+                fileName.Copy(aName);
+  	       	}
+     	}
+#endif
+
+	return EFalse;
+
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// VRUtils::CheckFileExistence
+// Checks if the filename given as a parameter exists. This function checks all
+// possible extensions (in VR). Note that aName includes path but no extension.
+// ---------------------------------------------------------------------------
+//	
+TBool VRUtils::CheckFileExistence( RFs& aFs, TFileName aName )
+	{
+	TFileName fileName( aName );
+    
+    // AMR file  
+    AppendExtension( fileName, EVRFileAmr );
+    AknTextUtils::LanguageSpecificNumberConversion( fileName );
+    if ( BaflUtils::FileExists( aFs, fileName ) )
+    	{
+    	return ETrue;
+    	}	  
+    
+    // WAV file	
+   	fileName = aName;
+    AppendExtension( fileName, EVRFileWav );
+    AknTextUtils::LanguageSpecificNumberConversion( fileName );
+    if ( BaflUtils::FileExists( aFs, fileName ) )
+    	{
+    	return ETrue;
+    	}
+    
+ 	 
+    // AAC_LC file	
+ #ifdef  __AAC_ENCODER_PLUGIN   
+   	fileName = aName;
+    AppendExtension( fileName, EVRFileAAC_LC );
+    AknTextUtils::LanguageSpecificNumberConversion( fileName );
+  
+    if ( BaflUtils::FileExists( aFs, fileName ) )
+    	{
+    	return ETrue;
+    	}
+ #endif
+ 
+    return EFalse;			
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::AACSamplerateL
+// ---------------------------------------------------------------------------
+//	
+
+EXPORT_C TInt VRUtils::AACSamplerateL()
+    {
+
+	TUint samplerate( KVRDefaultSamplerateAac );
+
+    // Fetch bitrate from 
+	TRAPD( err, samplerate = SettingValueL( KVRSamplerateAac, 
+										 KVRDefaultSamplerateAac ) );
+
+	if ( err || samplerate < 8000 || samplerate > 48000 )
+		{
+		return KVRDefaultSamplerateAac;
+		}
+
+
+	return samplerate;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::AACAudioModeL
+// ---------------------------------------------------------------------------
+//	
+
+EXPORT_C TInt VRUtils::AACAudioModeL()
+    {
+
+	TUint mode( KVRDefaultStereoMonoFlag );
+
+    // Fetch audiomode from 
+	TRAPD( err, mode = SettingValueL( KVRStereoMonoFlag, 
+										 KVRDefaultStereoMonoFlag ) );
+
+	if ( err || (mode != 1 && mode != 2))
+		{
+		return KVRDefaultStereoMonoFlag;
+		}
+
+
+	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;
+    
+    }
+
+EXPORT_C TBool VRUtils::MultipleMassStorageAvailable()
+	{
+	TBool flag( ETrue );
+	TInt driveDefaultMassStorage(0);
+	TInt driveRemovableMassStorage(0);
+	TInt defaultStorageErr = DriveInfo::GetDefaultDrive(
+			DriveInfo::EDefaultMassStorage, driveDefaultMassStorage );
+	TInt removableStorageErr = DriveInfo::GetDefaultDrive(
+			DriveInfo::EDefaultRemovableMassStorage,    driveRemovableMassStorage );
+	if ( (defaultStorageErr) || (removableStorageErr) ||
+			( driveDefaultMassStorage == driveRemovableMassStorage ) )
+		{ flag = EFalse; }
+	
+	return flag;
+	}
+
+EXPORT_C TInt VRUtils::GetRemovableMassStorageL()
+	{
+    TInt drive(0);
+    User::LeaveIfError( DriveInfo::GetDefaultDrive(
+    			DriveInfo::EDefaultRemovableMassStorage , drive ) );
+	return drive;
+	}
+
+#ifdef RD_MULTIPLE_DRIVE
+// ---------------------------------------------------------------------------
+// VRUtils::SetMemoDriveL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void VRUtils::SetMemoDriveL( TDriveNumber aDrive )
+	{
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+		SetSettingValueL( KVRMemoStore, aDrive );
+		}
+	else
+		{
+		__ASSERT_DEBUG( ETrue, User::Panic( KVRPanic, EPanicInvalidSetting ) );
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::MemoDriveL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt VRUtils::MemoDriveL()
+	{
+    TInt defaultDrive = DefaultMemoDriveL();	
+	// Phone memory is the default
+	if ( FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+		{
+		TInt ret = SettingValueL( KVRMemoStore,
+								defaultDrive );
+		return static_cast< TInt >( ret );
+		}
+	else
+		{
+		return defaultDrive;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::DefaultMemoDriveL
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt VRUtils::DefaultMemoDriveL()
+	{
+    TInt drive(0);
+    User::LeaveIfError( DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, drive ) );
+    return drive;
+	}
+
+
+// ---------------------------------------------------------------------------
+// VRUtils::Get drive Info
+// it is for multiple drive feature
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt VRUtils::GetDriveInfo( TInt aDrive, TUint& aDriveInfo )
+    {
+	RFs& iFs = CCoeEnv::Static()->FsSession() ;
+	TInt err = DriveInfo::GetDriveStatus( iFs, aDrive, aDriveInfo ); 
+	return err;
+    }
+#endif
+
+
+//  End of File
Binary file voicerecorder/cenrep/keys_voicerecorder.xls has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/App.lnt	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,12 @@
+// Unused header scan
++e766
+
+// standard lint check
+-w2
+
+-i..\RecViewInc
+-i..\UtilsInc
+-i..\AppSrc
+-i\epoc32\include\oem
+
+..\AppSrc\*.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/NewService.mmp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* 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: 
+*    NewService mmp file
+*	  
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET		NewService.dll
+TARGETTYPE	dll
+
+// the following UIDs are exported to system include by VoiceRecorderUID.h
+UID			0x1000008d 0x101F8862
+
+VERSION         10.0
+
+LANG SC
+CAPABILITY CAP_GENERAL_DLL
+VENDORID        VID_DEFAULT
+
+SOURCEPATH	../NewServiceSrc
+SOURCE		DllMain.cpp
+SOURCE      CNewFileServiceClientImpl.cpp
+SOURCE      CNewFileServiceDiscovery.cpp
+SOURCE      RNewFileServiceClient.cpp
+SOURCE	CNewFileServiceBase.cpp
+SOURCE	cnewfileserviceserverobserver.cpp
+
+
+USERINCLUDE	 ../NewServiceInc
+USERINCLUDE	 ../group
+USERINCLUDE	 ../NewServiceSrc
+USERINCLUDE	 ../../inc      // ADo level inc dir
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY		apparc.lib
+LIBRARY		avkon.lib
+LIBRARY		bafl.lib
+LIBRARY		efsrv.lib
+LIBRARY		eikcore.lib
+LIBRARY		euser.lib
+LIBRARY     	estor.lib 
+LIBRARY		ServiceHandler.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/ProjLint.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,19 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Use lint for Project static analysis.
+rem
+
+call "c:\Program Files\tools\Lint\lint" Utils.lnt
+call "c:\Program Files\tools\Lint\lint" RecView.lnt
+call "c:\Program Files\tools\Lint\lint" App.lnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/RecView.lnt	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,12 @@
+// Unused header scan
++e766
+
+// standard lint check
+-w2
+
+-i..\RecViewSrc
+-i..\RecViewInc
+-i..\UtilsInc
+-i\epoc32\include\oem
+
+..\RecViewSrc\*.cpp 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/RecView.mmp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,101 @@
+/*
+* 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: 
+*    RecView mmp file
+*	  
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET		VoiceRecorderRecView.dll
+TARGETTYPE	dll
+
+// the following UIDs are exported to system include by VoiceRecorderUID.h
+UID			0x1000008d 0x100058CA
+
+VERSION         10.0
+
+LANG SC
+CAPABILITY CAP_GENERAL_DLL
+VENDORID        VID_DEFAULT
+
+SOURCEPATH	../RecViewSrc
+SOURCE		DllMain.cpp
+SOURCE		CVRButtonPanel.cpp
+SOURCE		CVRLabel.cpp
+SOURCE		CVRRecViewContainer.cpp
+SOURCE		CVRRecViewActivationContainer.cpp
+SOURCE		CVRRecViewModel.cpp
+SOURCE		CVRRecView.cpp
+SOURCE		CVRMdaRecorder.cpp 
+SOURCE		CVRSystemEventHandler.cpp
+SOURCE		CVRMemo.cpp
+SOURCE		CVRStateInfoPanel.cpp
+SOURCE		TVRState.cpp
+SOURCE		CVRRemConObserver.cpp
+SOURCE		CVRTonePlayer.cpp
+SOURCE      CVRDiskSpaceWatcher.cpp
+SOURCE      CVRMediaRemovalMonitor.cpp
+
+USERINCLUDE	 ../RecViewSrc
+USERINCLUDE	 ../RecViewInc
+USERINCLUDE	 ../group
+USERINCLUDE	 ../UtilsInc
+USERINCLUDE	 ../../inc      // ADo level inc dir
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY		apparc.lib
+LIBRARY		avkon.lib
+LIBRARY		bafl.lib
+LIBRARY		cone.lib
+LIBRARY		efsrv.lib
+LIBRARY		eikcoctl.lib
+LIBRARY		eikcore.lib
+LIBRARY		eikctl.lib
+LIBRARY		euser.lib
+LIBRARY		featmgr.lib
+
+LIBRARY		aknnotify.lib
+LIBRARY		commonengine.lib
+LIBRARY		commonui.lib 	// CErrorUI
+LIBRARY		mediaclientaudio.lib
+LIBRARY		sendui.lib		// CSendAppUi
+
+LIBRARY		sysutil.lib	
+LIBRARY		voicerecorderutils.lib
+LIBRARY		aknskins.lib
+LIBRARY		platformenv.lib	// PathInfo
+LIBRARY		apgrfx.lib // RApaLsSession
+LIBRARY		apmime.lib  // TDataType
+LIBRARY		ws32.lib 
+
+LIBRARY		CdlEngine.lib
+LIBRARY		AknIcon.lib
+LIBRARY		centralrepository.lib
+LIBRARY		RemConCoreApi.lib // CRemConCoreApiTarget
+LIBRARY		RemConInterfaceBase.lib // CRemConInterfaceSelector
+LIBRARY		aknlayout2scalable.lib
+LIBRARY         HWRMLightClient.lib  // for light control
+
+LIBRARY     	ServiceHandler.lib // For AIW
+
+#ifdef RD_MULTIPLE_DRIVE
+LIBRARY     PlatformEnv.lib
+#endif
+
+LIBRARY     AudioInputRouting.lib
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/RecViewLint.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,18 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Use lint for RecView static analysis.
+rem
+
+"c:\Program Files\tools\Lint\lint" RecView.lnt
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/Utils.lnt	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,11 @@
+// Unused header scan
++e766
+
+// standard lint check
+-w2
+
+-i..\UtilsSrc
+-i..\UtilsInc
+-i\epoc32\include\oem
+
+..\UtilsSrc\*.cpp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/Utils.mmp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* 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 is project specification file for the Voice Recorder utils
+*     
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <bldvariant.hrh>
+
+TARGET          VoiceRecorderUtils.dll
+TARGETTYPE      DLL
+
+// the following UIDs are exported to system include by VoiceRecorderUID.h
+UID             0x1000008d 0x100058CA
+
+VERSION         10.0
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID        VID_DEFAULT
+
+SOURCEPATH	../UtilsSrc
+SOURCE      TVRRename.cpp
+SOURCE		DllMain.cpp
+SOURCE		VRUtils.cpp  VRUSBStateHanlder.cpp
+
+USERINCLUDE     ../UtilsInc ../group ../../inc ..
+USERINCLUDE     ../RecViewInc
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY		euser.lib
+LIBRARY		avkon.lib
+LIBRARY		efsrv.lib
+LIBRARY		bafl.lib
+LIBRARY		cone.lib
+LIBRARY		apparc.lib
+LIBRARY		apgrfx.lib
+LIBRARY		apmime.lib
+LIBRARY		aknnotify.lib
+LIBRARY		platformenv.lib  // PathInfo
+LIBRARY		featmgr.lib
+LIBRARY		commonengine.lib
+LIBRARY		centralrepository.lib
+
+#ifdef RD_MULTIPLE_DRIVE
+LIBRARY     PlatformEnv.lib
+#if defined(ARMCC)
+deffile      ../EABI/VoiceRecorderUtilsU.DEF
+#elif defined( WINS )
+deffile      ../BWINS/VoiceRecorderUtilsU.DEF
+#endif
+
+#else
+#if defined(ARMCC)
+deffile      ../EABI/VoiceRecorderUtils.DEF
+#elif defined( WINS )
+deffile      ../BWINS/VoiceRecorderUtils.def
+#endif
+
+#endif
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/UtilsLint.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,17 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Use lint for Utils static analysis.
+rem
+
+"c:\Program Files\tools\Lint\lint" Utils.lnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VRConsts.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2002 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 header file defines some constants, string literals and
+*     enumerations used globally in Voice Recorder.
+*
+*/
+
+
+#ifndef __VRCONSTS_H__
+#define __VRCONSTS_H__
+
+// INCLUDES
+#include <e32def.h>
+#include <e32std.h>
+#include <bldvariant.hrh>
+
+// STRING LITERALS
+_LIT( KVRAppResourceFile, "z:VoiceRecorder.rsc" );
+
+_LIT( KVRBitmapFile, "z:VoiceRecorder.mbm" );
+_LIT(KVRGSBitmapFile,"z:VoiceRecorder_aif.mif");
+
+_LIT( KVRMemoStoreSharedDataKey, "MemoStore");
+_LIT( KVRDefaultSpeakerSharedDataKey, "DefaultSpeaker" );
+_LIT( KVRPanic, "VoiceRec" );
+
+_LIT( KVRPluginFile,"z:GSVoiceRecorderPlugin.mif" );
+
+// CONSTANTS
+const TInt KVRBytes60SecAmr( 5000 );
+const TInt KVRMaxTransitions( 13 );
+const TInt KVRDefaultVolume( 4 );
+const TInt KVRDefaultMaxLength( 60 );
+const TInt KVRMaxVolumeSteps( 10 );
+const TInt KVRSecondAsMicroSeconds( 1000000 );
+const TInt KVRMinuteAsMicroSeconds( 60000000 );
+const TInt KVRDisplayUpdateDelay( 250000 );
+
+const TInt KVRHalfSecondAsMilliSeconds( 500 );
+const TInt KVRSecondAsMilliSeconds( 1000 );
+// Critical memory level that has to be taken into account when
+// calculating estimate for Max recording time
+//const TInt KVRCriticalMemoryLevel( 130000 ); // In Bytes
+
+const TInt KVRAACCriticalMemoryLevel( 400000 ); // In Bytes
+
+// This should so big that is covers 60 secs AMR or alternatively
+// 5 secs WAV recording. 
+const TInt KVRRecStartMemBuf( 100000 ); // In Bytes
+
+const TInt KVRSendUiMsgSize( 1024 );
+
+// AVKON volume control values go from 1 to 10
+const TInt KVRVolumeControlMin( 1 );
+const TInt KVRVolumeControlMax( 10 );
+
+const TUint KVRDefaultAmrBitrate( 12200 );
+
+// Time after which the maximum recording time label is updated for
+// the first time in milliseconds
+const TInt KVRFirstEstimateTime( 3000000 );
+
+const TUint  KVRDefaultBitrateAac(64000);
+
+const TInt KVRDefaultSamplerateAac(48000);
+
+const TInt KVRDefaultStereoMonoFlag(1);
+
+const TInt KVRDefaultAacRecordLength(60);
+
+// ENUMERATIONS
+
+// Don't change the order (snagged from SharedDataKeys.h)
+
+enum TVRStateForVD
+	{
+	EVRIdle = 0,
+	EVRRecording,
+	EVRPlaying
+	};
+
+enum TVRAllowScreenSaver
+	{
+	EVRScreenSaverAllowed = 0,
+	EVRScreenSaverNotAllowed
+	};
+
+enum TVRMemoStore
+	{
+	EMemoStorePhoneMemory,
+	EMemoStoreMMC
+	};
+
+enum TVRPanic
+	{
+	EPanicUnknown,				// 0
+	EPanicUnknownViewId,		// 1
+	EPanicFunctionUnknown,		// 2
+	EPanicInvalidContext,		// 3
+	EPanicInvalidState,			// 4
+	EPanicInvalidTransition,	// 5
+	EPanicTooManyTransitions,	// 6
+	EPanicNotAttached,			// 7
+	EPanicAlreadyAttached,		// 8
+	EPanicInvalidSetting		// 9
+	};
+
+// These values are used against a bitmask
+// All values should be powers of 2
+enum TVRFeature
+	{
+	EVRFeatureShowQualitySetting	= 1,
+	EVRFeatureNext					= 2
+	};
+	
+enum TVRFiletype
+    {
+    EVRFileAmr              = 1,
+    EVRFileQCelp,
+    EVRFileWav
+
+#ifdef  __AAC_ENCODER_PLUGIN
+    , EVRFileAAC_LC
+#endif
+    };
+
+// Commands for special update events
+enum TVRUpdateCommand
+    {
+    EVRUpdate               = 1,
+    EVRUpdate1Second,           // Called when 1 second limit is passed during playback
+    EVRUpdateStateChange,       // Called when state machine state has changed
+    EVRUpdatePositionChange,	// Position changes so that update is needed
+    EVRUpdateCBA				// Called when CBA buttons have to be updated
+    };
+
+#endif // __VRCONSTS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorder.pkg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,26 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:	Package file for project VoiceRecorder.
+;
+; VoiceRecorder.pkg
+;
+&EN
+#{"Voice Recorder"},(0x100058CA),1,0,0
+"..\..\epoc32\release\thumb\urel\VoiceRecorder.app"-"!:\system\apps\VoiceRecorder\VoiceRecorder.app"
+"..\..\epoc32\release\thumb\urel\VoiceRecorder.rsc"-"!:\system\apps\VoiceRecorder\VoiceRecorder.rsc"
+"..\..\epoc32\release\thumb\urel\VoiceRecorder.aif"-"!:\system\apps\VoiceRecorder\VoiceRecorder.aif"
+"..\..\epoc32\release\thumb\urel\VoiceRecorder.mbm"-"c:\system\data\VoiceRecorder.mbm"
+"..\..\epoc32\release\thumb\urel\VoiceRecorder_Caption.rsc"-"!:\system\apps\VoiceRecorder\VoiceRecorder_Caption.rsc"
+"..\..\epoc32\release\thumb\urel\VoiceRecorderRecView.dll"-"!:\system\apps\VoiceRecorder\VoiceRecorderRecView.dll"
+"..\..\epoc32\release\thumb\urel\VoiceRecorderUtils.dll"-"!:\system\apps\VoiceRecorder\VoiceRecorderUtils.dll"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorder.rh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 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 file contains declarations for resources of VoiceRecorder
+*     The file can be included only in resource file.
+*     
+*
+*/
+
+
+#include "voicerecorder.hrh"
+
+//  STRUCTURE DEFINITIONS
+
+STRUCT VR_FILETYPE
+	{
+	BYTE typeid;
+	LTEXT mimetype;
+	}
+
+STRUCT VR_FILETYPE_ARRAY
+    {
+    STRUCT filetypes[];		// VR_FILETYPE array
+    }
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorderApp.mmp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* 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 is project specification file for the Voice Recorder application
+*     
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include "VoiceRecorderSingleClick.hrh"
+
+TARGET	VoiceRecorder.exe
+TARGETTYPE    exe
+epocstacksize 0x5000
+
+// the following UIDs are exported to system include by VoiceRecorderUID.h
+UID           0x100039ce 0x100058CA
+
+VERSION         10.0
+
+CAPABILITY	CAP_APPLICATION
+VENDORID	VID_DEFAULT
+
+#ifdef IAD_INCLUDE_SINGLE_CLICK 
+MACRO SINGLE_CLICK_INCLUDED
+#endif
+
+SOURCEPATH	../AppSrc
+
+SOURCE	CVRApplication.cpp 
+SOURCE		CVRDocument.cpp 
+SOURCE		CVRAppUI.cpp
+
+SOURCE		CVRNewFileService.cpp
+SOURCE		CVRAppServer.cpp
+SOURCE     CVRSettingItem.cpp
+
+#ifdef __SERIES60_MMC 
+SOURCE		CVRSettingsDialogMMCSupported.cpp
+#else
+SOURCE		CVRSettingsDialog.cpp
+#endif
+
+
+USERINCLUDE     ../AppSrc
+USERINCLUDE     ../group
+USERINCLUDE	    ../UtilsInc
+USERINCLUDE     ../RecViewInc
+USERINCLUDE	    ../../inc  
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY		eikcore.lib	
+LIBRARY 	apparc.lib
+LIBRARY 	avkon.lib
+LIBRARY 	cone.lib 
+LIBRARY 	euser.lib
+LIBRARY		commonui.lib
+LIBRARY		sysutil.lib
+
+LIBRARY		VoiceRecorderRecView.lib
+LIBRARY		VoiceRecorderUtils.lib
+LIBRARY		featmgr.lib // featuremanager
+
+// new file service
+LIBRARY		bafl.lib
+LIBRARY		newservice.lib
+
+// settings dialog dependencies
+LIBRARY		eikdlg.lib
+LIBRARY 	eikcoctl.lib
+LIBRARY		hlplch.lib
+LIBRARY     efsrv.lib 
+LIBRARY    commonengine.lib
+
+#ifdef __SERIES60_MMC
+LIBRARY		commondialogs.lib
+#endif
+
+#ifdef RD_MULTIPLE_DRIVE
+LIBRARY     PlatformEnv.lib
+#endif
+
+START RESOURCE    ../group/voicerecorder.rss
+  TARGETPATH    APP_RESOURCE_DIR
+  HEADER
+  LANGUAGE_IDS
+END // RESOURCE
+
+SOURCEPATH		.
+START RESOURCE	VoiceRecorder_reg.rss
+DEPENDS voicerecorder.rsg
+  // Do not change the UID below.
+  TARGETPATH /private/10003a3f/apps
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorderInternalCRKeys.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2004 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 internal Central Repository keys
+*
+*/
+
+
+
+#ifndef VOICERECORDERINTERNALCRKEYS_H
+#define VOICERECORDERINTERNALCRKEYS_H
+
+//  INCLUDES
+#include <e32std.h>
+
+// CONSTANTS
+
+/******************************************************************************
+* Voice Recorder Settings CentRep API
+* Keys under this category are used in defining telephony
+* variant configuration.
+*/
+const TUid KCRUidVoiceRecorder = {0x101F87A3};
+
+/**
+ * To allow or prohibit in-call recording.
+ *
+ * Possible values are 0 (no), 1 (yes).
+ * Default value is 1.
+ */
+const TUint32 KVRAllowInCallRecording 		= 0x00000000;
+
+/**
+ * This key determines which audio format should be used as a default for
+ * recording.
+ *
+ * Possible values = 0 (AMR), 1 (wav) and 2 (mp4)
+ * Default value is 0.
+ */
+const TUint32 KVRDefaultAudioFormat 		= 0x00000001;
+
+/**
+ * Determines which speaker is used, when sound files are played by Voice
+ * Recorder.
+ *
+ * Possible values are 0 ( ESpeakerEarPiece ) and 1 ( ESpeakerIhf )
+ * Default value is 1.
+ */
+const TUint32 KVRDefaultSpeaker				= 0x00000002;
+
+/**
+ * Tells where to store music files recorder by Voice Recorder.
+ *
+ * Possible values are 0 ( EMemoStorePhoneMemory ) and 1 ( EMemoStoreMMC  )
+ * Default value is 0.
+ */
+const TUint32 KVRMemoStore					= 0x00000003;
+
+/**
+ * Volume setting for the ear piece. Loaded on startup and saved when closing VR.
+ *
+ * Possible values are currently 0 to 10
+ * Default value is 4.
+ */
+const TUint32 KVREarPieceVolume				= 0x00000004;
+
+/**
+ * Volume setting for the IHF. Loaded on startup and saved when closing VR.
+ *
+ * Possible values are currently 0 to 10
+ * Default value is 4.
+ */
+const TUint32 KVRIHFVolume					= 0x00000005;
+
+/**
+ * Quality setting for recorded memos.
+ *
+ * Possible values are 0 (EQualityMMSOptimized), 1 (EQualityHigh AAC-LC supported, or EqualityNormal AAC-LC not supported ), 2 (only when AAC-LC is supported)
+ */
+const TUint32 KVRQuality					= 0x00000006;
+
+/**
+ * Maximum recording time for memo in minutes. Only used if no stricter
+ * limit is set runtime (eg. file size limitation)
+ */
+const TUint32 KVRMaxRecordTime				= 0x00000007;
+
+/**
+* Bitmask specifying the elements that should be variated on or off in a
+* release. See VoiceRecorderLocalVariation.txt for description of specific bit.
+*/
+const TUint32 KVRVariationFlags				= 0x00000008;
+
+/**
+* Count of recorded memos. This number is used in name of memo, eg. "Memo(25).amr"
+*/
+const TUint32 KVRMemoCount	    			= 0x00000009;
+
+/**
+* Bitrate used in AMR-NB recording
+*
+* Possible values: 4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200
+* Note that selected bitrate may not be supported by codec. In this case,
+* the default bitrate of 12200 is used.
+*/
+const TUint32 KVRBitrateAmr	    			= 0x00000010;
+
+/**
+* Bitrate used in AAC-LC recording
+*
+* Possible values: 8000 - 288000
+* Note that selected bitrate may not be supported by codec. In this case,
+* the default bitrate of 32000 is used.
+*/
+const TUint32 KVRBitrateAac	    			= 0x00000011;
+
+/**
+* Sampling rate used in AAC-LC recording
+*
+* Possible values: 8, 11.025, 12, 16, 22.05, 24, 32, 44.1 and 48kHz
+* Note that selected bitrate may not be supported by codec. In this case,
+* the default sampling rate of 48 is used.
+*/
+const TUint32 KVRSamplerateAac   		= 0x00000012;
+
+/**
+* Audio mode (mono or stereo) flag
+*
+* Possible values:  1 (mono) and 2 (stereo)
+* the default is 1.
+*/
+const TUint32 KVRStereoMonoFlag  		= 0x00000013;
+
+/**
+* AAC-LC recording Length
+*
+* Possible values: to be determined
+* the default is 60 minutes.
+*/
+const TUint32 KVRAacRecordLength		= 0x00000014;
+
+
+
+
+#endif      // VOICERECORDERINTERNALCRKEYS_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorderPrivatePSKeys.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2004 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 Internal Publish & Subscribe keys
+*
+*/
+
+
+
+#ifndef VOICERECORDERPSKEYS_H
+#define VOICERECORDERPSKEYS_H
+
+//  INCLUDES
+#include <e32std.h>
+
+// CONSTANTS
+
+/******************************************************************************
+* Voice Recorder Private Settings Pub&Sub API
+* Keys under this category are used within Voice Recorder
+*/
+const TUid KPSUidVoiceRecorder = {0x101F87A4};
+
+/**
+ * Current mode of Voice Recorder. (Recording, playing etc.)
+ * Possible values are 	EIdle = 0, ERecording,	EPlaying
+ * Default value is 0.
+ */
+const TUint32 KVoiceRecorderMode	= 0x00000000;
+
+#endif      // VOICERECORDERPSKEYS_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorderSingleClick.hrh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2002 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: 
+*     bldvariant headers for project Voice Recorder
+*
+*/
+
+
+#ifndef VOICERECORDERSINGLECLICK_HRH_
+#define VOICERECORDERSINGLECLICK_HRH_
+
+#define IAD_INCLUDE_SINGLE_CLICK
+
+
+#endif /* VOICERECORDERSINGLECLICK_HRH_ */
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/VoiceRecorder_reg.rss	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2004-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:  register resource file of VoiceRecorder
+*
+*/
+
+
+#include <appinfo.rh>
+#include <voicerecorder.rsg>
+#include <VoiceRecorderUID.h>
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 KVoiceRecorderAppUID3
+
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "VoiceRecorder";
+    hidden        = KAppNotHidden;
+    embeddability = KAppEmbeddable;       
+    
+   	localisable_resource_file = APP_RESOURCE_DIR"\\VoiceRecorder";
+    localisable_resource_id = R_VR_LOCALISABLE_APP_INFO; 
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/backup_registration.xml	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,11 @@
+<!-- Copyright (c) 2005, Nokia. Inc. All Rights Reserved -->
+<!-- Profiles backup registration file -->
+
+<backup_registration>
+
+    <proxy_data_manager sid = "0x10202BE9" />
+
+    <restore requires_reboot = "no"/>
+
+</backup_registration>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* 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 file provides the information required for building
+*     Voice Recorder.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+  DEFAULT
+
+//  Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+../sis/VoiceRecorder_stub.sis   /epoc32/data/z/system/install/VoiceRecorder_stub.SIS
+../rom/Voicerecorder.iby                     CORE_APP_LAYER_IBY_EXPORT_PATH(Voicerecorder.iby)
+../rom/VoicerecorderResources.iby      LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VoicerecorderResources.iby)
+../loc/voicerecorder.loc                 APP_LAYER_LOC_EXPORT_PATH(voicerecorder.loc)
+
+// Generic configuration interface for component cenrep settings  
+// voicerecorder_101F87A3 implementation specifics for cenrep data
+../Conf/voicerecorder.confml             APP_LAYER_CONFML(voicerecorder.confml)
+../Conf/voicerecorder_101F87A3.crml 	 APP_LAYER_CRML(voicerecorder_101F87A3.crml)
+
+// Backup registration file
+backup_registration.xml z:/private/100058CA/backup_registration.xml
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE voicerecorder_aif.mif
+OPTION SOURCES  -c8,8 qgn_menu_voirec
+END
+
+START EXTENSION s60/mifconv
+OPTION TARGETFILE voicerecorder.mif
+OPTION HEADERFILE voicerecorder.mbg
+OPTION SOURCES  -c8,1 qgn_indi_vorec_button_forw\
+		-c8,8 qgn_indi_vorec_button_forw_inactive\
+		-c8,1 qgn_indi_vorec_button_pause\
+		-c8,8 qgn_indi_vorec_button_pause_inactive\
+		-c8,1 qgn_indi_vorec_button_play\
+		-c8,8 qgn_indi_vorec_button_play_inactive\
+		-c8,1 qgn_indi_vorec_button_rec\
+		-c8,8 qgn_indi_vorec_button_rec_inactive\
+		-c8,1 qgn_indi_vorec_button_rew\
+		-c8,8 qgn_indi_vorec_button_rew_inactive\
+		-c8,1 qgn_indi_vorec_button_stop\
+		-c8,8 qgn_indi_vorec_button_stop_inactive
+END
+
+START EXTENSION s60/mifconv
+OPTION TARGETFILE gsvoicerecorderplugin.mif
+OPTION HEADERFILE gsvoicerecorderplugin.mbg
+OPTION SOURCES  -c8,8 qgn_prop_set_apps_voirec
+END
+
+PRJ_MMPFILES
+Utils.mmp
+RecView.mmp
+NewService.mmp
+VoiceRecorderApp.mmp
+../gsplugin/group/GSVoiceRecorderPlugin.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/lscan.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,39 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Checks voicerecorder code respects the naming
+rem             	conventions for leaving functions.
+rem
+
+@echo off
+leavescan ..\RecViewSrc\CVRButtonPanel.cpp
+leavescan ..\RecViewSrc\CVRLabel.cpp
+leavescan ..\RecViewSrc\CVRRecViewContainer.cpp
+leavescan ..\RecViewSrc\CVRRecViewModel.cpp
+leavescan ..\RecViewSrc\CVRRecView.cpp
+leavescan ..\RecViewSrc\CVRMdaRecorder.cpp 
+leavescan ..\RecViewSrc\CVRSystemEventHandler.cpp
+leavescan ..\RecViewSrc\CVRMemo.cpp
+leavescan ..\RecViewSrc\CVRStateInfoPanel.cpp
+leavescan ..\RecViewSrc\TVRState.cpp
+leavescan ..\UtilsSrc\VRUtils.cpp
+leavescan ..\UtilsSrc\CVRFileRecognizer.cpp
+leavescan ..\AppSrc\CVRApplication.cpp 
+leavescan ..\AppSrc\CVRDocument.cpp 
+leavescan ..\AppSrc\CVRAppUI.cpp
+leavescan ..\AppSrc\CVRNewFileService.cpp
+leavescan ..\AppSrc\CVRAppServer.cpp
+leavescan ..\NewServiceSrc\CNewFileServiceClientImpl.cpp
+leavescan ..\NewServiceSrc\CNewFileServiceDiscovery.cpp
+leavescan ..\NewServiceSrc\RNewFileServiceClient.cpp
+leavescan ..\NewServiceSrc\CNewFileServiceBase.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/moveudeb.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,17 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Move voicerecorder file from \udeb path to \urel path.
+rem
+
+move \epoc32\release\thumb\udeb\voicerecorder* \epoc32\release\thumb\urel\
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/voicerecorder.hrh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 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: 
+*     Defines commands and control identifiers.
+*     The file can be included in C++ or resource file.
+*
+*/
+
+
+#ifndef __VOICERECORDER_HRH_
+#define __VOICERECORDER_HRH_
+
+// INCLUDES
+#include "VoiceRecorderContexts.h"
+#include <bldvariant.hrh>
+
+enum TVRDialogIds
+	{
+	EVRSettingsListboxId = 1	//Dialog control ID can't be zero
+	};
+
+enum TVRButtonStates
+	{
+	ENormal = 0,
+	EDimmed,
+	EPressed
+	};
+
+enum TVRCommands
+	{
+	ECmdPlay = 100,			// Don't override EIKON IDs..
+	ECmdPause,
+	ECmdStop,
+	ECmdAutoStopInterrupted,
+	ECmdAutoStopAtEnd,
+	ECmdSilentStop,
+	ECmdRecord,
+	ECmdRewind,
+	ECmdForward,
+	ECmdRecordNew,
+	ECmdOpen,
+	ECmdDelete,
+	ECmdAddToPinboard,
+	ECmdRename,
+	ECmdSaveAttachment,
+	ECmdOk,
+	ECmdCancel,
+	ECmdSettings,
+	ECmdEditListCascade,
+	ECmdChange,
+	ECmdHelp,
+	ECmdEndKey,
+	ECmdCancelNote,
+	ECmdEmbeddedRecordingReady,
+	ECmdDisconnectCall,
+	ECmdNewFileServiceNotify,
+	ECmdMSK,			// When Middle Softkey is pressed
+	ECmdSetNewPosition,		// Progress Bar Touch	
+	ECmdNOP,			// No operation
+	ECmdGoToMyClips,	
+	ECmdUSBChange,
+	
+	ECmdSendVia			// This MUST be the last entry
+	};
+
+enum TVRRecViewStates
+	{
+	EStateIdle = 0,
+	EStateDeleted,
+	EStateRecording,
+	EStateRecordEmbedded,
+	EStatePlaying,
+	EStatePlayingPaused,
+	EStateRecordingPaused,
+	EStateIdleEmbedded,
+	EStateIdleRecordEmbedded,
+	EStateNRTIdle,
+	EStateNRTPlaying,
+	EStateDisableButtons, // all buttons disabled for no in-call recording feature
+
+    ENumStates,		// this must be the last line
+	EStateInitial = 255
+	};
+	
+enum TVRRecViewLabels
+	{
+	ELabelMemoName = 0,
+	ELabelMemoDate,
+	ELabelMemoQuality,
+	ELabelBarMin,
+	ELabelBarMax,
+	ELabelStatus,
+	ELabelQualityText,
+	ENumLabels		// this must be the last line
+	};
+
+enum TVRFunctions
+	{
+	EFunctionNop = 0,
+	EFunctionPlay,
+	EFunctionStop,
+	EFunctionRecord,
+	EFunctionPause,
+	EFunctionForward,
+	EFunctionRewind,
+	EFunctionRecordNew,
+	EFunctionDelete,
+	EFunctionRename,
+	EFunctionStopAndSave,
+	EFunctionStopWithNote,
+	EFunctionOk,
+	EFunctionCancel,
+	EFunctionAutoStopAndSave,
+	EFunctionSilentStopAndSave,
+	EFunctionAutoStop,
+	EFunctionNRTStop,
+	EFunctionNRTAutoStop,
+	EFunctionSaveBeforeExit,
+	EFunctionSetNewPosition,	// Progress Bar Touch
+	ENumFunctions
+	};
+	
+enum TVRSpeaker
+	{
+	ESpeakerEarPiece,
+	ESpeakerIhf
+	};
+
+// EQualityMMSOptimized -> save file as amr
+// EQualityNormal is used only when mp4 is supported,  save file as wav
+// EQualityHigh -> when mp4 is supported, save file as mp4, otherwise save as wave 
+enum TVRQuality
+	{
+	EQualityMMSOptimized,
+
+#ifdef __AAC_ENCODER_PLUGIN
+    EQualityNormal,
+#endif
+
+  	EQualityHigh
+	};
+
+enum TVRButtons
+    {
+    EButtonPlay = 0,
+    EButtonStop,
+    EButtonRecord,
+    EButtonRewind,
+    EButtonForward
+    };
+
+enum TVRSettingFeatures
+    {
+    ESettingQuality = 0,
+    ESettingMemoStore
+    };
+
+#define VRMEMONAMEMAXLENGTH 20
+#define VRLABELMAXLENGTH 32
+
+#endif // __VOICERECORDER_HRH_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/group/voicerecorder.rss	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,2255 @@
+/*
+* 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 resource file
+*	  
+*
+*/
+
+#include <bldvariant.hrh>
+#include <data_caging_paths_strings.hrh>
+
+#include <e32keys.h>
+#include <eikon.rh>   
+#include <avkon.rsg>
+#include <eikon.rsg>
+#include <avkon.hrh>
+#include <avkon.rh>
+#include <uikon.rh>
+#include <appinfo.rh>
+#include <avkon.loc>
+#include <avkon.mbg>
+
+#include <pathconfiguration.hrh>
+#include <CommonDialogs.rh>
+
+#include "RecView.rh"
+#include <voicerecorder.mbg>
+#include "voicerecorder.hrh"
+#include "VoiceRecorder.rh"
+#include <voicerecorder.loc>
+#include <mpxwaitnotedialog.loc>
+
+NAME VREC
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf = qtn_vorec_first_memo_name; } //default document name
+
+RESOURCE EIK_APP_INFO
+	{
+	}
+
+// For the scalable AIF
+RESOURCE LOCALISABLE_APP_INFO r_vr_localisable_app_info
+    {
+    short_caption = qtn_vorec_app_menu_grid;
+    caption_and_icon = CAPTION_AND_ICON_INFO
+        {
+        caption = qtn_vorec_app_title;
+#ifdef __SCALABLE_ICONS
+		number_of_icons = 1;
+		icon_file = APP_BITMAP_DIR"\\VoiceRecorder_aif.mif";
+#else
+        number_of_icons = 2;
+        icon_file = APP_BITMAP_DIR"\\VoiceRecorder_aif.mbm";
+#endif
+        };
+    }
+
+
+RESOURCE AVKON_VIEW r_vr_recorder_view
+	{
+	menubar = r_vr_recview_menubar_empty;  
+	cba = r_vr_softkeys_options_back_select;	
+	}
+
+
+RESOURCE MENU_PANE r_vr_editlist_menupane
+	{
+	items =
+		{
+		MENU_ITEM { command = EAknCmdMark;		txt=qtn_options_list_mark_one; },
+		MENU_ITEM { command = EAknCmdUnmark;	txt=qtn_options_list_unmark_one; },
+		MENU_ITEM { command = EAknMarkAll;		txt=qtn_options_list_mark_all; },
+		MENU_ITEM { command = EAknUnmarkAll;	txt=qtn_options_list_unmark_all; }
+		};
+	}
+
+
+RESOURCE MENU_BAR r_vr_recview_menubar_empty
+	{
+	titles=
+		{
+		};
+	}
+
+RESOURCE MENU_BAR r_vr_recview_menubar_default
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane = r_vr_rec_menupane_default; }
+		};
+	}
+
+
+RESOURCE MENU_PANE r_vr_rec_menupane_default
+	{
+	items=
+		{
+		MENU_ITEM { command = ECmdRecord;		txt = qtn_vorec_rec_new; },
+		MENU_ITEM { command = ECmdDelete;		txt = qtn_vorec_delete; },
+		MENU_ITEM { command = ECmdRename;		txt = text_voice_rec_edit_title; },
+		MENU_ITEM { command = ECmdGoToMyClips;          txt = qtn_vorec_goto_my_clips; },
+#if defined ( __SERIES60_MMC )
+		MENU_ITEM { command = ECmdSettings; 	txt = qtn_vorec_settings; },
+#endif
+
+		MENU_ITEM { command = ECmdHelp; 		txt = qtn_options_help; },
+		MENU_ITEM { command = EAknCmdExit;		txt = qtn_options_exit; }
+		};
+	}
+
+RESOURCE MENU_BAR r_vr_recview_menubar_deleted
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane = r_vr_rec_menupane_deleted; }
+		};
+	}
+
+RESOURCE MENU_PANE r_vr_rec_menupane_deleted
+	{
+	items=
+		{
+		MENU_ITEM { command = ECmdRecord;		txt = qtn_vorec_rec_new; },
+		MENU_ITEM { command = ECmdGoToMyClips;  txt = qtn_vorec_goto_my_clips; },
+#if defined ( __SERIES60_MMC )
+		MENU_ITEM { command = ECmdSettings; 	txt = qtn_vorec_settings; },
+#endif
+
+		MENU_ITEM { command = ECmdHelp; 		txt = qtn_options_help; },
+		MENU_ITEM { command = EAknCmdExit; 		txt = qtn_options_exit; }
+		};
+	}
+
+RESOURCE MENU_BAR r_vr_recview_menubar_viewer
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane = r_vr_rec_menupane_viewer; }
+		};
+	}
+
+RESOURCE MENU_PANE r_vr_rec_menupane_viewer
+	{
+	items=
+		{
+		MENU_ITEM { command = ECmdSaveAttachment;	txt = qtn_vorec_save_mail_atta; },
+		MENU_ITEM { command = ECmdHelp; 			txt = qtn_options_help; },
+		MENU_ITEM { command = EAknCmdExit;			txt = qtn_options_exit; }
+		};
+	}
+
+// In-call recording disabled menu
+RESOURCE MENU_BAR r_vr_recview_menupane_incall_recording_disabled
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane = r_vr_rec_menupane_incall_recording_disabled; }
+		};
+	}
+
+RESOURCE MENU_PANE r_vr_rec_menupane_incall_recording_disabled
+	{
+	items=
+		{
+		MENU_ITEM { command = ECmdGoToMyClips;  txt = qtn_vorec_goto_my_clips; },
+#if defined ( __SERIES60_MMC )
+		MENU_ITEM { command = ECmdSettings; 	txt = qtn_vorec_settings; },
+#endif
+		MENU_ITEM { command = ECmdHelp; 		txt = qtn_options_help; },
+		MENU_ITEM { command = EAknCmdExit; 		txt = qtn_options_exit; }
+		};
+	}
+
+
+
+RESOURCE TBUF r_qtn_query_common_conf_delete { buf = qtn_query_common_conf_delete; }
+RESOURCE TBUF r_qtn_vorec_quest_delete_many { buf = qtn_vorec_quest_delete_many; }
+
+RESOURCE TBUF r_qtn_fldr_overwrite_query { buf = qtn_fldr_overwrite_query; }
+RESOURCE TBUF r_qtn_fldr_item_name_prmpt { buf = qtn_fldr_item_name_prmpt; }
+RESOURCE TBUF r_qtn_fldr_illegal_characters { buf = qtn_fldr_illegal_characters; }
+RESOURCE TBUF r_qtn_fldr_cant_rename_item { buf = qtn_fldr_cant_rename_item; }
+
+// MMC usage related strings
+
+RESOURCE TBUF r_qtn_vorec_set_store { buf = qtn_vorec_set_store; }
+RESOURCE TBUF r_qtn_memc_vorec_note1 { buf = qtn_memc_vorec_note1; }
+RESOURCE TBUF r_qtn_memc_vorec_note2 { buf = qtn_memc_vorec_note2; }
+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)
+
+RESOURCE MENU_PANE r_vr_settings_menupane
+	{
+	items=
+		{
+		MENU_ITEM { command = ECmdChange;		txt = qtn_vorec_settings_change; flags = EEikMenuItemAction ; },
+		MENU_ITEM { command = ECmdHelp; 		txt = qtn_options_help; },
+		MENU_ITEM { command = EEikCmdExit; 		txt = qtn_options_exit; }
+		};
+	}
+
+RESOURCE MENU_BAR r_vr_settings_menubar
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane = r_vr_settings_menupane; }
+		};
+	}
+
+RESOURCE DIALOG r_vr_settings_dialog
+	{
+	buttons = r_vr_softkeys_options_back_change;
+	flags = EEikDialogFlagWait | EEikDialogFlagNoDrag
+			| EEikDialogFlagCbaButtons | EEikDialogFlagNoTitleBar
+			| EEikDialogFlagFillAppClientRect;
+	items =
+		{
+		DLG_LINE
+			{
+			type = EAknCtSettingListBox;
+			id = EVRSettingsListboxId;
+			itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
+			control = LISTBOX
+				{
+				flags = EAknListBoxSelectionList;
+				};
+			}
+		};
+	}
+
+RESOURCE TBUF r_qtn_vorec_set_ihf { buf = qtn_vorec_set_ihf; }
+RESOURCE TBUF r_qtn_vorec_set_quality { buf = qtn_vorec_set_quality; }
+
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_vr_settings_default_speaker_texts
+	{
+	setting_texts_resource = r_vr_settings_default_speaker;
+	popped_up_texts_resource = r_vr_settings_default_speaker_popup;
+	}
+
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_vr_settings_quality_texts
+	{
+	setting_texts_resource = r_vr_settings_quality;
+	popped_up_texts_resource = r_vr_settings_quality_popup;
+	}
+
+RESOURCE ARRAY r_vr_settings_default_speaker
+	{
+	items=
+		{
+		AVKON_ENUMERATED_TEXT { value = ESpeakerEarPiece; text = qtn_vorec_settings_ihf_ear; },
+		AVKON_ENUMERATED_TEXT { value = ESpeakerIhf; text = qtn_vorec_settings_ihf_hf; }
+		};
+	}
+
+RESOURCE ARRAY r_vr_settings_default_speaker_popup
+	{
+	items=
+		{
+		LBUF { txt = qtn_vorec_settings_ihf_ear; },
+		LBUF { txt = qtn_vorec_settings_ihf_hf; }
+		};
+	}
+
+RESOURCE ARRAY r_vr_settings_quality
+	{
+	items=
+		{
+		AVKON_ENUMERATED_TEXT { value = EQualityMMSOptimized; text = qtn_vorec_settings_quality_mms_optimized; },
+
+#ifdef  __AAC_ENCODER_PLUGIN
+		AVKON_ENUMERATED_TEXT { value = EQualityNormal; text = qtn_vorec_settings_quality_normal; },
+#endif
+
+		AVKON_ENUMERATED_TEXT { value = EQualityHigh; text = qtn_vorec_settings_quality_high; }
+		};
+	}
+
+RESOURCE ARRAY r_vr_settings_quality_popup
+	{
+	items=
+		{
+		LBUF { txt = qtn_vorec_settings_quality_mms_optimized; },
+
+#ifdef  __AAC_ENCODER_PLUGIN
+		LBUF { txt = qtn_vorec_settings_quality_normal; },
+#endif
+
+		LBUF { txt = qtn_vorec_settings_quality_high; }
+		};
+	}
+
+RESOURCE POPUP_SETTING_LIST r_vr_settings_popup_control
+	{
+	}
+
+RESOURCE AVKON_SETTING_PAGE r_vr_settings_default_speaker_page
+	{
+	type = EAknCtPopupSettingList;
+        softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL;
+	editor_resource_id = r_vr_settings_popup_control;
+	}
+
+RESOURCE TBUF r_vr_video_call_infonote_label { buf = qtn_vorec_info_video_call_ongoing; }
+RESOURCE TBUF r_vr_internet_call_infonote_label { buf = qtn_vorec_info_internet_call_ongoing; }
+RESOURCE TBUF r_vr_save_waitnote_label { buf = qtn_vorec_wait_saving_memo; }
+RESOURCE TBUF r_vr_stop_save_waitnote_label { buf = qtn_vorec_wait_stop_saved; }
+RESOURCE TBUF r_vr_stop_infonote_label { buf = qtn_vorec_info_record_stopped; }
+RESOURCE TBUF r_vr_corrupt_infonote_label { buf = qtn_vorec_info_memo_corrupted; }
+RESOURCE TBUF r_vr_unsupported_infonote_label { buf = qtn_vorec_info_memo_unsupported; }
+RESOURCE TBUF r_vr_server_error_infonote_label { buf = qtn_vorec_info_server_error; }
+RESOURCE TBUF r_vr_memory_warning { buf = qtn_memlo_memory_running_out; }
+RESOURCE TBUF r_vr_memory_mmc_warning { buf = qtn_memlo_mmc_memory_running_out; }
+RESOURCE TBUF r_vr_memory_low_stop_warning { buf = qtn_memlo_not_enough_memory; }
+
+// Quality strings for UI
+RESOURCE TBUF r_vorec_quality_mms_optimized { buf = qtn_vorec_quality_mms_optimized; }
+
+#ifdef __AAC_ENCODER_PLUGIN
+RESOURCE TBUF r_vorec_quality_normal { buf = qtn_vorec_quality_normal; }
+#endif
+
+RESOURCE TBUF r_vorec_quality_high { buf = qtn_vorec_quality_high; }
+
+// Memo naming strings
+RESOURCE TBUF r_vorec_first_memo_name { buf = qtn_vorec_first_memo_name; }
+RESOURCE TBUF r_vorec_memo_name { buf = qtn_vorec_memo_name; }
+RESOURCE TBUF r_vorec_default_memo_name { buf = qtn_vorec_default_memo_name; }
+
+RESOURCE DIALOG r_vr_rename_dialog
+	{
+	flags = EEikDialogFlagWait|EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar | EEikDialogFlagCbaButtons | EEikDialogFlagNoShadow;
+	buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+	items =
+		{
+		DLG_LINE
+			{
+			type = EAknCtQuery;
+			id = EGeneralQuery;
+			control = AVKON_DATA_QUERY 
+				{
+				layout = EDataLayout;
+				label = qtn_fldr_item_name_prmpt;
+				control = EDWIN 
+					{ 
+					flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable
+						| EEikEdwinNoLineOrParaBreaks;
+					maxlength = VRMEMONAMEMAXLENGTH;
+					lines = 1;
+					width = 16;
+					};
+				};
+			}
+		};
+	}
+
+// For remote recording
+RESOURCE DIALOG r_vr_confirmation_query
+	{
+	flags = EGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_YES_NO;
+	// r_vr_softkeys_ok_cancel;
+	items =
+		{
+		DLG_LINE
+			{
+			type = EAknCtQuery;
+			id = EGeneralQuery;
+			control = AVKON_CONFIRMATION_QUERY 
+				{ 
+				layout = EConfirmationLayout;
+				};
+			}
+		};
+	}
+
+
+// ------- RECORDER VIEW STUFF ---------------------------------------
+
+RESOURCE VR_STATEMACHINE r_vr_recview_states
+	{
+	labelsets =
+		{
+		VR_LABELSET
+			{
+			labels =
+				{
+				LBUF { txt = qtn_vorec_memo_label; },
+				LBUF { txt = qtn_vorec_date_label; },
+				LBUF { txt = qtn_vorec_quality_label; },				
+				LBUF { txt = qtn_vorec_min_label; },
+				LBUF { txt = qtn_vorec_time_indic; },
+				LBUF { txt = " "; }, // this is a placeholder for the status text, don't touch :-)
+				LBUF { txt = " "; } // this is a placeholder for quality text (MMS or High)
+				};
+			},
+
+		VR_LABELSET
+			{
+			},
+
+		VR_LABELSET // for .rng:s
+			{
+			labels =
+				{
+				LBUF { txt = qtn_vorec_memo_label; },
+				LBUF { txt = qtn_vorec_date_label; },
+				LBUF { txt = " "; } // this is a placeholder for the status text, don't touch :-)
+				};
+			}
+		};
+	labelLayouts =
+		{
+		VR_LABEL_LINK { euroLabelId = r_vr_statusinfo_label_1_euro; 
+						apacLabelId = r_vr_statusinfo_label_1_apac;
+						arabicHebrewLabelId = r_vr_statusinfo_label_1_arabic_hebrew;
+					  },
+		VR_LABEL_LINK { euroLabelId = r_vr_statusinfo_label_2_euro; 
+						apacLabelId = r_vr_statusinfo_label_2_apac;
+						arabicHebrewLabelId = r_vr_statusinfo_label_2_arabic_hebrew;
+					  },
+		VR_LABEL_LINK { euroLabelId = r_vr_statusinfo_label_3_euro; 
+						apacLabelId = r_vr_statusinfo_label_3_apac;
+						arabicHebrewLabelId = r_vr_statusinfo_label_3_arabic_hebrew;
+					  },
+		VR_LABEL_LINK { euroLabelId = r_vr_statusinfo_label_4_euro; 
+						apacLabelId = r_vr_statusinfo_label_4_apac;
+						arabicHebrewLabelId = r_vr_statusinfo_label_4_arabic_hebrew;
+					  },
+		VR_LABEL_LINK { euroLabelId = r_vr_statusinfo_label_5_euro; 
+						apacLabelId = r_vr_statusinfo_label_5_apac;
+						arabicHebrewLabelId = r_vr_statusinfo_label_5_arabic_hebrew;
+					  },
+		VR_LABEL_LINK { euroLabelId = r_vr_statusinfo_label_6_euro; 
+						apacLabelId = r_vr_statusinfo_label_6_apac;
+						arabicHebrewLabelId = r_vr_statusinfo_label_6_arabic_hebrew;
+					  }
+		};
+	states =
+		{
+		// memo_open
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_default;
+			cba = r_vr_softkeys_options_exit_select;
+			status = "";
+			labelSetId = 0;
+			hasVolumeControl = 1;
+			focusButton = 0;
+			stateID = EStateIdle; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = ENormal; }
+				};
+			},
+		// memo_deleted
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_deleted;
+			cba = r_vr_softkeys_options_exit_select;
+			status = "";
+			labelSetId = 1;
+			focusButton = 2;
+			stateID = EStateDeleted; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = EDimmed; }
+				};
+			},
+		// memo_recording
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_empty;
+			cba = r_vr_softkeys_pause_stop_select;
+			status = qtn_vorec_recording;
+			labelSetId = 0;
+			focusButton = 1;
+			stateID = EStateRecording; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdPause; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = EDimmed; }
+				};
+			},
+		// memo_record_embed
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_empty;
+			cba = r_vr_softkeys_record_back_select;
+			status = "";
+			labelSetId = 1;
+			focusButton = 2;
+			stateID = EStateRecordEmbedded; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = EDimmed; }
+				};
+			},
+		// memo_playing
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_empty;
+			cba = r_vr_softkeys_pause_stop_select;
+			status = qtn_vorec_playback;
+			labelSetId = 0;
+			hasVolumeControl = 1;
+			focusButton = 1;
+			stateID = EStatePlaying; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPause; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = ENormal; }
+				};
+			},
+		// memo_paused_playback
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_empty;
+			cba = r_vr_softkeys_play_stop_select;
+			status = qtn_vorec_paused;
+			labelSetId = 0;
+			hasVolumeControl = 1;
+			focusButton = 0;
+			stateID = EStatePlayingPaused; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = ENormal; }
+				};
+			},
+		// memo_paused_record
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_empty;
+			cba = r_vr_softkeys_record_stop_select;
+			status = qtn_vorec_paused;
+			labelSetId = 0;
+			focusButton = 2;
+			stateID = EStateRecordingPaused; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = EDimmed; }
+				};
+			},
+		// memo_open_embed
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_viewer;
+			cba = r_vr_softkeys_options_back_select;
+			status = "";
+			labelSetId = 0;
+			hasVolumeControl = 1;
+			focusButton = 0;
+			stateID = EStateIdleEmbedded; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = ENormal; }
+				};
+			},
+		// memo_record_embed_idle
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_empty;
+			cba = r_vr_softkeys_ok_cancel_select;
+			status = "";
+			labelSetId = 0;
+			hasVolumeControl = 1;
+			focusButton = 0;
+			stateID = EStateIdleRecordEmbedded; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = ENormal; }
+				};
+			},
+		// nokia_ringing_tone_idle
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_viewer;
+			cba = r_vr_softkeys_options_back_select;
+			status = "";
+			labelSetId = 2;
+			hasVolumeControl = 1;
+			hasProgressBar = 0;
+			focusButton = 0;
+			stateID = EStateNRTIdle; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = EDimmed; }
+				};
+			},
+		// nokia_ringing_tone_playing
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menubar_viewer;
+			cba = r_vr_softkeys_stop_select;
+			status = "";
+			labelSetId = 2;
+			hasVolumeControl = 1;
+			hasProgressBar = 0;
+			focusButton = 1;
+			stateID = EStateNRTPlaying; 
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdStop; state = ENormal; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward; state = EDimmed; }
+				};
+			},
+		// disable_buttons
+		VR_VISUAL_STATE
+			{
+			menubar = r_vr_recview_menupane_incall_recording_disabled;
+			cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+			status = "";
+			labelSetId = 0;
+			hasVolumeControl = 0;
+			hasProgressBar = 0;
+			focusButton = 0;
+			stateID = EStateDisableButtons;
+			buttons = 
+				{
+				VR_BUTTON_INFO { commandId = ECmdPlay;	state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdStop;	state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRecord; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdRewind; state = EDimmed; },
+				VR_BUTTON_INFO { commandId = ECmdForward;state = EDimmed; }
+				};
+			}
+		};
+
+	contexts =
+		{
+		VR_CONTEXT
+			{
+			id = EContextNormal;
+			transition = VR_TRANSITION { next = EStateIdle; };
+			states =
+				{
+				VR_STATE
+					{
+					id = EStateIdle;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecordNew; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStateIdle; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStateIdle; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateDeleted; function = EFunctionDelete; }, 
+						VR_TRANSITION { cmd = ECmdRename; next = EStateIdle; function = EFunctionRename; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdle; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateDeleted;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecordNew; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateDeleted; function = EFunctionNop; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecording;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdPause; next = EStateRecordingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionSilentStopAndSave; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecording; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecording; function = EFunctionNop; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlaying;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPause; next = EStatePlayingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlaying; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlaying; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlaying; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlayingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlayingPaused; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlayingPaused; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlayingPaused; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecordingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecord; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionSilentStopAndSave; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecordingPaused; function = EFunctionSetNewPosition; }
+						};
+					},
+				// Disabled button state
+				VR_STATE	
+					{
+					id = EStateDisableButtons;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdStop;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdForward;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRewind;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRecord;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted;	next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateDisableButtons; function = EFunctionNop; }
+						};
+
+					}
+				};
+			},
+		VR_CONTEXT
+			{
+			id = EContextEmptyNormal;
+			transition = VR_TRANSITION { next = EStateDeleted; };
+			states =
+				{
+				VR_STATE
+					{
+					id = EStateIdle;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecordNew; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStateIdle; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStateIdle; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateDeleted; function = EFunctionDelete; }, 
+						VR_TRANSITION { cmd = ECmdRename; next = EStateIdle; function = EFunctionRename; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdle; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateDeleted;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecordNew; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateDeleted; function = EFunctionNop; }
+// Bentley
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecording;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdPause; next = EStateRecordingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionSilentStopAndSave; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecording; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionSaveBeforeExit; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecording; function = EFunctionNop; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlaying;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPause; next = EStatePlayingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlaying; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlaying; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlaying; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlayingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlayingPaused; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlayingPaused; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlayingPaused; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecordingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecord; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionSaveBeforeExit; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecordingPaused; function = EFunctionNop; }
+						};
+					},
+				// Disabled button state
+				VR_STATE	
+					{
+					id = EStateDisableButtons;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdStop;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdForward;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRewind;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRecord;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted;	next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdle; function = EFunctionNop; }
+						};
+					}
+
+				};
+			},
+		VR_CONTEXT
+			{
+			id = EContextRecordNewNormal;
+			transition = VR_TRANSITION { next = EStateRecording; function = EFunctionRecord; };
+			states =
+				{
+				VR_STATE
+					{
+					id = EStateIdle;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecordNew; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStateIdle; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStateIdle; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateDeleted; function = EFunctionDelete; }, 
+						VR_TRANSITION { cmd = ECmdRename; next = EStateIdle; function = EFunctionRename; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdle; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateDeleted;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecordNew; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateDeleted; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateDeleted; function = EFunctionNop; }
+// Bentley
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecording;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdPause; next = EStateRecordingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionSilentStopAndSave; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecording; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionSaveBeforeExit; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecording; function = EFunctionNop; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlaying;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPause; next = EStatePlayingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlaying; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlaying; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlaying; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlayingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlayingPaused; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlayingPaused; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdle; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlayingPaused; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecordingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdle; function = EFunctionStopAndSave; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecord; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdle; function = EFunctionAutoStopAndSave; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecordingPaused; function = EFunctionNop; }
+						};
+					},
+				// Disabled button state
+				VR_STATE	
+					{
+					id = EStateDisableButtons;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdStop;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdForward;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRewind;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRecord;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted;	next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdle; function = EFunctionNop; }
+						};
+					}
+				};
+			}, 
+		VR_CONTEXT
+			{
+			id = EContextRecordNewForRemote;
+			transition = VR_TRANSITION { next = EStateRecordEmbedded; };
+			states =
+				{
+				VR_STATE
+					{
+					id = EStateRecordEmbedded;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecord; },
+						VR_TRANSITION { cmd = ECmdCancel; next = EStateRecordEmbedded; function = EFunctionCancel; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecordEmbedded; function = EFunctionNop; }
+// Bentley
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecording;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdleRecordEmbedded; function = EFunctionStopWithNote; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdPause; next = EStateRecordingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecording; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdleRecordEmbedded; function = EFunctionStopWithNote; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleRecordEmbedded; function = EFunctionStopWithNote; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecording; function = EFunctionNop; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateIdleRecordEmbedded;
+					transitions = 
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStateIdleRecordEmbedded; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStateIdleRecordEmbedded; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdOk; next = EStateIdleRecordEmbedded; function = EFunctionOk; },
+						VR_TRANSITION { cmd = ECmdCancel; next = EStateIdleRecordEmbedded; function = EFunctionCancel; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdleRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdleRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateIdleRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdleRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleRecordEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdleRecordEmbedded; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateRecordingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdRecord; next = EStateRecording; function = EFunctionRecord; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateRecordingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleRecordEmbedded; function = EFunctionStopWithNote; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateRecordingPaused; function = EFunctionNop; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlaying;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPause; next = EStatePlayingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleRecordEmbedded; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlaying; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlaying; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlaying; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlayingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlayingPaused; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlayingPaused; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleRecordEmbedded; function = EFunctionAutoStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleRecordEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlayingPaused; function = EFunctionSetNewPosition; }
+						};
+					},
+				// Disabled button state
+				VR_STATE	
+					{
+					id = EStateDisableButtons;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdStop;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdForward;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRewind;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRecord;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted;	next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdle; function = EFunctionNop; }
+						};
+					}
+				};
+			},
+
+		VR_CONTEXT
+			{
+			id = EContextViewer;
+			transition = VR_TRANSITION { next = EStateIdleEmbedded; };
+			states =
+				{
+				VR_STATE
+					{
+					id = EStateIdleEmbedded;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStateIdleEmbedded; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStateIdleEmbedded; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdleEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdleEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateIdleEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStateIdleEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleEmbedded; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateIdleEmbedded; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlaying;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPause; next = EStatePlayingPaused; function = EFunctionPause; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlaying; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlaying; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlaying; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlaying; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStatePlayingPaused;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStatePlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdStop; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdForward; next = EStatePlayingPaused; function = EFunctionForward; },
+						VR_TRANSITION { cmd = ECmdRewind; next = EStatePlayingPaused; function = EFunctionRewind; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall; next = EStatePlayingPaused; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateIdleEmbedded; function = EFunctionStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStatePlayingPaused; function = EFunctionSetNewPosition; }
+						};
+					},
+				// Disabled button state
+				VR_STATE	
+					{
+					id = EStateDisableButtons;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdStop;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdForward;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRewind;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRecord;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted;	next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDisconnectCall;		next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition;       next = EStateIdle; function = EFunctionNop; }
+						};
+
+					}
+				};
+			},
+			
+			VR_CONTEXT
+			{
+			id = EContextNokiaRingTone;
+			transition = VR_TRANSITION { next = EStateNRTIdle; };
+			states =
+				{
+				VR_STATE
+					{
+					id = EStateNRTIdle;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay; next = EStateNRTPlaying; function = EFunctionPlay; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateNRTIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateNRTIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateNRTIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateNRTIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateNRTIdle; function = EFunctionSetNewPosition; }
+						};
+					},
+				VR_STATE
+					{
+					id = EStateNRTPlaying;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdStop; next = EStateNRTIdle; function = EFunctionNRTStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted; next = EStateNRTIdle; function = EFunctionNRTStop; },
+						VR_TRANSITION { cmd = ECmdAutoStopAtEnd; next = EStateNRTIdle; function = EFunctionNRTAutoStop; },
+						VR_TRANSITION { cmd = ECmdDelete; next = EStateNRTIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop; next = EStateNRTIdle; function = EFunctionNRTStop; },
+						VR_TRANSITION { cmd = ECmdEndKey; next = EStateNRTIdle; function = EFunctionNRTStop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition; next = EStateNRTPlaying; function = EFunctionSetNewPosition; }
+						};
+					},
+				// Disabled button state
+				VR_STATE	
+					{
+					id = EStateDisableButtons;
+					transitions =
+						{
+						VR_TRANSITION { cmd = ECmdPlay;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdStop;					next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdForward;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRewind;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdRecord;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdAutoStopInterrupted;	next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSilentStop;			next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdDelete;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdEndKey;				next = EStateIdle; function = EFunctionNop; },
+						VR_TRANSITION { cmd = ECmdSetNewPosition;       next = EStateIdle; function = EFunctionNop; }
+						};
+					}
+				};
+			}		
+		};
+	}
+
+
+// ---------------------------------------------------------
+//
+//	New VoiceRecorder Avkon buttons' resources
+//	Each button has as many states as there are visual states	
+// 	in VR
+//
+// ---------------------------------------------------------
+//	
+RESOURCE VR_BUTTONS_NEW r_vr_button_panel_buttons
+	{
+	buttons = 
+		{
+		// PLAY BUTTON
+		AVKON_BUTTON
+			{
+			flags = KAknButtonNoFrame | KAknButtonReportOnKeyDown;
+	    	states =
+	        	{
+				// memo_open
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_mask;
+		            },
+		        // memo_deleted 
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive_mask;
+		            },
+		        // memo_recording    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive_mask;
+		            },
+		        // memo_record_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive_mask;
+		            },
+		        // memo_playing    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_pause; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_pause_mask;
+		            },
+		        // memo_paused_playback
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_mask;
+		            },
+		        // memo_paused_record    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive_mask;
+		            },
+		        // memo_open_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_mask;
+		            },
+		        // memo_record_embed_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_mask;
+		            },
+		        // nokia_ringing_tone_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_mask;
+		            },
+		        // nokia_ringing_tone_playing   
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive_mask;
+		            },
+		        // disable_buttons     
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_play_inactive_mask;
+		            }                    
+		        };
+			},
+			
+		// STOP BUTTON
+		AVKON_BUTTON
+			{
+			flags = KAknButtonNoFrame | KAknButtonReportOnKeyDown;
+	    	states =
+	        	{
+	        	// memo_open
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            },
+		        // memo_deleted   
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            },
+		        // memo_recording    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_mask;
+		            },
+		        // memo_record_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            },
+		        // memo_playing    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_mask;
+		            },
+		        // memo_paused_playback
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_mask;
+		            },
+		        // memo_paused_record    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_mask;
+		            },
+		        // memo_open_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            },
+		        // memo_record_embed_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            },
+		        // nokia_ringing_tone_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            },
+		        // nokia_ringing_tone_playing 
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_mask;
+		            },
+		        // disable_buttons       
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_stop_inactive_mask;
+		            }                    
+		        };                 
+			},
+			
+		// RECORD BUTTON
+		AVKON_BUTTON
+			{
+			flags = KAknButtonNoFrame | KAknButtonReportOnKeyDown;
+	    	states =
+	        	{
+	        	// memo_open
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_mask;
+		            },
+		        // memo_deleted    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_mask;
+		            },
+		        // memo_recording    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_pause; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_pause_mask;
+		            },
+		        // memo_record_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_mask;
+		            },
+		        // memo_playing    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive_mask;
+		            },
+		        // memo_paused_playback
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive_mask;
+		            },
+		        // memo_paused_record    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_mask;
+		            },
+		        // memo_open_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive_mask;
+		            },
+		        // memo_record_embed_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif"; 
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive;
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_mask;
+		            },
+		        // nokia_ringing_tone_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive_mask;
+		            },
+		        // nokia_ringing_tone_playing  
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive_mask;
+		            },
+		        // disable_buttons      
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rec_inactive_mask;
+		            }   
+		        };                 
+			},
+			
+		// REWIND BUTTON
+		AVKON_BUTTON
+			{
+			flags = KAknButtonNoFrame | KAknButtonReportOnKeyDown;
+	    	states =
+	        	{
+	        	// memo_open
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_mask;
+		            },
+		        // memo_deleted    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            },
+		        // memo_recording    
+		        AVKON_BUTTON_STATE
+		            {
+		           	bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            },
+		        // memo_record_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            },
+		        // memo_playing    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_mask;				         
+		            },
+		        // memo_paused_playback
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_mask;
+		            },
+		        // memo_paused_record    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            },
+		        // memo_open_embed  
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_mask;
+		            },
+		        // memo_record_embed_idle   
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_mask;
+		            },
+		        // nokia_ringing_tone_idle     
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            },
+		        // nokia_ringing_tone_playing     
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            },
+		        // disable_buttons     
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_rew_inactive_mask;
+		            }             
+		                         
+		        };
+			},
+				
+		// FORWARD BUTTON
+		AVKON_BUTTON
+			{
+			flags = KAknButtonNoFrame | KAknButtonReportOnKeyDown;
+	    	states =
+	        	{
+	        	// memo_open
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_mask;
+		            },
+		        // memo_deleted    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            },
+		        // memo_recording    
+		        AVKON_BUTTON_STATE
+		            {
+		           	bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            },
+		        // memo_record_embed    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            },
+		        // memo_playing    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_mask;				 
+		            },
+		        // memo_paused_playback
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_mask;
+		            },
+		        // memo_paused_record   
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            },
+		        // memo_open_embed     
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_mask;
+		            },
+		        // memo_record_embed_idle    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		            bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_mask;
+		            },
+		        // nokia_ringing_tone_idle   
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            },
+		        // nokia_ringing_tone_playing     
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            },
+		        // disable_buttons    
+		        AVKON_BUTTON_STATE
+		            {
+		            bmpfile = "z:\\Resource\\apps\\voicerecorder.mif";
+		           	bmpid = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive; 
+		            bmpmask = EMbmVoicerecorderQgn_indi_vorec_button_forw_inactive_mask;
+		            }
+		                         
+		        };	
+			}
+		};	
+	}	
+
+// ELAF variants
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_1_euro
+	{
+	font = ELatinBold13; C = 215; l = 57; r = 5; B = 23; W = 114; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_2_euro
+	{
+	font = ELatinPlain12; C = 215; l = 62; r = 5; B = 39; W = 109; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_3_euro
+	{
+	font = ELatinPlain12; C = 215; l = 62; r = 5; B = 54; W = 109; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_4_euro
+	{
+	font = ELatinPlain12; C = 215; l = 58; r = 100; B = 115; W = 18; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_5_euro
+	{
+	font = ELatinPlain12; C = 215; l = 142; r = 4; B = 115; W = 30; J = ELayoutAlignRight;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_6_euro
+	{
+	font = ELatinBold13; C = 35; l = 57; r = 5; B = 98; W = 114; J = ELayoutAlignLeft;
+	}
+
+
+// APAC variants
+
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_1_apac
+	{
+	font = EApacPlain16; C = 215; l = 57; r = 5; B = 25; W = 114; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_2_apac
+	{
+	font = EApacPlain12; C = 215; l = 64; r = 5; B = 41; W = 107; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_3_apac
+	{
+	font = EApacPlain12; C = 215; l = 64; r = 5; B = 56; W = 107; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_4_apac
+	{
+	font = EApacPlain12; C = 215; l = 58; r = 100; B = 117; W = 18; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_5_apac
+	{
+	font = EApacPlain12; C = 215; l = 142; r = 4; B = 117; W = 30; J = ELayoutAlignRight;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_6_apac
+	{
+	font = EApacPlain16; C = 35; l = 57; r = 5; B = 100; W = 114; J = ELayoutAlignLeft;
+	}
+
+
+// ABRW variants
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_1_arabic_hebrew
+	{
+	font = ELatinBold13; C = 215; l = 5; r = 57; B = 23; W = 114; J = ELayoutAlignRight;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_2_arabic_hebrew
+	{
+	font = ELatinPlain12; C = 215; l = 5; r = 62; B = 39; W = 109; J = ELayoutAlignRight;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_3_arabic_hebrew
+	{
+	font = ELatinPlain12; C = 215; l = 5; r = 62; B = 54; W = 109; J = ELayoutAlignRight;
+	}
+// l changed from 100 to 90 to make max length label fit
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_4_arabic_hebrew
+	{
+	font = ELatinPlain12; C = 215; l = 90; r = 58; B = 115; W = 30; J = ELayoutAlignRight;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_5_arabic_hebrew
+	{
+	font = ELatinPlain12; C = 215; l = 4; r = 124; B = 115; W = 30; J = ELayoutAlignLeft;
+	}
+RESOURCE AVKON_LAYOUT_LABEL r_vr_statusinfo_label_6_arabic_hebrew
+	{
+	font = ELatinBold13; C = 35; l = 5; r = 57; B = 98; W = 114; J = ELayoutAlignRight;
+	}
+
+
+
+//---------------------------------------------------------------
+// Old CBA resources
+// Middle Softkey not included
+//---------------------------------------------------------------
+//
+RESOURCE CBA r_vr_softkeys_pause_stop
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdPause; txt = qtn_vorec_pause_sk; },
+		CBA_BUTTON { id = ECmdStop; txt = qtn_vorec_stop_sk; }
+		};
+	}
+
+RESOURCE CBA r_vr_softkeys_play_stop
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdPlay; txt = text_softkey_play; },
+		CBA_BUTTON { id = ECmdStop; txt = qtn_vorec_stop_sk; }
+		};
+	}
+
+RESOURCE CBA r_vr_softkeys_record_stop
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdRecord; txt = qtn_vorec_rec_sk; },
+		CBA_BUTTON { id = ECmdStop; txt = qtn_vorec_stop_sk; }
+		};
+	}
+	
+RESOURCE CBA r_vr_softkeys_record_back
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdRecord; txt = qtn_vorec_rec_sk; },
+		CBA_BUTTON { id = ECmdCancel; txt = text_softkey_back; }
+		};
+	}
+
+RESOURCE CBA r_vr_softkeys_ok_cancel
+	{
+	buttons = 
+		{
+		CBA_BUTTON {id=ECmdOk; txt=text_softkey_select;},
+		CBA_BUTTON {id=ECmdCancel; txt= text_softkey_cancel;}
+		};
+	}
+
+RESOURCE CBA r_vr_softkeys_stop
+	{
+	buttons = 
+		{
+		CBA_BUTTON { txt =" "; },
+		CBA_BUTTON {id=ECmdStop; txt= qtn_vorec_stop_sk;}
+		};
+	}
+
+
+//---------------------------------------------------------------
+// New CBA resources
+// Middle Softkey included
+//---------------------------------------------------------------
+//
+RESOURCE CBA r_vr_softkeys_pause_stop_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdPause; txt = qtn_vorec_pause_sk; },
+		CBA_BUTTON { id = ECmdStop; txt = qtn_vorec_stop_sk; },
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+
+RESOURCE CBA r_vr_softkeys_play_stop_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdPlay; txt = text_softkey_play; },
+		CBA_BUTTON { id = ECmdStop; txt = qtn_vorec_stop_sk; },
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+
+RESOURCE CBA r_vr_softkeys_record_stop_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdRecord; txt = qtn_vorec_rec_sk; },
+		CBA_BUTTON { id = ECmdStop; txt = qtn_vorec_stop_sk; },
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+	
+RESOURCE CBA r_vr_softkeys_record_back_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdRecord; txt = qtn_vorec_rec_sk; },
+		CBA_BUTTON { id = ECmdCancel; txt = text_softkey_back; },
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+
+
+#ifdef __SERIES60_31__
+// LSK in 3.1 is "Select"
+RESOURCE CBA r_vr_softkeys_ok_cancel_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdOk; txt = text_softkey_select;},
+		CBA_BUTTON { id = ECmdCancel; txt = text_softkey_cancel;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+#else
+// LSK in 3.2 is "Insert"
+RESOURCE CBA r_vr_softkeys_ok_cancel_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdOk; txt = qtn_vorec_insert_sk;},
+		CBA_BUTTON { id = ECmdCancel; txt = text_softkey_cancel;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+#endif
+
+
+RESOURCE CBA r_vr_softkeys_stop_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { txt =" "; },
+		CBA_BUTTON { id = ECmdStop; txt= qtn_vorec_stop_sk;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+
+// A new CBA resource with MSK. Replaces R_AVKON_SOFTKEYS_OPTIONS_BACK
+RESOURCE CBA r_vr_softkeys_options_back_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+		CBA_BUTTON { id = EAknCmdExit; txt = text_softkey_back;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}
+
+// A new CBA resource with MSK. Replaces R_AVKON_SOFTKEYS_OPTIONS_EXIT	
+RESOURCE CBA r_vr_softkeys_options_exit_select
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+		CBA_BUTTON { id = EAknCmdExit; txt = text_softkey_exit;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}	
+	
+// A CBA resource for disabling CBA use. The texts are shown but LSK and RSK
+// cause no operation.
+RESOURCE CBA r_vr_softkeys_options_exit_select_no_command
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = ECmdNOP; txt = text_softkey_option; },
+		CBA_BUTTON { id = ECmdNOP; txt = text_softkey_exit;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_select;}
+		};
+	}	
+		
+// A new CBA resource for settings dialog	
+RESOURCE CBA r_vr_softkeys_options_back_change
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+		CBA_BUTTON { id = EAknCmdExit; txt = text_softkey_back;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_change;}
+		};
+	}
+	
+// A new CBA resource for General Settings dialog	
+RESOURCE CBA r_vr_softkeys_gs_options_back_change
+	{
+	buttons = 
+		{
+		CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+		CBA_BUTTON { id = ECmdCancel; txt = text_softkey_back;},
+		CBA_BUTTON { id = ECmdMSK; txt = qtn_msk_change;}
+		};
+	}		
+			
+// Resources for General Settings plugin
+
+//----------------------------------------------------
+//   
+//    r_vorec_gs_setting_list_view
+//    Main settings view
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_vorec_gs_setting_list_view
+    {
+    menubar = r_vorec_gs_settings_menubar;
+    cba = r_vr_softkeys_gs_options_back_change;    
+    }
+
+//----------------------------------------------------
+//   
+//    r_vorec_gs_settings_title_name
+//    Title name used as name of plugin
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_vorec_gs_settings_title
+    {
+    buf = qtn_vorec_app_title;
+    }
+
+//----------------------------------------------------
+//   
+//    r_vorec_gs_view_title
+//    Setting view's title.
+//
+//----------------------------------------------------
+//
+RESOURCE TITLE_PANE r_vorec_gs_view_title
+    {
+    txt = qtn_vorec_app_title;
+    }    
+
+//----------------------------------------------------
+//   
+//    r_vorec_gs_settings_menupane
+//    GS Plugin options menu, EEikCmdExit replaced with
+//    ECmdOk to ensure that we can save the settings
+//
+//----------------------------------------------------
+//    
+RESOURCE MENU_PANE r_vorec_gs_settings_menupane
+	{
+	items=
+		{
+		MENU_ITEM { command = ECmdChange;		txt = qtn_vorec_settings_change; flags = EEikMenuItemAction ; },
+		MENU_ITEM { command = EAknCmdHelp; 		txt = qtn_options_help; },
+		MENU_ITEM { command = ECmdOk; 		txt = qtn_options_exit; }
+		};
+	}
+
+RESOURCE MENU_BAR r_vorec_gs_settings_menubar
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane = r_vorec_gs_settings_menupane; }
+		};
+	}
+
+// ---------------------------------------------------------
+//
+//    r_vorec_memory_selection_dialog
+//    Memory selection dialog, setting page resource
+//
+// ---------------------------------------------------------
+//
+RESOURCE MEMORYSELECTIONDIALOG r_vorec_memory_selection_dialog
+    {
+    title = qtn_vorec_set_store;
+    softkey_1 = text_softkey_ok;
+    softkey_2 = text_softkey_cancel;
+
+    locations =
+        {
+        LOCATION
+            { 
+            root_path = text_phone_memory_root_path;
+            default_folder = text_digital_sounds_path;
+            },
+        LOCATION 
+            { 
+            root_path = text_memory_card_root_path;
+            }
+        };
+    }
+
+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;
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/data/1020729D.rss	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 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: 
+*        ECOM plugin resource file for GS VoiceRecorder plugin.
+*
+*
+*/
+
+#include <ecom/registryinfo.rh>
+
+/**
+* How to use the resource definition:
+*
+* IMPLEMENTATION_INFO
+*	{
+*	implementation_uid  = <Your implementation UID here>;
+*	version_no          = 1;
+*	display_name        = "<Your plugin name here (just for debugging)>";
+*	default_data        = "<One of the below UIDs your plugin will be part of>";
+*	opaque_data         = "<Position of your plugin in the parent listbox>";
+*	}
+*
+* For example plugins wishing to use Apps Plugin as a parent use 
+* KGSAppsPluginUid (defined in GSFWViewUIDs.h):
+*
+*    default_data = "0x10207239";
+*
+* Note that position of the plugin is supported only for internally provided
+* plugins. Others, such as 3rd party plugins, are sorted according to their
+* name and plugin provider category.
+*
+* Plugin position must follow the postition defined in UI specification.
+* Position starts from 0. Use -1 if position is not to be used in sorting.
+*
+*/
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid     = 0x1020729D; // Plugin dll UID 
+	interfaces  = 
+		{
+		INTERFACE_INFO
+			{
+			interface_uid   = 0x10207236; // UID for CGSPluginInterface - do not change.
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid  = 0x1020729D; // Plugin UID 
+					version_no          = 1;
+					display_name        = "Voice Recorder settings"; // Plugin debug name
+					default_data        = "0x10207239"; // Parent UID
+					opaque_data         = "90"; // Order number 
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/group/GSVoiceRecorderPlugin.mmp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 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 is project specification file for GS VoiceRecorder Plugin .
+*
+*/
+
+
+#include <data_caging_paths.hrh>    
+#include <platform_paths.hrh>
+
+CAPABILITY          CAP_ECOM_PLUGIN
+TARGET              GSVoiceRecorderPlugin.dll
+TARGETTYPE          PLUGIN
+UID                 0x10009D8D 0x1020729D
+VENDORID            VID_DEFAULT
+
+SOURCEPATH          ../src
+SOURCE              VRGSPluginImplementationTable.cpp
+SOURCE              CVRGSPlugin.cpp      
+SOURCE              CVRGSPluginContainer.cpp      
+
+USERINCLUDE         ../inc
+USERINCLUDE         ../data
+USERINCLUDE         ../../group
+USERINCLUDE         ../../UtilsInc
+USERINCLUDE	        ../../../inc   // ADo level inc dir
+
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH          ../data
+
+// ECOM resource definition
+START RESOURCE      1020729D.rss 
+TARGET              GSVoiceRecorderPlugin.rsc 
+END // ECOM resource definition
+
+LANG                SC
+LIBRARY             euser.lib
+LIBRARY             GSEcomPlugin.lib
+LIBRARY             GSFramework.lib
+LIBRARY             GSListBox.lib         // For CGSListBoxItemTextArray
+LIBRARY             cone.lib 
+LIBRARY             commonengine.lib//For RConeResourceLoader
+LIBRARY             commondialogs.lib  // CAknMemorySelectionDialog
+LIBRARY             egul.lib
+LIBRARY             eikcore.lib 
+LIBRARY             eikctl.lib 
+LIBRARY             eikcoctl.lib
+LIBRARY             efsrv.lib
+LIBRARY             bafl.lib 
+LIBRARY             FeatMgr.lib           // Feature manager 
+LIBRARY             avkon.lib
+LIBRARY             aknskins.lib // AknsUtils.h
+LIBRARY             hlplch.lib            // for "Help" options menu
+LIBRARY             VoiceRecorderUtils.lib
+
+#ifdef RD_MULTIPLE_DRIVE
+LIBRARY     PlatformEnv.lib
+#endif
+
+//  - used only by Codewarrior for convenience.
+DOCUMENT            1020729D.rss
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 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 file provides the information required for building 
+*                VoiceRecorderGSPlugin
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+GSVoiceRecorderPlugin.mmp
+
+
+PRJ_TESTMMPFILES
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/inc/CVRGSPlugin.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2005 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:	Main settings view class.
+*
+*/
+
+
+#ifndef GS_VOICERECORDERGSPLUGIN_H
+#define GS_VOICERECORDERGSPLUGIN_H
+
+// Includes
+#include <aknview.h>
+#include <eikclb.h>
+#include <ConeResLoader.h>
+#include <gsplugininterface.h>
+#include <gsbaseview.h>
+
+
+// Classes referenced
+class CVRGSPluginContainer;
+class CAknViewAppUi;
+class CGSBaseView;
+
+// Constants
+
+/** 
+* UPDATE THIS:
+*
+* This UID is used for both the view UID and the ECOM plugin implementation 
+* UID.
+*/
+const TUid KGSVoiceRecorderGSPluginUid = { 0x1020729D };
+
+// CLASS DECLARATION
+
+/**
+*  CVRGSPlugin view class.
+*
+* This is an VoiceRecorderGS of the minimal GS plugin.CGSPluginInterface
+*/
+class CVRGSPlugin : public CGSBaseView
+    {
+    
+    public: // Constructors and destructor
+        
+        /**
+        * Symbian OS two-phased constructor
+        * @return 
+        * @since 3.1
+        */
+        static CVRGSPlugin* NewL( TAny* aInitParams );
+            
+        /**
+        * Destructor.
+        */
+        ~CVRGSPlugin();       
+        
+
+    public: // Functions from base classes
+        
+        /**
+        * From CAknView, returns the views id.
+        * @return Returns id of the view.
+        * @since 3.1
+        */       
+        TUid Id() const;
+        
+         /**
+        * From MEikCommandObserver, handles the menu based commands.
+        * @param aCommand identifies the given command.
+        * @since 3.1
+        */
+        void HandleCommandL( TInt aCommand );
+        
+        /**
+        * Updates specific value to container 
+        * @param aListItem item index to update
+        * @param aNewValue new value for the setting
+        * @since 3.1
+        */
+        void UpdateListBoxL( const TInt& aListItem, TInt aNewValue );
+        
+     public: // From CGSPluginInterface 
+     
+        /**
+        * Method for getting caption of this plugin. This should be the
+        * localized name of the settings view to be shown in parent view.
+        * @param aCaption pointer to Caption variable
+        * @since 3.1
+        */
+        void GetCaptionL( TDes& aCaption ) const;
+        
+        /**
+        * Creates a new icon of desired type. Override this to provide custom
+        * icons. Othervise default icon is used. Ownership of the created icon
+        * is transferred to the caller.
+        *
+        * Icon type UIDs (use these defined constants):
+        * KGSIconTypeLbxItem  -   ListBox item icon.
+        * KGSIconTypeTab      -   Tab icon.
+        *
+        * @param aIconType UID Icon type UID of the icon to be created.
+        * @return Pointer of the icon. NOTE: Ownership of this icon is
+        *         transferred to the caller.
+        * @since 3.1
+        */
+        CGulIcon* CreateIconL( const TUid aIconType );
+        
+        /**
+        * Method for checking, if plugin should be visible and used in GS FW.
+        * (for example shown in listbox of the parent view).
+        *
+        * On default plugin is visible. Overwrite this function to enable or
+        * disable your plugin dynamically.
+        *
+        * @return ETrue if plugin should be visible in GS.
+        * @return EFalse if plugin should not be visible in GS.
+        * @since 3.1
+        */
+        TBool Visible() const;
+        
+        /**
+        * Reserved for future use/plugin's custom functionality. This can be
+        * overwritten if plugin needs to have custom functionality which cannot
+        * be fulfilled otherwise.
+        * @since 3.1
+        */
+        TAny* CustomOperationL( TAny* aParam1, TAny* aParam2 );
+        
+        /**
+        * From CEikAppUi
+        * Handle skin change event.
+        * @since 3.1
+        */
+        void HandleClientRectChange();
+        
+        /**
+        * From CAknView Activate this view
+        * @param aPrevViewId 
+        * @param aCustomMessageId 
+        * @param aCustomMessage 
+        * @since 3.1
+        */
+        void DoActivateL( const TVwsViewId& aPrevViewId,
+                          TUid aCustomMessageId,
+                          const TDesC8& aCustomMessage );
+                          
+        /**
+        * From CAknView Deactivate this view
+        * @since 3.1
+        */
+        void DoDeactivate();
+        
+        /**
+        * Get VoiceRecorderGSPlugin's container.
+        * @since 3.1
+        */
+        CVRGSPluginContainer* Container();
+        
+    protected:
+
+        /**
+        * C++ default constructor.
+        */
+        CVRGSPlugin();
+
+        /**
+        * Symbian OS default constructor.
+        */
+        void ConstructL();
+        
+        /**
+        * Handles OK key press.
+        * @since 3.1
+        */
+        void HandleListBoxSelectionL();
+        
+        /**
+        * Creates new container.
+        * @since 3.1
+        */
+        void NewContainerL();
+ 
+        void CVRGSPlugin::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+        
+    protected: //Data        
+       
+        RConeResourceLoader iResourceLoader;
+        
+        // Buffered caption of the plugin. Owned
+        HBufC* iCaption; 
+        
+    private:
+    };
+
+#endif // GS_VoiceRecorderGSPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/inc/CVRGSPluginContainer.h	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 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 sub-menu in General Settings.
+*
+*/
+
+
+#ifndef VOICERECORDERGSPLUGINCONTAINER_H
+#define VOICERECORDERGSPLUGINCONTAINER_H
+
+// INCLUDES
+#include "voicerecorder.hrh"
+
+// System includes
+#include <gsbasecontainer.h>
+#include <CAknMemorySelectionDialog.h>
+
+// FORWARD DECLARATIONS
+class CAknSettingItemArray;
+
+// CLASS DECLARATION
+/**
+*  CVRGSPluginContainer class 
+*/
+class CVRGSPluginContainer  : public CGSBaseContainer
+    {
+    public: // Constructors and destructor
+    
+        /**
+        * Default C++ constructor
+        */
+        CVRGSPluginContainer();
+                
+        /**
+        * Symbian OS default constructor.
+        *
+        * @param aRect gives the correct TRect for construction.
+        */
+        void ConstructL( const TRect& aRect );
+
+        /**
+        * Destructor.
+        */
+        ~CVRGSPluginContainer();
+
+    public:
+
+        /**
+        * Updates list box
+        *
+        * @param aFeatureId is a updated list box item
+        */
+        virtual void UpdateListBoxL( TInt aFeatureId );
+
+        /**
+        * Creates list box
+        *
+        * @param aResLbxId is resource number to create.
+        */  
+        void ConstructListBoxL( TInt aResLbxId );
+
+        /**
+        * Retrieves the currently selected listbox feature id
+        * @return feature id.
+        * @since 3.1
+        */
+        TInt CurrentFeatureId() const;
+        
+        /**
+        * From CCoeControl changes the size of the list box
+        */
+        void SizeChanged();
+        
+        /**
+        * Handle listbox selection event
+        * @param aCommand Command id to tell origin of event
+        */
+        void HandleListBoxSelectionL( TInt aCommand );      
+        
+        /**
+        * Store all values from setting items to permanent storage
+        */
+        void StoreAllL();
+        
+    protected: //new
+
+        /**
+        * Creates list box items
+        */  
+        virtual void CreateListBoxItemsL();
+        
+        /**
+        * Required for help.
+        */
+        void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+        
+    private:
+		/**
+		* Array of setting items contained in the listbox. Owned.
+		*/
+		CAknSettingItemArray* iSettingItemArray;        
+
+        /**
+        * Selected memo quality
+        */		
+		TVRQuality iQuality;	
+		
+		/**
+		* Selected memo store
+		*/
+		CAknMemorySelectionDialog::TMemory iMemoStore;
+
+		/**
+		* Selected memo store
+		*/		
+		TDriveNumber iDrive;
+
+    };
+
+#endif // VOICERECORDERGSPLUGINCONTAINER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/src/CVRGSPlugin.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,373 @@
+/*
+* Copyright (c) 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:  Main settings view class
+*
+*/
+
+
+// INCLUDE FILES
+#include "CVRGSPlugin.h"
+#include "CVRGSPluginContainer.h"
+
+#include "VRConsts.h"
+#include <voicerecorder.rsg>
+#include "voicerecorder.hrh"
+
+#include "VRUtils.h"
+
+#include <f32file.h> // For icon generation
+#include <gsvoicerecorderplugin.mbg> // For icon generation
+
+#include <data_caging_path_literals.hrh>
+#include <avkon.hrh>
+#include <aknViewAppUi.h>
+#include <akntitle.h>  // CAknTitlePane
+#include <featmgr.h>
+#include <StringLoader.h>     //for StringLoader
+#include <gsfwviewuids.h>     //for KGSMainViewUid
+#include <hlplch.h>             // For HlpLauncher
+#include <bautils.h>            // for BaflUtils
+#include <AknQueryDialog.h>
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::CVRGSPlugin
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CVRGSPlugin::CVRGSPlugin()
+    : iResourceLoader( *iCoeEnv  )
+    {
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::NewLC
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CVRGSPlugin* CVRGSPlugin::NewL( TAny* /*aInitParams*/ )
+    {
+    CVRGSPlugin* self = new(ELeave) CVRGSPlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::ConstructL
+// Symbian OS 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::ConstructL()
+    {
+#ifdef _DEBUG    
+    RDebug::Print(_L("[CVRGSPlugin] ConstructL()" ));
+    RDebug::Print( _L( "[CVRGSPlugin] Loading resource from :" ) );
+    RDebug::Print( KVRAppResourceFile );
+#endif
+    
+     // Find the resource file
+    TParse parse;
+    parse.Set( KVRAppResourceFile,    
+               &KDC_APP_RESOURCE_DIR, 
+               NULL );
+    TFileName fileName( parse.FullName() );
+    
+    // Get language of resource file
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+
+    // Open resource file
+    iResourceLoader.OpenL( fileName );    
+    FeatureManager::InitializeLibL();
+    
+    BaseConstructL( R_VOREC_GS_SETTING_LIST_VIEW );
+    
+    iCaption = StringLoader::LoadL( R_VOREC_GS_SETTINGS_TITLE );
+    }
+
+
+// Destructor
+CVRGSPlugin::~CVRGSPlugin()
+    {
+    FeatureManager::UnInitializeLib();
+
+    if( iContainer )
+        {
+        if ( iAppUi )
+            {
+            iAppUi->RemoveFromViewStack( *this, iContainer );
+            }
+        delete iContainer;
+        iContainer=NULL;
+        }  
+        
+    iResourceLoader.Close(); 
+    
+    delete iCaption; 
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::Id
+// Return UID of view
+// ---------------------------------------------------------------------------
+//
+TUid CVRGSPlugin::Id() const
+    {
+    return KGSVoiceRecorderGSPluginUid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::HandleCommandL
+// Handle commands
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::HandleCommandL( TInt aCommand )
+    {
+   
+    switch ( aCommand )
+        {
+        case ECmdChange:
+        case EAknCmdOpen:
+            // Delegate to container
+            Container()->HandleListBoxSelectionL( EAknCmdOpen );
+            break;
+        case ECmdMSK:
+        	// Delegate to container
+        	// Selection view is not open when command is ECmdMSK
+            Container()->HandleListBoxSelectionL( ECmdMSK );
+        	break;          
+        case EAknSoftkeyBack:
+        case ECmdCancel:   
+            // Activate previous view
+#ifdef _DEBUG                
+    RDebug::Print(_L("VRGS: activating view 0x%x"), iPrevViewId.iViewUid.iUid);                            
+#endif
+            iAppUi->ActivateLocalViewL( iPrevViewId.iViewUid );
+            break; 
+        case EAknCmdHelp:
+            if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+                {
+                HlpLauncher::LaunchHelpApplicationL(
+                    iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
+                }
+            break;           
+        case ECmdOk: // Exit selected from options menu
+            {
+            iAppUi->HandleCommandL( EEikCmdExit ); 
+            break;
+            }
+        default:
+            iAppUi->HandleCommandL( aCommand );
+            break;
+        } 
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::DoActivate
+// Activate this view
+// ---------------------------------------------------------------------------
+//
+    
+void CVRGSPlugin::DoActivateL( const TVwsViewId& aPrevViewId,
+                                  TUid aCustomMessageId,
+                                  const TDesC8& aCustomMessage )
+    {       
+    CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::DoDeactivate
+// Deactivate this view
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::DoDeactivate()
+    {
+    CGSBaseView::DoDeactivate();
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CVRGSPlugin::HandleClientRectChange
+// Handle screen size change.
+// -----------------------------------------------------------------------------
+//
+void CVRGSPlugin::HandleClientRectChange()
+    {
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        } 
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::Container
+// Return handle to container class.
+// ---------------------------------------------------------------------------
+//
+CVRGSPluginContainer* CVRGSPlugin::Container()
+    {
+    return static_cast<CVRGSPluginContainer*>( iContainer );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::HandleListBoxSelectionL
+// Handle any user actions while in the list view.
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::HandleListBoxSelectionL() 
+    {
+    // Delegate to container
+    Container()->HandleListBoxSelectionL( ECmdChange );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::GetCaptionL
+// Caption text for view to be displayed in NaviPane.
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::GetCaptionL( TDes& aCaption ) const
+    {
+    aCaption.Copy( *iCaption );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::NewContainerL
+// Creates new iContainer.
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::NewContainerL()
+    {
+    iContainer = new( ELeave ) CVRGSPluginContainer;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::CreateIconL
+// Return the icon, if has one.
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CVRGSPlugin::CreateIconL( const TUid /*aIconType*/ )
+    {
+
+	// New implementation
+	TParse* fp = new(ELeave) TParse();
+    CleanupStack::PushL( fp );
+    TInt err = fp->Set( KVRPluginFile, &KDC_APP_BITMAP_DIR, NULL ); 
+
+    if ( err != KErrNone )
+        { 
+        User::Leave( err );
+        }
+
+    TBuf<KMaxFileName> fileName = fp->FullName();
+    CleanupStack::PopAndDestroy();  //fp
+
+    CGulIcon* icon;
+    
+    icon = AknsUtils::CreateGulIconL(
+        AknsUtils::SkinInstance(), 
+        KAknsIIDQgnPropSetAppsVoirec,
+        fileName,
+        EMbmGsvoicerecorderpluginQgn_prop_set_apps_voirec,
+		EMbmGsvoicerecorderpluginQgn_prop_set_apps_voirec_mask );
+    
+    return icon;
+
+    }
+    
+   
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::Visible()
+// Method for checking, if plugin should be visible and used in GS.
+// ---------------------------------------------------------------------------
+//    
+TBool CVRGSPlugin::Visible() const
+    {
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) ||
+         FeatureManager::FeatureSupported( KFeatureIdMmc ) )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CVRGSPlugin::CustomOperationL()
+// Reserved for later use.
+// ---------------------------------------------------------------------------
+//        
+TAny* CVRGSPlugin::CustomOperationL( TAny* aParam1, TAny* /*aParam2*/ )
+    {
+    return aParam1;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRSettingsDialog::DynInitMenuPaneL
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRGSPlugin::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+	{
+
+	switch ( aResourceId )
+		{
+		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; 
+			}
+		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; 
+			}
+
+
+		default:
+			{
+			break;
+			}
+		}
+	}   
+
+// End of file
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/src/CVRGSPluginContainer.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 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 sub-menu in General Settings.
+*
+*/
+
+
+// INCLUDES
+#include "CVRGSPluginContainer.h"
+#include "CVRGSPlugin.h"
+
+#include <voicerecorder.rsg>
+#include <VoiceRecorderUID.h>
+
+#include "VRConsts.h"
+#include "VRUtils.h"
+#include <csxhelp/vorec.hlp.hrh>
+
+
+#include <aknlists.h>               //for CAknSettingStyleListBox
+#include <aknsettingitemlist.h>
+#include <CAknMemorySelectionSettingItem.h>
+#include <aknnotewrappers.h> // for CAknInformationNote
+//#include <GSCamcorderPlugin.mbg>
+#include <gslistbox.h>              //for listbox clases
+#include <AknIconArray.h>   // CAknIconArray
+#include <eikclbd.h>        // CColumnListBoxData
+
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#include <CAknMemorySelectionSettingItemMultiDrive.h>
+#include <AknCommonDialogsDynMem.h>
+#endif
+
+const TUid KVRAppUID = { KVoiceRecorderAppUID3 };
+
+// ListBox item index
+enum TListItemIndex
+    {
+    EListItemQualityIndex = 0,
+    ElistItemMemoStoreIndex,
+    };
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::ConstructL
+// Symbian OS default constructor
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::ConstructL( const TRect& aRect )
+    {
+    // Construct iListBox
+    iListBox = new ( ELeave ) CAknSettingStyleListBox;      
+    iSettingItemArray = new(ELeave) CAknSettingItemArray(2,0,0);
+
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+	    iQuality = VRUtils::QualityL();
+        }
+
+	// Convert the internal memory enumeration to CFD enumeration
+#ifndef RD_MULTIPLE_DRIVE 
+	if ( VRUtils::MemoStoreL() == EMemoStorePhoneMemory )
+		{
+		iMemoStore = CAknMemorySelectionSettingPage::EPhoneMemory;
+		}
+	else
+		{
+		iMemoStore = CAknMemorySelectionSettingPage::EMemoryCard;
+		}    
+#else
+    iDrive = (TDriveNumber)VRUtils::MemoDriveL();
+
+#endif
+
+    BaseConstructL( aRect, R_VOREC_GS_VIEW_TITLE, 0 );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::~CGSTelPluginContainer
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVRGSPluginContainer::~CVRGSPluginContainer()
+    {
+    if ( iSettingItemArray )
+        {
+        iSettingItemArray->ResetAndDestroy();
+        }
+    
+    delete iSettingItemArray;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::CGSTelPluginContainer
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CVRGSPluginContainer::CVRGSPluginContainer()
+    : iQuality( EQualityMMSOptimized ),
+      iMemoStore( CAknMemorySelectionSettingPage::EPhoneMemory )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::UpdateListBoxL
+// Update listbox item
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::UpdateListBoxL( TInt /*aFeatureId*/ )
+    {
+    
+    // Update the listbox
+    iListBox->HandleItemAdditionL();
+    }
+
+    
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::ConstructListBoxL
+// Update listbox item
+// Items are added manually, instead of loading them from resources
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::ConstructListBoxL( TInt /*aResLbxId*/ )
+    {
+    iListBox->ConstructL( this, EAknListBoxSelectionList );
+
+    // Create items to array
+    CreateListBoxItemsL(); 
+
+    // Set array to listbox
+	CTextListBoxModel* model = iListBox->Model();
+	model->SetItemTextArray( iSettingItemArray );
+	// Ownership retained by us
+	model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+	iSettingItemArray->RecalculateVisibleIndicesL();
+	iListBox->CreateScrollBarFrameL( ETrue );
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+						CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+	iListBox->HandleItemAdditionL();
+	iListBox->UpdateScrollBarsL();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::CreateListBoxItemsL
+// Update listbox item
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::CreateListBoxItemsL()
+    {
+    CAknSettingItem* settingItem;
+    HBufC* itemTitle;
+
+	// Add quality setting
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+ 
+    	// Add quality setting
+#ifdef  __AAC_ENCODER_PLUGIN    	
+    	settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem ( 0, ( TInt& ) iQuality );
+
+#else
+        settingItem = new( ELeave ) CAknBinaryPopupSettingItem ( 0, ( TInt& ) iQuality );
+#endif
+    	CleanupStack::PushL( settingItem );
+
+    	itemTitle = iCoeEnv->AllocReadResourceLC( R_QTN_VOREC_SET_QUALITY );
+    	settingItem->ConstructL( EFalse, EListItemQualityIndex, *itemTitle, NULL,
+    	                     R_VR_SETTINGS_DEFAULT_SPEAKER_PAGE, 
+    	                     EAknCtPopupField, NULL,
+    						 R_VR_SETTINGS_QUALITY_TEXTS );
+    	
+    	CleanupStack::PopAndDestroy();		// itemTitle
+
+    	// Add quality item to the settings array
+    	iSettingItemArray->AppendL( settingItem );
+      	CleanupStack::Pop();	// settingItem        
+        }
+      if ( VRUtils::MultipleMassStorageAvailable() )
+        {
+    // Add memo store setting
+	// Create the memo store item
+#ifndef RD_MULTIPLE_DRIVE	
+	settingItem =
+				new( ELeave ) CAknMemorySelectionSettingItem( 0, iMemoStore );
+   //multiple drives
+#else
+    settingItem =
+                new( ELeave ) CAknMemorySelectionSettingItemMultiDrive(0, iDrive );
+       TInt includedMedias = AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage |
+                          AknCommonDialogsDynMem::EMemoryTypeMMCExternal;
+       static_cast< CAknMemorySelectionSettingItemMultiDrive *> ( settingItem )->SetIncludedMediasL( includedMedias );
+#endif
+
+	CleanupStack::PushL( settingItem );
+
+	itemTitle = iCoeEnv->AllocReadResourceLC( R_QTN_VOREC_SET_STORE );
+
+#ifndef RD_MULTIPLE_DRIVE
+	// Set memo store item's title
+	settingItem->ConstructL( EFalse, id, *itemTitle, NULL,
+	    R_VOREC_MEMORY_SELECTION_DIALOG, EAknCtPopupSettingList );
+#else
+        settingItem->ConstructL( EFalse, ElistItemMemoStoreIndex, *itemTitle, NULL, 0, EAknCtPopupSettingList );
+#endif
+	    
+	CleanupStack::PopAndDestroy();	// itemTitle
+
+        // Add memo store item to the settings array
+        iSettingItemArray->AppendL( settingItem );
+        CleanupStack::Pop();	// settingItem
+    	}
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::CurrentFeatureId
+// Get the currently selected feature
+// ---------------------------------------------------------------------------
+//
+TInt CVRGSPluginContainer::CurrentFeatureId() const
+    {
+    if ( iSettingItemArray )
+        {
+        return iSettingItemArray->MdcaCount();
+        }
+    else
+        {
+        return 0;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::GetHelpContext
+// Get help for this view
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KVRAppUID; 
+    aContext.iContext = KVOREC_HLP_SETTINGS;    
+    }
+  
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::SizeChanged
+// Set the size and position of component controls.
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::SizeChanged()
+    {
+    if ( iListBox )
+        {
+        iListBox->SetRect( Rect() );
+        }
+    }
+  
+void CVRGSPluginContainer::HandleListBoxSelectionL( TInt aCommand ) 
+    {
+	TInt index( iListBox->CurrentItemIndex() );
+	TInt driveDefaultMassStorage = VRUtils::DefaultMemoDriveL();
+	TInt driveRemovableMassStorage = VRUtils::GetRemovableMassStorageL();
+	
+	if ( index >=0 )	// index is -1 if there are no items in the list
+		{
+        if(index == ElistItemMemoStoreIndex &&
+		        !VRUtils::DriveValid(driveDefaultMassStorage) && 
+		            !VRUtils::DriveValid(driveRemovableMassStorage) )
+            {
+            return;
+            }
+		// Open edit dialog if EAknCmdOpen, invert the value otherwise
+		iSettingItemArray->At( index )->EditItemL( aCommand == EAknCmdOpen );
+		iListBox->DrawItem( index );
+		//Store all settings after change
+		StoreAllL();
+		}
+    }  
+
+// ---------------------------------------------------------------------------
+// CVRGSPluginContainer::StoreAll
+// Stores values in settings list to permanent storage
+// ---------------------------------------------------------------------------
+//
+void CVRGSPluginContainer::StoreAllL()
+    {
+    // Retrieve values to member variables
+	TInt settingItemCount( iSettingItemArray->Count() );
+
+	for ( TInt i( 0 ); i < settingItemCount; i++ )
+		{
+		iSettingItemArray->At( i )->StoreL();
+		}
+
+    // Save memo store setting
+#ifndef RD_MULTIPLE_DRIVE    
+	if ( iMemoStore == CAknMemorySelectionSettingPage::EPhoneMemory )
+		{
+		VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+		}
+	else
+		{
+		// check if MMC is read-only
+		TVRDriveInfo mmcInfo;
+		VRUtils::GetMMCInfo( mmcInfo );
+
+		if ( mmcInfo.iDriveReadOnly )
+			{
+			HBufC* noteText = iCoeEnv->AllocReadResourceLC(
+													 R_QTN_MEMC_READONLY );
+			CAknInformationNote* infoNote =
+								new( ELeave ) CAknInformationNote( ETrue );
+			infoNote->ExecuteLD( *noteText );
+			CleanupStack::PopAndDestroy();	// noteText
+			VRUtils::SetMemoStoreL( EMemoStorePhoneMemory );
+			}
+		else
+			{
+			VRUtils::SetMemoStoreL( EMemoStoreMMC );
+			}
+		}
+#else
+     TUint status( 0 );
+	 TInt defaultDrive = VRUtils::DefaultMemoDriveL();
+	 if (VRUtils::MemoDriveL() != defaultDrive)
+	 	{
+ 	    VRUtils::GetDriveInfo(iDrive, status);
+     	// check if drive status is ok 
+	 	if ( status & DriveInfo::EDriveReadOnly )
+			{
+			HBufC* noteText = iCoeEnv->AllocReadResourceLC(R_QTN_MEMC_READONLY );
+			CAknInformationNote* infoNote =	new( ELeave ) CAknInformationNote( ETrue );
+			infoNote->ExecuteLD( *noteText );
+			CleanupStack::PopAndDestroy();	// noteText
+        
+        	// use default device drive to save files
+        	iDrive = (TDriveNumber)defaultDrive;
+  			}
+	 	}
+    if(iDrive == defaultDrive || iDrive == VRUtils::GetRemovableMassStorageL())
+        {
+        VRUtils::SetMemoDriveL( iDrive );
+        }
+#endif 
+
+    // Save quality setting
+    if ( VRUtils::FeatureEnabled( EVRFeatureShowQualitySetting ) )
+        {
+        // Save the quality setting	
+	    VRUtils::SetQualityL( iQuality );
+        }
+        
+    }
+  
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/gsplugin/src/VRGSPluginImplementationTable.cpp	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 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: 
+*        ECOM proxy table for this plugin
+*
+*/
+
+
+// System includes
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+// User includes
+#include "CVRGSPlugin.h"
+
+// Constants
+const TImplementationProxy KVoiceRecorderGSPluginImplementationTable[] = 
+	{
+	// UPDATE THIS - Uid for plugin implementation:
+	IMPLEMENTATION_PROXY_ENTRY( 0x1020729D,	CVRGSPlugin::NewL )
+	};
+
+
+// ---------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Gate/factory function
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(KVoiceRecorderGSPluginImplementationTable) 
+        / sizeof(TImplementationProxy);
+	return KVoiceRecorderGSPluginImplementationTable; 
+	}
+
Binary file voicerecorder/help/data/xhtml.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/help/group/bld.inf	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+* 
+* Contributors:
+* 
+* 
+* Description:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>				
+PRJ_EXPORTS
+:zip ../data/xhtml.zip   /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip   /epoc32/winscw/c/resource/ overwrite
+
+../inc/vorec.hlp.hrh	MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/vorec.hlp.hrh)
+../rom/voicerechelps_variant.iby		CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(voicerechelps_variant.iby)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/help/inc/vorec.hlp.hrh	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+	
+//
+// vorec.hlp.hrh generated by CSXHelp Utilities.
+//           
+
+#ifndef __VOREC_HLP_HRH__
+#define __VOREC_HLP_HRH__
+
+_LIT(KVOREC_HLP_EMPTY_RECORDER, "VOREC_HLP_EMPTY_RECORDER"); // 
+_LIT(KVOREC_HLP_MAIN, "VOREC_HLP_MAIN"); // 
+_LIT(KVOREC_HLP_SETTINGS, "VOREC_HLP_SETTINGS"); // 
+
+#endif 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/help/rom/voicerechelps_variant.iby	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+* 
+* Contributors:
+* 
+* 
+* Description:
+* Export resource files for S60 Voice Recorder helps.
+*
+*/
+
+#ifndef __VOICERECHELPS_VARIANT_IBY__
+#define __VOICERECHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058CA\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x100058CA\contents.zip)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058CA\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x100058CA\index.xml)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058CA\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x100058CA\keywords.xml)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058CA\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x100058CA\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/loc/voicerecorder.loc	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2002 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 is a localisation file for VoiceRecorder.app
+*     A .loc file is the one and only place where the logical strings
+*     to be localised are defined. 
+*     
+*
+*/
+
+
+//  LOCALISATION STRINGS
+
+// d: Application title from list. 
+// l: list_single_large_graphic_pane_t1
+// w:
+// r: 3.0
+#define	qtn_vorec_app_title			"Recorder"
+
+// d: Application title from grid. 
+// l: cell_app_pane_t1
+#define	qtn_vorec_app_menu_grid			"Recorder"
+
+// d: Default file name created by VoiceRec application.
+// d: The first memo will be assigned with this name.
+// d: The maximum length for the name is 20 characters 
+// d: The filename extension (.amr) is NOT included in the translation.
+// l: vorec_t1
+// w:
+// r: 1.0
+#define qtn_vorec_first_memo_name		"Sound clip"
+
+// d: Default file name created by VoiceRec application.
+// d: Memos after the first memo will be assigned with this name
+// d: The maximum name length is specified as 20 characters, but the
+// d: number formatting must be taken into account ( Memo(105) ).
+// d: The filename extension (.amr) is NOT included in the translation.
+// d: Can be removed after qtn_vorec_default_memo_name has been taken in use
+// l: vorec_t1
+// w:
+// r: 3.1
+#define qtn_vorec_memo_name			"Sound clip(%N)"
+
+//d: A new default file name created by VoiceRec application.
+//d: Replaces qtn_vorec_memo_name.
+//d: Memos after the first memo will be assigned with this name
+//d: The maximum name length is specified as 20 characters, but the
+//d: number formatting must be taken into account (e.g. Memo(105) ).
+//d: The filename extension (.amr) is NOT included in the translation.
+//d: %U is replaced by the running memo count number retrieved from the Central Repository
+//l: vorec_t1
+//w:
+//r: 3.1
+//
+#define qtn_vorec_default_memo_name 	"Sound clip(%U)"
+
+// d: Menu string	
+// d: Close memo and open empty to record option on menu. 
+// l: list_single_pane_t1_cp2
+#define qtn_vorec_rec_new				"Record new"
+
+// d: Menu string	
+// d: Erase current memo menu item. 
+// l: list_single_pane_t1_cp2
+#define qtn_vorec_delete				"Delete"
+
+// d: Menu string
+// d: Change name of current memo option on menu. 
+// l: list_single_pane_t1_cp2
+#define text_voice_rec_edit_title		"Edit name"
+
+// d: Menu string
+// d: Go to File Manager app at location of clips.
+// l: list_single_pane_t1_cp2
+#define qtn_vorec_goto_my_clips			"Go to my clips"
+
+// d: Menu item	
+// d: Save mail attachment. 
+// l: list_single_pane_t1_cp2
+#define qtn_vorec_save_mail_atta		"Save"
+
+// d: Softkey text
+// d: provides the command to record
+// l: control_pane_t1/opt7
+#define qtn_vorec_rec_sk				"Record"
+
+// d: Softkey text
+// d: provides the command to play
+// l: control_pane_t1/opt7
+#define text_softkey_play				"Play"
+
+// d: Softkey text
+// d: provides the command to pause
+// l: control_pane_t1/opt7
+#define qtn_vorec_pause_sk				"Pause"
+
+// d: Softkey text
+// d: Provides the command to stop
+// l: control_pane_t1/opt7
+#define qtn_vorec_stop_sk				"Stop"
+
+//d:Softkey text
+//l:control_pane_t1/opt7
+//w:
+//r:3.2
+//
+#define qtn_vorec_insert_sk 			"Insert"
+
+// d: Information Note
+// d: Shown when recording is stopped while in embedded mode
+// l: popup_note_window
+#define qtn_vorec_info_record_stopped	"Recording stopped"
+
+// d: Information Note
+// d: Shown when trying to use Voice Recorder during a video call
+// l: popup_note_window
+#define qtn_vorec_info_video_call_ongoing	"Voice Recorder cannot be used during video call"
+
+// d: Information Note
+// d: Shown when trying to use Voice Recorder during an internet call
+// l: popup_note_window
+// w:
+// r: 3.0
+#define qtn_vorec_info_internet_call_ongoing	"Voice Recorder cannot be used during an internet call"
+
+// d: Error note text
+// d: Failed to open or play memo. File format error.
+// l: popup_note_window
+#define qtn_vorec_info_memo_unsupported	"Unable to play memo. Memo format not supported."
+
+// d: Error note text
+// d: Failed to open or play memo. File format error.
+// l: popup_note_window
+#define qtn_vorec_info_memo_corrupted	"Unable to play memo. Memo corrupted."
+
+// d: Error note text
+// d: Failed to play or record. Media Server error.
+// l: popup_note_window
+#define qtn_vorec_info_server_error		"Unable to continue. Media server error."
+
+// d: Wait note text
+// d: Shown when voice memo is being saved to permanent storage
+// d: Recording is stopped by user
+// l: popup_note_wait_window
+#define qtn_vorec_wait_saving_memo		"Saving memo..."
+
+// d: Wait note text
+// d: Shown when voice memo is being saved to permanent storage
+// d: Recording is stopped automatically
+// l: popup_note_wait_window
+#define qtn_vorec_wait_stop_saved		"Saving stopped memo..."
+
+// d: Menu string	
+// d: Settings Options submenu item for changing item settings.
+// l: list_single_pane_t1_cp2
+#define qtn_vorec_settings_change		"Change"
+
+// d: Recorder View Status text
+// d: Displayed while recording is in progress
+// l: vorec_t4
+#define qtn_vorec_recording				"Recording"
+
+// d: Recorder View Status text
+// d: Displayed while playback is in progress
+// l: vorec_t4
+// w:
+// r: 3.1
+#define qtn_vorec_playback				"Playing"
+
+// d: Recorder View Status text
+// d: Displayed while playing/recording is paused
+// l: vorec_t4
+#define qtn_vorec_paused				"Paused"
+
+// d: Format string for the memo name
+// d: Memo name is placed in %U
+// l: vorec_t1
+#define qtn_vorec_memo_label			"%U"
+
+// d: Format string for the creation date of the memo
+// d: Date is placed in %0U and time in %1U
+// d: %0U is formatted with R_QTN_DATE_USUAL_WITH_ZERO
+// d: %1U is formatted with R_QTN_TIME_USUAL_WITH_ZERO
+// l: vorec_t2
+// w:
+// r: 3.1
+#define qtn_vorec_date_label			"%0U %1U"
+
+// d: Min/Start value of the memo play/record progress bar
+// d: Always zero.
+// l: vorec_t6
+#define qtn_vorec_min_label				"0"
+
+// d: Format for displaying elapsed time and time left in recording and playback states.
+// d: %0U is elapsed time
+// d: %1U is maximum recording time, estimated time left or length of played memo
+// d: %0U and %1U are formatted with R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO, or
+// d: R_QTN_TIME_DURAT_LONG if the time is longer than one hour
+// l: vorec_t5
+// w:
+// r: 3.1
+#define qtn_vorec_time_indic             "%0U / %1U"
+
+// d: Recorder view quality text
+// l: vorec_t7
+// w:
+// r: 3.1
+#define qtn_vorec_quality_label		"Quality:"
+
+// d: Recorder view quality text for MMS optimized quality
+// l: vorec_t3
+// w:
+// r: 3.1
+#define qtn_vorec_quality_mms_optimized	"MMS"
+
+// d: Recorder view quality text for High quality
+// l: vorec_t3
+// w:
+// r: 3.1
+#define qtn_vorec_quality_high		"High"
+
+// d: Recorder view quality text for Normal quality
+// l: vorec_t7
+// w:
+// r: 3.2
+#define qtn_vorec_quality_normal		"Normal"
+
+// ---------------------------------------------------------------------------
+// Memory store usage specific strings
+
+// d: Information note 
+// d: Shown when VR is started and MMC is selected as default store,
+// d: but MMC is not available or it is locked
+// l: popup_note_window
+// w:
+// r: 1.0
+#define qtn_memc_vorec_note1			"The selected memory store is not accessible. Phone memory will be used instead."
+
+// d: Information note 
+// d: Shown when VR is started and MMC is selected as default store, but MMC is read-only
+// l: popup_note_window
+// w: 
+// r: 3.1
+#define qtn_memc_vorec_note2			"The selected memory store is read-only. Phone memory will be used instead."
+
+// d: Error note
+// d: Shown when user tries to unlock MMC, but enters an incorrect password
+// l: popup_note_window
+#define qtn_memc_set_password_error		"The passwords don't match, try again!"
+
+// d: Setting item title
+// d: Title for Memo Store Setting Item
+// l: list_setting_pane_t1
+#define qtn_vorec_set_store				"Memo store"
+
+// d: Confirmation note
+// d: Shown if when VR is started and MMC is locked
+// 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
+
+// d: Setting item title
+// d: Title for Memo Store Setting Item
+// l: list_setting_pane_t1
+#define qtn_vorec_set_ihf		"Default speaker"
+
+// d: setting_item_with_two_available_ values
+// d: Indicates that the IHF is being selected as default speaker
+// l: list_set_graphic_pane_t1
+#define qtn_vorec_settings_ihf_hf	"Handsfree"
+
+// d: setting_item_with_two_available_ values
+// d: Indicates that the earpiece is being selected as default speaker
+// l: list_set_graphic_pane_t1
+#define qtn_vorec_settings_ihf_ear	"Earpiece"
+
+
+// ---------------------------------------------------------------------------
+// No voice key AND MMC specific strings
+
+// d: Menu string	
+// d: Displays the settings dialog. 
+// l: list_single_pane_t1_cp2
+// w:
+// r: 3.0
+#define qtn_vorec_settings				"Settings"
+
+// ---------------------------------------------------------------------------
+// Quality specific strings
+
+// d: Setting item title
+// d: Title for Recording quality setting item
+// l: list_setting_pane_t1
+// w:
+// r: 3.1
+#define qtn_vorec_set_quality		"Recording quality"
+
+// d: setting_item_with_two_available_ values
+// d: Indicates that memo quality is MMS Optimized
+// l: list_set_graphic_pane_t1
+// w:
+// r: 3.1
+#define qtn_vorec_settings_quality_mms_optimized	"MMS Optimized"
+
+// d: setting_item_with_two_available_ values
+// d: Indicates that memo quality is High quality
+// l: list_set_graphic_pane_t1
+// w:
+// r: 3.1
+#define qtn_vorec_settings_quality_high	"High"
+
+
+// d: setting_item_with_three_available_ values
+// d: Indicates that memo quality is Normal quality
+// l: list_set_graphic_pane_t1
+// w:
+// r: 3.2
+#define qtn_vorec_settings_quality_normal		"Normal"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/rom/Voicerecorder.iby	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2005 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: 
+* Image description file for project Voicerecorder
+*	  
+*
+*/
+
+#ifndef __VOICERECORDER_IBY__
+#define __VOICERECORDER_IBY__
+
+S60_APP_EXE(Voicerecorder)
+S60_APP_AIF_ICONS(Voicerecorder)
+S60_UPGRADABLE_APP_REG_RSC(Voicerecorder)
+
+ECOM_PLUGIN(GSVoiceRecorderPlugin.dll,GSVoiceRecorderPlugin.rsc)
+
+SCALABLE_IMAGE(Resource\apps,APP_BITMAP_DIR,Voicerecorder)
+
+file=ABI_DIR\BUILD_DIR\VoicerecorderUtils.DLL           SHARED_LIB_DIR\VoicerecorderUtils.DLL
+file=ABI_DIR\BUILD_DIR\VoicerecorderRecview.DLL         SHARED_LIB_DIR\VoicerecorderRecview.DLL
+file=ABI_DIR\BUILD_DIR\NewService.DLL       		SHARED_LIB_DIR\NewService.DLL
+
+data=DATAZ_\BITMAP_DIR\GSVoiceRecorderPlugin.mif	BITMAP_DIR\GSVoiceRecorderPlugin.mif
+
+data=ZPRIVATE\100058CA\backup_registration.xml        	private\100058CA\backup_registration.xml
+
+data=ZSYSTEM\Install\VoiceRecorder_stub.SIS   System\install\VoiceRecorder_stub.SIS
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/rom/VoicerecorderResources.iby	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2005 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: 
+* The iby file contains files that must be included in image
+*	  
+*
+*/
+
+#ifndef __VOICERECORDERRESOURCES_IBY__
+#define __VOICERECORDERRESOURCES_IBY__
+
+S60_APP_CAPTION(Voicerecorder)
+
+data=DATAZ_\APP_RESOURCE_DIR\Voicerecorder.rsc                       			  APP_RESOURCE_DIR\Voicerecorder.rsc
+//data=ZSYSTEM\Data\voicerecview.rsc                                    System\Data\voicerecview.rsc
+
+#endif
+
Binary file voicerecorder/sis/101F87A3.cre has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/VoiceRecorder.pkg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,43 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:	Package file for VoiceRecorder.
+;
+; Languages
+&EN
+
+; Packet-header (name, uid, major, minor, build, type)
+#{"Voice Recorder"},(0x10207BB4),1,1,0,TYPE=SA, RU
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
+"\epoc32\release\armv5\urel\VoiceRecorder.exe"	              -"c:\sys\bin\VoiceRecorder.exe"
+"\epoc32\release\armv5\urel\VoiceRecorderUtils.dll"	-"c:\sys\bin\VoiceRecorderUtils.dll"
+"\epoc32\release\armv5\urel\VoiceRecorderRecView.dll"	-"c:\sys\bin\VoiceRecorderRecView.dll"
+"\epoc32\release\armv5\urel\NewService.dll"	-"c:\sys\bin\NewService.dll"
+"\epoc32\release\armv5\urel\GSVoiceRecorderPlugin.dll"	   -"c:\sys\bin\GSVoiceRecorderPlugin.dll"
+
+"\epoc32\data\Z\resource\apps\VoiceRecorder.rsc"		-"c:\resource\apps\VoiceRecorder.rsc"
+"\epoc32\data\Z\private\10003a3f\apps\VoiceRecorder_reg.rsc"		-"c:\private\10003a3f\import\apps\VoiceRecorder_reg.rsc"
+"\epoc32\data\Z\resource\plugins\GSVoiceRecorderPlugin.rsc"           -"c:\resource\plugins\GSVoiceRecorderPlugin.rsc"
+
+"\epoc32\data\Z\resource\apps\voicerecorder.mif"		-"c:\resource\apps\voicerecorder.mif"
+"\epoc32\data\Z\resource\apps\voicerecorder_aif.mif"		-"c:\resource\apps\voicerecorder_aif.mif"
+"\epoc32\data\Z\resource\apps\GSVoiceRecorderPlugin.mif"		-"c:\resource\apps\GSVoiceRecorderPlugin.mif"
+
+; CenRep ini file
+;"\epoc32\data\z\private\10202be9\101F87A3.txt"  -"c:\private\10202BE9\persists\101F87A3.txt"
+"101F87A3.cre" - "c:\private\10202be9\101F87A3.cre"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/VoiceRecorder.xml	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ad:metadata xmlns="http://nokia.com/arrow/repository/ia_component"
+  xmlns:ad="http://nokia.com/arrow/application_metadata">
+  <!-- 
+  The appResources element contains all the language metadata of one IAC. 
+  IAC may have one or more language-specific component names 
+  and descriptions inside appResource element.
+  
+  Language ID 1 should be always defined as this is the default language
+  in case other languages supported by the client cannot be found.
+  -->
+  <appResources>
+    <appResource>
+      <!-- Language ID -->
+      <language>1</language>
+      <!-- Name in given language -->
+      <iacName>S60 VoiceRecorder</iacName>
+      <!-- Description in given language -->
+      <iacDescription>VoiceRecorder</iacDescription>
+    </appResource>
+  </appResources>
+  <!-- Specifies for what versions of what platform this component is for. -->
+  <swPlatformDep>
+    <!-- platform code -->
+    <platform>S60</platform>
+    <versionFrom>
+      <!--
+        platform version number separated in major and minor number (i.e. 
+        3.0 has 3 as major and 0 as minor)
+      -->    
+      <major>5</major>
+      <minor>0</minor>
+      <!--
+        date-element can be used to pinpoint platform version number to even 
+        more specific one. It is not currently used in the system.
+      -->
+      <date>
+        <year>2008</year>
+        <week>46</week>
+      </date>
+    </versionFrom>
+    <!-- the latest platform version this component is for -->
+    <versionTo>
+      <major>5</major>
+      <minor>0</minor>
+      <date>
+        <year>2010</year>
+        <week>1</week>
+      </date>
+    </versionTo>
+  </swPlatformDep>
+  <!-- specifies dependencies to other IACs -->
+ 
+</ad:metadata>
\ No newline at end of file
Binary file voicerecorder/sis/VoiceRecorderCenrep.pkg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/VoiceRecorder_stub.pkg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:	Package file for project VoiceRecorder stub sis.
+;
+;Language
+&EN
+
+;Header
+# {"Voice Recorder"}, (0x10207BB4), 1, 0, 0, TYPE=SA
+
+; Localised Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
Binary file voicerecorder/sis/VoiceRecorder_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/VoiceRecorder_udeb.pkg	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,48 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:	Package file for VoiceRecorder udeb version.
+;
+; Languages
+&EN
+
+; Packet-header (name, uid, major, minor, build, type)
+#{"Voice Recorder"},(0x10207BB4),1,1,0,TYPE=SA, RU
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Vendor"
+
+"\epoc32\release\armv5\udeb\VoiceRecorder.exe"	              -"c:\sys\bin\VoiceRecorder.exe"
+"\epoc32\release\armv5\udeb\VoiceRecorderUtils.dll"	-"c:\sys\bin\VoiceRecorderUtils.dll"
+"\epoc32\release\armv5\udeb\VoiceRecorderRecView.dll"	-"c:\sys\bin\VoiceRecorderRecView.dll"
+"\epoc32\release\armv5\udeb\NewService.dll"	-"c:\sys\bin\NewService.dll"
+"\epoc32\release\armv5\udeb\GSVoiceRecorderPlugin.dll"	   -"c:\sys\bin\GSVoiceRecorderPlugin.dll"
+
+"\epoc32\data\Z\resource\apps\VoiceRecorder.rsc"		-"c:\resource\apps\VoiceRecorder.rsc"
+"\epoc32\data\Z\private\10003a3f\apps\VoiceRecorder_reg.rsc"		-"c:\private\10003a3f\import\apps\VoiceRecorder_reg.rsc"
+"\epoc32\data\Z\resource\plugins\GSVoiceRecorderPlugin.rsc"           -"c:\resource\plugins\GSVoiceRecorderPlugin.rsc"
+
+"\epoc32\data\Z\resource\apps\voicerecorder.mif"		-"c:\resource\apps\voicerecorder.mif"
+"\epoc32\data\Z\resource\apps\voicerecorder_aif.mif"		-"c:\resource\apps\voicerecorder_aif.mif"
+"\epoc32\data\Z\resource\apps\GSVoiceRecorderPlugin.mif"		-"c:\resource\apps\GSVoiceRecorderPlugin.mif"
+
+
+
+
+
+; CenRep ini file
+;"\epoc32\data\z\private\10202be9\101F87A3.txt"  -"c:\private\10202BE9\persists\101F87A3.txt"
+"101F87A3.cre" - "c:\private\10202be9\101F87A3.cre"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/build_cenrep_sisx.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,20 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Bat file for making mpxcenrep.sisx.
+rem
+Echo please copy key files to ROOT before build sis file
+del voicerecordercenrep.sis voicerecordercenrep.sisx
+makesis -v voicerecordercenrep.pkg
+signsis voicerecordercenrep.sis voicerecordercenrep.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
+//del voicerecordercenrep.sis
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/build_sis_stub.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,16 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	Bat file for making VoiceRecorder_stub.sis.
+rem
+makesis -s VoiceRecorder_stub.pkg VoiceRecorder_stub.sis
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/build_sisx.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,19 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Delete old sis file, creating new sis package and sign it.
+rem
+
+del VoiceRecorder.sis VoiceRecorder.sisx
+makesis -v VoiceRecorder.pkg
+signsis -v VoiceRecorder.sis VoiceRecorder.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/build_sisx_udeb.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,19 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Delete old udeb sis file, creating new sis package and sign it.
+rem
+
+del VoiceRecorder_udeb.sis VoiceRecorder_udeb.sisx
+makesis -v VoiceRecorder_udeb.pkg
+signsis -v VoiceRecorder_udeb.sis VoiceRecorder_udeb.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/change_version.bat	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,27 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:	A utility to change version of the binaries.
+rem
+
+elftran.exe -version 15.9 \epoc32\release\armv5\urel\VoiceRecorder.exe
+elftran.exe -version 15.9 \epoc32\release\armv5\urel\VoiceRecorderUtils.dll
+elftran.exe -version 15.9 \epoc32\release\armv5\urel\VoiceRecorderRecView.dll
+elftran.exe -version 15.9 \epoc32\release\armv5\urel\NewService.dll
+elftran.exe -version 15.9 \epoc32\release\armv5\urel\GSVoiceRecorderPlugin.dll
+
+elftran.exe -version 15.9 \epoc32\release\armv5\udeb\VoiceRecorder.exe
+elftran.exe -version 15.9 \epoc32\release\armv5\udeb\VoiceRecorderUtils.dll
+elftran.exe -version 15.9 \epoc32\release\armv5\udeb\VoiceRecorderRecView.dll
+elftran.exe -version 15.9 \epoc32\release\armv5\udeb\NewService.dll
+elftran.exe -version 15.9 \epoc32\release\armv5\udeb\GSVoiceRecorderPlugin.dll
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/sis/readme.txt	Wed Sep 01 12:29:14 2010 +0100
@@ -0,0 +1,35 @@
+***************************************
+* Steps to create Voice Recorder SISX
+***************************************
+
+************ Voice Recorder has to be upgraded as "full upgrade" package
+************ The DLLs and the resource file will always be upgraded together
+
+
+1. Upgrade the DLLs version number (refer to: Upgrade dll version number)
+2. Build the VoiceRecorder sisx file
+3. Build the cenrep sisx file
+
+
+**************************************
+*  Cenrep
+**************************************
+1. Build centrepconv.exe (refer to IAD wiki)
+
+2. Create the cenrep.txt file using the "cenrep Configuration Tool"
+Refer to:
+K:\s60\tools\toolsextensions\ConfigurationTool
+
+3. Copy the cenrep .txt file into c:\cenrep\
+
+4. Create the cenrep .cre file:
+K:\epoc32\release\winscw\udeb>centrepconv.exe  -nowait  -o c:\cenrep\101F87A3.cre c:\cenrep\101F87A3.txt
+
+5. To create the cenrep sis file:
+- copy "101F87A3.cre" into the "\voicerec\VoiceRecorder\sis" directory, then run the "build_cenrep_sisx.bat"
+
+
+**************************************
+* Upgrade dll version number
+**************************************
+1. Run "change_version.bat" script from \voicerec\VoiceRecorder\sis