--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamPostCaptureViewBase.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,1039 @@
+/*
+* Copyright (c) 2007-2008 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: Post-capture view class for Camera application*
+*/
+
+
+// INCLUDE FILES
+#include <sendnorm.rsg>
+#include <sendui.h>
+#include <SenduiMtmUids.h>
+#ifndef __WINS__
+// #include <SFIUtilsAppInterface.h>
+#endif
+#include <eikbtgpc.h>
+#include <avkon.rsg>
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+#include <aknradiobuttonsettingpage.h>
+#include <akntextsettingpage.h>
+#include <akntitle.h> // CAknTitlePane
+#include <CMessageData.h>
+#include "MCamAddToAlbumObserver.h"
+#include "CamCollectionManagerAo.h"
+#include <glxmetadataviewutility.h>
+#include <glxcollectionselectionpopup.h>
+#include <akntoolbar.h>
+#include <aknbutton.h>
+#include <StringLoader.h>
+
+
+#include "Cam.hrh"
+#include "CamUtility.h"
+#include "CamPostCaptureViewBase.h"
+#include "CamAppController.h"
+#include "CamAppUi.h"
+#include "CamLogger.h"
+#include "camactivepalettehandler.h"
+#include "CamPostCaptureContainer.h"
+#include "camoneclickuploadutility.h"
+#include "CameraUiConfigManager.h"
+
+
+
+//CONSTANTS
+
+
+const TInt KCamSendUiBodySize = 0;
+const TInt KCamSendUiMessageSize = 0;
+
+
+const TUint KCamSendAsArrayGranularity = 1;
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::~CCamPostCaptureViewBase
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CCamPostCaptureViewBase::~CCamPostCaptureViewBase()
+ {
+ PRINT( _L("Camera => ~CCamPostCaptureViewBase") );
+ delete iSendAppUi;
+ delete iSendMtmsToDim;
+
+ if ( iAiwServiceHandler )
+ {
+ // unload service provider if any
+ iAiwServiceHandler->Reset();
+ delete iAiwServiceHandler;
+ }
+
+#ifndef __WINS__
+ iSFIUtils = NULL; // Not owned
+#endif // __WINS__
+
+
+ if ( iCollectionManagerCallBack )
+ {
+ delete iCollectionManagerCallBack;
+ iCollectionManagerCallBack = NULL;
+ }
+ delete iOneClickUploadUtility;
+
+ PRINT( _L("Camera <= ~CCamPostCaptureViewBase") );
+ }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureViewBase::HandleCommandL
+// Handle commands
+// -----------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::HandleCommandL( TInt aCommand )
+ {
+ PRINT1( _L("Camera => CCamPostCaptureViewBase::HandleCommandL (%d)"), aCommand )
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ switch ( aCommand )
+ {
+ case ECamCmdOneClickUpload:
+ {
+ iOneClickUploadUtility->UploadL(
+ iController.CurrentFullFileName() );
+ break;
+ }
+ case ECamCmdToggleActiveToolbar:
+ {
+ // If in the Landscape mode, MSK event is mapped
+ // like a normal selection key so that AP items
+ // are selected and respective setting pages are launched´
+ // refer to @ProcessCommandL, since we get here only from there
+ TKeyEvent aKeyEvent;
+ aKeyEvent.iCode = aKeyEvent.iRepeats = aKeyEvent.iModifiers = 0;
+ aKeyEvent.iScanCode = EStdKeyDevice3;
+ static_cast<CCamContainerBase*>
+ ( Container() )->OfferKeyEventL( aKeyEvent, EEventKey );
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ iController.DeepSleepTimerCancel();
+ appUi->HandleCommandL( aCommand );
+ }
+ break;
+
+ case ECamCmdSend:
+ case ECamCmdSendToCallerMultimedia:
+ case ECamCmdQuickSend:
+ {
+/* TBool inCall = EFalse;
+#if !defined(__WINS__) && !defined(__WINSCW__)
+ inCall = iSFIUtils->IsCLIValidL();
+#endif */
+ //use both inCall and InCallOrRinging() conditions to make sure if it is in call state
+ if ( /*inCall &&*/ iController.InCallOrRinging() )
+ {
+#ifndef __WINS__
+ DoInCallSendL();
+#endif
+ }
+ else
+ {
+ DoSendAsL();
+ }
+ }
+ break;
+
+ case ECamCmdExitStandby:
+ {
+ // leave standby mode
+ ExitStandbyModeL();
+ }
+ break;
+ case ECamCmdToggleCourtesyUI:
+ {
+ /*
+ * EFalse --> We just hide the AP tool bar
+ * ETrue --> We show the AP tool bar
+ * In this case, we dont toggle the UI between Show/Hide icons so
+ * we send EFalse as a parameter to SetAlwaysDrawPostCaptureCourtesyUI method
+ */
+ if ( appUi )
+ {
+ appUi->SetAlwaysDrawPostCaptureCourtesyUI( EFalse );
+ }
+ break;
+ }
+ case ECamCmdProperties:
+ {
+ // Passing the name of the current file
+ // Asking the MetadataViewUtility to lauch an view for us
+ CEikStatusPane* sp = StatusPane();
+ CAknTitlePane* title =
+ static_cast<CAknTitlePane*>( sp->ControlL(
+ TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ title->SetTextL( KNullDesC );
+ sp->MakeVisible( ETrue );
+ title->MakeVisible( ETrue );
+ iContainer->SetRect( AppUi()->ClientRect() );
+ GlxMetadataViewUtility::ActivateViewL( iController.CurrentFullFileName() );
+ static_cast<CCamContainerBase*>(iContainer)->CheckForFileName( ETrue );
+ title->MakeVisible( EFalse );
+ sp->MakeVisible( EFalse );
+ iContainer->SetRect( AppUi()->ApplicationRect() );
+ break;
+ }
+ // Add Photo/Video to the album
+ case ECamCmdAddToAlbum:
+ {
+
+ /*
+ * Status = 0 ( User confirms add to album operation )
+ * Status = 1 ( User cancels add to album operation )
+ */
+ /*TInt status = ShowAddToAlbumConfirmationQueryL();
+ if ( status == 0 )
+ {
+ StartAddToAlbumOperationL();
+ }
+ else
+ { // Lint warnings
+ }*/
+ StartAddToAlbumOperationL();
+ }
+ break;
+ default:
+ {
+ CCamViewBase::HandleCommandL( aCommand );
+ }
+ }
+
+ PRINT1( _L("Camera <= CCamPostCaptureViewBase::HandleCommandL (%d)"), aCommand )
+ }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureViewBase::HandleControllerEventL
+// Handle user menu selections
+// -----------------------------------------------------------------------------
+//
+void
+CCamPostCaptureViewBase::HandleControllerEventL( TCamControllerEvent aEvent,
+ TInt /*aError*/ )
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::HandleControllerEventL") );
+
+ switch( aEvent )
+ {
+ // -----------------------------------------------------
+ case ECamEventCallStateChanged:
+ {
+ PRINT( _L("Camera <> case ECamEventCallStateChanged") );
+
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+
+ // Reset the Send and Send to caller items in the active toolbar
+ if ( !iEmbedded )
+ {
+ CCamActivePaletteHandler* apHandler = appUi->APHandler();
+ // Hide Send or Send to caller
+ ResetSendAvailabilityL( apHandler );
+ if ( iController.IsTouchScreenSupported() )
+ {
+ UpdateToolbarIconsL();
+ }
+ else
+ {
+ UpdateActivePaletteItemsL();
+ }
+ }
+ break;
+ }
+ // -----------------------------------------------------
+ case ECamEventSaveComplete:
+ case ECamEventSnapshotReady:
+ {
+ if ( ECamEventSaveComplete == aEvent &&
+ iWaitForImageSave &&
+ !iController.IsTouchScreenSupported() )
+ {
+ UpdateActivePaletteItemsL();
+ }
+ static_cast<CCamContainerBase*>(iContainer)->CheckForFileName( EFalse );
+ // Check that the file that has just completed is the one just taken
+ if ( iController.SavedCurrentImage()
+ && iController.IsAppUiAvailable()
+ )//&& iWaitForImageSave )
+ {
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ // check whether embedded or not
+ if ( iEmbedded )
+ {
+ //Do not show postcapture softkeys if we are still capturing or
+ //saving image
+ if ( iController.CurrentOperation() != ECamCapturing &&
+ iController.CurrentOperation() != ECamCompleting )
+ {
+ if ( !appUi->IsSecondCameraEnabled() || appUi->IsQwerty2ndCamera() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT_SECONDARY );
+ }
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_BLANK );
+ }
+ }
+ else
+ {
+ appUi->RaisePostCaptureCourtesyUI();
+ if ( appUi->IsSecondCameraEnabled() && !appUi->IsQwerty2ndCamera() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK_TOGGLETOOLBAR_PORTRAIT );
+ }
+ else if ( ECamViewStateBurstThumbnail == appUi ->CurrentViewState() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK_TOGGLETOOLBAR_BURST );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK_TOGGLETOOLBAR );
+ }
+
+ // image processing complete, enable gallery button
+ if( !iEmbedded )
+ {
+ // fixed toolbar is used only with touch devices
+ if ( iController.IsTouchScreenSupported() )
+ {
+ CAknToolbar* fixedToolbar = Toolbar();
+ if ( fixedToolbar )
+ {
+ fixedToolbar->SetItemDimmed( ECamCmdPhotos, EFalse, ETrue );
+ fixedToolbar->SetItemDimmed( ECamCmdDelete, EFalse, ETrue );
+ fixedToolbar->SetItemDimmed( ECamCmdOneClickUpload, EFalse, ETrue );
+ fixedToolbar->SetItemDimmed( ECamCmdSend, EFalse, ETrue );
+ }
+ }
+ }
+ }
+ iWaitForImageSave = EFalse;
+ }
+ break;
+ }
+
+ case ECamEventSliderClosed:
+ {
+ // if embedded and the slider is closed, close the menu
+ if( iEmbedded )
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase -> ECamEventSliderClosed") );
+ StopDisplayingMenuBar();
+ }
+ }
+
+ // -----------------------------------------------------
+ default:
+ break;
+ // -----------------------------------------------------
+ } // switch
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::HandleControllerEventL") );
+ }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureViewBase::HandleForegroundEventL
+// Handle foreground event
+// -----------------------------------------------------------------------------
+//
+void
+CCamPostCaptureViewBase::HandleForegroundEventL( TBool aForeground )
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::HandleForegroundEventL") )
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ // -------------------------------------------------------
+ // Coming to foreground
+ if ( aForeground)
+ {
+ PRINT( _L("Camera <> CCamPostCaptureViewBase::HandleForegroundEventL: to foreground") )
+ if ( static_cast<CCamAppUiBase*>( AppUi() )->IsInPretendExit() )
+ {
+ PRINT( _L("Camera <> CCamPostCaptureViewBase::HandleForegroundEventL: app in pretend exit so not grabbing the engine") )
+ // The view can get a foreground event while the application is
+ // actually in a pretend exit situation. This occurs when the view switch
+ // was called before the exit event, but didn't complete until after the
+ // exit event. In this case the view should not register an interest in
+ // the engine as the application is really in the background and the resources
+ // need to be released
+ return;
+ }
+
+ // set embedded flag here
+ iEmbedded = appUi->IsEmbedded();
+ // need to update cba according to whether we are embedded or not
+ if ( iEmbedded )
+ {
+ PRINT( _L("Camera <> CCamPostCaptureViewBase::HandleForegroundEventL: embedded mode") );
+ //Do not show postcapture softkeys if we are still capturing or
+ //saving image
+ if ( iController.CurrentOperation() != ECamCapturing &&
+ iController.CurrentOperation() != ECamCompleting )
+ {
+ if ( !appUi->IsSecondCameraEnabled() || appUi->IsQwerty2ndCamera() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT_SECONDARY );
+ }
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_BLANK );
+ }
+ }
+ else
+ {
+ // ensure cba is reset if we're not embedded
+ if ( !iWaitForImageSave )
+ {
+ if ( static_cast<CCamAppUiBase*>( AppUi() )->IsSecondCameraEnabled() &&
+ !static_cast<CCamAppUiBase*>( AppUi() )->IsQwerty2ndCamera() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK_TOGGLETOOLBAR_PORTRAIT );
+ }
+ else if ( ECamViewStateBurstThumbnail == appUi ->CurrentViewState() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK_TOGGLETOOLBAR_BURST );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK_TOGGLETOOLBAR );
+ }
+ }
+ else
+ {
+ // still image not yet saved
+ // disable Options softkey and cancel post capture timer
+ // softkey will be re-enabled when image has been saved
+ if(appUi->IsSecondCameraEnabled() && !appUi->IsQwerty2ndCamera())
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_BACK_SECONDARY );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_BACK );
+ }
+
+
+ // disable gallery button until image is processed
+ if( !iEmbedded )
+ {
+ // fixed toolbar is used only with touch devices
+ if ( iController.IsTouchScreenSupported() )
+ {
+ CAknToolbar* fixedToolbar = Toolbar();
+ if ( fixedToolbar )
+ {
+ fixedToolbar->SetItemDimmed( ECamCmdPhotos, ETrue, ETrue );
+ fixedToolbar->SetItemDimmed( ECamCmdDelete, ETrue, ETrue );
+ fixedToolbar->SetItemDimmed( ECamCmdOneClickUpload, ETrue, ETrue );
+ fixedToolbar->SetItemDimmed( ECamCmdSend, ETrue, ETrue );
+ }
+ }
+ }
+ }
+ }
+ // Register that we still want to use the engine (to receive final snap image)
+ IncrementCameraUsers();
+
+ iController.DeepSleepTimerStart();
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+
+ if ( appUi && !iSuppressAPUntilCameraReady )
+ {
+ if(!iPartialBackground)
+ {
+ appUi->RaisePostCaptureCourtesyUI();
+ }
+ }
+ else if ( iSuppressAPUntilCameraReady )
+ {
+ iSuppressAPUntilCameraReady = EFalse;
+ }
+ iPartialBackground = EFalse;
+
+ if ( iController.CameraSwitchQueued() )
+ {
+ appUi->HandleCommandL( ECamCmdSwitchCamera );
+ }
+ }
+ // -------------------------------------------------------
+ // Going to background
+ else
+ {
+ if( iController.IsAppUiAvailable() )
+ {
+ iPartialBackground = ( (appUi->AppInBackground(ETrue) ) && (!appUi->AppInBackground(EFalse) ) );
+ }
+ else
+ {
+ iPartialBackground = EFalse;
+ }
+ PRINT( _L("Camera <> CCamPostCaptureViewBase::HandleForegroundEventL: to background") )
+ iController.DeepSleepTimerCancel();
+ // Register that we nolonger need the engine.
+ // Checks if we incremented the count.
+ DecrementCameraUsers();
+ }
+ // -------------------------------------------------------
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::HandleForegroundEventL") )
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::DoActivateL
+// Activate this view
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ PRINT( _L( "Camera => CCamPostCaptureViewBase::DoActivateL" ) );
+
+ CCamAppUi* appui = static_cast<CCamAppUi*>( AppUi() );
+
+ CCamViewBase::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ // fixed toolbar is used only with touch devices
+ if ( iController.IsTouchScreenSupported() )
+ {
+ CAknToolbar* fixedToolbar = Toolbar();
+
+ if ( fixedToolbar )
+ {
+ if( iEmbedded )
+ {
+ fixedToolbar->SetToolbarVisibility( EFalse );
+ }
+ else
+ {
+ fixedToolbar->SetToolbarObserver( this );
+ fixedToolbar->SetToolbarVisibility( ETrue );
+ UpdateToolbarIconsL();
+ }
+ }
+ }
+
+
+ // show an empty pane
+ appui->PushDefaultNaviPaneL();
+
+ iController.AddControllerObserverL( this );
+
+ // if we're embedded use ROID(R_CAM_SOFTKEYS_SELECT_DELETE_ID)softkey labels
+ if ( iEmbedded )
+ {
+ //Do not show postcapture softkeys if we are still capturing or
+ //saving image
+ if ( iController.CurrentOperation() != ECamCapturing &&
+ iController.CurrentOperation() != ECamCompleting )
+ {
+ if ( !appui->IsSecondCameraEnabled() || appui->IsQwerty2ndCamera() )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT_SECONDARY );
+ }
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_BLANK );
+ }
+ }
+
+ iPreviousViewStillPreCapture = ( aPrevViewId.iViewUid.iUid == ECamViewIdStillPreCapture );
+
+ // set flag for still and timelapse post capture only
+ // also check if the file has already been saved (possible if, for
+ // example, MMC removal note is displayed
+ if ( iPreviousViewStillPreCapture && appui->CurrentBurstMode() != ECamImageCaptureBurst &&
+ !iController.SavedCurrentImage() )
+ {
+ PRINT( _L( "Camera <> CCamPostCaptureViewBase::DoActivateL .. set iWaitForImageSave true" ) );
+ iWaitForImageSave = ETrue;
+ }
+ else
+ {
+ PRINT( _L( "Camera <> CCamPostCaptureViewBase::DoActivateL .. set iWaitForImageSave false" ) );
+ iWaitForImageSave = EFalse;
+ if ( !iController.IsTouchScreenSupported() )
+ {
+ UpdateActivePaletteItemsL();
+ }
+ }
+
+ // Make sure appuis CBA is not visible
+ CEikButtonGroupContainer* cba = AppUi()->Cba();
+ if( cba )
+ {
+ cba->MakeVisible( EFalse );
+ }
+
+ PRINT( _L( "Camera <= CCamPostCaptureViewBase::DoActivateL" ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::DoDeactivate
+// Deactivate this view
+// ---------------------------------------------------------------------------
+//
+void
+CCamPostCaptureViewBase::DoDeactivate()
+ {
+ PRINT( _L( "Camera => CCamPostCaptureViewBase::DoDeactivate" ) );
+
+ CCamViewBase::DoDeactivate();
+
+ iController.RemoveControllerObserver( this );
+ PRINT( _L( "Camera <= CCamPostCaptureViewBase::DoDeactivate" ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::DynInitMenuPaneL
+// Called when the menu pane is displayed
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::DynInitMenuPaneL( TInt /*aResourceId*/,
+ CEikMenuPane* aMenuPane )
+ {
+ TInt itemPos = 0;
+
+ if( !iController.IsTouchScreenSupported() )
+ {
+ if( aMenuPane->MenuItemExists(ECamCmdProperties, itemPos) )
+ {
+ aMenuPane->SetItemDimmed( ECamCmdProperties, ETrue );
+ }
+ if( aMenuPane->MenuItemExists(ECamCmdAddToAlbum, itemPos) )
+ {
+ aMenuPane->SetItemDimmed( ECamCmdAddToAlbum, ETrue );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::CCamPostCaptureViewBase
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamPostCaptureViewBase::CCamPostCaptureViewBase( CCamAppController& aController )
+ : CCamViewBase( aController ),
+ iSendingCapabilities( KCamSendUiBodySize,
+ KCamSendUiMessageSize,
+ TSendingCapabilities::ESupportsAttachments )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::ConstructL
+// Symbian OS 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::ConstructL()
+ {
+
+ // create SendAs
+ iSendAppUi = CSendUi::NewL();
+
+ iSendMtmsToDim = new (ELeave) CArrayFixFlat<TUid>( KCamSendAsArrayGranularity );
+ iSendMtmsToDim->AppendL( KSenduiMtmIrUid );
+
+ iCollectionManagerCallBack = new (ELeave)
+ CCamCollectionManagerAO( *this );
+ iAddToAlbumRequestOngoing = EFalse;
+
+
+/*#ifndef __WINS__
+ // Initialize SFIutils
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ iSFIUtils = appUi->SFIUtility();
+#endif*/
+
+ iAiwServiceHandler = CAiwServiceHandler::NewL();
+
+ // In touch screen devices, hide toolbar initially to prevent it from
+ // being briefly visible in embedded mode
+ if ( iController.IsTouchScreenSupported() )
+ {
+ CAknToolbar* fixedToolbar = Toolbar();
+ if ( fixedToolbar )
+ {
+ fixedToolbar->SetToolbarVisibility( EFalse );
+ }
+ }
+
+ iOneClickUploadUtility = CCamOneClickUploadUtility::NewL();
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::CreateContainerL
+// Create container control
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::CreateContainerL()
+ {
+ TRect rect;
+
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+ TCamOrientation orientation = appUi->CamOrientation();
+
+ TRect screen;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen );
+
+ iContainer = CCamPostCaptureContainer::NewL( iController,
+ *this,
+ screen );
+
+ iContainer->SetMopParent( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::DoSendAsL
+// Use SendUI to create a message containing current image\video clip
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::DoSendAsL() const
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::DoSendAsL") )
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+
+ if( !appUi->SendAsInProgress() )
+ {
+ appUi->SetSendAsInProgressL( ETrue );
+ CMessageData* messageData = CMessageData::NewLC();
+ TRAP_IGNORE(
+ messageData->AppendAttachmentL( iController.CurrentFullFileName() );
+ iSendAppUi->ShowQueryAndSendL( messageData,iSendingCapabilities )
+ )
+ PRINT( _L("Camera <> CCamPostCaptureViewBase::DoSendAsL - finished sending") )
+ appUi->SetSendAsInProgressL( EFalse );
+ CleanupStack::PopAndDestroy( messageData );
+ }
+
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::DoSendAsL") )
+ }
+
+#ifndef __WINS__
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::DoInCallSendL
+// Handle send to caller functionality
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::DoInCallSendL() const
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::DoInCallSendL()") )
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+
+ if( !appUi->SendAsInProgress() )
+ {
+ appUi->SetSendAsInProgressL( ETrue );
+ CMessageData* messageData = CMessageData::NewLC();
+ TRAP_IGNORE(
+ messageData->AppendAttachmentL( iController.CurrentFullFileName() );
+ iSendAppUi->CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, ETrue )
+ )
+ PRINT( _L("Camera <> CCamPostCaptureViewBase::DoInCallSendL() - finished sending") )
+ appUi->SetSendAsInProgressL( EFalse );
+ CleanupStack::PopAndDestroy( messageData );
+ }
+
+ // SFIUtils replaced by using SendUI interface because
+ // it cannot handle > 600 kB images properly
+ /*if ( iSFIUtils && iSFIUtils->IsCLIValidL() )
+ {
+ iSFIUtils->SendMediaFileL( iController.CurrentFullFileName() );
+ }*/
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::DoInCallSendL()") )
+ }
+#endif
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::IsPostCapture
+// Returns whether the view is a postcapture view
+// ---------------------------------------------------------------------------
+//
+TBool CCamPostCaptureViewBase::IsPostCapture()
+ {
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::ResetSendAvailabilityL
+// Hides or shows the 'Send' and 'SendAs' items in the active toolbar
+ // ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::ResetSendAvailabilityL( CCamActivePaletteHandler* aApHandler )
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::ResetSendAvailabilityL") );
+ // Hide Send or Send to caller
+// TBool inCall = EFalse;
+/*#if !defined(__WINS__) && !defined(__WINSCW__)
+ inCall = iSFIUtils->IsCLIValidL();
+#endif */
+ if ( aApHandler )
+ {
+ //use both inCall and InCallOrRinging() conditions to make sure if it is in call state
+ aApHandler->SetItemVisible( ECamCmdSend, !( /*inCall &&*/ iController.InCallOrRinging() ) );
+ aApHandler->SetItemVisible( ECamCmdSendToCallerMultimedia, ( /*inCall &&*/ iController.InCallOrRinging() ) );
+
+ TBool uploadSupported = EFalse;
+ if ( iOneClickUploadUtility &&
+ iOneClickUploadUtility->OneClickUploadSupported() )
+ {
+ uploadSupported = ETrue;
+ }
+
+ aApHandler->SetItemVisible( ECamCmdOneClickUpload, uploadSupported );
+ }
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::ResetSendAvailabilityL ") );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::StartAddToAlbumOperationL
+//
+// Starts calls to PostCapIdleCallBack during processor idle time. The calls
+// are continued until PostCapIdleCallBack is done.
+//
+// ---------------------------------------------------------------------------
+void CCamPostCaptureViewBase::StartAddToAlbumOperationL()
+ {
+
+ //Currently we set multiple selection of albums
+ TBool allowMultipleSelection = ETrue;
+ RArray<TUint32> selectedAlbumIds;
+ CleanupClosePushL( selectedAlbumIds );
+ // Launching the Pop-up menu with the list of albums
+ TRAPD( err, TGlxCollectionSelectionPopup::ShowPopupL(
+ selectedAlbumIds,
+ KGlxCollectionTypeIdAlbum,
+ allowMultipleSelection,
+ ETrue ) );
+ /*
+ * Use Collection Manager to add the albums and
+ * before that check for the completion of the harvesting
+ */
+ if ( err == KErrNone && selectedAlbumIds.Count() > 0)
+ {
+ PRINT( _L("Camera => StartAddToAlbumOperationL: Before CCamCollectionManagerAO( *this ); ") );
+ PRINT( _L("Camera => StartAddToAlbumOperationL: After CCamCollectionManagerAO( *this ); and before calling StartCallBackAddToAlbumL()") );
+ if ( iCollectionManagerCallBack )
+ {
+ if ( !iAddToAlbumRequestOngoing )
+ {
+ // Checking if only one request is being processed
+ iAddToAlbumRequestOngoing = ETrue;
+ iCollectionManagerCallBack->StartCallBackAddToAlbumL(
+ selectedAlbumIds,
+ iController.CurrentFullFileName() );
+ }
+ }
+ PRINT( _L("Camera => StartAddToAlbumOperationL: After StartCallBackAddToAlbumL() ") );
+ }
+ CleanupStack::PopAndDestroy( &selectedAlbumIds );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::ShowAddToAlbumConfirmationQueryL
+//
+// Opens a radiobutton setting page with "Yes" or "No" options
+// to actually confirm if we want to add the photo/video
+// to the albums
+//
+// ---------------------------------------------------------------------------
+TInt CCamPostCaptureViewBase::ShowAddToAlbumConfirmationQueryL()
+ {
+ TInt selectedIndex = 1; // default selection is "No"
+ // Add to Album setting page "Items"
+ CDesCArrayFlat* items =
+ iCoeEnv->ReadDesC16ArrayResourceL(
+ R_CAM_ADDTOALBUM_SETTING_PAGE_LBX );
+ CleanupStack::PushL( items );
+
+ CAknRadioButtonSettingPage* dlg = new (ELeave)
+ CAknRadioButtonSettingPage
+ (
+ R_CAM_ADDTOALBUM_SETTING_PAGE,
+ selectedIndex,
+ items
+ );
+
+ dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+ CleanupStack::PopAndDestroy( items );
+ return selectedIndex;
+ }
+
+/*
+* CCamPostCaptureViewBase::AddToAlbumIdOperationComplete()
+*/
+void CCamPostCaptureViewBase::AddToAlbumIdOperationComplete()
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::AddToAlbumIdOperationComplete() ... SUCCESS ") );
+ iAddToAlbumRequestOngoing = EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::UpdateToolbarIconsL
+// Update fixed toolbar icons according to current call state
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::UpdateToolbarIconsL()
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::UpdateToolbarIconsL") );
+ // fixed toolbar is used only with touch devices
+ if ( iController.IsTouchScreenSupported() )
+ {
+ CAknToolbar* toolbar = Toolbar();
+ if ( toolbar )
+ {
+ CAknButton* button = dynamic_cast<CAknButton*>(
+ toolbar->ControlOrNull( ECamCmdSend ) );
+ if ( button )
+ {
+ CAknButtonState* state = button->State();
+ if ( state )
+ {
+ HBufC* tooltipText =
+ StringLoader::LoadLC( R_QTN_LCAM_TT_SEND );
+ state->SetHelpTextL( *tooltipText );
+ CleanupStack::PopAndDestroy( tooltipText );
+ }
+ }
+ button = dynamic_cast<CAknButton*>(
+ toolbar->ControlOrNull( ECamCmdOneClickUpload ) );
+ if ( button )
+ {
+ CAknButtonState* state = button->State();
+ if ( state )
+ {
+ state->SetHelpTextL(
+ iOneClickUploadUtility->ButtonTooltipL() );
+ }
+ }
+ }
+ }
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::UpdateToolbarIconsL") );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::OfferToolbarEventL
+// Handle fixed toolbar events
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::OfferToolbarEventL( TInt aCommand )
+ {
+ User::ResetInactivityTime();
+ HandleCommandL( aCommand );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureViewBase::UpdateActivePaletteItemsL
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureViewBase::UpdateActivePaletteItemsL()
+ {
+ PRINT( _L("Camera => CCamPostCaptureViewBase::UpdateActivePaletteItemsL ") );
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ TInt resId = 0;
+ if ( appUi )
+ {
+ TCamOrientation orientation = appUi->CamOrientation();
+ CCamActivePaletteHandler* apHandler = appUi->APHandler();
+ if( apHandler && !iEmbedded && ( orientation == ECamOrientationCamcorder ||
+ orientation == ECamOrientationCamcorderLeft ||
+ orientation == ECamOrientationDefault ||
+ orientation == ECamOrientationPortrait ) )
+ {
+ iContainer->CreateActivePaletteL();
+ MActivePalette2UI* activePalette =
+ appUi->APHandler()->ActivePalette();
+
+ if( activePalette )
+ {
+ activePalette->SetGc();
+ }
+ // Install PostCapture AP items
+ if ( ECamControllerImage == iController.CurrentMode() ||
+ iPreviousViewStillPreCapture )
+ {
+ PRINT( _L("Camera => ECamControllerImage == iController.CurrentMode() ") );
+ if ( appUi->IsSecondCameraEnabled() )
+ {
+ resId = R_CAM_STILL_POST_CAPTURE_AP_ITEMS_SECONDARY;
+ }
+ else
+ {
+ resId = R_CAM_STILL_POST_CAPTURE_AP_ITEMS;
+ }
+ }
+ else
+ {
+ PRINT( _L("Camera => resId = R_CAM_VIDEO_POST_CAPTURE_AP_ITEMS; ") );
+ if ( appUi->IsSecondCameraEnabled() )
+ {
+ resId = R_CAM_VIDEO_POST_CAPTURE_AP_ITEMS_SECONDARY;
+ }
+ else
+ {
+ resId = R_CAM_VIDEO_POST_CAPTURE_AP_ITEMS;
+ }
+ }
+
+ if ( iOneClickUploadUtility &&
+ iOneClickUploadUtility->OneClickUploadSupported() )
+ {
+ apHandler->SetOneClickUploadTooltipL(
+ iOneClickUploadUtility->ButtonTooltipL() );
+ }
+
+ apHandler->InstallAPItemsL( resId );
+ // Hide Send or Send to caller
+ ResetSendAvailabilityL( apHandler );
+ apHandler->SetView( this );
+
+ // Make AP visible.
+ appUi->SetAlwaysDrawPostCaptureCourtesyUI( ETrue );
+
+ // if coming from background, in video as target mode
+ if ( iController.CurrentMode() != iController.TargetMode() &&
+ ( ECamControllerVideo == iController.TargetMode() ) )
+ {
+ apHandler->SetVisibility( EFalse );
+ iSuppressAPUntilCameraReady = ETrue;
+ }
+ }
+ }
+ PRINT( _L("Camera <= CCamPostCaptureViewBase::UpdateActivePaletteItemsL ") );
+ }
+
+// End of File