--- a/voicerecorder/RecViewSrc/CVRRecView.cpp Mon Jan 18 20:21:38 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,802 +0,0 @@
-/*
-* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* 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 "voicerecorder.hrh"
-#include "CVRRecView.h"
-#include "CVRRecViewContainer.h"
-#include "CVRRecViewActivationContainer.h"
-#include "CVRRecViewModel.h"
-#include "VRUtils.h"
-
-// CONSTANTS
-const TUid KUidMmsEditor = { 0x100058DE };
-const TUid KUidMailEditor = { 0x101F4CD6 };
-
-
-// ================= 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()
- {
- // 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::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 iModel;
- delete iSendUi;
- delete iModelActivator;
- delete iLaunchService;
- }
-
-
-// ---------------------------------------------------------------------------
-// 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 );
- // iCommand = 0;
- }
-
-
-// ---------------------------------------------------------------------------
-// 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;
- }
-
- 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);
- }
-
- 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);
- }
-
- appuid = container->Application()->AppDllUid();
- if ( ( appuid == KUidMmsEditor ) ||
- ( appuid == KUidMailEditor ) )
- {
- aMenuPane->SetItemDimmed( ECmdSaveAttachment, ETrue );
- }
- else
- {
- 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 recording already started, not allow to start recording again.
- if (iModel->GetInRecordingFlag())
- {
- aMenuPane->SetItemDimmed(ECmdRecord, ETrue);
- aMenuPane->SetItemDimmed(ECmdSettings, ETrue);
- iModel->SetInRecordingFlag(EFalse);
- }
-
- break;
- }
-
- case R_VR_REC_MENUPANE_INCALL_RECORDING_DISABLED:
- {
- // Check if HELP is enabled in FeatureManager, if not, disable the Help menu item
- if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
- {
- aMenuPane->SetItemDimmed(ECmdHelp, ETrue);
- }
- break;
- }
-
- case R_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)
- {
- 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++;
-
- 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();
-
- // Activate model in correct context asynchronically.
- // iContainer will be activated trough callback after model activation
- TCallBack cb( ActivationCallBack, this );
- iModelActivator->Activate( static_cast< TVRRecViewContexts >(
- aCustomMessageId.iUid ), cb );
-
- // Construct the real container
- iContainer = new( ELeave ) CVRRecViewContainer;
- iContainer->ConstructL( ClientRect(), iModel, iModel, iModel, this );
- iContainer->SetKeyObserver( iModel );
- iContainer->SetVolumeChangeObserver( iModel );
- }
-
-
-// ---------------------------------------------------------------------------
-// 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();
- }
-
-// ---------------------------------------------------------------------------
-// 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);
- }
-*/