Revision: 201019
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 13:23:05 +0300
changeset 23 427125ac6cb8
parent 19 e44a8c097b15
child 27 7eb70891911c
Revision: 201019 Kit: 2010121
cbs/CbsServer/conf/cbsserver.confml
phonesrv_plat/call_information_api/tsrc/group/MT_CallInformation.mmp
phonesrv_plat/call_information_api/tsrc/src/CPEMessageWaiter.cpp
phonesrv_plat/call_information_api/tsrc/src/CPhoneEngineCreator.cpp
phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation.cpp
phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation.h
phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation_DllMain.cpp
phonesrv_plat/dialpad_api/group/bld.inf
phonesrv_plat/dialpad_api/inc/dialpadkeyhandler.h
phonesrv_plat/dialpad_api/inc/dialpadvtkeyhandler.h
phonesrv_plat/voice_mailbox_number_api/inc/cvoicemailbox.h
phonesrv_plat/voice_mailbox_number_api/inc/voicemailboxdefs.h
phonesrv_plat/voice_mailbox_number_api/tsrc/mt_vmbxengine.cpp
satengine/SatServer/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp
satengine/SatServer/Engine/src/CSatCommandContainer.cpp
satui/satapp/src/satappuiprovider.cpp
telutils/dialpad/bwins/dialpadu.def
telutils/dialpad/dialpad.pro
telutils/dialpad/eabi/dialpadu.def
telutils/dialpad/inc/dialpademergencycalleventfilter.h
telutils/dialpad/inc/dialpadmailboxeventfilterbase.h
telutils/dialpad/inc/dialpadsymbianwrapper.h
telutils/dialpad/inc/dialpadsymbianwrapper_p.h
telutils/dialpad/inc/dialpadsymbianwrapper_p_stub.h
telutils/dialpad/inc/dialpadvideomailboxeventfilter.h
telutils/dialpad/inc/dialpadvoicemailboxeventfilter.h
telutils/dialpad/resources/dialpad.css
telutils/dialpad/src/dialpademergencycalleventfilter.cpp
telutils/dialpad/src/dialpadkeyhandler.cpp
telutils/dialpad/src/dialpadmailboxeventfilterbase.cpp
telutils/dialpad/src/dialpadsymbianwrapper.cpp
telutils/dialpad/src/dialpadsymbianwrapper_p.cpp
telutils/dialpad/src/dialpadsymbianwrapper_p_stub.cpp
telutils/dialpad/src/dialpadvideomailboxeventfilter.cpp
telutils/dialpad/src/dialpadvoicemailboxeventfilter.cpp
telutils/dialpad/src/dialpadvtkeyhandler.cpp
telutils/dialpad/tsrc/unit/runall.cmd
telutils/dialpad/tsrc/unit/unit.pro
telutils/dialpad/tsrc/unit/ut_dialpadbuttonstyle/ut_dialpadbuttonstyle.cpp
telutils/dialpad/tsrc/unit/ut_dialpadbuttonstyle/ut_dialpadbuttonstyle.pro
telutils/dialpad/tsrc/unit/ut_dialpademergencycalleventfilter/ut_dialpademergencycalleventfilter.cpp
telutils/dialpad/tsrc/unit/ut_dialpademergencycalleventfilter/ut_dialpademergencycalleventfilter.pro
telutils/dialpad/tsrc/unit/ut_dialpademergencycalleventfilter/xqservicerequest.h
telutils/dialpad/tsrc/unit/ut_dialpadvideomailboxeventfilter/ut_dialpadvideomailboxeventfilter.cpp
telutils/dialpad/tsrc/unit/ut_dialpadvideomailboxeventfilter/ut_dialpadvideomailboxeventfilter.pro
telutils/dialpad/tsrc/unit/ut_dialpadvideomailboxeventfilter/xqservicerequest.h
telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.cpp
telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.pro
vmbx/vmbxcpplugin/src/vmbxcpgroup.cpp
vmbx/vmbxcpplugin/tsrc/src/ut_vmbxcpplugin.cpp
Binary file cbs/CbsServer/conf/cbsserver.confml has changed
--- a/phonesrv_plat/call_information_api/tsrc/group/MT_CallInformation.mmp	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/group/MT_CallInformation.mmp	Thu May 27 13:23:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009-2010 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"
@@ -15,9 +15,7 @@
 *
 */
 /*
------------------------------------------------------------------------------
-This file has been generated with EUnit Pro
------------------------------------------------------------------------------
+
 */
 #include <platform_paths.hrh>
 TARGET          MT_CallInformation.dll
@@ -41,15 +39,15 @@
 USERINCLUDE             ../src
 
 MW_LAYER_SYSTEMINCLUDE
-SYSTEMINCLUDE           /epoc32/include/Digia/EUnit
+SYSTEMINCLUDE           /epoc32/include/platform/digia/eunit
 #if defined(WINSCW)
 SYSTEMINCLUDE           ../../../../../../app/phone/inc
 SYSTEMINCLUDE           ../../../../../../app/phone/phoneengine/inc
 SYSTEMINCLUDE           ../../../../../../app/phone/phoneengine/audiohandling/inc
 #endif
 
-LIBRARY                 EUnit.lib
-LIBRARY                 EUnitUtil.lib
+LIBRARY                 eunit.lib
+LIBRARY                 eunitutil.lib
 LIBRARY                 euser.lib
 LIBRARY                 telephonyservice.lib
 LIBRARY                 etel.lib
@@ -57,6 +55,6 @@
 LIBRARY                 phoneclient.lib
 
 #if defined(WINSCW)
-LIBRARY                 PhoneEngine.lib
-LIBRARY                 AudioHandling.lib
+LIBRARY                 phoneengine.lib
+LIBRARY                 audiohandling.lib
 #endif
\ No newline at end of file
--- a/phonesrv_plat/call_information_api/tsrc/src/CPEMessageWaiter.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/src/CPEMessageWaiter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -16,7 +16,7 @@
 */
 #include "CPEMessageWaiter.h"
 
-#include <EUnitMacros.h>
+#include <eunitmacros.h>
 
 #include "talogger.h"
 #include "CActiveWait.h"
--- a/phonesrv_plat/call_information_api/tsrc/src/CPhoneEngineCreator.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/src/CPhoneEngineCreator.cpp	Thu May 27 13:23:05 2010 +0300
@@ -17,8 +17,7 @@
 #include "CPhoneEngineCreator.h"
 
 #include <TelephonyAudioRoutingManager.h>
-#include <activeidle2domainpskeys.h>
-#include <CPEPhoneModelIf.h>
+#include <cpephonemodelif.h>
 #include "CPEMessageWaiter.h"
 
 
@@ -59,16 +58,7 @@
                 MEngineMonitor::EPEMessagePEConstructionReady,
                 40 );
         }    
-    
-    // No error checking here because this will succeed only once when this is called. The RProperty::Set will
-    // fail, if this call is not successfull at all.
-    RProperty::Define( 
-        KPSUidAiInformation,
-        KActiveIdleState,
-        RProperty::EInt );
-                            
-    User::LeaveIfError( RProperty::Set( KPSUidAiInformation, KActiveIdleState, EPSAiForeground ) ); 
-    
+
     return pEif;
     }
 
--- a/phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation.cpp	Thu May 27 13:23:05 2010 +0300
@@ -22,13 +22,13 @@
 #include "CPEMessageWaiter.h"
 #endif
 
-#include <EUnitMacros.h>
-#include <EUnitDecorators.h>
+#include <eunitmacros.h>
+#include <eunitdecorators.h>
 
 #include <etelmm.h>
 
 #include <mmtsy_names.h>
-#include <MCall.h>
+#include <mcall.h>
 #include <ccallinfoiter.h>
 #include <cphcltemergencycall.h>
 #include <mphcltemergencycallobserver.h>
--- a/phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation.h	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation.h	Thu May 27 13:23:05 2010 +0300
@@ -19,8 +19,8 @@
 #define __MT_CALLINFORMATION_H__
 
 // INCLUDES
-#include <CEUnitTestSuiteClass.h>
-#include <EUnitDecorators.h>
+#include <ceunittestsuiteclass.h>
+#include <eunitdecorators.h>
 
 #include <etel.h>
 #include <CCallInformation.h>
--- a/phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation_DllMain.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/call_information_api/tsrc/src/MT_CallInformation_DllMain.cpp	Thu May 27 13:23:05 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 #include "MT_CallInformation.h"
-#include <CEUnitTestSuite.h>
+#include <ceunittestsuite.h>
 
 EXPORT_C MEUnitTest* CreateTestSuiteL()
     {
--- a/phonesrv_plat/dialpad_api/group/bld.inf	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/dialpad_api/group/bld.inf	Thu May 27 13:23:05 2010 +0300
@@ -24,3 +24,4 @@
 PRJ_EXPORTS
 ../inc/dialpad.h                        MW_LAYER_PLATFORM_EXPORT_PATH(dialpad.h)
 ../inc/dialpadkeyhandler.h              MW_LAYER_PLATFORM_EXPORT_PATH(dialpadkeyhandler.h)
+../inc/dialpadvtkeyhandler.h            MW_LAYER_PLATFORM_EXPORT_PATH(dialpadvtkeyhandler.h)
--- a/phonesrv_plat/dialpad_api/inc/dialpadkeyhandler.h	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/dialpad_api/inc/dialpadkeyhandler.h	Thu May 27 13:23:05 2010 +0300
@@ -22,6 +22,7 @@
 
 class Dialpad;
 class DialpadVoiceMailboxEventFilter;
+class DialpadVideoMailboxEventFilter;
 class DialpadBluetoothEventFilter;
 class DialpadKeySequenceEventFilter;
 class HbMainWindow;
@@ -52,8 +53,10 @@
 private:
     HbMainWindow& mMainWindow;
     QScopedPointer<DialpadVoiceMailboxEventFilter> mVmbxFilter;
+    QScopedPointer<DialpadVideoMailboxEventFilter> mVideoVmbxFilter;
     QScopedPointer<DialpadBluetoothEventFilter> mBtFilter;
     QScopedPointer<DialpadKeySequenceEventFilter> mKeySequenceFilter;
+    bool mIsVideoMailboxSupported;
 };
 
 #endif // DIALPADKEYHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonesrv_plat/dialpad_api/inc/dialpadvtkeyhandler.h	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,57 @@
