--- a/emailuis/emailui/src/FreestyleEmailUiMailViewerVisualiser.cpp Mon Mar 15 12:39:10 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5211 +0,0 @@
-/*
-* Copyright (c) 2007 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 : FreestyleEmailUi list implementation
-*
-*/
-
-
-
-// SYSTEM INCLUDES
-#include "emailtrace.h"
-#include <AknUtils.h>
-#include <freestyleemailui.mbg>
-#include <FreestyleEmailUi.rsg>
-#include <StringLoader.h>
-#include <AknBidiTextUtils.h>
-
-#ifndef FF_CMAIL_INTEGRATION
-#include <txtclipboard.h>
-#endif // FF_CMAIL_INTEGRATION
-
-//<cmail>
-#include "fstextviewer.h"
-#include "fsrichtext.h"
-///</cmail>
-#include <aknlistquerydialog.h>
-//<cmail>
-#include "fssmileydictionary.h"
-///</cmail>
-#include <commonphoneparser.h>
-#include <browserlauncher.h>
-//<cmail>
-#include "cfsmailmessagepart.h"
-#include "cfsmailclient.h"
-//</cmail>
-#include <apgcli.h>
-//<cmail>
-#include "cfsmailcommon.h"
-//</cmail>
-#include <featmgr.h>
-//</cmail>
-
-#include <txtfrmat.h>
-#include <aknlists.h> // CAknSinglePopupMenuStyleListBox
-#include <baclipb.h> // for clipboard copy
-//<cmail>
-#include "fstextviewerkeys.h"
-#include "fstextviewerwatermark.h"
-#include <alf/alfstatic.h>
-#include <alf/alfroster.h>
-#include <alf/alfevent.h>
-#include <alf/alfcontrolgroup.h>
-// </cmail>
-//<cmail>
-#include "AknWaitDialog.h"
-//</cmail>
-#include <finditemengine.h>
-#include <AknGlobalListQuery.h>
-#include <AknGlobalNote.h>
-
-// Meeting request
-#include <MeetingRequestUids.hrh>
-//<cmail>
-#include "cesmricalviewer.h"
-//</cmail>
-
-// for intranet application opening
-#include <AiwServiceHandler.h>
-#include <AiwMenu.h>
-
-// for opening normal browser
-#include <browseroverriddensettings.h>
-#include <browserlauncher.h>
-
-// for bookmarks
-#include <favouriteslimits.h> // KBrowserBookmarks
-#include <favouritesdb.h>
-
-// for fonts
-#include <AknFontAccess.h>
-#include <AknLayoutFont.h>
-
-// for action menu
-#include <CPbkContactEngine.h>
-#include <CPbkContactItem.h>
-#include <CPbkContactEditorDlg.h>
-#include <RPbkViewResourceFile.h>
-#include <CPbkDataSaveAppUi.h>
-#include <PbkDataSaveAppUi.hrh>
-#include <CPbkFieldsInfo.h>
-
-// <cmail>
-#include "cfsccontactactionmenu.h"
-#include "mfsccontactactionmenumodel.h"
-#include "cfsccontactactionservice.h"
-#include "cfsccontactactionmenuitem.h"
-#include "fsccontactactionmenuuids.hrh"
-#include "fsccontactactionmenudefines.h"
-// </cmail>
-
-// <cmail>
-#include "cfsccontactactionservice.h"
-#include <csxhelp/cmail.hlp.hrh>
-// </cmail>
-#include <aknnotewrappers.h>
-
-#include <schemehandler.h> // CSchemeHandler
-
-// <cmail>
-#include "FreestyleEmailUiConstants.h"
-//</cmail>
-// INTERNAL INCLUDES
-#include "FreestyleEmailUiAppui.h"
-#include "FreestyleEmailUiMailViewerControl.h"
-#include "FreestyleEmailUiMailListVisualiser.h"
-#include "FreestyleEmailUiFileSystemInfo.h"
-#include "FreestyleEmailUi.hrh"
-#include "freestyleemailcenrephandler.h"
-#include "FreestyleEmailUiLayoutHandler.h"
-#include "FreestyleEmailUiTextureManager.h"
-#include "FreestyleEmailUiMsgDetailsVisualiser.h"
-#include "FreestyleEmailUiFolderListVisualiser.h"
-#include "FreestyleEmailUiAttachmentsListVisualiser.h"
-#include "FreestyleEmailUiShortcutBinding.h"
-#include "FreestyleEmailUiContactHandler.h"
-#include "FreestyleEmailUiUtilities.h"
-#include "FreestyleEmailUiStatusIndicator.h"
-#include "FSEmail.pan"
-#include "FSDelayedLoader.h"
-
-#include "FreestyleEmailUiMailViewerVisualiser.h"
-#include "FreestyleEmailUiMailViewerRichText.h"
-#include "FreestyleEmailUiMailViewerConstants.h"
-
-#include <aknnavi.h>
-#include <aknnavide.h>
-#include <akntoolbar.h>
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::NewL
-// -----------------------------------------------------------------------------
-CFSEmailUiMailViewerVisualiser* CFSEmailUiMailViewerVisualiser::NewL( CAlfEnv& aEnv, CFreestyleEmailUiAppUi& aAppUi, CAlfControlGroup& aMailViewerControlGroup )
- {
- FUNC_LOG;
- CFSEmailUiMailViewerVisualiser* self = CFSEmailUiMailViewerVisualiser::NewLC( aEnv, aAppUi, aMailViewerControlGroup );
- CleanupStack::Pop(self);
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::NewLC
-// -----------------------------------------------------------------------------
-CFSEmailUiMailViewerVisualiser* CFSEmailUiMailViewerVisualiser::NewLC( CAlfEnv& aEnv, CFreestyleEmailUiAppUi& aAppUi, CAlfControlGroup& aMailViewerControlGroup )
- {
- FUNC_LOG;
- CFSEmailUiMailViewerVisualiser* self = new (ELeave) CFSEmailUiMailViewerVisualiser( aEnv, aAppUi, aMailViewerControlGroup );
- CleanupStack::PushL( self );
- self->ConstructL();
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ConstructL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ConstructL()
- {
- FUNC_LOG;
- BaseConstructL( R_FSEMAILUI_MAIL_VIEWER_VIEW );
- iMessage = NULL;
- iNextOrPevMessageSelected = EFalse;
- iFirstStartCompleted = EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::DoFirstStartL()
-// Purpose of this function is to do first start only when viewer is
-// really needed to be shown. Implemented to make app start up faster.
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::DoFirstStartL()
- {
- FUNC_LOG;
- iOpenMessages = new (ELeave) CStack<CFSMailMessage, ETrue>();
- iEmbeddedMessages = new (ELeave) CStack<CFSMailMessage, EFalse>();
- iSmDictionary = CFsSmileyDictionary::NewL();
- iIBServiceHandler = CAiwServiceHandler::NewL();
- iIBServiceHandler->AttachMenuL( R_FSEMAILUI_MAILVIEWER_SUBMENU_ACTIONS, R_INTRANET_AIW_INTEREST_MENU );
- iIBServiceHandler->AttachL( R_INTRANET_AIW_INTEREST_BASE );
-
- // Initialize browser laucher api
- iFetchingAnimationTimer = CFSEmailUiGenericTimer::NewL( this );
- iAsyncCallback = new (ELeave) CAsyncCallBack( CActive::EPriorityLow );
- iDownloadProgressControlGroup = &iEnv.NewControlGroupL( KDownloadIndicatorControlGroup );
- iDownloadProgressIndicator = CFSEmailUiStatusIndicator::NewL( iEnv, *iDownloadProgressControlGroup,
- &iAppUi );
-
- iViewerRichText = CFSEmailUiMailViewerRichText::NewL( iAppUi );
-
- //here is set menu for msk
- MenuBar()->SetContextMenuTitleResourceId( R_FSEMAILUI_MAILVIEWER_MSK_MENUBAR );
-
- iFirstStartCompleted = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CFSEmailUiMailViewerVisualiser
-// -----------------------------------------------------------------------------
-CFSEmailUiMailViewerVisualiser::CFSEmailUiMailViewerVisualiser( CAlfEnv& aEnv,
- CFreestyleEmailUiAppUi& aAppUi, CAlfControlGroup& aMailViewerControlGroup )
- : CFsEmailUiViewBase( aMailViewerControlGroup, aAppUi ),
- iMoveToFolderOngoing( EFalse ),
- iFetchingMessageStructure( EFalse ),
- iFetchingPlainTextMessageBody( EFalse ),
- iFetchingHtmlMessageBody( EFalse ),
- iAsyncProcessComplete( ETrue ),
- iEnv( aEnv )
- {
- FUNC_LOG;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::~CFSEmailUiMailViewerVisualiser
-// -----------------------------------------------------------------------------
-CFSEmailUiMailViewerVisualiser::~CFSEmailUiMailViewerVisualiser()
- {
- FUNC_LOG;
- //<cmail> notewrapper is replaced by iWaitDialog
- //delete iAsyncWaitNote;
- //</cmail>
- if( iIBServiceHandler )
- {
- iIBServiceHandler->Reset();
- delete iIBServiceHandler;
- }
-
- if ( iAsyncCallback )
- {
- iAsyncCallback->Cancel();
- delete iAsyncCallback;
- }
-
- iDownloadProgressControlGroup = NULL; // owned by AlfEnv
- }
-
-void CFSEmailUiMailViewerVisualiser::PrepareForExit()
- {
- FUNC_LOG;
- delete iSmDictionary;
- iSmDictionary = NULL;
- delete iNewMailTempAddress;
- iNewMailTempAddress = NULL;
-
- // Text viewer control need to be removed control group and deleted here,
- // because akn physics (used by text viewer control) object's destructor
- // ends up calling CoeEnv->AppUi, so AppUi must be alive when deleting
- // text viewer control
- if ( iTextViewerControl )
- {
- ControlGroup().Remove( iTextViewerControl );
- }
-
- delete iTextViewer;
- iTextViewer = NULL;
-
- delete iTextViewerControl;
- iTextViewerControl = NULL;
-
- delete iViewerRichText;
- iViewerRichText = NULL;
-
- if ( iFlagSelectionHanler )
- {
- iFlagSelectionHanler->Cancel();
- delete iFlagSelectionHanler;
- iFlagSelectionHanler = NULL;
- }
- if ( iFetchingAnimationTimer )
- {
- iFetchingAnimationTimer->Stop();
- delete iFetchingAnimationTimer;
- iFetchingAnimationTimer = NULL;
- }
- if ( iAppUi.DownloadInfoMediator() && iMessage )
- {
- iAppUi.DownloadInfoMediator()->StopObserving( this, iMessage->GetMessageId() );
- }
-
- delete iOpenMessages;
- iOpenMessages = NULL;
- delete iEmbeddedMessages;
- iEmbeddedMessages = NULL;
- iMessage = NULL;
-
- delete iMailBox;
- iMailBox = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleForegroundEventL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleForegroundEventL()
- {
- FUNC_LOG;
- if ( iFirstStartCompleted ) //Safety
- {
- // Resize the download indicator after returning from the screensaver
- iDownloadProgressIndicator->HandleForegroundEventL();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::RequestResponseL
-// for MFSEmailDownloadInformationObserver callback
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::RequestResponseL( const TFSProgress& aEvent, const TPartData& /*aPart*/ )
- {
- FUNC_LOG;
- if ( iFirstStartCompleted && iAppUi.CurrentActiveView() == this )
- {
- UpdateDownloadIndicatorL( aEvent.iProgressStatus );
-
- // <cmail> Action menu is dismissed if it's opened on an attachment
- // and the download has completed (to prevent canceling after completion).
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
-
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if( aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete &&
- hotspotType == EHeaderHotspot &&
- (currentHeaderHotSpotData.iType == ETypeAttachment ||
- currentHeaderHotSpotData.iType == ETypeAttachments) )
- {
- CFSEmailUiActionMenu::Dismiss( ETrue );
-
- // close actions menu if open
- CEikMenuBar* menu = MenuBar();
-
- if( menu->IsDisplayed() )
- {
- menu->MenuPane()->CloseCascadeMenu();
- }
- }
- // </cmail>
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::RequestResponseL
-// for MFSMailRequestObserver callback
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::RequestResponseL( TFSProgress aEvent, TInt aRequestId )
- {
- FUNC_LOG;
- if ( iFirstStartCompleted ) // Safety
- {
- if ( aRequestId == iCurrentPlainTextBodyFetchRequestId && iFetchingPlainTextMessageBody )
- {
- if ( aEvent.iError != KErrNone ||
- aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestCancelled )
- {
- iAsyncProcessComplete = ETrue;
- iFetchingPlainTextMessageBody = EFalse;
- iFetchingAnimationTimer->Stop();
-
- // Clear the "fetching body" text from the end of the message
- iViewerRichText->SetEmptyStatusLayoutTextL();
- }
- else if ( aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
- {
- iAsyncProcessComplete = ETrue;
- iFetchingPlainTextMessageBody = EFalse;
- iFetchingAnimationTimer->Stop();
-
- // get message again, there might be new information (in case of POP protocol)
- TFSMailMsgId mailboxId = iMessage->GetMailBoxId();
- TFSMailMsgId folderId = iMessage->GetFolderId();
- TFSMailMsgId messageId = iMessage->GetMessageId();
- UpdateMessagePtrL( mailboxId, folderId, messageId );
-
- // Refresh viewer to show newly fetched content.
- // Prevent screen flickering by stopping automatic screen refresh during the update
- iEnv.SetRefreshMode( EAlfRefreshModeManual );
- // Make sure we don't leave and forget the refresh mode as manual.
- TRAP_IGNORE(
- // Try to preserve the scroll position on the same line.
- iAppUi.Display().Roster().Hide( ControlGroup() );
- TInt firstLine = iTextViewer->GetFirstDisplayedLine();
- RefreshL();
- iTextViewer->FocusLineL( firstLine, ETrue );
- iAppUi.Display().Roster().ShowL( ControlGroup() );
- );
- iEnv.SetRefreshMode( EAlfRefreshModeAutomatic );
- }
- }
-
- else if ( aRequestId == iCurrentHtmlBodyFetchRequestId && iFetchingHtmlMessageBody )
- {
- if ( aEvent.iError != KErrNone ||
- aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestCancelled )
- {
- iAsyncProcessComplete = ETrue;
- iFetchingHtmlMessageBody = EFalse;
- }
- else if ( aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
- {
- iAsyncProcessComplete = ETrue;
- iFetchingHtmlMessageBody = EFalse;
- LaunchHtmlViewerL();
- }
- }
- else if ( aRequestId == iCurrentStructureFetchRequestId && iFetchingMessageStructure )
- {
- if ( aEvent.iError != KErrNone ||
- aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestCancelled )
- {
- iAsyncProcessComplete = ETrue;
- iFetchingMessageStructure = EFalse;
- }
- else if ( aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
- {
- iAsyncProcessComplete = ETrue;
- iFetchingMessageStructure = EFalse;
-
- // get message again, there might be new information
- TFSMailMsgId mailboxId = iMessage->GetMailBoxId();
- TFSMailMsgId folderId = iMessage->GetFolderId();
- TFSMailMsgId messageId = iMessage->GetMessageId();
-
- UpdateMessagePtrL( mailboxId, folderId, messageId );
- if ( iMessage )
- {
- // Stop automatic screen refresh temporarily to prevent flickering
- iEnv.SetRefreshMode( EAlfRefreshModeManual );
- // we must not leave before the update mode has been restored
- TRAP_IGNORE(
- iAppUi.Display().Roster().Hide( ControlGroup() );
- RefreshL( ETrue );
- iAppUi.Display().Roster().ShowL( ControlGroup() );
- );
- iEnv.SetRefreshMode( EAlfRefreshModeAutomatic );
- }
- }
- }
- }
- //<cmail>
- if(iAsyncProcessComplete && iWaitDialog && iDialogNotDismissed)
- iWaitDialog->ProcessFinishedL(); // deletes the dialog
- //</cmail>
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::FolderSelectedL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::FolderSelectedL(
- TFSMailMsgId aSelectedFolderId, TFSEmailUiCtrlBarResponse aResponse )
- {
- FUNC_LOG;
-
- if ( iMoveToFolderOngoing )
- {
- iMoveToFolderOngoing = EFalse;
- if ( !iMovingMeetingRequest )
- {
- switch ( aResponse )
- {
- case EFSEmailUiCtrlBarResponseSelect:
- {
- iMoveDestinationFolder = aSelectedFolderId;
- iAsyncCallback->Cancel(); // cancel any outstanding callback just to be safe
- iAsyncCallback->Set( TCallBack( MoveToFolderAndExitL, this ) );
- iAsyncCallback->CallBack();
- }
- break;
- case EFSEmailUiCtrlBarResponseCancel:
- default:
- break;
- }
- }
- else
- {
- iMovingMeetingRequest = EFalse;
- switch ( aResponse )
- {
- case EFSEmailUiCtrlBarResponseCancel:
- iOpResult.iResultCode = KErrCancel;
- break;
- case EFSEmailUiCtrlBarResponseSelect:
- {
- // Do moving here, do not exit, because mrui exists itself.
- iOpResult.iResultCode = KErrNone;
- iMoveDestinationFolder = aSelectedFolderId;
- RArray<TFSMailMsgId> messageIds;
- CleanupClosePushL( messageIds );
- messageIds.Append( iMessage->GetMessageId() );
- // Trap is needed because protocol might return KErrNotSupported
- // if move away from current folder is not supprted
- TRAPD(errMove, iAppUi.GetActiveMailbox()->MoveMessagesL( messageIds,
- iMessage->GetFolderId(), iMoveDestinationFolder ));
- if ( errMove != KErrNotSupported )
- {
- if ( errMove == KErrNone )
- {
- TFsEmailUiUtility::DisplayMsgsMovedNoteL( 1, iMoveDestinationFolder, ETrue );
- }
- else
- {
- User::Leave( errMove );
- }
- }
- CleanupStack::PopAndDestroy( &messageIds );
- }
- break;
- default:
- break;
- }
- }
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// From MFSEmailUiContactHandlerObserver
-// The ownership of the CLS items in the contacts array is transferred to the
-// observer, and they must be deleted by the observer.
-// ---------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::OperationCompleteL(
- TContactHandlerCmd /*aCmd*/, const RPointerArray<CFSEmailUiClsItem>& /*aContacts*/ )
- {
- FUNC_LOG;
- }
-
-// ---------------------------------------------------------------------------
-// From MFSEmailUiContactHandlerObserver
-// Handles error in contatct handler operation.
-// ---------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::OperationErrorL(
- TContactHandlerCmd /*aCmd*/, TInt /*aError*/ )
- {
- FUNC_LOG;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::MoveToFolderAndExitL
-// -----------------------------------------------------------------------------
-TInt CFSEmailUiMailViewerVisualiser::MoveToFolderAndExitL( TAny* aMailViewerVisualiser )
- {
- FUNC_LOG;
- CFSEmailUiMailViewerVisualiser* self =
- static_cast<CFSEmailUiMailViewerVisualiser*>(aMailViewerVisualiser);
-
- RArray<TFSMailMsgId> messageIds;
- CleanupClosePushL( messageIds );
- messageIds.Append( self->iMessage->GetMessageId() );
-
- // Trap is needed because protocol might return KErrNotSupported
- // if move away from current folder is not supprted
- TRAPD(errMove, self->iAppUi.GetActiveMailbox()->MoveMessagesL( messageIds,
- self->iMessage->GetFolderId(),
- self->iMoveDestinationFolder ) );
- if ( errMove != KErrNotSupported )
- {
- if ( errMove == KErrNone )
- {
- // move successfull, display note
- TFsEmailUiUtility::DisplayMsgsMovedNoteL( 1, self->iMoveDestinationFolder, ETrue );
- }
- else
- {
- // Leave with any other err code than KErrNone or KErrNotSupported.
- User::Leave( errMove );
- }
- }
- CleanupStack::PopAndDestroy( &messageIds );
-
- // return to previous view
- self->HandleCommandL( EAknSoftkeyBack );
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OpenFolderListForMessageMovingL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::OpenFolderListForMessageMovingL()
- {
- FUNC_LOG;
- TBool ret = EFalse;
- // Ignore if mailbox doesn't support moving or we are viewing embedded message
- if ( iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaMoveToFolder ) &&
- !iEmbeddedMessageMode )
- {
- // Activate folder selection view and handle moving after callback gets destination
- iMoveToFolderOngoing = ETrue;
- TFolderListActivationData folderListData;
- folderListData.iCallback = this;
- CFSMailFolder* folder = iAppUi.GetMailClient()->GetFolderByUidL( iMessage->GetMailBoxId(), iMessage->GetFolderId() );
- folderListData.iSourceFolderType = TFSFolderType( folder->GetFolderType() );
- delete folder;
- const TPckgBuf<TFolderListActivationData> pkgOut( folderListData );
- iAppUi.EnterFsEmailViewL( FolderListId, KFolderListMoveMessage, pkgOut );
- ret = ETrue;
- }
- return ret;
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ViewerControl
-// -----------------------------------------------------------------------------
-CAlfControl* CFSEmailUiMailViewerVisualiser::ViewerControl()
- {
- FUNC_LOG;
- return iTextViewerControl;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::Id
-// -----------------------------------------------------------------------------
-TUid CFSEmailUiMailViewerVisualiser::Id() const
- {
- FUNC_LOG;
- return MailViewerId;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ChildDoActivateL
-// -----------------------------------------------------------------------------
-// <cmail> Toolbar
-/*void CFSEmailUiMailViewerVisualiser::DoActivateL(
- const TVwsViewId& aPrevViewId,
- TUid aCustomMessageId,
- const TDesC8& aCustomMessage )*/
-// </cmail> Toolbar
-void CFSEmailUiMailViewerVisualiser::ChildDoActivateL(
- const TVwsViewId& aPrevViewId,
- TUid aCustomMessageId,
- const TDesC8& aCustomMessage )
- {
- FUNC_LOG;
-
- // Read the activation parameters
- TMsgViewerActivationData activationData;
- if ( &aCustomMessage && aCustomMessage.Length() )
- {
- TPckgBuf<TMsgViewerActivationData> pkgBuf;
- pkgBuf.Copy( aCustomMessage );
- activationData = pkgBuf();
- }
-
- // Take ownership of the passed message pointer. No pointer should be passed
- // in other than embedded message cases.
- // No leaving functions may be called before this step.
- if ( aCustomMessageId != KStartViewerWithEmbeddedMsgPtr && activationData.iEmbeddedMessage )
- {
- delete activationData.iEmbeddedMessage;
- activationData.iEmbeddedMessage = NULL;
- __ASSERT_DEBUG( EFalse, Panic(EFSEmailUiUnexpectedValue) );
- }
-
- CleanupStack::PushL( activationData.iEmbeddedMessage );
-
- if ( !iFirstStartCompleted )
- {
- DoFirstStartL();
- }
- if ( aCustomMessageId == KStartViewerWithEmbeddedMsgPtr )
- {
- PushMessageL( activationData.iEmbeddedMessage, ETrue );
- }
- CleanupStack::Pop( activationData.iEmbeddedMessage ); // ownership transferred
-
- // Clear MSK to prevent unintentional presses before viewer is fully constructed
- ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
-
- // If returning from view launched by MRUI, just complete the ongoing async process.
- // This will cause MRUI to be reopened and no other activation actions are needed.
- if ( iMrObserverToInform && aCustomMessageId == KStartViewerReturnToPreviousMsg )
- {
- CompletePendingMrCommand();
- }
- // Otherwise go on with the standard view activation
- else
- {
- // Cancel any pending asynchronous MR operation. There may be one at least if we
- // have navigated from MRUI to Donwload manager and from there to another message
- // or if external view activation happens while MRUI is open.
- CancelPendingMrCommandL();
-
- // Get message object unless returning to previously shown message.
- // In KStartViewerReturnToPreviousMsg the UI assumes that iMessage is alive.
- if ( aCustomMessageId == KStartViewerWithMsgId )
- {
- // Inform base view if view has been forward navigated to get correct back
- // navigation functionality in case of external activation.
- ViewEntered( aPrevViewId );
- UpdateMessagePtrL( activationData.iMailBoxId, activationData.iFolderId, activationData.iMessageId );
- }
- else if ( aCustomMessageId == KStartViewerWithEmbeddedMsgPtr ||
- aCustomMessageId == KStartViewerReturnFromEmbeddedMsg )
- {
- if ( !iOpenMessages || iOpenMessages->IsEmpty() )
- {
- User::Leave( KErrNotFound );
- }
- UpdateMessagePtr( iOpenMessages->Head() );
- }
-
- // Regardless of the activation mode, we should now have a valid message pointer.
- // Otherwise we cannot go on.
- User::LeaveIfNull( iMessage );
-
- iEmbeddedMessageMode = (iEmbeddedMessages->Head() != NULL);
-
- // Update mailbox unless returning to previously open message
- if ( aCustomMessageId != KStartViewerReturnToPreviousMsg )
- {
- delete iMailBox; iMailBox = NULL;
- iMailBox = iAppUi.GetMailClient()->GetMailBoxByUidL( iMessage->GetMailBoxId() );
-
- // Change active mailbox if necessary
- if ( !iMessage->GetMailBoxId().IsNullId() )
- {
- iAppUi.SetActiveMailboxL( iMessage->GetMailBoxId(), EFalse );
- }
- }
-
- // Check if MSG should be shown in the Meeting Request viewer
- TBool msgSentToMrUi( EFalse );
- if ( iMessage->IsFlagSet( EFSMsgFlag_CalendarMsg ) &&
- iAppUi.MrViewerInstanceL() &&
- !iEmbeddedMessageMode )
- {
- // Resolve meeting requst method
- TESMRMeetingRequestMethod mrMethod( EESMRMeetingRequestMethodUnknown );
- mrMethod = iAppUi.MrViewerInstanceL()->ResolveMeetingRequestMethodL( *iMessage );
- if ( mrMethod == EESMRMeetingRequestMethodRequest || // Request is shown in mrui
- mrMethod == EESMRMeetingRequestMethodCancellation || // Cancellation is shown in mrui
- mrMethod == EESMRMeetingRequestMethodUnknown ) // Unknown MR needs to be to resolved in MRUI (Usually IMAP)
- {
- // Setting MSK empty. This blocks unwanted MSK keypresses before MrViewer is initialized.
- ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
-
- msgSentToMrUi = ETrue;
- ClearMailViewer(); // clear prev message to avoid it becoming visible before MRUI opens
- iMrUiActive = ETrue;
- // Same navi pane shown in MR viewer
- UpdateNaviPaneL( ETrue );
- SetMailboxNameToStatusPaneL();
- iAppUi.MrViewerInstanceL()->ExecuteViewL( *iMessage, *this );
- }
- }
-
- // MSG is not sent to MRUI, display in internal mail viewer
- // Message is either normal email message or response to meeting request
- if ( !msgSentToMrUi )
- {
- iMrUiActive = EFalse;
-
- // Update the viewer if new message has been opened or layout has changed while we were in some other view
- TBool changeMsg = (aCustomMessageId != KStartViewerReturnToPreviousMsg);
- if ( changeMsg || iLayoutChangedWhileNotActive )
- {
- RefreshL( changeMsg );
- }
- else // update MSK anyway as the attachment status may have changed
- {
- iShowMskDownloadOption = ShowMskDownloadOptionL();
- SetMskL();
- }
-
- SetMailboxNameToStatusPaneL();
-
- // Update navipane content
- UpdateNaviPaneL();
- }
-
- // Set email indicator off.. user has checked the new emails
- TFsEmailUiUtility::ToggleEmailIconL( EFalse, activationData.iMailBoxId );
- }
-
- iNextOrPevMessageSelected = EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OfferToolbarEventL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::OfferToolbarEventL( TInt aCommand )
- {
- FUNC_LOG;
- switch (aCommand)
- {
- case EFsEmailUiTbCmdReply:
- {
- HandleCommandL(EFsEmailUiCmdActionsReply);
- break;
- }
-
- case EFsEmailUiTbCmdForward:
- {
- HandleCommandL(EFsEmailUiCmdActionsForward);
- break;
- }
- case EFsEmailUiTbCmdDelete:
- {
- HandleCommandL(EFsEmailUiCmdActionsDelete);
- break;
- }
- case EFsEmailUiTbCmdReplyAll:
- {
- HandleCommandL(EFsEmailUiCmdActionsReplyAll);
- break;
- }
- default:
- break;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ToolbarResourceId
-// -----------------------------------------------------------------------------
-TInt CFSEmailUiMailViewerVisualiser::ToolbarResourceId() const
- {
- return R_FREESTYLE_EMAIL_UI_TOOLBAR_MESSAGE_VIEWER;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ChildDoDeactivate
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ChildDoDeactivate()
- {
- FUNC_LOG;
- CancelFetchings();
- if ( iFetchingAnimationTimer )
- {
- iFetchingAnimationTimer->Stop();
- }
- if ( iDownloadProgressIndicator )
- {
- iDownloadProgressIndicator->HideIndicator();
- }
-
- // Hide this view's navipane
- HideNaviPane();
-
- // set view itself as toolbar observer again (e.g. MRGUI could have been changed it)
- Toolbar()->SetToolbarObserver( this );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HideNaviPane
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HideNaviPane()
- {
- FUNC_LOG;
- CAknNavigationControlContainer* naviPaneContainer = NULL;
- TRAP_IGNORE( naviPaneContainer = static_cast<CAknNavigationControlContainer*>( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
- TRAP_IGNORE( naviPaneContainer->PushDefaultL() );
-
- CCustomStatuspaneIndicators* indicators = iAppUi.GetStatusPaneIndicatorContainer();
- if ( indicators)
- {
- indicators->HideStatusPaneIndicators();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ActivateControlGroup
-// Overriden to make any running download progress bar visible after
-// control group has been swithced
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ActivateControlGroup( TInt aDelay /*= 0*/ )
- {
- CFsEmailUiViewBase::ActivateControlGroup( aDelay );
- TRAP_IGNORE( UpdateDownloadIndicatorL() );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleMrCommandL
-// Handle accept/decline/tentative/remove commands given for meeting request
-// message directly from list UI.
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleMrCommandL(
- TInt aCommandId,
- TFSMailMsgId aMailboxId,
- TFSMailMsgId aFolderId,
- TFSMailMsgId aMessageId )
- {
- FUNC_LOG;
-
- // All items should be run
- if ( !iFirstStartCompleted )
- {
- DoFirstStartL();
- }
-
- UpdateMessagePtrL( aMailboxId, aFolderId, aMessageId );
-
- if ( aCommandId == EFsEmailUiCmdCalRemoveFromCalendar )
- {
- iAppUi.MrViewerInstanceL()->RemoveMeetingRequestFromCalendarL(
- *iMessage, *this );
- }
- else
- {
- TESMRAttendeeStatus respondStatus;
- if ( aCommandId == EFsEmailUiCmdCalActionsAccept )
- {
- respondStatus = EESMRAttendeeStatusAccept;
- }
- else if ( aCommandId == EFsEmailUiCmdCalActionsTentative )
- {
- respondStatus = EESMRAttendeeStatusTentative;
- }
- else // ( aCommandId == EFsEmailUiCmdCalActionsDecline )
- {
- respondStatus = EESMRAttendeeStatusDecline;
- }
- iAppUi.MrViewerInstanceL()->ResponseToMeetingRequestL(
- respondStatus, *iMessage, *this );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleTextViewerEventL
-// From viewer observer for CFsTextViewer callbacks
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleTextViewerEventL( TFsTextViewerEvent aEvent )
- {
- FUNC_LOG;
- if ( iFirstStartCompleted ) // Safety
- {
- if ( aEvent == EFsTextViewerHotspotClicked )
- {
- // Get currently focused hotspot data
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
-
- // Some header hotspots have some immediate action defined, so
- // in case of header hotspot, try to handle the action first
- TBool actionTaken( EFalse );
- if ( hotspotType == EHeaderHotspot )
- {
- actionTaken = HandleHeaderHotspotActionL( currentHeaderHotSpotData.iType );
- }
-
- // If the current item is valid hotspot but it didn't have any
- // immediate action defined, launch item specific action menu
- if( ( hotspotType == EHeaderHotspot || hotspotType == EBodyHotspot ) &&
- !actionTaken )
- {
- LaunchActionMenuL();
- }
- }
- else if ( aEvent == EFsTextViewerHotspotLongTap )
- {
- LaunchActionMenuL();
- }
- else if ( aEvent == EFsTextViewerScrollDown )
- {
- // check if user has scroll to the bottom for start fetching rest of the message.
- // if whole message has already been fetched, no actions are needed
- StartFetchingRemaininBodyLinesIfAtBottomL();
-
- // Hide action menu icon if current hotspot does not have action menu.
- // Seems that this needs to be checked also here because "hotspot changed" events
- // are not received reliably when scrolling down.
- SetActionMenuIconVisbilityL();
- }
-
- else if ( aEvent == EFsTextViewerHotspotChanged )
- {
- // Hide action menu icon if current hotspot does not have action menu.
- SetActionMenuIconVisbilityL();
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleHeaderHotspotActionL
-// Handle appropriate command for the selected header hotspot, if the currently
-// focused item has some action specified. Returns ETrue, if current item has
-// some action defined (and the action is initiated), EFalse if not.
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::HandleHeaderHotspotActionL(
- TViewerHeadingHotspotType aHotspotType )
- {
- TBool actionTaken( EFalse );
-
- switch( aHotspotType )
- {
- case ETypeToNMoreRecipients:
- case ETypeCcNMoreRecipients:
- case ETypeBccNMoreRecipients:
- {
- HandleCommandL( EFsEmailUiCmdViewAll );
- actionTaken = ETrue;
- }
- break;
- case ETypeAttachment:
- {
- HandleCommandL( EFsEmailUiCmdOpenAttachment );
- actionTaken = ETrue;
- }
- break;
- case ETypeAttachments:
- {
- HandleCommandL( EFsEmailUiCmdOpenAttachmentList );
- actionTaken = ETrue;
- }
- break;
- case ETypeHtml:
- {
- HandleCommandL( EFsEmailUiCmdActionsOpenHtmlViewer );
- actionTaken = ETrue;
- }
- break;
- }
-
- return actionTaken;
- }
-
-// Helper funcitons to get viewed message ID and Folder id
-TFSMailMsgId CFSEmailUiMailViewerVisualiser::ViewedMessageFolderId()
- {
- FUNC_LOG;
- TFSMailMsgId ret;
- if ( iMessage )
- {
- ret = iMessage->GetFolderId();
- }
- return ret;
- }
-
-TFSMailMsgId CFSEmailUiMailViewerVisualiser::ViewedMessageId()
- {
- FUNC_LOG;
- TFSMailMsgId ret;
- if ( iMessage )
- {
- ret = iMessage->GetMessageId();
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::RefreshL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::RefreshL( TBool aFirstRefresh /*= EFalse*/ )
- {
- FUNC_LOG;
- if ( iFirstStartCompleted ) // Safety
- {
- // Show "Opening" wait note if the viewed message is a large one
- //<cmail>
- //TInt waitNoteId = KErrNotFound;
- //</cmail>
- if ( TFsEmailUiUtility::IsMessageBodyLargeL( iMessage ) )
- {
- //<cmail> using normal wait note instead of using global
- //waitNoteId = TFsEmailUiUtility::ShowGlobalWaitNoteLC( R_FSE_WAIT_OPENING_TEXT );
- iWaitDialogOpening = new(ELeave)CAknWaitDialog(
- (REINTERPRET_CAST(CEikDialog**,&iWaitDialogOpening)));
- HBufC* noteText = StringLoader::LoadLC( R_FSE_WAIT_OPENING_TEXT );
- iWaitDialogOpening->SetTextL(*noteText);
- //iWaitDialogOpening->DrawableWindow()->SetOrdinalPosition(0);
- CleanupStack::PopAndDestroy(noteText);
- iWaitDialogOpening->ExecuteLD(R_FSE_WAIT_DIALOG_NO_CANCEL);
- //</cmail>
- }
-
- // Do the update
- UpdateMailViewerL();
- AddBackgroundPicturesL();
-
- // scroll to Sent line after updating if requested
- if ( aFirstRefresh )
- {
- iTextViewer->FocusLineL( iViewerRichText->SentTextLine(), ETrue );
-
- iAsyncCallback->Cancel(); // just in case
- iAsyncCallback->Set( TCallBack( DoPostRefresh, this ) );
- iAsyncCallback->CallBack();
- }
-
- // Close the wait note if it was opened
- if ( iWaitDialogOpening )//<cmail>
- {
- //<cmail>
- //CleanupStack::PopAndDestroy( (TAny*)waitNoteId );
- iWaitDialogOpening->ProcessFinishedL(); //it destroys the waitnote also
- //</cmail>
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::DoPostActivation
-// Callback function for deferred activation actions
-// -----------------------------------------------------------------------------
-TInt CFSEmailUiMailViewerVisualiser::DoPostRefresh( TAny* aSelfPtr )
- {
- FUNC_LOG;
- CFSEmailUiMailViewerVisualiser* self =
- static_cast<CFSEmailUiMailViewerVisualiser*>( aSelfPtr );
- TRAPD( err, self->PostRefreshL() );
- return err;
- }
-
-void CFSEmailUiMailViewerVisualiser::PostRefreshL()
- {
- FUNC_LOG;
- // Focus attahcment line if available
- TInt attachmentTextLine = iViewerRichText->AttachmentTextLine();
- TInt viewHtmlTextLine = iViewerRichText->ViewHtmlTextLine();
- if ( attachmentTextLine > 0 )
- {
- iTextViewer->FocusLineL( attachmentTextLine, EFalse );
- iViewerRichText->SetHotspotByIndexL( iViewerRichText->AttachmentHotSpotIndex() );
- }
- else if ( viewHtmlTextLine > 0 )
- {
- iTextViewer->FocusLineL( viewHtmlTextLine, EFalse );
- iViewerRichText->SetHotspotByIndexL( iViewerRichText->ViewHtmlHotSpotIndex() );
- }
- SetActionMenuIconVisbilityL();
-
- // Set initial value for downloaded status for one attachment case
- iShowMskDownloadOption = ShowMskDownloadOptionL();
- SetMskL();
-
- // check if we know whole message, starts fetching if structure is unknown
- // or body doesn't found
- CheckMessageStructureL();
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CheckMessageStructureL
-// Starts fetching message structure if it is unknown.
-// If the structure is known but message body is not fetched yet, start fetching it.
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CheckMessageStructureL()
- {
- FUNC_LOG;
- if ( iFirstStartCompleted && iMessage )
- {
- if ( !MessageStructureKnown( *iMessage ) )
- { // fetch structure
- StartWaitedFetchingL( EMessageStructure );
- }
- else if ( StartFetchingBodyAfterOpeningL() )
- {
- iViewerRichText->AppendFetchingMoreTextL();
- StartFetchingMessagePartL( *iMessage, EMessagePlainTextBodyPart );
- iFetchingAnimationTimer->Start( KAnimationRefreshTimeIntervalInMilliseconds );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::UpdateDownloadIndicatorL
-// Show or hide download progress indicator popup and update its contents if
-// necessary.
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::UpdateDownloadIndicatorL( TFSProgress::TFSProgressStatus aStatus
- /*= TFSProgress::EFSStatus_Waiting*/ )
- {
- FUNC_LOG;
- if ( iFirstStartCompleted && iMessage && iTextViewer ) // Safety
- {
- TFSMailMsgId messId = iMessage->GetMessageId();
- HBufC* progressString = NULL;
- if ( iAppUi.DownloadInfoMediator() && iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads( messId ) )
- {
- TInt percentage = iAppUi.DownloadInfoMediator()->GetDownloadPercentageL( messId );
- progressString = StringLoader::LoadLC( R_FSE_VIEWER_ATTACHMENTS_LIST_DOWNLOADING,
- percentage );
- }
- else if ( aStatus == TFSProgress::EFSStatus_RequestComplete )
- {
- progressString = StringLoader::LoadLC( R_FSE_VIEWER_ATTACHMENTS_LIST_DOWNLOADED_100 );
- }
- else if ( aStatus == TFSProgress::EFSStatus_RequestCancelled )
- {
- progressString = StringLoader::LoadLC( R_FSE_VIEWER_ATTACHMENTS_LIST_DOWNLOADING_CANCELLED );
- }
- else
- {
- progressString = KNullDesC().AllocLC();
- }
-
- if ( progressString->Length() )
- {
- if ( iDownloadProgressIndicator->IsVisible() )
- {
- // pop-up already visible, just reset the text
- iDownloadProgressIndicator->SetContentsL( progressString );
- }
- else
- {
- // pop-up should be launched
-
- // Create fetching status layout first to ensure there's empty space in the end of the message
- iViewerRichText->CreateStatusLayoutL();
-
- iDownloadProgressIndicator->ShowIndicatorL( CFSEmailUiStatusIndicator::EIndicationDownloadProgress,
- progressString,
- CFSEmailUiStatusIndicator::EIndicationNoAutomaticHiding );
- iShowMskDownloadOption = EFalse;
- }
- }
- CleanupStack::PopAndDestroy( progressString );
-
- // Hide the progress popup after small delay if the download was completed or cancelled
- if ( iAppUi.DownloadInfoMediator() && !iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads( messId ) &&
- iDownloadProgressIndicator->IsVisible() )
- {
- iShowMskDownloadOption = ShowMskDownloadOptionL();
- iDownloadProgressIndicator->HideIndicator( KDownloadProgreeNoteHideDelay );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::DynInitMenuPaneL
-// For dynamically dimm/undimm menu options according to currect message and focus in the viewer
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::DynInitMenuPaneL(
- TInt aResourceId, CEikMenuPane* aMenuPane )
- {
- FUNC_LOG;
- if ( !iMessage || !iTextViewer )
- {
- User::Leave( KErrNotReady );
- }
-
- if ( aResourceId == R_FSEMAILUI_MAILVIEWER_MENUPANE )
- {
-
- if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) )
- {
- // remove help support in pf5250
- aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);
- }
-
- // Folder independent options
-
- // hide/show MessageReader
- TBool hideMessageReader = iEmbeddedMessageMode || !iAppUi.MessageReaderSupportsFreestyle();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdReadEmail, hideMessageReader );
-
- // hide/show actions sub menu
- TBool hideActions = !ShowActionsMenuInOptionsL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdMailActions, hideActions );
-
- // hide/show next and previous message options
- TBool hideNext = !ShowNextMessageMenuInOptions();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdNextMessage, hideNext );
- TBool hidePrev = !ShowPreviousMessageMenuInOptions();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdPreviousMessage, hidePrev );
-
- // hide/show copy to clipboard
- TBool hideCopyToClipBoard = !IsCopyToClipBoardAvailableL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCopyToClipboard, hideCopyToClipBoard );
-
-
- // Folder dependent options
- TFSMailMsgId currentMessageFolderId = iMessage->GetFolderId();
- CFSMailFolder* currentFolder = NULL;
- if ( !iEmbeddedMessageMode )
- {
- TRAP_IGNORE( currentFolder = iAppUi.GetMailClient()->GetFolderByUidL(
- iMessage->GetMailBoxId(), currentMessageFolderId ) );
- }
- CleanupStack::PushL( currentFolder );
- if ( !currentFolder || currentFolder->GetFolderType() == EFSOutbox )
- { // outbox folder or embedded message
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsForward, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReply, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsForward2, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsMoveToDrafts, !currentFolder );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsDelete, !currentFolder );
- }
- else
- { // other folders
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsMoveToDrafts, ETrue );
-
- // hide reply all if there's no multiple recipients
- TInt numRecipients(0);
- if ( iMessage )
- {
- //Get # of recipients
- numRecipients =TFsEmailUiUtility::CountRecepients( iMessage );
- if ( numRecipients == 1 )
- {
- //check if the malbox ownmailaddress is same as the recipients email address. If not, then assume that the
- //email is a distribution list and we need to inc num of Recipients so that "Reply ALL" option appears in UI.
- if ( iMessage->GetToRecipients().Count() )
- {
- if ( iMailBox->OwnMailAddress().GetEmailAddress().Compare(iMessage->GetToRecipients()[0]->GetEmailAddress()) )
- {
- numRecipients++;
- }
- }
- if ( iMessage->GetCCRecipients().Count() )
- {
- if ( iMailBox->OwnMailAddress().GetEmailAddress().Compare(iMessage->GetCCRecipients()[0]->GetEmailAddress()) )
- {
- numRecipients++;
- }
- }
- if( iMessage->GetBCCRecipients().Count() )
- {
- if( iMailBox->OwnMailAddress().GetEmailAddress().Compare(iMessage->GetBCCRecipients()[0]->GetEmailAddress()) )
- {
- numRecipients++;
- }
- }
- }
- }
-
- TBool hideReplyAll = ( numRecipients <= 1 );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, hideReplyAll );
-
- // In Sent folder, option forward is shown above options reply and reply all
- TBool forwardAboveReply = ( currentFolder->GetFolderType() == EFSSentFolder );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsForward, !forwardAboveReply );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsForward2, forwardAboveReply );
- }
- CleanupStack::PopAndDestroy( currentFolder );
- }
-
- if ( aResourceId == R_FSEMAILUI_MAILVIEWER_SUBMENU_MORE )
- {
- TFSMailMsgId currentMessageFolderId = iMessage->GetFolderId();
- CFSMailFolder* currentFolder = NULL;
- if ( !iEmbeddedMessageMode )
- {
- TRAP_IGNORE( currentFolder = iAppUi.GetMailClient()->GetFolderByUidL(
- iMessage->GetMailBoxId(), currentMessageFolderId ) );
- }
- CleanupStack::PushL( currentFolder );
- if ( !currentFolder || currentFolder->GetFolderType() == EFSOutbox )
- { // outbox folder or embedded message
- aMenuPane->SetItemDimmed( EFsEmailUiCmdMarkAsUnread, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdMarkAsRead, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsMoveMessage, ETrue );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsFlag, ETrue );
-// <cmail> Prevent Download Manager opening with attachments
-// aMenuPane->SetItemDimmed( EFsEmailUiCmdDownloadManager, ETrue );
-// </cmail> Prevent Download Manager opening with attachments
- }
- else // other folders
- {
- // show read/unread according to current state
- TBool messageIsRead = iMessage->IsFlagSet( EFSMsgFlag_Read );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdMarkAsRead, messageIsRead );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdMarkAsUnread, !messageIsRead );
-
- // show/hide move message
- TBool hideMove = !iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaMoveToFolder );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsMoveMessage, hideMove );
-
- // show/hide flag for followup
- TBool hideFlag = !TFsEmailUiUtility::IsFollowUpSupported( *iMailBox );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsFlag, hideFlag );
-
- // hide/show download manager option
-// <cmail> Prevent Download Manager opening with attachments
-// TBool hideDownloadMan = !ShowDownloadManagerMenuInOptions();
-// aMenuPane->SetItemDimmed( EFsEmailUiCmdDownloadManager, hideDownloadMan );
-// </cmail>
- }
- CleanupStack::PopAndDestroy( currentFolder );
- }
-
- if ( aResourceId == R_FSEMAILUI_MAILVIEWER_SUBMENU_ACTIONS )
- {
- // All menu items are hidden by default.
- // Undimm items that should be visible in action menu.
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
-
- TBool remoteLookupAvailable =
- TFsEmailUiUtility::IsRemoteLookupSupported( *iMailBox );
-
- if ( ( hotspotType == EHeaderHotspot && (
- currentHeaderHotSpotData.iType == ETypeFromAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeToAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeCcAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeBccAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeEmailAddress ) )
- ||
- ( hotspotType == EBodyHotspot &&
- currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchMailAddressBin ) )
- {
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCall, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCreateMessage, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCreateMail, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsContactDetails, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsAddContact2, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsRemoteLookup, !remoteLookupAvailable );
- }
- else if ( hotspotType == EHeaderHotspot &&
- currentHeaderHotSpotData.iType == ETypeAttachment )
- {
- TBool hideOpen = !ShowOpenAttachmentOptionL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdOpenAttachment, hideOpen );
- TBool hideDownload = !ShowDownloadOptionL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdDownload, hideDownload );
- TBool hideCancel = !ShowCancelDownloadOption();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdCancelDownload, hideCancel );
- TBool hideSave = !ShowSaveAttachmentOptionL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdSave, hideSave );
-
- TBool hideRemove = hideOpen;
- aMenuPane->SetItemDimmed( EFsEmailUiCmdClearFetchedAttachment, hideRemove );
- }
- else if ( hotspotType == EHeaderHotspot &&
- currentHeaderHotSpotData.iType == ETypeAttachments )
- {
- TBool hideOpen = !ShowOpenAttachmentOptionL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdOpenAttachmentList, hideOpen );
- TBool hideDownload = !ShowDownloadOptionL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdDownloadAll, hideDownload );
- TBool hideCancel = !ShowCancelDownloadOption();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdCancelAllDownloads, hideCancel );
- TBool hideSave = !ShowSaveAttachmentOptionL();
- aMenuPane->SetItemDimmed( EFsEmailUiCmdSaveAll, hideSave );
- }
- else if ( hotspotType == EBodyHotspot &&
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCall, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsAddContact, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCreateMessage, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsRemoteLookup, !remoteLookupAvailable );
- }
- else if ( hotspotType == EBodyHotspot &&
- ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchURLBin ||
- currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchScheme ) )
- {
- // Handle action menu for different search scheme, e.g mailto: and call:
- TInt schemaLinkType = ResolveBodyTextSchemaUrlTypeL( currentBodyHotSpotData );
- switch ( schemaLinkType )
- {
- case EFocusOnEMailInBodyText:
- {
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCall, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCreateMessage, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsContactDetails, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsAddContact2, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsRemoteLookup, !remoteLookupAvailable );
- }
- break;
- case EFocusOnNumberWithinMessage:
- {
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCall, EFalse );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsAddContact, EFalse );
- // Drop out "Create message" selection for SIP addresses
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- if ( schemeText && schemeText->FindC( KVoipPrefix ) != 0 )
- {
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsCreateMessage, EFalse );
- }
- CleanupStack::PopAndDestroy( schemeText );
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsRemoteLookup, !remoteLookupAvailable );
- }
- break;
- default:
- {
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsOpenWeb, EFalse );
-
- // Handle intranet browsing item by using AIW service
- // handler's InitializeMenuPaneL-function, it will remove
- // the IB menu item if IB is not available, or make the
- // item visible if IB is available
- if ( iIBServiceHandler && iIBServiceHandler->IsAiwMenu( aResourceId ) )
- {
- TAiwGenericParam param( EGenericParamURL );
- CAiwGenericParamList* list = CAiwGenericParamList::NewLC();
- list->AppendL( param );
- iIBServiceHandler->InitializeMenuPaneL( *aMenuPane, aResourceId,
- EFsEmailUiCmdActionsOpenInIntranetMenu, *list, ETrue );
- CleanupStack::PopAndDestroy( list );
- }
-
- aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsAddBookmark, EFalse );
- }
- break;
- }
- }
- }
-
- iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane,
- CFSEmailUiShortcutBinding::EContextMailViewer );
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleCommandL
-// Handles menu selections
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleCommandL( TInt aCommand )
- {
- FUNC_LOG;
- if ( !iAppUi.ViewSwitchingOngoing() )
- {
- switch ( aCommand )
- {
- case EAknSoftkeyBack:
- {
- // Set empty MSK when navigating back
- ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
- // Cancel MR viewer launching if Back is pressed in the middle
- // of launching process.
- CancelPendingMrCommandL();
- NavigateBackL();
- }
- break;
- // top level options
- case EFsEmailUiCmdActionsMoveToDrafts:
- {
- TFsEmailUiUtility::MoveMessageToDraftsL(
- *iAppUi.GetActiveMailbox(), *iMessage );
- }
- break;
- case EFsEmailUiCmdCalActionsReplyAsMail:
- case EFsEmailUiCmdActionsReply:
- {
- if ( !iEmbeddedMessageMode )
- {
- TEditorLaunchParams params;
- params.iMailboxId = iAppUi.GetActiveMailboxId();
- params.iMsgId = iMessage->GetMessageId();
- params.iActivatedExternally = EFalse;
- iAppUi.LaunchEditorL( KEditorCmdReply, params );
- }
- }
- break;
- case EFsEmailUiCmdActionsReplyAll:
- {
- if ( !iEmbeddedMessageMode )
- {
- TEditorLaunchParams params;
- params.iMailboxId = iAppUi.GetActiveMailboxId();
- params.iMsgId = iMessage->GetMessageId();
- params.iActivatedExternally = EFalse;
- iAppUi.LaunchEditorL( KEditorCmdReplyAll, params );
- }
- }
- break;
- case EFsEmailUiCmdCalActionsForwardAsMail:
- case EFsEmailUiCmdActionsForward:
- case EFsEmailUiCmdActionsForward2:
- {
- if ( !iEmbeddedMessageMode )
- {
- TEditorLaunchParams params;
- params.iMailboxId = iAppUi.GetActiveMailboxId();
- params.iMsgId = iMessage->GetMessageId();
- params.iActivatedExternally = EFalse;
- iAppUi.LaunchEditorL( KEditorCmdForward, params );
- }
- }
- break;
- case EFsEmailUiCmdActionsDelete:
- {
- DeleteMailL( *iMessage, ETrue );
- }
- break;
- case EFsEmailUiCmdActionsCopyToClipboard:
- {
- CopyCurrentHotspotToClipBoardL();
- }
- break;
- case EFsEmailUiCmdPreviousMessage:
- {
- ShowPreviousMessageL();
- }
- break;
- case EFsEmailUiCmdNextMessage:
- {
- ShowNextMessageL();
- }
- break;
- case EFsEmailUiCmdHelp:
- {
- TFsEmailUiUtility::LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
- }
- break;
- case EFsEmailUiCmdExit:
- {
- iAppUi.Exit();
- }
- break;
- case EFsEmailUiCmdReadEmail:
- {
- iAppUi.StartReadingEmailsL();
- }
- break;
-
- // "actions" -sub menu options
- case EFsEmailUiCmdActionsCall:
- {
- CallHotSpotAddressL();
- }
- break;
- case EFsEmailUiCmdActionsCreateMessage:
- {
- CreateMessageL();
- }
- break;
- case EFsEmailUiCmdActionsCreateMail:
- {
- ComposeMailL();
- }
- break;
- case EFsEmailUiCmdActionsContactDetails:
- {
- OpenContactDetailsL();
- }
- break;
- case EFsEmailUiCmdActionsAddContact:
- case EFsEmailUiCmdActionsAddContact2:
- {
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType =
- iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
- if ( hotspotType == EHeaderHotspot )
- {
- HBufC* emailAddress =
- iViewerRichText->GetHeaderHotspotEmailAddressLC(
- currentHeaderHotSpotData );
- SaveEmailAsContactL( *emailAddress );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- else if ( hotspotType == EBodyHotspot )
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC(
- currentBodyHotSpotData );
- if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- SavePhoneNumberAsContactL( *hotspotText );
- }
- else if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- SaveEmailAsContactL( *hotspotText );
- }
- else if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchScheme)
- {
- if ( hotspotText->FindC( KMailtoPrefix ) == 0 )
- {
- // Save email address, prefix is stripped in SaveEmailAsContactL
- SaveEmailAsContactL( *hotspotText );
- }
- else if ( hotspotText->FindC( KCallPrefix ) == 0 ||
- hotspotText->FindC( KTelPrefix ) == 0 ||
- hotspotText->FindC( KSmsPrefix ) == 0 ||
- hotspotText->FindC( KMmsPrefix ) == 0 )
- {
- // Save phone nukmber, prefix is stripped in SavePhoneNumberAsContactL
- SavePhoneNumberAsContactL( *hotspotText );
- }
- }
- CleanupStack::PopAndDestroy( hotspotText );
- }
- }
- break;
- case EFsEmailUiCmdActionsRemoteLookup:
- {
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType =
- iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
- if ( hotspotType == EHeaderHotspot )
- {
- HBufC* emailAddress =
- iViewerRichText->GetHeaderHotspotEmailAddressLC(
- currentHeaderHotSpotData );
- LaunchRemoteLookupL( *emailAddress );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- else if ( hotspotType == EBodyHotspot )
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC(
- currentBodyHotSpotData );
- LaunchRemoteLookupL( *hotspotText );
- CleanupStack::PopAndDestroy( hotspotText );
- }
- }
- break;
- case EFsEmailUiCmdActionsOpenHtmlViewer:
- {
- LaunchHtmlViewerL();
- }
- break;
- case EFsEmailUiCmdActionsOpenWeb:
- {
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- TBool bodyHotSpotFound =
- iViewerRichText->FindCurrentBodyHotSpotL(
- currentBodyHotSpotData );
- OpenHotSpotUrlInBrowserL( currentBodyHotSpotData );
- }
- break;
- case EFsEmailUiCmdActionsOpenInIntranetMenu:
- {
- OpenLinkInIntranetL( ETrue );
- }
- break;
- case EFsEmailUiCmdActionsAddBookmark:
- {
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- TBool bodyHotSpotFound =
- iViewerRichText->FindCurrentBodyHotSpotL(
- currentBodyHotSpotData );
- AddToBookmarksL( currentBodyHotSpotData );
- }
- break;
- case EAknSoftkeyOpen:
- case EFsEmailUiCmdOpenAttachment:
- {
- OpenAttachmentL();
- }
- break;
- case EFsEmailUiCmdOpenAttachmentList:
- {
- OpenAttachmentsViewL();
- }
- break;
- case EFsEmailUiCmdDownload:
- case EFsEmailUiCmdDownloadAll:
- {
- StartDowloadingAttachmentsL();
- }
- break;
- case EFsEmailUiCmdCancelDownload:
- case EFsEmailUiCmdCancelAllDownloads:
- {
- CancelDowloadingAttachmentsL();
- }
- break;
- case EFsEmailUiCmdSave:
- case EFsEmailUiCmdSaveAll:
- {
- SaveAllAttachmentsL();
- }
- break;
- case EFsEmailUiCmdClearFetchedAttachment:
- {
- RemoveFetchedAttachmentL();
- }
- break;
-
- // "more" -sub menu options
- case EFsEmailUiCmdMarkAsUnread:
- {
- ChangeMsgReadStatusL( EFalse, EFalse );
- }
- break;
- case EFsEmailUiCmdMarkAsRead:
- {
- ChangeMsgReadStatusL( ETrue, EFalse );
- }
- break;
- case EFsEmailUiCmdActionsMoveMessage:
- {
- OpenFolderListForMessageMovingL();
- }
- break;
- case EFsEmailUiCmdActionsFlag:
- {
- SetMessageFollowupFlagL();
- }
- break;
- case EFsEmailUiCmdCompose:
- {
- iAppUi.CreateNewMailL();
- }
- break;
- case EFsEmailUiCmdComposeTo:
- {
- ComposeMailL();
- }
- break;
- case EFsEmailUiCmdMessageDetails:
- case EFsEmailUiCmdViewAll:
- {
- TUid activationCmdId = KStartMsgDetailsToBeginning;
- if ( aCommand == EFsEmailUiCmdViewAll )
- {
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- iViewerRichText->FindCurrentHeaderHotSpotL( currentHeaderHotSpotData );
- if( currentHeaderHotSpotData.iType == ETypeToNMoreRecipients )
- {
- activationCmdId = KStartMsgDetailsToTo;
- }
- else if( currentHeaderHotSpotData.iType == ETypeCcNMoreRecipients )
- {
- activationCmdId = KStartMsgDetailsToCc;
- }
- else if( currentHeaderHotSpotData.iType == ETypeBccNMoreRecipients )
- {
- activationCmdId = KStartMsgDetailsToBcc;
- }
- }
-
- TMsgDetailsActivationData msgDetailsData;
- msgDetailsData.iMailBoxId = iMessage->GetMailBoxId();
- msgDetailsData.iFolderId = iMessage->GetFolderId();
- msgDetailsData.iMessageId = iMessage->GetMessageId();
- const TPckgBuf<TMsgDetailsActivationData> pkgOut( msgDetailsData );
- iAppUi.EnterFsEmailViewL(
- MsgDetailsViewId, activationCmdId, pkgOut );
- }
- break;
-// <cmail> Prevent Download Manager opening with attachments
-// case EFsEmailUiCmdDownloadManager:
-// {
-// iAppUi.EnterFsEmailViewL( DownloadManagerViewId );
-// }
-// break;
-// </cmail>
- case EFsEmailUiCmdMarkAsReadUnreadToggle:
- {
- if ( iMessage && !iEmbeddedMessageMode )
- {
- if ( iMessage->IsFlagSet( EFSMsgFlag_Read ) )
- {
- HandleCommandL( EFsEmailUiCmdMarkAsUnread );
- }
- else
- {
- HandleCommandL( EFsEmailUiCmdMarkAsRead );
- }
- }
- }
- break;
-
- // Moving to top or to bottom of the text. Zero seems to be
- // treated as illegal value in FocusLineL (it is skipped),
- // so assuming that line range is [1, total lines count].
- // It is not documented anywhere though.
- case EFsEmailUiCmdGoToTop:
- {
- // <cmail>
- // Do nothing if focus is already in top
- if ( iTextViewer->GetFirstDisplayedLine() > 1 )
- {
- iTextViewer->FocusLineL( 1 );
- }
- }
- // </cmail>
- break;
- case EFsEmailUiCmdGoToBottom:
- {
- iTextViewer->FocusLineL( iTextViewer->GetTotalLines() );
- }
- break;
-
- // The Generic text viewer API supports setting only one key for scroll up
- // and one key for scroll down. To have multiple scroll up/down keys,
- // we have set artificial keys for the generic viewer and simulate those
- // when one of the shortcut keys is pressed.
- // Another reason to use these artificial keys is that the TextViewer identifies
- // keys by iCodes. This doesn't fit our concept at least in product where iCode
- // of certain keys contains the value of the character found behind Fn on that key,
- // and the Fn mappings vary between variants.
- // Similar mechanism is used inside AknFep with key codes EKeyF19...EKeyF24,
- // so collisions with these must be avoided.
- case EFsEmailUiCmdScrollUp:
- {
- TKeyEvent simEvent = { KKeyCodeArtificialScrollUp, EStdKeyNull, 0, 0 };
- iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
- }
- break;
- case EFsEmailUiCmdScrollDown:
- {
- TKeyEvent simEvent = { KKeyCodeArtificialScrollDown, EStdKeyNull, 0, 0 };
- iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
- }
- break;
- case EFsEmailUiCmdPageUp:
- {
- TKeyEvent simEvent = { EKeyPageUp, EStdKeyNull, 0, 0 };
- iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
- }
- break;
- case EFsEmailUiCmdPageDown:
- {
- TKeyEvent simEvent = { EKeyPageDown, EStdKeyNull, 0, 0 };
- iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
- // Check if we reached the end of truncated message body
- StartFetchingRemaininBodyLinesIfAtBottomL();
- }
- break;
-
- default:
- break;
- }
- }
- }
-
-
-void CFSEmailUiMailViewerVisualiser::ComposeMailL()
- {
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
- if ( hotspotType == EHeaderHotspot )
- {
- // Regular email address
- if ( currentHeaderHotSpotData.iType == ETypeEmailAddress )
- {
- HBufC* emailAddress = iViewerRichText->GetHeaderHotspotEmailAddressLC( currentHeaderHotSpotData );
- if ( emailAddress && emailAddress->Length() )
- {
- delete iNewMailTempAddress;
- iNewMailTempAddress = NULL;
- iNewMailTempAddress = CFSMailAddress::NewL();
- iNewMailTempAddress->SetEmailAddress( *emailAddress );
- iAppUi.LaunchEditorL( iNewMailTempAddress );
- }
- CleanupStack::PopAndDestroy( emailAddress );
- }
- // Sender addr with display name
- else if ( currentHeaderHotSpotData.iType == ETypeFromAddressDisplayName )
- {
- CFSMailAddress* senderAddress = iMessage->GetSender(); // not owned
- iAppUi.LaunchEditorL( senderAddress );
- }
- // To addr with display name
- else if ( currentHeaderHotSpotData.iType == ETypeToAddressDisplayName )
- {
- RPointerArray<CFSMailAddress>& toArray = iMessage->GetToRecipients(); // not owned
- CFSMailAddress* toAddress = toArray[ currentHeaderHotSpotData.iDisplayNameArrayIndex ];
- iAppUi.LaunchEditorL( toAddress );
- }
- // CC addr with display name
- else if ( currentHeaderHotSpotData.iType == ETypeCcAddressDisplayName )
- {
- RPointerArray<CFSMailAddress>& ccArray = iMessage->GetCCRecipients(); // not owned
- CFSMailAddress* ccAddress = ccArray[ currentHeaderHotSpotData.iDisplayNameArrayIndex ];
- iAppUi.LaunchEditorL( ccAddress );
- }
- // BCC addr with display name
- else if ( currentHeaderHotSpotData.iType == ETypeBccAddressDisplayName )
- {
- RPointerArray<CFSMailAddress>& bccArray = iMessage->GetBCCRecipients(); // not owned
- CFSMailAddress* bccAddress = bccArray[ currentHeaderHotSpotData.iDisplayNameArrayIndex ];
- iAppUi.LaunchEditorL( bccAddress );
- }
- }
- // Email address hotspot in body text clicked
- else if ( hotspotType == EBodyHotspot && ( currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchMailAddressBin ||
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchScheme ) )
- {
- WriteEmailToHotSpotAddressL( currentBodyHotSpotData );
- }
- }
-
-
-
-
-void CFSEmailUiMailViewerVisualiser::ProcessAsyncCommandL( TESMRIcalViewerOperationType aCommandId,
- const CFSMailMessage& aMessage,
- MESMRIcalViewerObserver* aObserver )
- {
- FUNC_LOG;
- if ( aObserver )
- {
- iMrObserverToInform = aObserver;
- }
- // we must cast constness away from message because of flaws in MRUI API
- CFSMailMessage* messagePtr = const_cast<CFSMailMessage*>(&aMessage);
- if ( messagePtr )
- {
- // Fill in result struct
- iOpResult.iOpType = aCommandId;
- iOpResult.iMessage = messagePtr;
- iOpResult.iResultCode = KErrNotFound;
-
- switch ( aCommandId )
- {
- case EESMRCmdMailMessageDetails:
- {
- iOpResult.iResultCode = KErrNone;
- TMsgDetailsActivationData msgDetailsData;
- msgDetailsData.iMailBoxId = messagePtr->GetMailBoxId();
- msgDetailsData.iFolderId = messagePtr->GetFolderId();
- msgDetailsData.iMessageId = messagePtr->GetMessageId();
- const TPckgBuf<TMsgDetailsActivationData> pkgOut( msgDetailsData );
- iAppUi.EnterFsEmailViewL( MsgDetailsViewId, KStartMsgDetailsToBeginning, pkgOut);
- }
- break;
- case EESMRCmdMailDelete:
- {
- if ( iMessage )
- {
- iDeletedMessageFromMrui = iMessage->GetMessageId(); //<cmail>
- iOpResult.iResultCode = DeleteMailL( *iMessage, EFalse, ETrue );
- }
-
- // Information is returned immediately after delete has completed.
- CompletePendingMrCommand();
- }
- break;
- case EESMRCmdMailMoveMessage:
- {
- if ( iMessage )
- {
- if ( OpenFolderListForMessageMovingL() )
- {
- iOpResult.iResultCode = KErrNone;
- iMovingMeetingRequest = ETrue;
- }
- }
- }
- break;
-// <cmail>
- case EESMRCmdOpenAttachment:
- {
- // Check that message has attachments to display
- if ( messagePtr->IsFlagSet( EFSMsgFlag_Attachments ) )
- {
- iOpResult.iResultCode = KErrNone;
- OpenAttachmentL();
- CompletePendingMrCommand();
- }
- }
- break;
- case EESMRCmdDownloadAttachment:
- case EESMRCmdDownloadAllAttachments:
- {
- // Check that message has attachments to display
- if ( messagePtr->IsFlagSet( EFSMsgFlag_Attachments ) )
- {
- iOpResult.iResultCode = KErrNone;
- StartDowloadingAttachmentsL();
- CompletePendingMrCommand();
- }
- }
- break;
- case EESMRCmdSaveAttachment:
- case EESMRCmdSaveAllAttachments:
- {
- // Check that message has attachments to display
- if ( messagePtr->IsFlagSet( EFSMsgFlag_Attachments ) )
- {
- iOpResult.iResultCode = KErrNone;
- SaveAllAttachmentsL();
- CompletePendingMrCommand();
- }
- }
- break;
-// </cmail>
- case EESMRCmdOpenAttachmentView:
- {
- // Check that message has attachments to display
- if ( messagePtr->IsFlagSet( EFSMsgFlag_Attachments ) )
- {
- iOpResult.iResultCode = KErrNone;
- TAttachmentListActivationData params;
- params.iMailBoxId = messagePtr->GetMailBoxId();
- params.iFolderId = messagePtr->GetFolderId();
- params.iMessageId = messagePtr->GetMessageId();
- TPckgBuf<TAttachmentListActivationData> buf( params );
- TUid emptyCustomMessageId = { 0 };
- iAppUi.EnterFsEmailViewL( AttachmentMngrViewId, emptyCustomMessageId, buf );
-// <cmail>
- CompletePendingMrCommand();
-// </cmail>
- }
- }
- break;
- case EESMRCmdDownloadManager:
- {
- // Check that there is something in dwnld manager to show
- if ( ShowDownloadManagerMenuInOptions() )
- {
- iOpResult.iResultCode = KErrNone;
- iAppUi.EnterFsEmailViewL( DownloadManagerViewId );
- }
- }
- break;
- case EESMRCmdMailComposeMessage:
- {
- iOpResult.iResultCode = KErrNone;
- iAppUi.CreateNewMailL();
- }
- break;
- case EESMRCmdMailReply:
- case EESMRCmdMailReplyAll:
- case EESMRCmdMailForwardAsMessage:
- {
- // Fill result codes for mrui
- iOpResult.iResultCode = KErrNone;
- // Fill launc params
- TEditorLaunchParams params;
- params.iMailboxId = iAppUi.GetActiveMailboxId();
- params.iActivatedExternally = EFalse;
- params.iMsgId = messagePtr->GetMessageId();
- if ( aCommandId == EESMRCmdMailForwardAsMessage )
- {
- iAppUi.LaunchEditorL( KEditorCmdForward, params );
- }
- else if ( aCommandId == EESMRCmdMailReply )
- {
- iAppUi.LaunchEditorL( KEditorCmdReply, params );
- }
- else if ( aCommandId == EESMRCmdMailReplyAll )
- {
- iAppUi.LaunchEditorL( KEditorCmdReplyAll, params );
- }
- }
- break;
- case EESMRCmdMailPreviousMessage:
- {
- iNextOrPevMessageSelected = ETrue; // prevent back navigation when operation completed received
- ShowPreviousMessageL();
- iOpResult.iResultCode = KErrNone;
- CompletePendingMrCommand();
- }
- break;
- case EESMRCmdMailNextMessage:
- {
- iNextOrPevMessageSelected = ETrue; // prevent back navigation when operation completed received
- ShowNextMessageL();
- iOpResult.iResultCode = KErrNone;
- CompletePendingMrCommand();
- }
- break;
- default:
- break;
- }
- }
-
- // Complete immediately if handling command failed. It makes no harm if following
- // function gets called several times in some case.
- if ( iOpResult.iResultCode < 0 )
- {
- CompletePendingMrCommand();
- }
- }
-
-
-void CFSEmailUiMailViewerVisualiser::ProcessSyncCommandL(
- TESMRIcalViewerOperationType aCommandId,
- const CFSMailMessage& aMessage )
- {
- FUNC_LOG;
- if ( &aMessage )
- {
- switch ( aCommandId )
- {
- case EESMRCmdMailMarkUnread:
- {
- ChangeMsgReadStatusL( EFalse, ETrue );
- }
- break;
- case EESMRCmdMailMarkRead:
- {
- ChangeMsgReadStatusL( ETrue, ETrue );
- }
- break;
- case EESMRCmdMailFlagMessage:
- {
- if ( iMessage )
- {
- if ( !iFlagSelectionHanler )
- {
- // Create when used for the first time
- iFlagSelectionHanler =
- CFlagSelectionGlobalNoteHandler::NewL( *this );
- }
- // Call to LaunchFlagListQueryDialogL will lead
- // to FlagselectionCompleteL
- iFlagSelectionHanler->LaunchFlagListQueryDialogL();
- }
- }
- break;
- default:
- break;
- }
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CanProcessCommand
-// Callback from meeting request UI. Determines what functionality is provided
-// to mrui by this UI
-// ---------------------------------------------------------------------------
-//
-TBool CFSEmailUiMailViewerVisualiser::CanProcessCommand(
- TESMRIcalViewerOperationType aCommandId ) const
- {
- FUNC_LOG;
- TBool ret( EFalse );
- TInt numRecipients(0);
- switch ( aCommandId )
- {
- case EESMRCmdMailReply:
- ret = ETrue;
- break;
- case EESMRCmdMailReplyAll:
- //Get # of recipients
- if ( iMessage )
- {
- numRecipients=TFsEmailUiUtility::CountRecepients( iMessage );
- if ( numRecipients == 1 )
- {
- //check if the malbox ownmailaddress is same as the recipients email address. If not, then assume that the
- //email is a distribution list and we need to inc num of Recipients so that "Reply ALL" option appears in UI.
- if ( iMessage->GetToRecipients().Count() )
- {
- if ( iMailBox->OwnMailAddress().GetEmailAddress().Compare(iMessage->GetToRecipients()[0]->GetEmailAddress()) )
- {
- numRecipients++;
- }
- }
- if ( iMessage->GetCCRecipients().Count() )
- {
- if ( iMailBox->OwnMailAddress().GetEmailAddress().Compare(iMessage->GetCCRecipients()[0]->GetEmailAddress()) )
- {
- numRecipients++;
- }
- }
- if ( iMessage->GetBCCRecipients().Count() )
- {
- if ( iMailBox->OwnMailAddress().GetEmailAddress().Compare(iMessage->GetBCCRecipients()[0]->GetEmailAddress()) )
- {
- numRecipients++;
- }
- }
- }
- }
- ret = ( iMessage && numRecipients > 1 );
- break;
- case EESMRCmdDownloadManager:
- ret = ShowDownloadManagerMenuInOptions();
- break;
-// <cmail>
- case EESMRCmdOpenAttachment:
- case EESMRCmdSaveAttachment:
- case EESMRCmdSaveAllAttachments:
- case EESMRCmdDownloadAttachment:
- case EESMRCmdDownloadAllAttachments:
-// </cmail>
- case EESMRCmdOpenAttachmentView:
- ret = ETrue;
- break;
- case EESMRCmdMailComposeMessage:
- ret = ETrue;
- break;
- case EESMRCmdMailMarkUnread:
- {
- ret = EFalse;
- if ( iMessage && iMessage->IsFlagSet(EFSMsgFlag_Read) )
- {
- // Read, unread should be available
- ret = ETrue;
- }
- }
- break;
- case EESMRCmdMailMarkRead:
- {
- ret = EFalse;
- if ( iMessage && !iMessage->IsFlagSet(EFSMsgFlag_Read) )
- {
- // Read, unread should be available
- ret = ETrue;
- }
- }
- break;
- case EESMRCmdMailMoveMessage:
- {
- ret = EFalse;
- if ( iMessage )
- {
- // confirmed pointer exists, check whether mb has capa
- ret = iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaMoveToFolder );
- }
- }
- break;
- case EESMRCmdMailForwardAsMessage:
- ret = ETrue;
- break;
- case EESMRCmdMailFlagMessage:
- ret = TFsEmailUiUtility::IsFollowUpSupported( *iMailBox );
- break;
- case EESMRCmdMailMessageDetails:
- ret = ETrue;
- break;
- case EESMRCmdMailDelete:
- ret = ETrue;
- break;
- case EESMRCmdMailPreviousMessage:
- ret = ShowPreviousMessageMenuInOptions();
- break;
- case EESMRCmdMailNextMessage:
- ret = ShowNextMessageMenuInOptions();
- break;
- default:
- ret = EFalse;
- break;
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CompletePendingMrCommand()
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::CompletePendingMrCommand()
- {
- FUNC_LOG;
- if ( iMrObserverToInform )
- {
- iMrObserverToInform->OperationCompleted( iOpResult );
- }
- iMrObserverToInform = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CancelPendingMrCommandL()
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::CancelPendingMrCommandL()
- {
- FUNC_LOG;
- // Be sure not to call cancel if the MRUI is not active. This is because
- // calling cancel after closing a newly fetched MR causes the MRUI to
- // be reopened.
- if ( iMrUiActive && iAppUi.MrViewerInstanceL() )
- {
- iAppUi.MrViewerInstanceL()->CancelOperation();
- }
- iMrUiActive = EFalse;
- iMrObserverToInform = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OperationCompleted()
-// From MRUI observer
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::OperationCompleted( TIcalViewerOperationResult aResult )
- {
- FUNC_LOG;
- if ( aResult.iOpType == EESMRViewLaunch )
- {
- iMrUiActive = EFalse;
- if ( !iNextOrPevMessageSelected && iAppUi.CurrentActiveView() == this )
- {
- TRAP_IGNORE( NavigateBackL() );
- }
- if ( aResult.iAttendeeStatus == EESMRAttendeeStatusAccept ||
- aResult.iAttendeeStatus == EESMRAttendeeStatusTentative )
- {
- TInt noteTextId = R_FREESTYLE_EMAIL_CONFIRM_NOTE_MEETING_ON_CALENDAR_AFTER_SYNC;
- TRAP_IGNORE( TFsEmailUiUtility::ShowGlobalInfoNoteL( noteTextId ) );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OperationError()
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::OperationError( TIcalViewerOperationResult aResult )
- {
- FUNC_LOG;
- // Show message in standard mail viewer in case launchin MRUI fails for any
- // other reason than viewer being cancelled by calling CancelPendingMrCommand().
- if ( aResult.iOpType == EESMRViewLaunch )
- {
- iMrUiActive = EFalse;
- if ( iAppUi.CurrentActiveView() == this && aResult.iResultCode != KErrCancel )
- {
- TRAP_IGNORE(
- SetMailboxNameToStatusPaneL();
- iAppUi.Display().Roster().Hide( ControlGroup() );
- RefreshL( ETrue );
- iAppUi.Display().Roster().ShowL( ControlGroup() );
- UpdateDownloadIndicatorL();
- );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::SetMskL()
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::SetMskL()
- {
- FUNC_LOG;
- if ( iFirstStartCompleted && iTextViewer ) // Safety
- {
- TInt ignoreThis( 0 );
- TBool visibleHotsSpot =
- iTextViewer->GetVisibleFocusedHotspotLine( ignoreThis );
- if ( visibleHotsSpot )
- {
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if ( hotspotType == EHeaderHotspot )
- {
- if ( currentHeaderHotSpotData.iType ==
- ETypeToAddressDisplayName ||
- currentHeaderHotSpotData.iType ==
- ETypeCcAddressDisplayName ||
- currentHeaderHotSpotData.iType ==
- ETypeBccAddressDisplayName ||
- currentHeaderHotSpotData.iType ==
- ETypeEmailAddress )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_COMPOSE );
- }
- else if ( currentHeaderHotSpotData.iType ==
- ETypeFromAddressDisplayName )
- {
- if ( !iEmbeddedMessageMode )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_REPLY );
- }
- else
- {
- // Reply option is not available in the embedded mode
- ChangeMskCommandL( R_FSE_QTN_MSK_COMPOSE );
- }
- }
- else if ( currentHeaderHotSpotData.iType == ETypeHtml )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_OPENHTMLVIEWER );
- }
- else if ( currentHeaderHotSpotData.iType == ETypeAttachment )
- {
- if ( iShowMskDownloadOption )
- { // attachment not yet downloaded
- ChangeMskCommandL( R_FSE_QTN_MSK_DOWNLOAD );
- }
- else if ( ShowCancelDownloadOption() )
- { // attachment is being downloaded
- ChangeMskCommandL( R_FSE_QTN_MSK_OPEN_BLOCKED );
- }
- else // attachment is already downloaded
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_VIEWATTACHMENT );
- }
- }
- else if ( currentHeaderHotSpotData.iType == ETypeAttachments )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_VIEWATTACHMENTS );
- }
- else if ( currentHeaderHotSpotData.iType ==
- ETypeToNMoreRecipients ||
- currentHeaderHotSpotData.iType ==
- ETypeCcNMoreRecipients ||
- currentHeaderHotSpotData.iType ==
- ETypeBccNMoreRecipients )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_VIEWALL );
- }
- }
- else if ( hotspotType == EBodyHotspot )
- {
- if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_COMPOSE );
- }
- else if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- ChangeMskCommandL( R_FSE_QTN_MSK_CALL );
- }
- else if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchURLBin ||
- currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchScheme )
- {
- TInt schemaLinkType = ResolveBodyTextSchemaUrlTypeL( currentBodyHotSpotData );
- switch ( schemaLinkType )
- {
- case EFocusOnEMailInBodyText:
- ChangeMskCommandL( R_FSE_QTN_MSK_COMPOSE );
- break;
- case EFocusOnNumberWithinMessage:
- ChangeMskCommandL( R_FSE_QTN_MSK_CALL );
- break;
- default:
- ChangeMskCommandL( R_FSE_QTN_MSK_OPENURL );
- break;
- }
- }
- }
- else // if hotspot is not known
- {
- //it will set context menu for email (reply, forward, etc.)
- ChangeMskCommandL( R_FSE_QTN_MSK_BODY_MENU );
- }
- }
- else
- {
- //it will set context menu for email (reply, forward, etc.)
- ChangeMskCommandL( R_FSE_QTN_MSK_BODY_MENU );
- }
- }
- }
-
-// CFSEmailUiMailViewerVisualiser::OfferEventL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::OfferEventL(const TAlfEvent& aEvent)
- {
- FUNC_LOG;
- // Consume most keys to be safe. Let only few keys to flow to
- // text viewer because text viewer does some unexcepted actions
- // with some keys events (at least left arrow and 0 keys)
- TBool consumed( ETrue );
-
- // Handle key presses if we are ready to process them
- if ( iAsyncProcessComplete && !iAppUi.ViewSwitchingOngoing() && aEvent.IsKeyEvent() )
- {
- // Check keyboard shortcuts on key down event since half-QWERTY keyboard
- // has shortcuts on keys which do not send key event at all
- if ( aEvent.Code() == EEventKeyDown )
- {
- TInt shortcutCommand =
- iAppUi.ShortcutBinding().CommandForShortcutKey( aEvent.KeyEvent(),
- CFSEmailUiShortcutBinding::EContextMailViewer );
- if ( shortcutCommand != KErrNotFound )
- {
- HandleCommandL( shortcutCommand );
- }
- }
-
- // Update MSK label when key released to avoid constant updating
- // on fast scrolling
- else if ( aEvent.Code() == EEventKeyUp )
- {
- SetMskL();
- }
-
- // Handle key events
- else if ( aEvent.Code() == EEventKey )
- {
- // Swap right and left controls in mirrored layout
- TInt scanCode = aEvent.KeyEvent().iScanCode;
- if ( AknLayoutUtils::LayoutMirrored() )
- {
- if ( scanCode == EStdKeyRightArrow ) scanCode = EStdKeyLeftArrow;
- else if ( scanCode == EStdKeyLeftArrow ) scanCode = EStdKeyRightArrow;
- }
-
- switch ( scanCode )
- {
- case EStdKeyRightArrow:
- {
- // Open action menu if it is available to current hotspot item
- LaunchActionMenuL();
- break;
- }
- case EStdKeyYes:
- {
- // call current header hotspot name or current body hotspot number
- CallHotSpotAddressL();
- break;
- }
- case EStdKeyDownArrow:
- case EStdKeyUpArrow:
- case EStdKeyNull: // simulated keys events
- {
- // These keys are passed on to TextViewer
- consumed = EFalse;
- break;
- }
- default:
- {
- break;
- }
- }
- }
- }
-
- return consumed;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ClearMailViewer
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ClearMailViewer()
- {
- FUNC_LOG;
- iAppUi.Display().Roster().Hide( ControlGroup() );
- if ( iTextViewer )
- {
- if ( iTextViewerControl )
- {
- ControlGroup().Remove( iTextViewerControl );
- }
- if ( iControl )
- {
- ControlGroup().Remove( iControl );
- }
- delete iTextViewer; iTextViewer = NULL;
- delete iTextViewerControl; iTextViewerControl = NULL;
- delete iControl; iControl = NULL;
- }
- if ( iViewerRichText )
- {
- iViewerRichText->Reset();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::UpdateMailViewerL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::UpdateMailViewerL()
- {
- FUNC_LOG;
- if ( iFirstStartCompleted ) // Safety
- {
- ClearMailViewer();
-
- // Create text viewer and store control pointer
- iTextViewer = CFsTextViewer::NewL( iEnv );
- iTextViewerControl = iTextViewer->GetControl();
- iTextViewer->SetObserver( this );
-
- // Set the artificial shortcut keys used to command the viewer to scroll up/down.
- // These are simulated when corresponding shortcut command is received from the
- // standard shortcut binder of FsEmailUI.
- CFsTextViewerKeys* keys = CFsTextViewerKeys::NewL();
- keys->SetKeyPgUp( EKeyPageUp );
- keys->SetKeyPgDown( EKeyPageDown );
- keys->SetKeyScrollUp( KKeyCodeArtificialScrollUp );
- keys->SetKeyScrollDown( KKeyCodeArtificialScrollDown );
- iTextViewer->SetCustomKeys( keys );
-
- iTextViewer->SetMirroring( AknLayoutUtils::LayoutMirrored() );
-
- iViewerRichText->RefreshRichTextL( *iTextViewer, *iMessage, *iMailBox );
-
- // These need to be called before setting text to the viewer.
- iTextViewer->SetLeftMargin( iAppUi.LayoutHandler()->ViewerLeftMarginInPixels() );
- iTextViewer->SetRightMargin( iAppUi.LayoutHandler()->ViewerRightMarginInPixels() );
-
- SetActionButtonIconAndHighLight();
-
- iTextViewer->SetTextL( &iViewerRichText->RichText(), iSmDictionary );
-
- // ownerships are transfered to AlfEnviroment.
- //<cmail> Compared to S60 3.2.3 in S60 5.0 Alf offers the key events in
- // opposite order.
- // Create control for capturing left and right navigation events
- iControl = CFreestyleEmailUiMailViewerControl::NewL( iEnv, *this );
- ControlGroup().AppendL( iControl );
- ControlGroup().AppendL( iTextViewerControl );
- //</cmail>
-
- iLayoutChangedWhileNotActive = EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::SetActionButtonIconAndHighLight
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::SetActionButtonIconAndHighLight()
- {
- FUNC_LOG;
- CFreestyleEmailUiTextureManager* textureMgr = iAppUi.FsTextureManager();
- CFSEmailUiLayoutHandler* layoutMgr = iAppUi.LayoutHandler();
-
- // get textures from texture manager
- CAlfTexture& menuTexture = textureMgr->TextureByIndex( EListControlMenuIcon );
- CAlfTexture& selectortexture = textureMgr->TextureByIndex( EViewerHighlightTexture );
-
- iTextViewer->SetLiteLineBg( selectortexture, layoutMgr->ViewerSelectorOpacity() );
-
- iTextViewer->SetActionButton( menuTexture, 1 );
- iTextViewer->SetActionButtonMargin( layoutMgr->ViewerActionMenuIconMargin() );
- TSize btnSize = layoutMgr->ViewerActionMenuIconSize();
- iTextViewer->SetActionButtonSize( btnSize.iWidth, btnSize.iHeight );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::LaunchActionMenuL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::LaunchActionMenuL()
- {
- FUNC_LOG;
- // check that current hotspot is visible
- TInt ignoreThis; // not used here. Only return value is used not this mandatory reference parameter
- TBool visibleHotsSpot = iTextViewer->GetVisibleFocusedHotspotLine( ignoreThis );
- if( visibleHotsSpot )
- {
- // Remove items
- CFSEmailUiActionMenu::RemoveAllL();
-
- // check which hotspot is active.
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
-
- TActionMenuType currentActionMenuType = ENoActionMenuFocused;
- if( hotspotType == EHeaderHotspot && (
- currentHeaderHotSpotData.iType == ETypeFromAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeToAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeCcAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeBccAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeEmailAddress ) )
- {
- currentActionMenuType = EFocusOnNameInAddressField;
- }
- else if( hotspotType == EHeaderHotspot && (
- currentHeaderHotSpotData.iType == ETypeAttachment ) )
- {
- currentActionMenuType = EFocusOnAttachmentName;
- }
- else if( hotspotType == EHeaderHotspot && (
- currentHeaderHotSpotData.iType == ETypeAttachments ) )
- {
- currentActionMenuType = EFocusOnAttachmentsText;
- }
- else if( hotspotType == EBodyHotspot &&
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- currentActionMenuType = EFocusOnNumberWithinMessage;
- }
- else if( hotspotType == EBodyHotspot && ( currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchURLBin ||
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchScheme ) )
- {
- TInt schemaLinkType = ResolveBodyTextSchemaUrlTypeL( currentBodyHotSpotData );
- switch ( schemaLinkType )
- {
- case EFocusOnEMailInBodyText:
- currentActionMenuType = EFocusOnEMailInBodyText;
- break;
- case EFocusOnNumberWithinMessage:
- currentActionMenuType = EFocusOnNumberWithinMessage;
- break;
- default:
- currentActionMenuType = EFocusOnHyperLinkWithinMessage;
- break;
-
- }
- }
- else if( hotspotType == EBodyHotspot &&
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- currentActionMenuType = EFocusOnEMailInBodyText;
- }
-
-
- if( currentActionMenuType != ENoActionMenuFocused )
- {
- CreateActionMenuItemsL( currentActionMenuType );
- TActionMenuCustomItemId menuResult = CFSEmailUiActionMenu::ExecuteL( EFscCenter );
- if ( menuResult != FsEActionMenuCasItemSelectedAndExecuted &&
- menuResult != FsEActionMenuDismissed )
- {
- HandleActionMenuCommandL( menuResult, currentActionMenuType );
- }
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ResolveBodyTextSchemaUrlTypeL
-// -----------------------------------------------------------------------------
-TInt CFSEmailUiMailViewerVisualiser::ResolveBodyTextSchemaUrlTypeL( CFindItemEngine::SFoundItem aHotSpot )
- {
- FUNC_LOG;
- TInt ret( EFocusOnHyperLinkWithinMessage );
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( aHotSpot );
- if ( schemeText->FindC( KMailtoPrefix ) == 0 )
- {
- ret = EFocusOnEMailInBodyText;
- }
- else if ( schemeText->FindC( KCallPrefix ) == 0 ||
- schemeText->FindC( KTelPrefix ) == 0 ||
- schemeText->FindC( KSmsPrefix ) == 0 ||
- schemeText->FindC( KMmsPrefix ) == 0 ||
- schemeText->FindC( KVoipPrefix ) == 0 )
- {
- ret = EFocusOnNumberWithinMessage;
- }
- else
- {
- ret = EFocusOnHyperLinkWithinMessage;
- }
- CleanupStack::PopAndDestroy( schemeText );
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::SetActionMenuIconVisbilityL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::SetActionMenuIconVisbilityL()
- {
- FUNC_LOG;
- if ( iTextViewer )
- {
- if ( ShowActionsMenuInOptionsL() )
- {
- iTextViewer->ShowActionButtonForCurrentHighlightedHotspotL();
- }
- else
- {
- iTextViewer->HideActionButtonFromCurrentHighlightedHotspot();
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CreateActionMenuItemsL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CreateActionMenuItemsL(
- TActionMenuType aActionMenuType )
- {
- FUNC_LOG;
- // See the ui spec for all the right action menus according to
- // currently selected hotspot
- RArray<TActionMenuCustomItemId> uids;
- CleanupClosePushL( uids );
- if ( aActionMenuType == EFocusOnNumberWithinMessage )
- {
- uids.Append( FsEActionMenuCall );
- uids.Append( FsEActionMenuAddToContacts );
- // Drop FsEActionMenuCreateMessage from sip: addresses
- // First check which hotspot is active.
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- if ( schemeText && schemeText->FindC( KVoipPrefix ) != 0 )
- {
- uids.Append( FsEActionMenuCreateMessage );
- }
- CleanupStack::PopAndDestroy( schemeText );
- if ( TFsEmailUiUtility::IsRemoteLookupSupported( *iMailBox ) )
- {
- uids.Append( FsEActionMenuRemoteLookup );
- }
- }
- else if ( aActionMenuType == EFocusOnNameInAddressField ||
- aActionMenuType == EFocusOnEMailInBodyText )
- {
- uids.Append( FsEActionMenuCall );
- uids.Append( FsEActionMenuCreateMessage );
- uids.Append( FsEActionMenuCreateEmail );
- uids.Append( FsEActionMenuContactDetails );
- uids.Append( FsEActionMenuAddToContacts );
- if ( TFsEmailUiUtility::IsRemoteLookupSupported( *iMailBox ) )
- {
- uids.Append( FsEActionMenuRemoteLookup );
- }
- }
- else if ( aActionMenuType == EFocusOnHyperLinkWithinMessage )
- {
- uids.Append( FsEActionMenuOpenInWeb );
- uids.Append( FsEActionMenuOpenInIntranet );
- uids.Append( FsEActionMenuBookmark );
- }
- else if ( aActionMenuType == EFocusOnAttachmentName )
- {
- if ( ShowOpenAttachmentOptionL() )
- {
- uids.Append( FsEActionAttachmentOpen );
- }
- if ( ShowDownloadOptionL() )
- {
- uids.Append( FsEActionAttachmentDownload );
- }
- if ( ShowCancelDownloadOption() )
- {
- uids.Append( FsEActionAttachmentCancelDownload );
- }
- if ( ShowSaveAttachmentOptionL() )
- {
- uids.Append( FsEActionAttachmentSave );
- }
- if ( ShowOpenAttachmentOptionL() )
- {
- uids.Append( FsEActionAttachmentClearFetchedContent );
- }
- }
- else if ( aActionMenuType == EFocusOnAttachmentsText )
- {
- if ( ShowOpenAttachmentOptionL() )
- {
- uids.Append( FsEActionAttachmentViewAll );
- }
- if ( ShowDownloadOptionL() )
- {
- uids.Append( FsEActionAttachmentDownloadAll );
- }
- if ( ShowCancelDownloadOption() )
- {
- uids.Append( FsEActionAttachmentCancelAllDownloads );
- }
- if ( ShowSaveAttachmentOptionL() )
- {
- uids.Append( FsEActionAttachmentSaveAll );
- }
- }
-
- TInt uidsCount = uids.Count();
- for ( TInt i = 0; i < uidsCount; i++ )
- {
- CFSEmailUiActionMenu::AddCustomItemL( uids[i] );
- }
- CleanupStack::PopAndDestroy( &uids );
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleActionMenuCommandL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleActionMenuCommandL(
- TActionMenuCustomItemId aSelectedActionMenuItem,
- TActionMenuType aActionMenuType )
- {
- FUNC_LOG;
- // check which hotspot is active.
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if ( aActionMenuType == EFocusOnNumberWithinMessage )
- {
- switch ( aSelectedActionMenuItem )
- {
- case FsEActionMenuCall: // Call
- {
- CallToBodyHotSpotNumberL( currentBodyHotSpotData );
- }
- break;
- case FsEActionMenuAddToContacts: // Add to Contacts
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC(
- currentBodyHotSpotData );
- SavePhoneNumberAsContactL( *hotspotText );
- CleanupStack::PopAndDestroy( hotspotText );
- }
- break;
- case FsEActionMenuCreateMessage: // Create message
- {
- CreateMessageL();
- }
- break;
- case FsEActionMenuRemoteLookup: // Remote lookup
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC(
- currentBodyHotSpotData );
- LaunchRemoteLookupL( *hotspotText );
- CleanupStack::PopAndDestroy( hotspotText );
- }
- break;
- }
- }
- else if ( aActionMenuType == EFocusOnNameInAddressField )
- {
- switch( aSelectedActionMenuItem )
- {
- case FsEActionMenuCall: // Call
- {
- CallHotSpotAddressL();
- }
- break;
- case FsEActionMenuCreateMessage: // Create message
- {
- CreateMessageL();
- }
- break;
- case FsEActionMenuCreateEmail: // Create message
- {
- ComposeMailL();
- }
- break;
- case FsEActionMenuContactDetails: // Contact details
- {
- OpenContactDetailsL();
- }
- break;
- case FsEActionMenuAddToContacts: // Add to Contacts
- {
- HBufC* emailAddress =
- iViewerRichText->GetHeaderHotspotEmailAddressLC(
- currentHeaderHotSpotData );
- SaveEmailAsContactL( *emailAddress );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- break;
- case FsEActionMenuRemoteLookup: // Remote lookup
- {
- HBufC* emailAddress =
- iViewerRichText->GetHeaderHotspotEmailAddressLC(
- currentHeaderHotSpotData );
- LaunchRemoteLookupL( *emailAddress );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- break;
- }
- }
- else if ( aActionMenuType == EFocusOnHyperLinkWithinMessage )
- {
- switch ( aSelectedActionMenuItem )
- {
- case FsEActionMenuOpenInWeb: // Open in web
- {
- OpenHotSpotUrlInBrowserL( currentBodyHotSpotData );
- }
- break;
- case FsEActionMenuOpenInIntranet: // Open in intranet
- {
- OpenLinkInIntranetL( EFalse );
- }
- break;
- case FsEActionMenuBookmark: // Bookmark
- {
- AddToBookmarksL( currentBodyHotSpotData );
- }
- break;
- }
- }
- else if ( aActionMenuType == EFocusOnAttachmentName ||
- aActionMenuType == EFocusOnAttachmentsText )
- {
- switch ( aSelectedActionMenuItem )
- {
- case FsEActionAttachmentOpen: // Open single attachment
- {
- OpenAttachmentL();
- }
- break;
- case FsEActionAttachmentViewAll: // Open attachments list
- {
- OpenAttachmentsViewL();
- }
- break;
- case FsEActionAttachmentDownload: // Dowload one
- case FsEActionAttachmentDownloadAll : /// all attachments
- {
- StartDowloadingAttachmentsL();
- }
- break;
- case FsEActionAttachmentCancelDownload: // Cancel one / all downloads
- case FsEActionAttachmentCancelAllDownloads:
- {
- CancelDowloadingAttachmentsL();
- }
- break;
- case FsEActionAttachmentSave: // Save one / all attachments
- case FsEActionAttachmentSaveAll:
- {
- SaveAllAttachmentsL();
- }
- break;
- case FsEActionAttachmentClearFetchedContent:
- {
- RemoveFetchedAttachmentL();
- }
- break;
- }
- }
- else if ( aActionMenuType == EFocusOnEMailInBodyText )
- {
- switch ( aSelectedActionMenuItem )
- {
- case FsEActionMenuCall: // Call
- {
- CallHotSpotAddressL();
- }
- break;
- case FsEActionMenuCreateMessage: // Create message
- {
- CreateMessageL();
- }
- break;
- case FsEActionMenuCreateEmail: // Create message
- {
- ComposeMailL();
- }
- break;
- case FsEActionMenuContactDetails: // Contact details
- {
- OpenContactDetailsL();
- }
- break;
- case FsEActionMenuAddToContacts: // Add to Contacts
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC(
- currentBodyHotSpotData );
- if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- SavePhoneNumberAsContactL( *hotspotText );
- }
- else if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- SaveEmailAsContactL( *hotspotText );
- }
- else if ( currentBodyHotSpotData.iItemType ==
- CFindItemEngine::EFindItemSearchScheme )
- {
- if ( hotspotText->FindC( KMailtoPrefix ) == 0 )
- {
- // Save email as contact, address mailto: strip is done in SaveEmailAsContactL
- SaveEmailAsContactL( *hotspotText );
- }
- }
- CleanupStack::PopAndDestroy( hotspotText );
- }
- break;
- case FsEActionMenuRemoteLookup: // Remote lookup
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC(
- currentBodyHotSpotData );
- LaunchRemoteLookupL( *hotspotText );
- CleanupStack::PopAndDestroy( hotspotText );
- }
- break;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OpenContactDetailsL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::OpenContactDetailsL()
- {
- FUNC_LOG;
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
-
- HBufC* emailAddress = NULL;
- if ( hotspotType == EHeaderHotspot )
- {
- emailAddress = iViewerRichText->GetHeaderHotspotEmailAddressLC( currentHeaderHotSpotData );
- }
- else if ( hotspotType == EBodyHotspot )
- {
- emailAddress = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- // Delete "mailto:" prefix if found
- if ( emailAddress->FindC( KMailtoPrefix ) == 0 )
- {
- emailAddress->Des().Delete( 0, KMailtoPrefix().Length() );
- }
- }
- else
- {
- return;
- }
-
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->ShowContactDetailsL(
- *emailAddress, EContactUpdateEmail, NULL );
-
- CleanupStack::PopAndDestroy( emailAddress );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::LaunchHtmlViewerL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::LaunchHtmlViewerL()
- {
- FUNC_LOG;
- if ( MessagePartFullyFetchedL( EMessageHtmlBodyPart ) )
- {
- THtmlViewerActivationData htmlData;
- htmlData.iActivationDataType = THtmlViewerActivationData::EMailMessage;
- htmlData.iMailBoxId = iMessage->GetMailBoxId();
- htmlData.iFolderId = iMessage->GetFolderId();
- htmlData.iMessageId = iMessage->GetMessageId();
- htmlData.iEmbeddedMessageMode = iEmbeddedMessageMode;
- TPckgBuf<THtmlViewerActivationData> pckgData( htmlData );
-
- iAppUi.EnterFsEmailViewL( HtmlViewerId, KHtmlViewerOpenNew, pckgData );
- }
- else
- {
- StartWaitedFetchingL( EMessageHtmlBodyPart );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::LaunchRemoteLookupL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::LaunchRemoteLookupL( const TDesC& aDes ) const
- {
- FUNC_LOG;
- // this method assumes that remote lookup is available with current plugin.
- HBufC* textData = HBufC::NewLC( aDes.Length() );
- textData->Des().Append( aDes );
- if ( textData->FindC( KMailtoPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KMailtoPrefix().Length() );
- }
- else if ( textData->FindC( KCallPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KCallPrefix().Length() );
- }
- else if ( textData->FindC( KTelPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KTelPrefix().Length() );
- }
- else if ( textData->FindC( KSmsPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KSmsPrefix().Length() );
- }
- else if ( textData->FindC( KMmsPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KMmsPrefix().Length() );
- }
- else if ( textData->FindC( KVoipPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KVoipPrefix().Length() );
- }
-
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->LaunchRemoteLookupWithQueryL( *iMailBox, *textData );
- CleanupStack::PopAndDestroy( textData );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::AddToBookmarksL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::AddToBookmarksL(
- const CFindItemEngine::SFoundItem& aBodyHotspotData ) const
- {
- FUNC_LOG;
- HBufC* hotspotText =
- iViewerRichText->GetHotspotTextLC( aBodyHotspotData );
-
- RFavouritesSession fSession;
- User::LeaveIfError( fSession.Connect() );
- CleanupClosePushL( fSession );
-
- RFavouritesDb favoris;
- User::LeaveIfError( favoris.Open( fSession, KBrowserBookmarks ) );
- CleanupClosePushL( favoris );
-
- CFavouritesItem *favorisItem = CFavouritesItem::NewLC();
- favorisItem->SetType( CFavouritesItem::EItem );
- favorisItem->SetUrlL( *hotspotText );
- // Should be less than KFavouritesMaxName ( 50 )
- if ( hotspotText->Length() > KFavouritesMaxName )
- {
- favorisItem->SetNameL( hotspotText->Left( KFavouritesMaxName ) );
- }
- else
- {
- favorisItem->SetNameL( *hotspotText );
- }
-
- favorisItem->SetParentFolder( KFavouritesRootUid );
-
- TInt error = favoris.Add( *favorisItem, ETrue );
-
- CleanupStack::PopAndDestroy( favorisItem );
- CleanupStack::PopAndDestroy( &favoris );
- CleanupStack::PopAndDestroy( &fSession );
-
- CleanupStack::PopAndDestroy( hotspotText );
-
- if ( error == KErrNone )
- {
- TFsEmailUiUtility::ShowInfoNoteL(
- R_FREESTYLE_EMAIL_UI_VIEWER_BOOKMARK_ADDED, ETrue );
- }
- else // Error in bookmark creation, show could not complete message
- {
- TFsEmailUiUtility::ShowErrorNoteL(
- R_FREESTYLE_EMAIL_ERROR_GENERAL_UNABLE_TO_COMPLETE, ETrue );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CallHotSpotAddressL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CallHotSpotAddressL()
- {
- FUNC_LOG;
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if( hotspotType == EHeaderHotspot && currentHeaderHotSpotData.iType == ETypeFromAddressDisplayName )
- {
- HBufC* emailAddress = iViewerRichText->GetHeaderHotspotEmailAddressLC( currentHeaderHotSpotData );
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->FindAndCallToContactByEmailL( *emailAddress,
- iAppUi.GetActiveMailbox(), this, ETrue /*use call sender text*/);
- CleanupStack::PopAndDestroy( emailAddress );
- }
- else if( ( hotspotType == EHeaderHotspot &&
- ( currentHeaderHotSpotData.iType == ETypeToAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeCcAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeBccAddressDisplayName ||
- currentHeaderHotSpotData.iType == ETypeEmailAddress )
- )
- )
- {
- HBufC* emailAddress = iViewerRichText->GetHeaderHotspotEmailAddressLC( currentHeaderHotSpotData );
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->FindAndCallToContactByEmailL( *emailAddress,
- iAppUi.GetActiveMailbox(), this, EFalse /*use call sender text*/);
- CleanupStack::PopAndDestroy( emailAddress );
- }
- else if( hotspotType == EBodyHotspot &&
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- HBufC* emailAddress = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->FindAndCallToContactByEmailL( *emailAddress,
- iAppUi.GetActiveMailbox(), this, EFalse );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- else if( hotspotType == EBodyHotspot &&
- currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- CallToBodyHotSpotNumberL( currentBodyHotSpotData );
- }
- else if ( currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchScheme )
- {
- // Get scheme text and make sure there is "mailto:" text or "call:" text
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- if ( schemeText && schemeText->FindC( KMailtoPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KMailtoPrefix().Length() );
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->FindAndCallToContactByEmailL( *schemeText,
- iAppUi.GetActiveMailbox(), this, EFalse);
- }
- else if ( schemeText->FindC( KCallPrefix ) == 0 ||
- schemeText->FindC( KTelPrefix ) == 0 ||
- schemeText->FindC( KSmsPrefix ) == 0 ||
- schemeText->FindC( KMmsPrefix ) == 0 ||
- schemeText->FindC( KVoipPrefix ) == 0 )
- {
- CallToBodyHotSpotNumberL( currentBodyHotSpotData );
- }
- CleanupStack::PopAndDestroy( schemeText );
- }
-
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CreateMessageL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CreateMessageL() const
- {
- FUNC_LOG;
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if( hotspotType == EHeaderHotspot )
- {
- HBufC* emailAddress = iViewerRichText->GetHeaderHotspotEmailAddressLC( currentHeaderHotSpotData );
- CFSEmailUiContactHandler* cntHandlerInstance = CFsDelayedLoader::InstanceL()->GetContactHandlerL();
- cntHandlerInstance->FindAndCreateMsgToContactByEmailL( *emailAddress, iAppUi.GetActiveMailbox() );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- else if( hotspotType == EBodyHotspot )
- {
- // Sending based on email address, goes to contact handler
- if ( currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- HBufC* emailAddress = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- CFSEmailUiContactHandler* cntHandlerInstance = CFsDelayedLoader::InstanceL()->GetContactHandlerL();
- cntHandlerInstance->FindAndCreateMsgToContactByEmailL( *emailAddress, iAppUi.GetActiveMailbox() );
- CleanupStack::PopAndDestroy( emailAddress );
- }
- // Sending based on found number, goes to utility class
- else if ( currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- HBufC* hotspotText = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- TFsEmailUiUtility::ShowCreateMessageQueryL( *hotspotText );
- CleanupStack::PopAndDestroy( hotspotText );
- }
- else if ( currentBodyHotSpotData.iItemType == CFindItemEngine::EFindItemSearchScheme )
- {
- // Get scheme text and make sure there is "mailto:" text or "call:" text
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- if ( schemeText && ( schemeText->FindC( KMailtoPrefix ) == 0 ||
- schemeText->FindC( KVoipPrefix ) == 0) )
- {
- schemeText->Des().Delete( 0, KMailtoPrefix().Length() );
- CFSEmailUiContactHandler* cntHandlerInstance = CFsDelayedLoader::InstanceL()->GetContactHandlerL();
- cntHandlerInstance->FindAndCreateMsgToContactByEmailL( *schemeText, iAppUi.GetActiveMailbox() );
- }
- else if ( schemeText && schemeText->FindC( KCallPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KCallPrefix().Length() );
- TFsEmailUiUtility::ShowCreateMessageQueryL( *schemeText );
- }
- else if ( schemeText && schemeText->FindC( KTelPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KTelPrefix().Length() );
- TFsEmailUiUtility::ShowCreateMessageQueryL( *schemeText );
- }
- else if ( schemeText && schemeText->FindC( KSmsPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KSmsPrefix().Length() );
- TFsEmailUiUtility::ShowCreateMessageQueryL( *schemeText );
- }
- else if ( schemeText && schemeText->FindC( KMmsPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KMmsPrefix().Length() );
- TFsEmailUiUtility::ShowCreateMessageQueryL( *schemeText );
- }
- CleanupStack::PopAndDestroy( schemeText );
- }
- }
- }
-
-TBool CFSEmailUiMailViewerVisualiser::IsCopyToClipBoardAvailableL() const
- {
- FUNC_LOG;
- TBool available = EFalse;
- TInt ignoreThis( 0 );
- TBool visibleHotsSpot =
- iTextViewer->GetVisibleFocusedHotspotLine( ignoreThis );
-
- // Copy to clipboard is hidden if there's no visible hotspot focus
- if ( visibleHotsSpot )
- {
- // Check the type of focused hotspot
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL(
- currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if ( hotspotType == EBodyHotspot )
- {
- // copying is available for all body hotspots
- available = ETrue;
- }
- else if ( hotspotType == EHeaderHotspot )
- {
- // in header, copying is available for email addresses
- switch ( currentHeaderHotSpotData.iType )
- {
- case ETypeFromAddressDisplayName:
- case ETypeToAddressDisplayName:
- case ETypeCcAddressDisplayName:
- case ETypeBccAddressDisplayName:
- case ETypeEmailAddress:
- available = ETrue;
- break;
- default:
- available = EFalse;
- break;
- }
- }
- else // hotspotType == ENoHotspot
- {
- available = EFalse;
- }
- }
-
- return available;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CopyCurrentHotspotToClipBoardL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CopyCurrentHotspotToClipBoardL() const
- {
- FUNC_LOG;
- TInt ignoreThis( 0 );
- TBool visibleHotsSpot =
- iTextViewer->GetVisibleFocusedHotspotLine( ignoreThis );
-
- // Copy to clipboard is disabled if there's no visible hotspot focus
- if ( visibleHotsSpot )
- {
- HBufC* clipBoardText = NULL;
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if ( hotspotType == EHeaderHotspot )
- {
- switch ( currentHeaderHotSpotData.iType )
- {
- case ETypeFromAddressDisplayName:
- case ETypeToAddressDisplayName:
- case ETypeCcAddressDisplayName:
- case ETypeBccAddressDisplayName:
- {
- // Get email address attachned to display name, cropped display name has no use
- clipBoardText = iViewerRichText->GetEmailAddressLC( currentHeaderHotSpotData );
- }
- break;
- case ETypeEmailAddress:
- {
- clipBoardText = iViewerRichText->GetHotspotTextLC( currentHeaderHotSpotData );
- }
- break;
- }
- }
- else if ( hotspotType == EBodyHotspot )
- {
- clipBoardText = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- }
-
- if ( clipBoardText )
- {
- CClipboard* cb = CClipboard::NewForWritingLC( CCoeEnv::Static()->FsSession() );
- cb->StreamDictionary().At( KClipboardUidTypePlainText );
- CPlainText* plainText = CPlainText::NewL();
- CleanupStack::PushL( plainText );
- plainText->InsertL( 0 , *clipBoardText );
- plainText->CopyToStoreL( cb->Store(), cb->StreamDictionary(), 0, plainText->DocumentLength() );
- CleanupStack::PopAndDestroy( plainText );
- cb->CommitL();
- CleanupStack::PopAndDestroy( cb );
- CleanupStack::PopAndDestroy( clipBoardText );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowOpenAttachmentOptionL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowOpenAttachmentOptionL()
- {
- FUNC_LOG;
- TInt ret = EFalse;
-
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
-
- // The Open option is always available when focus on the multiple
- // attachments item.
- if ( attachments.Count() > 1 )
- {
- ret = ETrue;
- }
- // When focus on single attachment item, the Open is shown only when the
- // attachment is fully downloaded
- else if ( attachments.Count() == 1 )
- {
- TPartData partData = MailData();
- partData.iMessagePartId = attachments[0]->GetPartId();
- if ( iAppUi.DownloadInfoMediator() && !iAppUi.DownloadInfoMediator()->IsDownloadableL( partData ) &&
- !iAppUi.DownloadInfoMediator()->IsDownloading( partData.iMessagePartId ) )
- {
- ret = ETrue;
- }
- }
- else
- {
- ret = EFalse;
- }
-
- CleanupStack::PopAndDestroy( &attachments );
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowSaveAttachmentOptionL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowSaveAttachmentOptionL()
- {
- FUNC_LOG;
- // Save (all) is displayed if there are no ongoing downloads.
- TBool saveAvailable = !ShowCancelDownloadOption();
-
- // When viewing an embedded message object, saving needs to be disabled
- // in case there are any attachments of message type. This is due to
- // limitations in the Activesync plugin.
- if ( saveAvailable && iEmbeddedMessageMode )
- {
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
-
- for ( TInt i = 0 ; i < attachments.Count() && saveAvailable ; ++i )
- {
- const TDesC& attName = attachments[i]->AttachmentNameL();
- const TDesC& attMime = attachments[i]->GetContentType();
- TFileType attType = TFsEmailUiUtility::GetFileType( attName, attMime );
- if ( attType == EMessageType )
- {
- saveAvailable = EFalse;
- }
- }
-
- CleanupStack::PopAndDestroy( &attachments );
- }
- return saveAvailable;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowDownloadOptionL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowDownloadOptionL()
- {
- FUNC_LOG;
- TBool retVal = EFalse;
-
- TPartData partData = MailData();
-
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
- TInt attachmentsCount = attachments.Count();
- for ( TInt i = 0; i < attachmentsCount; i++ )
- {
- partData.iMessagePartId = attachments[i]->GetPartId();
- if ( iAppUi.DownloadInfoMediator() && iAppUi.DownloadInfoMediator()->IsDownloadableL( partData ) )
- {
- retVal = ETrue;
- break;
- }
- }
- CleanupStack::PopAndDestroy( &attachments );
- return retVal;
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowDownloadOptionL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowMskDownloadOptionL()
- {
- FUNC_LOG;
- // Check status only if download status might have changed
- TBool ret( EFalse );
- if ( iMessage && iMessage->IsFlagSet(EFSMsgFlag_Attachments) )
- {
- TPartData partData = MailData();
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
- // Safety, this function should not be called for any other amount than 1
- if ( attachments.Count() == 1 )
- {
- partData.iMessagePartId = attachments[0]->GetPartId();
- if ( iAppUi.DownloadInfoMediator() && iAppUi.DownloadInfoMediator()->IsDownloadableL( partData ) )
- {
- ret = ETrue;
- }
- }
- CleanupStack::PopAndDestroy( &attachments );
- }
- return ret;
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowCancelDownloadOption
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowCancelDownloadOption()
- {
- FUNC_LOG;
- TBool ret( EFalse );
- if ( iMessage && iAppUi.DownloadInfoMediator() )
- {
- ret = iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads(
- iMessage->GetMessageId() );
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OpenAttachmentL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::OpenAttachmentL()
- {
- FUNC_LOG;
- if ( !iMessage )
- {
- User::Leave( KErrNotReady );
- }
-
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
-
- // start downloading if not yet downloaded.
- if ( ShowDownloadOptionL() )
- {
- StartDowloadingAttachmentsL();
- }
- else if ( ShowCancelDownloadOption() ) // show download ongoing info
- {
- TFsEmailUiUtility::ShowInfoNoteL(
- R_FSE_VIEWER_NOTE_ATTACHMENT_DOWNLOADING_PROGRESS );
- }
- else // open if attachment is already downloaded
- {
- TInt attachmentsCount = attachments.Count();
- if ( attachmentsCount )
- {
- // <cmail>
- TFsEmailUiUtility::OpenAttachmentL( *attachments[attachmentsCount-1] );
- // </cmail>
- }
- }
-
- CleanupStack::PopAndDestroy( &attachments );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OpenAttachmentsViewL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::OpenAttachmentsViewL()
- {
- FUNC_LOG;
- // give pointer to current for attachments list view
- TAttachmentListActivationData params;
- params.iMailBoxId = iMessage->GetMailBoxId();
- params.iFolderId = iMessage->GetFolderId();
- params.iMessageId = iMessage->GetMessageId();
- params.iEmbeddedMsgMode = iEmbeddedMessageMode;
- // use package buffer to pass the params
- TPckgBuf<TAttachmentListActivationData> buf( params );
- TUid emptyCustomMessageId = { 0 };
- iAppUi.EnterFsEmailViewL(
- AttachmentMngrViewId, emptyCustomMessageId, buf );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StartDowloadingAttachmentsL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::StartDowloadingAttachmentsL()
- {
- FUNC_LOG;
- TPartData partData = MailData();
-
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
- TInt attachmentsCount = attachments.Count();
- for( TInt i = 0; i < attachmentsCount; i++)
- {
- if ( attachments[i]->FetchLoadState() == EFSNone ||
- attachments[i]->FetchLoadState() == EFSPartial )
- {
- partData.iMessagePartId = attachments[i]->GetPartId();
- if ( iAppUi.DownloadInfoMediator() )
- {
- iAppUi.DownloadInfoMediator()->DownloadL( partData );
- }
- }
- }
- CleanupStack::PopAndDestroy( &attachments );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CancelDowloadingAttachmentsL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CancelDowloadingAttachmentsL()
- {
- FUNC_LOG;
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
- TInt attachmentsCount = attachments.Count();
-
- // ask confirmation for cancel
- TInt promptTextId = R_FSE_VIEWER_CANCEL_DOWNLOAD_QUERY;
- if ( attachmentsCount > 1 )
- {
- promptTextId = R_FSE_VIEWER_CANCEL_DOWNLOADS_QUERY;
- }
-
- if ( TFsEmailUiUtility::ShowConfirmationQueryL(promptTextId) && iAppUi.DownloadInfoMediator() )
- {
- for ( TInt i = 0 ; i < attachmentsCount ; i++ )
- {
- TFSPartFetchState fetchState = attachments[i]->FetchLoadState();
- if ( fetchState == EFSPartial || fetchState == EFSNone )
- {
- iAppUi.DownloadInfoMediator()->CancelDownloadL( attachments[i]->GetPartId() );
- }
- }
- }
- CleanupStack::PopAndDestroy( &attachments );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::SaveAllAttachmentsL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::SaveAllAttachmentsL()
- {
- FUNC_LOG;
- TFileName fileName;
- if ( TFsEmailUiUtility::ShowSaveFolderDialogL( fileName ) )
- {
- // start downloading attachemts which are not downloaded.
- // Save all attachment which all already downloaded
- TPartData partData = MailData();
-
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
- TInt attachmentsCount = attachments.Count();
-
- // <cmail> remove the MRUI part of the message so we
- // don't save unnecessary .ics file
- CFSMailMessagePart* calendarPart = iMessage->FindBodyPartL( KFSMailContentTypeTextCalendar );
- CleanupStack::PushL( calendarPart );
- // </cmail>
-
- TInt savedCount( 0 );
- for ( TInt i = 0; i < attachmentsCount; i++ )
- {
- partData.iMessagePartId = attachments[i]->GetPartId();
- if ( iAppUi.DownloadInfoMediator() && iAppUi.DownloadInfoMediator()->IsDownloadableL( partData ) )
- { // start download and let mediator do the saving
- iAppUi.DownloadInfoMediator()->DownloadAndSaveL( partData, fileName );
- }
- else // save immediately.
- {
- // <cmail>
- if( (calendarPart && partData.iMessagePartId != calendarPart->GetPartId() ||
- !calendarPart) && TFsEmailUiUtility::OkToSaveFileL( fileName, *attachments[i] ) )
- {
- attachments[i]->CopyContentFileL( fileName );
- savedCount++;
- }
- // </cmail>
- }
- }
- if ( savedCount )
- {
- TFsEmailUiUtility::ShowFilesSavedToFolderNoteL( savedCount );
- }
- // <cmail>
- CleanupStack::PopAndDestroy( calendarPart );
- // </cmail>
- CleanupStack::PopAndDestroy( &attachments );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::RemoveFetchedAttachmentL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::RemoveFetchedAttachmentL()
- {
- FUNC_LOG;
- TInt reallyClear =
- TFsEmailUiUtility::ShowConfirmationQueryL( R_FSE_VIEWER_CLEAR_FETCHED_QUERY );
- if ( reallyClear )
- {
- RPointerArray<CFSMailMessagePart> attachments;
- CleanupResetAndDestroyClosePushL( attachments );
- iMessage->AttachmentListL( attachments );
- TInt attachmentsCount = attachments.Count();
- for ( TInt i = 0; i < attachmentsCount; i++ )
- {
- attachments[i]->RemoveContentL();
- }
- CleanupStack::PopAndDestroy( &attachments );
- iShowMskDownloadOption = ShowMskDownloadOptionL();
- SetMskL();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::MailData
-// -----------------------------------------------------------------------------
-TPartData CFSEmailUiMailViewerVisualiser::MailData()
- {
- FUNC_LOG;
- TPartData newPartData;
- newPartData.iMailBoxId = iMessage->GetMailBoxId();
- newPartData.iFolderId = iMessage->GetFolderId();
- newPartData.iMessageId = iMessage->GetMessageId();
- return newPartData;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StartFetchingBodyAfterOpeningL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::StartFetchingBodyAfterOpeningL() const
- {
- FUNC_LOG;
- TBool retVal = EFalse;
- CFSMailMessagePart* textPart = iMessage->PlainTextBodyPartL();
- if ( textPart )
- {
- TFSPartFetchState currentPlainTextFetchState = textPart->FetchLoadState();
- if ( currentPlainTextFetchState == EFSNone )
- {
- retVal = ETrue;
- }
- }
- delete textPart;
- return retVal;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::MessagePartFullyFetchedL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::MessagePartFullyFetchedL( TFetchedContentType aFetchedContentType ) const
- {
- FUNC_LOG;
- TBool retVal = ETrue;
- if( aFetchedContentType == EMessagePlainTextBodyPart )
- {
- CFSMailMessagePart* textPart = iMessage->PlainTextBodyPartL();
- if( textPart )
- {
- TFSPartFetchState currentPlainTextFetchState = textPart->FetchLoadState();
- if( currentPlainTextFetchState != EFSFull )
- {
- retVal = EFalse;
- }
- }
- delete textPart;
- }
- else if( aFetchedContentType == EMessageHtmlBodyPart )
- {
- CFSMailMessagePart* htmlPart = iMessage->HtmlBodyPartL();
- if( htmlPart )
- {
- TFSPartFetchState currentHtmlTextFetchState = htmlPart->FetchLoadState();
- if( currentHtmlTextFetchState != EFSFull )
- {
- retVal = EFalse;
- }
- }
- delete htmlPart;
- }
- else if( aFetchedContentType == EMessageStructure )
- {
- retVal = MessageStructureKnown( *iMessage );
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
- return retVal;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StartFetchingMessagePartL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::StartFetchingMessagePartL( CFSMailMessage& aMessagePtr,
- TFetchedContentType aFetchedContentType )
- {
- FUNC_LOG;
- if( aFetchedContentType == EMessagePlainTextBodyPart )
- {
- CFSMailMessagePart* textPart = aMessagePtr.PlainTextBodyPartL();
- CleanupStack::PushL( textPart );
- TFSMailMsgId textPartId = textPart->GetPartId();
- iFetchingPlainTextMessageBody = ETrue;
- iCurrentPlainTextBodyFetchRequestId = textPart->FetchMessagePartL( textPartId, *this, 0 );
- CleanupStack::PopAndDestroy( textPart );
- }
- else if( aFetchedContentType == EMessageHtmlBodyPart )
- {
- CFSMailMessagePart* htmlPart = aMessagePtr.HtmlBodyPartL();
- CleanupStack::PushL( htmlPart );
- TFSMailMsgId htmlPartId = htmlPart->GetPartId();
- iFetchingHtmlMessageBody = ETrue;
- iCurrentHtmlBodyFetchRequestId = htmlPart->FetchMessagePartL( htmlPartId, *this, 0 );
- CleanupStack::PopAndDestroy( htmlPart );
- }
- else if( aFetchedContentType == EMessageStructure )
- {
- StartFetchingMessageStructureL( aMessagePtr );
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CancelFetchings
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CancelFetchings()
- {
- FUNC_LOG;
- if( iFetchingPlainTextMessageBody )
- {
- TRAP_IGNORE( iAppUi.GetMailClient()->CancelL( iCurrentPlainTextBodyFetchRequestId ) );
- iFetchingPlainTextMessageBody = EFalse;
- }
- if( iFetchingHtmlMessageBody )
- {
- TRAP_IGNORE( iAppUi.GetMailClient()->CancelL( iCurrentHtmlBodyFetchRequestId ) );
- iFetchingHtmlMessageBody = EFalse;
- }
- if( iFetchingMessageStructure )
- {
- TRAP_IGNORE( iAppUi.GetMailClient()->CancelL( iCurrentStructureFetchRequestId ) );
- iFetchingMessageStructure = EFalse;
- }
- iAsyncProcessComplete = ETrue;
- //<cmail>
- if(iWaitDialog && iDialogNotDismissed)
- TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); // deletes the dialog
- //</cmail>
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::MessageStructureKnownL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::MessageStructureKnown( CFSMailMessage& aMsg ) const
- {
- FUNC_LOG;
- return TFsEmailUiUtility::IsMessageStructureKnown( aMsg );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StartFetchingMessageStructureL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::StartFetchingMessageStructureL( CFSMailMessage& aMsg )
- {
- FUNC_LOG;
- TFSMailMsgId currentMailboxId = aMsg.GetMailBoxId();
- TFSMailMsgId currentMessageFolderId = aMsg.GetFolderId();
- CFSMailFolder* currentFolder = iAppUi.GetMailClient()->GetFolderByUidL( currentMailboxId, currentMessageFolderId );
- CleanupStack::PushL( currentFolder );
- RArray<TFSMailMsgId> messageIds;
- CleanupClosePushL( messageIds );
- messageIds.Append( aMsg.GetMessageId() );
- iFetchingMessageStructure = ETrue;
- iCurrentStructureFetchRequestId = currentFolder->FetchMessagesL( messageIds, EFSMsgDataStructure, *this );
- CleanupStack::PopAndDestroy( &messageIds );
- CleanupStack::PopAndDestroy( currentFolder );
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StartWaitedFetchingL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::StartWaitedFetchingL( TFetchedContentType aFetchedContentType )
- {
- FUNC_LOG;
- iAsyncProcessComplete = EFalse;
- iFetchingAlready = EFalse;
- iStartAsyncFetchType = aFetchedContentType;
- //<cmail> in cmail we are using different wait dialog, since this wrapper dialog gives
- // problems in red key exit, when its active
- //delete iAsyncWaitNote; iAsyncWaitNote = NULL;
- //iAsyncWaitNote = CAknWaitNoteWrapper::NewL();
- // surpress start delay to prevent situation where wait note gets visible
- // only after the structure has been fetched
- //iAsyncWaitNote->ExecuteL( R_FSE_FETCHING_WAIT_DIALOG, *this, ETrue );
- //</cmail>
-
- //<cmail>
- iWaitDialog = new(ELeave)CAknWaitDialog(
- (REINTERPRET_CAST(CEikDialog**,&iWaitDialog)), ETrue);
- iWaitDialog->SetCallback(this);
- iDialogNotDismissed = ETrue;
- iWaitDialog->ExecuteLD(R_FSE_FETCHING_WAIT_DIALOG);
- StartFetchingMessagePartL( *iMessage, iStartAsyncFetchType );
- iFetchingAlready = ETrue;
- //</cmail>
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StartFetchingRemaininBodyLinesIfAtBottomL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::StartFetchingRemaininBodyLinesIfAtBottomL()
- {
- FUNC_LOG;
- TInt totalLines = iTextViewer->GetTotalLines();
- TInt currentLastDisplayedLine = iTextViewer->GetLastDisplayedLine();
-
- if ( totalLines == currentLastDisplayedLine )
- {
- // check if there is something to be fetched
- if ( !MessagePartFullyFetchedL( EMessagePlainTextBodyPart ) && !iFetchingPlainTextMessageBody )
- {
- iViewerRichText->AppendFetchingMoreTextL();
- // ensure the status layout in the bottom of the screen is visible
- iTextViewer->FocusLineL( iTextViewer->GetTotalLines() );
- // start fetching
- StartFetchingMessagePartL( *iMessage, EMessagePlainTextBodyPart );
- iFetchingAnimationTimer->Start( KAnimationRefreshTimeIntervalInMilliseconds );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::TimerEventL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer )
- {
- FUNC_LOG;
- if ( aTriggeredTimer == iFetchingAnimationTimer )
- {
- iViewerRichText->AppendFetchingMoreTextL();
- iFetchingAnimationTimer->Start( KAnimationRefreshTimeIntervalInMilliseconds );
- }
- }
-
-// MAknBackgroundProcess methods
-//
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::StepL
-// -----------------------------------------------------------------------------
-//<cmail>
-/*
-void CFSEmailUiMailViewerVisualiser::StepL()
- {
- FUNC_LOG;
- if( !iFetchingAlready )
- {
- StartFetchingMessagePartL( *iMessage, iStartAsyncFetchType );
- iFetchingAlready = ETrue;
- }
- }*/
-//</cmail>
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::IsProcessDone
-// -----------------------------------------------------------------------------
-//<cmail>
-/*
-TBool CFSEmailUiMailViewerVisualiser::IsProcessDone() const
- {
- FUNC_LOG;
- return iAsyncProcessComplete;
- }*/
-//</cmail>
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ProcessFinished
-// -----------------------------------------------------------------------------
-//<cmail>
-//void CFSEmailUiMailViewerVisualiser::ProcessFinished() {/* nothing here */ }
-//</cmail>
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::DialogDismissedL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::DialogDismissedL( TInt aButtonId )
- {
- FUNC_LOG;
- iDialogNotDismissed = EFalse;
- if( aButtonId == EAknSoftkeyCancel )
- {
- CancelFetchings();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CycleError
-// -----------------------------------------------------------------------------
-//<cmail>
-//TInt CFSEmailUiMailViewerVisualiser::CycleError( TInt /*aError*/ )
-/*
- {
- FUNC_LOG;
- iAsyncProcessComplete = ETrue;
- CancelFetchings();
- return KErrNone;
- }*/
-//</cmail>
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::AddBackgroundPicturesL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::AddBackgroundPicturesL()
- {
- CAlfTexture& headerTexture = iAppUi.FsTextureManager()->TextureByIndex( EViewerTextureHeaderBackGround );
- CAlfTexture& backgroundTexture = iAppUi.FsTextureManager()->TextureByIndex( EBackgroundTextureMailList );
-
- // add header texture
- // -1 is here for to bottom space icon
- // // <cmail> S60 Skin support
- // iTextViewer->SetPartBgImageL( 0, iViewerRichText->HeaderLengthInCharacters()-2, headerTexture );
- // </cmail>
-
- // add bg texture
- //<cmail> S60 skin support
- //iTextViewer->SetBackgroundImageL( backgroundTexture );
- //</cmail>
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::SetMessageFollowupFlagL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::SetMessageFollowupFlagL()
- {
- FUNC_LOG;
- if ( iMessage &&
- iTextViewer &&
- iViewerRichText &&
- TFsEmailUiUtility::IsFollowUpSupported( *iMailBox ) &&
- !iEmbeddedMessageMode )
- {
- TFollowUpNewState newState = TFsEmailUiUtility::SetMessageFollowupFlagL( *iMessage );
-
- switch ( newState )
- {
- case EFollowUp:
- {
- iViewerRichText->UpdateIconL( CFSEmailUiMailViewerRichText::EViewerIconFollowUp );
- }
- break;
- case EFollowUpComplete:
- {
- iViewerRichText->UpdateIconL( CFSEmailUiMailViewerRichText::EViewerIconFollowUpComplete );
- }
- break;
- case EFollowUpClear:
- {
- iViewerRichText->UpdateIconL( CFSEmailUiMailViewerRichText::EViewerIconFollowUpNone );
- }
- break;
- case EFollowUpNoChanges:
- default:
- {
- // do nothing.
- }
- break;
- }
-
- if ( newState != EFollowUpNoChanges )
- {
- // Update icon in viewer
- TInt iconLine = iViewerRichText->FollowupIconLine();
- iTextViewer->ReloadPicturesL( iconLine );
- // Notify appui of changed mail item
- SendEventToAppUiL( TFSEventMailChanged );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::DeleteMailL
-// -----------------------------------------------------------------------------
-TInt CFSEmailUiMailViewerVisualiser::DeleteMailL( CFSMailMessage& aMessagePtr, TBool aReturnPreviousView, TBool aDisableNote )
- {
- FUNC_LOG;
- TInt ret( KErrCancel );
-
- if ( iEmbeddedMessageMode )
- {
- // embedded messages can't be deleted
- ret = KErrNotSupported;
- }
- else
- {
- TInt okToDelete( ETrue );
- if ( !aDisableNote )
- {
- if(iAppUi.GetCRHandler()->WarnBeforeDelete())
- {
- okToDelete = TFsEmailUiUtility::ShowConfirmationQueryL( R_FREESTYLE_EMAIL_UI_DELETE_MESSAGE_CONFIRMATION );
- }
- }
- if ( okToDelete )
- {
- CFSMailMessage* confirmedMsgPtr = NULL;
- TRAP_IGNORE( confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(),
- aMessagePtr.GetFolderId(),
- aMessagePtr.GetMessageId() ,
- EFSMsgDataEnvelope ) );
- if ( confirmedMsgPtr )
- {
- CleanupStack::PushL( confirmedMsgPtr );
- RArray<TFSMailMsgId> msgIds;
- CleanupClosePushL( msgIds );
- msgIds.Append( confirmedMsgPtr->GetMessageId() );
- TFSMailMsgId mailBox = iAppUi.GetActiveMailbox()->GetId();
- iAppUi.GetMailClient()->DeleteMessagesByUidL( mailBox, confirmedMsgPtr->GetFolderId(), msgIds );
- // Notify appui of deleted mail item
- SendEventToAppUiL( TFSEventMailDeleted );
- CleanupStack::PopAndDestroy( &msgIds );
- CleanupStack::PopAndDestroy( confirmedMsgPtr );
- }
-
- // return to previous view
- if ( aReturnPreviousView )
- {
- // return only if we are in mail viewer
- if ( iAppUi.CurrentActiveView()->Id() == MailViewerId )
- {
- HandleCommandL( EAknSoftkeyBack );
- }
- }
- }
- if ( okToDelete )
- {
- ret = KErrNone;
- }
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowActionsMenuInOptionsL
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowActionsMenuInOptionsL() const
- {
- FUNC_LOG;
- TBool retVal = ETrue;
-
- SViewerHeadingHotSpotData currentHeaderHotSpotData;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- THotspotType hotspotType = iViewerRichText->FindCurrentHotSpotL( currentHeaderHotSpotData, currentBodyHotSpotData );
-
- if( hotspotType == ENoHotspot || ( hotspotType == EHeaderHotspot && (
- currentHeaderHotSpotData.iType == ETypeToNMoreRecipients ||
- currentHeaderHotSpotData.iType == ETypeCcNMoreRecipients ||
- currentHeaderHotSpotData.iType == ETypeBccNMoreRecipients ||
- currentHeaderHotSpotData.iType == ETypeHtml ) ) )
- {
- retVal = EFalse;
- }
- return retVal;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowDownloadManagerMenuInOptions
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowDownloadManagerMenuInOptions() const
- {
- FUNC_LOG;
- TBool ret(EFalse);
-/* <cmail> Download Manager blocked
- if ( iAppUi.DownloadInfoMediator() )
- {
- ret = iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads();
- }
-</cmail> */
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowNextMessageMenuInOptions
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowNextMessageMenuInOptions() const
- {
- FUNC_LOG;
- TBool available = EFalse;
- // Next/previous message options are inavailable in the embedded mode
- if ( iMessage && !iEmbeddedMessageMode )
- {
- TFSMailMsgId currentMsgId = iMessage->GetMessageId();
- TFSMailMsgId nextMsgId;
- TFSMailMsgId nextMsgFolderId;
- available = iAppUi.IsNextMsgAvailable( currentMsgId, nextMsgId, nextMsgFolderId );
- }
- return available;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowPreviousMessageMenuInOptions
-// -----------------------------------------------------------------------------
-TBool CFSEmailUiMailViewerVisualiser::ShowPreviousMessageMenuInOptions() const
- {
- FUNC_LOG;
- TBool available = EFalse;
- // Next/previous message options are inavailable in the embedded mode
- if ( iMessage && !iEmbeddedMessageMode )
- {
- TFSMailMsgId currentMsgId = iMessage->GetMessageId();
- TFSMailMsgId prevMsgId;
- TFSMailMsgId prevMsgFolderId;
- available = iAppUi.IsPreviousMsgAvailable( currentMsgId, prevMsgId, prevMsgFolderId );
- }
- return available;
- }
-
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowNextMessageL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ShowNextMessageL()
- {
- FUNC_LOG;
- if ( iMessage && !iEmbeddedMessageMode )
- {
- TFSMailMsgId currentMsgId = iMessage->GetMessageId();
- TFSMailMsgId nextMsgId;
- TFSMailMsgId nextMsgFolderId;
- if ( iAppUi.IsNextMsgAvailable( currentMsgId, nextMsgId, nextMsgFolderId ) )
- {
- // Stop timer and cancel fetchings before showing next message
- iFetchingAnimationTimer->Stop();
- CancelFetchings();
-
- // Change empty msk when moving to next
- ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
-
- iAppUi.MoveToNextMsgL( currentMsgId, nextMsgId );
- // Next message is displayed in this view through doactivate, because view is re-activate by mail list
- }
- }
- }
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ShowPreviousMessageL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ShowPreviousMessageL()
- {
- FUNC_LOG;
- if ( iMessage && !iEmbeddedMessageMode )
- {
- TFSMailMsgId currentMsgId = iMessage->GetMessageId();
- TFSMailMsgId prevMsgId;
- TFSMailMsgId prevMsgFolderId;
- if ( iAppUi.IsPreviousMsgAvailable( currentMsgId, prevMsgId, prevMsgFolderId ) )
- {
- // Stop timer and cancel fetchings before showing prev message
- iFetchingAnimationTimer->Stop();
- CancelFetchings();
-
- // Change empty msk when moving to previous
- ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
-
- iAppUi.MoveToPreviousMsgL( currentMsgId, prevMsgId );
- // Previous message is displayed in this view through doactivate, because view is re-activate by mail list
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::UpdateMessagePtrL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::UpdateMessagePtrL( TFSMailMsgId aNewMailboxId,
- TFSMailMsgId aNewFolderId,
- TFSMailMsgId aNewMessageId )
- {
- FUNC_LOG;
- TBool messageChanged = ETrue;
-
- if ( iMessage )
- {
- // Check is the message going to be changed or are we just updating the
- // same message object which has been previously shown.
- messageChanged = ( iMessage->GetMessageId() != aNewMessageId );
-
- // stop observing downloads from the previous message in case the message was changed
- if ( iAppUi.DownloadInfoMediator() && messageChanged )
- {
- iAppUi.DownloadInfoMediator()->StopObserving( this, iMessage->GetMessageId() );
- }
- delete iMessage;
- iMessage = NULL;
- PopMessage();
- }
-
- iMessage = iAppUi.GetMailClient()->GetMessageByUidL( aNewMailboxId,
- aNewFolderId,
- aNewMessageId,
- EFSMsgDataEnvelope );
- if ( iMessage )
- {
-
- UpdateMessagePtr( iMessage );
- // Update the open messages stack.
- EraseMessageStack(); // takes care of deallocating any previous messages
- PushMessageL( iMessage, EFalse ); // this is non-embedded message
- // Opened to viewer -> set message as read
- if ( !iMessage->IsFlagSet( EFSMsgFlag_Read ) )
- {
- iMessage->SetFlag( EFSMsgFlag_Read );
- iMessage->SaveMessageL(); // Save read status
- // Notify appui of changed mail item, it seems that protocols don't do this
- SendEventToAppUiL( TFSEventMailChanged );
- }
- // Start observing attachment downloads from the new message
- if ( iAppUi.DownloadInfoMediator() && messageChanged )
- {
- iAppUi.DownloadInfoMediator()->AddObserver( this, iMessage->GetMessageId() );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::UpdateMessagePtr
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::UpdateMessagePtr( CFSMailMessage* aNewMessagePtr )
- {
- ASSERT( aNewMessagePtr );
-
- TBool messageChanged = ETrue;
-
- // Stop observing any previous message and update iMessage pointer
- if ( iMessage )
- {
- // Check is the message going to be changed or are we just updating the
- // same message object which has been previously shown.
- messageChanged = ( iMessage->GetMessageId() != aNewMessagePtr->GetMessageId() );
-
- // stop observing downloads from the previous message in case the message was changed
- if ( iAppUi.DownloadInfoMediator() && messageChanged )
- {
- iAppUi.DownloadInfoMediator()->StopObserving( this, iMessage->GetMessageId() );
- }
- }
- iMessage = aNewMessagePtr;
-
- // Start observing attachment downloads from the new message
- if ( iAppUi.DownloadInfoMediator() && messageChanged )
- {
- iAppUi.DownloadInfoMediator()->AddObserver( this, iMessage->GetMessageId() );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::PushMessageL
-// Message stack handling. Ownership of message is transferred when succesful.
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::PushMessageL( CFSMailMessage* aMessage, TBool aIsEmbedded )
- {
- if ( !iOpenMessages || !iEmbeddedMessages )
- {
- User::Leave( KErrNotReady );
- }
-
- // We must ensure that push is done succesfully either to both stacks or to neither one.
- if ( aIsEmbedded )
- {
- iEmbeddedMessages->PushL( aMessage );
- }
- else
- {
- iEmbeddedMessages->PushL( NULL );
- }
- TRAPD( err, iOpenMessages->PushL( aMessage ) );
- if ( err )
- {
- iEmbeddedMessages->Pop();
- User::Leave( err );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::PopMessage
-// Message stack handling. Ownership of message is returned.
-// -----------------------------------------------------------------------------
-//
-CFSMailMessage* CFSEmailUiMailViewerVisualiser::PopMessage()
- {
- ASSERT( iOpenMessages && iEmbeddedMessages );
- ASSERT( iOpenMessages->Count() == iEmbeddedMessages->Count() );
-
- CFSMailMessage* msg = NULL;
- if ( !iOpenMessages->IsEmpty() )
- {
- msg = iOpenMessages->Pop();
- }
- if ( !iEmbeddedMessages->IsEmpty() )
- {
- iEmbeddedMessages->Pop();
- }
- return msg;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::EraseMessageStack
-// Message stack handling. All messages in stack are deallocated
-// -----------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::EraseMessageStack()
- {
- ASSERT( iOpenMessages && iEmbeddedMessages );
- ASSERT( iOpenMessages->Count() == iEmbeddedMessages->Count() );
-
- iOpenMessages->ResetAndDestroy();
- iEmbeddedMessages->Reset();
- }
-// CFSEmailUiMailViewerVisualiser::NavigateBackL
-// Overriden from base class
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::NavigateBackL()
- {
- FUNC_LOG;
- // clean up current message
- if ( iMessage && iAppUi.DownloadInfoMediator() )
- {
- iAppUi.DownloadInfoMediator()->StopObserving( this, iMessage->GetMessageId() );
- }
- delete iMessage;
- iMessage = NULL;
- PopMessage();
- // Return to previous message in the stack if there is still some left
- if ( !iOpenMessages->IsEmpty() )
- {
- iAppUi.EnterFsEmailViewL( MailViewerId, KStartViewerReturnFromEmbeddedMsg, KNullDesC8 );
- }
- // In usual case we use the base view implementation
- else
- {
- CFsEmailUiViewBase::NavigateBackL();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleDynamicVariantSwitchL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType /*aType*/ )
- {
- FUNC_LOG;
- // Set scroll offset to match screen height
- if ( iFirstStartCompleted && iTextViewer && iMessage )
- {
- // <cmail>
- TInt firstLine = iTextViewer->GetFirstDisplayedLine(); // get first line number
- TInt firstChar = iTextViewer->GetFirstCharInLine(firstLine); // get first char offset
- // </cmail>
-
- iAppUi.Display().Roster().Hide( ControlGroup() );
- RefreshL();
-
- // <cmail>
- TInt newLine = iTextViewer->GetLineNumber(firstChar); // get the new line number for this offset
- if(newLine<0) newLine = firstLine; // in case of error go to the prev. line number
- iTextViewer->FocusLineL(newLine,ETrue); // focus on the found line number
- // </cmail>
- // <cmail>
- SetActionMenuIconVisbilityL();
- // </cmail>
- iAppUi.Display().Roster().ShowL( ControlGroup() );
- iDownloadProgressIndicator->NotifyLayoutChange();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::HandleDynamicVariantSwitchOnBackgroundL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::HandleDynamicVariantSwitchOnBackgroundL( CFsEmailUiViewBase::TDynamicSwitchType /*aType*/ )
- {
- FUNC_LOG;
- iLayoutChangedWhileNotActive = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OpenLinkInIntranetL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::OpenLinkInIntranetL( TBool aMenuSelection )
- {
- FUNC_LOG;
- CFindItemEngine::SFoundItem currentBodyHotSpotData;
- TBool bodyHotSpotFound = iViewerRichText->FindCurrentBodyHotSpotL( currentBodyHotSpotData );
- if ( bodyHotSpotFound )
- {
- HBufC* intranetUrl = iViewerRichText->GetHotspotTextLC( currentBodyHotSpotData );
- TInt len = intranetUrl->Length();
- HBufC8* eightBitUrl = HBufC8::NewLC( len );
- eightBitUrl->Des().Copy( *intranetUrl );
-
- TAiwGenericParam param( EGenericParamURL, TAiwVariant(*eightBitUrl) );
- CAiwGenericParamList& paramList = iIBServiceHandler->InParamListL();
- paramList.AppendL( param );
- if ( aMenuSelection )
- {
- iIBServiceHandler->ExecuteMenuCmdL( EFsEmailUiCmdActionsOpenInIntranetMenu,
- paramList, iIBServiceHandler->OutParamListL() );
- }
- else
- {
- iIBServiceHandler->ExecuteServiceCmdL( KAiwCmdView,
- paramList, iIBServiceHandler->OutParamListL() );
- }
- CleanupStack::PopAndDestroy( eightBitUrl );
- CleanupStack::PopAndDestroy( intranetUrl );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::ChangeMsgReadStatusL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::ChangeMsgReadStatusL(
- TBool aRead, TBool aCmdFromMrui )
- {
- FUNC_LOG;
- if ( iMessage && !iEmbeddedMessageMode )
- {
- if ( aRead )
- {
- // Send flags, local and server
- iMessage->SetFlag( EFSMsgFlag_Read );
- }
- else
- {
- // Send flags, local and server
- iMessage->ResetFlag( EFSMsgFlag_Read );
- }
- iMessage->SaveMessageL(); // Save read status
- SendEventToAppUiL( TFSEventMailChanged );
-
- if ( !aCmdFromMrui && iViewerRichText && iTextViewer )
- {
- iViewerRichText->UpdateIconL(
- CFSEmailUiMailViewerRichText::EViewerEmailStatus );
- TInt iconLine = iViewerRichText->EmailStatusIconLine();
- iTextViewer->ReloadPicturesL( iconLine );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::OpenHotSpotUrlInBrowserL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::OpenHotSpotUrlInBrowserL( CFindItemEngine::SFoundItem& aHotSpot )
- {
- FUNC_LOG;
- if ( aHotSpot.iItemType == CFindItemEngine::EFindItemSearchURLBin ||
- aHotSpot.iItemType == CFindItemEngine::EFindItemSearchScheme ) // Scheme is needed also
- {
- // use browser launcher API here
- HBufC* urlToOpen = iViewerRichText->GetHotspotTextLC( aHotSpot );
- // Check if the address is rtsp url and send it media player
- if ( aHotSpot.iItemType == CFindItemEngine::EFindItemSearchScheme &&
- urlToOpen->FindC( KRtspUrlPrefix ) == 0 )
- {
- RApaLsSession appArcSession;
- User::LeaveIfError( appArcSession.Connect() );
- TThreadId id;
- appArcSession.StartDocument( urlToOpen->Des(), KUidMediaPlayer , id );
- appArcSession.Close();
- }
- else
- {
- // Check wheter the url text has some prefix (http, https, ftp, etc.).
- // If no prefix found, try with the default prefix http.
- TInt urlPos = urlToOpen->Find( KUrlPrefixIdentifier );
- if ( urlPos == KErrNotFound )
- {
- HBufC* newBuf = urlToOpen->ReAllocL( urlToOpen->Length() + KHttpUrlPrefix().Length() );
- CleanupStack::Pop( urlToOpen );
- urlToOpen = newBuf;
- CleanupStack::PushL( urlToOpen );
- TPtr urlToOpenPtr = urlToOpen->Des();
- urlToOpenPtr.Insert( 0, KHttpUrlPrefix );
- }
-
- // Use scheme handler to launch the browser as a stand alone application
- CSchemeHandler* handler = CSchemeHandler::NewL( *urlToOpen );
- CleanupStack::PushL( handler );
- handler->HandleUrlStandaloneL();
- CleanupStack::PopAndDestroy( handler );
- }
-
- CleanupStack::PopAndDestroy( urlToOpen );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::CallToBodyHotSpotNumberL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::CallToBodyHotSpotNumberL( CFindItemEngine::SFoundItem& aHotSpot )
- {
- FUNC_LOG;
-
- if ( aHotSpot.iItemType == CFindItemEngine::EFindItemSearchPhoneNumberBin )
- {
- HBufC* phoneNumber = iViewerRichText->GetHotspotTextLC( aHotSpot );
- TInt answer = TFsEmailUiUtility::ShowConfirmationQueryL(
- R_FREESTYLE_EMAIL_UI_VIEWER_CALL_HOTSPOT, *phoneNumber );
- if ( answer )
- {
- TPtr numberPtr = phoneNumber->Des();
- CommonPhoneParser::ParsePhoneNumber( numberPtr,
- CommonPhoneParser::EPhoneClientNumber);
-
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->MakeAiwCallL( NULL, *phoneNumber );
- }
- CleanupStack::PopAndDestroy( phoneNumber );
- }
- else if ( aHotSpot.iItemType == CFindItemEngine::EFindItemSearchScheme )
- {
- TBool voipCall( EFalse );
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( aHotSpot );
- // Strip scheme prefix text if found
- if ( schemeText && schemeText->FindC( KCallPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KCallPrefix().Length() );
- }
- else if ( schemeText && schemeText->FindC( KTelPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KTelPrefix().Length() );
- }
- else if ( schemeText && schemeText->FindC( KSmsPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KSmsPrefix().Length() );
- }
- else if ( schemeText && schemeText->FindC( KMmsPrefix ) == 0 )
- {
- schemeText->Des().Delete( 0, KMmsPrefix().Length() );
- }
- else if ( schemeText && schemeText->FindC( KVoipPrefix ) == 0 )
- {
- voipCall = ETrue;
- schemeText->Des().Delete( 0, KVoipPrefix().Length() );
- }
-
- TInt answer = TFsEmailUiUtility::ShowConfirmationQueryL(
- R_FREESTYLE_EMAIL_UI_VIEWER_CALL_HOTSPOT, *schemeText );
- if ( answer )
- {
- if ( !voipCall )
- {
- // use common phone parser for other than voip numbers
- TPtr numberPtr = schemeText->Des();
- CommonPhoneParser::ParsePhoneNumber( numberPtr,
- CommonPhoneParser::EPhoneClientNumber );
- }
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->MakeAiwCallL( NULL, *schemeText, voipCall );
- }
- CleanupStack::PopAndDestroy( schemeText );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFSEmailUiMailViewerVisualiser::WriteEmailToHotSpotAddressL
-// -----------------------------------------------------------------------------
-void CFSEmailUiMailViewerVisualiser::WriteEmailToHotSpotAddressL( CFindItemEngine::SFoundItem& aHotSpot )
- {
- FUNC_LOG;
- if ( aHotSpot.iItemType == CFindItemEngine::EFindItemSearchMailAddressBin )
- {
- delete iNewMailTempAddress; iNewMailTempAddress = NULL;
- iNewMailTempAddress = CFSMailAddress::NewL();
- HBufC* mailAddress = iViewerRichText->GetHotspotTextLC( aHotSpot );
- iNewMailTempAddress->SetEmailAddress( *mailAddress );
- CleanupStack::PopAndDestroy( mailAddress );
- iAppUi.LaunchEditorL( iNewMailTempAddress );
- }
- else if ( aHotSpot.iItemType == CFindItemEngine::EFindItemSearchScheme )
- {
- HBufC* schemeText = iViewerRichText->GetHotspotTextLC( aHotSpot );
- if ( schemeText && schemeText->FindC( KMailtoPrefix ) == 0)
- {
- schemeText->Des().Delete( 0, KMailtoPrefix().Length() );
- delete iNewMailTempAddress; iNewMailTempAddress = NULL;
- iNewMailTempAddress = CFSMailAddress::NewL();
- iNewMailTempAddress->SetEmailAddress( *schemeText );
- iAppUi.LaunchEditorL( iNewMailTempAddress );
- }
- CleanupStack::PopAndDestroy( schemeText );
- }
- }
-
-void CFSEmailUiMailViewerVisualiser::SaveEmailAsContactL(
- const TDesC& aEmailAddress )
- {
- FUNC_LOG;
- TAddToContactsType type;
- // Query to "update existing" or "Create new"
- // --> EFALSE = user chose "cancel"
- if ( CFsDelayedLoader::InstanceL()->GetContactHandlerL()->
- AddtoContactsQueryL( type ) )
- {
- // Create buffer and strip scheme data such as mailto: and call:
- HBufC* textData = aEmailAddress.AllocLC();
- if ( textData->FindC( KMailtoPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KMailtoPrefix().Length() );
- }
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddToContactL(
- *textData, EContactUpdateEmail, type, this );
- CleanupStack::PopAndDestroy( textData );
- }
- }
-
-void CFSEmailUiMailViewerVisualiser::SavePhoneNumberAsContactL(
- const TDesC& aPhoneNumber )
- {
- FUNC_LOG;
- TAddToContactsType type;
- // Query to "update existing" or "Create new"
- // --> EFALSE = user chose "cancel"
- if ( CFsDelayedLoader::InstanceL()->GetContactHandlerL()->
- AddtoContactsQueryL( type ) )
- {
- // Create buffer and strip scheme data such as mailto: and call:
- HBufC* textData = aPhoneNumber.AllocLC();
- // Strip scheme prefix text if found
- if ( textData && textData->FindC( KCallPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KCallPrefix().Length() );
- }
- else if ( textData && textData->FindC( KTelPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KTelPrefix().Length() );
- }
- else if ( textData && textData->FindC( KSmsPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KSmsPrefix().Length() );
- }
- else if ( textData && textData->FindC( KMmsPrefix ) == 0 )
- {
- textData->Des().Delete( 0, KMmsPrefix().Length() );
- }
- CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddToContactL(
- *textData, EContactUpdateNumber, type, this );
- CleanupStack::PopAndDestroy( textData );
- }
- }
-
-
-void CFSEmailUiMailViewerVisualiser::FlagselectionCompleteL( TInt aSelection )
- {
- FUNC_LOG;
- // Set message follow up flag
- if ( iMessage && aSelection != KErrNotFound )
- {
- switch ( aSelection )
- {
- case EFollowUp:
- {
- iMessage->SetFlag( EFSMsgFlag_FollowUp );
- iMessage->ResetFlag( EFSMsgFlag_FollowUpComplete );
- iMessage->SaveMessageL();
- }
- break;
- case EFollowUpComplete:
- {
- iMessage->SetFlag( EFSMsgFlag_FollowUpComplete );
- iMessage->ResetFlag( EFSMsgFlag_FollowUp );
- iMessage->SaveMessageL();
- }
- break;
- case EFollowUpClear:
- {
- iMessage->ResetFlag( EFSMsgFlag_FollowUp | EFSMsgFlag_FollowUpComplete );
- iMessage->SaveMessageL();
- }
- break;
- default:
- break;
- }
- }
- }
-
-
-void CFSEmailUiMailViewerVisualiser::SetMailboxNameToStatusPaneL()
- {
- FUNC_LOG;
- iAppUi.SetActiveMailboxNameToStatusPaneL();
- }
-
-void CFSEmailUiMailViewerVisualiser::GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const
- {
- if ( iTextViewer )
- {
- aLayoutArray.AppendL( iTextViewer->RootLayout() );
- }
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::UpdateNaviPaneL( TBool aForESMR )
- {
- FUNC_LOG;
- // Get navigation decorator for mail viewer
- CAknNavigationDecorator* naviDecorator = iAppUi.NaviDecoratorL( MailViewerId );
- if ( naviDecorator )
- {
- // Check if there's next and previous message available, and set
- // the navipane arrows accordingly
- TFSMailMsgId currentMsgId = iMessage->GetMessageId();
- TFSMailMsgId tmpMsgId;
- TFSMailMsgId tmpMsgFolderId;
- if ( iAppUi.IsNextMsgAvailable( currentMsgId, tmpMsgId, tmpMsgFolderId ) )
- {
- naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, EFalse );
- }
- else
- {
- naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, ETrue );
- }
- if ( iAppUi.IsPreviousMsgAvailable( currentMsgId, tmpMsgId, tmpMsgFolderId ) )
- {
- naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, EFalse );
- }
- else
- {
- naviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, ETrue );
- }
-
- // Set this view's navipane to the top of the navipane control stack
- CAknNavigationControlContainer* naviPaneContainer =
- static_cast<CAknNavigationControlContainer*>(
- StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
- naviPaneContainer->PushL( *naviDecorator );
- naviDecorator->SetNaviDecoratorObserver( aForESMR ? NULL : this );
- }
-
- // Set priority and follow-up flags
- CCustomStatuspaneIndicators* indicators = iAppUi.GetStatusPaneIndicatorContainer();
- if ( indicators)
- {
- indicators->ShowStatusPaneIndicators();
-
- if ( iMessage->IsFlagSet( EFSMsgFlag_Low ) )
- {
- indicators->SetPriorityFlag( EMsgPriorityLow );
- }
- else if ( iMessage->IsFlagSet( EFSMsgFlag_Important ) )
- {
- indicators->SetPriorityFlag( EMsgPriorityHigh );
- }
- else
- {
- indicators->SetPriorityFlag( EMsgPriorityNormal );
- }
-
- CCustomStatuspaneIndicators::TFollowUpFlagType flagType = CCustomStatuspaneIndicators::EFollowUpNone;
- if (iMessage->IsFlagSet(EFSMsgFlag_FollowUp))
- {
- flagType = CCustomStatuspaneIndicators::EFollowUp;
- }
- if (iMessage->IsFlagSet(EFSMsgFlag_FollowUpComplete))
- {
- flagType = CCustomStatuspaneIndicators::EFollowUpComplete;
- }
- indicators->SetFollowUpFlag( flagType );
-
- indicators->DrawNow();
- }
-
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::HandleNaviDecoratorEventL( TInt aEventID )
- {
- FUNC_LOG;
- CAknNavigationDecorator* naviDecorator = iAppUi.NaviDecoratorL( MailViewerId );
- if ( naviDecorator )
- {
- naviDecorator->SetNaviDecoratorObserver( NULL );
- }
- if( aEventID == MAknNaviDecoratorObserver::EAknNaviDecoratorEventRightTabArrow )
- {
- ShowNextMessageL();
- }
- else
- {
- ShowPreviousMessageL();
- }
- }
-
-// ---------------------------------------------------------------------------
-// HandleMailBoxEventL
-// Mailbox event handler, responds to events sent by the plugin.
-// ---------------------------------------------------------------------------
-//
-void CFSEmailUiMailViewerVisualiser::HandleMailBoxEventL( TFSMailEvent aEvent,
- TFSMailMsgId aMailbox, TAny* aParam1, TAny* /*aParam2*/, TAny* /*aParam3*/ )
- {
- FUNC_LOG;
- if ( iFirstStartCompleted && iMessage && aMailbox.Id() == iAppUi.GetActiveMailboxId().Id() &&
- aEvent == TFSEventMailDeleted && aParam1 ) // Safety, in list events that only concern active mailbox are handled
- {
- TFSMailMsgId curMsgId = iMessage->GetMessageId();
- RArray<TFSMailMsgId>* removedEntries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
- for ( TInt i=0 ; i < removedEntries->Count() ; i++ )
- {
- //<cmail>
- if ( (curMsgId == (*removedEntries)[i]) &&
- (iDeletedMessageFromMrui != curMsgId) )
- {
- //</cmail>
- ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
- NavigateBackL();
- break;
- }
- }
- }
- }
-
-void CFSEmailUiMailViewerVisualiser::SendEventToAppUiL( TFSMailEvent aEventType )
- {
- RArray<TFSMailMsgId> msgIdArray;
- CleanupClosePushL( msgIdArray );
- msgIdArray.AppendL( iMessage->GetMessageId() );
- TFSMailMsgId folderId = iMessage->GetFolderId();
- iAppUi.EventL( aEventType,
- iAppUi.GetActiveMailboxId(),
- &msgIdArray, &folderId, NULL );
- CleanupStack::PopAndDestroy( &msgIdArray );
- }
-
-//////////////////////////////////////////////////////////////////////////////////////
-// CLASS IMPLEMENTATION CHANGE TO FLAG DIALOG GLOBAL NOTE
-///////////////////////////////////////////////////////////////////////////////////
-CFlagSelectionGlobalNoteHandler* CFlagSelectionGlobalNoteHandler::NewL( CFSEmailUiMailViewerVisualiser& aViewerVisualiser )
- {
- FUNC_LOG;
- CFlagSelectionGlobalNoteHandler* self =
- new (ELeave) CFlagSelectionGlobalNoteHandler( aViewerVisualiser );
- return self;
- }
-
-
-CFlagSelectionGlobalNoteHandler::~CFlagSelectionGlobalNoteHandler()
- {
- FUNC_LOG;
- delete iPrompt;
- delete iGlobalFlagQuery;
- }
-
-void CFlagSelectionGlobalNoteHandler::Cancel()
- {
- FUNC_LOG;
- }
-
-void CFlagSelectionGlobalNoteHandler::LaunchFlagListQueryDialogL()
- {
- FUNC_LOG;
- iSelection = 0;
- if ( !iPrompt )
- {
- iPrompt = StringLoader::LoadL( R_FREESTYLE_EMAIL_UI_VIEWER_FLAG_DIALOG_HEADER );
- }
- if ( !iGlobalFlagQuery )
- {
- iGlobalFlagQuery = CAknGlobalListQuery::NewL();
- iGlobalFlagQuery->SetHeadingL( *iPrompt ); // Set query heading.
- }
-
- CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat( 3 );
- CleanupStack::PushL( array );
- // Add follow up text
- HBufC* followUp = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FLAG_FOLLOW_UP );
- array->AppendL( *followUp );
- CleanupStack::PopAndDestroy( followUp );
-
- // Add flag complete text
- HBufC* completeFlag = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FLAG_COMPLETE );
- array->AppendL( *completeFlag );
- CleanupStack::PopAndDestroy( completeFlag );
-
- // Add clear flag text
- HBufC* clearFlag = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FLAG_CLEAR );
- array->AppendL( *clearFlag );
- CleanupStack::PopAndDestroy( clearFlag );
-
- // Show query
- iGlobalFlagQuery->ShowListQueryL( array, iStatus, iSelection );
- CleanupStack::PopAndDestroy( array );
-
- // Set active
- SetActive();
- }
-
-void CFlagSelectionGlobalNoteHandler::RunL()
- {
- FUNC_LOG;
- TInt status = iStatus.Int();
- iViewerVisualiser.FlagselectionCompleteL( status );
- }
-
-void CFlagSelectionGlobalNoteHandler::DoCancel()
- {
- FUNC_LOG;
- }
-
-TInt CFlagSelectionGlobalNoteHandler::RunError( TInt /*aError*/ )
- {
- FUNC_LOG;
- TInt err( KErrNone );
- return err;
- }
-
-CFlagSelectionGlobalNoteHandler::CFlagSelectionGlobalNoteHandler( CFSEmailUiMailViewerVisualiser& aViewerVisualiser )
- : CActive ( EPriorityHigh ),
- iViewerVisualiser( aViewerVisualiser )
- {
- FUNC_LOG;
- CActiveScheduler::Add( this );
- iSelection = 0;
- }
-