messagingappbase/mce/src/MceIdleMtmLoader.cpp
changeset 0 72b543305e3a
child 2 0bf1d54f37d9
--- /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 <featmgr.h>  // CR : 401-1806
+#include <MTMStore.h>
+#include <mtmuids.h> // KUidMtmQueryCanSendMsg
+#include <mtud.hrh>  // EMtudCommandSendAs
+#include <mtudreg.h>
+#include <MtmExtendedCapabilities.hrh> //KUidMsvMtmUiQueryExtendedGetMailProgress
+
+#include <SenduiMtmUids.h>
+#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<CBaseMtmUiData::TMtmUiFunction>& 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