+/*!
+* Copyright (c) 2010 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: Dialpad key handler.
+*
+*/
+
+#ifndef DIALPADVTKEYHANDLER_H
+#define DIALPADVTKEYHANDLER_H
+
+#include <QObject>
+
+class Dialpad;
+class DialpadKeySequenceEventFilter;
+class DialpadEmergencyCallEventFilter;
+class HbMainWindow;
+
+#ifdef BUILD_DIALPADKEYHANDLER
+#define DIALPADKEYHANDLER_EXPORT Q_DECL_EXPORT
+#else
+#define DIALPADKEYHANDLER_EXPORT Q_DECL_IMPORT
+#endif
+/*!
+    DialpadVtKeyHandler
+    Class provides key handling for dialpad component.
+
+    @code
+    Dialpad *dialpad = new Dialpad();
+    DialpadVtKeyHandler *keyhandler = new DialpadVtKeyHandler(dialpad, this);
+    @endcode
+    
+*/
+class DIALPADKEYHANDLER_EXPORT DialpadVtKeyHandler : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit DialpadVtKeyHandler(Dialpad *dialPad, HbMainWindow& mainWindow, QObject *parent = 0);
+    virtual ~DialpadVtKeyHandler();
+
+private:
+    HbMainWindow& mMainWindow;
+    DialpadEmergencyCallEventFilter *mEmergencyCallFilter;
+    DialpadKeySequenceEventFilter *mKeySequenceFilter;
+};
+
+#endif // DIALPADVTKEYHANDLER_H
--- a/phonesrv_plat/voice_mailbox_number_api/inc/cvoicemailbox.h	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/voice_mailbox_number_api/inc/cvoicemailbox.h	Thu May 27 13:23:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
--- a/phonesrv_plat/voice_mailbox_number_api/inc/voicemailboxdefs.h	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/voice_mailbox_number_api/inc/voicemailboxdefs.h	Thu May 27 13:23:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -73,8 +73,7 @@
 enum TVmbxFeatureCapabilityFlag
     {
     /**
-     * When flag is enabled the user is not allowed to define or
-     * modify the voice mailbox number.
+     * Used to check whether user editing is allowed or not
      */
     EVmbxChangeNbrAllowedOnUi = 0x01,
 
--- a/phonesrv_plat/voice_mailbox_number_api/tsrc/mt_vmbxengine.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/phonesrv_plat/voice_mailbox_number_api/tsrc/mt_vmbxengine.cpp	Thu May 27 13:23:05 2010 +0300
@@ -121,21 +121,21 @@
     TVoiceMailboxParams params;
     params.iType = EVmbxVoice;
     TBool result = 
-    mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi);
+    mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi);
     if (!result) {
     qDebug("Mt_vmbxEngine::testCheckConfiguration: voice not allowed changed");
     QEXPECT_FAIL("","testCheckConfiguration voice not allowed changed", Continue);
     }
     params.iType = EVmbxVideo;
     result = 
-    mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi);
+    mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi);
     if (!result) {
     qDebug( "Mt_vmbxEngine::testCheckConfiguration: video not allowed changed");
     QEXPECT_FAIL("","testCheckConfiguration video not allowed changed", Continue);
     }
     params.iType = EVmbxVoip;
     result = 
-    mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi);
+    mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi);
     if (result) {
     QFAIL ("testCheckConfiguration voip failed");
     }
@@ -170,7 +170,7 @@
     params.iType = EVmbxVoice;
     CVoiceMailboxEntry* storedEntry = 0;
     TInt result(0);
-    if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi)) {
+    if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi)) {
         qDebug("Mt_vmbxEngine::testSaveProvisionedEntry voice");
         result = mVmbxEngine->GetStoredEntry(params,storedEntry);
         if (KErrNotFound == result) {
@@ -186,7 +186,7 @@
         QCOMPARE(result, KErrNone);
     }
     params.iType = EVmbxVideo;
-    if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi)) {
+    if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi)) {
         qDebug("Mt_vmbxEngine::testSaveProvisionedEntry video");
         result = mVmbxEngine->GetStoredEntry(params,storedEntry);
         if (KErrNotFound == result) {
@@ -225,7 +225,7 @@
         // test QueryNewEntry
         result = mVmbxEngine->QueryNewEntry( params, vmbxEntry );
         //QVERIFY2(KErrNone == result, "QueryNewEntry Failed.");
-        if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi)
+        if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi)
             && KErrNone == result) {
         // test SaveEntry
         result = mVmbxEngine->SaveEntry( *vmbxEntry );
@@ -236,7 +236,7 @@
         // test change entry
         result = mVmbxEngine->QueryChangeEntry( params, vmbxEntry );
         //QVERIFY2(KErrNone == result, "QueryChangeEntry Failed.");
-        if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrNotAllowedOnUi) 
+        if (mVmbxEngine->CheckConfiguration(params,EVmbxChangeNbrAllowedOnUi) 
             && KErrNone == result ) {
             result = mVmbxEngine->SaveEntry( *vmbxEntry );
             QVERIFY2(KErrNone == result, "SaveEntry Failed.");
--- a/satengine/SatServer/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/satengine/SatServer/Commands/SendUSSDCmd/src/CSendUssdHandler.cpp	Thu May 27 13:23:05 2010 +0300
@@ -256,6 +256,9 @@
 
     // Allow next terminal response to be sent
     iTerminalRespSent = EFalse;
+    
+    iSendUssdRsp.iUssdString.iUssdString.FillZ();
+    iSendUssdRsp.iUssdString.iDcs = 0;
 
     RMobilePhone::TMobilePhoneRegistrationStatus registrationStatus(
         iUtils->SystemState().GetNetworkRegistrationStatus() );
@@ -748,6 +751,16 @@
         iSendUssdRsp.iInfoType = RSat::KNoAdditionalInfo;
         iSendUssdRsp.iAdditionalInfo.SetLength( 0 );
         iSendUssdRsp.iAdditionalInfo.Zero();
+        }
+    else if ( KErrSatControl == aError )
+        {
+        LOG( SIMPLE, 
+        "SENDUSSD: CSendUssdHandler::HandleSendUssdResult \
+        KModifiedByCallControl" )
+        iSendUssdRsp.iGeneralResult = RSat::KModifiedByCallControl;
+        iSendUssdRsp.iInfoType = RSat::KNoAdditionalInfo;
+        iSendUssdRsp.iAdditionalInfo.SetLength( 0 );
+        iSendUssdRsp.iAdditionalInfo.Zero();
 		}
     else if ( KErrNone == aError )   //  Success case
         {
@@ -866,6 +879,11 @@
         LOG( SIMPLE, 
         "SENDUSSD: CSendUssdHandler::SendTerminalResponse iTerminalRespSent \
         false" )
+        
+        LOG3(SIMPLE, "SENDUSSD: CSendUssdHandler::SendTerminalResponse \
+            iDcs=%d,iUssdString=%s", iSendUssdRsp.iUssdString.iDcs,
+            &iSendUssdRsp.iUssdString.iUssdString);
+        
         iTerminalRespSent = ETrue;
         iSendUssdRsp.SetPCmdNumber( iSendUssdData.PCmdNumber() );
         TerminalRsp( RSat::ESendUssd, iSendUssdRspPckg );
--- a/satengine/SatServer/Engine/src/CSatCommandContainer.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/satengine/SatServer/Engine/src/CSatCommandContainer.cpp	Thu May 27 13:23:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 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"
@@ -67,6 +67,31 @@
 // Implementation UID is from the <plugin>.rss
 const TUid KSetUpEventListUid = { 0x10202993 };
 
+// ======== LOCAL FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CleanupPointerArray
+// Cleanup RPointerArray objects by using the cleanup stack. Function will be 
+// called when application leaves while a RPointerArray object still alive, 
+// or when CleanupStack::PopAndDestroy is explicitly called to release a 
+// RPointerArray. See CleanupStack::PushL( TCleanupItem ) for more details.
+// -----------------------------------------------------------------------------
+//
+static void CleanupPointerArray( TAny* aArray )
+    {
+    LOG2( NORMAL, "SATENGINE: CSatCommandContainer::CleanupPointerArray \
+        calling array = 0x%08x", aArray )
+    
+    RImplInfoPtrArray* array = reinterpret_cast<RImplInfoPtrArray*>( aArray );
+    if ( array )
+        {
+        array->ResetAndDestroy();
+        }
+    
+    LOG( NORMAL, "SATENGINE: CSatCommandContainer::CleanupPointerArray \
+        exiting" )
+    }
+
 // ======== MEMBER FUNCTIONS ========
 
 // -----------------------------------------------------------------------------
@@ -158,6 +183,8 @@
              in startup phase" )
         // Create command handlers.
         RImplInfoPtrArray satCommandImplementations;
+        CleanupStack::PushL( 
+            TCleanupItem( CleanupPointerArray, &satCommandImplementations ) );
         REComSession::ListImplementationsL( KSatInterfaceDefinitionUid,
             satCommandImplementations );
 
@@ -196,7 +223,7 @@
                     }
                 }
             }
-        satCommandImplementations.ResetAndDestroy();
+        CleanupStack::PopAndDestroy( &satCommandImplementations );
         
         // Notify TSY about readiness i.e. all nofies are sent
         // Done only once in startup phase
@@ -219,6 +246,8 @@
 
         // Create command handlers.
         RImplInfoPtrArray satCommandImplementations;
+        CleanupStack::PushL( 
+            TCleanupItem( CleanupPointerArray, &satCommandImplementations ) );
         REComSession::ListImplementationsL( KSatInterfaceDefinitionUid,
             satCommandImplementations );
 
@@ -253,7 +282,7 @@
             // No commands, remove SAT Icon from shell
             iSatUiHandler.ShellController().RemoveSatUiL();
             }
-        satCommandImplementations.ResetAndDestroy();
+        CleanupStack::PopAndDestroy( &satCommandImplementations );
         }
     else
         {
@@ -1085,9 +1114,11 @@
 
     // Create command handlers.
     RImplInfoPtrArray satCommandImplementations;
+    CleanupStack::PushL( 
+        TCleanupItem( CleanupPointerArray, &satCommandImplementations ) );
     REComSession::ListImplementationsL( KSatInterfaceDefinitionUid,
         satCommandImplementations );
-
+    
     // Container for commands
     const TInt cmdCount( satCommandImplementations.Count() );
     LOG2( NORMAL, "SATENGINE: CSatCommandContainer::\
@@ -1118,8 +1149,8 @@
             CleanupStack::Pop( setUpEventListCmd );
             }
         }
-
-    satCommandImplementations.Close();
+    
+    CleanupStack::PopAndDestroy( &satCommandImplementations );
     LOG( NORMAL, "SATENGINE: CSatCommandContainer::\
         StartImportantCommandHandlersL exiting" )
     }
@@ -1142,3 +1173,5 @@
         }
     LOG( NORMAL, "SATENGINE: CSatCommandContainer::CheckStartupState exiting" )
     }
