--- /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
+