emailuis/emailui/sendasmtm/fsmtms/uidata/src/cfsuidatamtm.cpp
changeset 0 8466d47a6819
child 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/sendasmtm/fsmtms/uidata/src/cfsuidatamtm.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,557 @@
+/*
+* 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:  Implementation of the class CFsUiDataMtm.
+*
+*/
+
+
+// INCLUDE FILES
+#include "emailtrace.h"
+#include <MtmExtendedCapabilities.hrh>
+#include <msvuids.h>
+#include <msvids.h>
+#include <mtmuids.h>
+#include <coemain.h>    
+#include <AknIconUtils.h>
+#include <data_caging_path_literals.hrh>
+
+#include <fsuidatamtm.mbg>
+#include "fsmtmsuids.h" 
+#include <fsuidatamtm.rsg>
+#include "fsmtmsconstants.h"
+#include "cfsuidatamtm.h"
+
+// FREESTYLE EMAIL FRAMEWORK INCLUDES
+#include "CFSMailCommon.h"
+#include "CFSMailClient.h"
+#include "CFSMailBox.h"
+
+
+#include <gulicon.h>
+#include "MFSMailBrandManager.h"
+
+// GLOBAL EXPORTS.
+
+// ---------------------------------------------------------------------------
+// Panic
+// ---------------------------------------------------------------------------
+//
+GLDEF_C void Panic(TInt aPanic)
+    {
+
+    User::Panic(_L("FsUiMtms"), aPanic);
+    
+    }
+
+// ---------------------------------------------------------------------------
+// NewMtmUiDataLayerL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CBaseMtmUiData* NewMtmUiDataLayerL( 
+    CRegisteredMtmDll& aRegisteredDll )
+    // Factory function
+    {
+    return CFsUiDataMtm::NewL( aRegisteredDll );
+    }
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CFsUiDataMtm
+// ---------------------------------------------------------------------------
+//
+CFsUiDataMtm::CFsUiDataMtm( CRegisteredMtmDll& aRegisteredMtmDll ):
+    CBaseMtmUiData( aRegisteredMtmDll )
+{
+    FUNC_LOG;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CFsUiDataMtm::ConstructL()
+{
+    FUNC_LOG;
+    CBaseMtmUiData::ConstructL();
+    // No need to allocated as ConstructL will alocate and baseclass itself delets
+    // memory allocated.
+    // iIconArrays = new (ELeave) CArrayPtrSeg<CBitmapArray>(2); 
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CFsUiDataMtm
+// ---------------------------------------------------------------------------
+//
+CFsUiDataMtm::~CFsUiDataMtm()
+{
+    FUNC_LOG;
+    
+    iMailboxIds.Close();
+    
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFsUiDataMtm* CFsUiDataMtm::NewL( 
+    CRegisteredMtmDll& aRegisteredMtmDll )
+{
+    FUNC_LOG;
+
+    CFsUiDataMtm* self = new(ELeave) CFsUiDataMtm( aRegisteredMtmDll );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::PopulateArraysL
+// Initialises bitmaps and function information.
+// ---------------------------------------------------------------------------
+//
+void CFsUiDataMtm::PopulateArraysL()
+{
+    FUNC_LOG;
+    
+    // Populate function array
+    ReadFunctionsFromResourceFileL( R_FS_FUNCTION_ARRAY ); 
+
+    // Add the icon information here.
+    TFileName dllFileName;
+    Dll::FileName( dllFileName );      
+    TParse parse;
+    parse.Set( KFsUiDataMtmUdBitmapFile, &KDC_BITMAP_DIR, &dllFileName );
+    TFileName bitmapFileName= parse.FullName();     
+    
+    // Support for White label branding added
+    CFSMailClient* mailClient = CFSMailClient::NewL();
+    CleanupClosePushL(*mailClient);
+	MFSMailBrandManager& brandManager = mailClient->GetBrandManagerL();
+	RPointerArray<CFSMailBox> mailboxes;
+	CleanupResetAndDestroyClosePushL( mailboxes );
+	TFSMailMsgId id;
+
+	mailClient->ListMailBoxes( id, mailboxes );
+
+	iIconArrays->Reset();
+	iMailboxIds.Reset();
+
+	for ( TInt i = 0; i <= mailboxes.Count(); i++ ) // Last round is for setting the default mb icon at the end of the list
+		{
+	    CFbsBitmap* bitmap(0);
+	    CFbsBitmap* bitmapMask(0);
+	    CArrayPtrFlat<CFbsBitmap>* array = new (ELeave) CArrayPtrFlat<CFbsBitmap>( 2 );
+		CleanupStack::PushL( array ); // +2 array
+		array->SetReserveL( 2 ); // AppendLs will not LEAVE
+		
+		CGulIcon* brandedIcon( NULL );
+		TInt err;
+
+		if ( i < mailboxes.Count() ) // Do not execute for the last round
+			{
+			TRAP( err, brandedIcon = brandManager.GetGraphicL( EFSMailboxIcon, mailboxes[i]->GetId() ) );
+			}
+		if ( err == KErrNone && brandedIcon )
+			{
+			bitmap = brandedIcon->Bitmap();
+			bitmapMask = brandedIcon->Mask();
+			brandedIcon->SetBitmapsOwnedExternally( ETrue );
+		    CleanupStack::PushL( bitmap );
+		    array->AppendL( bitmap );
+		    CleanupStack::Pop( bitmap );
+			bitmap = 0;
+		    CleanupStack::PushL( bitmapMask );
+			array->AppendL( bitmapMask );
+		    CleanupStack::Pop( bitmapMask );
+			bitmapMask = 0;
+			iIconArrays->AppendL( array );
+			iMailboxIds.Append( (mailboxes[i]->GetId()).Id() );
+            }
+		else
+			{
+			// Icon was not found from the branding manager or last round for the default icon
+			TRAPD( err, AknIconUtils::CreateIconL( bitmap, bitmapMask, bitmapFileName,
+					EMbmFsuidatamtmQgn_prop_cmail_inbox_small, EMbmFsuidatamtmQgn_prop_cmail_inbox_small + 1 ));
+			if( err != KErrNone )
+				{
+				}
+		    CleanupStack::PushL( bitmap );
+		    array->AppendL( bitmap );
+		    CleanupStack::Pop( bitmap );
+			bitmap = 0;
+		    CleanupStack::PushL( bitmapMask );
+			array->AppendL( bitmapMask );
+		    CleanupStack::Pop( bitmapMask );
+			bitmapMask = 0;
+			// INFO: This is not working for some reason, otherwise above code is not required.
+			// CreateBitmapsL(2, KFsUiDataMtmUdBitmapFile, EMbmFsuidatamtmFsmailbox, 
+			// EMbmFsuidatamtmLastElement);
+			iIconArrays->AppendL( array );
+			iMailboxIds.Append(0);
+			}
+		if ( brandedIcon )
+			{
+			delete brandedIcon;
+			}
+		CleanupStack::Pop( array );  
+		}
+	
+	CleanupStack::PopAndDestroy( &mailboxes );
+    CleanupStack::PopAndDestroy( mailClient );
+
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CFsUiDataMtm
+// ---------------------------------------------------------------------------
+//
+void CFsUiDataMtm::HandleSessionEventL( TMsvSessionEvent /*aEvent*/, 
+    TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/ )
+{
+    FUNC_LOG;
+    //For now don't do anything.
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::GetResourceFileName
+// From CBaseMtmUiData: Gets the resource file name associated with MTM Ui 
+// Data
+// ---------------------------------------------------------------------------
+//
+void CFsUiDataMtm::GetResourceFileName(TFileName &aFileName) const
+{
+    FUNC_LOG;
+    
+    TFileName dllFileName;
+    Dll::FileName( dllFileName );      
+    TParse parse;
+    parse.Set( KFsUiDataMtmUdResourceFile, &KDC_MTM_RESOURCE_DIR, &dllFileName );
+    aFileName= parse.FullName();   
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::ContextIcon
+// ---------------------------------------------------------------------------
+//
+const CBaseMtmUiData::CBitmapArray& CFsUiDataMtm::ContextIcon( 
+    const TMsvEntry& aContext, TInt /*aStateFlags*/ ) const
+{
+    FUNC_LOG;
+    for ( TInt i = 0; i < iIconArrays->Count() - 1; i++ )
+    	{
+        if ( iMailboxIds[i] == aContext.iMtmData2 )
+        	{    	
+        	return *(iIconArrays->At( i ));
+        	}
+    	}
+    return *(iIconArrays->At( iIconArrays->Count() - 1)); // Default icon
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::MtmSpecificFunctions
+// ---------------------------------------------------------------------------
+//
+const CArrayFix<CBaseMtmUiData::TMtmUiFunction>& CFsUiDataMtm::MtmSpecificFunctions() const
+{
+    FUNC_LOG;
+    return *iMtmSpecificFunctions;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanCancelL
+// Tests if the current operation on the entry can be cancelled.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanCancelL(
+    const TMsvEntry &/*aContext*/, TInt &aReasonResourceId ) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanCloseEntryL()
+// Tests if a close operation is supported.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanCloseEntryL( const TMsvEntry &/*aContext*/, 
+    TInt &/*aReasonResourceId*/ ) const
+{
+    FUNC_LOG;
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanCopyMoveFromEntryL
+// Tests whether a copy from or move from operation is supported.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanCopyMoveFromEntryL(
+    const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanCopyMoveToEntryL
+// Tests if a copy from or move to operation is supported.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanCopyMoveToEntryL(
+    const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+{
+    FUNC_LOG;
+    
+    //ActiveSync Does not support Copying or Moving a Mail into the Inbox.
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanCreateEntryL
+// Tests if an entry can be created as a child.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanCreateEntryL( const TMsvEntry& aParent,  
+    TMsvEntry &aNewEntry, TInt &aReasonResourceId ) const
+{
+    FUNC_LOG;
+    if ((aNewEntry.iMtm == KUidMsgValTypeFsMtmVal) && 
+        (aNewEntry.iType == KUidMsvServiceEntry) )
+    	{
+    	aReasonResourceId=0;
+        // --- Can create services if they are off root ---
+        return (aParent.Id() == KMsvRootIndexEntryIdValue);
+    	}
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanDeleteFromEntryL
+// Tests if a delete operation is supported.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanDeleteFromEntryL( const TMsvEntry &/*aContext*/, 
+    TInt &aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanDeleteServiceL
+// Tests if the service entry can be deleted.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanDeleteServiceL(
+    const TMsvEntry& /*aService*/, TInt& aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanEditEntryL( )
+// Tests if the entry can be edited.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanEditEntryL( const TMsvEntry &/*aContext*/, 
+    TInt &aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanForwardEntryL
+//
+// Tests if an entry can be forwarded.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanForwardEntryL( const TMsvEntry &/*aContext*/, 
+    TInt &aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId=R_FS_NOT_SUPPORTED;
+
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanOpenEntryL
+// Tests if an entry can be opened.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanOpenEntryL( const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanReplyToEntryL
+// Tests if an entry can be replied to.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanReplyToEntryL( const TMsvEntry& /*aContext*/, 
+    TInt& aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanViewEntryL
+// Tests if an entry can be viewed.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanViewEntryL( const TMsvEntry &/*aContext*/, 
+    TInt &aReasonResourceId) const
+{
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::CanUnDeleteFromEntryL
+// Tests if the entry can be undeleted.
+// ---------------------------------------------------------------------------
+//
+TBool CFsUiDataMtm::CanUnDeleteFromEntryL( const TMsvEntry&/*aContext*/, 
+    TInt &aReasonResourceId) const
+    {
+    FUNC_LOG;
+    
+    aReasonResourceId = R_FS_NOT_SUPPORTED;
+    
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::OperationSupportedL
+// Tests if an MTM-specific operation is appropriate to the specified entry.
+// ---------------------------------------------------------------------------
+//
+TInt CFsUiDataMtm::OperationSupportedL(
+    TInt aOperationId, const TMsvEntry &/*aContext*/) const
+    {
+    FUNC_LOG;
+    
+    switch(aOperationId)
+        {
+        case KMtmUiFunctionSendAs:
+            return KErrNone;  // Operation *IS* supported
+        default:
+            break;
+        }
+    return R_FS_NOT_SUPPORTED;
+    }
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::QueryCapability
+// Queries if the MTM supports a particular capability, specified by a UID.
+// ---------------------------------------------------------------------------
+//
+TInt CFsUiDataMtm::QueryCapability( TUid aCapability, TInt &aResponse) const
+    {
+    FUNC_LOG;
+
+    RProcess process;//SCANNER
+    TSecureId sid = process.SecureId();
+    TInt rc = KErrNone;
+    switch ( aCapability.iUid )
+        {
+        // These are defined in mtmdef.hrh in epoc32\include
+        case KUidMtmQueryMaxBodySizeValue:          
+            aResponse = KMaxTInt;
+            break;
+
+        case KUidMtmQueryMaxTotalMsgSizeValue:
+            aResponse=KMaxTInt;
+            break;
+
+        case KUidMtmQuerySupportedBodyValue:
+            aResponse = KMtm7BitBody | KMtm8BitBody | KMtm16BitBody;
+            break;
+
+        case KUidMsvMtmQuerySupportEditor:
+            aResponse=ETrue;
+            break;
+
+        // --- Supported non-valued capabilities ---
+        case KUidMtmQuerySupportAttachmentsValue:
+        case KUidMtmQueryCanSendMsgValue:
+        case KUidMtmQueryCanCreateNewMsgValue: //0x10008b24 - 268471076
+        // INFO - Because of one of these Freestyle is coming under
+        // Writemessga ->Shortmessage, Multimediamesage, .. Freestyle
+        // When Freestyle Install is not yet executed but MTM resouce file 
+        // is compiled.               
+        // Solution - Compare with sid.iID EAknsMinorQgnMenuMceLst = 0x100058C5
+        // defined in aknsconstants.hrh.
+
+            //Disabling SendAs for Calendar is removed.
+       	    aResponse=ETrue;
+            break;
+
+        default:
+            rc = KErrNotSupported;
+     }
+
+    return rc;
+    }
+// ---------------------------------------------------------------------------
+// CFsUiDataMtm::StatusTextL
+// Provides status text for the sending state of the entry.
+// ---------------------------------------------------------------------------
+//
+HBufC* CFsUiDataMtm::StatusTextL( const TMsvEntry& /*aContext*/ ) const
+    {
+    FUNC_LOG;
+
+    return HBufC::NewL(0);
+    }
+
+// End of file
+