+
+// End Of File
--- a/satui/satapp/src/satappuiprovider.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/satui/satapp/src/satappuiprovider.cpp	Thu May 27 13:23:05 2010 +0300
@@ -319,7 +319,6 @@
         HbEditorInterface inputMode(mGetInkeyQuery->lineEdit());
         if (ESatDigitOnly == aCharacterSet) {
             // digit mode, digits only (0 9, *, #, and +)
-//            inputMode.setUpAsPhoneNumberEditor();
             inputMode.setFilter(HbPhoneNumberFilter::instance());
          } else {
             // char mode
--- a/telutils/dialpad/bwins/dialpadu.def	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/bwins/dialpadu.def	Thu May 27 13:23:05 2010 +0300
@@ -49,4 +49,16 @@
 	??0DialpadKeyHandler@@QAE@PAVDialpad@@AAVHbMainWindow@@PAVQObject@@@Z @ 48 NONAME ; DialpadKeyHandler::DialpadKeyHandler(class Dialpad *, class HbMainWindow &, class QObject *)
 	?isOpen@Dialpad@@QBE_NXZ @ 49 NONAME ; bool Dialpad::isOpen(void) const
 	?aboutToOpen@Dialpad@@IAEXXZ @ 50 NONAME ; void Dialpad::aboutToOpen(void)
+	??1DialpadVtKeyHandler@@UAE@XZ @ 51 NONAME ; DialpadVtKeyHandler::~DialpadVtKeyHandler(void)
+	?metaObject@DialpadVtKeyHandler@@UBEPBUQMetaObject@@XZ @ 52 NONAME ; struct QMetaObject const * DialpadVtKeyHandler::metaObject(void) const
+	?tr@DialpadVtKeyHandler@@SA?AVQString@@PBD0H@Z @ 53 NONAME ; class QString DialpadVtKeyHandler::tr(char const *, char const *, int)
+	??0DialpadVtKeyHandler@@QAE@PAVDialpad@@AAVHbMainWindow@@PAVQObject@@@Z @ 54 NONAME ; DialpadVtKeyHandler::DialpadVtKeyHandler(class Dialpad *, class HbMainWindow &, class QObject *)
+	?trUtf8@DialpadVtKeyHandler@@SA?AVQString@@PBD0H@Z @ 55 NONAME ; class QString DialpadVtKeyHandler::trUtf8(char const *, char const *, int)
+	?trUtf8@DialpadVtKeyHandler@@SA?AVQString@@PBD0@Z @ 56 NONAME ; class QString DialpadVtKeyHandler::trUtf8(char const *, char const *)
+	?staticMetaObject@DialpadVtKeyHandler@@2UQMetaObject@@B @ 57 NONAME ; struct QMetaObject const DialpadVtKeyHandler::staticMetaObject
+	?qt_metacall@DialpadVtKeyHandler@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 58 NONAME ; int DialpadVtKeyHandler::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?getStaticMetaObject@DialpadVtKeyHandler@@SAABUQMetaObject@@XZ @ 59 NONAME ; struct QMetaObject const & DialpadVtKeyHandler::getStaticMetaObject(void)
+	??_EDialpadVtKeyHandler@@UAE@I@Z @ 60 NONAME ; DialpadVtKeyHandler::~DialpadVtKeyHandler(unsigned int)
+	?qt_metacast@DialpadVtKeyHandler@@UAEPAXPBD@Z @ 61 NONAME ; void * DialpadVtKeyHandler::qt_metacast(char const *)
+	?tr@DialpadVtKeyHandler@@SA?AVQString@@PBD0@Z @ 62 NONAME ; class QString DialpadVtKeyHandler::tr(char const *, char const *)
 
--- a/telutils/dialpad/dialpad.pro	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/dialpad.pro	Thu May 27 13:23:05 2010 +0300
@@ -23,6 +23,7 @@
 
 HEADERS += ../../phonesrv_plat/dialpad_api/inc/dialpad.h \
            ../../phonesrv_plat/dialpad_api/inc/dialpadkeyhandler.h \
+           ../../phonesrv_plat/dialpad_api/inc/dialpadvtkeyhandler.h \
            inc/dialpadbutton.h \
            inc/dialpadinputfield.h \
            inc/dialpadkeypad.h \
@@ -31,7 +32,10 @@
            inc/dialpadbackground.h \
            inc/dialpadvoicemailboxeventfilter.h \
            inc/dialpadbluetootheventfilter.h \
-           inc/dialpadkeysequenceeventfilter.h
+           inc/dialpadkeysequenceeventfilter.h \
+           inc/dialpadvideomailboxeventfilter.h \
+           inc/dialpadmailboxeventfilterbase.h \
+           inc/dialpademergencycalleventfilter.h
 
 SOURCES += src/dialpad.cpp \
            src/dialpadbutton.cpp \
@@ -43,7 +47,11 @@
            src/dialpadbackground.cpp \
            src/dialpadvoicemailboxeventfilter.cpp \
            src/dialpadbluetootheventfilter.cpp \
-           src/dialpadkeysequenceeventfilter.cpp
+           src/dialpadkeysequenceeventfilter.cpp \
+           src/dialpadvideomailboxeventfilter.cpp \
+           src/dialpadmailboxeventfilterbase.cpp \
+           src/dialpademergencycalleventfilter.cpp \
+           src/dialpadvtkeyhandler.cpp
 
 RESOURCES += dialpad.qrc
 
@@ -70,7 +78,9 @@
     
     LIBS += -lxqservice \
             -lxqserviceutil \
-            -lvmbxengine
+            -lvmbxengine \
+            -lfeatmgr \
+            -lphoneclient
 }
 else:win32 { 
     HEADERS += inc/dialpadsymbianwrapper_p_stub.h
--- a/telutils/dialpad/eabi/dialpadu.def	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/eabi/dialpadu.def	Thu May 27 13:23:05 2010 +0300
@@ -57,4 +57,16 @@
 	_ZThn8_N7DialpadD0Ev @ 56 NONAME
 	_ZThn8_N7DialpadD1Ev @ 57 NONAME
 	_ZN7Dialpad11aboutToOpenEv @ 58 NONAME
+	_ZN19DialpadVtKeyHandler11qt_metacallEN11QMetaObject4CallEiPPv @ 59 NONAME
+	_ZN19DialpadVtKeyHandler11qt_metacastEPKc @ 60 NONAME
+	_ZN19DialpadVtKeyHandler16staticMetaObjectE @ 61 NONAME DATA 16
+	_ZN19DialpadVtKeyHandler19getStaticMetaObjectEv @ 62 NONAME
+	_ZN19DialpadVtKeyHandlerC1EP7DialpadR12HbMainWindowP7QObject @ 63 NONAME
+	_ZN19DialpadVtKeyHandlerC2EP7DialpadR12HbMainWindowP7QObject @ 64 NONAME
+	_ZN19DialpadVtKeyHandlerD0Ev @ 65 NONAME
+	_ZN19DialpadVtKeyHandlerD1Ev @ 66 NONAME
+	_ZN19DialpadVtKeyHandlerD2Ev @ 67 NONAME
+	_ZNK19DialpadVtKeyHandler10metaObjectEv @ 68 NONAME
+	_ZTI19DialpadVtKeyHandler @ 69 NONAME
+	_ZTV19DialpadVtKeyHandler @ 70 NONAME
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/inc/dialpademergencycalleventfilter.h	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,78 @@
+/*!
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef DIALPADEMERGENCYCALLEVENTFILTER_H
+#define DIALPADEMERGENCYCALLEVENTFILTER_H
+
+#include <QObject>
+
+class Dialpad;
+class CPhCltEmergencyCall;
+
+/*!
+    DialpadEmergencyCallEventFilter
+    Class provides emergency call key handling.
+*/
+class DialpadEmergencyCallEventFilter : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit DialpadEmergencyCallEventFilter(Dialpad* dialpad, QObject* parent = 0);
+    virtual ~DialpadEmergencyCallEventFilter();
+
+protected:
+    bool eventFilter(QObject *watched, QEvent *event);
+
+private:
+
+    /*!
+       \fn void isEmergencyNumber()
+
+       Checks is string emergency number.
+    */
+    bool isEmergencyNumber(QString string);
+    
+    /*!
+       \fn void editorText()
+
+       Returns text from editor (in western digits).
+    */
+    QString editorText();
+    
+    /*!
+       \fn createCall(const QString phoneNumber)
+
+       Creates call request to QT Highway.
+    */
+    void createCall(const QString &phoneNumber);
+
+protected slots:
+
+    /*!
+        \fn void editorTextChanged()
+        
+        This slot is called when dialpad editor text is changed.
+    */
+    void editorTextChanged();
+    
+private:
+    Dialpad* mDialpad;
+    CPhCltEmergencyCall* mEmergency;
+};
+
+#endif // DIALPADEMERGENCYCALLEVENTFILTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/inc/dialpadmailboxeventfilterbase.h	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,112 @@
+/*!
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef DIALPADMAILBOXEVENTFILTERBASE_H
+#define DIALPADMAILBOXEVENTFILTERBASE_H
+
+#include <QObject>
+
+class QTimer;
+class Dialpad;
+class DialpadSymbianWrapper;
+
+enum err {
+    DialpadErrorNone = 0,
+    DialpadErrorCancel = -3
+};
+const int DialpadLongKeyPressTimeOut(1000);
+
+/*!
+    DialpadMailboxEventFilterBase
+    Class provides voice mailbox key handling.
+*/
+class DialpadMailboxEventFilterBase : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit DialpadMailboxEventFilterBase(Dialpad* dialpad, QObject* parent = 0);
+    virtual ~DialpadMailboxEventFilterBase();
+
+protected:
+    virtual bool eventFilter(QObject *watched, QEvent *event) = 0;
+
+    /*!
+        \fn bool isLongKeyPressSupported(const int key)
+
+        Checks if key is numeric key'1' or numbersign key if it is then
+        function return true, if key is something else for example
+        yes/send then this returns false.
+    */
+    bool isLongKeyPressSupported(const int key);
+
+    /*!
+       \fn bool checkIfSendEventAndConsumeEvent(const int pressedKey, const int eventType)
+
+       Checks that keycode is call related key if it is then handle it.
+       */
+    bool checkIfSendEventAndConsumeEvent(const int pressedKey, const int eventType);
+
+    /*!
+       \fn bool handleCallButtonPress()
+
+       Check if editor has number string and if it does then createCall
+       is called and funtion returns true, if there is no number then
+       funtion return false.
+   */
+    virtual bool handleCallButtonPress() = 0;
+
+    /*!
+       \fn void clearEditor()
+
+       Clears dialpad editor.
+    */
+    void clearEditor();
+
+    /*!
+       \fn createCall(const QString phoneNumber)
+
+       Creates call request to QT Highway.
+    */
+    void createCall(const QString &phoneNumber, bool createVideoCall = false);
+
+    /*!
+       \fn handleMailboxOperation
+
+       Start vmbx call or number definition procedures.
+    */
+    virtual void handleMailboxOperation() = 0;
+
+    
+protected slots:
+
+    /*!
+       \fn void handleLongKeyPress()
+    
+       Handles long key presses.
+    */
+    virtual void handleLongKeyPress() = 0;
+
+
+protected:
+    QTimer *mLongPressTimer;
+    DialpadSymbianWrapper *mSymbianWrapper;
+    Dialpad* mDialpad;
+    int mKeyEvent;
+};
+
+#endif // DIALPADMAILBOXEVENTFILTERBASE_H
--- a/telutils/dialpad/inc/dialpadsymbianwrapper.h	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/inc/dialpadsymbianwrapper.h	Thu May 27 13:23:05 2010 +0300
@@ -37,8 +37,10 @@
     ~DialpadSymbianWrapper();
     
     int getMailboxNumber(QString &vmbxNumber);
+    int getVideoMailboxNumber(QString &vmbxNumber);
         
     int defineMailboxNumber(QString &vmbxNumber);
+    int defineVideoMailboxNumber(QString &vmbxNumber);
 
 protected:
     DialpadSymbianWrapperPrivate *const d_ptr;
--- a/telutils/dialpad/inc/dialpadsymbianwrapper_p.h	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/inc/dialpadsymbianwrapper_p.h	Thu May 27 13:23:05 2010 +0300
@@ -38,8 +38,10 @@
     ~DialpadSymbianWrapperPrivate();
     
     int getMailboxNumber(QString &vmbxNumber);
+    int getVideoMailboxNumber(QString &vmbxNumber);
     
     int defineMailboxNumber(QString &vmbxNumber);
+    int defineVideoMailboxNumber(QString &vmbxNumber);
     
 private:
     
--- a/telutils/dialpad/inc/dialpadsymbianwrapper_p_stub.h	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/inc/dialpadsymbianwrapper_p_stub.h	Thu May 27 13:23:05 2010 +0300
@@ -37,8 +37,10 @@
     ~DialpadSymbianWrapperPrivate();
     
     int getMailboxNumber(QString &vmbxNumber);
