diff -r 000000000000 -r 1ddebce53859 camerauis/cameraapp/generic/src/CamPostCaptureViewBase.cpp --- /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 +#include +#include +#ifndef __WINS__ +// #include +#endif +#include +#include +#include +#include +#include +#include +#include // CAknTitlePane +#include +#include "MCamAddToAlbumObserver.h" +#include "CamCollectionManagerAo.h" +#include +#include +#include +#include +#include + + +#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( 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 + ( 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( sp->ControlL( + TUid::Uid( EEikStatusPaneUidTitle ) ) ); + title->SetTextL( KNullDesC ); + sp->MakeVisible( ETrue ); + title->MakeVisible( ETrue ); + iContainer->SetRect( AppUi()->ClientRect() ); + GlxMetadataViewUtility::ActivateViewL( iController.CurrentFullFileName() ); + static_cast(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( 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(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( 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( AppUi() ); + // ------------------------------------------------------- + // Coming to foreground + if ( aForeground) + { + PRINT( _L("Camera <> CCamPostCaptureViewBase::HandleForegroundEventL: to foreground") ) + if ( static_cast( 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( AppUi() )->IsSecondCameraEnabled() && + !static_cast( 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( 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( 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( KCamSendAsArrayGranularity ); + iSendMtmsToDim->AppendL( KSenduiMtmIrUid ); + + iCollectionManagerCallBack = new (ELeave) + CCamCollectionManagerAO( *this ); + iAddToAlbumRequestOngoing = EFalse; + + +/*#ifndef __WINS__ + // Initialize SFIutils + CCamAppUi* appUi = static_cast( 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( 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( 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( 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 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( + 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( + 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( 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