voicerecorder/AppSrc/CVRAppUI.cpp
changeset 0 845549f293a7
child 5 35a9006a7fc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/AppSrc/CVRAppUI.cpp	Thu Dec 17 08:46:57 2009 +0200
@@ -0,0 +1,464 @@
+/*
+* 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 "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
+
+_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 );
+
+	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 (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
+		TInt memoDrive = VRUtils::MemoDriveL();
+        TInt defaultDrive = VRUtils::DefaultMemoDriveL();
+ 
+        //not default phone memory
+		if ( memoDrive != defaultDrive )
+			{
+             // check if USB is connected, if so, then need to switch to phone memory
+			if (IsUsbActive())
+				{
+				HBufC* noteText = iCoeEnv->AllocReadResourceLC(
+														 R_QTN_MEMC_VOREC_NOTE1 );
+				CAknInformationNote* infoNote =
+									   new( ELeave ) CAknInformationNote( ETrue );
+				infoNote->ExecuteLD( *noteText );
+				CleanupStack::PopAndDestroy( noteText );
+				VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive );
+				}
+			else
+				{
+            	TUint status( 0 );
+	        	VRUtils::GetDriveInfo(memoDrive, status);
+				
+				// Drive not available or locked
+				if ((status & DriveInfo::EDriveLocked) || !(status & DriveInfo::EDrivePresent))
+			    	{
+			    	HBufC* noteText = iCoeEnv->AllocReadResourceLC(R_QTN_MEMC_VOREC_NOTE1 );
+					CAknInformationNote* infoNote = new( ELeave ) CAknInformationNote( ETrue );
+					infoNote->ExecuteLD( *noteText );
+					CleanupStack::PopAndDestroy( noteText );
+					VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive );
+					}
+				else if ( status & DriveInfo::EDriveReadOnly )
+			    	{
+			    	HBufC* noteText = iCoeEnv->AllocReadResourceLC(R_QTN_MEMC_VOREC_NOTE2 );
+					CAknInformationNote* infoNote = new( ELeave ) CAknInformationNote( ETrue );
+					infoNote->ExecuteLD( *noteText );
+					CleanupStack::PopAndDestroy( noteText );				
+					VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive );
+					}
+		    	else if ( status & DriveInfo::EDriveCorrupt )
+			    	{
+			    	// Drive corrupted -> use phone memory
+			    	VRUtils::SetMemoDriveL((TDriveNumber)defaultDrive );
+			    	}
+				}
+			}
+
+
+#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 )
+				{
+				dynamic_cast<CNewFileServiceBase*>(iEmbeddedObserver)->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 )
+				{
+				dynamic_cast<CNewFileServiceBase*>(iEmbeddedObserver)->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 ( 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::SetEmbeddedObserver
+// 
+// ---------------------------------------------------------------------------
+//
+void CVRAppUi::SetEmbeddedObserver( MVREmbeddedObserver* aObserver )
+    {
+    iEmbeddedObserver = aObserver;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CVRAppUi::IsUsbActive  
+// ---------------------------------------------------------------------------
+//
+TBool CVRAppUi::IsUsbActive()
+    {
+    TInt usbState;
+    TInt err = RProperty::Get(  KPSUidUsbWatcher, KUsbWatcherSelectedPersonality,usbState);
+    return !err && usbState == KUsbPersonalityIdMS;
+    }
+// End of file