+    int getVideoMailboxNumber(QString &vmbxNumber);
     
     int defineMailboxNumber(QString &vmbxNumber);
+    int defineVideoMailboxNumber(QString &vmbxNumber);
 
 private:
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/inc/dialpadvideomailboxeventfilter.h	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,68 @@
+/*!
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef DIALPADVIDEOMAILBOXEVENTFILTER_H
+#define DIALPADVIDEOMAILBOXEVENTFILTER_H
+
+#include "dialpadmailboxeventfilterbase.h"
+
+class QTimer;
+class Dialpad;
+class DialpadSymbianWrapper;
+
+/*!
+    DialpadVideoMailboxEventFilter
+    Class provides video mailbox key handling.
+*/
+class DialpadVideoMailboxEventFilter : public DialpadMailboxEventFilterBase
+{
+    Q_OBJECT
+
+public:
+    explicit DialpadVideoMailboxEventFilter(Dialpad* dialpad, QObject* parent = 0);
+    virtual ~DialpadVideoMailboxEventFilter();
+
+protected:
+    bool eventFilter(QObject *watched, QEvent *event);
+
+    /*!
+       \fn bool handleCallButtonPress()
+
+       Check if editor has number string and if it does then createVideoCall
+       is called and funtion returns true, if there is no number then
+       funtion return false.
+   */
+    bool handleCallButtonPress();
+
+    /*!
+       \fn handleMailboxOperation
+
+       Start vmbx call or number definition procedures.
+    */
+    void handleMailboxOperation();
+
+protected slots:
+
+    /*!
+       \fn void handleLongKeyPress()
+    
+       Handles long key presses.
+    */
+    void handleLongKeyPress();
+};
+
+#endif // DIALPADVIDEOMAILBOXEVENTFILTER_H
--- a/telutils/dialpad/inc/dialpadvoicemailboxeventfilter.h	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/inc/dialpadvoicemailboxeventfilter.h	Thu May 27 13:23:05 2010 +0300
@@ -18,7 +18,7 @@
 #ifndef DIALPADVOICEMAILBOXEVENTFILTER_H
 #define DIALPADVOICEMAILBOXEVENTFILTER_H
 
-#include <QObject>
+#include "dialpadmailboxeventfilterbase.h"
 
 class QTimer;
 class Dialpad;
@@ -28,7 +28,7 @@
     DialpadVoiceMailboxEventFilter
     Class provides voice mailbox key handling.
 */
-class DialpadVoiceMailboxEventFilter : public QObject
+class DialpadVoiceMailboxEventFilter : public DialpadMailboxEventFilterBase
 {
     Q_OBJECT
 
@@ -39,31 +39,6 @@
 protected:
     bool eventFilter(QObject *watched, QEvent *event);
 
-private slots:
-    /*!
-       \fn void handleLongKeyPress()
-
-       Handles long key presses.
-    */
-    void handleLongKeyPress();
-
-private:
-    /*!
-        \fn bool isLongKeyPressSupported(const int key)
-
-        Checks if key is numeric key'1' or numbersign key if it is then
-        function return true, if key is something else for example
-        yes/send then this returns false.
-    */
-    bool isLongKeyPressSupported(const int key);
-
-    /*!
-       \fn bool checkIfSendEventAndConsumeEvent(const int pressedKey, const int eventType)
-
-       Checks that keycode is call related key if it is then handle it.
-       */
-    bool checkIfSendEventAndConsumeEvent(const int pressedKey, const int eventType);
-
     /*!
        \fn bool handleCallButtonPress()
 
@@ -74,31 +49,20 @@
     bool handleCallButtonPress();
 
     /*!
-       \fn void clearEditor()
-
-       Clears dialpad editor.
-    */
-    void clearEditor();
-
-    /*!
-       \fn createCall(const QString phoneNumber)
-
-       Creates call request to QT Highway.
-    */
-    void createCall(const QString &phoneNumber);
-
-    /*!
        \fn handleMailboxOperation
 
        Start vmbx call or number definition procedures.
     */
     void handleMailboxOperation();
+    
+protected slots:
 
-private:
-    QTimer *mLongPressTimer;
-    DialpadSymbianWrapper *mSymbianWrapper;
-    Dialpad* mDialpad;
-    int mKeyEvent;
+    /*!
+       \fn void handleLongKeyPress()
+    
+       Handles long key presses.
+    */
+    void handleLongKeyPress();
 };
 
 #endif // DIALPADVOICEMAILBOXEVENTFILTER_H
--- a/telutils/dialpad/resources/dialpad.css	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/resources/dialpad.css	Thu May 27 13:23:05 2010 +0300
@@ -9,13 +9,14 @@
 
 DialpadButton[icon][!text][!additionalText]{
     layout:icon_button;
-    min-height:6.25un;
+    min-height:6.25un; /* default min-height is too small */
     min-width:6.25un;
 }
 
 /* text and additional text */
 DialpadButton[stretched][!icon][text][additionalText]{
     layout:text_additionalText_horizontal;
+    min-height:6.25un;
 }
 
 DialpadButton[stretched][!icon][text][additionalText]::text
