camerauis/cameraapp/generic/src/CamPostCaptureViewBase.cpp
changeset 0 1ddebce53859
child 1 f5ec9446e5bf
--- /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