diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/sendasmtm/fsmtms/uidata/src/cfsuidatamtm.cpp --- /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 +#include +#include +#include +#include +#include +#include + +#include +#include "fsmtmsuids.h" +#include +#include "fsmtmsconstants.h" +#include "cfsuidatamtm.h" + +// FREESTYLE EMAIL FRAMEWORK INCLUDES +#include "CFSMailCommon.h" +#include "CFSMailClient.h" +#include "CFSMailBox.h" + + +#include +#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(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 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* array = new (ELeave) CArrayPtrFlat( 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& 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 +