@@ -38,6 +39,7 @@
 /* text and icon */
 DialpadButton[stretched][icon][text][!additionalText]{
     layout:icon_text_horizontal;
+    min-height:6.25un;
 }
 
 DialpadButton[stretched][icon][text][!additionalText]::text{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/src/dialpademergencycalleventfilter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+#include <QKeyEvent>
+#include <hblineedit.h>
+#include <hbstringutil.h>
+#include "dialpademergencycalleventfilter.h"
+#include "dialpad.h"
+#include "qtphonesrvlog.h"
+
+#ifdef Q_OS_SYMBIAN
+#include <cphcltemergencycall.h>
+#include <xqservicerequest.h>
+#include <xqserviceutil.h>
+#include <phclttypes.h>
+#endif //Q_OS_SYMBIAN
+
+
+DialpadEmergencyCallEventFilter::DialpadEmergencyCallEventFilter(Dialpad* dialpad, QObject* parent) :
+    QObject(parent), mDialpad(dialpad), mEmergency(0)
+{
+    PHONE_TRACE;
+#ifdef Q_OS_SYMBIAN
+    TRAP_IGNORE(mEmergency = CPhCltEmergencyCall::NewL( NULL ));
+#endif // Q_OS_SYMBIAN
+    mDialpad->setCallButtonEnabled(false);
+    connect(&mDialpad->editor(),SIGNAL(contentsChanged()),
+            this,SLOT(editorTextChanged()));
+}
+
+DialpadEmergencyCallEventFilter::~DialpadEmergencyCallEventFilter()
+{
+}
+
+bool DialpadEmergencyCallEventFilter::eventFilter(QObject *watched, QEvent *event)
+{
+    PHONE_TRACE;
+    Q_UNUSED(watched)
+    
+    bool eventFiltered = false;
+#ifdef Q_OS_SYMBIAN
+       
+    const int eventType = event->type();
+       
+    if (eventType == QEvent::KeyPress) {
+        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+        const int keyCode = keyEvent->key();
+        if (keyCode == Qt::Key_Yes ||
+             keyCode == Qt::Key_Enter) {           
+            if (isEmergencyNumber(editorText())) {
+                createCall(editorText());
+                eventFiltered = true;
+            }            
+        }
+    }
+#else
+    Q_UNUSED(event)
+#endif // Q_OS_SYMBIAN
+    
+    return eventFiltered;
+}
+
+bool DialpadEmergencyCallEventFilter::isEmergencyNumber(QString string)
+{
+    PHONE_TRACE;
+    bool ret = false;
+#ifdef Q_OS_SYMBIAN
+    if (KPhCltTelephoneNumberLength >= string.length()) {
+        TBool emergency;
+        TPhCltTelephoneNumber number(reinterpret_cast<const TUint16*>(string.utf16()));
+        if (mEmergency && 
+           KErrNone == mEmergency->IsEmergencyPhoneNumber(number, emergency)) {
+            ret = emergency;
+        }               
+    }
+#else
+    Q_UNUSED(string)
+#endif // Q_OS_SYMBIAN
+    return ret;
+}
+
+QString DialpadEmergencyCallEventFilter::editorText()
+{
+    PHONE_TRACE;
+    return HbStringUtil::convertDigitsTo(
+                mDialpad->editor().text(), WesternDigit);
+}
+
+void DialpadEmergencyCallEventFilter::createCall(const QString &phoneNumber)
+{
+    PHONE_TRACE2("phoneNumber:", phoneNumber);
+#ifdef Q_OS_SYMBIAN
+    XQServiceRequest snd("com.nokia.symbian.ICallDial","dial(QString)", false);
+    snd << phoneNumber;
+    QVariant retValue;
+    snd.send(retValue);
+#endif // Q_OS_SYMBIAN
+}
+
+void DialpadEmergencyCallEventFilter::editorTextChanged()
+{
+    mDialpad->setCallButtonEnabled(isEmergencyNumber(editorText())); 
+}
+
--- a/telutils/dialpad/src/dialpadkeyhandler.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/src/dialpadkeyhandler.cpp	Thu May 27 13:23:05 2010 +0300
@@ -16,8 +16,12 @@
 */
 
 #include <hbmainwindow.h>
+#ifdef Q_OS_SYMBIAN
+#include <featmgr.h>
+#endif // Q_OS_SYMBIAN
 #include "dialpadkeyhandler.h"
 #include "dialpadvoicemailboxeventfilter.h"
+#include "dialpadvideomailboxeventfilter.h"
 #include "dialpadbluetootheventfilter.h"
 #include "dialpadkeysequenceeventfilter.h"
 #include "qtphonesrvlog.h"
@@ -28,17 +32,30 @@
     QObject(parent),
 	mMainWindow(mainWindow),
 	mVmbxFilter(0),
+	mVideoVmbxFilter(0),
 	mBtFilter(0),
-	mKeySequenceFilter(0)
+	mKeySequenceFilter(0),
+	mIsVideoMailboxSupported(false)
 {
     PHONE_TRACE;
+
+    // Variations
+#ifdef Q_OS_SYMBIAN
+    mIsVideoMailboxSupported = FeatureManager::FeatureSupported(KFeatureIdCsVideoTelephony);
+#endif // Q_OS_SYMBIAN
     
     mVmbxFilter.reset(new DialpadVoiceMailboxEventFilter(dialPad));
+    if(mIsVideoMailboxSupported) {
+        mVideoVmbxFilter.reset(new DialpadVideoMailboxEventFilter(dialPad));
+    }
     mBtFilter.reset(new DialpadBluetoothEventFilter(dialPad));
     mKeySequenceFilter.reset(new DialpadKeySequenceEventFilter(dialPad));
-    
+
     // Stack different event filters
     mMainWindow.installEventFilter(mVmbxFilter.data());
+    if(mIsVideoMailboxSupported) {
+        mMainWindow.installEventFilter(mVideoVmbxFilter.data());    
+    }
     mMainWindow.installEventFilter(mBtFilter.data());
     mMainWindow.installEventFilter(mKeySequenceFilter.data());
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/src/dialpadmailboxeventfilterbase.cpp	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+#include <QTimer>
+#include <QKeyEvent>
+#include <hblineedit.h>
+#include <hbstringutil.h>
+#include "dialpadmailboxeventfilterbase.h"
+#include "dialpadsymbianwrapper.h"
+#include "dialpad.h"
+#include "qtphonesrvlog.h"
+
+#ifdef Q_OS_SYMBIAN
+#include <xqservicerequest.h>
+#include <xqserviceutil.h>
+#endif //Q_OS_SYMBIAN
+
+const int DialpadLongKeyPressButtonCount(2);
+static const int DialpadLongKeyPressSupportingButtons[DialpadLongKeyPressButtonCount] =
+{ Qt::Key_1, Qt::Key_2 };
+
+
+DialpadMailboxEventFilterBase::DialpadMailboxEventFilterBase(Dialpad* dialpad, QObject* parent) :
+    QObject(parent), mDialpad(dialpad), mKeyEvent(NULL)
+{
+    PHONE_TRACE;
+    mLongPressTimer = new QTimer(this);
+    mLongPressTimer->setSingleShot(true);
+    connect(mLongPressTimer,SIGNAL(timeout()),this,SLOT(handleLongKeyPress()));
+    mSymbianWrapper = new DialpadSymbianWrapper(this);
+}
+
+DialpadMailboxEventFilterBase::~DialpadMailboxEventFilterBase()
+{
+}
+
+bool DialpadMailboxEventFilterBase::checkIfSendEventAndConsumeEvent(const int pressedKey, const int eventType)
+{
+    PHONE_TRACE4("pressedKey:", pressedKey, "eventType:", eventType);
+    bool sendKeyHandled(false);
+    // first check that pressed key is send key.
+    if (pressedKey == Qt::Key_Yes ||
+        pressedKey == Qt::Key_Enter) {
+       if (eventType == QEvent::KeyPress) {
+           sendKeyHandled = handleCallButtonPress();
+       } else if ((eventType == QEvent::KeyRelease) &&
+                  (!mDialpad->editor().text().isEmpty())) {
+           sendKeyHandled = true;
+       }
+    }
+    return sendKeyHandled;
+}
+
+bool DialpadMailboxEventFilterBase::isLongKeyPressSupported(const int key)
+{
+    PHONE_TRACE2("key:", key);
+    bool longKeySupport(false);
+    // check if dialpad button is pressed.
+    for (int i = 0; i < DialpadLongKeyPressButtonCount; i++) {
+        if (key==DialpadLongKeyPressSupportingButtons[i]) {
+            longKeySupport = true;
+            // Save key code for handleCallButtonPress.
+            mKeyEvent = key;
+        }
+    }
+    return longKeySupport;
+}
+
+void DialpadMailboxEventFilterBase::clearEditor()
+{
+    PHONE_TRACE;
+    // Erase data from dialpad editor.
+    mDialpad->editor().setText(QString(""));
+}
+
+void DialpadMailboxEventFilterBase::createCall(const QString &phoneNumber, bool createVideoCall)
+{
+    PHONE_TRACE2("phoneNumber:", phoneNumber);
+#ifdef Q_OS_SYMBIAN
+    if(createVideoCall) {
+        XQServiceRequest snd("com.nokia.symbian.ICallDial","dialVideo(QString)", false);
+        snd << phoneNumber;
+        QVariant retValue;
+        snd.send(retValue);    	
+    } else {
+        XQServiceRequest snd("com.nokia.symbian.ICallDial","dial(QString)", false);
+        snd << phoneNumber;
+        QVariant retValue;
+        snd.send(retValue);
+    }
+#endif // Q_OS_SYMBIAN
+}
--- a/telutils/dialpad/src/dialpadsymbianwrapper.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/src/dialpadsymbianwrapper.cpp	Thu May 27 13:23:05 2010 +0300
@@ -36,9 +36,18 @@
     return d_ptr->getMailboxNumber(vmbxNumber);
 }
 
+int DialpadSymbianWrapper::getVideoMailboxNumber(QString &vmbxNumber)
+{
+    return d_ptr->getVideoMailboxNumber(vmbxNumber);
+}
+
 int DialpadSymbianWrapper::defineMailboxNumber(QString &vmbxNumber)
 {
     //Q_D(DialpadSymbianWrapper);
     return d_ptr->defineMailboxNumber(vmbxNumber);
 }
 
+int DialpadSymbianWrapper::defineVideoMailboxNumber(QString &vmbxNumber)
+{
+    return d_ptr->defineVideoMailboxNumber(vmbxNumber);
+}
--- a/telutils/dialpad/src/dialpadsymbianwrapper_p.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/src/dialpadsymbianwrapper_p.cpp	Thu May 27 13:23:05 2010 +0300
@@ -38,10 +38,8 @@
     int errValue(KErrNone);
     CVoiceMailboxEntry* vmbxEntry = NULL;
     TVoiceMailboxParams vmbxParams;
-    errValue = mVmbx->QueryVmbxType( vmbxParams );
     
-    if ((KErrNone == errValue) && 
-        (KErrNone == mVmbx->GetStoredEntry(vmbxParams, vmbxEntry))) { 
+    if (KErrNone == mVmbx->GetStoredEntry(vmbxParams, vmbxEntry)) {
         // Number retrieved succesfully:
         vmbxNumber = getVmbxNumber(*vmbxEntry);
      }
@@ -51,6 +49,22 @@
     return errValue;
 }
 
+int DialpadSymbianWrapperPrivate::getVideoMailboxNumber(QString &vmbxNumber)
+{
+    int errValue(KErrNone);
+    CVoiceMailboxEntry* vmbxEntry = NULL;
+    TVoiceMailboxParams vmbxParams;
+    vmbxParams.iType = EVmbxVideo;
+    
+    if (KErrNone == mVmbx->GetStoredEntry(vmbxParams, vmbxEntry)) {
+        // Number retrieved succesfully:
+        vmbxNumber = getVmbxNumber(*vmbxEntry);
+     }
+    // Entry ownership was transferred.
+    delete vmbxEntry;
+    vmbxEntry = NULL;
+    return errValue;		
+}
 
 int DialpadSymbianWrapperPrivate::defineMailboxNumber(QString &vmbxNumber)
 {
@@ -69,6 +83,24 @@
     return errValue;
 }
 
+int DialpadSymbianWrapperPrivate::defineVideoMailboxNumber(QString &vmbxNumber)
+{
+    CVoiceMailboxEntry* vmbxEntry = NULL;
+    TVoiceMailboxParams vmbxParams;
+    vmbxParams.iType = EVmbxVideo;
+    int errValue = mVmbx->QueryVmbxType( vmbxParams );
+    
+    if ((KErrNotFound == errValue)) {
+        errValue = mVmbx->QueryNewEntry(vmbxParams, vmbxEntry);
+        if (KErrNone == errValue) {
+            mVmbx->SaveEntry(*vmbxEntry);
+            // Do appropriate tasks, e.g. save number.
+            vmbxNumber = getVmbxNumber(*vmbxEntry);
+        }
+    }
+    return errValue;
+}
+
 QString DialpadSymbianWrapperPrivate::getVmbxNumber(CVoiceMailboxEntry &vmbxEntry)
 {
     TPtrC ptrNumber(KNullDesC);
--- a/telutils/dialpad/src/dialpadsymbianwrapper_p_stub.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/src/dialpadsymbianwrapper_p_stub.cpp	Thu May 27 13:23:05 2010 +0300
@@ -48,6 +48,11 @@
     return errValue;
 }
 
+int DialpadSymbianWrapperPrivate::getVideoMailboxNumber(QString &vmbxNumber)
+{
+    return getMailboxNumber(vmbxNumber);
+}
+
 int DialpadSymbianWrapperPrivate::defineMailboxNumber(QString &vmbxNumber)
 {
     int errValue(0);
@@ -69,3 +74,8 @@
     mTimes++;
     return errValue;
 }
+
+int DialpadSymbianWrapperPrivate::defineVideoMailboxNumber(QString &vmbxNumber)
+{
+    return defineMailboxNumber(vmbxNumber);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/src/dialpadvideomailboxeventfilter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+#include <QTimer>
+#include <QKeyEvent>
+#include <hblineedit.h>
+#include <hbstringutil.h>
+#include "dialpadvideomailboxeventfilter.h"
+#include "dialpadsymbianwrapper.h"
+#include "dialpad.h"
+#include "qtphonesrvlog.h"
+
+#ifdef Q_OS_SYMBIAN
+#include <xqservicerequest.h>
+#include <xqserviceutil.h>
+#endif //Q_OS_SYMBIAN
+
+const QString VideoVmbxCharacter("2");
+
+DialpadVideoMailboxEventFilter::DialpadVideoMailboxEventFilter(Dialpad* dialpad, QObject* parent) :
+    DialpadMailboxEventFilterBase(dialpad, parent)
+{
+}
+
+DialpadVideoMailboxEventFilter::~DialpadVideoMailboxEventFilter()
+{
+}
+
+bool DialpadVideoMailboxEventFilter::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_UNUSED(watched)
+    bool keyEventEaten(false);
+    
+    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+    const int keyCode = keyEvent->key();
+    const int eventType = event->type();
+
+    if (eventType == QEvent::KeyPress) {
+        if (checkIfSendEventAndConsumeEvent(keyCode, eventType)) {
+            keyEventEaten = true;
+        } else if ((isLongKeyPressSupported(keyCode)) &&
+                !(mDialpad->editor().text().length() >= 1)) {
+            //Check that there is only one item in dialpad, if there is more than one
+            //do not handle long key press.
+            mLongPressTimer->stop();
+            mLongPressTimer->start(DialpadLongKeyPressTimeOut);
+        }
+    } else if (eventType == QEvent::KeyRelease) {
+        if (checkIfSendEventAndConsumeEvent(keyCode, eventType)) {
+            keyEventEaten = true;
+        } else if (isLongKeyPressSupported(keyCode)){
+            mLongPressTimer->stop();
+        }
+    }
+
+    return keyEventEaten;
+}
+
+void DialpadVideoMailboxEventFilter::handleLongKeyPress()
+{
+    PHONE_TRACE;
+    switch(mKeyEvent) {
+    case Qt::Key_2:{
+       handleMailboxOperation();
+       break;
+       }
+   default:
+       // Do nothing.
+       break;
+    }
+
+    // Reset key code.
+    mKeyEvent = NULL;
+}
+
+bool DialpadVideoMailboxEventFilter::handleCallButtonPress()
+{
+    PHONE_TRACE;
+    bool callButtonhandled(false);
+    if (!mDialpad->editor().text().isEmpty()) {
+#ifdef Q_OS_SYMBIAN
+        // check if editor has '2' character if does then
+        // get MailboxNumber.
+        QString editorContent = HbStringUtil::convertDigitsTo(
+            mDialpad->editor().text(), WesternDigit);
+        if (VideoVmbxCharacter==editorContent) {
+            handleMailboxOperation();
+            callButtonhandled = true;
+        }
+#endif //Q_OS_SYMBIAN
+    }
+    return callButtonhandled;
+}
+
+void DialpadVideoMailboxEventFilter::handleMailboxOperation()
+{
+    PHONE_TRACE;
+    QString mailboxNumber;
+    int error = mSymbianWrapper->getVideoMailboxNumber(mailboxNumber);
+    // If here is no vmbx number and dialpad must start vmbx number definition procedures.
+    if (DialpadErrorNone != error || mailboxNumber.length() == 0) {
+        mDialpad->closeDialpad();
+        // If define mailbox query was interupted than reopen dialpad.
+        error = mSymbianWrapper->defineVideoMailboxNumber(mailboxNumber);
+        if (DialpadErrorCancel == error) {
+            mDialpad->openDialpad();
+        }
+    }
+
+    // Valid vmbx number found or defined and there vmbx didnt
+    // return error values then create a call.
+    if ((DialpadErrorNone == error) &&
+        (mailboxNumber.length() != 0)) {
+        createCall(mailboxNumber, true);
+        clearEditor();
+        mDialpad->openDialpad();
+    }
+}
--- a/telutils/dialpad/src/dialpadvoicemailboxeventfilter.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/src/dialpadvoicemailboxeventfilter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -28,27 +28,11 @@
 #include <xqserviceutil.h>
 #endif //Q_OS_SYMBIAN
 
-const int DialpadLongKeyPressTimeOut(1000);
 const QString VmbxCharacter("1");
 
-enum err {
-    DialpadErrorNone = 0,
-    DialpadErrorCancel = -3
-};
-
-const int DialpadLongKeyPressButtonCount(1);
-static const int DialpadLongKeyPressSupportingButtons[DialpadLongKeyPressButtonCount] =
-{ Qt::Key_1 };
-
-
 DialpadVoiceMailboxEventFilter::DialpadVoiceMailboxEventFilter(Dialpad* dialpad, QObject* parent) :
-    QObject(parent), mDialpad(dialpad), mKeyEvent(NULL)
+    DialpadMailboxEventFilterBase(dialpad, parent)
 {
-    PHONE_TRACE;
-    mLongPressTimer = new QTimer(this);
-    mLongPressTimer->setSingleShot(true);
-    connect(mLongPressTimer,SIGNAL(timeout()),this,SLOT(handleLongKeyPress()));
-    mSymbianWrapper = new DialpadSymbianWrapper(this);
 }
 
 DialpadVoiceMailboxEventFilter::~DialpadVoiceMailboxEventFilter()
@@ -85,38 +69,6 @@
     return keyEventEaten;
 }
 
