--- a/camerauis/cameraapp/generic/src/CamAppui.cpp Thu Aug 19 09:36:57 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9135 +0,0 @@
-/*
-* Copyright (c) 2007-2010 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: App UI class for cameraapp
-*
-*/
-
-
-// This needs to be included first, because other include files
-// may be variated using these flags.
-#include <avkon.hrh>
-#include <barsread.h> // TResourceReader
-#include <StringLoader.h>
-#include <sysutil.h>
-#include <eikenv.h>
-#include <hlplch.h>
-#include <apgwgnam.h>
-#include <apgcli.h>
-#include <DocumentHandler.h>
-#include <apmstd.h>
-#include <textresolver.h>
-#include <aknnotewrappers.h>
-#include <akntitle.h> // CAknTitlePane
-#include <aknclearer.h>
-#include <aknnavide.h>
-#include <AknWaitDialog.h>
-#include <aknstaticnotedialog.h>
-#include <AknCapServerDefs.h>
-#include <akntoolbar.h>
-#include <aknstyluspopupmenu.h>
-#include <aknlayoutscalable_apps.cdl.h>
-#include <akntoolbarextension.h>
-#include <eiksoftkeypostingtransparency.h>
-#include <centralrepository.h>
-#include <AknSgcc.h>
-#include <cameraapp.rsg>
-#include <vgacamsettings.rsg>
-#include <activepalette2ui.h>
-#include <AknGlobalNote.h>
-#include <hal.h>
-#include <hal_data.h>
-#include <oommonitorsession.h>
-#include <driveinfo.h>
-#include <pathinfo.h>
-#include <AccMonitor.h>
-
-#ifndef __WINSCW__
-//#include <SFIUtilsAppInterface.h>
-#endif
-
-#include <musresourceproperties.h>
-#include <cameraplatpskeys.h>
-
-#include <AknCommonDialogsDynMem.h>
-#include <CAknMemorySelectionDialogMultiDrive.h>
-#include <aknmessagequerydialog.h>
-
-#include "CameraappPrivateCRKeys.h"
-#include "CamAppUi.h"
-#include "CamUtility.h"
-#include "CamAppController.h"
-#include "CamControllerObservers.h"
-#include "CamTimer.h"
-#include "CamLogger.h"
-#include "CamStillPreCaptureView.h"
-#include "CamStillPostCaptureView.h"
-#include "CamVideoPreCaptureView.h"
-#include "CamVideoPostCaptureView.h"
-#include "CamBurstThumbnailView.h"
-#include "CamSelfTimer.h"
-#include "CamPanic.h"
-#include "CamBurstModeObserver.h"
-#include "CamStillUserSceneSetupView.h"
-#include "CamNaviCounterControl.h"
-#include "CamNaviCounterModel.h"
-#include "CamNaviProgressBarControl.h"
-#include "Cam.hrh"
-#include "CamSettings.hrh"
-#include "CamProductSpecificSettings.hrh"
-#include "CamAppUiBase.h"
-#include "CamWaitDialog.h"
-#include "CamSidePane.h"
-#include "CamZoomPane.h"
-#include "CamAppUid.h"
-#include <csxhelp/lcam.hlp.hrh>
-#include "CameraVariant.hrh"
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "CamAppuiTraces.h"
-#endif
-#include "camactivepalettehandler.h"
-#include "CamContainerBase.h"
-#include "camuidconstants.h"
-#include "CamGSInterface.h"
-#include "CamFileCheckAo.h"
-#include "CamLocalViewIds.h"
-#include "CameraUiConfigManager.h"
-
-#include "MCamAddToAlbumObserver.h"
-#include "CamCollectionManagerAo.h"
-#include "glxgallery.hrh"
-#include "glxcollectionplugincamera.hrh"
-#include "s32mem.h"
-
-
-#include "camflashstatus.h"
-#include "CamMemoryMonitor.h"
-#include "camstartuplogocontroller.h"
-
-
-
-// ===========================================================================
-// Constants
-
-// Sequence mode related constants that define the amount of pictures taken
-// with sequence mode.
-const TInt KShortBurstCount = 18; // number of images captured during burst
-
-// When asked if current memory is full in video mode
-// there needs to be at least following amount of recording
-// time left or memory is said to be full.
-const TTimeIntervalMicroSeconds KMemoryFullVideoRemaining = 1000*1000;
-
-// This is used to find the window group id for Eikon Server.
-// The Eikon Server window group id is later used to ignore all window server
-// events saying Eikon Server has gained focus.
-_LIT( KEikonServer, "EikonServer" );
-
-_LIT8(K3gpVideoMimeType, "video/3gpp");
-_LIT8(KMp4VideoMimeType, "video/mp4");
-
-//const TCamMediaStorage KCamInternalStorage = ECamMediaStoragePhone;
-
-const TUint KCameraEventInterest = ( ECamCameraEventClassBasicControl
- | ECamCameraEventClassImage
- | ECamCameraEventClassVideo
- | ECamCameraEventClassVfControl
- | ECamCameraEventClassSsControl
- | ECamCameraEventClassSettings );
-/**
- * class CCamFtuDisplay
- * This class is used to give a notification to Camera First Time User regarding the
- * geotagging of captured images or videos.
- */
-
-class CCamFtuDisplay : public CAsyncOneShot
- {
-public:
- /**
- * CCamFtuDisplay
- * Default Constructor
- */
- CCamFtuDisplay( CCamAppUi * aCamAppUi )
- : CAsyncOneShot( CActive::EPriorityLow), iCamAppUi(aCamAppUi)
- {
- }
- enum TEnableCamFtu
- {
- ECamFtuEnable = 0,
- ECamFtuDisable
- };
-
-protected:
- /**
- * RunL
- * Callback method
- */
- void RunL()
- {
- iCamAppUi->CamFtuDisplayL();
- }
-private:
- /**
- * iCamAppUi
- * An instance of the CCamAppUi
- */
- CCamAppUi* iCamAppUi;
- };
-
-
-// ===========================================================================
-// Member functions
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::~CCamAppUi
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CCamAppUi::~CCamAppUi()
- {
- PRINT( _L("Camera => ~CCamAppUi" ))
- if ( iMemoryMonitor )
- {
- iMemoryMonitor->StopMonitoring();
- delete iMemoryMonitor;
- iMemoryMonitor = 0;
- }
-
- delete iStartupLogoController;
-
- iController.SetAppUiAvailable( EFalse );
-
- iResourceLoaders.Close();
-
-#ifdef CAMERAAPP_DELAYED_POSTCAPTURE_CREATION
- if( iPostCapIdle )
- {
- iPostCapIdle->Cancel();
- delete iPostCapIdle;
- }
-#endif
-
- if ( iFileCheckAo )
- {
- iFileCheckAo->Cancel();
- delete iFileCheckAo;
- }
-
- if ( iController.UiConfigManagerPtr()->IsOrientationSensorSupported() &&
- iSensorIdle )
- {
- CancelSensorIdle();
- delete iSensorIdle;
- }
-
-#if !defined(__WINSCW__)
- // relinquish capture keys
- UnRegisterCaptureKeys();
-#endif
-
- SaveCaptureMode();
- SaveCourtesyUiState();
-
- delete iDecoratedNaviPaneCounter;
- delete iDecoratedNaviPaneProgressBar;
-#if defined( CAMERAAPP_CAPI_V2_DVF )
- if ( iSelfTimer )
- {
- iSelfTimer->RemoveObserver( this );
- }
-#endif // CAMERAAPP_CAPI_V2_DVF
- delete iSelfTimer;
- delete iParentAppName;
- delete iTextResolver;
-
- iController.RemoveControllerObserver( this );
-
- // Burst mode observers are not owned, delete only the pointers to them.
- iBurstModeObservers.Close();
-
- if ( iWaitTimer && iWaitTimer->IsActive() )
- {
- iWaitTimer->Cancel();
- }
- delete iWaitTimer;
- delete iDocHandler;
- delete iCamSidePane;
- delete iCamZoomPane;
-
- delete iRepository;
-
-/*#ifndef __WINSCW__
- delete iSFIUtils;
-#endif*/
-
- delete iNaviCounterControl;
- delete iNaviProgressBarControl;
- delete iNaviCounterModel;
- delete iNaviProgressBarModel;
- delete iActivePaletteHandler;
- iActivePaletteHandler = NULL;
-
- if( iCourtesyTimer )
- {
- iCourtesyTimer->Cancel();
- }
- delete iCourtesyTimer;
- delete iScreenClearer;
- delete iVolumeKeyObserver;
-
- delete iCollectionManager;
- iCollectionManager = NULL;
-
- if( iCamFtuDisplay )
- {
- delete iCamFtuDisplay;
- iCamFtuDisplay = NULL;
- }
-
- PRINT( _L("Camera <= ~CCamAppUi" ))
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::ConstructL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP2_CCAMAPPUI_CONSTRUCTL, "e_CCamAppUi_ConstructL 1" );
- PRINT( _L("Camera => CCamAppUi::ConstructL") )
- iRotatedKeyEvent = ETrue;
- iReturnedFromPlugin = EFalse;
- iController.SetAppUiAvailable( ETrue );
-
- iLockedQwertyState = E2ndCamUnknown;
- iMemoryMonitor = CCamMemoryMonitor::NewL( this, &iController );
-
- TInt memError =
- iMemoryMonitor->CheckAndRequestMemoryL( iController.UiConfigManagerPtr()->CriticalLevelRamMemory(),
- iController.UiConfigManagerPtr()->RequiredRamMemory(),
- ETrue );
-
-
- TInt freeMemory = 0;
- HAL::Get( HALData::EMemoryRAMFree, freeMemory );
- if ( memError && freeMemory < iController.UiConfigManagerPtr()->CriticalLevelRamMemoryFocusGained() )
- {
- User::Leave( memError );
- }
- iUiConstructionComplete = EFalse;
- iDSASupported = iController.UiConfigManagerPtr()->IsDSAViewFinderSupported();
-
- TBool uiOrientationOverride = iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported();
-
- // Get the screenmode values used for setting the orientation
- RArray<TInt> screenModeValues;
- if ( uiOrientationOverride )
- {
- iController.UiConfigManagerPtr()->SupportedScreenModesL( screenModeValues );
- iLandscapeScreenMode = screenModeValues[0];
- iPortraitScreenMode = screenModeValues[1];
- }
-
- // The embedded views are set after ConstructL completes
- // but the value is only of interest if the app is embedded
- iEmbeddedViewSet = !IsEmbedded();
- PRINT1( _L("Camera => CCamAppUi::ConstructL iEmbeddedViewSet:%d"), iEmbeddedViewSet );
-
- // In embedded case requesting new file without defined resolution
- // the 0*0 is interpreted as the default mms size resolution
- iRequestedNewFileResolution.SetSize( 0, 0 );
-
- // Camera window group id
- iMyWgId = iCoeEnv->RootWin().Identifier();
-
- // Get the id of Eikon Server window group
- iEikonServerWindowGroupId = iCoeEnv->WsSession().FindWindowGroupIdentifier(
- 0,
- KEikonServer );
-
- CApaWindowGroupName::FindByAppUid(
- KBtNotifierServerUid,
- iCoeEnv->WsSession(),
- iBTServerWindowGroupId);
-
- CApaWindowGroupName::FindByAppUid(
- KPhoneAppUid,
- iCoeEnv->WsSession(),
- iPhoneAppWindowGroupId);
-
- PRINT( _L("Camera <> create new repository") );
- TInt crValue = 0;
- if( !iRepository )
- {
- iRepository = CRepository::NewL( KCRUidCameraappSettings );
- }
-
- // get softkey position
- CamUtility::GetPsiInt( ECamPsiSoftKeyPosition, iSoftkeyPosition );
-
- iCamOrientation = ReadCurrentDeviceOrientation();
- PRINT1( _L("Camera <> CurrentDeviceOrientation (%d)"), iCamOrientation )
- PERF_EVENT_START_L2( EPerfEventAvkonUIConstruction );
- TInt orientation;
- if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() )
- {
- PRINT( _L("Camera <> using slider position to set orientation") );
- // Use the current slider position for the required orientation
- TInt sliderPosition;
- TInt err = RProperty::Get(
- CameraPlatPSKeys::KPSCameraPlatUid,
- CameraPlatPSKeys::KLensCoverStatus,
- sliderPosition );
-
- // ToDo this could be removed after PCFW has released new implementation (wk25/2009)
- if( err == KErrNotFound )
- {
- PRINT( _L("Camera <> using slider position to set orientation") );
- err = RProperty::Get(
- NMusResourceApi::KCategoryUid,
- NMusResourceApi::KCameraAvailability,
- sliderPosition );
- }
- PRINT2( _L("Camera <> slider position = %d, error = %d"),
- sliderPosition, err );
-
- // If there is an error then assume the slider is closed (as long as there is
- // more than one camera)
- if ( err )
- {
- PRINT1( _L("Camera <> Slider status err%d - Check status later"),err )
- iController.SetCameraSwitchRequired( ESwitchToUnknown );
- }
- if ( ( ( CCamAppController::CamerasAvailable() > 1 &&
- sliderPosition == CameraPlatPSKeys::EClosed ) ||
- err != KErrNone ) && !IsQwerty2ndCamera( ETrue ) )
- {
- PRINT( _L("Camera <> setting orientation for secondary camera") )
- CamUtility::GetPsiInt( ECamPsiSecondaryCameraOrientation, orientation );
- }
- else
- {
- PRINT( _L("Camera <> setting orientation for primary camera") )
- CamUtility::GetPsiInt( ECamPsiPrimaryCameraOrientation, orientation );
- }
- }
- else
- {
- // Without lens cover support, always start to primary camera
- CamUtility::GetPsiInt( ECamPsiPrimaryCameraOrientation, orientation );
- }
-
- if ( orientation == ( TInt ) EAppUiOrientationLandscape )
- {
- PRINT( _L("Camera <> orientation is landscape ") )
- iCamOrientation = (ECamHandLeft == iSoftkeyPosition )
- ? ECamOrientationCamcorderLeft
- : ECamOrientationCamcorder;
-
- PRINT( _L("Camera <> Calling BaseConstructL") )
- OstTrace0( CAMERAAPP_PERFORMANCE, CCAMAPPUI_CONSTRUCTL, "e_CAM_APP_BASE_CONSTRUCT 1" ); //CCORAPP_APP_BASE_CONSTRUCT_START
- BaseConstructL( EAppOrientationLandscape | EAknEnableSkin | EAknEnableMSK |
- ENonStandardResourceFile | EAknSingleClickCompatible );
- OstTrace0( CAMERAAPP_PERFORMANCE, DUP1_CCAMAPPUI_CONSTRUCTL, "e_CAM_APP_BASE_CONSTRUCT 0" ); //CCORAPP_APP_BASE_CONSTRUCT_END
- PRINT( _L("Camera <> BaseConstructL Complete") )
-
- if( uiOrientationOverride )
- {
- // Finish engine construction
- iController.CompleteConstructionL();
- //set orientation to CCamera
- iController.SetCameraOrientationModeL( iLandscapeScreenMode );
- // and complete the cameracontroller construction
- iController.CompleteCameraConstructionL();
- }
- }
- else
- {
- PRINT( _L("Camera <> orientation is portrait") )
- iCamOrientation = ECamOrientationPortrait;
-
- PRINT( _L("Camera <> Calling BaseConstructL") )
- OstTrace0( CAMERAAPP_PERFORMANCE, DUP4_CCAMAPPUI_CONSTRUCTL, "e_CAM_APP_BASE_CONSTRUCT 1" );
- BaseConstructL( EAppOrientationPortrait | EAknEnableSkin | EAknEnableMSK |
- ENonStandardResourceFile );
- OstTrace0( CAMERAAPP_PERFORMANCE, DUP5_CCAMAPPUI_CONSTRUCTL, "e_CAM_APP_BASE_CONSTRUCT 0" );
- PRINT( _L("Camera <> BaseConstructL Complete") )
-
- if( uiOrientationOverride )
- {
- // Finish engine construction
- iController.CompleteConstructionL();
- //set orientation to CCamera
- iController.SetCameraOrientationModeL( iPortraitScreenMode );
- // and complete the cameracontroller construction
- iController.CompleteCameraConstructionL();
- }
- }
-
- PERF_EVENT_END_L2( EPerfEventAvkonUIConstruction );
-
-#if !defined (__WINSCW__)
-#if !( defined(__WINS__) || defined(__WINSCW__) )
- // Ensure that the macro switch keys are always captured by this
- // application.
- if ( !AppInBackground( EFalse ) ) //camera is constructed in background
- {
- RegisterCaptureKeysL();
- }
-#endif // !defined(__WINS__) || defined(__WINSCW__)
-#endif
-
- if( !uiOrientationOverride )
- {
- // Load the settings model static settings
- PRINT( _L("Camera <> call CCamAppController::LoadStaticSettingsL..") )
- iController.LoadStaticSettingsL( IsEmbedded() );
-
- // Check the screen size if it matches the orientation we expect.
- // If not, delay the initialization until HandleScreenDeviceChangedL is called.
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP6_CCAMAPPUI_CONSTRUCTL, "e_ReadUiOrientationFromWindowServer 1" );
- TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
- PRINT2( _L("<> CCamAppUi::ConstructL() iCoeEnv->ScreenDevice()->SizeInPixels(): w=%d h=%d"), screenSize.iWidth, screenSize.iHeight );
- TBool expectLandscape = (iCamOrientation != ECamOrientationPortrait);
- TBool isLandscape = (screenSize.iWidth > screenSize.iHeight);
- if( isLandscape != expectLandscape || AppInBackground( EFalse ) ) //screen is not ready or camera app is in background
- {
- iEngineConstructionDelayed = ETrue;
- }
-
-OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP7_CCAMAPPUI_CONSTRUCTL, "e_ReadUiOrientationFromWindowServer 0" );
-
- // initialise the self timer mode
- iInSelfTimerMode = ECamSelfTimerDisabled;
-
- if ( !iEngineConstructionDelayed )
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP8_CCAMAPPUI_CONSTRUCTL, "e_EngineConstructionDelayed 1" );
- iController.CompleteConstructionL();
- iController.StoreUserSceneSettingsL();
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP9_CCAMAPPUI_CONSTRUCTL, "e_EngineConstructionDelayed 0" );
-
- }
- }
- else
- {
- iEngineConstructionDelayed = EFalse;
- iInSelfTimerMode = ECamSelfTimerDisabled;
- }
-
-
- iEmbeddedObserver = NULL;
-
- iController.AddControllerObserverL( this );
- iController.AddCameraObserverL( this, KCameraEventInterest );
-
- if( !uiOrientationOverride )
- {
-/*#ifndef __WINSCW__
- // Initialize SFIUtils
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP10_CCAMAPPUI_CONSTRUCTL, "e_InitSendFileInCall 1" );
- PRINT(_L("iSFIUtils = CSFIUtilsAppInterface::NewL -->"));
- TRAPD(errSFI,iSFIUtils = CSFIUtilsAppInterface::NewL());
- PRINT1(_L("iSFIUtils = CSFIUtilsAppInterface::NewL <-- errSFI=%d"),errSFI);
- User::LeaveIfError(errSFI);
- iSendFileInCall = EFalse;
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP11_CCAMAPPUI_CONSTRUCTL, "e_InitSendFileInCall 0" );
- PRINT( _L("iSendFileInCall = EFalse") );
-#endif*/
-
- // Create text resolver for error note text
- iTextResolver = CTextResolver::NewL();
-
- ConstructPreCaptureViewsL();
-
- iSelfTimer = CCamSelfTimer::NewL( iController );
-#if defined( CAMERAAPP_CAPI_V2_DVF )
- iSelfTimer->AddObserverL( this );
-#endif // CAMERAAPP_CAPI_V2_DVF
-
- PRINT( _L("Camera <> creating navicounter model") );
- iNaviCounterModel = CCamNaviCounterModel::NewL( iController );
- PRINT( _L("Camera <> append navicounter to resourceloaders") );
- User::LeaveIfError( iResourceLoaders.Append(iNaviCounterModel) );
-
- PRINT( _L("Camera <> creating progress bar model") );
- iNaviProgressBarModel = CCamNaviProgressBarModel::NewL( iController );
- PRINT( _L("Camera <> append progressbar to resourceloaders") );
- User::LeaveIfError(iResourceLoaders.Append(iNaviProgressBarModel));
-
- ConstructNaviPaneL();
- }
-
-
- iRepository->Get( KCamCrAlwaysDrawCourtesyUi, crValue );
- iAlwaysDrawPreCaptureCourtesyUI = (crValue == KCamCrAlwaysDrawCourtesyUiIsOn);
-
- iCoeEnv->RootWin().EnableScreenChangeEvents();
-
-
- if( uiOrientationOverride )
- {
- // always start in still mode
- iMode = ECamControllerImage;
- iTargetMode = ECamControllerImage;
- }
- else
- {
- // If the view launch needs to wait until the engine
- // is constructed or the embedded launch view is set, the starting
- // state will be standby
- if ( !IsConstructionComplete() )
- {
- iViewState = ECamViewStateStandby;
- }
-
- // Get start up mode from settings.
- // If the application is embedded the new view will be set
- // when HandleNewFileL is called by the framework
- PRINT( _L("Camera <> CCamAppUi::ConstructL set default view") );
- if ( StartupMode() == ECamStillCapture )
- {
- iMode = ECamControllerImage;
- iTargetMode = ECamControllerImage;
- SetDefaultViewL( *iStillCaptureView );
- }
- else
- {
- iMode = ECamControllerVideo;
- iTargetMode = ECamControllerVideo;
- SetDefaultViewL( *iVideoCaptureView );
- }
-
-
- if( !iEngineConstructionDelayed )
- {
- // pre-construct side-pane & zoom pane
- // get whether we overlay sidepane over view-finder
- TBool overlayViewFinder;
- User::LeaveIfError( CamUtility::GetPsiInt( ECamPsiOverLaySidePane, overlayViewFinder ) );
- PRINT( _L("Camera <> CCamAppUi::ConstructL create sidepane") );
- iCamSidePane = CCamSidePane::NewL( iController, overlayViewFinder );
- User::LeaveIfError(iResourceLoaders.Append(iCamSidePane));
-
- PRINT( _L("Camera <> CCamAppUi::ConstructL create zoom pane") );
- iCamZoomPane = CCamZoomPane::NewL( iController, overlayViewFinder );
- User::LeaveIfError(iResourceLoaders.Append(iCamZoomPane));
- }
- }
- // create the timer used for callbacks
- iWaitTimer = CPeriodic::NewL( CActive::EPriorityHigh );
-
-
- // initialise the view construction states
- iPostCaptureViewsConstructed = EFalse;
- iUserSceneSetupViewConstructed = EFalse;
- iCustomiseToolbarViewConstructed = EFalse;
-
- if( !uiOrientationOverride )
- {
- PRINT( _L("Camera => CCamAppUi::ConstructL create doc handler") );
- iDocHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
- iDocHandler->SetExitObserver(this);
- iController.CheckMemoryToUseL();
-
- // create navi-pane and navi-porgress bar for use in camcorder mode
- PRINT( _L("Camera => CCamAppUi::ConstructL create navicounter control") );
- iNaviCounterControl = CCamNaviCounterControl::NewL( *iNaviCounterModel );
- iNaviCounterControl->SetExtentToWholeScreen();
-
- PRINT( _L("Camera => CCamAppUi::ConstructL create progress bar control") );
- iNaviProgressBarControl = CCamNaviProgressBarControl::NewL( *iNaviProgressBarModel );
-
- // get max num of images for burst capture
- CamUtility::GetPsiInt( ECamPsiMaxBurstCapture, iMaxBurstCaptureNum );
-
- PRINT( _L("Camera => CCamAppUi::ConstructL create AP handler") );
- iActivePaletteHandler = CCamActivePaletteHandler::NewL( iController, EFalse );
- }
-
- iDrawPreCaptureCourtesyUI = ETrue;
- iDrawPostCaptureCourtesyUI = ETrue;
- iAlwaysDrawPostCaptureCourtesyUI = ETrue;
- iLeftSoftKeyPressed = EFalse;
- if( !uiOrientationOverride )
- {
- // get coutesy UI timeout
- TInt timeoutValue;
- CamUtility::GetPsiInt( ECamPsiCourtesyUiTimeoutValue, timeoutValue );
-
- iCourtesyTimer = CCamTimer::NewL( timeoutValue * 1000000,
- TCallBack( CCamAppUi::CourtesyTimeout, this ) );
-
- PRINT( _L("Camera => CCamAppUi::ConstructL update navi models") );
- UpdateNaviModelsL();
- PRINT( _L("Camera => CCamAppUi::ConstructL navi counter reload resources") );
- iNaviCounterModel->ReloadResourceDataL();
- PRINT( _L("Camera => CCamAppUi::ConstructL navi progress bar reload resources") );
- iNaviProgressBarModel->ReloadResourceDataL();
- }
-
- iZoomPaneShown = EFalse;
- iFirstBoot = ETrue; // Show zoom
- iProcessingScreenRedraw = EFalse;
- iSendAsInProgress = EFalse;
-
- if( !uiOrientationOverride )
- {
- iFileCheckAo = CCamFileCheckAo::NewL( iController, *this );
- iCollectionManager = new (ELeave) CCamCollectionManagerAO( *this );
- }
-
- iCheckOperationInProgress = EFalse;
- iLostFocusToNewWindow = EFalse;
- iFirstVFStart = ETrue;
-
- if ( !uiOrientationOverride )
- {
- iUiConstructionComplete = ETrue;
- }
- iMemoryMonitor->StartMonitoring( iController.UiConfigManagerPtr()->CriticalLevelRamMemoryFocusGained(),
- iController.UiConfigManagerPtr()->RequiredRamMemoryFocusGained() );
-
- // TRAP errors so camera starts up even if startup animation fails
- TRAP_IGNORE(iStartupLogoController = CCamStartupLogoController::NewL(EStartupLogoVisible));
-
- PRINT( _L("Camera <= CCamAppUi::ConstructL") )
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP3_CCAMAPPUI_CONSTRUCTL, "e_CCamAppUi_ConstructL 0" );
-
- // To get FTU flag value
-
- TInt ftuValue=0;
- TInt retErr=0;
- retErr=iRepository->Get( KCamCrFtuMessageFlag, ftuValue );
-
- if( !IsEmbedded() && ftuValue == CCamFtuDisplay::ECamFtuEnable
- && retErr==KErrNone )
- {
- iCamFtuDisplay = new (ELeave)CCamFtuDisplay(this);
- iCamFtuDisplay->Call();
- }
- }
-
-
-
-// -----------------------------------------------------------------------------
-// IsInternalView
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsInternalView( TCamViewState aViewState ) const
- {
- PRINT1( _L("Camera => CCamAppUi::IsInternalView [%s]"), KCamViewStateNames[aViewState] );
-
- TBool internal( EFalse );
-
- if ( aViewState < ECamViewStateRangeInternalMax
- && aViewState > ECamViewStateRangeInternalMin )
- {
- internal = ETrue;
- }
- else if( aViewState < ECamViewStateRangeExternalMax
- && aViewState > ECamViewStateRangeExternalMin )
- {
- internal = EFalse;
- }
- else
- {
- CamPanic( ECamPanicInvalidView );
- }
-
- PRINT1( _L("Camera <= CCamAppUi::IsInternalView, return %d"), internal );
- return internal;
- }
-// -----------------------------------------------------------------------------
-// CCamAppUi:: HyperlinkCallback
-// Call back method for the hyper link text
-// -----------------------------------------------------------------------------
-//
-TInt CCamAppUi:: HyperlinkCallback(TAny* aAny)
- {
- (static_cast<CCamAppUi*>(aAny))->OpenSettingView();
- return EFalse;
- }
-// -----------------------------------------------------------------------------
-// CCamAppUi::OpenSettingView
-// Non static public method , to launch the settings view
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::OpenSettingView()
- {
- TRAP_IGNORE( HandleCommandL( ECamCmdSettings ) );
- }
-// -----------------------------------------------------------------------------
-// CCamAppUi::CamFtuDisplayL()
-// TO Display FTU message for first time camera launched
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::CamFtuDisplayL()
- {
-
- iController.SetIntegerSettingValueL( ECamSettingItemRecLocation, ECamLocationOn );
-
- CAknMessageQueryDialog* dlg =
- new (ELeave) CAknMessageQueryDialog();
- dlg->PrepareLC( R_FTU_MESSAGE_DIALOG );
- HBufC* msg = iEikonEnv->AllocReadResourceLC( R_FTU_MESSAGE_DIALOG_TEXT );
- HBufC* hyperLinkMsg = iEikonEnv->AllocReadResourceLC(
- R_FTU_MESSAGE_HYPERLINK_TEXT );
-
- TInt len = msg->Length()
- + hyperLinkMsg->Length()
- + KOpeningLinkTag().Length()
- + KClosingLinkTag().Length();
-
- HBufC* displayMsg = HBufC::NewLC( len );
- _LIT(KMsgFormat, "%S%S%S%S");
- displayMsg->Des().Format(KMsgFormat,
- msg,
- &KOpeningLinkTag(),
- hyperLinkMsg,
- &KClosingLinkTag());
-
- dlg->SetMessageTextL( *displayMsg );
- CleanupStack::PopAndDestroy(3); //msg, hyperLinkMsg, displayMsg
-
- TCallBack callback( HyperlinkCallback, this );
-
- dlg->SetLink( callback );
-
- dlg->RunLD();
-
- iRepository->Set( KCamCrFtuMessageFlag, CCamFtuDisplay::ECamFtuDisable );
-
- //Read the location record value in case its changed by hyperlink
-
- TInt value = 0;
- iRepository->Get( KCamCrPhotoStoreLocation, value );
- iController.SetIntegerSettingValueL( ECamSettingItemRecLocation, value );
-
- }
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsConstructionComplete
-// Returns whether or not all construction has completed
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsConstructionComplete() const
- {
- TBool complete = ETrue;
- complete = !iEngineConstructionDelayed;
- return complete && iEmbeddedViewSet;
- }
-
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::NaviCounter
-// Returns the pointer to the NaviCounter control
-// -----------------------------------------------------------------------------
-//
-CCamNaviCounterControl* CCamAppUi::NaviCounterControl()
- {
- return iNaviCounterControl;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::NaviProgressBar
-// Returns the pointer to the NaviProgress control
-// -----------------------------------------------------------------------------
-//
-CCamNaviProgressBarControl* CCamAppUi::NaviProgressBarControl()
- {
- return iNaviProgressBarControl;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::NaviCounterModel
-// Returns the pointer to the NaviCounter model
-// -----------------------------------------------------------------------------
-//
-CCamNaviCounterModel* CCamAppUi::NaviCounterModel()
- {
- return iNaviCounterModel;
- }
-
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::CCamAppUi
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CCamAppUi::CCamAppUi( CCamAppController& aController )
- : iController( aController ),
- iViewState( ECamViewStatePreCapture ),
- iTargetViewState( ECamViewStatePreCapture ),
- iPreventActivePaletteDisplay( EFalse ),
- iInternalStorage(ECamMediaStorageNone)
- {
- }
-
-// ----------------------------------------------------
-// CCamAppUi::SetTitleL
-// Set title pane text from a resource.
-// ----------------------------------------------------
-//
-void CCamAppUi::SetTitleL( TInt aResourceId )
- {
- // Set title
- CAknTitlePane* title = static_cast<CAknTitlePane*>(
- StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
- TResourceReader reader;
- iCoeEnv->CreateResourceReaderLC( reader, aResourceId );
- title->SetFromResourceL( reader );
- CleanupStack::PopAndDestroy(); // resource reader
- }
-
-// ----------------------------------------------------
-// CCamAppUi::SetTitleL
-// Set title pane text from a descriptor.
-// ----------------------------------------------------
-//
-void CCamAppUi::SetTitleL( const TDesC& aText )
- {
- CAknTitlePane* title = static_cast<CAknTitlePane*>(
- StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
- title->SetTextL( aText );
- }
-
-
-
-// ----------------------------------------------------
-// CCamAppUi::PushNaviPaneCounterL
-// Push navi pane counter on to navi pane stack.
-// ----------------------------------------------------
-//
-void
-CCamAppUi::PushNaviPaneCounterL()
- {
- iNaviCounterModel->SetCaptureModeL( iMode, iImageMode );
- iDecoratedNaviPaneCounter->MakeScrollButtonVisible( EFalse );
- NaviPaneL()->PushL( *iDecoratedNaviPaneCounter );
- }
-
-// ----------------------------------------------------
-// CCamAppUi::PushNaviPaneProgressBarL
-// Push navi pane progress bar on to navi pane stack.
-// ----------------------------------------------------
-//
-void CCamAppUi::PushNaviPaneProgressBarL()
- {
- iDecoratedNaviPaneProgressBar->MakeScrollButtonVisible( EFalse );
- NaviPaneL()->PushL( *iDecoratedNaviPaneProgressBar );
- }
-
-// ----------------------------------------------------
-// CCamAppUi::PushDefaultNaviPaneL
-// Push default navi pane on to navi pane stack.
-// ----------------------------------------------------
-//
-void CCamAppUi::PushDefaultNaviPaneL()
- {
- NaviPaneL()->PushDefaultL();
- }
-
-
-// ----------------------------------------------------
-// CCamAppUi::DisplayDeleteNoteL
-// Call DisplayDeleteNoteL on the current view
-// ----------------------------------------------------
-//
-TBool CCamAppUi::DisplayDeleteNoteL()
- {
- TBool deleted =
- static_cast<CCamPostCaptureViewBase*>( iView )->DisplayDeleteNoteL();
-
- // If the image/video has been deleted, switch view
- if ( deleted )
- {
-
- if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() && IsEmbedded() )
- {
- // if in embedded mode, then check the status of the slide
- // and set a pending camera switch if the slide has been
- // opened/closed after starting the capture
- iController.CheckSlideStatus();
- }
-
- // if this is burst mode and there are still images left,
- // return to thumbnail view
- if ( ECamImageCaptureBurst == iController.CurrentImageModeSetup()
- && 0 < iController.CurrentItemCount() )
- {
- iTargetViewState = ECamViewStateBurstThumbnail;
- }
- // otherwise switch to pre-capture view
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- TrySwitchViewL();
- }
- else
- {
- }
- return deleted;
- }
-
-// ----------------------------------------------------
-// CCamAppUi::SelfTimerEnableL
-// Enable or disable SelfTimer functionality
-// ----------------------------------------------------
-//
-void CCamAppUi::SelfTimerEnableL( TCamSelfTimerFunctions aState )
- {
- // If the requested state is the current state, do nothing.
- if ( iInSelfTimerMode == aState )
- {
- return;
- }
-
- __ASSERT_DEBUG( iSelfTimer, CamPanic( ECamPanicNullPointer ) );
-
- // Update the member variable
- iInSelfTimerMode = aState;
-
- if ( aState != ECamSelfTimerDisabled )
- {
- // Set up for current timer mode
- iSelfTimer->SetModeL( iMode, iImageMode, iInSelfTimerMode );
- UpdateCba();
- }
- else
- {
- // stop the timer and remove the indicator from the side pane
- iSelfTimer->Cancel();
-
- // In capture setup mode, toolbar and indicators are not visible
- // They will be updated when returning to precap, similarily to
- // when setting the self timer mode above
- // during changing from still pre-capture view to video pre-capture view, no need
- // to show toolbar of still image. It will display toolbar of video when entering video pre-capture
-
- if( ( iPreCaptureMode != ECamPreCapCaptureSetup &&
- iPreCaptureMode != ECamPreCapSceneSetting ) &&
- !( IsViewFinderInTransit() &&
- iMode == ECamControllerImage &&
- iTargetMode == ECamControllerVideo ) )
- {
- // Re-show the active palette
- iActivePaletteHandler->UpdateActivePaletteL();
- iPreventActivePaletteDisplay = EFalse;
- SetActivePaletteVisibility( ETrue );
-
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if (toolbar)
- {
- toolbar->SetToolbarVisibility( ETrue );
- }
- }
- // Cancel any active focusing operation
- // this won't cancel if capture has already been requested
- iController.CancelFocusAndCapture();
-
- iStillCaptureView->UpdateToolbarIconsL();
-
- // Raise precapture UI and restart courtesy UI timer,
- // if hide icons is enabled.
- RaisePreCaptureCourtesyUI(EFalse);
- }
-
- UpdateCba();
- CCamViewBase* precapView = static_cast<CCamViewBase*>( iView );
- if( precapView &&
- IsViewFinderInTransit() &&
- iMode == ECamControllerImage &&
- iTargetMode == ECamControllerVideo )
- {
- precapView->ViewCba()->DrawNow();
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::SelfTimerEnabled
-// Returns current self-timer state
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::SelfTimerEnabled() const
- {
- return ( iInSelfTimerMode != ECamSelfTimerDisabled );
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::SelfTimer
-// Returns pointer to self-timer object
-// -----------------------------------------------------------------------------
-//
-CCamSelfTimer* CCamAppUi::SelfTimer()
- {
- return iSelfTimer;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::AddBurstModeObserverL
-// Register an observer for burst mode changes
-// -----------------------------------------------------------------------------
-//
-void
-CCamAppUi::AddBurstModeObserverL( MCamBurstModeObserver* aBurstModeObserver )
- {
- // Check for non-null and only add once.
- if( aBurstModeObserver &&
- KErrNotFound == iBurstModeObservers.Find( aBurstModeObserver ) )
- {
- iBurstModeObservers.AppendL( aBurstModeObserver );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::RemoveBurstModeObserver
-// Remove the burst mode observer
-// -----------------------------------------------------------------------------
-//
-void
-CCamAppUi::RemoveBurstModeObserver( const MCamBurstModeObserver* aBurstModeObserver )
- {
- if( aBurstModeObserver )
- {
- TInt index = iBurstModeObservers.Find( aBurstModeObserver );
- if( KErrNotFound != index )
- {
- iBurstModeObservers.Remove( index );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsBurstEnabled
-// Return burst mode enabled state
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsBurstEnabled() const
- {
- PRINT_FRQ( _L("Camera => CCamAppUi::IsBurstEnabled" ) )
- TBool ret = EFalse;
- if ( ECamImageCaptureBurst == iImageMode
- || ECamImageCaptureTimeLapse == iImageMode )
- {
- ret = ETrue;
- }
-
- PRINT_FRQ( _L("Camera <= CCamAppUi::IsBurstEnabled" ) )
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::CurrentBurstMode
-// Return burst mode enabled type
-// -----------------------------------------------------------------------------
-//
-TCamImageCaptureMode CCamAppUi::CurrentBurstMode() const
- {
- PRINT_FRQ( _L("Camera => CCamAppUi::CurrentBurstMode" ) )
- TCamImageCaptureMode mode( ECamImageCaptureNone );
-
- if ( ECamImageCaptureBurst == iImageMode
- || ECamImageCaptureTimeLapse == iImageMode )
- {
- mode = iImageMode;
- }
-
- PRINT_FRQ( _L("Camera <= CCamAppUi::CurrentBurstMode" ) )
- return mode;
- }
-
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsSecondCameraEnabled
-// Returns whether or the secondary camera has been activated
-// Will return ETrue when when the second camera is active
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsSecondCameraEnabled() const
- {
- PRINT_FRQ( _L("Camera =><= CCamAppUi::IsSecondCameraEnabled" ))
- return iController.ActiveCamera() == ECamActiveCameraSecondary;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsQwerty2ndCamera
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsQwerty2ndCamera( TBool aLock )
- {
- TBool ret = EFalse;
- if ( aLock )
- {
- iLockedQwertyState = E2ndCamUnknown;
- }
-
- switch( iLockedQwertyState )
- {
- case E2ndCamPortraitForced:
- {
- ret = EFalse;
- break;
- }
- case E2ndCamLandscapeForced:
- {
- ret = ETrue;
- break;
- }
- case E2ndCamUnknown:
- {
- // Get variant setting i.e. initialize
- TInt value = 0;
- if ( iController.UiConfigManagerPtr() )
- {
- value = iController.UiConfigManagerPtr()->IsQwerty2ndCamera();
-
- iLockedQwertyState = static_cast<T2ndCamOrientation>(value);
- if ( iLockedQwertyState == E2ndCamAuto )
- {
- ret = CamUtility::IsQwertyOpen();
- }
- else
- {
- ret = iLockedQwertyState == E2ndCamLandscapeForced;
- }
- }
- break;
- }
- case E2ndCamAuto:
- {
- ret = CamUtility::IsQwertyOpen();
- break;
- }
- default:
- break;
- }
-
- if ( aLock )
- {
- iLockedQwertyState = ret?E2ndCamLandscapeForced:E2ndCamPortraitForced;
- }
-
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsWaitDialog
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsWaitDialog() const
- {
- return iWaitDialog != NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ActiveCamera
-// Returns the active camera
-// -----------------------------------------------------------------------------
-//
-TCamActiveCamera CCamAppUi::ActiveCamera() const
- {
- return iController.ActiveCamera();
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::HandleCommandL
-// Handle user menu selections
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::HandleCommandL( TInt aCommand )
- {
- PRINT1( _L("Camera => CCamAppUi::HandleCommandL (%d)"), aCommand )
- switch( aCommand )
- {
- // -----------------------------------------------------
- case ECamCmdRaiseCourtesyUI:
- {
- if ( ECamViewStatePreCapture == iViewState )
- {
- RaisePreCaptureCourtesyUI(EFalse);
- }
- else if ( ECamViewStatePostCapture == iViewState )
- {
- // iLeftSoftKeyPressed resembles the Left SoftKey(LSK)
- // press when AP tool bar is hidden
-
- if ( iLeftSoftKeyPressed )
- {
- // LSK is pressed, we raise the AP tool bar
- RaisePostCaptureCourtesyUI();
- }
- else
- {
- // RSK is pressed, we return back to PreCaptureView
- HandleCommandL( EAknSoftkeyBack );
- }
-
- }
- else
- {
- }
- }
- break;
-
- // -----------------------------------------------------
- case ECamCmdSceneSettingList:
- {
- iTargetViewState = ECamViewStateSceneSettingList;
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdGoToStandby:
- {
- CAknTitlePane* title = static_cast<CAknTitlePane*>
- ( StatusPane()->ControlL( TUid::Uid ( EEikStatusPaneUidTitle ) ) );
-
- title->SetTextL( _L("") );
- title->MakeVisible( ETrue );
- title->DrawNow();
- SetActivePaletteVisibility( EFalse );
-
- if ( iView
- && ( iStillCaptureView == iView || iVideoCaptureView == iView ) )
- {
- iProcessingScreenRedraw = ETrue;
- static_cast<CCamPreCaptureViewBase*>( iView )->Container()->DrawNow();
- iProcessingScreenRedraw = EFalse;
- }
-
- PRINT1( _L("CCamAppUi::HandleCommandL standby %d"), iViewState );
- iTargetViewState = ECamViewStateStandby;
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSwitchToPrecapture:
- {
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdNewPhoto:
- {
- if ( !iController.IsViewFinding() && iController.EngineRequestsPending() )
- {
- return;
- }
- // check if currently preparing return
- if ( iController.CaptureModeTransitionInProgress() )
- {
- return;
- }
- #ifdef CAMERAAPP_PERFORMANCE_MEASUREMENT
- PERF_EVENT_START_L1( EPerfEventSwitchToStillMode );
- iController.SetPerformanceState( EPerfWaitingForStillMode );
- #endif
-
- if ( iMode == ECamControllerVideo )
- {
- ZoomPane()->ResetZoomTo1x();
- }
-
- // Hide the active palette before switching so that
- // it is not visible until the preview is visible.
-
- SetActivePaletteVisibility( EFalse );
- if( iController.UiConfigManagerPtr() &&
- iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() &&
- iVideoCaptureView->Container() )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleCommandL calling Draw") );
- iVideoCaptureView->Container()->DrawNow();
- }
- // Switch to still pre capture view
- iTargetViewState = ECamViewStatePreCapture;
- // if coming from video mode then set single capture mode
- // otherwise stay with the current capture mode
- if ( iMode == ECamControllerVideo )
- {
- iTargetMode = ECamControllerImage;
- }
- SubmergeToolbar(); //Fix flickering when switching modes.
- TrySwitchViewL();
-
-
- }
- break;
- case EEikCmdExit: // fallthrough
- case EAknSoftkeyExit:
- {
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- if ( fixedToolbar )
- {
- CAknToolbarExtension* extension = fixedToolbar->ToolbarExtension();
- if ( extension )
- {
- extension->SetShown( EFalse );
- }
- fixedToolbar->SetToolbarVisibility( EFalse );
- }
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP3_CCAMAPPUI_HANDLECOMMANDL, "e_ExternalExit 1" );
- PRINT( _L("Camera CCamAppUi external exit call") );
- if ( iEikonEnv->StartedAsServerApp() )
- {
- if ( iEmbeddedObserver )
- {
- iEmbeddedObserver->AbortL();
- }
- CloseAppL();
- }
- else
-/*#ifndef __WINS__
- {
- if( iSendFileInCall )
- {
- // bring phone app to fore ground
- BringPhoneAppToForeGroundL();
- }
- else
- {
- // hide task icon immediately so it doesn't show during
- // closing which might take a while
- HideTaskL( ETrue );
- CloseAppL();
- }
- }
-#else*/
- {
- HideTaskL( ETrue );
- CloseAppL();
- }
-//#endif
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP5_CCAMAPPUI_HANDLECOMMANDL, "e_ExternalExit 0" );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdInternalExit:
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_HANDLECOMMANDL, "e_ECamCmdInternalExit 1" );
- PRINT( _L("Camera <> CCamAppUi::HandleCommandL case ECamCmdInternalExit") );
- #ifdef CAMERAAPP_PERF_LOG_MEMORY
- // Manually save the current memory log data. This is needed
- // in case the application just goes to background, in which
- // case the log data is not saved automatically.
- CCamPerformanceLogger::SaveAndReset();
- #endif
-
- #ifdef CAMERAAPP_PERF_LOG_TRACES
- // Shutdown end event cannot be logged to memory logger
- // So also log start event only to traces
- if( !iController.AlwaysOnSupported() )
- {
- PERF_EVENT_START_TRACE( EPerfEventApplicationShutdown );
- }
- #endif
- PRINT( _L("Camera CCamAppUi::ECamCmdInternalExit") );
- InternalExitL();
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_HANDLECOMMANDL, "e_ECamCmdInternalExit 0" );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSlideClosedExit:
- {
- // The controller tells the AppUi that the app needs to
- // do an internal exit because the slider has closed.
- // However the view needs to do some processing of this command
- // e.g. to ensure that the application leaves standby mode.
- // Pass the cammand on to the view. It will come back to
- // the AppUi as ECamCmdInternalExit
- OstTrace0( TRACE_PERFORMANCE_DETAIL, DUP2_CCAMAPPUI_HANDLECOMMANDL, "e_ECamCmdSlideClosedExit 1" );
-
- iLensCoverExit = ETrue;
- PRINT( _L("Camera CCamAppUi::ECamCmdSlideClosedExit") );
- if ( iView )
- {
- PRINT( _L("Camera CCamAppUi passing ECamCmdSlideClosedExit to iView") );
- iView->HandleCommandL( ECamCmdInternalExit );
- }
- else
- {
- PRINT( _L("Camera CCamAppUi handlingECamCmdSlideClosedExit") );
- HandleCommandL( ECamCmdInternalExit );
- }
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP4_CCAMAPPUI_HANDLECOMMANDL, "e_ECamCmdSlideClosedExit 0" );
- }
- break;
- // -----------------------------------------------------
- case EAknSoftkeyBack:
- {
- PRINT( _L("Camera <> CCamAppUi::HandleCommandL case EAknSoftkeyBack") );
- // If in burst mode
- if ( iImageMode == ECamImageCaptureBurst )
- {
- // If in burst post-capture view, "back" is to the thumbnail grid
- if ( iViewState == ECamViewStatePostCapture )
- {
- iTargetViewState = ECamViewStateBurstThumbnail ;
- }
- else // From any other burst view...
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- }
- // Switch to pre capture view
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdDelete:
- {
- // Request that the view displays the delete confirmation note
- if(!iController.IsProcessingCapture())
- {
- DisplayDeleteNoteL();
- }
- else
- {
- //Do Nothing
- }
- }
- break;
- // -----------------------------------------------------
- case ECamCmdNewVideo:
- {
- // check if currently preparing return
- if ( iController.CaptureModeTransitionInProgress() )
- {
- return;
- }
- #ifdef CAMERAAPP_PERFORMANCE_MEASUREMENT
- PERF_EVENT_START_L1( EPerfEventSwitchToVideoMode );
- iController.SetPerformanceState( EPerfWaitingForVideoMode );
- #endif
-
- if ( iMode == ECamControllerImage )
- {
- ZoomPane()->ResetZoomTo1x();
- }
-
- // Hide the active palette before any attempt to switch off burst mode
- // otherwise the view switch to video fails when we call GetFocusWindowGroup to
- // see which application has the foreground. Use SetSuppressUIRiseOnViewfinderStart
- // otherwise the AP is raised automatically when the viewfinder starts.
-
- SetActivePaletteVisibility( EFalse );
- SetSuppressUIRiseOnViewfinderStart( ETrue );
- // Switch burst mode off before changing to video
- if ( IsBurstEnabled() )
- {
- SwitchStillCaptureModeL( ECamImageCaptureSingle, EFalse );
- PRINT( _L("Camera => CCamAppUi::HandleCommandL ECamCmdNewVideo completed switch to single"));
- }
-
- // Switch to video pre capture view
- iTargetViewState = ECamViewStatePreCapture;
- iTargetMode = ECamControllerVideo;
- SetSuppressUIRiseOnViewfinderStart( EFalse );
- PRINT( _L("Camera => CCamAppUi::HandleCommandL Try switch to video mode"));
- SubmergeToolbar();
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSelfTimer1: // 10-sec self-timer
- {
- SelfTimerEnableL( ECamSelfTimerMode1 );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSelfTimer2: // 2-sec self-timer
- {
- SelfTimerEnableL( ECamSelfTimerMode2 );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSelfTimer3: // (not supported)
- {
- SelfTimerEnableL( ECamSelfTimerMode3 );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSelfTimerActivate:
- {
- // Self timed capture happens either from shutter press or
- // self timer activate event from softkey press. Shutter
- // press case is handled in CCamStillPreCaptureContainer.
- if( iController.UiConfigManagerPtr()->IsXenonFlashSupported() &&
- !iController.CheckFlash() )
- {
- // Flash is not ready for taking a picture
- return;
- }
-
- // In touch UI we will get two ECamCmdSelfTimerActivate commands
- // immediately then the user touches the left softkey to activate
- // self-timer. We need to ignore the second one to enable the counter
- // to count down properly.
-
- // only start countdown if there is space to save image
- if ( CheckMemoryL() )
- {
- if ( iMode != ECamControllerVideo )
- {
- InitCaptureCountL();
- }
- // Start capture operation NOW
- iSelfTimer->StartSelfTimer();
-
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if (toolbar)
- {
- toolbar->SetToolbarVisibility( EFalse );
- }
- }
-
- iPreventActivePaletteDisplay = ETrue;
- SetActivePaletteVisibility( EFalse );
-
- // Update CBA
- if ( iSelfTimer && iSelfTimer->IsActive() )
- {
- UpdateCba();
- }
- }
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSelfTimerCancel:
- {
- // Called when the user clicks "Cancel" to leave self-timer mode
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSettings:
- {
- // Turn off the courtesy timer if its active so that the softkeys
- // will remain active
- if( iCourtesyTimer )
- {
- iCourtesyTimer->Cancel();
- }
-
- iReturnedFromPlugin = EFalse;
- iSettingsPluginLaunched = ETrue;
- SetActivePaletteVisibility( EFalse );
- CCamViewBase* precapView = NULL;
- if ( iView == iStillCaptureView ||
- iView == iVideoCaptureView )
- {
- precapView = static_cast<CCamViewBase*>( iView );
- __ASSERT_DEBUG(precapView, CamPanic(ECamPanicNullPointer));
- precapView->BlankSoftkeysL();
- }
- iTargetViewState = ECamViewStateSettings;
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if ( toolbar )
- {
- toolbar->SetToolbarVisibility( EFalse );
- }
- }
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSelect:
- {
- PRINT( _L("Camera => CCamAppUi::HandleCommandL ECamCmdSelect"));
- if ( iEikonEnv->StartedAsServerApp() )
- {
- const TDesC& name( iController.CurrentFullFileName() );
-
- PRINT1( _L("Camera => CCamAppUi::HandleCommandL ECamCmdSelect %S"), &name )
- iEmbeddedObserver->FileCompleteL( name );
- iController.EnterShutdownMode( ETrue );
- }
-/*#ifndef __WINS__
- else if ( iSendFileInCall )
- {
- PRINT( _L("CCamAppUi::HandleCommandL SendMedia file") )
- // handle in-call send interaction
-
- // Sending of captured media file and to return to call view after sending
- BringPhoneAppToForeGroundL();
- DoInCallSendL();
- HideTaskL( ETrue ); // otherwise camera would show in "Active Applications"
- iPretendExit = ETrue; // we are basicly in a "pretended exit" state
- //BringPhoneAppToForeGroundL();
- }
-#endif*/
- else
- {
- // ACS What do we need to do here? Call internal exit?
- // this will exit when any current process completes
- iController.EnterShutdownMode( EFalse );
- }
- }
- break;
- // -----------------------------------------------------
- case EAknSoftkeyEmpty: // Must handle this key, but do nothing
- break;
- // -----------------------------------------------------
- case ECamCmdPhotos:
- {
- iController.ReleaseCamera();
- TUid msgUidLastModified(TUid::Uid(KGlxActivationCmdShowLastModified));
- TUid msgUidCameraAlbum(TUid::Uid(KGlxActivationCameraAlbum));
- TApaTaskList apaTaskList( CCoeEnv::Static()->WsSession() );
- TApaTask apaTask = apaTaskList.FindApp( TUid::Uid( KGlxGalleryApplicationUid) );
-
- TBuf8<100> buffer;
- RDesWriteStream stream( buffer );
- CleanupClosePushL( stream );
- stream.Open( buffer );
-
-
- if ( ECamViewStatePreCapture == iViewState )
- {
- stream << msgUidCameraAlbum;
- }
- else
- {
- stream << msgUidLastModified;
- }
- stream.CommitL();
-
- //Hide fixed toolbar before calling to start photos.
- if ( iController.IsTouchScreenSupported() &&
- IsSecondCameraEnabled() &&
- iViewState == ECamViewStatePreCapture )
- {
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- if ( fixedToolbar )
- {
- fixedToolbar->SetToolbarVisibility( EFalse );
- }
- //Bitmap mode's VF consumes much of CPU in second camera, stop VF in advance to accelerate switching to photos.
- iController.StopViewFinder();
- }
-
- if ( apaTask.Exists() )
- {
- // sending APA task message
- apaTask.SendMessage( TUid::Uid( KGlxActivationCmdShowLastModified ),
- buffer );
- }
- else // Photos Application is not running
- {
- StartAppCmdLineL( buffer );
- }
- CleanupStack::PopAndDestroy( &stream );
- }
- break;
- // -----------------------------------------------------
- // This should only be available when time lapse is not supported
- // so the current mode should be still or multi
- case ECamCmdToggleMulti:
- {
- if ( iImageMode == ECamImageCaptureSingle )
- {
- TRAPD( ignore, SwitchStillCaptureModeL( ECamImageCaptureBurst, ETrue ) );
- if ( ignore )
- {
- // do nothing
- }
- }
- else if ( iImageMode == ECamImageCaptureBurst )
- {
- SwitchStillCaptureModeL( ECamImageCaptureSingle, ETrue );
- }
- else
- {
- // Lint
- }
-
- // Update timelapse interval
- iController.SetTimeLapseInterval( 0 );
-
- // stop and start the viewfinder in order to update the settings
- iController.ExitViewfinderMode( ECamControllerImage );
- iController.EnterViewfinderMode( ECamControllerImage );
-
- }
- break;
- // -----------------------------------------------------
- // Toggle facetracking setting
- case ECamCmdToggleFacetracking:
- {
- if ( iController.UiConfigManagerPtr()->IsFaceTrackingSupported() )
- {
- if ( iController.IntegerSettingValue( ECamSettingItemFaceTracking ) == ECamSettOn )
- {
- iController.SetIntegerSettingValueL(
- ECamSettingItemFaceTracking,
- ECamSettOff );
- }
- else
- {
- iController.SetIntegerSettingValueL(
- ECamSettingItemFaceTracking,
- ECamSettOn );
- }
- iController.TryAFRequest( ECamRequestCancelAutofocus );
- }
- }
- break;
- // -----------------------------------------------------
- // Switch to single capture
- case ECamCmdSingleCapture:
- {
- SwitchStillCaptureModeL( ECamImageCaptureSingle, ETrue );
- }
- break;
- // -----------------------------------------------------
- // Activate burst mode
- case ECamCmdSequence:
- {
- SwitchStillCaptureModeL( ECamImageCaptureBurst, ETrue );
- }
- break;
- // -----------------------------------------------------
- // Activate time lapse mode
- case ECamCmdTimeLapse:
- {
- SwitchStillCaptureModeL( ECamImageCaptureTimeLapse, ETrue );
- }
- break;
- // -----------------------------------------------------
- case ECamCmdOpenPhoto:
- {
- if(iViewState == ECamViewStateBurstThumbnail )
- {
- iTargetViewState = ECamViewStatePostCapture;
- TrySwitchViewL();
- }
- }
- break;
- // -----------------------------------------------------
- case ECamCmdUserScene:
- {
- iTargetViewState = ECamViewStateUserSceneSetup;
- TrySwitchViewL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdPlay:
- {
- PRINT1(_L("Camera <=> CCamAppUi::HandleCommandL. case ECamCmdPlay, iVideoClipPlayInProgress:%d"), iVideoClipPlayInProgress);
-
- if ( !iVideoClipPlayInProgress)
- {
- TInt err;
- TDataType dataType( K3gpVideoMimeType );
-#ifndef __WINS__
- TCamVideoFileType fileType = static_cast< TCamVideoFileType >
- ( iController.IntegerSettingValue( ECamSettingItemVideoFileType ) );
- if ( fileType == ECamVideoMpeg4 )
- {
- PRINT(_L("Camera <> CCamAppUi::HandleCommandL. case ECamCmdPlay D"));
- dataType=TDataType( KMp4VideoMimeType );
- }
-#endif
-
- SetEmbedding( ETrue );
-
- err = iDocHandler->OpenFileEmbeddedL( iController.CurrentFullFileName(), dataType );
- PRINT1(_L("Camera <=> CCamAppUi::HandleCommandL. iDocHandler ->OpenFileEmbeddedL err:%d"), err);
-
- if ( KErrNone == err)
- {
- iVideoClipPlayInProgress = ETrue;
- }
- }
-
- }
- break;
- // -----------------------------------------------------
- case ECamCmdSwitchCamera:
- {
- PRINT( _L("Camera => CCamAppUi::HandleCommandL ECamCmdSwitchCamera" ))
-
- // By now it safe to assume that we are no longer returning from a pretended exit.
- PRINT( _L("Camera <> Set iReturningFromPretendExit = EFalse") )
- iReturningFromPretendExit = EFalse;
-
- //If modechange sequence going on ignore switching...
- if( iController.CaptureModeTransitionInProgress() ||
- iController.CaptureState() != ECamCaptureOff ||
- iController.IsSavingInProgress() )
- {
- PRINT( _L("Camera <= CCamAppUi::HandleCommandL STOP ECamCmdSwitchCamera" ))
- iController.SetCameraSwitchRequired( ESwitchDone );
- break;
- }
-
- // Hide fixed toolbar and softkeys to prevent blinking
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- if ( fixedToolbar )
- {
- fixedToolbar->SetToolbarVisibility( EFalse );
- }
- }
- CCamViewBase* precapView = static_cast<CCamViewBase*>( iView );
- __ASSERT_DEBUG( precapView, CamPanic( ECamPanicNullPointer ));
- if ( precapView )
- {
- precapView->ViewCba()->MakeVisible( EFalse );
- }
-
- PRINT( _L("Camera <> CCamAppUi::HandleCommandL continue ECamCmdSwitchCamera" ))
-
- if ( ActiveCamera() == ECamActiveCameraPrimary && IsBurstEnabled() )
- {
- SwitchStillCaptureModeL( ECamImageCaptureSingle, EFalse );
- }
-
- TInt primaryOrientation = EAppUiOrientationUnspecified;
- TInt secondaryOrientation = EAppUiOrientationUnspecified;
- TCamPsiKey orientation = IsQwerty2ndCamera( ETrue )?
- ECamPsiPrimaryCameraOrientation:
- ECamPsiSecondaryCameraOrientation;
- if ( !CamUtility::GetPsiInt( ECamPsiPrimaryCameraOrientation,
- primaryOrientation ) &&
- !CamUtility::GetPsiInt( orientation,
- secondaryOrientation ) )
- {
- if ( primaryOrientation != secondaryOrientation || IsQwerty2ndCamera() )
- {
- if( ( !IsSecondCameraEnabled() ||
- iController.CameraSwitchQueued() == ESwitchSecondaryOrientation ) &&
- !IsQwerty2ndCamera() )
- {
- PRINT( _L("Camera => CCamAppUi::HandleCommandL ECamCmdSwitchCamera 2ndary portrait" ))
- iCamOrientation = ECamOrientationPortrait;
- SetOrientationL( static_cast<TAppUiOrientation>( secondaryOrientation ) );
-
- if ( iController.IsTouchScreenSupported() )
- {
- iStillCaptureView->CreateAndSetToolbarL( R_CAM_STILL_PRECAPTURE_TOOLBAR_PORTRAIT );
- iVideoCaptureView->CreateAndSetToolbarL( R_CAM_VIDEO_PRECAPTURE_TOOLBAR_PORTRAIT );
- }
-
- StatusPane()->MakeVisible( ETrue );
- }
- else
- {
- PRINT( _L("Camera => CCamAppUi::HandleCommandL ECamCmdSwitchCamera 1ary or 2nd landscape" ))
- iCamOrientation = (iSoftkeyPosition == ECamHandLeft)
- ? ECamOrientationCamcorderLeft
- : ECamOrientationCamcorder;
-
- SetOrientationL(
- static_cast<TAppUiOrientation>( primaryOrientation ) );
-
- if ( iController.IsTouchScreenSupported() )
- {
- if ( ( !IsSecondCameraEnabled() || iController.CameraSwitchQueued() == ESwitchSecondaryOrientation ) &&
- IsQwerty2ndCamera() )
- {
- iStillCaptureView->CreateAndSetToolbarL(
- R_CAM_STILL_PRECAPTURE_TOOLBAR_LANDSCAPE );
- iVideoCaptureView->CreateAndSetToolbarL(
- R_CAM_VIDEO_PRECAPTURE_TOOLBAR_LANDSCAPE );
- }
- else
- {
- iStillCaptureView->CreateAndSetToolbarL(
- R_CAM_STILL_PRECAPTURE_TOOLBAR );
- if(iController.UiConfigManagerPtr()->IsXenonFlashSupported())
- {
- iVideoCaptureView->CreateAndSetToolbarL(R_CAM_VIDEO_PRECAPTURE_TOOLBAR);
- iVideoCaptureView->UpdateToolbarIconsL();
- }
- else
- {
- iVideoCaptureView->CreateAndSetToolbarL(R_CAM_VIDEO_PRECAPTURE_TOOLBAR_VIDEOLIGHT);
- }
- }
- }
-
- StatusPane()->MakeVisible( EFalse );
- }
- UpdateNaviModelsL();
-
- //Reset zoom when changing cameras
- ZoomPane()->ResetZoomTo1x();
-
- TInt rl( 0 );
- for ( rl = 0; rl < iResourceLoaders.Count(); rl++ )
- {
- iResourceLoaders[rl]->ReloadResourceDataL();
- }
-
- iCamSidePane->UpdateLayout();
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL( ETrue );
- iController.SwitchCameraL();
- }
- }
- }
- break;
- // -----------------------------------------------------
- case EAknCmdHelp:
- {
- LaunchHelpL();
- }
- break;
- // -----------------------------------------------------
- case ECamCmdRedrawScreen:
- {
- if( !iProcessingScreenRedraw && iView )
- {
- iProcessingScreenRedraw = ETrue;
- iView->HandleCommandL(ECamCmdRedrawScreen);
- iProcessingScreenRedraw = EFalse;
- }
- }
- break;
- // -----------------------------------------------------
- case ECamCmdRedrawVideoTime:
- {
- if( !iProcessingScreenRedraw && iView )
- {
- iProcessingScreenRedraw = ETrue;
- iView->HandleCommandL(ECamCmdRedrawVideoTime);
- iProcessingScreenRedraw = EFalse;
- }
- }
- break;
- // -----------------------------------------------------
- case ECamCmdRedrawZoom:
- {
- if( !iProcessingScreenRedraw && iView )
- {
- iProcessingScreenRedraw = ETrue;
- iView->HandleCommandL(ECamCmdRedrawZoom);
- iProcessingScreenRedraw = EFalse;
- }
- }
- break;
- // -----------------------------------------------------
- case ECamCmdShootSetup: // fall through
- case ECamCmdFlash: // fall through
- case ECamCmdAddAudio: // fall through
- case ECamCmdEdit: // fall through
- case ECamCmdPrint: // fall through
- case ECamCmdSendToCallerMultimedia: // fall through
- case ECamCmdRenameImage: // fall through
- case ECamCmdRenameVideo: // fall through
- {
- User::Leave( KErrNotSupported );
- }
- break;
-
- // -----------------------------------------------------
- case ECamCmdViewfinderGrid:
- {
- SelectViewFinderGridSettingL();
- break;
- }
-
- // -----------------------------------------------------
- case EAknCmdTaskSwapper:
- /*
- * MSK: Active Applications
- * This command is actually handled by Avkon FW
- * Applications should not handle this
- */
- break;
- //-------------------------------------------------------
- default:
- {
- PRINT( _L("Camera <> CCamAppUi::HandleCommandL does nothing") )
- }
- break;
- }
- // -----------------------------------------------------
- PRINT( _L("Camera <= CCamAppUi::HandleCommandL") )
- }
-
-// ===========================================================================
-// From MCamCameraObserver
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-
-void
-CCamAppUi::HandleCameraEventL( TInt /*aStatus*/,
- TCamCameraEventId aEventId,
- TAny* /*aEventData //= NULL */
- )
- {
- switch( aEventId )
- {
- // -----------------------------------------------------
- case ECamCameraEventVfStart: // ECamEventViewFinderStarted
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleCameraEventL ECamCameraEventVfStart" ) )
- if( iScreenClearer )
- {
- delete iScreenClearer;
- iScreenClearer = NULL;
- }
-#ifdef CAMERAAPP_DELAYED_POSTCAPTURE_CREATION
-
- // Construct postcapture views when idle
- // or latest when view switch is requested
- StartPostCapIdleL();
-#else
- TRAPD( err, ConstructPostCaptureViewsL() )
- if ( KErrNone != err )
- {
- TRAP_IGNORE( HandleCameraErrorL( err ) );
-
- // if embedded need to notify embeddee
- if ( iEikonEnv->StartedAsServerApp() )
- {
- iEmbeddedObserver->AbortL();
- }
- else
- {
- CloseAppL();
- }
- }
-#endif
- // Only show the Active Palette once viewfinding has started
- iPreventActivePaletteDisplay = EFalse;
-
- // For forced focus scenes, do one autofocus request once vf starts if needed
- if( iController.UiConfigManagerPtr()->IsAutoFocusSupported() )
- {
- if( iController.CurrentSceneHasForcedFocus() )
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleCameraEventL, TryAFRequest( ECamRequestCancelAutofocus )") );
- //Only autofocuscancel will set AFrange which is needed for forced focus cases
- iController.TryAFRequest( ECamRequestCancelAutofocus );
- }
- else // For scenes with reticule cancel the autofocus, which sets the focus correctly
- {
- if ( iController.UiConfigManagerPtr()->IsAutofocusSetInHyperfocalAtStartup() )
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleCameraEventL, TryAFRequest( ECamRequestCancelAutofocus )") );
- iController.TryAFRequest( ECamRequestCancelAutofocus );
- }
- else if ( !iFirstVFStart )
- {
- iController.TryAFRequest( ECamRequestCancelAutofocus );
- }
- }
- }
- else
- {
- SetToolbarVisibility();
- }
- iFirstVFStart = EFalse;
-
- PRINT( _L( "Camera <> CCamAppUi::HandleCameraEventL updating CBA") );
- UpdateCba();
- break;
- }
- // -----------------------------------------------------
- case ECamCameraEventVideoAsyncStop: // Audio and video streams are stopped
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleCameraEventL ECamCameraEventVideoAsyncStop" ) )
- // Stop View finder if not needed to left run
- if ( iController.IntegerSettingValue( ECamSettingItemVideoShowCapturedVideo ) == ECamSettOn )
- {
- iController.StopViewFinderEcam();
- }
- // Check if currently selected storagemedia has available memory for next capturing
- // unless incoming call has stopped recording
- if ( !iController.InCallOrRinging() && !iController.InVideocallOrRinging() )
- {
- CheckMemoryAvailableForCapturing();
- }
- break;
- }
- // -----------------------------------------------------
- case ECamCameraEventPowerOnRequested:
- case ECamCameraEventReserveRequested:
- {
- // event only send if UIOrientationOverride feature is supported,
- // in that case UI construction is divided into two parts, call here
- // to complete the construction if in first startup
- if( iFirstBoot )
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleCameraEventL ECamCameraEventReserveRequested/ECamCameraEventPowerOnRequested" ) )
- // in embedded mode appui construct timer started already
- if ( !IsEmbedded() )
- {
- if ( iWaitTimer->IsActive() )
- {
- PRINT( _L( "Camera <> timer already active" ) )
- iWaitTimer->Cancel();
- }
- PRINT( _L( "Camera <> start the appui construct timer" ) )
- iWaitTimer->Start( 0, 0, TCallBack( AppUIConstructCallbackL, this ) );
- }
- }
- else
- {
- //load settings in case they were changed via GS
- iController.LoadStaticSettingsL( IsEmbedded() );
- if ( iController.CurrentMode() == ECamControllerImage
- || iController.TargetMode() == ECamControllerImage )
- {
- iStillCaptureView->UpdateToolbarIconsL();
- }
-
- // and check the availability of the memory to be used
- iController.CheckMemoryToUseL();
- }
- break;
- }
- default:
- {
- break;
- }
-
- }
-
- }
-// ===========================================================================
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::HandleControllerEventL
-// Handle controller events
-// -----------------------------------------------------------------------------
-//
-void
-CCamAppUi::HandleControllerEventL( TCamControllerEvent aEvent,
- TInt aError )
- {
- PRINT1( _L( "Camera => CCamAppUi::HandleControllerEventL() %d" ), aEvent );
- switch ( aEvent )
- {
- // -----------------------------------------------------
- case ECamEventExitRequested:
- {
- PRINT( _L( "Camera <> case ECamEventExitRequested" ) )
- if ( SettingsLaunchedFromCamera() )
- {
- SettingsPluginExitedL( ECameraCompleteExit );
- }
- if ( iWaitTimer->IsActive() )
- {
- PRINT( _L( "Camera <> timer already active" ) )
- iWaitTimer->Cancel();
- }
- PRINT( _L( "Camera <> start the exit timer" ) )
- iWaitTimer->Start( 0, 0, TCallBack( CallExit, this ) );
- break;
- }
- // -----------------------------------------------------
- case ECamEventOperationStateChanged:
- {
- PRINT( _L("Camera <> case ECamEventOperationStateChanged") )
-
- switch ( iController.CurrentOperation() )
- {
- case ECamFocusing:
- UpdateCba();
- break;
- case ECamCapturing:
- iPreventActivePaletteDisplay = ETrue;
- SetActivePaletteVisibility( EFalse );
- //Image capture has started. If postcaptureview is enabled assume that postcapture
- //is next view. Thus if camera goes to background and comes back to foreground don't
- //start viewfinder because it is not needed in postcapture view. If image capture fails
- //or is canceled enabling viewfinder is possible.
- if ( iView && ( iStillCaptureView == iView || iVideoCaptureView == iView )
- && ShowPostCaptureView() )
- {
- SetAssumePostCaptureView( ETrue );
- }
- break;
- case ECamStandby:
- //DismissMemoryNote();
- HandleStandbyEventL( aError );
- break;
- case ECamNoOperation:
- {
- if( iPreventActivePaletteDisplay )
- {
- iPreventActivePaletteDisplay = EFalse;
- }
- }
- break;
- default:
- break;
- }
- break;
- }
- // -----------------------------------------------------
- case ECamEventRecordComplete:
- {
- PRINT( _L("Camera <> case ECamEventRecordComplete") )
- // Dismiss the saving video clip wait dialog
- if ( iWaitDialog )
- {
- iWaitDialog->ProcessFinishedL();
- //iWaitDialog = NULL; //ProcessFinishedL() will make iWaitDialog NULL asynchronously
- }
-
- // switch on active palette recording is complete
- if( ECamOrientationCamcorder == iCamOrientation
- || ECamOrientationCamcorderLeft == iCamOrientation
- || ECamOrientationPortrait == iCamOrientation )
- {
- iPreventActivePaletteDisplay = EFalse;
- if ( DrawPreCaptureCourtesyUI() )
- {
- SetActivePaletteVisibility( ETrue );
- }
- }
- if ( iController.InCallOrRinging() &&
- iController.IntegerSettingValue( ECamSettingItemVideoShowCapturedVideo ) == ECamSettOn )
- {
- // when video recording is stopped by incoming call
- // and post capture view is turned on, post capture timer
- // should only start after some user interaction
- iDelayVideoPostCaptureTimeout = ETrue;
- }
- } //lint -fallthrough to switch to post capture view
- // -----------------------------------------------------
- case ECamEventSnapshotReady:
- {
- PRINT( _L("Camera <> case ECamEventSnapshotReady") )
-
- // If burst mode is active, do nothing until the whole burst completes
- if ( IsBurstEnabled() )
- {
- // handle error if necessary
- HandleCameraErrorL( aError );
-
- // Check if there was an error, and there were no successful
- // captures. In this case, we will be staying in pre-capture view
- // so allow the active palette to be displayed again
- if ( aError != KErrNone &&
- iController.CurrentItemCount() == 0 )
- {
- iPreventActivePaletteDisplay = EFalse;
- SetActivePaletteVisibility( ETrue );
- }
-
- break;
- }
- // if the MMC has been removed while recording video to it,
- // don't go to post-capture view
- else if ( iMode == ECamControllerVideo
- && iController.IntegerSettingValueUnfiltered( ECamSettingItemVideoMediaStorage )
- == ECamMediaStorageCard
- && ( aError != KErrNone && aError != KErrDiskFull )
- && CamUtility::MemoryCardStatus() != ECamMemoryCardInserted )
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- // if USB was connected while MMC or mass storage was used as storage,
- // don't go to postcapture
- else if ( CamUtility::IsUsbActive() &&
- ( iController.CurrentStorage() == ECamMediaStorageCard ||
- iController.CurrentStorage() == ECamMediaStorageMassStorage ) )
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- else if ( iController.IsCaptureStoppedForUsb() &&
- ( iController.CurrentStorage() == ECamMediaStorageCard ||
- iController.CurrentStorage() == ECamMediaStorageMassStorage ) )
- {
- PRINT( _L("Camera <> HandleControllerEventL ECamEventSnapshotReady: video stopped for usb" ) );
- iTargetViewState = ECamViewStatePreCapture;
- }
- // If there was an error (we have no snap), we must stay in pre-capture view
- else if ( aError )
- {
- iPreventActivePaletteDisplay = EFalse;
- SetActivePaletteVisibility( ETrue );
- iController.SetCaptureKeyPressedWhileImageSaving(EFalse);
- // To be able to continue viewfinding
- iController.FreezeViewFinder( EFalse );
-
- iTargetViewState = ECamViewStatePreCapture;
- }
- // If the user has the show captured image setting turned on.
- // switch to post capture view (Except in burst mode)
- else if ( ShowPostCaptureView() )
- {
- if( iController.CaptureKeyPressedWhileImageSaving() )
- {
- PRINT( _L("Camera <> HandleControllerEventL ECamEventSnapshotReady - Capture key pressed while saving ") )
- iController.SetCaptureKeyPressedWhileImageSaving(EFalse);
- iTargetViewState = ECamViewStatePreCapture;
- SetSuppressUIRiseOnViewfinderStart( ETrue );
- // To be able to continue viewfinding
- iController.FreezeViewFinder( EFalse );
- }
- else
- {
- if ( !CamUtility::IsBatteryPowerEmpty() )
- {
- if ( iLensCoverExit )
- {
- PRINT (_L ("Camera <> set target to precapture if Battery not Empty") );
- iTargetViewState = ECamViewStatePreCapture;
- }
- else
- {
- PRINT (_L ("Camera <> set target to postcapture if Battery not Empty") );
- iTargetViewState = ECamViewStatePostCapture;
-
- //We need to blank the precapture view CBA here to prevent
- //blinking when changing back to precapture from postcapture
- UpdateCba();
- }
- }
- }
- if ( iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- // This is set to false when StartCaptureL() is run
- iSelfTimedCapture = ETrue;
- }
- }
-
- // Always switch to post capture view if self timer is enabled
- else if ( iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- iTargetViewState = ECamViewStatePostCapture;
- // ensure that the view doesn't switch to precapture view when
- // ECamEventCaptureComplete is received
- iSelfTimedCapture = ETrue;
- }
- // Otherwise,
- // if not showing captured images go straight to pre capture view
- // (Except in burst mode)
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- SetSuppressUIRiseOnViewfinderStart( ETrue );
- }
-
- // The app is not going to try to switch to post capture view at all
- // so the array needs to be released now.
- if ( iTargetViewState == ECamViewStatePreCapture )
- {
- iController.ReleaseArray();
- }
-
- // If no view switch is needed make sure the cba is not disabled
- // and the self timer is switched off
- if ( ViewSwitchRequired() != ECamViewSwitch )
- {
- if ( iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- UpdateCba();
- }
- TrySwitchViewL();
-
- break;
- }
- // -----------------------------------------------------
- case ECamEventCaptureComplete:
- {
- PRINT( _L("Camera <> case ECamEventCaptureComplete") )
- // check if exit is required
- if ( iController.CheckExitStatus() )
- {
- PRINT( _L("Camera <> calling internal exit after checking exit status") )
- // The exit event is replacing the view switch,
- // so release the array now
- iController.ReleaseArray();
- InternalExitL();
- return;
- }
- if( ECamControllerImage == iMode )
- {
- switch( iImageMode )
- {
- // -----------------------------
- // If burst mode is active,
- // only switch view when the whole burst completes
- case ECamImageCaptureBurst:
- {
- // If there are images to show (i.e. user has not cancelled),
- // switch to thumbnail view. "Show captured images" setting has no
- // effect in burst mode
-
- if ( iController.CurrentItemCount() != 0 && !iController.IsCaptureStoppedForUsb() )
- {
- iTargetViewState = ECamViewStateBurstThumbnail;
-
- // Normally iPreventActivePaletteDisplay is set to EFalse when
- // postcture AP is shown, but in burst case that doesn't
- // necessarily happen so do this here.
- iPreventActivePaletteDisplay = EFalse;
- }
- // Otherwise, no images to show. Go straight to pre capture view.
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- // The app is not going to try to switch to post capture view at
- // all. So the array needs to be released now.
- iController.ReleaseArray();
- iController.StopViewFinder();
- iController.StartViewFinder();
- }
- // If no view switch is needed make sure the cba is not disabled
- // and the self timer is switched off
- if ( ViewSwitchRequired() != ECamViewSwitch )
- {
- if ( iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- UpdateCba();
- }
-
- TrySwitchViewL();
- break;
- }
- // -----------------------------
- case ECamImageCaptureTimeLapse:
- {
- iTargetViewState = ECamViewStatePostCapture;
- TrySwitchViewL();
- break;
- }
- // -----------------------------
- case ECamImageCaptureSingle:
- {
- PRINT( _L("Camera <> case ECamImageCaptureSingle") )
- if( aError != KErrNone )
- {
- PRINT( _L("Camera <> error received") )
- // handle error if necessary
- HandleCameraErrorL( aError );
-
- iPreventActivePaletteDisplay = EFalse;
- SetActivePaletteVisibility( ETrue );
-
- if (iCamOrientation == ECamOrientationPortrait)
- {
- iTargetViewState = ECamViewStatePrePortraitCapture;
- }
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- TrySwitchViewL();
- }
- else
- {
- PRINT( _L("Camera <> no errors in") )
- if ( !ShowPostCaptureView() &&
- iInSelfTimerMode == ECamSelfTimerDisabled &&
- !IsSelfTimedCapture() )
- {
- PRINT( _L("Camera <> update cba") )
- UpdateCba();
- if( ActiveCamera() != ECamActiveCameraPrimary )
- {
- PRINT( _L("Camera <> release array") )
- iController.ReleaseArray();
- }
- iPreventActivePaletteDisplay = EFalse;
- SetActivePaletteVisibility( ETrue );
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- if ( fixedToolbar )
- {
- fixedToolbar->SetToolbarVisibility( ETrue );
- }
- }
- HandleCommandL( ECamCmdRaiseCourtesyUI );
- if ( IsSecondCameraEnabled() || IsEmbedded() )
- {
- //For secondary or embedded camera the viewfinder
- //was stopped. Restart it now.
- iController.StartViewFinder();
- }
- }
- else if ( !ShowPostCaptureView() &&
- iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- }
- break;
- }
- // -----------------------------
- default:
- {
- // do nothing
- break;
- }
- // -----------------------------
- }
- }
- // reset the selftimed capture flag for next capture
- break;
- }
- // -----------------------------
- case ECamEventControllerReady:
- {
- if ( iView )
- {
- if ( iFirstBoot && IsSecondCameraEnabled()
- && IsQwerty2ndCamera()
- && CurrentViewState() != ECamViewStateStandby )
- {
- PRINT( _L("Camera <> Booting directly to the secondary camera") )
- // Main camera settings are loades as default.
- // Need to be updated to secondary
- iStillCaptureView->CreateAndSetToolbarL(
- R_CAM_STILL_PRECAPTURE_TOOLBAR_LANDSCAPE );
- iVideoCaptureView->CreateAndSetToolbarL(
- R_CAM_VIDEO_PRECAPTURE_TOOLBAR_LANDSCAPE );
- // Add toolbar observer. Needed in first boot to secondary
- SetPreCaptureMode( ECamPreCapViewfinder );
- }
- iFirstBoot = EFalse;
- // Do not show zoom pane when toolbar extension is visible
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if ( toolbar )
- {
- CAknToolbarExtension* toolbarextension =
- toolbar->ToolbarExtension();
- if ( toolbarextension && !toolbarextension->IsShown() )
- {
- iView->HandleCommandL( ECamCmdPopUpMenuZoom );
- }
- }
- }
- }
- //Remaining recording time counter update needed when recording has stopped and
- //show last captured video setting is off.
- if( iNaviPaneCounterControl && !ShowPostCaptureView() && iMode == ECamControllerVideo )
- {
- iNaviPaneCounterControl->ForceNaviPaneUpdate();
- }
- break;
- }
- // -----------------------------
- // -----------------------------------------------------
- // The MMC is removed
- case ECamEventMemoryCardHotswap:
- {
- TBool mmcInUse = EFalse;
-
- TCamMediaStorage currentLocation =
- static_cast<TCamMediaStorage>(
- iController.IntegerSettingValueUnfiltered(
- ECamSettingItemVideoMediaStorage ) );
-
- // if app is in back show MMC note on returning to foreground
- PRINT( _L("Camera => CCamAppUi::HandleControllerEventL ECamEventMMCHotswap") )
- if ( currentLocation == ECamMediaStorageCard )
- {
- if ( AppInBackground( ETrue ) && iReturnFromBackground )
- {
- PRINT( _L("Camera => CCamAppUi::HandleControllerEventL ECamEventMMCHotswap bckgrn") )
- //iMMCRemoveNoteRequired = ETrue;
-
- // Force use of phone memory.
- // with multiple drive support,
- // this actually uses the internal mass memory
- iController.UsePhoneMemoryL();
- }
- else // show note on next capture attempt
- {
- PRINT( _L("Camera => CCamAppUi::HandleControllerEventL ECamEventMMCHotswap not bckgrnd") )
- iMMCRemoveNoteRequiredOnCapture = ETrue;
-
- // force update of navi pane
- iNaviPaneCounterControl->ForceNaviPaneUpdate();
- if ( IsDirectViewfinderActive() )
- {
- TRAP_IGNORE( HandleCommandL( ECamCmdRedrawScreen ) );
- }
- }
- }
-
- // if the current mode is video, and the storage location is MMC
- if ( ECamControllerVideo == iMode )
- {
- mmcInUse = (ECamMediaStorageCard == currentLocation);
- }
- // if the current mode is still, and the storage location is MMC
- else
- {
- mmcInUse = ( ECamMediaStorageCard ==
- iController.IntegerSettingValueUnfiltered(
- ECamSettingItemPhotoMediaStorage ) );
- }
-
- // If a post capture view is active, and the current files
- // are saved to the MMC, switch to pre capture view
- if ( mmcInUse
- && ( ECamViewStateBurstThumbnail == iViewState
- || ECamViewStatePostCapture == iViewState )
- )
- {
- if (iCamOrientation == ECamOrientationPortrait)
- {
- iTargetViewState = ECamViewStatePrePortraitCapture;
- }
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- TrySwitchViewL();
- }
- break;
- }
- // -----------------------------------------------------
- case ECamEventCounterUpdated:
- break;
- // -----------------------------------------------------
- case ECamEventVideoPauseTimeout:
- {
- PRINT( _L( "Camera <> case ECamEventVideoPauseTimeout" ) )
- EndCapture();
- break;
- }
- // -----------------------------------------------------
- case ECamEventSaveLocationChanged:
- {
- PRINT( _L( "Camera <> case ECamEventSaveLocationChanged" ) )
- DismissMemoryNoteL();
- if ( IsMMCRemovedNotePending() &&
- ( CamUtility::MemoryCardStatus() != ECamMemoryCardNotInserted ) )
- {
- iMMCRemoveNoteRequired = EFalse;
- iMMCRemoveNoteRequiredOnCapture = EFalse;
- }
- if ( IsDirectViewfinderActive() )
- {
- TRAP_IGNORE( HandleCommandL( ECamCmdRedrawScreen ) );
- }
- if ( ECamViewStatePostCapture == iViewState )
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- break;
- }
-
- // -----------------------------------------------------
- case ECamEventSaveComplete:
- {
- PRINT( _L( "Camera <> case ECamEventSaveComplete" ) )
- // Check if currently selected storagemedia has available memory for next capturing
- // unless saving just started
- if( !iController.IsSaveStarted() )
- {
- CheckMemoryAvailableForCapturing();
- }
- if ( ECamImageCaptureSingle == iImageMode )
- {
- if( iController.CaptureKeyPressedWhileImageSaving() &&
- ShowPostCaptureView())
- {
- PRINT( _L("Camera <> HandleControllerEventL ECamEventSaveComplete - Capture key pressed while saving ") )
- iController.SetCaptureKeyPressedWhileImageSaving(EFalse);
- if (iCamOrientation == ECamOrientationPortrait)
- {
- iTargetViewState = ECamViewStatePrePortraitCapture;
- }
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- TrySwitchViewL();
- }
- }
- break;
- }
- // -----------------------------------------------------
- case ECamEventMediaFileChanged:
- {
-
- if ( iController.UiConfigManagerPtr() &&
- !iController.UiConfigManagerPtr()->IsLocationSupported() )
- {
- PRINT2( _L( "Camera <> CCamAppU, ECamEventMediaFileChanged, mode [%s], targetmode[%s]" ),
- KCamModeNames[ iController.CurrentMode() ],
- KCamModeNames[ iController.TargetMode() ] )
-
- if( iEndKeyPressed )
- {
- if ( iController.CurrentMode() == ECamControllerShutdown ||
- iController.IsInShutdownMode() )
- {
- PRINT( _L( "Camera <> ECamEventMediaFileChanged, notify shutdown" ) )
- HandleControllerEventL( ECamEventExitRequested, KErrNone );
- }
- }
- }
- break;
- }
- // -----------------------------------------------------
- case ECamEventCameraChanged:
- {
- PRINT( _L("Camera <> case ECamEventCameraChanged"))
- // exit standby and use the new camera
- if( iView)
- {
- iView->HandleCommandL( ECamCmdExitStandby );
- }
- break;
- }
- // -----------------------------------------------------
- case ECamEventInvalidMemoryCard:
- {
- PRINT( _L( "Camera <> case ECamEventInvalidMemoryCard" ) );
- ShowErrorNoteL( ECamMemoryStatusCardNotInserted );
- break;
- }
- // -----------------------------------------------------
- case ECamEventRestoreCameraSettings:
- {
- PRINT( _L( "Camera <> case ECamEventRestoreCameraSettings" ) );
- if ( SettingsLaunchedFromCamera() )
- {
- iSettingsPluginLaunched = EFalse;
- iReturnedFromPlugin = ETrue;
- }
- iTargetViewState = ECamViewStatePreCapture;
-
- // get start up mode from settings
- if ( StartupMode() == ECamStillCapture )
- {
- iMode = ECamControllerImage;
- iTargetMode = ECamControllerImage;
- SetDefaultViewL( *iStillCaptureView );
- }
- else
- {
- iMode = ECamControllerVideo;
- iTargetMode = ECamControllerVideo;
- SetDefaultViewL( *iVideoCaptureView );
- }
-
- TrySwitchViewL();
- // After restoring settings, still capture view should be active
- // -> Update all toolbar icons for still-capture view.
- iStillCaptureView->UpdateToolbarIconsL();
- break;
- }
- // -----------------------------------------------------
- case ECamEventCallStateChanged:
- SelfTimerEnableL( ECamSelfTimerDisabled );
- break;
- // -----------------------------------------------------
- default:
- break;
- // -----------------------------------------------------
- }
- PRINT( _L( "Camera: <= CCamAppUi::HandleControllerEventL()" ) );
- }
-
-// -----------------------------------------------------------------------------
-// HandleStandbyEventL
-// -----------------------------------------------------------------------------
-//
-void
-CCamAppUi::HandleStandbyEventL( TInt aStatus )
- {
- PRINT( _L( "Camera => CCamAppUi::HandleStandbyEventL") );
- if( !iPretendExit &&
- !AppInBackground( EFalse ) )
- {
- if( ECamViewStateStandby != iViewState )
- {
- DismissMemoryNoteL();
-
- if (iStartupLogoController)
- {
- iStartupLogoController->HideLogo();
- }
-
- if( IsInternalView( iViewState ) )
- {
-
- if ( aStatus != KErrInUse &&
- iPreCaptureMode == ECamPreCapCaptureSetup ||
- iPreCaptureMode == ECamPreCapSceneSetting
- || iPreCaptureMode == ECamPreCapGenericSetting
- )
- {
- // VF settings does not go to standby state, VF is stopped instead
- // Screen saver releases resources
- iViewFinderStopped = ETrue;
- PRINT( _L( "Camera <> CCamAppUi::HandleStandbyEventL: in one of settings view. Release camera") );
- iController.ReleaseCamera();
- //Draw black viewfinder area. Because camera is in internal viewstate view is valid.
- static_cast<CCamViewBase*>( iView )->HandleCommandL( ECamCmdRedrawScreen );
- }
- else
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleStandbyEventL: call iView->ExitAllModesL") );
- PRINT2( _L( "Camera <> CCamAppUi::HandleStandbyEventL: iView = 0x%x, iViewId = %d"), iView, iView->Id().iUid );
- // Exit any special modes.
- // If AppUI construction is not finished, do it first, otherwise
- // the view has not been created yet
- if ( iController.UiConfigManagerPtr() &&
- iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() &&
- !iUiConstructionComplete )
- {
- CompleteAppUIConstructionL();
- }
- else
- {
- if( iView)
- {
- CCamViewBase* view = dynamic_cast<CCamViewBase*>( iView );
- if( view )
- {
- view->ExitAllModesL();
- }
- }
- }
-
- }
- }
- // Not InternalView
- else
- {
- PRINT( _L( "Camera <= CCamAppUi::HandleStandbyEventL: Not internalView, standby ignored, return") );
- return;
- }
-
- // VF settings does not go to standby state, VF is stopped instead
- if ( aStatus == KErrInUse || iPreCaptureMode != ECamPreCapCaptureSetup &&
- iPreCaptureMode != ECamPreCapSceneSetting
- && iPreCaptureMode != ECamPreCapGenericSetting )
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleStandbyEventL: Set standby status..") );
- SetStandbyStatus( aStatus );
- if ( iController.InVideocallOrRinging() && iScreenClearer )
- {
- delete iScreenClearer;
- iScreenClearer = NULL;
- }
-
- PRINT( _L( "Camera <> CCamAppUi::HandleStandbyEventL: Send command ECamCmdGoToStandby..") );
- HandleCommandL( ECamCmdGoToStandby );
- }
- }
- else
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleStandbyEventL: Already in standby, ignored!") );
- }
- }
- else
- {
- PRINT( _L( "Camera <> CCamAppUi::HandleStandbyEventL: Camera already in background, no action..") );
- }
- PRINT( _L( "Camera <= CCamAppUi::HandleStandbyEventL") );
- }
-
-// -----------------------------------------------------------------------------
-// SetStandbyStatus
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::SetStandbyStatus( TInt aStatus )
- {
- PRINT1( _L( "Camera =><= CCamAppUi::SetStandbyStatus( %d )"), aStatus );
- iStandbyStatus = aStatus;
- }
-
-// -----------------------------------------------------------------------------
-// StandbyStatus
-// -----------------------------------------------------------------------------
-//
-TInt CCamAppUi::StandbyStatus() const
- {
- return iStandbyStatus;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::IsEmbedded
-// Retrun whether we are embedded or not
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::IsEmbedded() const
- {
- PRINT( _L("Camera => CCamAppUi::IsEmbedded") );
-/*#ifndef __WINS__
- PRINT1( _L("CCamAppUi::IsEmbedded %d"), iSendFileInCall );
- // treat inCallSend mode as same as embedded
- if( iSendFileInCall )
- {
- PRINT( _L("CCamAppUi::IsEmbedded iCall" ) );
- return ETrue;
- }
-#endif*/
- PRINT( _L("Camera <= CCamAppUi::IsEmbedded") );
- return iEikonEnv->StartedAsServerApp();
- }
-
-
-// ---------------------------------------------------------
-// ---------------------------------------------------------
-// CCamAppUi::HandleWsEventL
-// Handle a window server event. Used to handle focus loss
-// ---------------------------------------------------------
-//
-void
-CCamAppUi::HandleWsEventL( const TWsEvent& aEvent,
- CCoeControl* aDestination )
- {
-
- TInt type = aEvent.Type();
-
- PRINT1( _L("Camera => CCamAppUi::HandleWsEventL (type: %d)"), type )
- // In case we receive an enter key event, we should map it to MSK
- if ( aEvent.Type() == EEventKey && aEvent.Key()->iRepeats == 0 &&
- aEvent.Key()->iScanCode == EStdKeyEnter && iViewState != ECamViewStateUserSceneSetup &&
- !( iMode == ECamControllerVideo && iViewState == ECamViewStatePreCapture && iController.IsDemandKeyRelease() ) )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL: mapping enter to MSK") );
- // Gets the window group id of the app in foreground
- TInt windowGroupId = iCoeEnv->WsSession().GetFocusWindowGroup();
- // if the foreground app is this app
- if ( windowGroupId == iMyWgId )
- {
- // enter key should be mapped to MSK.
- TWsEvent ownEvent = aEvent;
- ownEvent.Key()->iScanCode = EStdKeyDevice3;
- ownEvent.Key()->iCode = EKeyOK;
- iCoeEnv->WsSession().SendEventToWindowGroup(windowGroupId, ownEvent);
- }
- }
- // in case we receive a long press of applications key when the self timer is
- // enabled, we should cancel the self timer
- else if ( aEvent.Type() == EEventKey &&
- aEvent.Key()->iScanCode == EStdKeyApplication0 &&
- aEvent.Key()->iRepeats > 0 &&
- SelfTimerEnabled() )
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- // in other cases do the normal handling
- else
- {
-
- switch ( type )
- {
- // a new window group has the focus
- case EEventFocusGroupChanged:
- {
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL: case EEventFocusGroupChanged") );
-
- // When camera looses its focus after going to background
- // during the state of ViaPlayer play back mode
- // we dont perform any operation; but return directly
- if ( iViewState == ECamViewStateViaPlayer )
- {
- // We call the base class and return
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
-
- // When camera looses its focus after going to background
- // we return to the same settings page that was before
- if ( SettingsLaunchedFromCamera() )
- {
- // We call the base class and return
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
- // we are going to background no need for harvester callbacks.
- iController.DeRegisterHarverterClientEvents();
-
- if ( AppInBackground( ETrue ) && iPretendExit )
- {
- //Make the current container invisible to prevent windowserver from bringing it to front
- //before the foreground event.
- TVwsViewId currentViewId;
- GetActiveViewId( currentViewId );
- switch ( currentViewId.iViewUid.iUid )
- {
- case ECamViewIdStillPreCapture:
- {
- if( iStillCaptureView->Container() &&
- !APHandler()->AccessedViaAP() )
- {
- iStillCaptureView->Container()->MakeVisible( EFalse );
- }
- iLastHiddenViewId = currentViewId.iViewUid;
- break;
- }
- case ECamViewIdStillPostCapture:
- {
- CCamStillPostCaptureView* stillPostCaptureView =
- ((CCamStillPostCaptureView*)View( currentViewId.iViewUid ));
- if( stillPostCaptureView && stillPostCaptureView->Container() )
- {
- stillPostCaptureView->Container()->MakeVisible( EFalse );
- }
- iLastHiddenViewId = currentViewId.iViewUid;
- break;
- }
- case ECamViewIdVideoPreCapture:
- {
- if( iVideoCaptureView->Container() &&
- !APHandler()->AccessedViaAP() )
- {
- iVideoCaptureView->Container()->MakeVisible( EFalse );
- }
- iLastHiddenViewId = currentViewId.iViewUid;
- break;
- }
- case ECamViewIdVideoPostCapture:
- {
- CCamVideoPostCaptureView* videoPostCaptureView =
- ((CCamVideoPostCaptureView*)View( currentViewId.iViewUid ));
- if( videoPostCaptureView && videoPostCaptureView->Container() )
- {
- videoPostCaptureView->Container()->MakeVisible( EFalse );
- }
- iLastHiddenViewId = currentViewId.iViewUid;
- break;
- }
- default:
- break;
- }
- }
-
- // if the application has gone to the background
- // note this does not include eikon server windows
- // The exception to this is when the slider is closed with keypad
- // lock active and the app grid opens with a keypad status note.
- // We know in this situation that the app should release resources.
- if ( AppInBackground( EFalse ) ||
- ( AppInBackground( ETrue ) && iPretendExit ) )
- {
- PRINT( _L("Camera <> AppUI EEventFocusGroupChanged A"))
- // when we return to foreground we use this boolean to
- // check if we have to still exit the settings modes e.g.
- // UserScene or SceneSettings that we are in when screen saver
- // comes or going InternalExit
- iLostFocusToNewWindow = ETrue;
-
- // Handle losing focus to another application
- // this is used for behaviour that does not need to occur
- // when views go to the background for another view within our
- // own application. Also for when the application was behind
- // an eikon server window but another application has now taken
- // the foreground
-
- if( iView && iReturnedFromPlugin )
- {
- PRINT( _L("Camera <> AppUI EEventFocusGroupChanged B"))
- static_cast<CCamViewBase*>( iView )->HandleFocusLossL();
- }
-
- // the application knows it is in the background so we are
- // not interested in any more events
- iCoeEnv->RootWin().DisableFocusChangeEvents();
- // disable timeout to standby when going to background
- iController.StopIdleTimer();
-
- // We need to know if we gain focus from a true background event
- iReturnFromBackground = ETrue;
- // Sent to the background, so compress the heap
- User::Heap().Compress();
-
- // stop listening mmc dismount notifications
- iController.CancelDismountMonitoring();
-
- #if !defined (__WINSCW__)
- if ( AppInBackground( ETrue ) )
- {
- // relinquish capture keys
- UnRegisterCaptureKeys();
- }
- #endif
- }
-
- if (iStartupLogoController)
- {
- iStartupLogoController->HideLogo();
- }
-
- if( AppInBackground(EFalse) || ( !CamUtility::IsBatteryPowerOK() &&
- !CamUtility::IsBatteryCharging() ) )
- {
- if( ECamControllerVideo == iMode )
- {
- TCamCaptureOperation operation( iController.CurrentOperation() );
- // In case of phone app, video rec is stopped already when the call starts ringing
- if ( ( !iController.CurrentlySavingVideo() ) &&
- ( ECamCapturing == operation
- || ECamPaused == operation
- || ECamPausing == operation
- || ECamResuming == operation ) )
- {
- iController.StopVideoRecording();
- }
- }
- else if( iController.SequenceCaptureInProgress() && IsBurstEnabled() )
- {
- iController.StopSequenceCaptureL();
- }
- else
- {
- if( iController.IsViewFinding() )
- {
- if(CamUtility::IsBatteryPowerOK() )
- {
- iController.StopViewFinder();
- iViewFinderStopped = ETrue;
- }
- // stop self timer countdown if necessary
- if( SelfTimer() && SelfTimer()->IsActive() &&
- CamUtility::IsBatteryPowerOK() )
- {
- // If low battery note appears, do not cancel self timer
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- }
- }
- }
- break;
- }
- // -----------------------------------------------------
- // the camera app has regained the focus
- case EEventFocusGained:
- {
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL: case EEventFocusGained") );
- RAknUiServer* capServ = CAknSgcClient::AknSrv();
- CleanupStack::PushL( TCleanupItem( CleanupBlankScreen, this ) );
- if ( iPretendExit )
- {
- capServ->BlankScreen();
- }
- iReturningFromPretendExit = iPretendExit;
-
- TBool uiOverride = iController.UiConfigManagerPtr() && iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported();
-
- if ( !iSendAsInProgress )
- {
- // if we've regained focus assume we're not embedding anything
- SetEmbedding( EFalse );
- }
-
- //Make the current container visible again. This way the camera ui doesn't flash quickly in the portait mode
- //when returning from the background. unless this is first startup and uiorientationioverride api is used
- if ( !uiOverride || ( !iFirstBoot && uiOverride ) )
- {
- switch ( iLastHiddenViewId.iUid )
- {
- case ECamViewIdStillPreCapture:
- {
- if( iStillCaptureView->Container()
- && !APHandler()->AccessedViaAP())
- {
- iStillCaptureView->Container()->MakeVisible( ETrue );
- }
- break;
- }
- case ECamViewIdStillPostCapture:
- {
- CCamStillPostCaptureView* stillPostCaptureView =
- ((CCamStillPostCaptureView*)View( iLastHiddenViewId ));
- if( stillPostCaptureView && stillPostCaptureView->Container() )
- {
- stillPostCaptureView->Container()->MakeVisible( ETrue );
- }
- break;
- }
- case ECamViewIdVideoPreCapture:
- {
- if( iVideoCaptureView->Container()
- && !APHandler()->AccessedViaAP())
- {
- iVideoCaptureView->Container()->MakeVisible( ETrue );
- }
- break;
- }
- case ECamViewIdVideoPostCapture:
- {
- CCamVideoPostCaptureView* videoPostCaptureView =
- ((CCamVideoPostCaptureView*)View( iLastHiddenViewId ));
- if( videoPostCaptureView && videoPostCaptureView->Container() )
- {
- videoPostCaptureView->Container()->MakeVisible( ETrue );
- }
- break;
- }
- default:
- break;
- }
- }
- // focus gained event is received while videocall is active
- if ( iController.InVideocallOrRinging() )
- {
- if ( ECamViewStateStandby == iViewState &&
- StandbyStatus() == KErrInUse )
- {
- // We call the base class and return
- capServ->UnblankScreen();
- CleanupStack::Pop();
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
- else if ( iViewState != ECamViewStateSettings &&
- iViewState != ECamViewStateViaPlayer &&
- iTargetViewState != ECamViewStatePostCapture &&
- !iFirstBoot )
- {
- //Don't update task state in case of embedded camera
- if ( !iEikonEnv->StartedAsServerApp())
- {
- HideTaskL( EFalse );
- }
- iPretendExit = EFalse;
- // Go to standby with error
- capServ->UnblankScreen();
- CleanupStack::Pop();
- HandleStandbyEventL( KErrInUse );
- // We call the base class and return
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
- }
- // Only do startup performance traces if this is
- // a subsequent startup.
- if ( IsInPretendExit() )
- {
- OstTrace0( CAMERAAPP_PERFORMANCE, CCAMAPPUI_HANDLEWSEVENTL, "e_CAM_APP_INIT 1" ); //CCORAPP_APP_INIT_START
- }
-
- PERF_EVENT_START_L1( EPerfEventAppSubsequentStartup );
-
- // start listening mmc dismount notifications
- iController.StartDismountMonitoring();
-
- if ( !uiOverride || ( !iFirstBoot && uiOverride ) )
- {
- NotifyViews( ECamAppEventFocusGained );
- if( !uiOverride )
- {
- // whenever we come from background, we reset the image,
- // video & common settings as there is a possibility that
- // some settings might have changed from the GS application
- // by the user.
- iController.LoadStaticSettingsL( IsEmbedded() );
- }
- PRINT( _L("Camera <> CCamAppUi::HandleWsEvent ECamEventFocusGained calling UpdateToolbarIconsL") );
- if ( iPretendExit )
- iStillCaptureView->UpdateToolbarIconsL();
- if( !uiOverride )
- {
- //check for silent profile whenever we come to foreground.
- iController.IsProfileSilent();
- }
- }
-
- //Check existance of current file if in video or image in
- //burstthumbnail view.
- if( CurrentViewState() == ECamViewStateBurstThumbnail )
- {
- StartFileNameCheck();
- }
- /*
- * We check if the state of the camera is in the ViaPlayer mode state
- * if so, then we just activate the player view and return after
- * coming from the background.
- */
- if ( iViewState == ECamViewStateViaPlayer )
- {
- ActivateLocalViewL ( iViaPlayerUid );
- // We call the base class and return
- capServ->UnblankScreen();
- CleanupStack::Pop();
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
- else if ( iTargetViewState == ECamViewStatePostCapture )
- {
- TrySwitchViewL( ETrue );
- // register an interest in new events
- iCoeEnv->RootWin().EnableFocusChangeEvents(); // ignore error
-
-#if !defined (__WINSCW__)
- // Grab capture keys
- RegisterCaptureKeysL();
-
-#endif
- // iPretendExit flag needs to be reset before returning, otherwise
- // views think we are still in exit state and will not reserve camera
- iPretendExit = EFalse;
- capServ->UnblankScreen();
- CleanupStack::Pop();
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
- else if ( SettingsLaunchedFromCamera() )
- {
- if ( iController.InVideocallOrRinging() &&
- iController.CurrentOperation() == ECamNoOperation )
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
- else
- {
- CCamViewBase *precapView = static_cast<CCamViewBase*>( iView );
- __ASSERT_DEBUG(precapView, CamPanic(ECamPanicNullPointer));
- if( precapView->IsInStandbyMode() )
- {
- iView->HandleCommandL( ECamCmdExitStandby );
- }
- iTargetViewState = ECamViewStateSettings;
- }
- TrySwitchViewL();
- capServ->UnblankScreen();
- CleanupStack::Pop();
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
- else
- {
- // we are now sure that settings plugin is not active
- iReturnedFromPlugin = ETrue;
- }
-
-
- if ( iLostFocusToNewWindow )
- {
- if ( ECamViewStateBurstThumbnail != iTargetViewState )
- {
- iLostFocusToNewWindow = EFalse;
- }
- }
- if( !uiOverride || ( !iFirstBoot && uiOverride ) )
- {
- StartCheckingDefaultAlbumIdL();
- }
-
- // Free the needed ram memory if not enough available
- TInt memError = iMemoryMonitor->CheckAndRequestMemoryL(
- iController.UiConfigManagerPtr()->CriticalLevelRamMemoryFocusGained(),
- iController.UiConfigManagerPtr()->RequiredRamMemoryFocusGained(),
- EFalse );
-
- TInt freeMemory = 0;
- TInt halerror=HAL::Get( HALData::EMemoryRAMFree, freeMemory );
- if( halerror != KErrNone )
- {
- User::Leave( halerror );
- }
-
- if ( memError && freeMemory < iController.UiConfigManagerPtr()->CriticalLevelRamMemoryFocusGained() )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleWsEvent ECamEventFocusGained memory too low. Exiting") );
- capServ->UnblankScreen();
- CleanupStack::Pop();
- CloseAppL();
- PRINT( _L("Camera <= CCamAppUi::HandleWsEvent ECamEventFocusGained memory too low. Exiting") );
- return;
- }
-
-
- iController.SetEndKeyExitWaiting( EFalse );
- //Don't update task state in case of embedded camera
- if ( !iEikonEnv->StartedAsServerApp())
- {
- HideTaskL( EFalse );
- }
- // Restart the sensor idle
- if ( iController.UiConfigManagerPtr()->IsOrientationSensorSupported() )
- {
- // Handle sensor api init when we have idle time
- StartSensorIdleL();
- }
-
- // the focus can be regained during a SendAs Bluetooth operation
- // so don't try to exit the app if SendAs is in progress - the
- // exit check will be performed once SendAs completes
- // The same applies while a sequence capture is being completed
- if ( !iSendAsInProgress && !iController.SequenceCaptureInProgress() )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL EEventFocusGained checking exit status") )
- // check if exit is required
- if ( iController.CheckExitStatus() )
- {
- capServ->UnblankScreen();
- CleanupStack::Pop();
- InternalExitL();
- PRINT( _L("Camera <= CCamAppUi::HandleWsEventL, internal exit") )
- return;
- }
- }
-
- // register an interest in new events
- iCoeEnv->RootWin().EnableFocusChangeEvents(); // ignore error
-
- #if !defined (__WINSCW__)
- // Grab capture keys
- RegisterCaptureKeysL();
-
- #endif
-
- iReturnFromBackground = EFalse;
-
- // When the application gains focus
- // the memory to use should be re-checked for
- // availability. If uioverride supported, check
- // made later since settings not loaded at this point
- if ( !uiOverride )
- {
- iController.CheckMemoryToUseL();
- }
-
- iPretendExit = EFalse;
-
- TCamViewSwitch switchNeeded = ECamViewSwitchNone;
-
- // if a view switch has been waiting for the application to get
- // the foreground.
- if ( iPendingViewSwitch != EPendingViewSwitchNone &&
- !iSendAsInProgress )
- {
- // In case the application is exited from portrait mode
- // and landscape should be used -> orientation switch is required
- TAppUiOrientation appOrientation = CAknAppUiBase::Orientation();
- if ( EAppUiOrientationPortrait == appOrientation )
- {
- SwitchOrientationIfRequiredL(
- CAknAppUiBase::EAppUiOrientationUnspecified );
- }
- TBool deactivateFirst =
- ( iPendingViewSwitch == EPendingViewSwitchDeactivateFirst );
- switchNeeded = ViewSwitchRequired( deactivateFirst );
- iPendingViewSwitch = EPendingViewSwitchNone;
- TrySwitchViewL( deactivateFirst );
- }
- else
- {
- if( iViewFinderStopped )
- {
- // don't start VF if EEventFocusGroupChanged is coming later
- if( !iLostFocusToNewWindow &&
- iController.CurrentMode() == ECamControllerImage ||
- iController.CurrentMode() == ECamControllerVideo )
- {
- iController.StartViewFinder();
- }
- iLostFocusToNewWindow = EFalse;
- }
- }
-
- // force side pane and active palette to update if simulating app
- // launch this has to be done after the call to TrySwitchViewL() to
- // ensure that IsBurstEnabled() returns the correct value.
- if ( iReturningFromPretendExit )
- {
- iCamSidePane->SetCaptureMode( iMode );
- // The active palette is always switched on when simulating
- // app launch
- iPreventActivePaletteDisplay = EFalse;
-
-
- if ( iView == iVideoCaptureView )
- {
- iVideoCaptureView->UpdateToolbarIconsL();
- }
- }
-
- if ( uiOverride && ( iReturningFromPretendExit || iFirstBoot ) )
- {
- SetActivePaletteVisibility( EFalse );
- }
- else if ( !TimeLapseSliderShown() &&
- iViewState == ECamViewStatePreCapture &&
- switchNeeded != ECamViewSwitch &&
- !uiOverride )
- {
- RaisePreCaptureCourtesyUI( ETrue );
- }
-
- //We hiden toolbar when keylock was set to on in pre-capture view and camera lost focus,
- //so we need to display toolbar when keylock is set to off and camera gain focus again.
- if ( ECamViewStatePreCapture == iViewState &&
- ECamPreCapViewfinder == iPreCaptureMode &&
- ( !( iSelfTimer && iSelfTimer->IsActive() ) ) &&
- iController.CurrentOperation() != ECamCapturing &&
- iController.CurrentOperation() != ECamPaused &&
- !iReturningFromPretendExit )
- {
- SetToolbarVisibility();
- }
-
- // If keylock is set on when recording is starting up but not yet
- // started, display toolbar when keylock is set off since we are
- // returning to precapture view, unless capturing is still going on.
- if ( iView == iVideoCaptureView
- && iController.CurrentOperation() != ECamCapturing
- && !iController.IsProcessingCapture() )
- {
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if ( toolbar )
- {
- if ( iPreCaptureMode == ECamPreCapViewfinder )
- {
- toolbar->SetToolbarVisibility( ETrue );
- }
- else
- {
- toolbar->SetToolbarVisibility( EFalse );
- }
- }
- }
- }
-
- capServ->UnblankScreen();
- CleanupStack::Pop();
- if (iStartupLogoController && iReturningFromPretendExit)
- {
- iStartupLogoController->ShowLogo();
- }
- break;
- }
- // -----------------------------------------------------
- case EEventFocusLost:
- {
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL: case EEventFocusLost") );
- // Stop VF early to reduce load
- if( AppInBackground( EFalse )
- && iViewState == ECamViewStatePreCapture
- && iMode == ECamControllerVideo )
- {
- iController.StopViewFinder();
- }
- //When go to background from video post caputure view, we need to hide the toolbar to avoid icons overlap
- if( AppInBackground( EFalse )
- && iViewState == ECamViewStatePostCapture
- && iMode == ECamControllerVideo )
- {
- SubmergeToolbar();
- }
-
- //We need hiding the toolbar if keylock is set to on in pre-catpure view,
- //otherwise the toolbar will be displayed when press volume key in keylock on status.
- if ( iController.IsKeyLockOn() &&
- ECamViewStatePreCapture == iViewState &&
- ECamPreCapViewfinder == iPreCaptureMode )
- {
- SubmergeToolbar();
- }
-
- // focus lost event while videocall active and camera in standby,
- // no notification to views
- if ( iController.InVideocallOrRinging()
- && ECamViewStateStandby == iViewState )
- {
- // We call the base class and return
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- return;
- }
-
- NotifyViews( ECamAppEventFocusLost );
-
- if ( iController.UiConfigManagerPtr()
- && iController.UiConfigManagerPtr()->IsOrientationSensorSupported() )
- // Shut down the Sensor API object.
- iController.UpdateSensorApiL(EFalse);
-
- #if !defined (__WINSCW__)
- // relinquish capture keys
- UnRegisterCaptureKeys();
-
- RArray <TInt> halfCaptureKeys;
- CleanupClosePushL( halfCaptureKeys );
-
- // now get half key press code to register
- if ( iController.UiConfigManagerPtr() )
- {
- iController.UiConfigManagerPtr()->
- SupportedPrimaryCameraAutoFocusKeyL( halfCaptureKeys );
- }
- if ( halfCaptureKeys.Count() > 0 )
- {
- // Simulate key up event for the half-press key to make
- // sure autofocus does not get stuck when we lose focus.
- TKeyEvent key;
- key.iRepeats = 0;
- key.iCode = 0;
- key.iScanCode = halfCaptureKeys[0];
- key.iModifiers = 0;
- iEikonEnv->SimulateKeyEventL( key, EEventKeyUp );
- }
- CleanupStack::PopAndDestroy( &halfCaptureKeys );
- #endif
- break;
- }
- // -----------------------------------------------------
- case KUidValueAknsSkinChangeEvent:
- {
- if ( iNaviProgressBarModel )
- {
- iNaviProgressBarModel->ReloadResourceDataL();
- }
- break;
- }
- case EEventPointer:
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL: EEventPointer") );
- // restart idle timer every time screen is touched
- iController.StartIdleTimer();
- break;
- // -----------------------------------------------------
- default:
- PRINT( _L("Camera <> CCamAppUi::HandleWsEventL: unhandled case") );
- break;
- // -----------------------------------------------------
- }
-
- CAknAppUi::HandleWsEventL( aEvent, aDestination );
- }
- PRINT( _L("Camera <= CCamAppUi::HandleWsEventL") );
- }
-
-
-// -----------------------------------------------------------------------------
-// NotifyViews
-// -----------------------------------------------------------------------------
-//
-void
-CCamAppUi::NotifyViews( const TCamAppEvent& aEvent )
- {
- PRINT( _L("Camera => CCamAppUi::NotifyViews") );
- TUid settingsPluginUid = KNullUid;
- if ( iPlugin )
- {
- settingsPluginUid = iPlugin->Id();
- }
-
- for( TInt i = 0; i < iViews->Count(); i++ )
- {
- const TUid& uid( (*iViews)[i]->Id() );
- PRINT2( _L("Camera <> View[%2d] uid[%3d]"), i, uid.iUid );
-
-
- if (
- KGSCamImageSettingsViewId != uid &&
- KGSCamVideoSettingsViewId != uid &&
- settingsPluginUid != uid &&
- ECamViewIdViaPlayerPlayBack != uid.iUid )
-
- {
- static_cast<CCamViewBase*>( (*iViews)[i] )->HandleAppEvent( aEvent );
- }
- }
-
- PRINT( _L("Camera <= CCamAppUi::NotifyViews") );
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ConstructPreCaptureViewsL
-// Construct the application views
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::ConstructPreCaptureViewsL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_CONSTRUCTPRECAPTUREVIEWSL, "e_CCamAppUi_ConstructPreCaptureViewsL 1" );
- PRINT( _L( "Camera => CCamAppUi::ConstructPreCaptureViewsL()" ) );
- PERF_EVENT_START_L2( EPerfEventPreCaptureViewConstruction );
-
- // Initialize views
- CCamStillPreCaptureView* stillView =
- CCamStillPreCaptureView::NewLC( iController );
- iStillCaptureView = stillView;
-
- AddViewL( stillView );
- CleanupStack::Pop( stillView );
-
- PRINT( _L( "Camera => CCamAppUi::ConstructPreCaptureViewsL() still view complete" ) );
-
- CCamVideoPreCaptureView* videoView = CCamVideoPreCaptureView::NewLC( iController );
- iVideoCaptureView = videoView;
-
- AddViewL( videoView );
- CleanupStack::Pop( videoView );
-
-#if !( defined(__WINS__) || defined(__WINSCW__) )
- // Get Central Repository key indicating if product uses volume keys
- // for zoom. Load the zoom pane orientation value from the Central
- // Repository
- if( !iRepository )
- {
- iRepository = CRepository::NewL( KCRUidCameraappSettings );
- }
-
- TInt val = 0;
- TInt err = iRepository->Get( KCamCrZoomUsingVolumeKeys, val );
-
- // If there is an error then assume volume keys not used
- if ( err )
- {
- iZoomUsingVolumeKeys = EFalse;
- }
- else
- {
- iZoomUsingVolumeKeys = val;
- }
-
- if( iZoomUsingVolumeKeys )
- {
- // Remote controller observe
- delete iVolumeKeyObserver;
- iVolumeKeyObserver = NULL;
- iVolumeKeyObserver = CCamRemConObserver::NewL( *this );
- }
-
-#else
- iZoomUsingVolumeKeys = EFalse;
-#endif // !( defined(__WINS__) || defined(__WINSCW__) )
-
- PERF_EVENT_END_L2( EPerfEventPreCaptureViewConstruction );
- PRINT( _L( "Camera <= CCamAppUi::ConstructPreCaptureViewsL()" ) );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_CONSTRUCTPRECAPTUREVIEWSL, "e_CCamAppUi_ConstructPreCaptureViewsL 0" );
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ConstructPostCaptureViewsL
-// Construct the application views
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::ConstructPostCaptureViewsL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_CONSTRUCTPOSTCAPTUREVIEWSL, "e_CCamAppUi_ConstructPostCaptureViewsL 1" );
- PRINT( _L( "Camera => CCamAppUi::ConstructPostCaptureViewsL()" ) );
- if ( iPostCaptureViewsConstructed )
- {
- PRINT( _L( "Camera <= CCamAppUi::ConstructPostCaptureViewsL(,)iPostCaptureViewsConstructed == ETrue" ) );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP2_CCAMAPPUI_CONSTRUCTPOSTCAPTUREVIEWSL, "e_CCamAppUi_ConstructPostCaptureViewsL 0" );
- return;
- }
-
- PERF_EVENT_START_L2( EPerfEventPostCaptureViewConstruction );
-
- ConstructPostCaptureViewIfRequiredL( ECamViewStatePostCapture,
- ECamControllerImage );
- ConstructPostCaptureViewIfRequiredL( ECamViewStateBurstThumbnail,
- ECamControllerImage );
- ConstructPostCaptureViewIfRequiredL( ECamViewStatePostCapture,
- ECamControllerVideo );
-
- iPostCaptureViewsConstructed = ETrue;
- PERF_EVENT_END_L2( EPerfEventPostCaptureViewConstruction );
- PRINT( _L( "Camera <= CCamAppUi::ConstructPostCaptureViewsL()" ) );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_CONSTRUCTPOSTCAPTUREVIEWSL, "e_CCamAppUi_ConstructPostCaptureViewsL 0" );
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ConstructViewIfRequiredL
-// Construct the application views
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::ConstructViewIfRequiredL()
- {
- PRINT( _L( "Camera => CCamAppUi::ConstructViewIfRequiredL()" ) );
-
- // Initialize views
- CAknView* view( NULL );
-
- switch( iTargetViewState )
- {
- // -----------------------------------------------------
- // Construct one of the postcapture views if needed
- case ECamViewStateBurstThumbnail:
- case ECamViewStatePostCapture:
- {
- ConstructPostCaptureViewIfRequiredL( iTargetViewState, iMode );
- break;
- }
- // -----------------------------------------------------
- // construct settings views if needed
- case ECamViewStateSettings:
- {
- if( !iPlugin )
- {
- CCamGSInterface* plugin = CCamGSInterface::NewL( KCamGSPluginUid );
- CleanupStack::PushL( plugin );
- AddViewL( plugin ); // Transfer ownership to AppUi
- CleanupStack::Pop( plugin );
- iPlugin = plugin;
- }
- break;
- }
- // -----------------------------------------------------
- // construct user scene setup view if needed
- case ECamViewStateUserSceneSetup:
- {
- if( !iUserSceneSetupViewConstructed )
- {
- view = CCamStillUserSceneSetupView::NewLC( iController );
- AddViewL( view );
- CleanupStack::Pop( view );
- iUserSceneSetupViewConstructed = ETrue;
- }
- break;
- }
- // -----------------------------------------------------
-
- default:
- {
- // no action
- break;
- }
- // -----------------------------------------------------
- }
- PRINT( _L( "Camera <= CCamAppUi::ConstructViewIfRequiredL" ) );
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ConstructNaviPaneL
-// Construct the navi pane
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::ConstructNaviPaneL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_CONSTRUCTNAVIPANEL, "e_CCamAppUi_ConstructNaviPaneL 1" );
- // Navi pane indicators
- iNaviPaneCounterControl =
- CCamNaviCounterControl::NewL( *iNaviCounterModel );
-
- iDecoratedNaviPaneCounter =
- CAknNavigationDecorator::NewL( NaviPaneL(), iNaviPaneCounterControl );
-
- iDecoratedNaviPaneCounter->SetContainerWindowL(
- *(StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
- iNaviPaneCounterControl->SetContainerWindowL( *iDecoratedNaviPaneCounter );
-
- iNaviPaneProgressBarControl =
- CCamNaviProgressBarControl::NewL( *iNaviProgressBarModel );
-
- iDecoratedNaviPaneProgressBar = CAknNavigationDecorator::NewL(
- NaviPaneL(), iNaviPaneProgressBarControl );
-
- iDecoratedNaviPaneProgressBar->SetContainerWindowL(
- *(StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
- iNaviPaneProgressBarControl->SetContainerWindowL(
- *iDecoratedNaviPaneProgressBar );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_CONSTRUCTNAVIPANEL, "e_CCamAppUi_ConstructNaviPaneL 0" );
- }
-
-// ----------------------------------------------------
-// CCamAppUi::DoPostCaptureTimeoutL
-// Implementation function for post capture view timeout
-// ----------------------------------------------------
-//
-TInt CCamAppUi::DoPostCaptureTimeoutL()
- {
- // If burst mode is active, switch to thumbnail view
- if ( iViewState == ECamViewStatePostCapture &&
- iImageMode == ECamImageCaptureBurst )
- {
- iTargetViewState = ECamViewStateBurstThumbnail ;
- }
- // otherwise, return to pre-capture view
- else if (iCamOrientation == ECamOrientationPortrait)
- {
- iTargetViewState = ECamViewStatePrePortraitCapture;
- }
- else
- {
- iTargetViewState = ECamViewStatePreCapture;
- }
-
- TrySwitchViewL();
- return EFalse;
- }
-
-// ----------------------------------------------------
-// CCamAppUi::TrySwitchViewL
-// Try to switch active view
-// ----------------------------------------------------
-//
-void
-CCamAppUi::TrySwitchViewL( TBool aDeactivateFirst )
- {
- PRINT2(_L("Camera => CCamAppUi::TrySwitchViewL, iTargetViewState = %d, iViewState = %d"), iTargetViewState, iViewState);
- PRINT2(_L("Camera <> CCamAppUi::TrySwitchViewL, iTargetMode = %d, iMode = %d"), iTargetMode, iMode);
-
- //Sometimes current view and target view are same. For example switching from main camera to secondary camera
- //always sets target mode to precaptrueview and current view could already be in precapture view. This is fine
- //but In some postcaptureview cases current view and targetview is postcapture.
- //In those cases view switching is not needed unless current mode also changes.
- if( (iViewState==iTargetViewState) && ( iViewState==ECamViewStatePostCapture) && (iMode==iTargetMode) )
- {
- PRINT(_L("Camera <= CCamAppUi::TrySwitchViewL, CALLED WITHOUT PURPOSE"));
- return;
- }
-
- if( iZoomUsingVolumeKeys && !iVolumeKeyObserver &&
- ECamViewStatePreCapture == iTargetViewState )
- {
- // Volumekeyobserver has been removed due to activating an external
- // view. Volume keys are only needed for zooming in precapture, so we
- // re-create the observer during next switch to precap (=now)
- iVolumeKeyObserver = CCamRemConObserver::NewL( *this );
- }
-
-
- //if burst capture stopped for usb inserted, iTargetViewState is ECamViewStatePreCapture, it need to stop sequence capture too.
- if ( iViewState == ECamViewStatePreCapture &&
- ( iTargetViewState == ECamViewStateBurstThumbnail ||
- ( ( iTargetViewState == ECamViewStatePreCapture ) && iController.IsCaptureStoppedForUsb() ) ) &&
- iController.SequenceCaptureInProgress() )
- {
- iController.StopSequenceCaptureL();
- }
-
- // some views are only constructed when they are first used
- TRAPD( err, ConstructViewIfRequiredL() )
- PRINT1( _L( "Camera <> view constrcuction status:%d"), err )
- // if the view construction failed
- if ( err )
- {
- iTargetViewState = ECamViewStatePreCapture;
- User::Leave( err );
- }
-
- // if the application is in the background the view switch will happen
- // when we get the foreground again. This stops the app coming back to
- // the foreground when the view switch occurs.
- // If keylock is enabled, view switching is allowed in order to avoid
- // flickering
-
- if ( iPretendExit || ( AppInBackground( ETrue ) && ECamViewStateStandby != iTargetViewState ) )
- {
- PRINT( _L("Camera <> app in background set pending view switch") )
- if ( aDeactivateFirst )
- {
- PRINT( _L("Camera <> setting iPendingViewSwitch = EPendingViewSwitchDeactivateFirst") )
- iPendingViewSwitch = EPendingViewSwitchDeactivateFirst;
- }
- else
- {
- // If a deactivate first view switch has already been requested
- // then don't overwrite it
- if ( iPendingViewSwitch != EPendingViewSwitchDeactivateFirst )
- {
- PRINT( _L("Camera <> setting iPendingViewSwitch = EPendingViewSwitchNormal") )
- iPendingViewSwitch = EPendingViewSwitchNormal;
- }
- }
- PRINT( _L("Camera TrySwitchViewL returning without switch") );
- return;
- }
-
- if ( iController.UiConfigManagerPtr() &&
- iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() &&
- !iUiConstructionComplete )
- {
- iPendingViewSwitch = EPendingViewSwitchNormal;
- PRINT( _L("Camera <= CCamAppUi::TrySwitchViewL setting EPendingViewSwitchNormal, return") );
- return;
- }
-
- TCamViewSwitch switchNeeded = ViewSwitchRequired( aDeactivateFirst );
- PRINT( _L("Camera TrySwitchViewL C") )
- if ( iTargetViewState == ECamViewStatePreCapture )
- {
- PRINT( _L("Camera TrySwitchViewL D") )
- // if going back to precapture view in timelapse mode then the array
- // of timelapse filenames can now be deleted
- if ( iImageMode == ECamImageCaptureTimeLapse )
- {
- iController.ResetTimelapseArray();
- }
-
- // If exiting a post capture view, release the capture array
- if ( iViewState == ECamViewStatePostCapture )
- {
- iController.ReleaseArray();
- }
- else if( iViewState == ECamViewStateBurstThumbnail )
- {
- iController.ReleaseArray( ETrue );
- }
- if ( iPreCaptureMode != ECamPreCapTimeLapseSlider && !IsEmbedded() )
- {
- iPreCaptureMode = ECamPreCapViewfinder;
- }
- }
-
- if ( iTargetViewState == ECamViewStatePostCapture )
- {
- // If going to post capture, make sure the AP is displayed
- iPreventActivePaletteDisplay = EFalse;
- }
-
- // If no switches are required
- if ( switchNeeded == ECamViewSwitchNone )
- {
- PRINT( _L("Camera TrySwitchViewL no VS") )
- if ( IsDirectViewfinderActive() )
- {
- TRAP_IGNORE(HandleCommandL( ECamCmdRedrawScreen ));
- }
- return;
- }
- // If a full view switch is required, activate new view
- if ( switchNeeded == ECamViewSwitch )
- {
- PRINT( _L("Camera <> CCamAppUi::TrySwitchViewL: Stop VF for full view switch") )
- // this skip VF stopping if DV is active and camera is in standby mode
- // possible if screensaver delay is short and startup takes long enough
- if ( ECamViewStateStandby == iViewState &&
- // DSVF active or in bitmap mode in any active camera (no need to stop VF)
- ( IsDirectViewfinderActive() ||
- ( ECamActiveCameraSecondary == ActiveCamera() &&
- !iController.UiConfigManagerPtr()->IsDSAViewFinderSupported( EFalse ) ) ||
- ( ECamActiveCameraPrimary == ActiveCamera() &&
- !iController.UiConfigManagerPtr()->IsDSAViewFinderSupported( ETrue ) ) ) )
- {
- PRINT( _L("Camera <> CCamAppUi::TrySwitchViewL: !!! No stopviewfinder in Standby !!!") )
- }
- else
- {
- SetViewFinderInTransit(ETrue);
- iController.StopViewFinder();
- if ( iView )
- {
- TUid viewId = iView->Id();
- if(viewId == TUid::Uid( ECamViewIdStillPreCapture )
- || viewId == TUid::Uid( ECamViewIdVideoPreCapture ))
- {
- CCamViewBase* view = static_cast<CCamViewBase*>(iView);
- CCamContainerBase* container = view->Container();
- container->DrawNow();
- }
- }
-
-
- }
- PRINT( _L("Camera TrySwitchViewL E") )
- TUid uid;
- TUid messageUid;
- TBool validView = ViewId( iTargetViewState,
- iTargetMode,
- iTargetImageMode,
- uid,
- messageUid,
- aDeactivateFirst );
- PRINT2(_L("Camera <> CCamAppUi::TrySwitchViewL, iTargetViewState = %d, iViewState = %d"),
- iTargetViewState, iViewState);
- PRINT2(_L("Camera <> CCamAppUi::TrySwitchViewL, uid = %d, messageUid = %d"),
- uid.iUid, messageUid.iUid);
-
- __ASSERT_DEBUG( validView, CamPanic( ECamPanicInvalidView ) );
-
- if ( validView )
- {
- PRINT( _L("Camera TrySwitchViewL f") )
- // the cba is reset when the view is activated
- iCbaIsDisabled = EFalse;
- ActivateLocalViewL( uid, messageUid, KNullDesC8 );
- // If self timer mode is enabled and we are switching views, we need to
- // disable Self Timer
- if ( iInSelfTimerMode != ECamSelfTimerDisabled)
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
- }
- }
-
- // Mode only switches are handled here
-
- // ...if we are switching to/from the video/photo views then
- // ...reset the dynamic settings.
- if ( ( ( iMode != ECamControllerVideo ) &&
- ( iTargetMode == ECamControllerVideo ) )
- ||
- ( ( iMode == ECamControllerVideo ) &&
- ( iTargetMode != ECamControllerVideo ) ) )
- {
-#ifdef RESET_DYNAMIC_SETTINGS_WHEN_SWITCH_MODE
- iController.SetDynamicSettingsToDefaults();
-#endif // RESET_DYNAMIC_SETTINGS_WHEN_SWITCH_MODE
- }
-
- if ( iController.UiConfigManagerPtr() && iDSASupported )
- {
- // ...check if we are moving to BurstCapture
- //
- if ( // If entering burst mode...
- ( ( iTargetImageMode == ECamImageCaptureBurst ||
- iTargetImageMode == ECamImageCaptureTimeLapse ) &&
- iImageMode == ECamImageCaptureSingle )
- // ...or leaving burst mode
- ||
- ( ( iImageMode == ECamImageCaptureBurst ||
- iImageMode == ECamImageCaptureTimeLapse ) &&
- iTargetImageMode == ECamImageCaptureSingle )
- )
- {
- // Stop the viewfinder (using the current state)
- PRINT( _L("Camera TrySwitchViewL burst stop VF") )
- iController.StopViewFinder();
-
- // Update AppUi internal state
- iViewState = iTargetViewState;
- iMode = iTargetMode;
- iImageMode = iTargetImageMode;
-
- }
- else
- {
- // Not entering/leaving burst mode, so just update the state
- iViewState = iTargetViewState;
- iMode = iTargetMode;
- iImageMode = iTargetImageMode;
- }
- }
- else
- {
- // ...set the current capture mode and view state to the targets.
- iViewState = iTargetViewState;
- iMode = iTargetMode;
- iImageMode = iTargetImageMode;
- }
-
- PRINT(_L("Camera <= CCamAppUi::TrySwitchViewL"));
- }
-
-// ----------------------------------------------------
-// CCamAppUi::ViewSwitchRequired
-// Is a switch of the active view necessary
-// ----------------------------------------------------
-//
-
-CCamAppUi::TCamViewSwitch
-CCamAppUi::ViewSwitchRequired( TBool aDeactivateFirst ) const
- {
- CCamAppUi::TCamViewSwitch vSwitch = ECamViewSwitchNone;
-
- if ( aDeactivateFirst )
- {
- // View switch required
- vSwitch = ECamViewSwitch;
- }
- else
- {
- // Post <=> Pre and/or Video <=> Image always require view switch
- if ( iTargetViewState == iViewState
- && iTargetMode == iMode )
- {
- // single / burst / timelapse
- if( iTargetImageMode == iImageMode )
- {
- // Completely same mode already
- vSwitch = ECamViewSwitchNone;
- }
- else
- {
- // No view switch is required for changing between these modes
- vSwitch = ECamViewSwitchModeOnly;
- }
- }
- else
- {
- // View switch required
- vSwitch = ECamViewSwitch;
- }
- }
-
- return vSwitch;
- }
-
-// ----------------------------------------------------
-// CCamAppUi::ViewId
-// Get uid of view with requested state and mode
-// ----------------------------------------------------
-//
-TBool CCamAppUi::ViewId( TCamViewState aState,
- TCamCameraMode aMode,
- TCamImageCaptureMode aImageMode,
- TUid& aUid,
- TUid& aMessageUid,
- TBool aDeactivateFirst )
- {
- aMessageUid.iUid = 0;
-
- TBool found = EFalse;
- switch ( aState )
- {
- // -----------------------------------------------------
- case ECamViewStateStandby:
- {
- // Custom message to pass to the view, is to initiate standby
- aMessageUid.iUid = ECamViewMessageStandby;
- }
- //lint -fallthrough
- // -----------------------------------------------------
- case ECamViewStatePreCapture: // fallthrough
- {
- if ( aDeactivateFirst )
- {
- aMessageUid.iUid = ECamViewMessageDeactivateFirst;
- }
- if ( aMode == ECamControllerVideo )
- {
- aUid.iUid = ECamViewIdVideoPreCapture;
- }
- else
- {
- aUid.iUid = ECamViewIdStillPreCapture;
- }
- found = ETrue;
- break;
- }
- // -----------------------------------------------------
- case ECamViewStateSceneSettingList:
- {
- // Ensure the view starts with the capture setup menu displayed.
- aMessageUid.iUid = ECamViewMessageSceneSettingList;
- if ( aMode == ECamControllerVideo )
- {
- aUid.iUid = ECamViewIdVideoPreCapture;
- }
- else
- {
- aUid.iUid = ECamViewIdStillPreCapture;
- }
- found = ETrue;
- break;
- }
- // -----------------------------------------------------
- case ECamViewStatePostCapture:
- {
- if ( aMode == ECamControllerVideo )
- {
- aUid.iUid = ECamViewIdVideoPostCapture;
- }
- else
- {
- aUid.iUid = ECamViewIdStillPostCapture;
- }
- found = ETrue;
- break;
- }
- // -----------------------------------------------------
- case ECamViewStateBurstThumbnail:
- {
- if ( ECamControllerImage == aMode
- && ECamImageCaptureBurst == aImageMode )
- {
- aUid.iUid = ECamViewIdBurstThumbnail;
- // We have view id for multi capture mode
- found = ETrue;
- }
- else
- {
- // No valid view id
- found = EFalse;
- }
- break;
- }
- // -----------------------------------------------------
- case ECamViewStateSettings:
- {
- TUid viewUid = KNullUid;
- aMessageUid = KNullUid;
-
- if ( ECamControllerVideo == aMode )
- {
- if ( IsSecondCameraEnabled() )
- {
- aMessageUid = TUid::Uid( KGSSecondaryCameraVideoSettingsView );
- }
- viewUid = KGSCamVideoSettingsViewId;
- }
- else
- {
- if ( IsSecondCameraEnabled() )
- {
- aMessageUid = TUid::Uid( KGSSecondaryCameraPhotoSettingsView );
- }
- viewUid = KGSCamImageSettingsViewId;
- }
-
- if ( iPlugin )
- {
- aUid = viewUid;
- found = ETrue;
- }
-
- break;
- }
- // -----------------------------------------------------
- case ECamViewStateUserSceneSetup:
- {
- if ( aMode != ECamControllerVideo )
- {
- aUid.iUid = ECamViewIdPhotoUserSceneSetup;
- // We have a photo user scene setup view id
- found = ETrue;
- }
- else
- {
- found = EFalse;
- }
- break;
- }
- // -----------------------------------------------------
- default:
- break;
- // -----------------------------------------------------
- }
-
- return found;
- }
-
-// ----------------------------------------------------
-// CCamAppUi::NaviPaneL
-// Return a pointer to the status pane's navi control container
-// ----------------------------------------------------
-//
-CAknNavigationControlContainer* CCamAppUi::NaviPaneL()
- {
- return static_cast<CAknNavigationControlContainer*>(
- StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::UpdateCba
-// Update softkeys to reflect current state
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::UpdateCba()
- {
- CCamViewBase* view = static_cast<CCamViewBase*>( iView );
- TRAP_IGNORE( view->UpdateCbaL() );
- }
-
-// Added back, but modified the note string resource
-// ----------------------------------------------------
-// CCamAppUi::DisplayWaitDialogL
-// Displays the wait dialog when saving video
-// ----------------------------------------------------
-//
-void CCamAppUi::DisplayWaitDialogL()
- {
-// __ASSERT_DEBUG( iWaitDialog == NULL, CamPanic( ECamPanicUi ) );
- if ( iWaitDialog == NULL )
- {
- // Display saving video wait note
- // The wait note has its initial delay disabled. This is because the call
- // to the engine to stop recording does not return until the video save
- // etc. has completed. This does not give the wait dialog a chance to
- // receive its timer call back and display itself.
- iWaitDialog = new( ELeave ) CCamWaitDialog(
- reinterpret_cast<CEikDialog**>( &iWaitDialog ), ETrue );
- iWaitDialog->ExecuteLD( R_CAM_SAVING_VIDEO_WAIT_NOTE );
- // From base class CEikDialog to prevent S60 style CBAs from showing
- // unnecessarily
- iWaitDialog->ButtonGroupContainer().MakeVisible(EFalse);
- }
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::StartupMode
-// Get startup capture mode from settings
-// ---------------------------------------------------------
-//
-TCamStartupMode CCamAppUi::StartupMode() const
- {
- __ASSERT_DEBUG( iRepository, CamPanic( ECamPanicNullPointer ) );
-
- TInt value = 0;
- TInt err = iRepository->Get( KCamCrDefaultCaptureMode, value );
- TCamStartupMode setting = static_cast<TCamStartupMode>( value );
- if ( err == KErrAbort ||
- err == KErrPermissionDenied ||
- err == KErrNotFound ||
- err == KErrArgument )
- {
- PRINT1( _L("Camera <> CCamAppUi::StartupMode err=%d"), err );
- CamPanic( ECamPanicDefaultNotFoundInIniFile );
- }
-
- return setting;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SaveCaptureMode
-// Save current capture mode to settings
-// ---------------------------------------------------------
-//
-void CCamAppUi::SaveCaptureMode()
- {
- // Since this function can be called from the destructor, it is neccesary
- // to check that iRepository is not null prior to use
- if ( iRepository && !IsEmbedded() )
- {
- switch ( iMode )
- {
- case ECamControllerImage:
- // Ignore errors
- iRepository->Set( KCamCrDefaultCaptureMode, ECamStillCapture );
- break;
- case ECamControllerVideo:
- // Ignore errors
- iRepository->Set( KCamCrDefaultCaptureMode, ECamVideoCapture );
- break;
- default:
- break;
- }
- }
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::SaveCourtesyUiState
-// Save whether or not the UI should always be drawn.
-// ---------------------------------------------------------
-//
-
-void CCamAppUi::SaveCourtesyUiState()
- {
- // Since this function can be called from the destructor,
- // it is neccesary to check that iRepository is not null prior to use
- if ( iRepository )
- {
- iRepository->Set( KCamCrAlwaysDrawCourtesyUi,
- iAlwaysDrawPreCaptureCourtesyUI );
- }
- }
-
-
-
-// ---------------------------------------------------------
-// CCamAppUi::InitCaptureCountL
-// Sets up the number of images to be captured
-// ---------------------------------------------------------
-//
-void CCamAppUi::InitCaptureCountL()
- {
- PRINT( _L("Camera => CCamAppUi::InitCaptureCountL" ))
- // If video mode is active, capture count is not used
- if ( iMode == ECamControllerImage )
- {
- TInt imageCount = 1;
-
- switch( iImageMode )
- {
- case ECamImageCaptureBurst:
- // Capture count initially set to 6 for short burst.
- // Once long burst is determined we adjust the burst count.
- // This approach keeps short burst as fast as possible.
- imageCount = KShortBurstCount;
- break;
- case ECamImageCaptureTimeLapse:
- // In timelapse mode set the limit as high as possible,
- // unless self-timer is used. In that case only 6 images
- // will be captured.
- if ( ECamSelfTimerDisabled != iInSelfTimerMode )
- {
- imageCount = KShortBurstCount;
- }
- else
- {
- imageCount = iMaxBurstCaptureNum;
- }
- break;
- default:
- // Single capture mode. Keep 1 as limit.
- break;
- }
-
- iController.SetCaptureLimitL( imageCount );
- }
- PRINT( _L("Camera <= CCamAppUi::InitCaptureCountL" ))
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SetCaptureMode
-// Set the current capture mode
-// ---------------------------------------------------------
-//
-void
-CCamAppUi::SetCaptureMode( TCamCameraMode aMode,
- TCamImageCaptureMode aImageMode /*= ECamImageCaptureNone*/)
- {
- iMode = aMode;
- iImageMode = aImageMode;
- iTargetMode = aMode;
- iTargetImageMode = aImageMode;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SetTitleEmbeddedL
-// Set title to the name of embedding application
-// ---------------------------------------------------------
-//
-void CCamAppUi::SetTitleEmbeddedL()
- {
- if (iParentAppName != NULL )
- {
- SetTitleL ( *iParentAppName );
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CheckMemoryL
-// Checks if there is sufficient space available for capture
-// ---------------------------------------------------------
-//
-TBool
-CCamAppUi::CheckMemoryL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_CHECKMEMORYL,
- "e_CCamAppUi_CheckMemoryL 1" );
- PRINT( _L("Camera => CCamAppUi::CheckMemoryL") );
- TBool capture = ETrue;
-
- if ( IsMemoryAvailableForCapturing() )
- {
- capture = ETrue;
- }
- else
- {
- TCamMediaStorage storeToCheck = ECamMediaStorageCurrent;
-
- if ( ECamControllerVideo == iController.CurrentMode() &&
- ECamMediaStorageCard == iController.
- IntegerSettingValue( ECamSettingItemVideoMediaStorage ) &&
- IsMemoryFullOrUnavailable( ECamMediaStorageCard ) )
- {
- storeToCheck = ECamMediaStorageCard;
- }
- if(AllMemoriesFullOrUnavailable())
- {
- HBufC* text = StringLoader::LoadLC(R_NOTE_TEXT_ALLMEMORY_FULL);
- TInt ret = ShowOOMNoteL( *text, EFalse);
- capture = EFalse;
- CleanupStack::PopAndDestroy(text);
- }
- else if(IsMemoryFullOrUnavailable( storeToCheck ))
- {
- HBufC* text = StringLoader::LoadLC(R_NOTE_TEXT_MEMORY_FULL);
- iMemoryNote = new( ELeave ) CAknStaticNoteDialog;
- iMemoryNote->PrepareLC( R_CAM_OOM_NOTE_OK_CANCEL);
- iMemoryNote->SetTextL( *text );
- iController.StopIdleTimer();
- TInt ret = iMemoryNote->RunDlgLD();
- iMemoryNote = NULL;
- CleanupStack::PopAndDestroy( text );
- if(EAknSoftkeyOk == ret)
- {
- //when memoryDialog showed, redraw background
- if ( IsDirectViewfinderActive() )
- {
- TRAP_IGNORE( HandleCommandL( ECamCmdRedrawScreen ) );
- }
-
- TInt supportedMemTypes = 0;
- TCamMediaStorage currentLocation;
- TInt key = ( ECamControllerVideo == iMode )
- ? ECamSettingItemVideoMediaStorage
- : ECamSettingItemPhotoMediaStorage;
-
- if ( iMMCRemoveNoteRequiredOnCapture )
- {
- iMMCRemoveNoteRequiredOnCapture = EFalse;
- currentLocation = static_cast<TCamMediaStorage>(
- iController.
- IntegerSettingValueUnfiltered( key ) );
- }
- else
- {
- currentLocation = static_cast<TCamMediaStorage>(
- iController.IntegerSettingValue( key ) );
- }
- if(currentLocation != ECamMediaStoragePhone &&
- !IsMemoryFullOrUnavailable(ECamMediaStoragePhone) &&
- !iController.IntegerSettingValue( ECamSettingItemRemovePhoneMemoryUsage ) )
- {
- supportedMemTypes |= AknCommonDialogsDynMem::EMemoryTypePhone;
- }
- if(currentLocation != ECamMediaStorageCard &&
- !IsMemoryFullOrUnavailable(ECamMediaStorageCard))
- {
- supportedMemTypes |= AknCommonDialogsDynMem::EMemoryTypeMMCExternalInDevice;
- }
- if(currentLocation != ECamMediaStorageMassStorage &&
- !IsMemoryFullOrUnavailable(ECamMediaStorageMassStorage))
- {
- supportedMemTypes |=
- AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage;
- }
-
- CAknMemorySelectionDialogMultiDrive* memoryDialog =
- CAknMemorySelectionDialogMultiDrive::NewL(
- ECFDDialogTypeSelect,
- R_CAM_MEMORY_SELECT_DIALOG,
- EFalse,
- supportedMemTypes );
- CleanupStack::PushL(memoryDialog);
- TDriveNumber driveNumber = static_cast<TDriveNumber>(KErrNotFound);
- CAknCommonDialogsBase::TReturnKey result =
- memoryDialog->ExecuteL( driveNumber );
- CleanupStack::PopAndDestroy(memoryDialog);
- if ( result != CAknCommonDialogsBase::TReturnKey(
- CAknCommonDialogsBase::ERightSoftkey) )
- {
- DriveInfo::TDefaultDrives memVal =
- static_cast<DriveInfo::TDefaultDrives>(
- CamUtility::GetDriveTypeFromDriveNumber(driveNumber));
- TInt settingValue =
- CamUtility::MapFromSettingsListMemory( memVal );
- iController.SetIntegerSettingValueL(key,settingValue);
- }
- else
- {
- //No impl.
- }
- capture = EFalse;
- }
- else
- {
- capture = EFalse;
- }
- iController.StartIdleTimer();
-
- UpdateCba(); // Make sure that softkeys are visible.
- }
- }
- PRINT1( _L("Camera <= CCamAppUi::CheckMemoryL, capture ok: %d"), capture );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_CHECKMEMORYL,
- "e_CCamAppUi_CheckMemoryL 0" );
- return capture;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::ShowErrorNoteL
-// Display error note
-// ---------------------------------------------------------
-//
-void
-CCamAppUi::ShowErrorNoteL( TCamMemoryStatus aStatus )
- {
- PRINT( _L("Camera => CCamAppUi::ShowErrorNoteL") );
- TInt resourceId;
-
- TCamMediaStorage currentLocation;
- if ( iMode == ECamControllerVideo )
- {
- currentLocation = static_cast<TCamMediaStorage>
- ( iController.IntegerSettingValueUnfiltered( ECamSettingItemVideoMediaStorage ) );
- }
- else // photo or burst mode
- {
- currentLocation = static_cast<TCamMediaStorage>
- ( iController.IntegerSettingValueUnfiltered( ECamSettingItemPhotoMediaStorage ) );
- }
- TInt NumberOfParameters = 0;
- TInt drive;
- TFileName path;
- TInt DriveError = KErrNone;
-
- // load text from resource
- switch ( aStatus )
- {
- case ECamMemoryStatusMassStorageFull:
- {
- // internal and card both full
- resourceId = R_NOTE_TEXT_MASSMEMORY_FULL;
- // Get the root path of the memory.
- DriveError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive );
- DriveError = PathInfo::GetRootPath( path, drive );
- if ( DriveError == KErrNone )
- {
- // %U parameter
- NumberOfParameters = 1;
- }
- else
- {
- // no %U parameter
- NumberOfParameters = 0;
- }
- }
- break;
-
- case ECamMemoryStatusFull:
- {
- if ( currentLocation == ECamMediaStorageMassStorage )
- {
- // internal mass storage full
- resourceId = R_NOTE_TEXT_MASSMEMORY_FULL;
- // Get the root path of the memory.
- DriveError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive );
- DriveError = PathInfo::GetRootPath( path, drive );
- }
- else if ( currentLocation == ECamMediaStoragePhone )
- {
- // internal phone memory full
- resourceId = R_NOTE_TEXT_NOT_ENOUGH_DEVICE_MEMORY;
- // Get the root path of the memory.
- DriveError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, drive );
- DriveError = PathInfo::GetRootPath( path, drive );
- }
- else
- {
- // memory card full
- resourceId = R_NOTE_TEXT_NOT_ENOUGH_MEMORY_CARD_DEFAULTNAME;
- // Get the root path of the memory.
- DriveError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive );
- DriveError = PathInfo::GetRootPath( path, drive );
- }
- if ( DriveError == KErrNone )
- {
- // %U parameter
- NumberOfParameters = 1;
- }
- else
- {
- // no %U parameter
- NumberOfParameters = 0;
- }
-
- }
- break;
-
- case ECamMemoryStatusInternalFull:
- {
- if ( currentLocation == ECamMediaStorageMassStorage )
- {
- // internal space full
- resourceId = R_NOTE_TEXT_MASSMEMORY_FULL;
- // Get the root path of the memory.
- DriveError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive );
- DriveError = PathInfo::GetRootPath( path, drive );
- }
- else
- {
- // internal space full
- resourceId = R_NOTE_TEXT_NOT_ENOUGH_DEVICE_MEMORY;
- // Get the root path of the memory.
- DriveError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, drive );
- DriveError = PathInfo::GetRootPath( path, drive );
- }
- if ( DriveError == KErrNone )
- {
- // %U parameter
- NumberOfParameters = 1;
- }
- else
- {
- // no %U parameter
- NumberOfParameters = 0;
- }
- }
- break;
-
- case ECamMemoryStatusCardNotInserted: // fallthrough
- case ECamMemoryStatusCardLocked:
- {
- // card not present or corrupt or locked
- resourceId = R_NOTE_TEXT_CARD_NOT_INSERTED;
- }
- break;
-
- case ECamMemoryStatusCardReadOnly:
- {
- // card read-only
- resourceId = R_NOTE_TEXT_CARD_READ_ONLY;
- }
- break;
-
- default:
- {
- // invalid status - don't show note
- return;
- }
- }
-
- // prevent timeout to standby - stop standby timer
- iController.StopIdleTimer();
-
- if ( iView && ( iStillCaptureView == iView || iVideoCaptureView == iView ) )
- {
- // Precapture view is visible... Enable the non-fading flag here to keep
- // viewfinder visible under the note. The non-fading flag is reset when
- // getting the EEventFocusGained event
- CCoeControl* container = static_cast<CCamViewBase*>( iView )->Container();
- if ( container )
- {
- RDrawableWindow* window = container->DrawableWindow();
- if ( window )
- {
- window->SetNonFading( ETrue );
- }
- }
- }
- if ( NumberOfParameters == 0 )
- {
- // set error note text
- HBufC* text = StringLoader::LoadLC( resourceId );
- // show error note
- CAknStaticNoteDialog* note = new( ELeave ) CAknStaticNoteDialog;
- note->PrepareLC( R_CAM_ERROR_NOTE );
- note->SetTextL( *text );
- note->RunDlgLD();
- CleanupStack::PopAndDestroy( text );
- }
- else if ( NumberOfParameters == 1 )
- {
- // set error note text
- HBufC* text = StringLoader::LoadLC( resourceId, path, iEikonEnv );
- // show error note
- CAknStaticNoteDialog* note = new( ELeave ) CAknStaticNoteDialog;
- note->PrepareLC( R_CAM_ERROR_NOTE );
- note->SetTextL( *text );
- note->RunDlgLD();
- CleanupStack::PopAndDestroy( text );
- }
-
- // restart standby timer
- iController.StartIdleTimer();
-
- PRINT( _L("Camera <= CCamAppUi::ShowErrorNoteL") );
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::ShowOOMNoteL
-// Display error note for OOM condition
-// ---------------------------------------------------------
-//
-TInt CCamAppUi::ShowOOMNoteL( TDesC& aLabel, TBool aWithCancel )
- {
- // prevent timeout to standby - stop standby timer
- iController.StopIdleTimer();
-
- // show OOM note
- CAknStaticNoteDialog* note = new( ELeave ) CAknStaticNoteDialog;
- if(aWithCancel)
- note->PrepareLC( R_CAM_OOM_NOTE_OK_CANCEL);
- else
- note->PrepareLC( R_CAM_OOM_NOTE_OK_EMPTY);
- note->SetTextL( aLabel );
- TInt ret = note->RunDlgLD();
-
- // restart standby timer
- iController.StartIdleTimer();
-
- return ret;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::ShowMMCRemovalNoteIfRequiredL
-// Shows the mmc removal note if it is required
-// ---------------------------------------------------------
-//
-void
-CCamAppUi::ShowMMCRemovalNoteIfRequiredL()
- {
- PRINT( _L("Camera => CCamAppUi::ShowMMCRemovalNoteIfRequiredL") );
- // If we have detected a removal and not shown the note.
- if ( iViewState != ECamViewStateStandby && iMMCRemoveNoteRequired )
- {
- PRINT( _L("Camera <> Need to show note") );
-
- iMMCRemoveNoteRequired = EFalse;
- // Show the card not inserted note
- if( !iSendAsInProgress )
- {
- PRINT( _L("Camera <> showing note..") );
- ShowErrorNoteL( ECamMemoryStatusCardNotInserted );
- PRINT( _L("Camera <> ..done") );
- }
- }
- if ( IsDirectViewfinderActive() )
- {
- TRAP_IGNORE(HandleCommandL(ECamCmdRedrawScreen));
- }
- PRINT( _L("Camera <= CCamAppUi::ShowMMCRemovalNoteIfRequiredL") );
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CheckMemoryCard
-// Check status of the memory card
-// ---------------------------------------------------------
-//
-void CCamAppUi::CheckMemoryCard( TBool& aFull,
- TCamMemoryStatus& aStatus, TCamMediaStorage aCurrentLocation )
- {
- // check if memory card is full
- aFull = MemoryFull( ECamMediaStorageCard, aCurrentLocation );
-
- // get status of card
- TCamMemoryCardStatus cardStatus = CamUtility::MemoryCardStatus();
- switch ( cardStatus )
- {
- case ECamMemoryCardLocked:
- {
- // card is locked
- aStatus = ECamMemoryStatusCardLocked;
- }
- break;
- case ECamMemoryCardInserted:
- {
- aStatus = ECamMemoryStatusOK;
- }
- break;
- case ECamMemoryCardNotInserted:
- default:
- {
- aStatus = ECamMemoryStatusCardNotInserted;
- }
- break;
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::MemoryFull
-// Check if the memory location (phone or card) is full
-// ---------------------------------------------------------
-//
-TBool
-CCamAppUi::MemoryFull( TCamMediaStorage aStorage,
- TCamMediaStorage aCurrentLocation )
- {
- PRINT( _L("Camera => CCamAppUi::MemoryFull") );
- TBool cardFull = ETrue;
-
- if ( iMode != ECamControllerVideo )
- {
- // check there is space for image(s)
- TInt numImages = iController.ImagesRemaining( aStorage, IsBurstEnabled() );
-
- // at least 1 image for still capture and 2 for sequence capture
- if ( ( iImageMode == ECamImageCaptureSingle && numImages > 0 ) ||
- numImages > 1 )
- {
- cardFull = EFalse;
- }
- else
- {
- cardFull = ETrue;
- }
- }
- else // capture mode is video
- {
- // If we want to know the remaining time at the current storage location
- // we can obtain this from the engine.
- if ( aStorage == aCurrentLocation )
- {
- TTimeIntervalMicroSeconds timeRemaining = iController.RecordTimeRemaining();
-
- // Check that enough rec time available
- // or that we are recording short (MMS) video
- if ( timeRemaining >= KMemoryFullVideoRemaining )
- {
- PRINT( _L("Camera <> not full 1") );
- cardFull = EFalse;
- }
- else
- {
- PRINT( _L("Camera <> full 1") );
- cardFull = ETrue;
- }
- }
- else
- {
- // We want to know how much remaining time is available on the
- // storage location not currently in use.
- // We don't have a reliable way of estimating this, so we will
- // assume that if there is more space available than on the current
- // storage location, then the memory is not full.
-
- TTimeIntervalMicroSeconds phoneMemoryFree =
- CamUtility::MemoryFree( DriveInfo::EDefaultPhoneMemory );
- TTimeIntervalMicroSeconds cardMemoryFree =
- CamUtility::MemoryFree( DriveInfo::EDefaultRemovableMassStorage );
- TTimeIntervalMicroSeconds MassMemoryFree =
- CamUtility::MemoryFree( DriveInfo::EDefaultMassStorage );
- if ( aCurrentLocation == ECamMediaStoragePhone )
- {
- if ( phoneMemoryFree > cardMemoryFree
- && phoneMemoryFree > MassMemoryFree
- )
- {
- PRINT( _L("Camera <> full 2") );
- cardFull = ETrue;
- }
- else
- {
- PRINT( _L("Camera <> not full 2") );
- cardFull = EFalse;
- }
- }
- else if ( aCurrentLocation == ECamMediaStorageMassStorage )
- {
- if ( MassMemoryFree > cardMemoryFree
- && MassMemoryFree > phoneMemoryFree )
- {
- PRINT( _L("Camera <> full 3") );
- cardFull = ETrue;
- }
- else
- {
- PRINT( _L("Camera <> not full 3") );
- cardFull = EFalse;
- }
- }
- else
- {
- if ( cardMemoryFree > phoneMemoryFree
- && cardMemoryFree > MassMemoryFree )
- {
- PRINT( _L("Camera <> full 4") );
- cardFull = ETrue;
- }
- else
- {
- PRINT( _L("Camera <> not full 4") );
- cardFull = EFalse;
- }
- }
- }
- }
-
- PRINT1( _L("Camera <= CCamAppUi::MemoryFull, full:%d"), cardFull );
- return cardFull;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::StartCaptureL
-// Starts the video/photo capture
-// ---------------------------------------------------------
-//
-TKeyResponse
-CCamAppUi::StartCaptureL( const TKeyEvent& /*aKeyEvent*/ )
- {
- PRINT( _L("Camera => CCamAppUi::StartCaptureL") );
- iLensCoverExit = EFalse;
- iSelfTimedCapture = EFalse;
- if ( iMode != ECamControllerVideo )
- {
- // Check for active viewfinder before proceeding with capture
- if ( !iController.IsViewFinding() )
- {
- // VF not active - stop capture
- PRINT( _L("Camera <= CCamAppUi::StartCaptureL, not vf") );
- return EKeyWasNotConsumed;
- }
- // If the view is in self-timer mode, pressing of the shutter
- // button initiates the timer...
- if ( iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- __ASSERT_DEBUG( iSelfTimer, CamPanic( ECamPanicNullPointer ) );
- // Will start timer if not already started.
- // If already started, forces capture NOW.
- /*iSelfTimer->StartSelfTimer();
-
- // Change CBA to be SK1 (Blank) SK2 (Cancel)
- UpdateCba();*/
- HandleCommandL(ECamCmdSelfTimerActivate);
- }
- else // Not in SelfTimer mode so just take the photo.
- {
- if ( iController.IsProcessingCapture() )
- {
- PRINT( _L("Camera <= CCamAppUi::StartCaptureL - already processing - ignored capture key") );
- return EKeyWasNotConsumed;
- }
-
- // Start capture
- iController.Capture();
-
- // Ensure softkeys are correct for sequence
- if ( IsBurstEnabled() )
- {
- if( ECamImageCaptureBurst == iImageMode )
- {
- //Disable cancel autofocus and capture functionality from now on until burst is finished.
- PRINT( _L("Camera <> CCamAppUi::StartCaptureL, SetNoBurstCancel( ETrue )") );
- iController.SetKeyUp();
- iController.SetNoBurstCancel( ETrue );
- }
- // Make sure cancel softkey is displayed
- iPreventActivePaletteDisplay = ETrue;
- static_cast<CCamViewBase*>( iView )->UnsetCourtesySoftKeysL();
- // Change CBA to be SK1 (Blank) SK2 (Cancel)
- UpdateCba();
-
- // disable timeout to standby during burst capture
- iController.StopIdleTimer();
- }
- }
- // Shutter key - full press -> perform capture
- PRINT( _L("Camera <= CCamAppUi::StartCaptureL, image capture requested") );
- return EKeyWasConsumed;
- }
-
- // video capture mode
- else
- {
- // check for available space before proceeding with capture
- TInt callType( EPSCTsyCallTypeUninitialized );
- RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallType, callType );
- // video call or no memory available - stop capture
- if ( callType == EPSCTsyCallTypeH324Multimedia || !iController.IsViewFinding() || !CheckMemoryL() )
- {
- PRINT( _L("Camera <= CCamAppUi::StartCaptureL, video no memory") );
- return EKeyWasNotConsumed;
- }
- else if( iController.IntegerSettingValue( ECamSettingItemStopRecordingInHdmiMode) &&
- iController.IsHdmiCableConnected() )
- {
- iController.SetPendingHdmiEvent( ECamHdmiCableConnectedBeforeRecording );
- PRINT( _L("Camera <= CCamAppUi::StartCaptureL, HDMI Cable connected") );
- return EKeyWasNotConsumed;
- }
-
- PERF_EVENT_END_L1( EPerfEventKeyToCapture );
- PERF_EVENT_START_L1( EPerfEventStartVideoRecording );
- static_cast<CCamViewBase*>( iView )->UnsetCourtesySoftKeysL();
- iController.StartVideoRecordingL();
- PRINT( _L("Camera <= CCamAppUi::StartCaptureL, video capture requested") );
- return EKeyWasConsumed;
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::EndCapture
-// Stops the capture of video
-// ---------------------------------------------------------
-//
-void CCamAppUi::EndCapture()
- {
- PRINT( _L("Camera => CCamAppUi::EndCapture") );
- if ( ECamControllerVideo == iMode && !iController.IsDemandKeyRelease() )
- {
- TCamCaptureOperation operation = iController.CurrentOperation();
- // if in video recording or paused state
- if ( ECamCapturing == operation
- || ECamPaused == operation )
- {
- // if already requested to stop the recording
- // but the operation hasn't completed yet
- // then just return
- if ( iWaitTimer->IsActive() )
- {
- return;
- }
-
- ZoomPane()->StopZoom();
- ZoomPane()->MakeVisible( EFalse, ETrue );
- // ignore any errors (eg out of memory)
- TRAP_IGNORE( SetSoftKeysL( R_CAM_SOFTKEYS_BLANK ) );
- TRAP_IGNORE( DisplayWaitDialogL() );
- // give the wait dialog a chance to display itself
- iWaitTimer->Start( 0, 0, TCallBack( StopVideoRecording, this ) );
- }
- }
- PRINT( _L("Camera <= CCamAppUi::EndCapture") );
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SwitchOrientationIfRequiredL
-// Change to the new orientation if necessary
-// ---------------------------------------------------------
-//
-void CCamAppUi::SwitchOrientationIfRequiredL( TInt aNewOrientation )
- {
- TInt error = KErrNone;
- // No orientation specified, find the default orientation
- if ( aNewOrientation == EAppUiOrientationUnspecified )
- {
- if ( iController.UiConfigManagerPtr()->IsSecondaryCameraSupported() )
- {
- // Default orientation is determined by current active camera
- if ( IsSecondCameraEnabled() && !IsQwerty2ndCamera() )
- {
- error = CamUtility::GetPsiInt( ECamPsiSecondaryCameraOrientation, aNewOrientation );
- }
- else
- {
- error = CamUtility::GetPsiInt( ECamPsiPrimaryCameraOrientation, aNewOrientation );
- }
- }
- else
- {
- error = CamUtility::GetPsiInt( ECamPsiOrientation, aNewOrientation );
- }
- }
- TAppUiOrientation currentOrientation = Orientation();
- if ( !error && ( aNewOrientation != currentOrientation ) )
- {
- PRINT( _L("Camera => CCamAppUi::SwitchOrientationIfRequiredL set orient" ))
- SetOrientationL( static_cast<TAppUiOrientation>( aNewOrientation ) );
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::HandleScreenDeviceChangedL
-// Handle change of orientation etc.
-// ---------------------------------------------------------
-//
-void CCamAppUi::HandleScreenDeviceChangedL()
- {
- PRINT( _L("Camera => CCamAppUi::HandleScreenDeviceChangedL") )
- CAknAppUiBase::HandleScreenDeviceChangedL();
- if ( iEngineConstructionDelayed )
- {
- PRINT( _L("CCamAppUi::HandleScreenDeviceChangedL continuing engine construction") );
- iEngineConstructionDelayed = EFalse;
- iController.CompleteConstructionL();
- // Don't set the target mode here. If the application is not embedded
- // the mode will already be correct. If embedded, the target mode is set
- // when the HandleNewFileL function is called.
- iTargetViewState = ECamViewStatePreCapture;
-
- // pre-construct side-pane & zoom pane
- // get whether we overlay sidepane over view-finder
- TBool overlayViewFinder = EFalse;
- User::LeaveIfError( CamUtility::GetPsiInt( ECamPsiOverLaySidePane, overlayViewFinder ) );
-
- iCamSidePane = CCamSidePane::NewL( iController, overlayViewFinder );
- User::LeaveIfError(iResourceLoaders.Append(iCamSidePane));
-
- iCamZoomPane = CCamZoomPane::NewL( iController, overlayViewFinder );
- User::LeaveIfError(iResourceLoaders.Append(iCamZoomPane));
-
- // Exit standby mode now
- // (unless still waiting for HandleNewFileL command - embedded only)
- if ( IsConstructionComplete() )
- {
- // make sure standby exits as this may not actually result in
- // a view switch if the correct view is already activated
- if( iView )
- {
- iView->HandleCommandL( ECamCmdExitStandby );
- }
-
- iViewState = ECamViewStatePreCapture;
- TrySwitchViewL();
- }
- }
-
- if ( iController.UiConfigManagerPtr()->IsSecondaryCameraSupported() )
- {
- if ( iCameraSwitchDelayed )
- {
- PRINT( _L("CCamAppUi::HandleScreenDeviceChangedL restarting switch camera") );
- iCameraSwitchDelayed = EFalse;
- iController.SwitchCameraL();
- // The keys will have been blanked - update them
- static_cast<CCamViewBase*>( iView )->UpdateCbaL();
- }
- }
- PRINT( _L("Camera <= CCamAppUi::HandleScreenDeviceChangedL") );
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::StopVideoRecording
-// Stops the video recording
-// ---------------------------------------------------------
-//
-TInt CCamAppUi::StopVideoRecording( TAny* aAny )
- {
- PRINT( _L("Camera => CCamAppUi::StopVideoRecording") );
- CCamAppUi* appui = static_cast<CCamAppUi*>( aAny );
- __ASSERT_DEBUG( appui != NULL && appui->iWaitTimer != NULL, CamPanic( ECamPanicNullPointer ) );
- appui->iWaitTimer->Cancel();
- appui->iController.StopVideoRecordingAsync();
- PRINT( _L("Camera <= CCamAppUi::StopVideoRecording") );
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CallExit
-// Exit the application
-// ---------------------------------------------------------
-//
-TInt CCamAppUi::CallExit( TAny* aAny )
- {
- PRINT( _L("Camera => CCamAppUi::CallExit") )
- CCamAppUi* appui = static_cast<CCamAppUi*>( aAny );
- __ASSERT_DEBUG( appui != NULL && appui->iWaitTimer != NULL, CamPanic( ECamPanicNullPointer ) );
- appui->iWaitTimer->Cancel();
- appui->Exit();
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CloseAppL
-// Exit the application
-// ---------------------------------------------------------
-//
-void CCamAppUi::CloseAppL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_CLOSEAPPL, "e_CCamAppUi_CloseAppL 1" );
-
- PRINT( _L("Camera => CCamAppUi::CloseAppL") )
-
- // Special considerations needed for secondary camera
- // regarding scene mode and face tracking state
- if ( IsSecondCameraEnabled() && !IsEmbedded() )
- {
- // This includes storing the face tracking value
- iController.HandleSecondaryCameraExitL();
- }
- else
- {
- iController.StoreFaceTrackingValue(); // store the current FT setting
- }
-
- // cancel the self timer if active - can be active
- // if closing the slide while counting down
- if ( iInSelfTimerMode != ECamSelfTimerDisabled )
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
-
- // if we are exiting cam app, we dont need any updates
- // for the navipane
- if ( NULL != iNaviCounterControl && NULL != iNaviPaneCounterControl &&
- NULL != iNaviProgressBarControl && NULL != iNaviPaneProgressBarControl )
- {
- UpdateNaviModelsL( EFalse );
- }
-
- if ( iEikonEnv->StartedAsServerApp() )
- {
- TCamCaptureOperation operation( iController.CurrentOperation() );
-
- // If recording a video, ensure exit after video recording process has completed
- if( ECamControllerVideo == iMode
- && ( ECamCapturing == operation
- || ECamPausing == operation
- || ECamPaused == operation
- || ECamResuming == operation ) )
- {
- iController.EnterShutdownMode( EFalse );
- }
- // Otherwise, close application immediately.
- else
- {
- iController.EnterShutdownMode( ETrue );
- Exit();
- }
- }
- else
- {
- // this will exit when any current process completes
- iController.EnterShutdownMode( EFalse );
- }
-
- if( iController.IntegerSettingValue( ECamSettingItemPhotoMediaStorage ) == ECamMediaStorageNone )
- {
- iController.SetIntegerSettingValueL(ECamSettingItemPhotoMediaStorage, iInternalStorage );
- }
-
- if( iController.IntegerSettingValue( ECamSettingItemVideoMediaStorage ) == ECamMediaStorageNone )
- {
- iController.SetIntegerSettingValueL(ECamSettingItemVideoMediaStorage, iInternalStorage );
- }
-
-
- PRINT( _L("Camera <= CCamAppUi::CloseAppL") )
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP_CCAMAPPUI_CLOSEAPPL, "e_CCamAppUi_CloseAppL 0" );
-
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::InternalExitL
-// Exit the application from an internal call - this often means
-// just going to the background and resetting the settings/modes
-// ---------------------------------------------------------
-//
-void CCamAppUi::InternalExitL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_INTERNALEXITL, "e_CCamAppUi_InternalExitL 1" );
-
- PRINT( _L("Camera => CCamAppUi::InternalExitL") );
-
- iController.StoreFaceTrackingValue(); // store the current FT setting
-
- if ( iController.UiConfigManagerPtr() &&
- iController.UiConfigManagerPtr()->IsLocationSupported() )
- {
- // If record location setting is on, stop location trail
- if ( ECamLocationOn == iController.IntegerSettingValue( ECamSettingItemRecLocation ) )
- {
- // The parameter ETrue for also closing the session to location utility server
- // when exiting camera.
- iController.StopLocationTrail( ETrue );
- }
- }
-
- if( !iController.IsSavingInProgress() )
- {
- iController.ReleaseArray(ETrue);
- }
-
- if ( iEikonEnv->StartedAsServerApp() || !iController.AlwaysOnSupported() )
- {
- CloseAppL();
- }
- else if ( SettingsLaunchedFromCamera() )
- {
- //If internal exit was called from settings, we need to set the camera to
- //background before closing it to prevent view switch and that way ensuring
- //that all the camera resources are released in exit.
- SendCameraAppToBackgroundL();
- CloseAppL();
- }
- else
- {
- // if UI orientetion override is supported or lens cover is not and
- // exiting 2ndary camera, set cameraswitch to main camera since
- // always starting in maincamera stillmode
- if ( iController.UiConfigManagerPtr() &&
- ( iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() ||
- !iController.UiConfigManagerPtr()->IsLensCoverSupported() ) &&
- IsSecondCameraEnabled() )
- {
- iController.SetCameraSwitchRequired( ESwitchSecondaryToPrimary );
- }
- else if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() )
- {
- PRINT( _L("Camera <> SetCameraSwitchRequired -> ESwitchToUnknown") );
- iController.SetCameraSwitchRequired( ESwitchToUnknown );
- }
- // cancel the self timer if active - can be active
- // if closing the slide while counting down
- if ( iInSelfTimerMode != ECamSelfTimerDisabled)
- {
- SelfTimerEnableL( ECamSelfTimerDisabled );
- }
-
- if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() )
- {
- iController.SliderCloseEventActioned();
- }
-
- iController.SetEndKeyExitWaiting( EFalse );
- PRINT( _L("Camera CCamAppUi::InternalExitL - setting zoom reset pending") );
-
- iCamZoomPane->ResetToDefaultAfterPrepare( ETrue );
- SendCameraAppToBackgroundL();
-
- // if faster startup feature is supported, always start in stillmode after exit
- if ( iController.UiConfigManagerPtr() &&
- iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() &&
- iMode == ECamControllerVideo )
- {
- PRINT( _L("Camera <> InternalExitL - switching to still precapture") );
- iTargetMode = ECamControllerImage;
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL( ETrue );
- }
- else if ( iView && iViewState != ECamViewStatePreCapture && iReturnedFromPlugin )
- {
- PRINT( _L("Camera: CCamAppUi::InternalExitL - switching to precapture mode") )
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL( ETrue );
- }
-
- // If the application is already in the background but has not released
- // the resources (e.g. it was behind an eikon server window and had not yet set
- // the iPretendExit flag) then the view needs to know that the resources should
- // be released now.
- // This situation occurs when the application is 'pretending' to exit after a
- // slider closed event, but the keypad lock note appeared (but only if it was
- // in the middle of capturing a sequence as the exit is delayed for the sequence
- // to complete).
- // HandleFocusLoss() releases the resources in situations where the app was
- // 'continuing in the background'. This release of resources will only occur
- // once as the iContinueInBackground flag is reset as soon as the resources are
- // released.
-
- if ( iView && iReturnedFromPlugin )
- {
- PRINT( _L("Camera InternalExitL calling iView->HandleFocusLossL()") );
- static_cast<CCamViewBase*>( iView )->HandleFocusLossL();
- }
- // Reset active palette position. As this is done before pretended exit,
- // no AP update is needed when the application is returned to foreground
- if( iActivePaletteHandler && iReturnedFromPlugin )
- {
- iActivePaletteHandler->ResetToDefaultItem();
- // Ensure AP visibility on camera startup (also for 2ndary camera)
- // unless UI orientation override is used
- if ( iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() )
- {
- iActivePaletteHandler->SetVisibility( EFalse );
- }
- else
- {
- iActivePaletteHandler->SetVisibility( ETrue );
- }
- if( ECamViewStatePreCapture == iViewState )
- {
- iDrawPreCaptureCourtesyUI = ETrue;
- if ( !iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() )
- {
- RaisePreCaptureCourtesyUI(EFalse);
- }
-
- if ( IsSecondCameraEnabled()
- && !IsEmbedded() )
- {
- if ( ECamControllerVideo == iMode )
- {
- SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__RECORD_SECONDARY );
- }
- else
- {
- SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__CAPTURE_SECONDARY );
- }
- // Special considerations needed for secondary camera
- // regarding scene mode and face tracking state
- iController.HandleSecondaryCameraExitL();
- }
- }
- }
-
- // Cancel delayed sensor initialization, in case it's still pending when
- // internal exit is requested.
- if ( iController.UiConfigManagerPtr()->IsOrientationSensorSupported() )
- {
- CancelSensorIdle();
- }
-
- if ( iController.UiConfigManagerPtr()->IsXenonFlashSupported() )
- {
- // Reset the flash error status
- iController.FlashStatus()->SetFlashError( EFalse );
- }
-/*#ifndef __WINS__
- if ( iSendFileInCall )
- {
- // bring phone app to fore ground
- BringPhoneAppToForeGroundL();
- }
-#endif // __WINS__ */
- }
-
- if ( iView && ( iStillCaptureView == iView || iVideoCaptureView == iView )
- && ShowPostCaptureView() )
- {
- SetAssumePostCaptureView( EFalse );
- }
-
- if( iController.IsViewFinding() )
- {
- iController.StopViewFinder();
- iViewFinderStopped = ETrue;
- }
-
- if ( iStartupLogoController )
- {
- iStartupLogoController->ShowLogo();
- }
- SubmergeToolbar(); //For preventing toolbar to show up when starting camera again.
-
- PRINT( _L("Camera <= CCamAppUi::InternalExitL") );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP_CCAMAPPUI_INTERNALEXITL, "e_CCamAppUi_InternalExitL 0" );
-
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CallSwitch
-// Switch view
-// ---------------------------------------------------------
-//
-TInt CCamAppUi::CallSwitch( TAny* aAny )
- {
- CCamAppUi* appui = static_cast<CCamAppUi*>( aAny );
- __ASSERT_DEBUG( appui != NULL, CamPanic( ECamPanicNullPointer ) );
- appui->iWaitTimer->Cancel();
- TRAP_IGNORE( appui->TrySwitchViewL() );
- return KErrNone;
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::AppInBackground
-// Whether or not the app is in the background
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::AppInBackground( TBool aIncludeNotifier ) const
- {
- PRINT1( _L("Camera => CCamAppUi::AppInBackground( %d )" ), aIncludeNotifier );
- TBool aBackground = EFalse;
- // Gets the window group id of the app coming in foreground
- TInt windowGroupId = iCoeEnv->WsSession().GetFocusWindowGroup();
-
- PRINT1( _L("Camera CCamAppUi::AppInBackground windowGroupId=%d" ), windowGroupId );
-
- // Check if the window group moving to the front is the AknCapServer.
- // This often happens when OOM or out of disk space notes are shown
- TBool capServerGroup = CamUtility::IdMatchesName( windowGroupId, KAknCapServer );
-
- // AknNotifyServer notifies e.g. Location related events.
- TBool nfyServerGroup = CamUtility::IdMatchesName( windowGroupId, KAknNotifyServer );
-
- // KPbkSever - Contacts App; Assign to contacts scenario
- TBool pbkServerGroup = CamUtility::IdMatchesName( windowGroupId, KPbkServer );
- PRINT1( _L("Camera CCamAppUi::AppInBackground iMyWgId=%d" ), iMyWgId );
- // if the foreground app is not this app
- if ( windowGroupId != iMyWgId )
- {
- // if another app has the foreground
- if ( !capServerGroup
- && !nfyServerGroup
- && !pbkServerGroup
- && windowGroupId != iEikonServerWindowGroupId
- && windowGroupId != iBTServerWindowGroupId
- )
- {
- PRINT(_L("Camera CCamAppUi::AppInBackground non-AKN, non-EIK serv has focus"));
- aBackground = ETrue;
- }
- // if the eikon server has the foreground and we're classing that as
- // putting us in the background
- else if ( aIncludeNotifier )
- {
- // Check whether the new foreground window is an Eikon window
- if ( windowGroupId == iEikonServerWindowGroupId )
- {
- PRINT(_L("Camera <> CCamAppUi::AppInBackground EIK SERV HAS FOCUS"));
- aBackground = ETrue;
- }
- // Check if AknCapServer is in the foreground (includes other notes)
- else if ( capServerGroup )
- {
- PRINT(_L("Camera <> CCamAppUi::AppInBackground CAP SERV HAS FOCUS"));
- aBackground = ETrue;
- }
- else if( nfyServerGroup )
- {
- PRINT(_L("Camera <> CCamAppUi::AppInBackground Avkon notify server has focus"));
- aBackground = ETrue;
- }
- else if ( windowGroupId == iBTServerWindowGroupId )
- {
- PRINT(_L("Camera <> CCamAppUi::AppInBackground BT SERV HAS FOCUS"));
- aBackground = ETrue;
- }
- else // empty statement for lint
- {
- }
- }
- else // empty statement for lint
- {
- }
- }
- PRINT1( _L("Camera <= CCamAppUi::AppInBackground return(%d)" ), aBackground );
- return aBackground;
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::LaunchHelpL
-// Launch the context sensitive help application
-// ---------------------------------------------------------
-//
-void CCamAppUi::LaunchHelpL()
- {
- PRINT( _L("Camera => CCamAppUi::LaunchHelpL") );
- TCoeHelpContext helpContext;
- helpContext.iMajor = TUid::Uid( KCameraappUID );
-
- // Check which view is active to obtain the help context
- TVwsViewId currentViewId;
- TInt err = GetActiveViewId( currentViewId );
- if ( err == KErrNone )
- {
- switch ( currentViewId.iViewUid.iUid )
- {
- case ECamViewIdStillPreCapture:
- // Still precapture can have multiple modes. We must ask it
- // for the current context.
- iStillCaptureView->GetHelpContext( helpContext );
- break;
- case ECamViewIdStillPostCapture:
- helpContext.iContext = KLCAM_HLP_POST_PHOTO;
- break;
- case ECamViewIdVideoPreCapture:
- // Video precapture can have multiple modes. We must ask it
- // for the current context.
- iVideoCaptureView->GetHelpContext( helpContext );
- break;
- case ECamViewIdVideoPostCapture:
- helpContext.iContext = KLCAM_HLP_POST_VIDEO;
- break;
- case ECamViewIdBurstThumbnail:
- helpContext.iContext = KLCAM_HLP_POST_SEQ;
- break;
- case ECamViewIdVideoSettings:
- helpContext.iContext = KLCAM_HLP_SETTINGS_VIDEO;
- break;
- case ECamViewIdPhotoSettings:
- helpContext.iContext = KLCAM_HLP_SETTINGS_PHOTO;
- break;
- case ECamViewIdPhotoUserSceneSetup:
- helpContext.iContext = KLCAM_HLP_SETTINGS_PHOUSER;
- break;
- default:
- break;
- }
- }
- else if ( err == KErrNotFound && iPreCaptureMode == ECamPreCapStandby )
- {
- // This is a work-around for the problem of GetActiveViewId()
- // returning -1 when in the Standby view.
- if ( IsEmbedded() )
- {
- helpContext.iContext = KLCAM_HLP_STANDYBY_EM;
- }
- else
- {
- helpContext.iContext = KLCAM_HLP_STANDYBY_EM;
- }
- }
- else
- {
- User::Leave( err );
- }
-
- PRINT1( _L("Camera <> CCamAppUi::LaunchHelpL, help context: %S"), &(helpContext.iContext) );
-
- // Create the context array and append the single context item
- CArrayFix<TCoeHelpContext>* contextArray =
- new ( ELeave ) CArrayFixFlat<TCoeHelpContext> ( 1 );
-
- CleanupStack::PushL( contextArray );
- contextArray->AppendL( helpContext );
- CleanupStack::Pop( contextArray );
-
- //Launch help - takes ownership of context array
- HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
- contextArray );
-
- PRINT( _L("Camera <= CCamAppUi::LaunchHelpL") );
- }
-
-#ifndef __WINS__
-// ---------------------------------------------------------
-// CCamAppUi::ProcessCommandParametersL
-// Allow Camera application to respond to request for in-call send
-// functionality from Phone application
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::ProcessCommandParametersL(
- TApaCommand aCommand,
- TFileName& aDocumentName,
- const TDesC8& /*aTail*/ )
- {
- PRINT( _L("CCamAppUi::ProcessCommandParametersL") );
- // Check if we should start in SFI mode
-/* if ( aCommand == EApaCommandOpen && aDocumentName == KSFITrailing )
- {
- if ( !SFIUtility() )
- {
- PRINT( _L("CCamAppUi::ProcessCommandParametersL !!") );
- return EFalse;
- }
- SFIUtility()->IsCLIValidL();
-
- iSendFileInCall = ETrue;
- PRINT( _L("CCamAppUi::ProcessCommandParametersL iSendFileInCall = ETrue") );
- // Make sure that the static settings are loaded
- iController.LoadStaticSettingsL( ETrue );
- }*/
- return EFalse;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::HandleMessageL
-// Bring Camera app to foreground in response to request for in-call send
-// ---------------------------------------------------------
-//
-MCoeMessageObserver::TMessageResponse CCamAppUi::HandleMessageL(
- TUint32 aClientHandleOfTargetWindowGroup,
- TUid aMessageUid,
- const TDesC8& aMessageParameters )
- {
- PRINT( _L("CCamAppUi::HandleMessageL") );
- // Go to SFI mode at run-time if requested by SFIUtils
- // using a window server message.
- if ( aMessageUid.iUid == 0 && aMessageParameters.Length() > 0 )
- {
- TInt lengthInCharacters =
- ( aMessageParameters.Length() * sizeof( TUint8 ) ) /
- sizeof( TUint16 );
- TPtrC message(
- reinterpret_cast<const TUint16*>( aMessageParameters.Ptr() ),
- lengthInCharacters );
-
- /*if ( message == KSFITrailing )
- {
- if ( !SFIUtility() )
- {
- // Jump to foreground anyway, even if SFI mode cannot
- // be activated.
- iEikonEnv->RootWin().SetOrdinalPosition( 0, 0 );
- return CAknAppUi::HandleMessageL(
- aClientHandleOfTargetWindowGroup,
- aMessageUid,
- aMessageParameters );
- }
-
- SFIUtility()->IsCLIValidL();
-
- iSendFileInCall = ETrue;
- PRINT( _L("CCamAppUi::HandleMessageL iSendFileInCall = ETrue") );
-
- // Jump to foreground
- iEikonEnv->RootWin().SetOrdinalPosition( 0, 0 );
-
- // load embedded static settings
- iController.LoadStaticSettingsL( ETrue );
- }*/
- }
- return CAknAppUi::HandleMessageL( aClientHandleOfTargetWindowGroup,
- aMessageUid, aMessageParameters);
- }
-
-#endif // HANDLE_TRANSITIONAL_UI
-
-// ---------------------------------------------------------
-// CCamAppUi::SidePane
-// Return reference to side-pane object
-// ---------------------------------------------------------
-//
-CCamSidePane* CCamAppUi::SidePane()
- {
- return iCamSidePane;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::ZoomPane
-// Return reference to zoom-pane object
-// ---------------------------------------------------------
-//
-CCamZoomPane* CCamAppUi::ZoomPane()
- {
- return iCamZoomPane;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CurrentViewState
-// Return current view state
-// ---------------------------------------------------------
-//
-TCamViewState CCamAppUi::CurrentViewState() const
- {
- return iViewState;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::TargetViewState
-// Returns target view state
-// ---------------------------------------------------------
-//
-TCamViewState CCamAppUi::TargetViewState()
- {
- return iTargetViewState;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::TargetMode
-// ---------------------------------------------------------
-//
-TCamCameraMode CCamAppUi::TargetMode() const
- {
- return iTargetMode;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::HandleShutterKeyL
-// Handles the shutter key press
-// ---------------------------------------------------------
-//
-void CCamAppUi::HandleShutterKeyL( TBool aPressed )
- {
- // only handle the shutter key if the app is
- // in the foreground and view finder is active
- if ( !AppInBackground( ETrue ) )
- {
- RArray<TInt> captureKeys;
- CleanupClosePushL( captureKeys );
-
- if ( iController.UiConfigManagerPtr() )
- {
- iController.UiConfigManagerPtr()->
- SupportedPrimaryCameraCaptureKeyL( captureKeys );
- if ( captureKeys.Count() <= 0 )
- {
- User::Leave( KErrNotSupported );
- }
- }
- TKeyEvent keyEvent;
- keyEvent.iScanCode = captureKeys[0];//EProductKeyCapture
- keyEvent.iModifiers = 0;
- keyEvent.iRepeats = 0;
-
- CleanupStack::PopAndDestroy( &captureKeys );
-
- // check we have a currently active view
- if( iView )
- {
- CCoeControl* container = static_cast<CCamViewBase*>( iView )->Container();
- if ( container )
- {
- if ( aPressed )
- {
- container->OfferKeyEventL( keyEvent, EEventKeyDown );
- }
- else
- {
- container->OfferKeyEventL( keyEvent, EEventKeyUp );
- }
- }
- }
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::IsHeadsetConnected
-// Return whether headset is connected
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::IsHeadsetConnected() const
- {
- TBool connected( EFalse );
-
- TRAP_IGNORE(
- {
- CAccMonitor* monitor = CAccMonitor::NewLC();
- RConnectedAccessories accessories;
- CleanupClosePushL( accessories );
-
- TAccMonCapability device = KAccMonNoDevice;
-
- monitor->GetConnectedAccessoriesL( accessories );
- TInt count = accessories.Count();
-
- // loop through connected accessories
- for ( TInt i = 0; i != count; i++ )
- {
- device = accessories[i]->AccDeviceType();
- // headset device type
- if ( device == KAccMonHeadset )
- {
- connected = ETrue;
- break;
- }
- }
-
- CleanupStack::PopAndDestroy( &accessories );
- CleanupStack::PopAndDestroy( monitor );
- });
-
- return connected;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::HandleVolumeKeyEvent
-//
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::HandleVolumeKeyEvent( TRemConCoreApiOperationId aOperationId,
- TRemConCoreApiButtonAction aButtonAct )
- {
- PRINT2( _L("Camera => CCamAppUi::HandleVolumeKeyEvent op (%d) act (%d)"), aOperationId, aButtonAct )
-
- if ( !iZoomUsingVolumeKeys || IsHeadsetConnected() )
- {
- PRINT( _L("Camera <= CCamAppUi::HandleVolumeKeyEvent NOT zooming with volume keys") )
- return;
- }
- // only handle the shutter key if the app is
- // in the foreground and view finder is active
- if ( !AppInBackground( ETrue ) )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent yes"))
- // check we have a currently active view
- if( iView && ( iCamOrientation == ECamOrientationCamcorder
- || iCamOrientation == ECamOrientationCamcorderLeft) &&
- ECamViewStatePreCapture == iViewState ) // Zoom only needed in precap
- {
- CCoeControl* container = static_cast<CCamViewBase*>( iView )->Container();
- if ( container )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent cont"))
- TKeyEvent keyEvent;
- keyEvent.iModifiers = 0;
- keyEvent.iRepeats = 0;
-
- // map up/down to appropriate zoom key
- if( aOperationId == ERemConCoreApiVolumeUp )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent up"))
- keyEvent.iScanCode = EStdKeyIncVolume;
- }
- else if( aOperationId == ERemConCoreApiVolumeDown )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent down"))
- keyEvent.iScanCode = EStdKeyDecVolume;
- }
- else
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent ??"))
- }
- // map event type
- if ( aButtonAct == ERemConCoreApiButtonPress )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent press"))
- TRAP_IGNORE( container->OfferKeyEventL( keyEvent, EEventKeyDown ) );
- }
- else if( aButtonAct == ERemConCoreApiButtonRelease )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent release"))
- TRAP_IGNORE( container->OfferKeyEventL( keyEvent, EEventKeyUp ) );
- }
- else if( aButtonAct == ERemConCoreApiButtonClick )
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent click"))
- TRAP_IGNORE( container->OfferKeyEventL( keyEvent, EEventUser ) );
- }
- else
- {
- PRINT( _L("Camera <> CCamAppUi::HandleVolumeKeyEvent unhandled volume keypress"))
- }
- }
- }
- }
- PRINT( _L("Camera <= CCamAppUi::HandleVolumeKeyEvent"))
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::SetEmbedding
-// Sets embedding flag
-// ---------------------------------------------------------
-//
-void CCamAppUi::SetEmbedding( TBool aEmbedding )
- {
- PRINT1( _L("Camera => CCamAppUi::SetEmbedding %d"), aEmbedding )
- iEmbedding = aEmbedding;
- PRINT( _L("Camera <= CCamAppUi::SetEmbedding") )
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::Embedding
-// Returns embedding flag
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::Embedding() const
- {
- PRINT1( _L("Camera => CCamAppUi::Embedding %d"), iEmbedding )
- PRINT( _L("Camera <= CCamAppUi::Embedding") )
- return iEmbedding;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SetSendAsInProgressL
-// Sets the SendAs flag
-// ---------------------------------------------------------
-//
-void CCamAppUi::SetSendAsInProgressL( TBool aSendAsInProgress )
- {
- PRINT1( _L("Camera => CCamAppUi::SetSendAsInProgressL %d"), aSendAsInProgress );
- // Check before updating embedding status.
- TBool exitStatus = iController.CheckExitStatus();
-
- iSendAsInProgress = aSendAsInProgress;
- SetEmbedding( aSendAsInProgress );
-
- if ( !iSendAsInProgress )
- {
- PRINT( _L("Camera <> CCamAppUi::SetSendAsInProgressL - checking exit status..") );
- // Exit not wanted when embedding / embedded
- // Check if camera switch is required.
- if ( exitStatus )
- {
- InternalExitL();
- }
- else if ( iPendingViewSwitch != EPendingViewSwitchNone )
- {
- iPendingViewSwitch = EPendingViewSwitchNone;
- iWaitTimer->Start( 0, 0, TCallBack( CallSwitch, this ) );
- }
- else
- {
- // Do nothing
- }
- }
- PRINT( _L("Camera <= CCamAppUi::SetSendAsInProgressL") );
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SendAsInProgressL
-// Get the SendAs flag value
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::SendAsInProgress() const
- {
- return iSendAsInProgress;
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::IsMMCRemoveNotePending
-// Return whether an MMC removal note is pending
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::IsMMCRemovedNotePending() const
- {
- if ( iMMCRemoveNoteRequired || iMMCRemoveNoteRequiredOnCapture )
- {
- return ETrue;
- }
- else
- {
- return EFalse;
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::HandleCameraErrorL
-// Display an error note
-// ---------------------------------------------------------
-//
-void CCamAppUi::HandleCameraErrorL( TInt aError )
- {
- if( aError == KErrNoMemory )
- {
- PRINT( _L( "Camera => CCamAppUi::HandleCameraErrorL KErrNoMemory" ) );
- HBufC* text = StringLoader::LoadLC( R_CAM_MEMLO_NOT_ENOUGH_MEMORY );
- // Display an error note
- CAknErrorNote* dlg = new (ELeave) CAknErrorNote( ETrue );
- dlg->ExecuteLD( *text );
-
- CleanupStack::PopAndDestroy( text );
- }
- else if ( aError )
- {
- PRINT1( _L( "Camera => CCamAppUi::HandleCameraErrorL (%d)" ), aError );
-
- // Resolve the error text with no context or separator
- TPtrC buf;
- buf.Set( iTextResolver->ResolveErrorString( aError, CTextResolver::ECtxNoCtxNoSeparator ) );
-
- // Display an error note
- CAknErrorNote* dlg = new (ELeave) CAknErrorNote( ETrue );
- dlg->ExecuteLD( buf );
-
- PRINT( _L( "Camera <= CCamAppUi::HandleCameraErrorL" ) );
- }
- else
- {
- }
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::TextResolver
-// Offers a reference to appui's TextResolver instance
-// ---------------------------------------------------------
-//
-CTextResolver* CCamAppUi::TextResolver()
- {
- return iTextResolver;
- }
-
-
-#ifndef __WINS__
-// ---------------------------------------------------------
-// CCamAppUi::SFIUtility
-// Return pointer to in-call send utility object
-// ---------------------------------------------------------
-//
-/*CSFIUtilsAppInterface* CCamAppUi::SFIUtility() const
- {
- return iSFIUtils;
- }*/
-
-// ---------------------------------------------------------
-// CCamAppUi::IsInCallSend
-// Return whether in in-call send mode
-// ---------------------------------------------------------
-//
-/*TBool CCamAppUi::IsInCallSend() const
- {
- return iSendFileInCall;
- }*/
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::DoInCallSendL
-// Handle send to caller functionality
-// ---------------------------------------------------------------------------
-//
-/*void CCamAppUi::DoInCallSendL() const
- {
- PRINT( _L("CCamAppUi::DoInCallSendL in") );
- if ( iSFIUtils && iSFIUtils->IsCLIValidL() )
- {
- PRINT( _L("CCamAppUi::DoInCallSendL send") );
- iSFIUtils->SendMediaFileL( iController.CurrentFullFileName() );
- }
- PRINT( _L("CCamAppUi::DoInCallSendL out") );
- } */
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::BringPhoneAppToForeGroundL
-// Bring phone application to foreground
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::BringPhoneAppToForeGroundL()
- {
- PRINT( _L("CCamAppUi::BringPhoneAppToForeGroundL") );
- TApaTaskList apaTaskList( CCoeEnv::Static()->WsSession() );
- TApaTask apaTask = apaTaskList.FindApp( KPhoneAppUid );
- if ( apaTask.Exists() )
- {
- apaTask.BringToForeground();
- }
-
- // load non-embedded static settings
- iController.LoadStaticSettingsL( EFalse );
- // no longer in SFI state
-// iSendFileInCall = EFalse;
-
- // set us back to pre-capture
- iTargetViewState = ECamViewStatePreCapture;
- // when camera is used again, TrySwitchViewL() will be called
- iPendingViewSwitch = EPendingViewSwitchDeactivateFirst;
-
- PRINT( _L("CCamAppUi::BringPhoneAppToForeGroundL iSendFileInCall = EFalse") );
- }
-
-#endif
-
-// ---------------------------------------------------------
-// CCamAppUi::IsInPretendExit
-// Indicates whether or not the application is in a simulated exit situation
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::IsInPretendExit() const
- {
- return iPretendExit;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::ReturningFromPretendExit
-// Indicates whether or not the application was in a simulated exit situation
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::ReturningFromPretendExit() const
- {
- return iReturningFromPretendExit;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::IsFirstBoot
-// Indicates whether or not the application started the first time
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::IsFirstBoot() const
- {
- return iFirstBoot;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SendCameraAppToBackgroundL
-// Sends the camera application to the background, to pretend we're closing
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SendCameraAppToBackgroundL()
- {
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_SENDCAMERAAPPTOBACKGROUNDL, "e_CCamAppUi_SendCameraAppToBackgroundL 1" );
-
- PRINT( _L("Camera => CCamAppUi::SendCameraAppToBackgroundL") );
- // Pretend we're closing, so reset the dynamic settings.
- iController.SetDynamicSettingsToDefaults();
-
- // stop listening mmc dismount notifications
- iController.CancelDismountMonitoring();
-
- // Switch sequence capture off if the app is going to pretend to close
- if ( IsBurstEnabled() )
- {
- PRINT( _L("CCamAppUi::SendCameraAppToBackgroundL calling ToggleMulti") );
- SwitchStillCaptureModeL( ECamImageCaptureSingle, EFalse );
- }
-
- // Send the task with the given WgId to the background
- CAknSgcClient::MoveApp( iMyWgId, ESgcMoveAppToBackground );
-
- // Hide from task list/FSW and send to background
- HideTaskL( ETrue );
- iPretendExit = ETrue;
- iFirstVFStart = ETrue;
-
- PRINT( _L("Camera <= CCamAppUi::SendCameraAppToBackgroundL") );
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_SENDCAMERAAPPTOBACKGROUNDL, "e_CCamAppUi_SendCameraAppToBackgroundL 0" );
-
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::HideTaskL
-// Hides or shows the Camera app task in the tasklist
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::HideTaskL(TBool aHide)
- {
- // HideApplicationFromFSW also hides running status from menu grid
- HideApplicationFromFSW( aHide );
-
- // The following ensures that the task is hidden even if an embedded camera app is also running
- RWsSession session = iEikonEnv->WsSession();
- CApaWindowGroupName* wgName = CApaWindowGroupName::NewL( session, iMyWgId );
- wgName->SetHidden( aHide );
- wgName->SetWindowGroupName( iEikonEnv->RootWin() );
- delete wgName;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::StartAsServerAppL
-// Start application as file server application
-// ---------------------------------------------------------
-//
-void
-CCamAppUi::StartAsServerAppL( MCamEmbeddedObserver* aEmbeddedObserver,
- TInt aMode )
- {
- PRINT1( _L("Camera => CCamAppUi::StartAsServerAppL mode:%d"), aMode );
-
- __ASSERT_ALWAYS( aMode == ECamControllerVideo || aMode == ECamControllerImage,
- CamPanic( ECamPanicNotSupported ) );
-
- // start the ui construct timer to speed up the starting in embedded mode
- if ( iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() )
- {
- if ( iWaitTimer->IsActive() )
- {
- PRINT( _L( "Camera <> timer already active" ) )
- iWaitTimer->Cancel();
- }
- PRINT( _L( "Camera <> start the appui construct timer" ) )
- iWaitTimer->Start( 0, 0, TCallBack( AppUIConstructCallbackL, this ) );
- }
-
- // Load Embedded Settings
- iController.LoadStaticSettingsL( ETrue );
- iEmbeddedViewSet = ETrue;
- iEmbeddedObserver = aEmbeddedObserver;
- iTargetViewState = ECamViewStatePreCapture;
-
-
- if ( aMode == ECamControllerVideo )
- {
- iTargetMode = ECamControllerVideo;
- iMode = ECamControllerVideo;
- }
- else if ( aMode == ECamControllerImage )
- {
- iTargetMode = ECamControllerImage;
- iMode = ECamControllerImage;
- }
-
- // Find the parent app's name:
-
- RWsSession ws = iEikonEnv->WsSession();
-
- // Get a list of the names and IDs of the all the window groups
- RArray<RWsSession::TWindowGroupChainInfo> windowList;
- CleanupClosePushL(windowList);
-
- // Get a list of window group IDs
- User::LeaveIfError(ws.WindowGroupList(&windowList));
-
- // Find our window group ID
- RThread thread;
- TInt cameraWindowGroup = ws.FindWindowGroupIdentifier(0, thread.Id());
- thread.Close();
-
- TInt parentID = 0;
- TBool found = EFalse;
-
- // Find our window ID in the list, to look up the parent ID
- for( TInt i = 0; !found && i < windowList.Count(); i++ )
- {
- RWsSession::TWindowGroupChainInfo windowInfo = windowList[i];
- if ( windowInfo.iId == cameraWindowGroup )
- {
- parentID = windowInfo.iParentId;
- found = ETrue;
- }
- }
-
- CleanupStack::PopAndDestroy(&windowList);
-
- if ( found )
- {
- TBuf<100> windowName;
- ws.GetWindowGroupNameFromIdentifier( parentID, windowName );
-
- // The format of windowName is:
- // [number][zero-char][UID of app][zero-char][Title of window][zero-char]
- // We want to discard everything up to the window title:
- for ( TInt t = 0; t < 2; t++ )
- {
- TInt zeroPos = windowName.Locate(0);
-
- if ( zeroPos != KErrNotFound
- && zeroPos < windowName.Length() )
- {
- windowName.Delete(0, zeroPos + 1);
- }
- }
-
- // And the final zero-char
- if ( windowName.Length() > 0 )
- {
- if ( windowName[windowName.Length() - 1] == 0 )
- {
- windowName.Delete(windowName.Length() - 1, 1);
- }
- }
-
- if ( windowName.Length() > 0 )
- {
- iParentAppName = HBufC::NewL(windowName.Length());
- iParentAppName->Des().Copy(windowName);
-
- SetTitleL(windowName);
- }
- else
- {
- // Something's wrong - act as if we haven't found it
- found = EFalse;
- }
- }
-
- // We were unable to find the parent app's name, so fall back on our own app title
- if( !found )
- {
- iParentAppName = StringLoader::LoadL(R_CAM_GENERIC_TITLE_NAME);
- }
-
- // make sure standby exits as this may not actually result in
- // a view switch if the correct view is already activated
- if( iView )
- {
- iView->HandleCommandL( ECamCmdExitStandby );
- }
- iViewState = ECamViewStatePreCapture;
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL();
-
- // Start reserve-poweron sequence
- iController.EmbeddedStartupSequence();
-
- PRINT( _L("Camera <= CCamAppUi::StartAsServerAppL") );
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::SetEmbeddedObserver
-// ---------------------------------------------------------
-//
-void CCamAppUi::SetEmbeddedObserver( MCamEmbeddedObserver* aEmbeddedObserver )
- {
- PRINT1( _L("Camera <> CCamAppUi::SetEmbeddedObserver %x"), aEmbeddedObserver );
- iEmbeddedObserver = aEmbeddedObserver;
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::CamOrientation
-// Returns the current orientation of the app
-// ---------------------------------------------------------------------------
-//
-TCamOrientation CCamAppUi::CamOrientation()
- {
- return iCamOrientation;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetCamOrientationToLandscape()
-// Set the current orientation as landscape
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetCamOrientationToLandscape()
- {
- iCamOrientation = (ECamHandLeft == iSoftkeyPosition )
- ? ECamOrientationCamcorderLeft
- : ECamOrientationCamcorder;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::AppUiOrientation
-// Returns the AppUi orientation (e.g. Portrait or Landscape) for the given product-specific orientation
-// ---------------------------------------------------------------------------
-//
-CAknAppUiBase::TAppUiOrientation CCamAppUi::AppUiOrientation(TCamOrientation aCamOrientation)
- {
- switch ( aCamOrientation )
- {
- case ECamOrientationCamcorder: // fallthrough
- case ECamOrientationCamcorderLeft:
- {
- return CAknAppUiBase::EAppUiOrientationLandscape;
- }
- case ECamOrientationViewMode:
- {
- return CAknAppUiBase::EAppUiOrientationLandscape;
- }
- case ECamOrientationPortrait:
- {
- return CAknAppUiBase::EAppUiOrientationPortrait;
- }
- default:
- {
- return CAknAppUiBase::EAppUiOrientationUnspecified;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::LayoutStateToOrientation
-// Returns the camera orientation based on the layout state set by the phone
-// ---------------------------------------------------------------------------
-//
-TCamOrientation CCamAppUi::LayoutStateToOrientation( TInt aLayoutState )
- {
- TCamOrientation orientation = ECamOrientationDefault;
-
-#ifdef __WINS__
- switch(aLayoutState)
- {
- // Emulator numbers
- case 2:
- orientation = ECamOrientationPortrait;
- break;
- case 6:
- if( iSoftkeyPosition == ECamHandLeft )
- {
- orientation = ECamOrientationCamcorderLeft;
- }
- else
- {
- orientation = ECamOrientationCamcorder;
- }
- break;
- }
-#else // !__WINS__
- switch(aLayoutState)
- {
- // Magic number alert!
- // These numbers come from AknPriv.rss, where they are currently hardcoded
- case 0:
- orientation = ECamOrientationPortrait;
- break;
- case 1:
- if( iSoftkeyPosition == ECamHandLeft )
- {
- orientation = ECamOrientationCamcorderLeft;
- }
- else
- {
- orientation = ECamOrientationCamcorder;
- }
- break;
- case 2:
- orientation = ECamOrientationViewMode;
- break;
- case 3:
- orientation = ECamOrientationPortrait;
- break;
- default:
- orientation = ECamOrientationDefault;
- break;
- }
-#endif // __WINS__
-
- return orientation;
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::ReadCurrentDeviceOrientation
-// Returns the camera orientation based on the layout state set by the phone
-// ---------------------------------------------------------------------------
-//
-TCamOrientation CCamAppUi::ReadCurrentDeviceOrientation()
- {
- PRINT( _L("Camera <> CCamAppUi::ReadCurrentDeviceOrientation") )
- return ECamOrientationDefault;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::ActivePalette
-// Return handle to Active Palette
-// ---------------------------------------------------------------------------
-//
-MActivePalette2UI* CCamAppUi::ActivePalette() const
- {
- return iActivePaletteHandler->ActivePalette();
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::APHandler
-// Returns pointer to Active Palette handler
-// ---------------------------------------------------------------------------
-//
-CCamActivePaletteHandler* CCamAppUi::APHandler() const
- {
- return iActivePaletteHandler;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::DrawPreCaptureCourtesyUI
-// Returns whether the optional precapture UI should be currently shown
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::DrawPreCaptureCourtesyUI() const
- {
- if ( CourtesyUiApplies() )
- {
- return iDrawPreCaptureCourtesyUI;
- }
- else
- {
- // Otherwise always draw the UI
- return ETrue;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::DrawPostCaptureCourtesyUI
-// Returns whether the optional postcapture UI should be currently shown
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::DrawPostCaptureCourtesyUI() const
- {
- if ( CourtesyUiApplies() )
- {
- return iDrawPostCaptureCourtesyUI;
- }
- else
- {
- // Otherwise always draw the UI
- return ETrue;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::AlwaysDrawPreCaptureCourtesyUI
-// Returns whether the optional precapture UI should always be shown
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::AlwaysDrawPreCaptureCourtesyUI() const
- {
- return iAlwaysDrawPreCaptureCourtesyUI;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::AlwaysDrawPostCaptureCourtesyUI
-// Returns whether the optional postcapture UI should always be shown
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::AlwaysDrawPostCaptureCourtesyUI() const
- {
- return iAlwaysDrawPostCaptureCourtesyUI;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetAlwaysDrawPreCaptureCourtesyUI
-// Set whether the optional precapture UI should always be shown
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetAlwaysDrawPreCaptureCourtesyUI( TBool aNewSetting )
- {
- iAlwaysDrawPreCaptureCourtesyUI = aNewSetting;
-
- if ( aNewSetting )
- {
- RaisePreCaptureCourtesyUI(EFalse);
- }
- else
- {
- SubmergePreCaptureCourtesyUI();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetAlwaysDrawPostCaptureCourtesyUI
-// Set whether the optional postcapture UI should always be shown
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetAlwaysDrawPostCaptureCourtesyUI(TBool aNewSetting)
- {
- iAlwaysDrawPostCaptureCourtesyUI = aNewSetting;
-
- if ( aNewSetting )
- {
- RaisePostCaptureCourtesyUI();
- }
- else
- {
- SubmergePostCaptureCourtesyUI();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::CourtesyTimeout
-// Called after 15 seconds of key inactivity
-// ---------------------------------------------------------------------------
-//
-TInt CCamAppUi::CourtesyTimeout( TAny* aPtr )
- {
- return static_cast<CCamAppUi*>( aPtr )->DoCourtesyTimeout();
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::DoCourtesyTimeoutL
-// Called after 15 seconds of key inactivity
-// ---------------------------------------------------------------------------
-//
-TInt CCamAppUi::DoCourtesyTimeout()
- {
- if ( iCourtesyTimerInPreCapture )
- {
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if ( toolbar )
- {
- CAknToolbarExtension* toolbarextension =
- toolbar->ToolbarExtension();
- if ( toolbarextension && toolbarextension->IsShown() )
- {
- // Do not hide courtesy UI when toolbar extension is open
-
- return EFalse;
- }
- }
- }
- iDrawPreCaptureCourtesyUI = EFalse;
- SubmergePreCaptureCourtesyUI();
- }
-
- iCourtesyTimer->Cancel();
-
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::CheckCourtesyKeyEventL
-// Check whether the current key event should raise the optional UI
-// ---------------------------------------------------------------------------
-//
-TKeyResponse CCamAppUi::CheckCourtesyKeyEventL(
- const TKeyEvent aKeyEvent,
- TEventCode aType,
- TBool aInPreCapture )
- {
- PRINT(_L("Camera => CheckCourtesyKeyEventL"))
-
- TKeyResponse retVal = EKeyWasNotConsumed;
-
- if ( CourtesyUiApplies() )
- {
- // Always reset the timer on any key event, if appropriate
- if( ( ( aInPreCapture && !iAlwaysDrawPreCaptureCourtesyUI )
- || ( !aInPreCapture && !iAlwaysDrawPostCaptureCourtesyUI )
- )
- &&
- ( ( aInPreCapture && iDrawPreCaptureCourtesyUI )
- || (!aInPreCapture && iDrawPostCaptureCourtesyUI )
- )
- )
- {
- iCourtesyTimer->Cancel();
- iCourtesyTimer->StartTimer();
- iCourtesyTimerInPreCapture = aInPreCapture;
- }
- // Here we check if the LSK key is pressed by using the scan code
- // We do this, to show the active tool bar when LSK is pressed when
- // the AP tool bar is hidden AND Pressing "RSK" shall have to return
- // to PreCaptureView (Image/Video mode)
- // LSK --> Left Softkey
- // RSK --> Right Softkey
- if ( aType == EEventKeyDown &&
- aKeyEvent.iScanCode == EStdKeyDevice0 )
- {
- iLeftSoftKeyPressed = ETrue;
- }
- else
- {
- iLeftSoftKeyPressed = EFalse;
- }
-
- if ( iController.UiConfigManagerPtr() &&
- !iController.UiConfigManagerPtr()->IsLocationSupported() )
- {
- if ( aType == EEventKey &&
- aKeyEvent.iScanCode == EStdKeyNo )
- {
- iEndKeyPressed = ETrue;
- }
- else
- {
- iEndKeyPressed = EFalse;
- }
- }
-
- const TCamCaptureOperation operation( iController.CurrentOperation() );
- if ( aType == EEventKey )
- {
- if ( EStdKeyRightArrow == aKeyEvent.iScanCode && !iController.IsTouchScreenSupported() )
- {
- if( aInPreCapture )
- {
- // during sequence capturing, Navi-Right is inactive to affect CourtesyUI
- if ( !( IsBurstEnabled() && ( ECamCapturing == operation || ECamCompleting == operation ) ) )
- {
- iDrawPreCaptureCourtesyUI = EFalse;
- if ( !IsSecondCameraEnabled() )
- {
- SubmergePreCaptureCourtesyUI();
- }
- else if ( !IsEmbedded() )
- {
- SetActivePaletteVisibility( EFalse );
- if ( ECamControllerVideo == iMode )
- {
- SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__RECORD_TXT );
- }
- else
- {
- SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__CAPTURE_TXT );
- }
- }
- }
- }
- else
- {
- iDrawPostCaptureCourtesyUI = EFalse;
- if ( !IsSecondCameraEnabled() )
- {
- SubmergePostCaptureCourtesyUI();
- }
- else
- {
- SetActivePaletteVisibility( EFalse );
- }
- }
- return EKeyWasConsumed;
- }
-
- else if ( ( EStdKeyLeftArrow == aKeyEvent.iScanCode
- || (!aInPreCapture && EStdKeyDevice3 == aKeyEvent.iScanCode && !IsToolBarVisible() ) )
- && !iController.IsTouchScreenSupported() )
- {
- iRotatedKeyEvent = ETrue;
- if( aInPreCapture )
- {
- // during sequence capturing, Navi-Left is inactive to affect CourtesyUI
- if ( !( IsBurstEnabled() && ( ECamCapturing == operation || ECamCompleting == operation ) ) )
- {
- iDrawPreCaptureCourtesyUI = ETrue;
- RaisePreCaptureCourtesyUI(EFalse);
-
- if ( /*IsSecondCameraEnabled()
- &&*/ !IsEmbedded() )
- {
- if ( ECamControllerVideo == iMode )
- {
- IsSecondCameraEnabled()?SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__RECORD_SECONDARY ):
- SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__RECORD );
- }
- else
- {
- IsSecondCameraEnabled()?SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__CAPTURE_SECONDARY ):
- SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__CAPTURE );
- }
- }
- }
- }
- else
- {
- iDrawPostCaptureCourtesyUI = ETrue;
- RaisePostCaptureCourtesyUI();
- }
- return EKeyWasConsumed;
- }
- // Only check if the user has turned the UI off
- if( ( aInPreCapture && !iAlwaysDrawPreCaptureCourtesyUI )
- || ( !aInPreCapture && !iAlwaysDrawPostCaptureCourtesyUI ))
- {
- // Decide whether to turn the UI back on
- if( ( aInPreCapture && !iDrawPreCaptureCourtesyUI)
- || (!aInPreCapture && !iDrawPostCaptureCourtesyUI))
- {
- if ( aKeyEvent.iScanCode == EStdKeyUpArrow
- || aKeyEvent.iScanCode == EStdKeyDownArrow
- || aKeyEvent.iScanCode == EStdKeyDevice3
- // Navikey select
- )
- {
- if ( aInPreCapture )
- {
- RaisePreCaptureCourtesyUI(EFalse);
- }
- else
- {
- RaisePostCaptureCourtesyUI();
- }
- retVal = EKeyWasConsumed;
- }
- }
-#ifndef __WINS__
- RArray <TInt> halfCaptureKeys;
- CleanupClosePushL( halfCaptureKeys );
-
- // now get half key press code to register
- if ( iController.UiConfigManagerPtr() )
- {
- iController.UiConfigManagerPtr()->
- SupportedPrimaryCameraAutoFocusKeyL( halfCaptureKeys );
- }
- if ( halfCaptureKeys.Count() > 0 )
- {
- if ( aInPreCapture && aKeyEvent.iScanCode
- == halfCaptureKeys[0] )
- {
- SubmergePreCaptureCourtesyUI();
- retVal = EKeyWasConsumed;
- }
- }
- CleanupStack::PopAndDestroy( &halfCaptureKeys );
-#else
- if ( aInPreCapture && aKeyEvent.iScanCode
- == EProductKeyCaptureHalf )
- {
- SubmergePreCaptureCourtesyUI();
- retVal = EKeyWasConsumed;
- }
-#endif
- }
- }
- }
- PRINT(_L("Camera <= CheckCourtesyKeyEvent"))
-
- return retVal;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::RaisePreCaptureCourtesyUI
-// Shows the optional precapture UI
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::RaisePreCaptureCourtesyUI(TBool aShowZoomBar)
- {
- PRINT1(_L("Camera => CCamAppUi::RaisePreCaptureCourtesyUI \
- aShowZoomBar = %d"), aShowZoomBar);
-
- if ( CourtesyUiApplies() && iDrawPreCaptureCourtesyUI )
- {
-
- iDrawPreCaptureCourtesyUI = ETrue;
-
- if ( iCamZoomPane && aShowZoomBar && !iCamZoomPane->IsZoomAtMinimum() )
- {
- PRINT(_L("Camera == CCamAppUi::RaisePreCaptureCourtesyUI \
- Showing zoom pane"));
-
- CCamViewBase* view = NULL;
-
- if ( iMode == ECamControllerVideo )
- {
- view = iVideoCaptureView;
- }
- else
- {
- view = iStillCaptureView;
- }
-
- if ( view )
- {
- CCamContainerBase* container = view->Container();
-
- if ( container )
- {
- container->ShowZoomPaneWithTimer();
- }
- }
- }
- else
- {
- if ( iZoomPaneShown && iRotatedKeyEvent )
- {
- HideZoomPane(ETrue);
- iRotatedKeyEvent = EFalse;
- }
- }
- PRINT(_L("Camera == CCamAppUi::RaisePreCaptureCourtesyUI Showing AP"));
- SetActivePaletteVisibility( ETrue );
-
- TUid settingsPluginUid = KNullUid;
-
- if ( iPlugin )
- {
- settingsPluginUid = iPlugin->Id();
- }
-
- if ( iView )
- {
- const TUid uid1( iView->Id() );
- const TInt uid( uid1.iUid );
-
- if( !iController.InVideocallOrRinging() &&
- ( ECamViewIdStillPreCapture == uid ||
- ECamViewIdStillPostCapture == uid ||
- ECamViewIdVideoPreCapture == uid ||
- ECamViewIdVideoPostCapture == uid ||
- ECamViewIdBurstThumbnail == uid )
- )
- {
- TRAP_IGNORE( static_cast<CCamViewBase*>
- ( iView )->UnsetCourtesySoftKeysL() );
- }
- }
-
- TRAP_IGNORE(HandleCommandL(ECamCmdRedrawScreen));
-
- iCourtesyTimerInPreCapture = ETrue;
-
- if ( iCourtesyTimer )
- {
- iCourtesyTimer->Cancel();
-
- if ( !iAlwaysDrawPreCaptureCourtesyUI )
- {
- iCourtesyTimer->StartTimer();
- }
- }
- }
- PRINT(_L("Camera <= CCamAppUi::RaisePreCaptureCourtesyUI"))
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::RaisePostCaptureCourtesyUI
-// Shows the optional postcapture UI
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::RaisePostCaptureCourtesyUI()
- {
- PRINT(_L("Camera => CCamAppUi::RaisePostCaptureCourtesyUI"))
- if ( CourtesyUiApplies() )
- {
- iDrawPostCaptureCourtesyUI = ETrue;
-
- SetActivePaletteVisibility( ETrue );
-
- if ( iView )
- {
- TRAP_IGNORE(static_cast<CCamViewBase*>
- (iView)->UnsetCourtesySoftKeysL());
- }
-
- TRAP_IGNORE(HandleCommandL(ECamCmdRedrawScreen));
-
- iCourtesyTimerInPreCapture = EFalse;
-
- }
- PRINT(_L("Camera <= CCamAppUi::RaisePostCaptureCourtesyUI"))
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SubmergePreCaptureCourtesyUI
-// Hides the optional precapture UI
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SubmergePreCaptureCourtesyUI()
- {
- PRINT(_L("Camera => CCamAppUi::SubmergePreCaptureCourtesyUI"))
-
- const TCamCaptureOperation operation( iController.CurrentOperation() );
-
-
-
- if ( ( CourtesyUiApplies() && !iDrawPreCaptureCourtesyUI
- && !SelfTimerEnabled()
- && ECamViewStatePreCapture == iViewState )
- // and if we are burst capturing
- // then do not remove the cancel softkey
- && !( IsBurstEnabled()
- && (ECamCapturing == operation
- ||ECamCompleting == operation ) ) )
- {
- if ( FullScreenViewfinderEnabled() )
- {
- // Don't submerge if we're capturing time-lapse photos
- if ( !(ECamImageCaptureTimeLapse == CurrentBurstMode()
- && iController.SequenceCaptureInProgress()) )
- {
-
- if ( ECamControllerVideo == iMode )
- {
-
- SetActivePaletteVisibility( EFalse );
-
- if ( iController.IsTouchScreenSupported() )
- {
- // Enable fixed toolbar
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if ( toolbar )
- {
- toolbar->SetToolbarVisibility( EFalse );
- }
- }
-
- if ( iView )
- {
- if(!iController.IsTouchScreenSupported())
- {
- TRAP_IGNORE(static_cast<CCamViewBase*>
- (iView)->SetCourtesySoftKeysL());
- }
- else
- {
- TRAP_IGNORE(static_cast<CCamViewBase*>
- (iView)->UnsetCourtesySoftKeysL());
- }
- }
-
- } // end if ( iMode == ECamControllerVideo )
- else
- {
- // in still mode toolbar and softkeys
- // are not to be hidden as part of courtesy ui
- // imode: ECamControllerIdle, ECamControllerImage,
- // or ECamControllerShutdown
-
- SetActivePaletteVisibility( EFalse );
-
- if ( iView )
- {
- if(!iController.IsTouchScreenSupported())
- {
- TRAP_IGNORE(static_cast<CCamViewBase*>
- (iView)->SetCourtesySoftKeysL());
- }
- else
- {
- TRAP_IGNORE(static_cast<CCamViewBase*>
- (iView)->UnsetCourtesySoftKeysL());
- }
- }
-
- }
-
- TRAP_IGNORE(HandleCommandL(ECamCmdRedrawScreen));
- }
-
- } // if ( FullScreenViewfinderEnabled()
- }
- PRINT(_L("Camera <= CCamAppUi::SubmergePreCaptureCourtesyUI"))
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SubmergePostCaptureCourtesyUI
-// Hides the optional postcapture UI
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SubmergePostCaptureCourtesyUI()
- {
- PRINT(_L("Camera => CCamAppUi::SubmergePostCaptureCourtesyUI"))
- if ( CourtesyUiApplies()
-
- && ECamViewStatePostCapture == iViewState )
- {
- iDrawPostCaptureCourtesyUI = EFalse;
-
- SetActivePaletteVisibility( EFalse );
-
- if ( iView )
- {
- TRAP_IGNORE(static_cast<CCamViewBase*>
- (iView)->SetCourtesySoftKeysL());
- }
-
- TRAP_IGNORE(HandleCommandL(ECamCmdRedrawScreen));
- }
- PRINT(_L("Camera <= CCamAppUi::SubmergePostCaptureCourtesyUI"))
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::ShowZoomPane
-// Needed to show or update the zoom pane in direct viewfinder mode,
-// or where the active toolbar is used.
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::ShowZoomPane(TBool aRedraw)
- {
- PRINT( _L("Camera => CCamAppUi::ShowZoomPane" ))
- iZoomPaneShown = ETrue;
-
- if ( aRedraw && IsDirectViewfinderActive() )
- {
- TRAP_IGNORE(HandleCommandL(ECamCmdRedrawZoom));
- }
- PRINT( _L("Camera <= CCamAppUi::ShowZoomPane" ))
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::HideZoomPane
-// Needed to hide the zoom pane in direct viewfinder mode,
-// or where the active toolbar is used.
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::HideZoomPane( TBool aRedraw )
- {
- PRINT( _L("Camera => CCamAppUi::HideZoomPane" ))
- iZoomPaneShown = EFalse;
-
- if ( iDrawPreCaptureCourtesyUI && iController.IsViewFinding() )
- {
- if ( iViewState == ECamViewStatePreCapture )
- {
- SetActivePaletteVisibility( ETrue );
- }
- }
-
- if ( aRedraw && IsDirectViewfinderActive() )
- {
- TRAP_IGNORE( HandleCommandL(ECamCmdRedrawZoom ) );
- }
- PRINT( _L("Camera <= CCamAppUi::HideZoomPane" ))
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetActivePaletteVisibility
-// Displays or hides the active palette, depending on some inbuilt restraints
-// ---------------------------------------------------------------------------
-//
-
-void CCamAppUi::SetActivePaletteVisibility( TBool aShown )
- {
- PRINT1( _L("Camera => CCamAppUi::SetActivePaletteVisibility %d" ), aShown )
-
- if ( !iController.IsTouchScreenSupported() )
- {
- if ( ECamOrientationCamcorder == iCamOrientation
- || ECamOrientationCamcorderLeft == iCamOrientation
- || ECamOrientationPortrait == iCamOrientation )
- {
- TCamCaptureOperation operation = iController.CurrentOperation();
-
- // Does the current video mode prevent showing.
- //
- TBool videoOperationPrevents =
- ( ECamControllerVideo == iMode )
- && ( ECamCapturing == operation || ECamPaused == operation );
-
- TBool imageOperationPrevents =
- ( ECamControllerImage == iMode )
- && ( ECamCapturing == operation || ECamCompleting == operation
- || ECamFocusing == operation || ECamFocused == operation
- || ECamFocusFailed == operation );
-
- if ( (!aShown )
-
- || ( aShown && !iPreventActivePaletteDisplay
- && !TimeLapseSliderShown()
- && ( iViewState == ECamViewStatePostCapture
- || FullScreenViewfinderEnabled()
- || IsSecondCameraEnabled() )
- && !videoOperationPrevents
- && !imageOperationPrevents
- && ((iDrawPreCaptureCourtesyUI && iViewState == ECamViewStatePreCapture)
- || (iDrawPostCaptureCourtesyUI && iViewState == ECamViewStatePostCapture) ))
- )
- {
- if ( iActivePaletteHandler )
- {
- PRINT1(_L("Precapture mode is %d"),iPreCaptureMode)
- PRINT(_L("Setting Active Palette Visibility"))
- iActivePaletteHandler->SetVisibility( aShown );
- if ( ( !IsEmbedded() && IsSecondCameraEnabled() )
- || !IsSecondCameraEnabled() )
- {
- iToolbarVisibility = aShown;
- }
- else if ( IsEmbedded() && IsSecondCameraEnabled() )
- {
- iToolbarVisibility = EFalse;
- }
- }
- }
- }
- }
- PRINT( _L("Camera <= CCamAppUi::SetActivePaletteVisibility" ))
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::IsDirectViewfinderActive
-// Detects whether the direct viewfinder is in use or not
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsDirectViewfinderActive()
- {
- if ( iController.UiConfigManagerPtr() &&
- ( ( iDSASupported && iCamOrientation == ECamOrientationCamcorder ||
- iCamOrientation == ECamOrientationCamcorderLeft ) ||
- ( iController.IsDirectScreenVFSupported( EFalse ) &&
- iCamOrientation == ECamOrientationPortrait ) ) &&
- !( IsBurstEnabled() && iController.SequenceCaptureInProgress() ) )
- {
- return ETrue;
- }
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::UpdateNaviModelsL
-// Called to set the correct navicounter / naviprogress controls to "active"
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::UpdateNaviModelsL( const TBool aUpdateNavi )
- {
- iNaviCounterControl->SetActiveL( EFalse );
- iNaviPaneCounterControl->SetActiveL( EFalse );
- iNaviProgressBarControl->SetActiveL( EFalse );
- iNaviPaneProgressBarControl->SetActiveL( EFalse );
- if ( !aUpdateNavi )
- {
- // We are immediately closing the app or in Pretend Exit
- // No need to update NaviPane
- return;
- }
- else if ( ECamOrientationCamcorder == iCamOrientation
- || ECamOrientationCamcorderLeft == iCamOrientation
- || ECamOrientationPortrait == iCamOrientation )
- {
- iNaviCounterControl->SetExtentToWholeScreen();
- iNaviCounterControl->SetActiveL( ETrue );
- iNaviProgressBarControl->SetExtentToWholeScreen();
- iNaviProgressBarControl->SetActiveL( ETrue );
- }
- else
- {
- iNaviPaneCounterControl->SetActiveL( ETrue );
- iNaviPaneProgressBarControl->SetActiveL( ETrue );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::AppController
-// Returns the app controller
-// ---------------------------------------------------------------------------
-//
-MCamAppController& CCamAppUi::AppController()
- {
- return iController;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::ForegroundAppIsPhoneApp
-// Whether or not the phone app is in the foreground
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::ForegroundAppIsPhoneApp() const
- {
- TBool phoneInForeground = EFalse;
- // Gets the window group id of the app coming in foreground
- TInt windowGroupId = iCoeEnv->WsSession().GetFocusWindowGroup();
- if ( windowGroupId == iPhoneAppWindowGroupId )
- {
- phoneInForeground = ETrue;
- }
- return phoneInForeground;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SwitchStillCaptureModeL
-// Change the still capture mode
-// ---------------------------------------------------------------------------
-//
-void
-CCamAppUi::SwitchStillCaptureModeL( TCamImageCaptureMode aImageMode,
- TBool aReprepare,
- TBool aUpdateUi /*=ETrue*/)
- {
- PRINT( _L( "Camera => CCamAppUi::SwitchStillCaptureModeL" ) )
-
- iTargetImageMode = aImageMode;
-
- if ( iController.UiConfigManagerPtr()->IsXenonFlashSupported() )
- {
- switch( iTargetImageMode )
- {
- case ECamImageCaptureSingle:
- case ECamImageCaptureTimeLapse:
- {
- // Switching from burst mode to single/timelapse mode.
- // Restore previous original flash setting.
- iController.RestoreFlashMode();
- break;
- }
- case ECamImageCaptureBurst:
- {
- if( iImageMode != iTargetImageMode )
- {
- // Switching from single/timelapse capture to burst mode.
- // Save current flash mode, and disable flash.
- iController.SaveFlashMode();
- }
- iController.SetIntegerSettingValueL( ECamSettingItemDynamicPhotoFlash,
- ECamFlashOff );
- break;
- }
- }
- }
-
- TBool burstEnabled = ( ECamImageCaptureBurst == aImageMode
- || ECamImageCaptureTimeLapse == aImageMode );
-
- if ( iController.TimeLapseSupported() )
- {
- // if burst has been disabled
- // then make sure the timelapse interval has been
- // set back to 0 in the controller.
- if ( !burstEnabled )
- {
- iController.SetTimeLapseInterval( TInt64(0) );
- }
- }
-
- if ( iImageMode != iTargetImageMode )
- {
- // Inform any observers that burst mode has been changed
- TInt count = iBurstModeObservers.Count();
- TInt i;
- for ( i = 0; i < count; i++ )
- {
- iBurstModeObservers[i]->BurstModeActiveL( burstEnabled, aReprepare );
- }
- }
-
- if( aUpdateUi )
- {
- TrySwitchViewL();
- }
-
- iController.BurstModeActiveL( burstEnabled, aReprepare );
-
- if( aUpdateUi )
- {
- iNaviCounterModel->SetCaptureModeL( iMode, iImageMode );
-
- if ( aReprepare )
- {
- PRINT( _L( "Camera <> CCamAppUi::SwitchStillCaptureModeL: update AP.." ))
- iActivePaletteHandler->UpdateActivePaletteL();
- }
- }
- PRINT( _L("Camera <= CCamAppUi::SwitchStillCaptureModeL") )
- }
-
-#if !defined(__WINSCW__)
-// ---------------------------------------------------------------------------
-// CCamAppUi::RegisterCaptureKeysL
-// Register to capture half and full shutter press key events
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::RegisterCaptureKeysL()
- {
- RArray<TInt> captureKeys;
- CleanupClosePushL( captureKeys );
-
- if ( iController.UiConfigManagerPtr() )
- {
- iController.UiConfigManagerPtr()->
- SupportedPrimaryCameraCaptureKeyL( captureKeys );
- }
-
- if( iCameraKeyHandle == 0 )
- {
- iCameraKeyHandle = iCoeEnv->RootWin().CaptureKey( EKeyCamera, 0, 0 );
- }
-
- if( iFullShutterUpDownHandle == 0 )
- {
- if ( captureKeys.Count() > 0 )
- {
- //EProductKeyCapture
- iFullShutterUpDownHandle = iCoeEnv->
- RootWin().CaptureKeyUpAndDowns( captureKeys[0] , 0, 0 );
- }
-
- }
-
- if( iFullShutterPressHandle == 0 )
- {
- if ( captureKeys.Count() > 0 )
- {
- iFullShutterPressHandle = iCoeEnv->
- RootWin().CaptureKey( captureKeys[0], 0, 0 );
- }
- }
-
- if( iHalfShutterPressHandle == 0 )
- {
- captureKeys.Reset();
-
- // now get half key press code to register
- if ( iController.UiConfigManagerPtr() )
- {
- iController.UiConfigManagerPtr()->
- SupportedPrimaryCameraAutoFocusKeyL( captureKeys );
- }
- if ( captureKeys.Count() > 0 )
- {
- iHalfShutterPressHandle = iCoeEnv->
- RootWin().CaptureKey( captureKeys[0], 0, 0 );
- }
- }
- CleanupStack::PopAndDestroy( &captureKeys );
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::UnRegisterCaptureKeys
-// Release capture of half and full shutter press key events
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::UnRegisterCaptureKeys()
- {
- //Since this function can be called from the destructor, we should
- //check that iCoeEnv isn't null prior to using it.
- if( iCoeEnv )
- {
- if ( iCameraKeyHandle > 0 )
- {
- iCoeEnv->RootWin().CancelCaptureKey( iCameraKeyHandle );
- iCameraKeyHandle = 0;
- }
- if ( iFullShutterPressHandle > 0 )
- {
- iCoeEnv->RootWin().CancelCaptureKey( iFullShutterPressHandle );
- iFullShutterPressHandle = 0;
- }
- if ( iHalfShutterPressHandle > 0 )
- {
- iCoeEnv->RootWin().CancelCaptureKey( iHalfShutterPressHandle );
- iHalfShutterPressHandle = 0;
- }
-
- if ( iFullShutterUpDownHandle > 0 )
- {
- iCoeEnv->RootWin().CancelCaptureKey( iFullShutterUpDownHandle );
- iFullShutterUpDownHandle = 0;
- }
- }
- }
-
-#endif
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetSoftKeysL
-// Sets the softkeys to the specified Resource ID
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetSoftKeysL( TInt aResource )
- {
- PRINT1( _L("Camera => CCamAppUi::SetSoftKeysL resource:%x"), aResource );
- if ( iView )
- {
- static_cast<CCamViewBase*>(iView)->SetSoftKeysL(aResource);
- }
- PRINT( _L("Camera <= CCamAppUi::SetSoftKeysL") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::TimeLapseSliderShown
-// Returns whether time lapse slider is currently shown
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::TimeLapseSliderShown() const
- {
- return ECamPreCapTimeLapseSlider == iPreCaptureMode;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::FullScreenViewfinderEnabled
-// Returns whether or not the full screen viewfinder is being shown
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::FullScreenViewfinderEnabled() const
- {
- TBool retVal = EFalse;
-
- if ( ECamViewStatePreCapture == iViewState
- && ( ECamOrientationCamcorder == iCamOrientation
- || ECamOrientationCamcorderLeft == iCamOrientation )
- && ECamPreCapViewfinder == iPreCaptureMode)
- {
- retVal = ETrue;
- }
-
- return retVal;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetPreCaptureModeL
-// Sets the current pre-capture mode
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetPreCaptureModeL(TCamPreCaptureMode aMode)
- {
- PRINT1(_L("Camera=>CCamAppUi::SetPreCaptureMode aMode=%d"), aMode);
- iPreCaptureMode = aMode;
-
- CCamViewBase* precapView = NULL;
- if ( iView == iStillCaptureView ||
- iView == iVideoCaptureView )
- {
- precapView = static_cast<CCamViewBase*>( iView );
- __ASSERT_DEBUG( precapView, CamPanic( ECamPanicNullPointer ));
- }
-
- if ( ECamPreCapViewfinder == iPreCaptureMode )
- {
- if ( !( iController.UiConfigManagerPtr() &&
- iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() ) )
- {
- RaisePreCaptureCourtesyUI(ETrue);
- }
- if ( precapView )
- {
- if ( iView == iStillCaptureView )
- {
- // fixed toolbar is used only with touch devices
- if ( iController.IsTouchScreenSupported() )
- {
- if ( IsSecondCameraEnabled() )
- {
- TInt resourceId = IsQwerty2ndCamera()?
- R_CAM_STILL_PRECAPTURE_TOOLBAR_LANDSCAPE:
- R_CAM_STILL_PRECAPTURE_TOOLBAR_PORTRAIT;
- precapView->CreateAndSetToolbarL( resourceId );
- }
- else
- {
- precapView->CreateAndSetToolbarL( R_CAM_STILL_PRECAPTURE_TOOLBAR );
- }
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- fixedToolbar->SetToolbarVisibility( EFalse );
-
- if ( !IsSecondCameraEnabled() )
- {
- iStillCaptureView->UpdateToolbarIconsL();
- }
-
- fixedToolbar->SetToolbarObserver( iStillCaptureView );
- SetToolbarVisibility();
-
- // Make sure toolbar extension button has no background
- CAknButton* extensionButton = static_cast<CAknButton*>(
- fixedToolbar->ControlOrNull( ECamCmdToolbarExtension ) );
- if ( extensionButton )
- {
- extensionButton->SetButtonFlags(
- // Set KAknButtonNoFrame flag for extension buttons
- extensionButton->ButtonFlags() | KAknButtonNoFrame );
- }
- }
- }
- else if ( iView == iVideoCaptureView )
- {
- // fixed toolbar is used only with touch devices
- if ( iController.IsTouchScreenSupported() )
- {
- if ( IsSecondCameraEnabled() )
- {
- TInt resourceId = IsQwerty2ndCamera()?
- R_CAM_VIDEO_PRECAPTURE_TOOLBAR_LANDSCAPE:
- R_CAM_VIDEO_PRECAPTURE_TOOLBAR_PORTRAIT;
- precapView->CreateAndSetToolbarL( resourceId );
- }
- else
- {
- if(iController.UiConfigManagerPtr()->IsXenonFlashSupported())
- {
- precapView->CreateAndSetToolbarL(R_CAM_VIDEO_PRECAPTURE_TOOLBAR);
- }
- else
- {
- precapView->CreateAndSetToolbarL(R_CAM_VIDEO_PRECAPTURE_TOOLBAR_VIDEOLIGHT);
- }
- }
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- fixedToolbar->SetToolbarVisibility( EFalse );
-
- if ( !IsSecondCameraEnabled() )
- {
- iVideoCaptureView->UpdateToolbarIconsL();
- }
-
- fixedToolbar->SetToolbarObserver( iVideoCaptureView );
- SetToolbarVisibility();
-
- // Make sure toolbar extension button has no background
- CAknButton* extensionButton = static_cast<CAknButton*>(
- fixedToolbar->ControlOrNull( ECamCmdToolbarExtension ) );
- if ( extensionButton )
- {
- extensionButton->SetButtonFlags(
- // Set KAknButtonNoFrame flag for extension buttons
- extensionButton->ButtonFlags() | KAknButtonNoFrame );
- }
- }
- }
-
- if( !IsSecondCameraEnabled() || IsQwerty2ndCamera() )
- {
- EikSoftkeyPostingTransparency::MakeTransparent(
- *precapView->ViewCba(), ETrue );
-
- if( iDrawPreCaptureCourtesyUI )
- {
- precapView->ViewCba()->MakeVisible( ETrue );
- }
- }
-
- }
- }
- else
- {
- if ( precapView )
- {
- precapView->ViewCba()->MakeVisible( ETrue );
- // fixed toolbar is used only with touch devices
- if ( iController.IsTouchScreenSupported() )
- {
- precapView->CreateAndSetToolbarL( R_CAM_EMPTY_FIXED_TOOLBAR );
- SetToolbarVisibility();
- }
- EikSoftkeyPostingTransparency::MakeTransparent(
- *precapView->ViewCba(), EFalse );
- }
- SetActivePaletteVisibility( EFalse );
- }
-
- if ( iViewState != ECamViewStateUserSceneSetup )
- {
- if ( CamUtility::IsNhdDevice() )
- {
- StatusPane()->MakeVisible( aMode == ECamPreCapStandby ||
- IsSecondCameraEnabled() &&
- !IsQwerty2ndCamera() ||
- SettingsLaunchedFromCamera() );
- }
- else
- {
- // Settings, launched via toolbar, have a visible statuspane in
- // Non-touch device
- StatusPane()->MakeVisible( !precapView ||
- aMode != ECamPreCapViewfinder &&
- aMode != ECamPreCapTimeLapseSlider ||
- IsSecondCameraEnabled() ||
- SettingsLaunchedFromCamera() );
- }
- }
-
-
- PRINT(_L("Camera<=CCamAppUi::SetPreCaptureMode"))
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetPreCaptureMode
-// Sets the current pre-capture mode
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetPreCaptureMode( TCamPreCaptureMode aMode )
- {
- TRAPD(err, SetPreCaptureModeL( aMode ) );
- if ( err )
- {
- PRINT1(_L("Camera<=CCamAppUi::SetPreCaptureModeL Leave=%d"), err)
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::ShowPostCaptureView
-// Whether to show the post capture view in current mode
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::ShowPostCaptureView() const
- {
- TInt settingId( ( ECamControllerVideo == iMode )
- ? ECamSettingItemVideoShowCapturedVideo
- : ECamSettingItemShowCapturedPhoto );
-
- return ( ECamSettOn == iController.IntegerSettingValue( settingId ) );
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SuppressUIRiseOnViewfinderStart
-// Whether the automatic UI-rise should be suppressed on
-// next viewfinder start event
-// ---------------------------------------------------------------------------
-//
-TBool
-CCamAppUi::SuppressUIRiseOnViewfinderStart() const
- {
- return iSuppressUIRise;
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetSuppressUIRiseOnViewfinderStart
-// Sets whether the automatic UI-rise should be suppressed on
-// next viewfinder start event
-// ---------------------------------------------------------------------------
-//
-void
-CCamAppUi::SetSuppressUIRiseOnViewfinderStart(TBool aSuppress)
- {
- iSuppressUIRise = aSuppress;
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SelectViewFinderGridSettingL
-// Select the viewfinder grid setting.
-// Currently only sets the grid ON or OFF.
-// ---------------------------------------------------------------------------
-//
-void
-CCamAppUi::SelectViewFinderGridSettingL()
- {
- PRINT( _L("Camera => CCamAppUi::SelectViewFinderGridSettingL") );
- PRINT1( _L("Camera <> ECamSettingItemViewfinderGrid == (%d)"),
- ECamSettingItemViewfinderGrid );
-
- TInt current = iController.IntegerSettingValue( ECamSettingItemViewfinderGrid );
- TInt invert = (current == ECamViewfinderGridOn)
- ? ECamViewfinderGridOff
- : ECamViewfinderGridOn;
-
- // Switch the value.
- iController.SetIntegerSettingValueL( ECamSettingItemViewfinderGrid, invert );
-
- // We'll get a HandleControllerEventL callback
- // from iController when the value has been set.
- PRINT( _L("Camera <= CCamAppUi::SelectViewFinderGridSettingL") );
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::ConstructPostCaptureViewIfRequiredL
-//
-// Construct a postcapture view if not already constructed
-//
-// The following parameter combinations can be used:
-// * Still postcapture view: aViewState = ECamViewStatePostCapture,
-// aMode = ECamControllerImage
-// * Burst thumbnail view: aViewState = ECamViewStateBurstThumbnail
-// aMode = << ignored >>
-// * Video postcapture view: aViewState = ECamViewStatePostCapture,
-// aMode = ECamControllerVideo
-// ---------------------------------------------------------------------------
-//
-void
-CCamAppUi::ConstructPostCaptureViewIfRequiredL( TCamViewState aViewState,
- TCamCameraMode aCaptureMode )
- {
- CAknView* view;
-
- if( ECamViewStateBurstThumbnail == aViewState )
- {
- // Burst thumbnail view
- if( !iBurstThumbnailViewConstructed )
- {
- PRINT( _L("Camera => CCamAppUi::\
- ConstructPostCaptureViewIfRequiredL - BurstThumbnail") );
- view = CCamBurstThumbnailView::NewLC( iController );
- AddViewL( view );
- CleanupStack::Pop( view );
- iBurstThumbnailViewConstructed = ETrue;
- PRINT( _L("Camera <= CCamAppUi::\
- ConstructPostCaptureViewIfRequiredL - BurstThumbnail") );
- }
- }
- else if( ECamViewStatePostCapture == aViewState )
- {
- if( ECamControllerVideo == aCaptureMode )
- {
- // Video postcapture
- if( !iVideoPostCaptureViewConstructed )
- {
- PRINT( _L("Camera => \
- CCamAppUi::ConstructPostCaptureViewIfRequiredL \
- - VideoPostCapture") );
- view = CCamVideoPostCaptureView::NewLC( iController );
- AddViewL( view );
- CleanupStack::Pop( view );
- iVideoPostCaptureViewConstructed = ETrue;
- PRINT( _L("Camera <= \
- CCamAppUi::ConstructPostCaptureViewIfRequiredL \
- - VideoPostCapture") );
- }
- }
- else
- {
- // Still postcapture
- if( !iStillPostCaptureViewConstructed )
- {
- PRINT( _L("Camera => \
- CCamAppUi::ConstructPostCaptureViewIfRequiredL \
- - StillPostCapture") );
- view = CCamStillPostCaptureView::NewLC( iController );
- AddViewL( view );
- CleanupStack::Pop( view );
- iStillPostCaptureViewConstructed = ETrue;
- PRINT( _L("Camera <= \
- CCamAppUi::ConstructPostCaptureViewIfRequiredL \
- - StillPostCapture") );
- }
- }
- }
- }
-
-
-#ifdef CAMERAAPP_DELAYED_POSTCAPTURE_CREATION
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::StartPostCapIdleL
-//
-// Starts calls to PostCapIdleCallBack during processor idle time. The calls
-// are continued until PostCapIdleCallBack is done.
-//
-// ---------------------------------------------------------------------------
-void CCamAppUi::StartPostCapIdleL()
- {
- if( !iPostCapIdle )
- {
- iPostCapIdle = CIdle::NewL( CActive::EPriorityIdle );
- iPostCapProgress = ECamConstructStillPostCap;
- iPostCapIdle->Start( TCallBack( PostCapIdleCallBack, this ) );
- }
- else
- {
- // iPostCapIdle already exists.
- // Do nothing - the views have already been constructed
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::PostCapIdleCallBack
-//
-// Handles postcapture view construction so that each call to this function
-// constructs one postcapture view. Returns ETrue if there are still more views
-// to construct, EFalse if all are finished and no further calls are required.
-//
-// ---------------------------------------------------------------------------
-TInt CCamAppUi::PostCapIdleCallBack( TAny* aSelf )
- {
- PRINT( _L("Camera => CCamAppUi::PostCapIdleCallBack") );
- TInt ret = EFalse;
-
- CCamAppUi* self = static_cast<CCamAppUi*>( aSelf );
- if( self )
- {
- if( ECamConstructStillPostCap == self->iPostCapProgress )
- {
- TRAP_IGNORE( self->ConstructPostCaptureViewIfRequiredL(
- ECamViewStatePostCapture, ECamControllerImage ) );
- self->iPostCapProgress = ECamConstructBurstPostCap;
- ret = ETrue;
- }
- else if( ECamConstructBurstPostCap == self->iPostCapProgress )
- {
- TRAP_IGNORE( self->ConstructPostCaptureViewIfRequiredL(
- ECamViewStateBurstThumbnail, ECamControllerImage ) );
- self->iPostCapProgress = ECamConstructVideoPostCap;
- ret = ETrue;
- }
- else if( ECamConstructVideoPostCap == self->iPostCapProgress )
- {
- TRAP_IGNORE( self->ConstructPostCaptureViewIfRequiredL(
- ECamViewStatePostCapture, ECamControllerVideo ) );
- self->iPostCapProgress = ECamPostCapsDone;
- // Complete
- ret = EFalse;
- }
- }
-
- PRINT( _L("Camera <= CCamAppUi::PostCapIdleCallBack") );
- return ret;
- }
-
-#endif // CAMERAAPP_DELAYED_POSTCAPTURE_CREATION
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::StartSensorIdleL
-//
-// Initiates a call to SensorIdleCallback during processor idle time
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::StartSensorIdleL()
- {
- if ( iController.UiConfigManagerPtr()->IsOrientationSensorSupported() )
- {
- if( iSensorIdleRunning )
- {
- // Delayed sensor initialization is already in progress
- return;
- }
-
- if( !iSensorIdle )
- {
- // Instantiate new CIdle
- iSensorIdle = CIdle::NewL( CActive::EPriorityIdle );
- }
- else
- {
- // Cancel existing the existing request, just in case
- iSensorIdle->Cancel();
- }
-
- // Initialize the idle callback
- iSensorIdle->Start( TCallBack( SensorIdleCallBack, this ) );
- iSensorIdleRunning = ETrue;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::CancelSensorIdle
-//
-// Cancels the (possibly) pending call to SensorIdleCallBack
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::CancelSensorIdle()
- {
- if ( iController.UiConfigManagerPtr()->IsOrientationSensorSupported() )
- {
- if( iSensorIdle && iSensorIdleRunning )
- {
- iSensorIdle->Cancel();
- iSensorIdleRunning = EFalse;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SensorIdleCallBack
-//
-// Calls iControler.UpdateSensorApiL
-// ---------------------------------------------------------------------------
-//
-TInt CCamAppUi::SensorIdleCallBack( TAny* aSelf )
- {
- CCamAppUi* self = static_cast<CCamAppUi*>( aSelf );
-
- if( self )
- {
- TRAP_IGNORE( self->iController.UpdateSensorApiL( ETrue ) );
- self->iSensorIdleRunning = EFalse;
- }
- return EFalse; // No more calls needed
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::IsSelfTimedCapture
-// Whether the latest capture was selftimer initiated
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsSelfTimedCapture() const
- {
- return iSelfTimedCapture;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::DismissMemoryNoteL
-// Dismisses out of memory / memory card removed note, if active.
-// ---------------------------------------------------------------------------
-//
-void
-CCamAppUi::DismissMemoryNoteL()
- {
- if( iMemoryNote )
- {
- if( iMemoryNote->IsFocused() )
- {
- // For some reason, the note's softkeys are displayed in standby mode,
- // even though the note itself has been dismissed (=deleted)
- // HACK:
- // If the note is focused, we know that also its softkeys are in use,
- // so we can simulate key events to emulate user closing the note
- // using left softkey.
-
- TKeyEvent key;
- key.iRepeats = 0;
- key.iCode = EKeyDevice0;
- key.iModifiers = 0;
- iEikonEnv->SimulateKeyEventL( key, EEventKeyDown );
- CEikButtonGroupContainer::Current()->OfferKeyEventL( key,
- EEventKeyDown );
- }
-
- // Make sure the note closes even if it wasn't focused.
- delete iMemoryNote;
- iMemoryNote = NULL;
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// Starts Gallery Application command line
-// ---------------------------------------------------------------------------
-//
-
-
-void
-CCamAppUi::StartAppCmdLineL( const TDes8& aData )
- {
- // MM not running yet - use Command Line Tail
- RApaLsSession appArcSession;
- CleanupClosePushL( appArcSession );
- User::LeaveIfError( appArcSession.Connect() );
- TApaAppInfo appInfo;
- User::LeaveIfError( appArcSession.GetAppInfo( appInfo,
- TUid::Uid( KGlxGalleryApplicationUid) ) );
-
- CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
- cmdLine->SetExecutableNameL( appInfo.iFullName );
- cmdLine->SetCommandL( EApaCommandRun );
- cmdLine->SetTailEndL( aData );
-
- User::LeaveIfError( appArcSession.StartApp( *cmdLine ) );
-
- CleanupStack::PopAndDestroy( cmdLine );
- CleanupStack::PopAndDestroy( &appArcSession );
- }
-// ---------------------------------------------------------------------------
-// CCamAppUi::StartCheckingDefaultAlbumIdL()
-// We start check operation to see if "Default Album exists"
-// Usecase: Whenever the camera returns from background/startup we first start
-// checking the default album which is set, if any, to make sure that album
-// really exists. If not, then we set back the value of setting item "Add to
-// album" to "No" in Image/Video setting image settings
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::StartCheckingDefaultAlbumIdL()
- {
- TBool checkAlbum = (
- iController.IntegerSettingValue(
- ECamSettingItemPhotoStoreInAlbum ) == ECamSettYes ||
- iController.IntegerSettingValue(
- ECamSettingItemVideoStoreInAlbum ) == ECamSettYes );
-
- if ( !iCheckOperationInProgress && checkAlbum )
- {
- TUint32 defaultAlbumId =
- static_cast<TUint32> (
- iController.IntegerSettingValue(
- ECamSettingItemDefaultAlbumId ) );
- if ( iCollectionManager )
- {
- iCheckOperationInProgress = ETrue;
- iCollectionManager->CheckForAlbumExistenceL( defaultAlbumId );
- }
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::CheckAlbumIdOperationCompleteL
-// Call back method, which is called once the check operation is complete
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::CheckAlbumIdOperationCompleteL(
- TBool aAlbumExists, const TDesC& /*aAlbumTitle*/ )
- {
- PRINT( _L("CCamAppUi::CheckAlbumIdOperationCompleteL --> ENTERS") );
- if ( iController.UiConfigManagerPtr()->IsPhotosSupported() )
- {
- if ( iCheckOperationInProgress )
- {
- PRINT( _L("CheckAlbumIdOperationCompleteL \
- iCheckOperationInProgress: ETRUE") );
- iCheckOperationInProgress = EFalse;
- if ( !aAlbumExists )
- {
- // Reset all the values to the default ones,
- // if the default album doesnt exist, when returned from background
- iController.SetIntegerSettingValueL(
- ECamSettingItemPhotoStoreInAlbum,
- ECamSettNo );
- iController.SetIntegerSettingValueL(
- ECamSettingItemVideoStoreInAlbum,
- ECamSettNo );
- // reseting the album id to the default value "0"
- iController.SetIntegerSettingValueL(
- ECamSettingItemDefaultAlbumId,
- 0 );
- }
- }
- }
- PRINT( _L("CCamAppUi::CheckAlbumIdOperationCompleteL <-- EXITS") );
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SettingsLaunchedFromCamera()
-// We keep track of plugin event launched from camera
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::SettingsLaunchedFromCamera() const
- {
- return iSettingsPluginLaunched;
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SettingsPluginExitedL
-// We handle the case when settings plugin exists
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SettingsPluginExitedL( TCamSettingsPluginExitMessage aType )
- {
- iSettingsPluginLaunched = EFalse;
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL();
-
- switch ( aType )
- {
- case ECameraPluginExit:
- {
- // we exit the plugin and switch to pre-capture
- iReturnedFromPlugin = ETrue;
- break;
- }
- case ECameraInternalExit:
- {
- // Internal Exit from Plugin -> Options -> Exit
- iReturnedFromPlugin = EFalse;
- InternalExitL();
- break;
- }
- case ECameraCompleteExit:
- {
- // Plugiin -> End Key or "c" key
- iReturnedFromPlugin = EFalse;
- break;
- }
- }
- PRINT( _L("Camera <= CCamAppUi::SettingsPluginExitedL") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::StaticSettingsModel()
-//
-// Gets the handle to the settings model, which is used inturn by the
-// plugin to call the interfaces for performing needed actions.
-// ---------------------------------------------------------------------------
-//
-MCamStaticSettings&
-CCamAppUi::StaticSettingsModel()
- {
- return iController.StaticSettingsModel();
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::CreateNaviBitmapsL
-// Draw the counter to the bitmap used in the navi pane
-// ---------------------------------------------------------------------------
-//
-void
-CCamAppUi::CreateNaviBitmapsL( TBool aDrawStorageIconAndCounter )
- {
- if ( iNaviCounterModel )
- {
- iNaviCounterModel->CreateNaviBitmapsL( aDrawStorageIconAndCounter );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::ReadyToDraw
-// Checks whether its safe to draw controls
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::ReadyToDraw() const
- {
- if ( AppInBackground( ETrue ) || !iView )
- {
- return EFalse;
- }
- else
- {
- return ETrue;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::StartFileNameCheck
-// Checks whether the file name is deleted/renamed outside camera
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::StartFileNameCheck()
- {
- PRINT( _L("Camera => CCamAppUi::StartFileNameCheck") );
- if( !iFileCheckAo->IsActive() )
- {
- iFileCheckAo->Start();
- }
- PRINT( _L("Camera <= CCamAppUi::StartFileNameCheck") );
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::FileCheckingComplete
-// Handle a file checking complete event. Used to inform
-// when filechecking active object.
-// has finished checking existance of files.
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::FileCheckingCompleteL( TInt aStatus, TInt aError )
- {
- PRINT2( _L("Camera => CCamAppUi::FileCheckingComplete(), \
- aStatus=%d, aError=%d "), aStatus, aError )
-
- if( aStatus <= 0 || KErrNone != aError )
- {
- PRINT( _L("Camera <> CCamAppUi::FileCheckingComplete: \
- all files deleted, trying viewswitch") );
- iTargetViewState = ECamViewStatePreCapture;
- TrySwitchViewL( ETrue );
- }
- else if ( aStatus < iController.BurstCaptureArray()->Count() )
- {
- PRINT2( _L("Camera <> CCamAppUi::FileCheckingComplete: %d < %d,\
- some file(s) have been deleted"),
- aStatus,
- iController.BurstCaptureArray()->Count() );
-
- if ( iViewState == ECamViewStateBurstThumbnail || iViewState == ECamViewStatePostCapture )
- {
- PRINT( _L("Camera <> CCamAppUi::FileCheckingComplete() updating thumbnail view") );
- CCamBurstThumbnailView* thumbnailView =
- static_cast<CCamBurstThumbnailView*>( View( TUid::Uid( ECamViewIdBurstThumbnail ) ) );
-
- if ( thumbnailView )
- {
- thumbnailView->ImageFilesDeleted();
- }
-
- if ( iViewState == ECamViewStatePostCapture )
- {
- // view state is post-capture, check if the image currently viewed has been deleted
- if ( iController.BurstCaptureArray()->IsDeleted( iController.CurrentImageIndex() ) )
- {
- //switch back to burst thumbnail view
- HandleCommandL( EAknSoftkeyBack );
- }
-
- }
- }
- }
-
- //When return to video post capture view from background, we need to determine whether show the toolbar
- if( iReturnFromBackground
- && iViewState == ECamViewStatePostCapture
- && iMode == ECamControllerVideo )
- {
- SetToolbarVisibility();
- }
-
- PRINT( _L("Camera <= CCamAppUi::FileCheckingComplete()") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::HandleSelfTimerEvent
-// Handle self-timer event
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::HandleSelfTimerEvent( TCamSelfTimerEvent aEvent,
- TInt aCountDown )
- {
-#if defined( CAMERAAPP_CAPI_V2_DVF )
- TRAP_IGNORE( HandleCommandL( ECamCmdRedrawScreen ) );
-#else
- (void) aEvent;
- (void) aCountDown;
-#endif // CAMERAAPP_CAPI_V2_DVF
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::RequestedNewFileResolution
-// Set the requested resolution for a new file
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetRequestedNewFileResolution(
- const TSize& aRequestedResolution )
- {
- iRequestedNewFileResolution.SetSize(
- aRequestedResolution.iWidth,
- aRequestedResolution.iHeight );
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::RequestedNewFileResolution
-// Get the requested resolution for a new file
-// ---------------------------------------------------------------------------
-//
-TSize CCamAppUi::RequestedNewFileResolution() const
- {
- // Default is TSize(0, 0) which interpreted as MMS quality resolution
- return iRequestedNewFileResolution;
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetToolbarVisibility
-// Set toolbar visibility in according to whether current view and
-// mode are fit. When embedded camera starts up, view and mode may
-// not be fit.
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetToolbarVisibility()
- {
- // fixed toolbar is used only with touch devices
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- if ( iController.IsTouchScreenSupported() && fixedToolbar )
- {
- if ( IsEmbedded() )
- {
- // Check that iMode matches iTargetMode and that the corresponding
- // view is active.
- if ( iMode == iTargetMode &&
- ( ( iMode == ECamControllerVideo && iView == iVideoCaptureView ) ||
- ( iMode == ECamControllerImage && iView == iStillCaptureView ) ) &&
- ( iPreCaptureMode != ECamPreCapCaptureSetup ) &&
- ( iPreCaptureMode != ECamPreCapGenericSetting ) &&
- ( iPreCaptureMode != ECamPreCapSceneSetting ) &&
- ( iPreCaptureMode != ECamPreCapStandby ) )
- {
- fixedToolbar->SetToolbarVisibility( ETrue );
- }
- else
- {
- fixedToolbar->SetToolbarVisibility( EFalse );
- }
- }
- else
- {
- if( (iPreCaptureMode != ECamPreCapCaptureSetup) &&
- (iPreCaptureMode != ECamPreCapGenericSetting) &&
- (iPreCaptureMode != ECamPreCapSceneSetting) &&
- (iPreCaptureMode != ECamPreCapStandby) )
- {
- fixedToolbar->SetToolbarVisibility( ETrue );
- }
- else
- {
- // No toolbar with the settings view
- fixedToolbar->SetToolbarVisibility( EFalse );
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SubmergeToolbar
-// Hide toolbar if needed.
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SubmergeToolbar()
- {
- PRINT( _L("Camera => CCamAppUi::SubmergeToolbar()") );
- // fixed toolbar is used only with touch devices
- CAknToolbar* fixedToolbar = CurrentFixedToolbar();
- if ( iController.IsTouchScreenSupported() && fixedToolbar )
- {
- fixedToolbar->SetToolbarVisibility( EFalse );
- }
- PRINT( _L("Camera <= CCamAppUi::SubmergeToolbar()") );
- }
-
-// ---------------------------------------------------------------------------
-// Check if it's applicable to use the courtesy UI
-// ---------------------------------------------------------------------------
-//
-TBool CCamAppUi::CourtesyUiApplies() const
- {
- return ( ECamCapturing != iController.CurrentVideoOperation()
- && ECamPaused != iController.CurrentVideoOperation()
- && !SelfTimerEnabled()
- && ( ECamOrientationCamcorder == iCamOrientation ||
- ECamOrientationCamcorderLeft == iCamOrientation ||
- ECamOrientationPortrait == iCamOrientation ) );
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsToolBarVisible
-// Returns whether or the tool bar has been activated
-// Will return ETrue when when the tool bar is active
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsToolBarVisible() const
- {
- PRINT1( _L("Camera => CCamAppUi::IsToolBarVisible %d" ), iToolbarVisibility )
- return iToolbarVisibility;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsToolBarExtensionVisible
-// Returns ETrue if the toolbar extension is visible,
-// otherwise EFalse.
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsToolBarExtensionVisible() const
- {
- if ( iController.IsTouchScreenSupported() )
- {
- CAknToolbar* toolbar = CurrentFixedToolbar();
- if ( toolbar )
- {
- CAknToolbarExtension* toolbarextension =
- toolbar->ToolbarExtension();
- if ( toolbarextension && toolbarextension->IsShown() )
- {
- PRINT( _L("Camera <> CCamAppUi::IsToolBarExtensionVisible ETrue" ) )
- return ETrue;
- }
- }
- }
- PRINT( _L("Camera <> CCamAppUi::IsToolBarExtensionVisible EFalse" ) )
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::SetAssumePostCaptureView
-// Sets iAssumePostCapture flag according to aValue
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::SetAssumePostCaptureView( TBool aValue )
- {
- if ( iView
- && ( iStillCaptureView == iView || iVideoCaptureView == iView ) )
- {
- static_cast<CCamPreCaptureViewBase*>( iView )->SetPostCaptureViewAsumption( aValue );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamAppUi::SetDrawPreCaptureCourtesyUI
-// Set iDrawPreCaptureCourtesyUI flag
-// ---------------------------------------------------------------------------
-//
-void CCamAppUi::SetDrawPreCaptureCourtesyUI(TBool iDraw)
- {
- if( iDraw )
- {
- iDrawPreCaptureCourtesyUI = ETrue;
- }
- else
- {
- iDrawPreCaptureCourtesyUI = EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsMemoryFullOrUnavailable
-// -----------------------------------------------------------------------------
-//
-TBool
-CCamAppUi::IsMemoryFullOrUnavailable(const TCamMediaStorage
- aStorageLocation) const
- {
- if(!iController.IsMemoryAvailable(aStorageLocation))
- return ETrue;
-
- if(iMode == ECamControllerImage)
- {
- TInt availableMemoryUnits = 0;
- availableMemoryUnits =
- iController.ImagesRemaining(aStorageLocation,EFalse);
- return (availableMemoryUnits <= 0);
- }
- else if(iMode == ECamControllerVideo)
- {
- TTimeIntervalMicroSeconds timeLeft = 0;
-
- TInt err(KErrNone);
- if( iController.CurrentOperation() == ECamNoOperation )
- {
- TRAP(err,timeLeft =
- iController.
- CalculateVideoTimeRemainingL(aStorageLocation) );
- }
- else
- {
- TRAP(err,timeLeft =
- iController.
- RemainingVideoRecordingTime() );
- }
-
- if(err)
- timeLeft = 0;
- return (timeLeft < KMemoryFullVideoRemaining);
- }
- return ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::AllMemoriesFullOrUnavailable
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::AllMemoriesFullOrUnavailable() const
- {
- TBool phoneMemoryUnavailable = iController.IntegerSettingValue(ECamSettingItemRemovePhoneMemoryUsage)?
- ETrue:
- IsMemoryFullOrUnavailable(ECamMediaStoragePhone);
- return ( phoneMemoryUnavailable &&
- IsMemoryFullOrUnavailable(ECamMediaStorageCard) &&
- IsMemoryFullOrUnavailable(ECamMediaStorageMassStorage) );
- }
-
-
-// ---------------------------------------------------------
-// CCamAppUi::AppUIConstructCallbackL
-//
-// ---------------------------------------------------------
-//
-TInt CCamAppUi::AppUIConstructCallbackL( TAny* aAny )
- {
- PRINT( _L("Camera => CCamAppUi::AppUIConstructCallbackL") )
- CCamAppUi* appui = static_cast<CCamAppUi*>( aAny );
- __ASSERT_DEBUG( appui != NULL && appui->iWaitTimer != NULL, CamPanic( ECamPanicNullPointer ) );
- appui->iWaitTimer->Cancel();
- if ( !appui->IsUiConstructionComplete() )
- {
- appui->CompleteAppUIConstructionL();
- }
- PRINT( _L("Camera <= CCamAppUi::AppUIConstructCallbackL") )
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::CompleteAppUIConstructionL
-//
-// ---------------------------------------------------------
-//
-void CCamAppUi::CompleteAppUIConstructionL()
- {
- PRINT( _L("Camera => CCamAppUi::CompleteAppUIConstructionL") )
- iUiConstructionComplete = ETrue;
- // Load the settings model static settings
- PRINT( _L("Camera <> call CCamAppController::LoadStaticSettingsL..") )
- iController.LoadStaticSettingsL( IsEmbedded() );
-
- iInternalStorage = static_cast<TCamMediaStorage>(iController.IntegerSettingValueUnfiltered( ECamSettingItemPhotoMediaStorage ));
- // store the userscene settings
- iController.StoreUserSceneSettingsL();
-
-/*#ifndef __WINSCW__
- if ( !iSFIUtils )
- {
- // Initialize SFIUtils
- iSFIUtils = CSFIUtilsAppInterface::NewL();
- iSendFileInCall = EFalse;
- PRINT( _L("iSendFileInCall = EFalse") );
- }
-#endif */
-
- // Create text resolver for error note text
- iTextResolver = CTextResolver::NewL();
-
- ConstructPreCaptureViewsL();
-
- iSelfTimer = CCamSelfTimer::NewL( iController );
-#if defined( CAMERAAPP_CAPI_V2_DVF )
- iSelfTimer->AddObserverL( this );
-#endif // CAMERAAPP_CAPI_V2_DVF
-
- PRINT( _L("Camera <> creating navicounter model") );
- iNaviCounterModel = CCamNaviCounterModel::NewL( iController );
- PRINT( _L("Camera <> append navicounter to resourceloaders") );
- User::LeaveIfError( iResourceLoaders.Append(iNaviCounterModel) );
-
- PRINT( _L("Camera <> creating progress bar model") );
- iNaviProgressBarModel = CCamNaviProgressBarModel::NewL( iController );
- PRINT( _L("Camera <> append progressbar to resourceloaders") );
- User::LeaveIfError(iResourceLoaders.Append(iNaviProgressBarModel));
-
- ConstructNaviPaneL();
-
-
- //embedded camera may start straight in videomode
- if( IsEmbedded() && iTargetMode == ECamControllerVideo )
- {
- SetDefaultViewL( *iVideoCaptureView );
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL SetDefaultView Video") );
- }
- else
- {
- SetDefaultViewL( *iStillCaptureView );
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL SetDefaultView Still") );
- }
-
- // pre-construct side-pane & zoom pane
- // get whether we overlay sidepane over view-finder
- TBool overlayViewFinder;
- User::LeaveIfError( CamUtility::GetPsiInt( ECamPsiOverLaySidePane, overlayViewFinder ) );
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL create sidepane") );
- iCamSidePane = CCamSidePane::NewL( iController, overlayViewFinder );
- User::LeaveIfError(iResourceLoaders.Append(iCamSidePane));
-
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL create zoom pane") );
- iCamZoomPane = CCamZoomPane::NewL( iController, overlayViewFinder );
- User::LeaveIfError(iResourceLoaders.Append(iCamZoomPane));
-
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL create doc handler") );
- iDocHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
- iDocHandler->SetExitObserver(this);
-
- // Check to see if we are set to use mmc storage but the card has
- // been removed.
- iController.CheckMemoryToUseL();
-
- // create navi-pane and navi-porgress bar for use in camcorder mode
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL create navicounter control") );
- iNaviCounterControl = CCamNaviCounterControl::NewL( *iNaviCounterModel );
- iNaviCounterControl->SetExtentToWholeScreen();
-
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL create progress bar control") );
- iNaviProgressBarControl = CCamNaviProgressBarControl::NewL( *iNaviProgressBarModel );
-
- // get max num of images for burst capture
- CamUtility::GetPsiInt( ECamPsiMaxBurstCapture, iMaxBurstCaptureNum );
-
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL create AP handler") );
- iActivePaletteHandler = CCamActivePaletteHandler::NewL( iController, EFalse );
-
- // get coutesy UI timeout
- TInt timeoutValue;
- CamUtility::GetPsiInt( ECamPsiCourtesyUiTimeoutValue, timeoutValue );
-
- iCourtesyTimer = CCamTimer::NewL( timeoutValue * 1000000,
- TCallBack( CCamAppUi::CourtesyTimeout, this ) );
-
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL update navi models") );
- UpdateNaviModelsL();
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL navi counter reload resources") );
- iNaviCounterModel->ReloadResourceDataL();
- PRINT( _L("Camera <> CCamAppUi::CompleteAppUIConstructionL navi progress bar reload resources") );
- iNaviProgressBarModel->ReloadResourceDataL();
-
- iFileCheckAo = CCamFileCheckAo::NewL( iController, *this );
- iCollectionManager = new (ELeave) CCamCollectionManagerAO( *this );
-
- //iStillCaptureView->Container()->MakeVisible( ETrue );
-
- if( IsEmbedded() && iTargetMode == ECamControllerVideo )
- {
- ActivateLocalViewL( iVideoCaptureView->Id() );
- }
- else
- {
- ActivateLocalViewL( iStillCaptureView->Id() );
- }
- StartCheckingDefaultAlbumIdL();
- PRINT( _L("Camera <= CCamAppUi::CompleteAppUIConstructionL") )
- }
-
-// ---------------------------------------------------------
-// CCamAppUi::IsUiConstructionComplete()
-//
-// ---------------------------------------------------------
-//
-TBool CCamAppUi::IsUiConstructionComplete()
- {
- return iUiConstructionComplete;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::SetLensCoverExit
-// Sets iLensCoverExit flag according to aValue
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::SetLensCoverExit( TBool aValue )
- {
- iLensCoverExit = aValue;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::SetViewFinderStoppedStatus
-// set whether camera viewfinder stop or not
-// @param aViewFinderStopped ETrue viewfinder is stoped,EFalse viewfinder is runing
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::SetViewFinderStoppedStatus( TBool aViewFinderStopped )
- {
- iViewFinderStopped = aViewFinderStopped;
-
- if (iStartupLogoController)
- {
- iStartupLogoController->HideLogo();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsViewFinderInTransit
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsViewFinderInTransit()
- {
- return iViewFinderInTransit;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::SetViewFinderInTransit
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::SetViewFinderInTransit(TBool aInTransit)
- {
- iViewFinderInTransit = aInTransit;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::CheckMemoryAvailableForCapturing
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::CheckMemoryAvailableForCapturing()
- {
- PRINT( _L("Camera => CCamAppUi::CheckMemoryAvailableForCapturing") )
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMAPPUI_CHECKMEMORYAVAILABLEFORCAPTURING, "e_CCamAppUi_CheckMemoryAvailableForCapturing 1" );
- if ( ( ECamControllerVideo == iController.CurrentMode() ||
- ECamControllerVideo == iController.TargetMode() ) &&
- ECamMediaStorageCard == iController.
- IntegerSettingValue( ECamSettingItemVideoMediaStorage ) )
- {
- iMemoryAvailableForCapturing = !IsMemoryFullOrUnavailable( ECamMediaStorageCard );
- }
- else
- {
- iMemoryAvailableForCapturing = !IsMemoryFullOrUnavailable( ECamMediaStorageCurrent );
- }
- OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMAPPUI_CHECKMEMORYAVAILABLEFORCAPTURING, "e_CCamAppUi_CheckMemoryAvailableForCapturing 0" );
- PRINT1( _L("Camera <= CCamAppUi::CheckMemoryAvailableForCapturing iMemoryAvailableForCapturing:%d"), iMemoryAvailableForCapturing )
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsMemoryAvailableForCapturing
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsMemoryAvailableForCapturing() const
- {
- return iMemoryAvailableForCapturing;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::StartupLogoController
-// -----------------------------------------------------------------------------
-//
-CCamStartupLogoController* CCamAppUi::StartupLogoController()
- {
- return iStartupLogoController;
- }
-
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::IsRecoverableStatus
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::IsRecoverableStatus()
- {
- TBool ret = ETrue;
- switch(iStandbyStatus)
- {
- case ECamErrMassStorageMode:
- case ECamErrMemoryCardNotInserted:
- ret = EFalse;
- break;
- default:
- break;
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::ChangeStandbyStatusL
-// -----------------------------------------------------------------------------
-//
-TBool CCamAppUi::ChangeStandbyStatusL( TInt aError )
- {
- PRINT( _L("Camera => CCamAppUi::ChangeStandbyStatusL") );
- TBool ret = ETrue;
- if( ECamViewStateStandby == iViewState )
- {
- CCamViewBase* view = static_cast<CCamViewBase*>( iView );
- if( view )
- {
- PRINT( _L("Camera <> CCamAppUi::ChangeStandbyStatusL ECamViewStateStandby") );
- view->SetStandbyStatusL( aError );
- }
- else
- {
- ret = EFalse;
- }
- }
- else if( ECamViewStatePreCapture == iViewState )
- {
- CCamPreCaptureViewBase* view = static_cast<CCamPreCaptureViewBase*>( iView );
- PRINT( _L("Camera <> CCamAppUi::ChangeStandbyStatusL ECamViewStatePreCapture") );
- if( view )
- {
- if( TBool(ETrue) == view->IsSetupModeActive() ) // Boolean corruption
- {
- ret = ETrue;
- }
- else
- {
- ret = EFalse;
- }
- }
- }
- else
- {
- if( ECamViewStatePreCapture == iTargetViewState || ECamPreCapViewfinder == iPreCaptureMode)
- {
- ret = EFalse;
- }
- PRINT3( _L("Camera <> CCamAppUi::ChangeStandbyStatusL iViewState=%d iTargetViewState=%d iPreCaptureMode=%d"), iViewState, iTargetViewState, iPreCaptureMode );
- }
- PRINT1( _L("Camera <= CCamAppUi::ChangeStandbyStatusL ret=%d"), ret);
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::PreCaptureMode
-// -----------------------------------------------------------------------------
-//
-TCamPreCaptureMode CCamAppUi::PreCaptureMode()
- {
- PRINT1( _L("Camera <> CCamAppUi::PreCaptureMode %d"), iPreCaptureMode);
- return iPreCaptureMode;
- }
-
-void CCamAppUi::HandleServerAppExit(TInt aReason)
- {
- PRINT1(_L("Camera => CCamAppUi::HandleServerAppExit. aReason:%d"), aReason);
-
- MAknServerAppExitObserver::HandleServerAppExit(aReason);
-
- iVideoClipPlayInProgress = EFalse;
-
- PRINT(_L("Camera <= CCamAppUi::HandleServerAppExit."));
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::HandleHdmiEventL
-// -----------------------------------------------------------------------------
-//
-void CCamAppUi::HandleHdmiEventL( TCamHdmiEvent aEvent )
- {
- HBufC* noteString = NULL;
- CAknWarningNote* note = NULL;
- switch( aEvent )
- {
- case ECamHdmiCableConnectedBeforeRecording:
- {
- noteString = StringLoader::LoadLC( R_QTN_LCAM_HDMI_REMOVE_CABLE );
- note = new (ELeave) CAknWarningNote();
- note->ExecuteLD( *noteString );
- CleanupStack::PopAndDestroy( noteString );
- }
- break;
- case ECamHdmiCableConnectedDuringRecording:
- {
- noteString = StringLoader::LoadLC( R_QTN_LCAM_HDMI_CABLE_DETECTED );
- note = new (ELeave) CAknWarningNote();
- note->ExecuteLD( *noteString );
- CleanupStack::PopAndDestroy( noteString );
- }
- break;
- default:
- break;
- }
-
- }
-
-// -----------------------------------------------------------------------------
-// CCamAppUi::NaviProgressBarModel
-// -----------------------------------------------------------------------------
-//
-CCamNaviProgressBarModel* CCamAppUi::NaviProgressBarModel()
- {
- return iNaviProgressBarModel;
- }
-
-
-void CCamAppUi::CleanupBlankScreen( TAny* aAny )
- {
- PRINT(_L("Camera => CCamAppUi::CleanupBlankScreen."));
- CCamAppUi* appui = static_cast<CCamAppUi*>( aAny );
- RAknUiServer* capServ = CAknSgcClient::AknSrv();
- if( capServ )
- {
- capServ->UnblankScreen();
- appui->Exit();
- }
- PRINT(_L("Camera <= CCamAppUi::CleanupBlankScreen."));
- }
-
-// End of File