/*
* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: Base class for pre capture views*
*/
// INCLUDE FILES
#include <eikbtgpc.h>
#include <eikmenub.h>
#include <musresourceproperties.h>
#include <cameraplatpskeys.h>
#include <cameraapp.rsg>
#include <vgacamsettings.rsg>
#include <akntoolbar.h>
#include <akntoolbarextension.h>
#include <aknbutton.h>
#include <eiksoftkeypostingtransparency.h>
#include <AknsUtils.h>
#include <gulicon.h>
#include "Cam.hrh"
#include "CamAppUi.h"
#include "CamUtility.h"
#include "CamAppController.h"
#include "CamPreCaptureContainerBase.h"
#include "CamLogger.h"
#include "CamPanic.h"
#include "CamCaptureSetupMenu.h"
#include "CamStandbyContainer.h"
#include "CamSelfTimer.h"
#include "CamTimer.h"
#include "camactivepalettehandler.h"
#include "CamPreCaptureViewBase.h"
#include "CameraUiConfigManager.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "CamPreCaptureViewBaseTraces.h"
#endif
// ===========================================================================
// Constants
// ========================= MEMBER FUNCTIONS ================================
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase destructor
//
// ---------------------------------------------------------------------------
//
CCamPreCaptureViewBase::~CCamPreCaptureViewBase()
{
PRINT( _L("Camera => ~CCamPreCaptureViewBase") );
PRINT( _L("Camera <= ~CCamPreCaptureViewBase") );
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::HandleCommandL
// Handle commands
// -----------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::HandleCommandL( TInt aCommand )
{
PRINT( _L("Camera => CCamPreCaptureViewBase::HandleCommandL") );
switch ( aCommand )
{
case ECamCmdShootSetup:
{
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
TBool selfTimerEnabled = appUi->SelfTimerEnabled();
if ( selfTimerEnabled )
{
CCamSelfTimer* selftimer = appUi->SelfTimer();
// If self-timer is enabled, we need to check that it is in
// self-timer standby, ie Enabled but not Active (ie not
// counting down)
if ( selftimer && !selftimer->IsActive() )
{
// In self-timer standby, pressing "select" button starts
// self-timer count down. Pass this event on to AppUi.
appUi->HandleCommandL( ECamCmdSelfTimerActivate );
}
}
else
{
// we are not in self -timer mode and check we are
// not already in capture setup mode
if ( !iCaptureSetupMenuModeActive )
{
// Ensure first item is selected in CSM.
iCaptureSetupMenuLastItemIndex = 0;
SwitchToCaptureSetupMenuModeL();
}
}
}
break;
// If an item in the capture setup menu has been selected.
case EAknSoftkeySelect:
{
if ( ActiveSettingMode() == ECamSettingModeCaptureMenu )
{
iCaptureSetupMenuContainer->HandleCommandL( aCommand );
}
else
{
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
}
}
break;
// If capture setup menu is active and user presses softkey back,
// deactivate the menu. This is EEikBidCancel which has the same
// enumeration value as EAknSoftkeyCancel.
case EAknSoftkeyCancel:
{
if ( ActiveSettingMode() == ECamSettingModeCaptureMenu )
{
ExitCaptureSetupMenuModeL();
}
else if ( iController.SequenceCaptureInProgress() )
// Check if currently capturing a burst, if so, cancel it
{
// If already received all the snapshots
if ( iController.AllSnapshotsReceived() )
{
// stop burst immediately
iController.StopSequenceCaptureL();
}
else
{
// capture the min images (2), before stopping the burst
iController.SetKeyUp( ETrue );
iController.SoftStopBurstL( ETrue );
}
// Update CBA for setup pane usage
SetSoftKeysL( R_CAM_SOFTKEYS_BLANK );
}
else
{
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
}
}
break;
case EAknSoftkeyOptions:
{
// do nothing, the command is handled by the framework
}
break;
// Note: CaptureSetupMenu mode also uses a 'Back' softkey but this has
// the command value EEikBidCancel
case EAknSoftkeyBack:
{
// exit to embedded app if we're embedded and in plain pre-capture
if ( iEmbedded
&& ActiveSettingMode() != ECamSettingModeScene
&& ActiveSettingMode() != ECamSettingModeInfoListBox )
{
CCamCaptureSetupViewBase::HandleCommandL( ECamCmdInternalExit );
}
else
{
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
}
}
break;
case EAknSoftkeyOk:
{
// Else pass on to lower levels
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
}
break;
case ECamCmdToggleCourtesyUI:
{
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
if ( appUi )
{
appUi->SetAlwaysDrawPreCaptureCourtesyUI( !appUi->AlwaysDrawPreCaptureCourtesyUI() );
}
}
break;
case ECamCmdPopUpMenuZoom:
{
iContainer->ShowZoomPaneWithTimer();
}
break;
case ECamCmdCaptureSetupFlashStill:
{
iToolbarExtensionInvisible = ETrue;
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
}
break;
case ECamCmdInternalExit:
{
const TCamCaptureOperation operation(
iController.CurrentOperation() );
if ( ECamPaused == operation )
{
iController.StopVideoRecording();
iController.SetCaptureKeyPressedWhileImageSaving( ETrue );
}
StopViewFinder();
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
if ( iController.IsTouchScreenSupported() )
{
CAknToolbar* fixedToolbar = Toolbar();
if ( fixedToolbar )
{
CAknToolbarExtension* extension =
fixedToolbar->ToolbarExtension();
if ( extension )
{
// Reset toolbar extension button and view to closed state
extension->SetShown( EFalse );
extension->SetCurrentState( 0, EFalse );
}
}
}
}
break;
default:
{
CCamCaptureSetupViewBase::HandleCommandL( aCommand );
}
}
PRINT( _L("Camera <= CCamPreCaptureViewBase::HandleCommandL") );
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::HandleForegroundEventL
// Handle a move to the foreground
// -----------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::HandleForegroundEventL( TBool aForeground )
{
PRINT1( _L( "Camera => CCamPreCaptureViewBase::HandleForegroundEventL %d" ), aForeground );
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
__ASSERT_DEBUG(appUi, CamPanic(ECamPanicNullPointer));
// -----------------------------------------------------
// coming to the foreground
if ( aForeground )
{
// Ignore foregrounding if view switch to postcapture anyway in progress.
if( appUi->TargetViewState() == ECamViewStatePostCapture
|| appUi->TargetViewState() == ECamViewStateBurstThumbnail ) {
PRINT( _L( "Camera <= CCamPreCaptureViewBase::HandleForegroundEventL, ignored as going to postcapture") );
return;
}
if ( !( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() ) )
{
if ( !iController.IsTouchScreenSupported() )
{
if ( !appUi->ActivePalette() )
{
SetupActivePaletteL();
}
else
{
appUi->APHandler()->UpdateActivePaletteL();
}
}
}
UpdateCbaL();
// restart idle timer in any case
iController.StartIdleTimer();
// If capture setup menu is active then ensure background is faded.
if ( iCaptureSetupMenuContainer )
{
iCaptureSetupMenuContainer->FadeBehind( ETrue );
}
// coming to the foreground from an eikon server window
if ( iContinueInBackground )
{
iContinueInBackground = EFalse;
if ( !iController.IsViewFinding() && !iSceneSettingModeActive )
{
iController.StartViewFinder();
}
else if( iLocationTrailConnecting )
{
iLocationTrailConnecting = EFalse;
iController.StopViewFinder();
iController.StartViewFinder();
}
CCamCaptureSetupViewBase::HandleForegroundEventL( aForeground );
UpdateCbaL();
if ( iController.CameraSwitchQueued() )
{
appUi->HandleCommandL( ECamCmdSwitchCamera );
}
PRINT( _L( "Camera <= CCamPreCaptureViewBase::HandleForegroundEventL - continuing in background" ) );
return;
}
// This only happens when the app is first launched
if ( !appUi->IsConstructionComplete() &&
!iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported())
{
iActivateToStandby = ETrue;
if ( !iStandbyModeActive )
{
//iStandbyError = KErrNone;
appUi->SetStandbyStatus( KErrNone );
PRINT( _L( "Camera <> CCamPreCaptureViewBase::HandleForegroundEventL: sending ECamCmdGoToStandby" ) );
HandleCommandL( ECamCmdGoToStandby );
SetTitlePaneTextL();
}
}
// Register that we want to use the engine
IncrementCameraUsers();
if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() )
{
if ( iController.CameraSwitchQueued() )
{
appUi->HandleCommandL( ECamCmdSwitchCamera );
}
else if ( appUi->TargetViewState() != ECamViewStatePostCapture )
{
TCamCameraMode mode = iController.CurrentMode();
if ( mode == ECamControllerVideo )
{
iController.EnterViewfinderMode( ECamControllerVideo );
}
else if( mode == ECamControllerImage && !iSceneSettingModeActive )
{
iController.EnterViewfinderMode( ECamControllerImage );
}
}
UpdateCbaL();
}
else
{
// Lens cover is not supported
if ( iController.CameraSwitchQueued() )
{
appUi->HandleCommandL( ECamCmdSwitchCamera );
}
}
// Start the viewfinder unless the view is activating into standby mode
// in other modes than scene setting mode (there is no VF and this causes problems with DSA VF)
if ( ( !iStandbyModeActive || !iActivateToStandby ) && !iSceneSettingModeActive )
{
// If in embedded mode and image has been captured but view is not yet in
// postcapture view VF should not be started.
if( !iAssumePostCaptureView )
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::HandleForegroundEventL start VF"))
StartViewFinder();
}
}
// <CAMERAAPP_CAPI_V2_MIGRATION/>
// if ( iController.EngineState() == ECamEngineStillCapturePrepared ||
// iController.EngineState() == ECamEngineVideoCapturePrepared )
// if ( ( ECamImageOn|ECamVideoOn )& ( iController.CameraState() ) )
TCamCameraState state = iController.CameraState();
if( ECamCameraPreparedImage == state ||
ECamCameraPreparedVideo == state )
{
// Now that the view is initialised, we may need to put up the
// mmc removal note. Perform this is required.
appUi->ShowMMCRemovalNoteIfRequiredL();
if ( appUi && !iSceneSettingModeActive &&
!( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() ) )
{
appUi->RaisePreCaptureCourtesyUI(ETrue);
}
}
}
// -----------------------------------------------------
// Going to the background
else
{
PRINT( _L( "Camera <> CCamPreCaptureViewBase::HandleForegroundEventL: to background" ) );
// Not behind an eikon/avkon server window
TBool totalBackground = ETrue;
if ( iController.IsAppUiAvailable() )
{
totalBackground = appUi->AppInBackground( EFalse );
}
// Either in foreground (moving to another view of our's)
// or if in background, then not just behind a notifier dialog.
if ( totalBackground )
{
ReleaseResources();
// hide the AP to avoid blinking when coming back from bg
if ( iController.UiConfigManagerPtr() && iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() )
{
appUi->SetActivePaletteVisibility( EFalse );
}
}
// Behind a server window
else
{
iContinueInBackground = ETrue;
}
// reset post capture assumption flag since post capture is not
// used when video is stopped for usb
if ( iController.IsCaptureStoppedForUsb() )
{
iAssumePostCaptureView = EFalse;
}
}
// -----------------------------------------------------
if ( !iStandbyModeActive )
{
// Inform the container of foreground state change
PRINT( _L( "Camera <> CCamPreCaptureViewBase::HandleForegroundEventL: inform container.." ) );
iContainer->HandleForegroundEventL( aForeground );
}
else
{
// if in videocall, don't exit standby
if ( iController.InVideocallOrRinging() )
{
iActivateToStandby = EFalse;
}
else
{
// If the view has been set to standby at activation then
// the first foreground event should not be used to exit standby
if ( !iActivateToStandby )
{
// inform standby container
PRINT( _L( "Camera <> CCamPreCaptureViewBase::HandleForegroundEventL: inform standby container.." ) );
iStandbyContainer->HandleForegroundEventL( aForeground );
}
else
{
iActivateToStandby = EFalse;
}
}
}
CCamCaptureSetupViewBase::HandleForegroundEventL( aForeground );
PRINT( _L( "Camera <= CCamPreCaptureViewBase::HandleForegroundEventL" ) );
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::SetLocationTrailConnecting
// Set iLocationTrailConnecting flag.
// -----------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SetLocationTrailConnecting()
{
iLocationTrailConnecting = ETrue;
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::SetPostCaptureViewAsumption
// Set iAssumePostCaptureView flag.
// -----------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SetPostCaptureViewAsumption( TBool aAssumePostCaptureView )
{
iAssumePostCaptureView = aAssumePostCaptureView;
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::HandleControllerEventL
// Handle controller events
// -----------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::HandleControllerEventL( TCamControllerEvent aEvent,
TInt /*aError*/ )
{
PRINT( _L( "Camera => CCamPreCaptureViewBase::HandleControllerEventL" ) );
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
switch( aEvent )
{
// ---------------------------------------------------
case ECamEventEngineStateChanged:
{
// Do not do softkey update if we are already exiting
// (AppUi is not available)
if( iController.IsAppUiAvailable() )
{
PRINT( _L( "Camera <> case ECamEventEngineStateChanged" ) );
// <CAMERAAPP_CAPI_V2_MIGRATION/>
// if ( iController.EngineState() == ECamEngineStillCapturePrepared ||
// iController.EngineState() == ECamEngineVideoCapturePrepared )
if ( ECamCameraPreparedVideo == iController.CameraState() ||
ECamCameraPreparedImage == iController.CameraState() )
{
// Now that the view is initialised, we may need to put up the
// mmc removal note. Perform this is required.
PRINT( _L( "Camera <> show mmc note if needed" ) );
appUi->ShowMMCRemovalNoteIfRequiredL();
// Do not update (show) precapture view toolbar if capturing is almost
// finished, otherwise there is flickering and finally inactive toolbar
// when returning to prepactureview after image deletion.
// This will happen only if camera is started directly to portrait
// secondary camera i.e. Lens cover feature is supported
TBool noToolbar = (ECamCompleting == iController.CurrentOperation() ) && appUi->IsSecondCameraEnabled();
if ( ECamCameraPreparedImage == iController.CameraState() &&
!appUi->IsBurstEnabled() && !noToolbar )
{
// Also fixed toolbar might need to be enabled.
appUi->SetToolbarVisibility();
}
}
//Do not update CBA if we are capturing or paused to prevent blinking
//during video capture saving and completing
if ( iController.CurrentVideoOperation() != ECamCapturing
&& iController.CurrentVideoOperation() != ECamPaused )
{
PRINT( _L( "Camera <> Update CBA" ) );
UpdateCbaL();
}
}
break;
}
case ECamEventSliderClosed:
{
// if embedded and the slider is closed,
// the menu items may change, close the menu
if( iEmbedded )
{
PRINT( _L("Camera <> CCamPreCaptureViewBase: calling StopDisplayingMenuBar") );
StopDisplayingMenuBar();
}
break;
}
default:
{
// Other events => no action.
break;
}
} // switch
PRINT( _L( "Camera <= CCamPreCaptureViewBase::HandleControllerEventL" ) );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::DoActivateL
// Activate this view
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::DoActivateL( const TVwsViewId& aPrevViewId,
TUid aCustomMessageId,
const TDesC8& aCustomMessage )
{
OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMPRECAPTUREVIEWBASE_DOACTIVATEL, "e_CCamPreCaptureViewBase_DoActivateL 1" );
PRINT( _L( "Camera => CCamPreCaptureViewBase::DoActivateL" ) );
iAssumePostCaptureView = EFalse;
ShowToolbarOnViewActivation( EFalse );
/*if ( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsLocationSupported() )
{
if( ECamLocationOn == iController.IntegerSettingValue( ECamSettingItemRecLocation ) )
{
if( ECamActiveCameraPrimary == iController.ActiveCamera() && ECamStandby != iController.CurrentOperation() )
{
PRINT( _L("Camera: CCamPreCaptureViewBase::DoActivateL - primary camera, start location/gps") )
iController.StartLocationTrailL();
}
else // Secondary camera
{
PRINT( _L("Camera: CCamPreCaptureViewBase::DoActivateL - secondary camera, stop location trail") )
iController.StopLocationTrail();
}
}
}*/
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
__ASSERT_DEBUG(appUi, CamPanic(ECamPanicNullPointer));
if(!appUi->DrawPreCaptureCourtesyUI() && !iController.IsTouchScreenSupported())
{
if ( !appUi->IsSecondCameraEnabled() )
{
SetCourtesySoftKeysL();
}
appUi->SetActivePaletteVisibility( EFalse );
}
else if (appUi->DrawPreCaptureCourtesyUI())
{
Cba()->MakeVisible( ETrue );
}
if ( appUi->SettingsLaunchedFromCamera() )
{
if ( TUid::Uid( ECamCmdInternalExit ) == aCustomMessageId )
{
appUi->SettingsPluginExitedL( ECameraInternalExit );
}
else if ( TUid::Uid ( EAknSoftkeyBack ) == aCustomMessageId )
{
appUi->SettingsPluginExitedL( ECameraPluginExit );
}
else
{
// do nothing
}
}
CCamCaptureSetupViewBase::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
if ( appUi->IsSecondCameraEnabled() && !appUi->IsQwerty2ndCamera() )
{
StatusPane()->MakeVisible( ETrue );
}
else
{
StatusPane()->MakeVisible( EFalse );
}
if ( iController.IsTouchScreenSupported() )
{
CAknToolbar* fixedToolbar = Toolbar();
if ( fixedToolbar )
{
// If video call is active, toolbar is set to dimmed, that user cannot use it
TInt callType( EPSCTsyCallTypeUninitialized );
RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallType, callType );
if ( callType == EPSCTsyCallTypeH324Multimedia)
{
fixedToolbar->SetDimmed( ETrue );
}
else
{
fixedToolbar->SetDimmed( EFalse );
}
fixedToolbar->SetToolbarObserver( this );
appUi->SetToolbarVisibility( );
// Make sure toolbar extension button has no background
CAknToolbarExtension* extension = fixedToolbar->ToolbarExtension();
if ( extension )
{
extension->SetButtonFlags(
extension->ButtonFlags() | KAknButtonNoFrame );
extension->DrawDeferred();
}
}
}
appUi->PushNaviPaneCounterL();
// Pass on the ID of the previous view to the container
TCamAppViewIds viewId = static_cast<TCamAppViewIds>( aPrevViewId.iViewUid.iUid );
iContainer->SetPreviousViewId( viewId );
iController.AddControllerObserverL( this );
TBool transparentCba = EFalse;
UpdateCbaL();
switch( aCustomMessageId.iUid )
{
// -------------------------------
// Standby with or without error
case ECamViewMessageStandby:
PRINT( _L( "Camera <> CCamPreCaptureViewBase::DoActivateL: custom message ECamViewMessageStandby" ) );
//iStandbyError = KErrNone;
//appUi->SetStandbyStatus( KErrNone );
SetSceneSettingMode( EFalse );
iActivateToStandby = ETrue;
HandleCommandL( ECamCmdGoToStandby );
return;
// break;
// -------------------------------
// Scene setting mode
case ECamViewMessageSceneSettingList:
PRINT( _L( "Camera <> CCamPreCaptureViewBase::DoActivateL: custom message ECamViewMessageSceneSettingList" ) );
SwitchToSceneSettingModeL();
break;
// -------------------------------
default:
// Other precapture modes have transparent CBA buttons
// except secondary camera
if ( !appUi->IsSecondCameraEnabled() || appUi->IsQwerty2ndCamera() )
{
transparentCba = ETrue;
}
// don't start VF if faster startup is used when cameraswitch is queued,
// need to switch to maincamera first
if ( !( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() &&
iController.CameraSwitchQueued() ) )
{
StartViewFinder();
}
break;
// -------------------------------
}
// Here we check if the previous view is ViaPlayer play mode
if ( !iSceneSettingModeActive &&
( aPrevViewId.iViewUid.iUid != ECamViewIdViaPlayerPlayBack ) &&
!( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() ) )
{
appUi->RaisePreCaptureCourtesyUI(ETrue);
}
// Reset iContinueInBackground flag, which is set when app temporarily
// goes behind a system window and there's no need to free resources.
// Resetting this flag only in ReleaseResources causes problems (at least)
// if power key is pressed during burst capture.
iContinueInBackground = EFalse;
// Reset iDeactivateToStandby flag, which is used when the PreCapture view
// goes to the Standby mode, at which point the UI should not reactivate the
// viewfinder.
iDeactivateToStandby = EFalse;
EikSoftkeyPostingTransparency::MakeTransparent(
*Cba(), transparentCba );
// Make sure appuis CBA is not visible
CEikButtonGroupContainer* cba = AppUi()->Cba();
if( cba )
{
cba->MakeVisible( EFalse );
}
PRINT( _L( "Camera <= CCamPreCaptureViewBase::DoActivateL" ) );
OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMPRECAPTUREVIEWBASE_DOACTIVATEL, "e_CCamPreCaptureViewBase_DoActivateL 0" );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::DoDeactivate
// Deactivate this view
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::DoDeactivate()
{
PRINT( _L( "Camera => CCamPreCaptureViewBase::DoDeactivate" ) );
CCamCaptureSetupViewBase::DoDeactivate();
iController.RemoveControllerObserver( this );
if ( iController.IsTouchScreenSupported() )
{
CAknToolbar* fixedToolbar = Toolbar();
if ( fixedToolbar )
{
CAknToolbarExtension* extension = fixedToolbar->ToolbarExtension();
if ( extension )
{
// Reset toolbar extension button and view to closed state
extension->SetShown( EFalse );
extension->SetCurrentState( 0, EFalse );
}
}
}
ReleaseResources();
if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() &&
iController.ActiveCamera() == ECamActiveCameraSecondary )
{
if ( iController.CameraSwitchQueued() )
{
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
// If camera switch fails, main camera is used instead
TRAP_IGNORE( appUi->HandleCommandL( ECamCmdSwitchCamera ) );
}
}
PRINT( _L( "Camera <= CCamPreCaptureViewBase::DoDeactivate" ) );
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::HandleFocusLossL
// Handle change of focus
// -----------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::HandleFocusLossL()
{
PRINT( _L( "Camera => CCamPreCaptureViewBase::HandleFocusLossL" ) );
// if the application was already in the background, but behind an
// eikon server window, then handle backgrounding properly now.
// Otherwise the backgrounding will be handled in the normal
// HandleForeground() method.
if ( iContinueInBackground )
{
ReleaseResources();
// Inform the container of foreground state change
iContainer->HandleForegroundEventL( EFalse );
}
CCamCaptureSetupViewBase::HandleFocusLossL();
// dismiss menu bar if open
StopDisplayingMenuBar();
PRINT( _L( "Camera <= CCamPreCaptureViewBase::HandleFocusLossL" ) );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::SwitchToCaptureSetupModeL
// Switches the current mode to capture setup and activates a
// specific control..
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SwitchToCaptureSetupModeL( TInt aSetupCommand )
{
PRINT( _L("Camera => CCamPreCaptureViewBase::SwitchToCaptureSetupModeL") );
// Remove the view's main container, and add the capture setup
// control associated with the input command to the container stack.
CCamCaptureSetupViewBase::SwitchToCaptureSetupModeL( aSetupCommand );
// only remove the capture setup menu container after
// the switch completes successfully
RemoveCaptureSetupMenuContainers();
SetCaptureSetupModeActive(ETrue);
PRINT( _L("Camera <= CCamPreCaptureViewBase::SwitchToCaptureSetupModeL") );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::SwitchToSceneSettingModeL
// Switches the current mode to scene setting and activates a
// specific control.
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SwitchToSceneSettingModeL()
{
// Remove the view's main container, and add the capture setup
// control associated with the input command to the container stack.
CCamCaptureSetupViewBase::SwitchToSceneSettingModeL();
// only remove the capture setup menu container after
// the switch completes successfully
RemoveCaptureSetupMenuContainers();
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ExitCaptureSetupModeL
// Exits capture setup mode and activates the capture setup menu control.
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ExitCaptureSetupModeL()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupModeL") )
CCamCaptureSetupViewBase::ExitCaptureSetupModeL();
iController.SetViewfinderWindowHandle( &iContainer->Window() );
if( !iController.IsViewFinding() && !iController.InVideocallOrRinging() )
{
TCamCameraMode mode = iController.CurrentMode();
PRINT1( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupModeL - CurrentMode %d"), mode );
if (mode == ECamControllerVideo )
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupModeL - ECamControllerVideo") );
iController.EnterViewfinderMode( ECamControllerVideo );
}
else
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupModeL - ECamControllerImage") );
iController.EnterViewfinderMode( ECamControllerImage );
}
}
// make sure app is not left in an invalid state if a leave
// occurs after exiting the capture setup
iCaptureSetupMenuModeActive = EFalse;
static_cast<CCamAppUiBase*>( AppUi() )->PushNaviPaneCounterL();
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
if( appUi->ActiveCamera() == ECamActiveCameraSecondary )
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupModeL ###") )
SwitchToCaptureSetupMenuModeL();
}
PRINT( _L("Camera <= CCamPreCaptureViewBase::ExitCaptureSetupModeL") )
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ExitSceneSettingModeL
// Exits scene setting mode and activates the capture setup menu control.
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ExitSceneSettingModeL()
{
CCamCaptureSetupViewBase::ExitSceneSettingModeL();
// make sure app is not left in an invalid state if a leave
// occurs after exiting the scene setting mode
iCaptureSetupMenuModeActive = EFalse;
static_cast<CCamAppUiBase*>( AppUi() )->PushNaviPaneCounterL();
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
if ( appUi->ActiveCamera() == ECamActiveCameraPrimary )
{
if ( iDeactivateToStandby || iController.InVideocallOrRinging() )
{
// don't restart VF if we are going to standby mode
}
else
{
StartViewFinder();
}
}
else
{
SwitchToCaptureSetupMenuModeL();
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ExitInfoListBoxL
// Exits InfoListBox
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ExitInfoListBoxL()
{
CCamCaptureSetupViewBase::ExitInfoListBoxL();
// make sure app is not left in an invalid state if a leave
// occurs after exiting the scene setting mode
iCaptureSetupMenuModeActive = EFalse;
static_cast<CCamAppUiBase*>( AppUi() )->PushNaviPaneCounterL();
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
if ( appUi->ActiveCamera() == ECamActiveCameraPrimary )
{
StartViewFinder();
}
else
{
SwitchToCaptureSetupMenuModeL();
}
}
// -----------------------------------------------------------------------------
// CCamPreCaptureViewBase::ExitAllModesL
// Revert to normal mode
// -----------------------------------------------------------------------------
//
void
CCamPreCaptureViewBase::ExitAllModesL()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitAllModesL" ) );
iController.DeepSleepTimerCancel();
TCamSettingMode currentMode = ActiveSettingMode();
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
switch ( currentMode )
{
case ECamSettingModeCaptureMenu:
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitAllModesL cap setup menu" ))
ExitCaptureSetupMenuModeL();
break;
}
case ECamSettingModeCapture:
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitAllModesL capture" ))
ExitCaptureSetupModeL();
if( appUi->ActiveCamera() == ECamActiveCameraSecondary )
{
PRINT( _L("Camera <> CamPreCaptureViewBase::ExitAllModesL ##" ))
ExitCaptureSetupMenuModeL();
}
break;
}
case ECamSettingModeScene:
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitAllModesL scene" ))
ExitSceneSettingModeL();
if( appUi->ActiveCamera() == ECamActiveCameraSecondary )
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitAllModesL ##" ))
ExitCaptureSetupMenuModeL();
}
if(Id() == TUid::Uid(ECamViewIdVideoPreCapture))
{
iToolbarExtensionInvisible = ETrue;
}
break;
}
case ECamSettingModeInfoListBox:
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitAllModesL generic" ))
ExitInfoListBoxL();
if( appUi->ActiveCamera() == ECamActiveCameraSecondary )
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitAllModesL ##" ))
ExitCaptureSetupMenuModeL();
}
break;
}
default:
{
iToolbarExtensionInvisible = ETrue;
}
break;
}
if ( iController.InVideocallOrRinging() )
{
return;
}
appUi->HandleCommandL(ECamCmdSwitchToPrecapture);
if ( !( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() ) )
{
TCamOrientation orientation = appUi->CamOrientation();
if ( orientation == ECamOrientationCamcorder || orientation == ECamOrientationCamcorderLeft )
{
// force update of active palette
appUi->APHandler()->UpdateActivePaletteL();
}
if ( appUi && !iSceneSettingModeActive )
{
appUi->RaisePreCaptureCourtesyUI(ETrue);
}
}
if ( iController.IsTouchScreenSupported() )
{
CAknToolbar* fixedToolbar = Toolbar();
CAknToolbarExtension* extension = fixedToolbar->ToolbarExtension();
//Only active view will set toolbar extension visibility.
if(this->IsForeground())
{
if ( extension && iToolbarExtensionInvisible == EFalse )
{
extension->SetShown( ETrue );
}
else if( extension )
{
extension->SetShown( EFalse );
}
}
iToolbarExtensionInvisible = EFalse;
}
PRINT( _L("Camera <= CCamPreCaptureViewBase::ExitAllModesL" ) );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ActiveSettingMode
// Returns the active setting mode
// ---------------------------------------------------------------------------
//
CCamPreCaptureViewBase::TCamSettingMode
CCamPreCaptureViewBase::ActiveSettingMode()
{
if ( iCaptureSetupModeActive )
{
return ECamSettingModeCapture;
}
else if ( iSceneSettingModeActive )
{
return ECamSettingModeScene;
}
else if ( iCaptureSetupMenuModeActive )
{
return ECamSettingModeCaptureMenu;
}
else if ( iInfoListBoxActive )
{
return ECamSettingModeInfoListBox;
}
else
{
return ECamSettingModeNone;
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::CCamPreCaptureViewBase
// C++ constructor
// ---------------------------------------------------------------------------
//
CCamPreCaptureViewBase::CCamPreCaptureViewBase( CCamAppController& aController )
: CCamCaptureSetupViewBase( aController )
{
iCaptureSetupMenuModeActive = EFalse;
iAssumePostCaptureView = EFalse;
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ConstructL
// Symbian OS 2nd phase constructor
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ConstructL()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ConstructL") )
/* Use AppUi to get this info.
// Get the id of Eikon Server window group
iEikonServerWindowGroupId =
iCoeEnv->WsSession().FindWindowGroupIdentifier( 0, KEikonServer );
iBTServerWindowGroupId =
static_cast<CCamAppUi*>( iEikonEnv->AppUi() )->BTServerId();
*/
UpdateToolbarIconsL();
PRINT( _L("Camera <= CCamPreCaptureViewBase::ConstructL") )
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::CleanupCaptureSetupMenu
// Cleanup the capture menu control if a leave occurs
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::CleanupCaptureSetupMenu( TAny* aAny )
{
CCamPreCaptureViewBase* view = static_cast<CCamPreCaptureViewBase*>( aAny );
if ( view->iCaptureSetupMenuContainer )
{
view->AppUi()->RemoveFromStack( view->iCaptureSetupMenuContainer );
delete view->iCaptureSetupMenuContainer;
view->iCaptureSetupMenuContainer = NULL;
}
// reset the active mode
view->iCaptureSetupMenuModeActive = EFalse;
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::SwitchToCaptureSetupMenuModeL
// Switches the current mode to capture setup menu and activates
// the capture setup menu control
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SwitchToCaptureSetupMenuModeL()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::SwitchToCaptureSetupMenuModeL"))
__ASSERT_DEBUG( !iCaptureSetupMenuContainer, CamPanic( ECamPanicResourceLeak ) );
// Create the relevant capture setup menu, e.g. video or photo...
CreateCaptureSetupMenuL();
// Cleanup the view correctly if a leave occurs
CleanupStack::PushL( TCleanupItem( CleanupCaptureSetupMenu, this ) );
PRINT( _L("Camera => CCamPreCaptureViewBase::SwitchToCaptureSetupMenuModeL start vf"))
StartViewFinder();
iCaptureSetupMenuContainer->SetMopParent( this );
// Activate the menu control and mode.
AppUi()->AddToStackL( *this, iCaptureSetupMenuContainer );
iCaptureSetupMenuContainer->ActivateL();
// UpdateCbaL need this boolean to be set in
// order for the correct CBA to be returned
iCaptureSetupMenuModeActive = ETrue;
UpdateCbaL();
CleanupStack::Pop(); // CleanupCaptureSetupMenu
// Fade the container that is behind.
iCaptureSetupMenuContainer->FadeBehind( ETrue );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ExitCaptureSetupMenuModeL
// Exits capture setup menu mode and activates the original precapture
// view container that was active before entering this mode.
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ExitCaptureSetupMenuModeL()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupMenuModeL() ") );
if ( !iCaptureSetupMenuModeActive )
{
return;
}
iCaptureSetupMenuModeActive = EFalse;
iContainer->MakeVisible( ETrue );
iCaptureSetupMenuContainer->FadeBehind( EFalse );
AppUi()->RemoveFromStack( iCaptureSetupMenuContainer );
delete iCaptureSetupMenuContainer;
iCaptureSetupMenuContainer = NULL;
UpdateCbaL();
SetTitlePaneTextL();
PRINT( _L("Camera <= CCamPreCaptureViewBase::ExitCaptureSetupMenuModeL() ") );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::SwitchToStandbyModeL
// Exits pre capture mode and activates the standby container
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SwitchToStandbyModeL( TCamAppViewIds aViewId, TInt aError )
{
iAssumePostCaptureView = EFalse;
iDeactivateToStandby = ETrue; // avoid viewfinder startup
iContinueInBackground = EFalse;
switch ( ActiveSettingMode() )
{
case ECamSettingModeCaptureMenu:
{
ExitCaptureSetupMenuModeL();
}
break;
case ECamSettingModeScene:
{
ExitSceneSettingModeL();
ExitCaptureSetupMenuModeL();
}
break;
case ECamSettingModeCapture:
{
ExitCaptureSetupModeL();
ExitCaptureSetupMenuModeL();
}
break;
case ECamSettingModeInfoListBox:
{
ExitInfoListBoxL();
ExitCaptureSetupMenuModeL();
}
break;
default:
break;
}
// Hide the active palette
static_cast<CCamAppUi*>( iEikonEnv->AppUi() )
->SetActivePaletteVisibility( EFalse );
// stop viewfinding
StopViewFinder();
CCamViewBase::SwitchToStandbyModeL( aViewId, aError );
iDeactivateToStandby = EFalse;
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ExitStandbyModeL
// Exits standby mode and activates the previous pre-capture container
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ExitStandbyModeL()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ExitStandbyModeL" ) )
// start view finding
iAssumePostCaptureView = EFalse;
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
if( appUi->AppInBackground(ETrue ))
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitStandbyModeL: global note in foreground." ) )
return;
}
if( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported() &&
iController.CurrentMode() != ECamControllerIdle )
{
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitStandbyModeL: not in standby, returning without exit" ) )
return;
}
if( !appUi->DrawPreCaptureCourtesyUI() &&
!iController.IsTouchScreenSupported() &&
!appUi->IsSecondCameraEnabled() )
{
SetCourtesySoftKeysL();
}
// In case coming back after dismissing videocall, need
// to register as using engine
if( !appUi->IsInPretendExit() )
{
IncrementCameraUsers();
}
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitStandbyModeL: start vf" ) )
StartViewFinder();
//static_cast<CCamAppUi*>( iEikonEnv->AppUi() )
// ->APHandler()->UpdateActivePaletteL();
TBool uiOverride = iController.UiConfigManagerPtr() && iController.UiConfigManagerPtr()->IsUIOrientationOverrideSupported();
if ( !uiOverride )
{
SetupActivePaletteL();
}
// Dimming is set if video call is active, remove dimming if video call is not active any more
TInt callType( EPSCTsyCallTypeUninitialized );
RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallType, callType );
if ( callType != EPSCTsyCallTypeH324Multimedia
&& iController.IsTouchScreenSupported() )
{
CAknToolbar* toolbar = Toolbar();
if (toolbar)
{
toolbar->SetDimmed( EFalse );
}
}
CCamViewBase::ExitStandbyModeL();
// Need to update appui viewstate
PRINT( _L("Camera <> CCamPreCaptureViewBase::ExitStandbyModeL: emit ECamCmdSwitchToPrecapture" ) )
appUi->HandleCommandL( ECamCmdSwitchToPrecapture );
if ( uiOverride )
{
appUi->SetActivePaletteVisibility( EFalse );
}
else
{
appUi->RaisePreCaptureCourtesyUI(ETrue);
}
if ( iController.UiConfigManagerPtr() &&
iController.UiConfigManagerPtr()->IsLocationSupported() )
{
if( ECamLocationOn == iController.IntegerSettingValue( ECamSettingItemRecLocation ) )
{
if( ECamActiveCameraPrimary == iController.ActiveCamera() )
{
PRINT( _L("Camera: CCamPreCaptureViewBase::ExitStandbyModeL - primary camera, start location/gps") )
iController.StartLocationTrailL();
}
}
}
PRINT( _L("Camera <= CCamPreCaptureViewBase::ExitStandbyModeL" ) )
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::IsOkOptionsMenuAllowed
// Checks whether or not the ok aoptions menu should be displayed
// ---------------------------------------------------------------------------
//
#if 0
TBool CCamPreCaptureViewBase::IsOkOptionsMenuAllowed()
{
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
// Check if we are in selftimer mode, scene setting mode,
// capture setup menu mode or if a capture mode preparation is
// taking place. If so, do NOT show the menu
if ( ( appUi && !appUi->SelfTimerEnabled() ) &&
!iController.CaptureModeTransitionInProgress() &&
ActiveSettingMode() == ECamSettingModeNone && !appUi->IsEmbedded() )
{
return ETrue;
}
else
{
return EFalse;
}
}
#endif // 0
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::RemoveCaptureSetupMenuContainers
// Removes the capture setup menu and original container from
// the container stack
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::RemoveCaptureSetupMenuContainers()
{
// Store the current item index value for the menu, so that it can
// be reused when the CSM container is reactivated from leaving
// a capture setup control.
if ( iCaptureSetupMenuContainer )
{
iCaptureSetupMenuLastItemIndex =
iCaptureSetupMenuContainer->CurrentItemIndex();
iCaptureSetupMenuContainer->FadeBehind( EFalse );
// Remove the Capture Setup Menu from the container stack.
AppUi()->RemoveFromStack( iCaptureSetupMenuContainer );
}
delete iCaptureSetupMenuContainer;
iCaptureSetupMenuContainer = NULL;
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::DynInitSwitchCameraMenuItemL
// Set up the text for switch camera in the options menu
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::DynInitSwitchCameraMenuItemL( CEikMenuPane* aMenuPane )
{
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
// Check if only 1 camera available
if ( !iController.UiConfigManagerPtr()->IsSecondaryCameraSupported() )
{
aMenuPane->SetItemDimmed( ECamCmdSwitchCamera, ETrue );
}
else
{
// if secondary camera is enabled
if ( appUi->IsSecondCameraEnabled() )
{
if( iController.UiConfigManagerPtr()->IsLensCoverSupported() )
{
TInt slideState = iController.CameraSlideState();
if ( slideState == CameraPlatPSKeys::EClosed )
{
aMenuPane->SetItemDimmed( ECamCmdSwitchCamera, ETrue );
}
else
{
aMenuPane->SetItemTextL( ECamCmdSwitchCamera,
R_CAM_PRE_CAPTURE_MENU_PRIMARY_CAMERA );
}
}
else
{
aMenuPane->SetItemTextL( ECamCmdSwitchCamera,
R_CAM_PRE_CAPTURE_MENU_PRIMARY_CAMERA );
}
}
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ReleaseResources
// Stop the viewfinder and inform the controller that this view has finished
// with the engine
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::ReleaseResources()
{
PRINT( _L("Camera => CCamPreCaptureViewBase::ReleaseResources") );
iContinueInBackground = EFalse;
StopViewFinder();
// Make sure that video recording is stopped (if ongoing).
iController.StopVideoRecording();
// if the application is not closing then self-timer mode must be disabled.
// otherwise it will be deleted as part of the application shut down process
if ( !iController.IsInShutdownMode() )
{
// Do not do softkey update if we are already exiting
// (AppUi is not available)
if( iController.IsAppUiAvailable() )
{
// Ensure AppUi has had self-timer mode disabled
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
if ( appUi )
{
TRAP_IGNORE( appUi->SelfTimerEnableL( ECamSelfTimerDisabled ) );
}
}
}
// Register that we no longer need the engine
// Checks if we incremented the count.
DecrementCameraUsers();
PRINT( _L("Camera <= CCamPreCaptureViewBase::ReleaseResources") );
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::IsPreCapture
// Returns whether the view is a precapture view
// ---------------------------------------------------------------------------
//
TBool CCamPreCaptureViewBase::IsPreCapture()
{
return ETrue;
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::OfferToolbarEventL
// Handle fixed toolbar and toolbar extension events
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::OfferToolbarEventL( TInt aCommand )
{
iController.StartIdleTimer();
HandleCommandAoL( aCommand );
if ( aCommand == ECamCmdSceneSettingList ||
aCommand == ECamCmdCaptureSetupFlashStill ||
aCommand == ECamCmdCaptureSetupSelfTimer ||
aCommand == ECamCmdCaptureSetupSceneStill ||
aCommand == ECamCmdCaptureSetupSceneVideo ||
aCommand == ECamCmdCaptureSetupColourFilterStill ||
aCommand == ECamCmdCaptureSetupColourFilterVideo ||
aCommand == ECamCmdCaptureSetupWhiteBalanceStill ||
aCommand == ECamCmdCaptureSetupWhiteBalanceVideo ||
aCommand == ECamCmdCaptureSetupExposureStill ||
aCommand == ECamCmdCaptureSetupLightSensitivityStill ||
aCommand == ECamCmdCaptureSetupContrastStill ||
aCommand == ECamCmdCaptureSetupImageSharpnessStill )
{
// These commands imply a container switch.
// iItemAccessedViaAP must be set so that softkeys work correctly.
CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
appUi->APHandler()->iItemAccessedViaAP = ETrue;
iController.DeepSleepTimerStart();
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::SetIconL
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SetIconL(
CAknButton* aButton,
const TDesC& aIconFilename,
TInt aIconId,
TInt aMaskId,
MAknsSkinInstance* aSkinInstance,
const TAknsItemID& aSkinItemId )
{
CGulIcon* icon = AknsUtils::CreateGulIconL(
aSkinInstance,
aSkinItemId,
aIconFilename,
aIconId,
aMaskId );
icon->SetBitmapsOwnedExternally( EFalse ); // CGulIcon owns bitmaps
CAknButtonState* state = aButton->State( 0 );
if ( state )
{
state->SetIcon( icon );
icon = NULL;
}
else
{
delete icon;
icon = NULL;
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::HandleAppEvent <<virtual>>
//
// ---------------------------------------------------------------------------
//
void
CCamPreCaptureViewBase::HandleAppEvent( const TCamAppEvent& aEvent )
{
PRINT1( _L("Camera => CCamPreCaptureViewBase::HandleAppEvent, event:%d"), aEvent );
CCamViewBase::HandleAppEvent( aEvent );
if ( aEvent == ECamAppEventFocusGained && iController.InVideocallOrRinging() )
{
TRAP_IGNORE( BlankSoftkeysL() );
if ( iController.IsTouchScreenSupported() )
{
CAknToolbar* toolbar = Toolbar();
if ( toolbar )
{
toolbar->SetToolbarVisibility( EFalse );
}
}
}
if ( aEvent == ECamAppEventFocusGained )
{
if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() &&
iController.CameraSwitchQueued() ) // fake exit done
{
iController.CheckSlideStatus(); // Do we still need to change cam?
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
// How about portrait/landscape 2nd camera?
if ( !iController.CameraSwitchQueued() &&
appUi->IsSecondCameraEnabled() )
{
TBool landscape2ndCam = appUi->IsQwerty2ndCamera( ETrue );
if( appUi->CamOrientation() != ECamOrientationPortrait )
{
if ( !landscape2ndCam )
{
PRINT( _L("Camera => CCamPreCaptureViewBase::HandleAppEvent, change to portrait 2nd cam."));
iController.SetCameraSwitchRequired(
ESwitchSecondaryOrientation );
}
}
else
{
if ( landscape2ndCam )
{
PRINT( _L("Camera => CCamPreCaptureViewBase::HandleAppEvent, change to landscape 2nd cam."));
iController.SetCameraSwitchRequired(
ESwitchSecondaryOrientation );
}
}
}
}
if ( iController.UiConfigManagerPtr()->IsLensCoverSupported() &&
iController.ActiveCamera() == ECamActiveCameraPrimary )
{
if ( iController.CameraSwitchQueued() )
{
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
// If camera switch fails, main camera is used instead
TRAP_IGNORE( appUi->HandleCommandL( ECamCmdSwitchCamera ) );
}
}
}
PRINT( _L("Camera <= CCamPreCaptureViewBase::HandleAppEvent") );
}
// ---------------------------------------------------------------------------
// SetupActivePaletteL
//
// Helper method to set up the Active Palette.
// If needed, a new instance of AP is created.
// Otherwise the existing AP items are cleared.
// New AP items are setup with resource from GetAPResourceId.
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::SetupActivePaletteL()
{
if( iContainer && !iController.IsTouchScreenSupported() )
{
CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
TCamOrientation orientation = appUi->CamOrientation();
if( ECamOrientationCamcorder == orientation
|| ECamOrientationCamcorderLeft == orientation
|| ECamOrientationPortrait == orientation )
{
// Creates Active Palette, sets items and sets view.
// Only AP2 supported.
static_cast<CCamPreCaptureContainerBase*>( iContainer )
->SetupActivePaletteL( this );
}
else
{
// No AP
}
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::ToolbarButtonById
//
// ---------------------------------------------------------------------------
//
CAknButton* CCamPreCaptureViewBase::ToolbarButtonById(const TCamCmd aCommandId) const
{
CAknButton* button = NULL;
if(iController.IsTouchScreenSupported())
{
CAknToolbar* toolbar = Toolbar();
if(toolbar)
{
button = static_cast<CAknButton*>
(toolbar->ControlOrNull(aCommandId));
if(NULL == button)
{
CAknToolbarExtension* extension = toolbar->ToolbarExtension();
if(extension)
{
button = static_cast<CAknButton*>
(extension->ControlOrNull(aCommandId));
}
}
}
}
return button;
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::HideButton
//
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::HideButton(const TCamCmd aCommandId)
{
if(iController.IsTouchScreenSupported())
{
CAknToolbar* toolbar = Toolbar();
if(toolbar)
{
if(toolbar->ControlOrNull(aCommandId))
{
toolbar->HideItem(aCommandId,ETrue,ETrue);
}
else if( toolbar->ToolbarExtension() &&
toolbar->ToolbarExtension()->ControlOrNull(aCommandId))
{
TRAP_IGNORE(toolbar->ToolbarExtension()->HideItemL(aCommandId,ETrue));
}
else
{
//Do Nothing
}
}
}
}
// ---------------------------------------------------------------------------
// CCamPreCaptureViewBase::RedrawToolBar
//
// ---------------------------------------------------------------------------
//
void CCamPreCaptureViewBase::RedrawToolBar()
{
CEikonEnv::Static()->WsSession().ClearAllRedrawStores();
}
// End of File