-bool DialpadVoiceMailboxEventFilter::checkIfSendEventAndConsumeEvent(const int pressedKey, const int eventType)
-{
-    PHONE_TRACE4("pressedKey:", pressedKey, "eventType:", eventType);
-    bool sendKeyHandled(false);
-    // first check that pressed key is send key.
-    if (pressedKey == Qt::Key_Yes ||
-        pressedKey == Qt::Key_Enter) {
-       if (eventType == QEvent::KeyPress) {
-           sendKeyHandled = handleCallButtonPress();
-       } else if ((eventType == QEvent::KeyRelease) &&
-                  (!mDialpad->editor().text().isEmpty())) {
-           sendKeyHandled = true;
-       }
-    }
-    return sendKeyHandled;
-}
-
-bool DialpadVoiceMailboxEventFilter::isLongKeyPressSupported(const int key)
-{
-    PHONE_TRACE2("key:", key);
-    bool longKeySupport(false);
-    // check if dialpad button is pressed.
-    for (int i = 0; i < DialpadLongKeyPressButtonCount; i++) {
-        if (key==DialpadLongKeyPressSupportingButtons[i]) {
-            longKeySupport = true;
-            // Save key code for handleCallButtonPress.
-            mKeyEvent = key;
-        }
-    }
-    return longKeySupport;
-}
-
 void DialpadVoiceMailboxEventFilter::handleLongKeyPress()
 {
     PHONE_TRACE;
@@ -156,10 +108,10 @@
 void DialpadVoiceMailboxEventFilter::handleMailboxOperation()
 {
     PHONE_TRACE;
-    QString mailboxNumber(NULL);
+    QString mailboxNumber;
     int error = mSymbianWrapper->getMailboxNumber(mailboxNumber);
     // If here is no vmbx number and dialpad must start vmbx number definition procedures.
-    if (DialpadErrorNone != error) {
+    if (DialpadErrorNone != error || mailboxNumber.length() == 0) {
         mDialpad->closeDialpad();
         // If define mailbox query was interupted than reopen dialpad.
         error = mSymbianWrapper->defineMailboxNumber(mailboxNumber);
@@ -176,21 +128,3 @@
         mDialpad->openDialpad();
     }
 }
-
-void DialpadVoiceMailboxEventFilter::clearEditor()
-{
-    PHONE_TRACE;
-    // Erase data from dialpad editor.
-    mDialpad->editor().setText(NULL);
-}
-
-void DialpadVoiceMailboxEventFilter::createCall(const QString &phoneNumber)
-{
-    PHONE_TRACE2("phoneNumber:", phoneNumber);
-#ifdef Q_OS_SYMBIAN
-    XQServiceRequest snd("com.nokia.symbian.ICallDial","dial(QString)", false);
-    snd << phoneNumber;
-    QVariant retValue;
-    snd.send(retValue);
-#endif // Q_OS_SYMBIAN
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/src/dialpadvtkeyhandler.cpp	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,43 @@
+/*!
+* Copyright (c) 2010 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: Custom button
+*
+*/
+
+#include <hbmainwindow.h>
+#include "dialpadvtkeyhandler.h"
+#include "dialpadkeysequenceeventfilter.h"
+#include "dialpademergencycalleventfilter.h"
+#include "qtphonesrvlog.h"
+
+DialpadVtKeyHandler::DialpadVtKeyHandler(
+    Dialpad *dialPad, HbMainWindow& mainWindow, QObject *parent) 
+    : 
+    QObject(parent),
+    mMainWindow(mainWindow),
+    mEmergencyCallFilter(0),
+    mKeySequenceFilter(0)
+{
+    PHONE_TRACE;
+    mEmergencyCallFilter = new DialpadEmergencyCallEventFilter(dialPad, this);
+    mKeySequenceFilter = new DialpadKeySequenceEventFilter(dialPad, this);
+    
+    // Stack different event filters
+    mMainWindow.installEventFilter(mKeySequenceFilter);
+    mMainWindow.installEventFilter(mEmergencyCallFilter);
+}
+
+DialpadVtKeyHandler::~DialpadVtKeyHandler()
+{
+}
--- a/telutils/dialpad/tsrc/unit/runall.cmd	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/tsrc/unit/runall.cmd	Thu May 27 13:23:05 2010 +0300
@@ -17,10 +17,11 @@
 @echo off
 
 if "%1"=="winscw" (
-call runtest.cmd ut_dialpadbuttonstyle
+call runtest.cmd ut_dialpademergencycalleventfilter
 call runtest.cmd ut_dialpadmultitaphandler
 call runtest.cmd mt_dialpad
 call runtest.cmd ut_dialpadvoicemailboxeventfilter
+call runtest.cmd ut_dialpadvideomailboxeventfilter
 call runtest.cmd mt_keyhandler
 call runtest.cmd ut_dialpadbluetootheventfilter
 call runtest.cmd ut_dialpadkeysequenceeventfilter
@@ -28,7 +29,6 @@
 
 @echo off
 if "%1"=="win32" (
-call runtest_w32.cmd ut_dialpadbuttonstyle
 call runtest_w32.cmd ut_dialpadmultitaphandler
 call runtest_w32.cmd mt_dialpad
 )
--- a/telutils/dialpad/tsrc/unit/unit.pro	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/tsrc/unit/unit.pro	Thu May 27 13:23:05 2010 +0300
@@ -16,10 +16,11 @@
 #
 
 TEMPLATE = subdirs
-SUBDIRS += ut_dialpadbuttonstyle
+SUBDIRS += ut_dialpademergencycalleventfilter
 SUBDIRS += ut_dialpadbutton
 SUBDIRS += ut_dialpadmultitaphandler
 SUBDIRS += ut_dialpadvoicemailboxeventfilter
+SUBDIRS += ut_dialpadvideomailboxeventfilter
 SUBDIRS += ut_dialpadbluetootheventfilter
 SUBDIRS += ut_dialpadkeysequenceeventfilter
 SUBDIRS += mt_dialpad
--- a/telutils/dialpad/tsrc/unit/ut_dialpadbuttonstyle/ut_dialpadbuttonstyle.cpp	Fri May 14 16:24:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/*!
-* Copyright (c) 2009 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:
-*
-*/
-
-#include <QtGui>
-#include <QtTest/QtTest>
-
-#include <hbapplication.h>
-#include <hbmainwindow.h>
-#include <hbframeitem.h>
-#include <hbiconitem.h>
-#include <hbtextitem.h>
-#include <hbstyle.h>
-#include <hbstyleoptionpushbutton.h>
-#include <hbcolorscheme.h>
-
-#include "dialpadtest.h"
-#include "dialpadbuttonstyle.h"
-
-class ut_DialpadButtonStyle : public QObject
-{
-    Q_OBJECT
-
-private slots:
-    void initTestCase();
-    void cleanupTestCase();
-
-    void testPushButtonFrame();
-
-private:
-    DialpadButtonStyle *mStyle;
-};
-
-void ut_DialpadButtonStyle::initTestCase()
-{
-    mStyle = new DialpadButtonStyle();
-}
-
-void ut_DialpadButtonStyle::cleanupTestCase()
-{
-    delete mStyle;
-}
-
-void ut_DialpadButtonStyle::testPushButtonFrame()
-{
-    HbFrameItem* item = new HbFrameItem();
-    HbStyleOptionPushButton option;
-    option.backgroundFrameDrawer = 0;
-
-    // Enabled ON
-    option.state |= QStyle::State_On;
-    option.state |= QStyle::State_Enabled;
-
-    mStyle->setButtonStyle(DialpadButtonStyle::NormalButtonStyle);
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_input_btn_keypad_pressed");
-
-    mStyle->setButtonStyle(DialpadButtonStyle::FunctionButtonStyle);
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_input_btn_function_pressed");
-
-    mStyle->setButtonStyle(DialpadButtonStyle::CallButtonStyle);
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_btn_green_pressed");
-
-    // Enabled OFF
-    option.state &= ~QStyle::State_On;
-    option.state |= QStyle::State_Off;
-
-    mStyle->setButtonStyle(DialpadButtonStyle::NormalButtonStyle);
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_input_btn_keypad_normal");
-
-    mStyle->setButtonStyle(DialpadButtonStyle::FunctionButtonStyle);
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_input_btn_function_normal");
-
-    mStyle->setButtonStyle(DialpadButtonStyle::CallButtonStyle);
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_btn_green_normal");
-
-    // Disabled
-    option.state &= ~QStyle::State_Enabled;
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_input_btn_function_disabled");
-
-    // Selected
-    option.state |= QStyle::State_Selected;
-    mStyle->updatePrimitive(item,HbStyle::P_PushButton_background,&option);
-    QVERIFY(item->frameDrawer().frameGraphicsName()=="qtg_fr_btn_highlight");
-
-    delete item;
-
-    // exception type
-    HbIconItem* item2 = new HbIconItem();
-    mStyle->updatePrimitive(item2,HbStyle::P_PushButton_background,&option);
-    delete item2;
-}
-
-DIALPAD_TEST_MAIN(ut_DialpadButtonStyle)
-#include "ut_dialpadbuttonstyle.moc"
--- a/telutils/dialpad/tsrc/unit/ut_dialpadbuttonstyle/ut_dialpadbuttonstyle.pro	Fri May 14 16:24:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-#
-# Copyright (c) 2009 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:
-#
-#
-
-TEMPLATE = app
-TARGET = 
-DEPENDPATH += . ../../../src
-INCLUDEPATH += . ../../../inc ../shared
-CONFIG += hb qtestlib
-
-symbian {
-    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-} else:win32 {
-    DESTDIR = ./
-}
-
-SOURCES += ut_dialpadbuttonstyle.cpp \
-           ../../../src/dialpadbuttonstyle.cpp
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/tsrc/unit/ut_dialpademergencycalleventfilter/ut_dialpademergencycalleventfilter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,200 @@
+/*!
+* Copyright (c) 2010 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:
+*
+*/
+
+#include <QtGui>
+#include <QtTest/QtTest>
+
+#include <hbapplication.h>
+#include <hbmainwindow.h>
+#include <hbaction.h>
+#include <hbtoolbar.h>
+#include <hbview.h>
+#include <hblineedit.h>
+#include <hbinstance.h>
+
+#ifdef Q_OS_SYMBIAN
+#include "xqservicerequest.h"
+#endif
+
+#include "dialpadtest.h"
+#include "dialpademergencycalleventfilter.h"
+#include "dialpad.h"
+
+const int WAIT_TIME = 300;
+QString mService;
+QString mMessage;
+bool mXQServiceConstructed;
+bool mSendCalled;
+
+#ifdef Q_OS_SYMBIAN
+XQServiceRequest::XQServiceRequest(const QString& service, const QString& message, const bool& synchronous) { mService=service; mMessage=message; mXQServiceConstructed=true; }
+XQServiceRequest::~XQServiceRequest() {}
+bool XQServiceRequest::send(QVariant& retValue) { mSendCalled=true; return true; }
+void XQServiceRequest::addArg(const QVariant& v) {}
+#endif
+
+// test cases
+class ut_DialpadEmergencyCallEventFilter : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void initTestCase();
+    void init();
+    void cleanupTestCase();
+    void cleanup();
+
+    // These are actual emergency call event filter unit tests
+    void testEmergencyCallEventFilter();
+
+private:
+    QGraphicsWidget* getWidgetByName(const QString& name);
+    void mouseClickDialpad(int key, bool pause=true);
+
+private:
+    HbMainWindow*  mMainWindow; 
+    Dialpad*       mDialpad;
+    DialpadEmergencyCallEventFilter *mEventFilter;
+    QMap<int,QString> mKeyNames;
+};
+
+void ut_DialpadEmergencyCallEventFilter::initTestCase()
+{
+    mMainWindow = new HbMainWindow;
+
+    mDialpad = new Dialpad();
+    mEventFilter = new DialpadEmergencyCallEventFilter(mDialpad, this);
+    //hbInstance->allMainWindows().at(0)->installEventFilter(mEventFilter);
+    mMainWindow->installEventFilter(mEventFilter);
+    
+    QRectF rect(mMainWindow->contentsRect());
+    rect.setHeight(rect.height()*0.7);
+    rect.moveTop((mMainWindow->contentsRect().height()-rect.height())/2);
+
+    mDialpad->setPreferredSize(mMainWindow->layoutRect().width(),
+                               mMainWindow->layoutRect().height()/2);
+    mDialpad->setPos(0,mMainWindow->layoutRect().height()/4);
+
+    mKeyNames.insert(Qt::Key_1,"49");
+    mKeyNames.insert(Qt::Key_2,"50");
+    mKeyNames.insert(Qt::Key_3,"51");
+    mKeyNames.insert(Qt::Key_4,"52");
+    mKeyNames.insert(Qt::Key_5,"53");
+    mKeyNames.insert(Qt::Key_6,"54");
+    mKeyNames.insert(Qt::Key_7,"55");
+    mKeyNames.insert(Qt::Key_8,"56");
+    mKeyNames.insert(Qt::Key_9,"57");
+    mKeyNames.insert(Qt::Key_Asterisk,"42");
+    mKeyNames.insert(Qt::Key_0,"48");
+    mKeyNames.insert(Qt::Key_NumberSign,"35");
+    mKeyNames.insert(Qt::Key_Backspace,"16777219");
+    mKeyNames.insert(Qt::Key_Yes,"16842753");
+
+    mMainWindow->show();
+    mDialpad->show();
+    mDialpad->hide();
+}
+
+void ut_DialpadEmergencyCallEventFilter::init()
+{
+    mService = QString("");
+    mMessage = QString("");
+    mXQServiceConstructed = false;
+    mSendCalled = false;
+}
+
+void ut_DialpadEmergencyCallEventFilter::cleanupTestCase()
+{
+    delete mDialpad;
+    delete mMainWindow;
+}
+
+void ut_DialpadEmergencyCallEventFilter::cleanup()
+{
+    mDialpad->editor().setText(QString());
+    QTest::qWait( WAIT_TIME ); // delay between tests
+}
+
+QGraphicsWidget* ut_DialpadEmergencyCallEventFilter::getWidgetByName(const QString& name)
+{
+    Q_ASSERT(mMainWindow!=0);
+
+    QGraphicsWidget* widget = 0;
+
+    QList<QGraphicsItem*> items = mMainWindow->scene()->items();
+    foreach (QGraphicsItem* item, items) {
+        if (item->isWidget()) {
+            QGraphicsWidget *w = static_cast<QGraphicsWidget*>(item);
+            if (w->objectName()==name) {
+                widget = w;
+            }
+        }
+    }
+
+    return widget;
+}
+
+void ut_DialpadEmergencyCallEventFilter::mouseClickDialpad(int key, bool pause)
+{
+    QString name = mKeyNames.value(key);
+
+    QGraphicsWidget* widget = getWidgetByName(name);
+
+    if ( widget ) {
+        QPointF widgetPos = widget->scenePos() +
+                            widget->rect().center();
+
+        QPoint windowPos = mMainWindow->mapFromScene( widgetPos );
+
+        QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,
+                           0, windowPos );
+
+        if (pause) {
+            QTest::qWait( WAIT_TIME );
+        }
+    } else {
+        QFAIL( "Button could not be accessed!" );
+    }
+}
+
+
+void ut_DialpadEmergencyCallEventFilter::testEmergencyCallEventFilter()
+{
+    mDialpad->openDialpad();
+    QTest::qWait(WAIT_TIME);
+    mouseClickDialpad(Qt::Key_1);
+    QTest::qWait(1000);
+    mouseClickDialpad(Qt::Key_1);
+    QTest::qWait(1000);
+    mouseClickDialpad(Qt::Key_2);
+    QTest::qWait(1000);
+    mouseClickDialpad(Qt::Key_Yes);
+    QTest::qWait(1000);
+    
+    mDialpad->closeDialpad();
+
+#ifdef Q_OS_SYMBIAN
+    QVERIFY(mXQServiceConstructed == true);
+    QVERIFY(mSendCalled == true);
+    QCOMPARE(mService, QString("com.nokia.symbian.ICallDial"));
+    QCOMPARE(mMessage, QString("dial(QString)"));
+#endif
+}
+
+DIALPAD_TEST_MAIN(ut_DialpadEmergencyCallEventFilter)
+#include "ut_dialpademergencycalleventfilter.moc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/tsrc/unit/ut_dialpademergencycalleventfilter/ut_dialpademergencycalleventfilter.pro	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2010 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:
+#
+#
+
+TEMPLATE = app
+TARGET =
+INCLUDEPATH += . ../../../inc ../../../../../inc  ../shared
+
+CONFIG += hb qtestlib
+
+symbian {
+    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+    LIBS += -lphoneclient
+} else:win32 {
+    DESTDIR = ./
+    INCLUDEPATH += ../../../../../phonesrv_plat/dialpad_api/inc
+    INCLUDEPATH += ../../../../xqtelephonyservice/inc
+}
+
+#ß
+HEADERS += ../../../inc/dialpademergencycalleventfilter.h
+HEADERS += xqservicerequest.h
+SOURCES += ut_dialpademergencycalleventfilter.cpp
+SOURCES += ../../../src/dialpademergencycalleventfilter.cpp
+
+# 
+LIBS += -ldialpad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/tsrc/unit/ut_dialpademergencycalleventfilter/xqservicerequest.h	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+class XQServiceRequest : public QObject
+{
+public:
+    XQServiceRequest(const QString& service, const QString& message, const bool& synchronous);
+    ~XQServiceRequest();
+    bool send(QVariant& retValue);
+    void addArg(const QVariant& v);
+    template<typename T>
+    inline XQServiceRequest &operator<< (const T &var)
+    {
+        QVariant v = qVariantFromValue(var);
+        addArg(v);
+        return *this;
+    }
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/tsrc/unit/ut_dialpadvideomailboxeventfilter/ut_dialpadvideomailboxeventfilter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,277 @@
+/*!
+* Copyright (c) 2010 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:
+*
+*/
+
+#include <QtGui>
+#include <QtTest/QtTest>
+
+#include <hbapplication.h>
+#include <hbmainwindow.h>
+#include <hbaction.h>
+#include <hbtoolbar.h>
+#include <hbview.h>
+#include <hblineedit.h>
+#include <hbinstance.h>
+
+#ifdef Q_OS_SYMBIAN
+#include "xqservicerequest.h"
+#endif
+
+#include "dialpadtest.h"
+#include "dialpadvideomailboxeventfilter.h"
+#include "dialpad.h"
+#include "dialpadsymbianwrapper.h"
+
+const int WAIT_TIME = 300;
+QString mService;
+QString mMessage;
+bool mXQServiceConstructed;
+bool mSendCalled;
+
+DialpadSymbianWrapper::DialpadSymbianWrapper(QObject *parent) : d_ptr(NULL) {}
+DialpadSymbianWrapper::~DialpadSymbianWrapper() {}
+int DialpadSymbianWrapper::getVideoMailboxNumber(QString &vmbxNumber) { vmbxNumber=QString("12345678"); return 0; }
+int DialpadSymbianWrapper::defineMailboxNumber(QString &vmbxNumber) { return 0; }
+
+#ifdef Q_OS_SYMBIAN
+XQServiceRequest::XQServiceRequest(const QString& service, const QString& message, const bool& synchronous) { mService=service; mMessage=message; mXQServiceConstructed=true; }
+XQServiceRequest::~XQServiceRequest() {}
+bool XQServiceRequest::send(QVariant& retValue) { mSendCalled=true; return true; }
+void XQServiceRequest::addArg(const QVariant& v) {}
+#endif
+
+// helper class
+class KeyEventCatcher : public QObject
+{
+public:
+    bool eventFilter(QObject* watched, QEvent * event)
+    {
+        Q_UNUSED(watched);
+
+        if (event->type() == QEvent::KeyPress) {
+            QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+            mKeyPresses.append(keyEvent->key());
+            return false;
+        } else if (event->type() == QEvent::KeyRelease) {
+            QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+            mKeyReleases.append(keyEvent->key());
+            return false;
+        }
+        return false;
+    }
+
+public:
+    QList<int> mKeyPresses;
+    QList<int> mKeyReleases;
+};
+
+// test cases
+class ut_DialpadVideoMailboxEventFilter : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum MouseEventType
+    {
+        Press,
+        Release,
+        Click
+    };
+
+private slots:
+    void initTestCase();
+    void init();
+    void cleanupTestCase();
+    void cleanup();
+
+    // These are actual voice mailbox event filter unit tests
+    void testNumericKeyTwoLongPress();
+    void testNumericKeyTwoShortPress();
+    void testNumericKeyTwoShortThenLongPress();
+
+private:
+    QGraphicsWidget* getWidgetByName(const QString& name);
+    void mouseClickDialpad(int key, MouseEventType type=Click,
+                           bool pause=true);
+
+private:
+    HbMainWindow*  mMainWindow;
+    Dialpad*       mDialpad;
+    DialpadVideoMailboxEventFilter *mEventFilter;
+    KeyEventCatcher* mKeyCatcher;
+    QMap<int,QString> mKeyNames;
+};
+
+void ut_DialpadVideoMailboxEventFilter::initTestCase()
+{
+    mMainWindow = new HbMainWindow;
+
+    mKeyCatcher = new KeyEventCatcher;
+    mMainWindow->installEventFilter(mKeyCatcher);
+
+    mDialpad = new Dialpad();
+    mEventFilter = new DialpadVideoMailboxEventFilter(mDialpad, this);
+    hbInstance->allMainWindows().at(0)->installEventFilter(mEventFilter);
+
+    QRectF rect(mMainWindow->contentsRect());
+    rect.setHeight(rect.height()*0.7);
+    rect.moveTop((mMainWindow->contentsRect().height()-rect.height())/2);
+
+    mDialpad->setPreferredSize(360,400);
+    mDialpad->setPos(0,100);
+
+    mKeyNames.insert(Qt::Key_1,"49");
+    mKeyNames.insert(Qt::Key_2,"50");
+    mKeyNames.insert(Qt::Key_3,"51");
+    mKeyNames.insert(Qt::Key_4,"52");
+    mKeyNames.insert(Qt::Key_5,"53");
+    mKeyNames.insert(Qt::Key_6,"54");
+    mKeyNames.insert(Qt::Key_7,"55");
+    mKeyNames.insert(Qt::Key_8,"56");
+    mKeyNames.insert(Qt::Key_9,"57");
+    mKeyNames.insert(Qt::Key_Asterisk,"42");
+    mKeyNames.insert(Qt::Key_0,"48");
+    mKeyNames.insert(Qt::Key_NumberSign,"35");
+    mKeyNames.insert(Qt::Key_Backspace,"16777219");
+    mKeyNames.insert(Qt::Key_Yes,"16842753");
+
+    mMainWindow->show();
+    mDialpad->show();
+    mDialpad->hide();
+}
+
+void ut_DialpadVideoMailboxEventFilter::init()
+{
+    mService = QString("");
+    mMessage = QString("");
+    mXQServiceConstructed = false;
+    mSendCalled = false;
+}
+
+void ut_DialpadVideoMailboxEventFilter::cleanupTestCase()
+{
+    delete mDialpad;
+    delete mMainWindow;
+    delete mKeyCatcher;
+}
+
+void ut_DialpadVideoMailboxEventFilter::cleanup()
+{
+    mKeyCatcher->mKeyPresses.clear();
+    mKeyCatcher->mKeyReleases.clear();
+    mDialpad->editor().setText(QString());
+    QTest::qWait( WAIT_TIME ); // delay between tests
+}
+
+QGraphicsWidget* ut_DialpadVideoMailboxEventFilter::getWidgetByName(const QString& name)
+{
+    Q_ASSERT(mMainWindow!=0);
+
+    QGraphicsWidget* widget = 0;
+
+    QList<QGraphicsItem*> items = mMainWindow->scene()->items();
+    foreach (QGraphicsItem* item, items) {
+        if (item->isWidget()) {
+            QGraphicsWidget *w = static_cast<QGraphicsWidget*>(item);
+            if (w->objectName()==name) {
+                widget = w;
+            }
+        }
+    }
+
+    return widget;
+}
+
+void ut_DialpadVideoMailboxEventFilter::mouseClickDialpad(int key, MouseEventType type, bool pause)
+{
+    QString name = mKeyNames.value(key);
+
+    QGraphicsWidget* widget = getWidgetByName(name);
+
+    if ( widget ) {
+        QPointF widgetPos = widget->scenePos() +
+                            widget->rect().center();
+
+        QPoint windowPos = mMainWindow->mapFromScene( widgetPos );
+
+        if (type==Press) {
+            QTest::mousePress( mMainWindow->viewport(), Qt::LeftButton,
+                               0, windowPos );
+        } else if (type==Release) {
+            QTest::mouseRelease( mMainWindow->viewport(), Qt::LeftButton,
+                                 0, windowPos );
+        } else {
+            QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,
+                               0, windowPos );
+        }
+
+        if (pause) {
+            QTest::qWait( WAIT_TIME );
+        }
+    } else {
+        QFAIL( "Button could not be accessed!" );
+    }
+}
+
+
+void ut_DialpadVideoMailboxEventFilter::testNumericKeyTwoLongPress()
+{
+    mDialpad->openDialpad();
+    QTest::qWait(WAIT_TIME);
+    mouseClickDialpad(Qt::Key_2, Press);
+    QTest::qWait(2000);
+    mouseClickDialpad(Qt::Key_2, Release);
+    QTest::qWait(1000);
+    QCOMPARE(mDialpad->editor().text(), QString(""));
+    mDialpad->closeDialpad();
+
+#ifdef Q_OS_SYMBIAN
+    QVERIFY(mXQServiceConstructed == true);
+    QVERIFY(mSendCalled == true);
+    QCOMPARE(mService, QString("com.nokia.symbian.ICallDial"));
+    QCOMPARE(mMessage, QString("dialVideo(QString)"));
+#endif
+}
+
+void ut_DialpadVideoMailboxEventFilter::testNumericKeyTwoShortPress()
+{
+    mDialpad->openDialpad();
+    QTest::qWait(WAIT_TIME);
+    mouseClickDialpad(Qt::Key_2, Press);
+    QTest::qWait(200);
+    mouseClickDialpad(Qt::Key_2, Release);
+    QTest::qWait(1000);
+    // Check that character '1' is in editor.
+    QCOMPARE(mDialpad->editor().text(), QString("2"));
+}
+
+void ut_DialpadVideoMailboxEventFilter::testNumericKeyTwoShortThenLongPress()
+{
+    // Then one short and one long press
+    mDialpad->openDialpad();
+    QTest::qWait( WAIT_TIME );
+    mouseClickDialpad(Qt::Key_2, Press);
+    mouseClickDialpad(Qt::Key_2, Release);
+    mouseClickDialpad(Qt::Key_2, Press);
+    QTest::qWait(2000);
+    mouseClickDialpad(Qt::Key_2, Release);
+    QTest::qWait(1000);
+    QVERIFY(mDialpad->editor().text()=="22");
+    mDialpad->closeDialpad();
+}
+
+DIALPAD_TEST_MAIN(ut_DialpadVideoMailboxEventFilter)
+#include "ut_dialpadvideomailboxeventfilter.moc"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/tsrc/unit/ut_dialpadvideomailboxeventfilter/ut_dialpadvideomailboxeventfilter.pro	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2010 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:
+#
+#
+
+TEMPLATE = app
+TARGET =
+INCLUDEPATH += . ../../../inc ../../../../../inc  ../shared
+
+CONFIG += hb qtestlib
+
+symbian {
+    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+} else:win32 {
+    DESTDIR = ./
+    INCLUDEPATH += ../../../../../phonesrv_plat/dialpad_api/inc
+    INCLUDEPATH += ../../../../xqtelephonyservice/inc
+}
+
+#
+HEADERS += ../../../inc/dialpadvideomailboxeventfilter.h
+HEADERS += ../../../inc/dialpadmailboxeventfilterbase.h
+HEADERS += ../../../inc/dialpadsymbianwrapper.h
+HEADERS += xqservicerequest.h
+SOURCES += ut_dialpadvideomailboxeventfilter.cpp
+SOURCES += ../../../src/dialpadvideomailboxeventfilter.cpp
+SOURCES += ../../../src/dialpadmailboxeventfilterbase.cpp
+
+# 
+LIBS += -ldialpad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/tsrc/unit/ut_dialpadvideomailboxeventfilter/xqservicerequest.h	Thu May 27 13:23:05 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+class XQServiceRequest : public QObject
+{
+public:
+    XQServiceRequest(const QString& service, const QString& message, const bool& synchronous);
+    ~XQServiceRequest();
+    bool send(QVariant& retValue);
+    void addArg(const QVariant& v);
+    template<typename T>
+    inline XQServiceRequest &operator<< (const T &var)
+    {
+        QVariant v = qVariantFromValue(var);
+        addArg(v);
+        return *this;
+    }
+};
--- a/telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.cpp	Thu May 27 13:23:05 2010 +0300
@@ -251,7 +251,9 @@
     mDialpad->openDialpad();
     QTest::qWait(WAIT_TIME);
     mouseClickDialpad(Qt::Key_1, Press);
+    QTest::qWait(200);
     mouseClickDialpad(Qt::Key_1, Release);
+    QTest::qWait(1000);
     // Check that character '1' is in editor.
     QCOMPARE(mDialpad->editor().text(), QString("1"));
 }
