emailuis/emailui/src/FreestyleMessageHeaderURLEventHandler.cpp
changeset 0 8466d47a6819
child 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FreestyleMessageHeaderURLEventHandler.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Message header URL event handler
+*
+*/
+
+#include "FreestyleMessageHeaderURLEventHandler.h"
+#include "FreestyleMessageHeaderURL.h"
+#include "FreestyleEmailUiConstants.h"
+#include "FreestyleEmailUiUtilities.h"
+#include "CFSMailMessage.h"
+#include "FreestyleEmailUiAppui.h"
+#include "FreestyleEmailUiHtmlViewerView.h"
+#include "FreestyleEmailUi.hrh"
+
+#include <aknnotewrappers.h>
+#include <BrCtlDefs.h>
+#include <e32std.h>
+
+EXPORT_C CFreestyleMessageHeaderURLEventHandler* CFreestyleMessageHeaderURLEventHandler::NewL( 
+        CFreestyleEmailUiAppUi& aAppUi, 
+        CFsEmailUiHtmlViewerView& aView )
+    {
+    CFreestyleMessageHeaderURLEventHandler* obj = new (ELeave) CFreestyleMessageHeaderURLEventHandler( aAppUi, aView );
+    CleanupStack::PushL( obj );
+    obj->ConstructL();
+    CleanupStack::Pop( obj );
+    return obj;
+    }
+
+CFreestyleMessageHeaderURLEventHandler::CFreestyleMessageHeaderURLEventHandler( 
+        CFreestyleEmailUiAppUi& aAppUi, 
+        CFsEmailUiHtmlViewerView& aView )
+    : iAppUi( aAppUi ), 
+    iView( aView ), 
+    iMailMessage( NULL ), 
+    iAttachmentsListModel( NULL )
+    {
+    }
+
+void CFreestyleMessageHeaderURLEventHandler::ConstructL()
+    {
+    iMessageHeaderURL = CFreestyleMessageHeaderURL::NewL();
+    }
+
+CFreestyleMessageHeaderURLEventHandler::~CFreestyleMessageHeaderURLEventHandler ()
+    {
+    delete iMessageHeaderURL;
+    }
+
+EXPORT_C TBool CFreestyleMessageHeaderURLEventHandler::HandleEventL( const TDesC& aUri )
+    {
+    iMailMessage = iView.CurrentMessage(); 
+    iAttachmentsListModel = iView.CurrentAttachmentsListModel();
+    
+    if ( ! CFreestyleMessageHeaderURL::IsMessageHeaderURL( aUri ) )
+        {
+        return EFalse;
+        }
+    else
+        {
+        //URL is of the message header format, hence parse it
+        iMessageHeaderURL->InternalizeL( aUri );
+
+        if ( ( iMessageHeaderURL->Type()->CompareF( KURLTypeTo ) == 0 )
+             || ( iMessageHeaderURL->Type()->CompareF( KURLTypeFrom ) == 0 )
+             || ( iMessageHeaderURL->Type()->CompareF( KURLTypeCc ) == 0 ) )
+            {
+            LaunchEmailAddressMenuL( *iMessageHeaderURL );
+            }
+
+        else if ( ( iMessageHeaderURL->Type()->CompareF( KURLTypeAttachment ) == 0 ) )
+            {
+            LaunchAttachmentMenuL( FindAttachmentL( *iMessageHeaderURL ) );
+            }
+
+        return ETrue;
+        }
+    }
+
+/*
+ * Launches the menu and populates it with the appropriate menu items and handles the user
+ * menu item selection.
+ * @param aType the type of the link the user selected
+ */
+void CFreestyleMessageHeaderURLEventHandler::LaunchEmailAddressMenuL( 
+        const CFreestyleMessageHeaderURL& iMessageHeaderURL )
+    {
+    CFSEmailUiActionMenu::RemoveAllL();
+    
+    RArray<TActionMenuCustomItemId> uids;
+    CleanupClosePushL( uids );
+    uids.Append( FsEActionMenuCall );
+    uids.Append( FsEActionMenuCreateMessage );
+    uids.Append( FsEActionMenuCreateEmail );
+    uids.Append( FsEActionMenuContactDetails );
+    uids.Append( FsEActionMenuAddToContacts );
+
+    if ( iView.IsRemoteLookupSupportedL() )
+        {
+        uids.Append( FsEActionMenuRemoteLookup );
+        }
+
+
+    for ( TInt i = 0; i < uids.Count(); i++ )
+        {
+        CFSEmailUiActionMenu::AddCustomItemL( uids[i] ); ///here is where you add stuff
+        }
+
+    CleanupStack::PopAndDestroy( &uids );
+    TActionMenuCustomItemId menuResult = CFSEmailUiActionMenu::ExecuteL( EFscCenter );
+
+    if ( menuResult != FsEActionMenuCasItemSelectedAndExecuted &&
+            menuResult != FsEActionMenuDismissed    )
+        {
+        HandleEmailAddressActionMenuCommandL( menuResult, iMessageHeaderURL );
+        }
+    }
+
+void CFreestyleMessageHeaderURLEventHandler::HandleEmailAddressActionMenuCommandL(
+    TActionMenuCustomItemId aSelectedActionMenuItem,
+    const CFreestyleMessageHeaderURL& iMessageHeaderURL )
+    {
+    TInt command( 0 );
+
+    switch ( aSelectedActionMenuItem )
+        {
+        case FsEActionMenuCreateEmail: // Create message
+            {
+            command = EFsEmailUiCmdActionsReply;
+            }
+        break;
+        case FsEActionMenuAddToContacts: // Add to Contacts
+            {
+            command = FsEActionMenuAddToContacts;
+            }
+        break;
+        case FsEActionMenuCall: // Call
+            {
+            command = EFsEmailUiCmdActionsCall;
+            }
+        break;
+        case FsEActionMenuCreateMessage: // Create message
+            {
+            command = EFsEmailUiCmdActionsCreateMessage;
+            }
+        break;
+        case FsEActionMenuContactDetails: // Contact details
+            {
+            command = EFsEmailUiCmdActionsContactDetails;
+            }
+        break;
+        case FsEActionMenuRemoteLookup: // Remote lookup
+            {
+            command = EFsEmailUiCmdActionsRemoteLookup;
+            }
+        break;
+        }
+
+    iView.HandleEmailAddressCommandL( command, *iMessageHeaderURL.ItemId() );
+    }
+
+const TAttachmentData& CFreestyleMessageHeaderURLEventHandler::FindAttachmentL( 
+        const CFreestyleMessageHeaderURL& aAttachmentUrl )
+    {
+    User::LeaveIfNull( iAttachmentsListModel );
+    TUint id;
+    TLex parser( *aAttachmentUrl.ItemId() );
+    parser.Val( id );
+    
+    TInt found = KErrNotFound;
+    for (TInt i=0; i<iAttachmentsListModel->GetModel().Count(); i++)
+        {
+        if ( iAttachmentsListModel->GetModel()[i].partData.iMessagePartId.Id() == id )
+            {
+            found = i;
+            break;
+            }
+        }
+    
+    if ( found == KErrNotFound )
+        {
+        User::Leave( KErrNotFound );
+        }
+    
+    return iAttachmentsListModel->GetModel()[found];
+    }
+
+void CFreestyleMessageHeaderURLEventHandler::LaunchAttachmentMenuL( 
+        const TAttachmentData& aAttachment )
+    {
+    ASSERT( iAppUi.DownloadInfoMediator() );
+    CFSEmailUiActionMenu::RemoveAllL();
+
+    if ( iAppUi.DownloadInfoMediator()->IsDownloading( aAttachment.partData.iMessagePartId ) )
+        {        
+        CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentCancelDownload ); 
+        }
+    else if ( aAttachment.downloadProgress == KComplete )
+        {
+        CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentOpen ); 
+        
+        // block saving of embedded messages if needed.
+        if ( iView.IsEmbeddedMsgView() )
+            {
+            if ( iView.IsEmbeddedMsgSavingAllowed() || !iAttachmentsListModel->IsMessage( aAttachment ) )
+                {
+                CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentSave );    
+                }
+             
+            }
+        else
+            {
+            CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentSave ); 
+            }
+        
+        if ( iAttachmentsListModel->GetModel().Count() > 1 )
+            {
+            // In embedded message mode, save all needs to be blocked if there
+            // are any message type attachments. This is due to limitations of Activesync plugin.
+            if( !(iView.IsEmbeddedMsgView() && iAttachmentsListModel->IsThereAnyMessageAttachments()) )
+                {
+                CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentSaveAll );            
+                }
+            
+            }         
+        }
+    else
+        {
+        CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentOpen ); 
+        CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentSave ); 
+        if ( iAttachmentsListModel->GetModel().Count() > 1 )
+            {
+            CFSEmailUiActionMenu::AddCustomItemL( FsEActionAttachmentSaveAll ); 
+            }         
+        }
+
+    TActionMenuCustomItemId menuResult = CFSEmailUiActionMenu::ExecuteL( EFscCenter );
+
+    if ( menuResult != FsEActionMenuCasItemSelectedAndExecuted &&
+            menuResult != FsEActionMenuDismissed    )
+        {
+        HandAttachmentActionMenuCommandL( menuResult, aAttachment );
+        }
+    }
+
+void CFreestyleMessageHeaderURLEventHandler::HandAttachmentActionMenuCommandL( 
+        TActionMenuCustomItemId aSelectedActionMenuItem,
+        const TAttachmentData& aAttachment )
+    {
+    switch ( aSelectedActionMenuItem )
+        {
+        case FsEActionAttachmentCancelDownload:
+            iView.CancelAttachmentL( aAttachment );
+            break;
+            
+        case FsEActionAttachmentOpen:
+            iView.OpenAttachmentL( aAttachment );
+            break;
+            
+        case FsEActionAttachmentSave:
+            iView.SaveAttachmentL( aAttachment );
+            break;
+            
+        case FsEActionAttachmentSaveAll:
+            iView.SaveAllAttachmentsL();
+            break;
+            
+        case FsEActionAttachmentClearFetchedContent:
+            iView.RemoveAttachmentContentL( aAttachment );
+            break;
+            
+        case FsEActionAttachmentDownload:
+            iView.DownloadAttachmentL( aAttachment );
+            break;
+            
+        case FsEActionAttachmentDownloadAll:
+            iView.DownloadAllAttachmentsL();
+            break;
+            
+        case FsEActionAttachmentViewAll:
+            iView.OpenAttachmentsListViewL();
+            break;            
+        }
+    }
+
+