--- /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