--- a/telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.pro	Fri May 14 16:24:46 2010 +0300
+++ b/telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.pro	Thu May 27 13:23:05 2010 +0300
@@ -31,10 +31,12 @@
 
 #
 HEADERS += ../../../inc/dialpadvoicemailboxeventfilter.h
+HEADERS += ../../../inc/dialpadmailboxeventfilterbase.h
 HEADERS += ../../../inc/dialpadsymbianwrapper.h
 HEADERS += xqservicerequest.h
 SOURCES += ut_dialpadvoicemailboxeventfilter.cpp
 SOURCES += ../../../src/dialpadvoicemailboxeventfilter.cpp
+SOURCES += ../../../src/dialpadmailboxeventfilterbase.cpp
 
 # 
 LIBS += -ldialpad
--- a/vmbx/vmbxcpplugin/src/vmbxcpgroup.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/vmbx/vmbxcpplugin/src/vmbxcpgroup.cpp	Thu May 27 13:23:05 2010 +0300
@@ -44,7 +44,7 @@
         mCsVoice1Editor(NULL),
         mCsVideo1Editor(NULL)
 { 
-    _DBGLOG2("VmbxCpGroup::VmbxCpGroup label=",label)
+    _DBGLOG("VmbxCpGroup::VmbxCpGroup")
     // Localization file loading
     QTranslator translator; 
     QString lang = QLocale::system().name();
--- a/vmbx/vmbxcpplugin/tsrc/src/ut_vmbxcpplugin.cpp	Fri May 14 16:24:46 2010 +0300
+++ b/vmbx/vmbxcpplugin/tsrc/src/ut_vmbxcpplugin.cpp	Thu May 27 13:23:05 2010 +0300
@@ -45,6 +45,12 @@
 void Ut_vmbxCpPlugin::testCreateVmbxCpGroup()
 {
     CpItemDataHelper itemDataHelper;
+<<<<<<< e:\ec_temp\ut_vmbxcpplugin-e003sa18#2.cpp
+    VmbxCpGroup *group = new VmbxCpGroup(itemDataHelper);
+    QVERIFY(group);
+    delete group;
+    group = NULL;
+=======
     VmbxCpGroup *group = new VmbxCpGroup(itemDataHelper);
     QVERIFY(group);
     delete group;
@@ -54,5 +60,6 @@
     QVERIFY(group);
     delete group;
     group = NULL;
+>>>>>>> e:\ec_temp\ut_vmbxcpplugin-2.cpp
 }
 //End of file