diff -r 000000000000 -r 72b543305e3a messagingappbase/mce/src/MceIdleMtmLoader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/src/MceIdleMtmLoader.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,341 @@ +/* +* Copyright (c) 2002 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: +* Active object to load mtm's background after mce start. +* +*/ + + + +// INCLUDE FILES +#include // CR : 401-1806 +#include +#include // KUidMtmQueryCanSendMsg +#include // EMtudCommandSendAs +#include +#include //KUidMsvMtmUiQueryExtendedGetMailProgress + +#include +#include "MceIdleMtmLoader.h" +#include "MceLogText.h" +#include "MsgFunctionInfo.h" +//cmail update +#define KUidMsgTypeFsMtmVal 0x2001F406 +//cmail update + +// LOCAL FUNCTION PROTOTYPES + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code that +// might leave. +// +CMceIdleMtmLoader::CMceIdleMtmLoader( + CMtmStore& aMtmStore, + CUidNameArray& aMsgTypesWritePopup, + CUidNameArray& aMsgTypesWriteSubmenu, + CUidNameArray& aMsgTypesSettings, + CMsgFuncArray& aMTMFunctionsArray, + CMtmUiDataRegistry& aUiRegistry ) +: CActive( CActive::EPriorityIdle ), + iUiRegistry( aUiRegistry ), + iMtmStore(aMtmStore), + iMsgTypesWritePopup( aMsgTypesWritePopup ), + iMsgTypesWriteSubmenu( aMsgTypesWriteSubmenu ), + iMsgTypesSettings( aMsgTypesSettings ), + iMTMFunctionsArray( aMTMFunctionsArray ), + iAudioMsgEnabled (EFalse), + iPostcardEnabled (EFalse) + { + CActiveScheduler::Add(this); + } + +// destructor +CMceIdleMtmLoader::~CMceIdleMtmLoader() + { + } + +// --------------------------------------------------------- +// CMceIdleMtmLoader::StartL +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::StartL(CMsvSession& /*aSession*/, TBool aAudioMsgEnabled, TBool aPostcardEnabled) + { + MCELOGGER_ENTERFN("CMceIdleMtmLoader::StartL()"); + iMsgTypesWriteSubmenu.Reset(); + iMsgTypesWritePopup.Reset(); + iMsgTypesSettings.Reset(); + iMTMFunctionsArray.Reset(); + iRegMtmIndex = 0; + iAudioMsgEnabled = aAudioMsgEnabled ; // CR : 401-1806 + iPostcardEnabled = aPostcardEnabled ; // CR : 401-1806 + QueueLoad(); + MCELOGGER_LEAVEFN("CMceIdleMtmLoader::StartL()"); + } + + +// --------------------------------------------------------- +// CMceIdleMtmLoader::FinishL +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::FinishL(TBool aAudioMsgEnabled, TBool aPostcardEnabled) + { + MCELOGGER_ENTERFN("CMceIdleMtmLoader::FinishL()"); + iAudioMsgEnabled = aAudioMsgEnabled ; // CR : 401-1806 + iPostcardEnabled = aPostcardEnabled ; // CR : 401-1806 + + if(IsActive()) + { + // First consume the outstanding completion. + Cancel(); + // Now load the remaining MTMs synchronously. + while(iRegMtmIndex < iUiRegistry.NumRegisteredMtmDlls()) + { + LoadMtmL( iUiRegistry.MtmTypeUid(iRegMtmIndex) ); + iRegMtmIndex++; + } + + MCELOGGER_WRITE_TIMESTAMP("Time: "); + + // And finally sort the array. + SortAndChangeSmsMmsEmailFirstL(); + } + MCELOGGER_LEAVEFN("CMceIdleMtmLoader::FinishL()"); + } + + +// --------------------------------------------------------- +// CMceIdleMtmLoader::DoCancel +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::DoCancel() + { + } + + +// --------------------------------------------------------- +// CMceIdleMtmLoader::RunL +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::RunL() + { + MCELOGGER_ENTERFN("CMceIdleMtmLoader::RunL()"); + LoadMtmL(iUiRegistry.MtmTypeUid(iRegMtmIndex) ); + iRegMtmIndex++; + QueueLoad(); + if(!IsActive()) + { + // Sort the array after all MTMs loaded. + SortAndChangeSmsMmsEmailFirstL(); + + MCELOGGER_WRITE("CMceIdleMtmLoader: Mtm loading finished"); + MCELOGGER_WRITE_TIMESTAMP("Time: "); + + + } + MCELOGGER_LEAVEFN("CMceIdleMtmLoader::RunL()"); + } + + +// --------------------------------------------------------- +// CMceIdleMtmLoader::QueueLoad +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::QueueLoad() + { + MCELOGGER_ENTERFN("CMceIdleMtmLoader::QueueLoad()"); + const TInt mtmCount = iUiRegistry.NumRegisteredMtmDlls(); + if( iRegMtmIndex < mtmCount ) + { + TRequestStatus *s = &iStatus; + User::RequestComplete(s, KErrNone); + SetActive(); + } + MCELOGGER_LEAVEFN("CMceIdleMtmLoader::QueueLoad()"); + } + + +// --------------------------------------------------------- +// CMceIdleMtmLoader::LoadMtmL +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::LoadMtmL( TUid aMtmType ) + { + MCELOGGER_ENTERFN("CMceIdleMtmLoader::LoadMtmL()"); + MCELOGGER_WRITE_FORMAT("Loading %x", aMtmType.iUid ); + // CR : 401-1806 + FeatureManager::InitializeLibL(); + TBool newPostcardVal = EFalse; + TBool newAudioMsgVal = EFalse; + TBool cMailVal = EFalse; + newAudioMsgVal = FeatureManager::FeatureSupported( KFeatureIdAudioMessaging ); + newPostcardVal = FeatureManager::FeatureSupported( KFeatureIdMmsPostcard ); + cMailVal = FeatureManager::FeatureSupported( KFeatureIdFfEmailFramework ); + FeatureManager::UnInitializeLib(); + if ( aMtmType == KSenduiMtmAudioMessageUid && newAudioMsgVal != iAudioMsgEnabled ) + { + iMtmStore.ReleaseMtmUiData(aMtmType); + } + if ( aMtmType == KSenduiMtmPostcardUid && newPostcardVal != iPostcardEnabled) + { + iMtmStore.ReleaseMtmUiData(aMtmType); + } + CBaseMtmUiData* uiData = NULL; + TRAPD(err, ( uiData = &(iMtmStore.MtmUiDataL(aMtmType)) ) ); + if(err != KErrNone) + { + return; + } + + TInt response; + TUid canSend; + canSend.iUid = KUidMsvMtmQuerySupportEditor ; + + TInt canSendResponse=uiData->QueryCapability(canSend, response); + if ( canSendResponse != KErrNone ) + { + canSend.iUid = KUidMtmQueryCanCreateNewMsgValue; + canSendResponse = uiData->QueryCapability( canSend, response ); + } + + TBool foundPopup = EFalse; + TBool foundSubmenu = EFalse; + const CArrayFix& funcs = + uiData->MtmSpecificFunctions(); + const TInt numFuncs = funcs.Count(); + + for (TInt funcIndex = 0; funcIndex < numFuncs; funcIndex++ ) + { + CBaseMtmUiData::TMtmUiFunction func = funcs.At(funcIndex); + + if ( (func.iFlags&EMtudCommandTransferSend) || + (func.iFlags&EMtudCommandTransferReceive) ) + { + if ( canSendResponse == KErrNone && + func.iFunctionId == KMtmUiMceWriteMessageSubmenu ) + { + iMsgTypesWriteSubmenu.AppendL( TUidNameInfo( + aMtmType, + func.iCaption ) ); + foundSubmenu = ETrue; + } + else if ( canSendResponse == KErrNone && + func.iFunctionId == KMtmUiMceWriteMessagePopup ) + { + iMsgTypesWritePopup.AppendL( TUidNameInfo( + aMtmType, + func.iCaption ) ); + foundPopup = ETrue; + } + else if ( func.iFunctionId == KMtmUiMceSettings ) + { + iMsgTypesSettings.AppendL( TUidNameInfo( + aMtmType, + func.iCaption ) ); + } + else + { + iMTMFunctionsArray.AppendL( + TMsgFunctionInfo( + func.iCaption, + func.iPreferredHotKeyKeyCode, + func.iPreferredHotKeyModifiers, + func.iFunctionId, + func.iFlags, + aMtmType) ); + } + } + } // end for + + + if ( canSendResponse == KErrNone ) + { + if ( !foundPopup ) + { + iMsgTypesWritePopup.AppendL( TUidNameInfo( + aMtmType, + iUiRegistry.RegisteredMtmDllInfo(aMtmType).HumanReadableName() + )); + } + + if ( !foundSubmenu ) + { + //cmail update + if(!(cMailVal && (aMtmType.iUid == KUidMsgTypeFsMtmVal))) + { + iMsgTypesWriteSubmenu.AppendL( TUidNameInfo( + aMtmType, + iUiRegistry.RegisteredMtmDllInfo(aMtmType).HumanReadableName() + )); + } + //cmail update + } + } + + MCELOGGER_LEAVEFN("CMceIdleMtmLoader::LoadMtmL()"); + } + +// --------------------------------------------------------- +// CMceIdleMtmLoader::SortAndChangeSmsMmsEmailFirstL +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::SortAndChangeSmsMmsEmailFirstL() + { + iMsgTypesSettings.Sort(ECmpFolded); + iMsgTypesWritePopup.Sort(ECmpFolded); + iMsgTypesWriteSubmenu.Sort(ECmpFolded); + + ChangeMsgTypeTopL( iMsgTypesSettings, KSenduiMtmPostcardUid ); + ChangeMsgTypeTopL( iMsgTypesWritePopup, KSenduiMtmPostcardUid ); + ChangeMsgTypeTopL( iMsgTypesWriteSubmenu, KSenduiMtmPostcardUid ); + + ChangeMsgTypeTopL( iMsgTypesSettings, KSenduiMtmSyncMLEmailUid ); + ChangeMsgTypeTopL( iMsgTypesWritePopup, KSenduiMtmSyncMLEmailUid ); + ChangeMsgTypeTopL( iMsgTypesWriteSubmenu, KSenduiMtmSyncMLEmailUid ); + + ChangeMsgTypeTopL( iMsgTypesSettings, KSenduiMtmSmtpUid ); + ChangeMsgTypeTopL( iMsgTypesWritePopup, KSenduiMtmSmtpUid ); + ChangeMsgTypeTopL( iMsgTypesWriteSubmenu, KSenduiMtmSmtpUid ); + + ChangeMsgTypeTopL( iMsgTypesSettings, KSenduiMtmAudioMessageUid ); + ChangeMsgTypeTopL( iMsgTypesWritePopup, KSenduiMtmAudioMessageUid ); + ChangeMsgTypeTopL( iMsgTypesWriteSubmenu, KSenduiMtmAudioMessageUid ); + + // SMS & MMS still have own settings although the editor is common. + ChangeMsgTypeTopL( iMsgTypesSettings, KSenduiMtmMmsUid ); + ChangeMsgTypeTopL( iMsgTypesSettings, KSenduiMtmSmsUid ); + ChangeMsgTypeTopL( iMsgTypesWritePopup, KSenduiMtmUniMessageUid ); + ChangeMsgTypeTopL( iMsgTypesWriteSubmenu, KSenduiMtmUniMessageUid ); + } +// --------------------------------------------------------- +// CMceIdleMtmLoader::ChangeMsgTypeTopL +// --------------------------------------------------------- +// +void CMceIdleMtmLoader::ChangeMsgTypeTopL( CUidNameArray& aArray, TUid aMsgType ) const + { + TInt loop = 0; + // first change email to the top + for (loop=1; loop < aArray.Count(); loop++) + { + if (aArray[loop].iUid == aMsgType) + { + TUidNameInfo info = aArray[loop]; + aArray.InsertL( 0, info ); + aArray.Delete( loop+1 ); + break; + } + } + } + +// End of File