Revision: 201035
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:33:29 +0300
changeset 50 2313cb430f28
parent 45 61f927bc9441
child 52 d841fb1cc818
Revision: 201035 Kit: 201037
cbs/CbsServer/Group/CbsServer.mmp
cbs/CbsServer/ServerSrc/CCbsDbImp.cpp
cbs/CbsServer/ServerSrc/CCbsDbImpTopicList.cpp
cbs/CbsServer/ServerSrc/CCbsReceiverHelper.cpp
cellular/psuinotes/inc/psuilogging.h
cellular/psuinotes/inc/psuiutils.h
cellular/psuinotes/src/psuidivertnotehandler.cpp
cellular/psuinotes/src/psuilocalisation.cpp
cellular/psuinotes/src/psuinotes.cpp
cellular/psuinotes/src/psuiwaitingnotehandler.cpp
cellular/telephonysettings/group/phonesettings.mmp
cellular/telephonysettings/xqbindings/psetwrapper/psetwrapper.pri
cellular/telephonysettings/xqbindings/psetwrapper/tsrc/ut_psetcliwrapper/ut_psetcliwrapper.cpp
convergedcallengine/cenrepdatabase/group/cenrepdatabase.mmp
convergedcallengine/spsettings/group/serviceprovidersettings.mmp
package_definition.xml
package_map.xml
phoneclientserver/phoneserver/Group/PhoneServer.mmp
phonecmdhandler/phonecmdhnlr/group/PhoneCmdHandler.mmp
satengine/SatServer/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp
satengine/SatServer/inc/SatMacroes.h
satui/satapp/inc/satappmainhandler.h
satui/satapp/satapp.pro
satui/satapp/src/satappmainhandler.cpp
telutils/dialpad/dialpad.pro
telutils/dialpad/inc/dialpadinputfield.h
telutils/dialpad/inc/dialpadkeypad.h
telutils/dialpad/inc/dialpadnumericbutton.h
telutils/dialpad/inc/dialpadnumericbuttongrid.h
telutils/dialpad/resources/dialpad.css
telutils/dialpad/src/dialpad.cpp
telutils/dialpad/src/dialpadinputfield.cpp
telutils/dialpad/src/dialpadkeypad.cpp
telutils/dialpad/src/dialpadnumericbutton.cpp
telutils/dialpad/src/dialpadnumericbuttongrid.cpp
telutils/dialpad/tsrc/dialpadtest/dialpadtestview.cpp
telutils/dialpad/tsrc/dialpadtest/dialpadtestview.h
telutils/dialpad/tsrc/unit/shared/dialpadtestutil.cpp
telutils/dialpad/tsrc/unit/ut_dialpadnumericbutton/ut_dialpadnumericbutton.cpp
telutils/keysequencerecognitionservice/src/lifetimerkeysequencehandler.cpp
telutils/phoneparser/group/phoneparser.mmp
vmbx/vmbxcpplugin/src/vmbxcpgroup.cpp
vmbx/vmbxengine/src/voicemailboximpl.cpp
--- a/cbs/CbsServer/Group/CbsServer.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cbs/CbsServer/Group/CbsServer.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -39,7 +39,7 @@
 
 START RESOURCE  ../Data/CbsServer.rss
 HEADER
-TARGET          CbsServer.rsg
+TARGET          cbsserver.rsg
 TARGETPATH      RESOURCE_FILES_DIR
 LANGUAGE_IDS
 END
--- a/cbs/CbsServer/ServerSrc/CCbsDbImp.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cbs/CbsServer/ServerSrc/CCbsDbImp.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -33,7 +33,7 @@
 #include <e32svr.h>
 #include <bautils.h>
 
-#include <CbsServer.rsg>
+#include <cbsserver.rsg>
 
 #include "CbsUtils.h"
 #include "CbsServerPanic.h"
--- a/cbs/CbsServer/ServerSrc/CCbsDbImpTopicList.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cbs/CbsServer/ServerSrc/CCbsDbImpTopicList.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -30,7 +30,7 @@
 #include <barsc.h>              // Resource access
 #include <barsread.h>           // Resource access
 
-#include <CbsServer.rsg>
+#include <cbsserver.rsg>
 
 #include "CbsServerPanic.h"
 #include "CbsStreamHelper.h"
--- a/cbs/CbsServer/ServerSrc/CCbsReceiverHelper.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cbs/CbsServer/ServerSrc/CCbsReceiverHelper.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -27,7 +27,7 @@
 #include <barsc.h>              // Resource access
 #include <barsread.h>           // Resource access
 
-#include <CbsServer.rsg>
+#include <cbsserver.rsg>
 
 #include "CbsCommon.h"
 #include "CbsUtils.h"
--- a/cellular/psuinotes/inc/psuilogging.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/psuinotes/inc/psuilogging.h	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * 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"
--- a/cellular/psuinotes/inc/psuiutils.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/psuinotes/inc/psuiutils.h	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * 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"
@@ -35,7 +35,67 @@
 class PSUINOTES_EXPORT PsUiUtils : public QObject
 {
     Q_OBJECT
-
+    
+public:
+    enum BasicServiceGroups
+    {
+        Unknown = -1, //this is not part of GSM standard
+        // Phone settings updates this automatically to ETelephony or to EAltTele,
+        // depending on if ALS is supported, and which line is active.
+        AllTeleAndBearer = 0,
+        AllTele = 10,
+        Telephony = 11,
+        AllDataTele = 12,
+        Fax = 13,
+        Sms = 16,
+        AllDataExSms = 18, //voice broadcast in gsm 02.30 v. 7.1.0
+        AllTeleExcSms = 19,
+     
+        AllPlmnTele = 50,
+        PlmnTele1 = 51,
+        PlmnTele2 = 52,
+        PlmnTele3 = 53,
+        PlmnTele4 = 54,
+        PlmnTele5 = 55,
+        PlmnTele6 = 56,
+        PlmnTele7 = 57,
+        PlmnTele8 = 58,
+        PlmnTele9 = 59,
+        PlmnTeleA = 60,
+        PlmnTeleB = 61,
+        PlmnTeleC = 62,
+        PlmnTeleD = 63,
+        PlmnTeleE = 64,
+        PlmnTeleF = 65,
+     
+        AllBearer = 20,
+        AllAsync = 21,
+        AllSync = 22,
+        SyncData = 24,
+        AsyncData = 25,
+        PacketData = 26,
+        PadAccess = 27,
+        AllPlmnBearer = 70,
+        PlmnBearerServ1 = 71,
+        PlmnBearerServ2 = 72,
+        PlmnBearerServ3 = 73,
+        PlmnBearerServ4 = 74,
+        PlmnBearerServ5 = 75,
+        PlmnBearerServ6 = 76,
+        PlmnBearerServ7 = 77,
+        PlmnBearerServ8 = 78,
+        PlmnBearerServ9 = 79,
+        PlmnBearerServA = 80,
+        PlmnBearerServB = 81,
+        PlmnBearerServC = 82,
+        PlmnBearerServD = 83,
+        PlmnBearerServE = 84,
+        PlmnBearerServF = 85,
+     
+        AltTele = 89
+    // no ui note support
+    };
+    
 public:
     /*!
       Error code text conversion
--- a/cellular/psuinotes/src/psuidivertnotehandler.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/psuinotes/src/psuidivertnotehandler.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * 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"
@@ -134,7 +134,7 @@
     } else {
        if (ongoing) {
            PsUiNotes::instance()->showGlobalProgressNote(
-               m_activeProgressNoteId, hbTrId("txt_phone_info_requesting"));
+               m_activeProgressNoteId, hbTrId("txt_common_info_requesting"));
        } else {
            PsUiNotes::instance()->cancelNote(m_activeProgressNoteId);
        }
--- a/cellular/psuinotes/src/psuilocalisation.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/psuinotes/src/psuilocalisation.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * 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"
--- a/cellular/psuinotes/src/psuinotes.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/psuinotes/src/psuinotes.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * 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"
@@ -414,7 +414,7 @@
     const QList<PSCallDivertingStatus*> &divertingStatusList,
     QString &text)
 {
-    text.append(hbTrId("Active for:") + "\n\n"); //txt_phone_title_active_for
+    text.append(hbTrId("txt_phone_title_active_for") + "\n\n"); 
              
     int entries = divertingStatusList.count(); 
     DPRINT << ": entries " << entries;
@@ -427,24 +427,23 @@
            ((entry->iServiceGroup & ServiceGroupData)) && !dataSet) {   
            if ((entry->iServiceGroup & ServiceGroupVoice) && !voiceSet) {
                voiceSet = true;
-               text.append(hbTrId("Voice calls") + "\n"); //txt_phone_info_voice_calls  
+               text.append(hbTrId("txt_phone_info_voice_calls") + "\n"); 
               
            }
            else if ((entry->iServiceGroup & ServiceGroupData) && !dataSet) {
                dataSet = true;
-               text.append(hbTrId("Video calls") + "\n"); //txt_phone_info_video_calls
+               text.append(hbTrId("txt_phone_info_video_calls") + "\n"); 
            }
                 
            QString phoneNumber = formatPhoneNumber(divertingStatusList.at(i)->iNumber);
-           text.append(hbTrId("To number:\n%L1").arg(phoneNumber) +"\n"); //txt_phone_info_to_numbernl1
+           text.append(hbTrId("txt_phone_info_to_numbernl1").arg(phoneNumber) +"\n");
            if (0 < entry->iTimeout) {
-               text.append(hbTrId("Delay time:\n%L1 seconds").
-                   arg(entry->iTimeout) +"\n\n"); // txt_phone_info_delay_timenln_seconds    
+               text.append(hbTrId("txt_phone_info_delay_timenln_seconds",
+                   entry->iTimeout) + "\n\n");     
            }
            else {
                text.append("\n");
            }
-          
        }
     }
     // Convert plain text to html 
@@ -457,7 +456,8 @@
 void PsUiNotes::activeNoteAboutToClose()
 {
     DPRINT << ": IN";
-    
+
+
     if (m_isNoteShowingOngoing) {
         m_isNoteShowingOngoing = false;
         QObject* note(NULL);
@@ -473,7 +473,7 @@
             note->deleteLater();
         }
     }
-    
+
     DPRINT << ": OUT";
 }
 
@@ -483,9 +483,9 @@
 void PsUiNotes::handleProgressNoteCanceled()
 {
     DPRINT << ": IN";
-    
+
     emit progressNoteCanceled();
-    
+
     DPRINT << ": OUT";
 }
 
@@ -496,7 +496,7 @@
 {
     DPRINT << ": IN";
     Q_ASSERT(m_passwordDialog && m_passwordValidator);
-    
+
     HbLineEdit *hbLineEdit = m_passwordDialog->lineEdit();
     int position = 0;
     QString password = hbLineEdit->text();
@@ -504,7 +504,7 @@
         (QValidator::Acceptable == m_passwordValidator->validate(
             password, position));
     m_passwordDialog->actions().at(0)->setEnabled(isPasswordValid);
-        
+
     DPRINT << ": OUT";
 }
 
@@ -515,12 +515,12 @@
 void PsUiNotes::showNotificationDialog(const QString& text)
 {
     DPRINT << ": IN";
-    
+
     HbNotificationDialog *notifDialog = new HbNotificationDialog();
     
     notifDialog->setDismissPolicy(HbPopup::TapAnywhere);
     notifDialog->setAttribute(Qt::WA_DeleteOnClose, true);
-    notifDialog->setText(text);
+    notifDialog->setTitle(text);
     notifDialog->show();
 
     DPRINT << ": OUT";
@@ -534,10 +534,10 @@
     DPRINT << ": IN";
         
     HbDeviceNotificationDialog notifDialog;
-      
-    notifDialog.setText(text);
+
+    notifDialog.setTitle(text);
     notifDialog.show();
-    
+
     DPRINT << ": OUT";    
 }
 
--- a/cellular/psuinotes/src/psuiwaitingnotehandler.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/psuinotes/src/psuiwaitingnotehandler.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * 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"
@@ -29,9 +29,9 @@
     m_callWaitingWrapper(callWaitingWrapper)
 {
     DPRINT << ": IN";
-    
+
     m_settingsWrapper = new PsUiSettingsWrapper();
-    
+
     QObject::connect(
         &m_callWaitingWrapper, 
         SIGNAL(handleCallWaitingGetStatus(
@@ -81,21 +81,28 @@
 
     PsUiNotes::instance()->cancelNote(m_activeNoteId);
     
+    bool alsCaseOnly = false;
+    if (1 == basicServiceGroupIds.count() &&
+        PsUiUtils::AltTele == static_cast<PsUiUtils::BasicServiceGroups>(basicServiceGroupIds.at(0))) {
+        DPRINT << "Status is only for als";
+        alsCaseOnly = true;
+    }
+
     if (PSetCallWaitingWrapper::StatusNotProvisioned == status && 
         m_settingsWrapper->isFeatureCallWaitingDistiquishNotProvisionedEnabled()) {
         DPRINT << ": not provisioned";
-        PsUiNotes::instance()->showGlobalNotificationDialog(hbTrId("txt_phone_info_request_not_completed"));
-    }
-    
-    else if (PSetCallWaitingWrapper::StatusActive == status) {
+        PsUiNotes::instance()->
+            showGlobalNotificationDialog(hbTrId("txt_phone_info_request_not_completed"));
+    }  
+    else if (PSetCallWaitingWrapper::StatusActive == status && !alsCaseOnly ) {
         DPRINT << ": status active";
         PsUiNotes::instance()->showGlobalNotificationDialog(
-            hbTrId("Call waiting active")); //txt_phone_dpopinfo_call_waiting_active 
+            hbTrId("txt_phone_dpopinfo_call_waiting_active")); 
     }
     else {
         DPRINT << ": status not active";
         PsUiNotes::instance()->showGlobalNotificationDialog(
-            hbTrId("Call waiting not active")); //txt_phone_dpopinfo_call_waiting_not_active      
+            hbTrId("txt_phone_dpopinfo_call_waiting_not_active"));  
     }
 
     DPRINT << ": OUT";   
@@ -130,7 +137,7 @@
              break;
         }
       }
-        
+
     DPRINT << ": OUT";
 }
 
@@ -141,16 +148,16 @@
 {
     DPRINT << ": IN";
     DPRINT << "ongoing:" << ongoing << ", interrupted:" << interrupted;
-   
+
     if (ongoing) {
-        PsUiNotes::instance()->showGlobalProgressNote(m_activeNoteId, hbTrId("txt_common_info_requesting"));
+        PsUiNotes::instance()->showGlobalProgressNote(m_activeNoteId, 
+            hbTrId("txt_common_info_requesting"));
     }
-      
+
     if (interrupted) {
         PsUiNotes::instance()->cancelNote(m_activeNoteId);
     }
-    
-     
+
     DPRINT << ": OUT";
 }
 
@@ -161,7 +168,7 @@
 {
     DPRINT << ": IN";
     DPRINT << "errorCode:" << error;
-    PsUiNotes::instance()->cancelNote(m_activeNoteId);     
+    PsUiNotes::instance()->cancelNote(m_activeNoteId);
     PsUiNotes::instance()->showGlobalErrorNote(m_activeNoteId, error);
 
     DPRINT << ": OUT";
--- a/cellular/telephonysettings/group/phonesettings.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/telephonysettings/group/phonesettings.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2005 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"
@@ -12,12 +12,12 @@
 * Contributors:
 *
 * Description:  This is project specification file for the Phone Settings.
-*     
+*
 *
 */
 
 #include <platform_paths.hrh>
-#include "../logger/phonesettingsloggingconf.h" 
+#include "../logger/phonesettingsloggingconf.h"
 
 // Capability assignment.
 CAPABILITY CAP_GENERAL_DLL
@@ -28,41 +28,36 @@
 UID 0x1000008d 0x100058e3
 
 SOURCEPATH ../src
-SOURCE psetcallwaiting.cpp 
-SOURCE psetcontainer.cpp 
-SOURCE psetcallbarring.cpp 
-SOURCE psetcalldiverting.cpp 
-SOURCE psettelephony.cpp 
-SOURCE psetcli.cpp 
-SOURCE psetvariationproxy.cpp 
-SOURCE psetnetwork.cpp 
-SOURCE psetsaobserver.cpp 
-SOURCE psetcsp.cpp 
-SOURCE psetutility.cpp 
-SOURCE psetrefreshhandlerimpl.cpp 
-SOURCE psetcalldivertingbase.cpp 
-SOURCE psetsubscriberidcheck.cpp 
-SOURCE psetcalldivertingbasicimpl.cpp 
-SOURCE psetcalldivertingcreator.cpp 
-SOURCE psetcalldivertingdualaffectimpl.cpp 
+SOURCE psetcallwaiting.cpp
+SOURCE psetcontainer.cpp
+SOURCE psetcallbarring.cpp
+SOURCE psetcalldiverting.cpp
+SOURCE psettelephony.cpp
+SOURCE psetcli.cpp
+SOURCE psetvariationproxy.cpp
+SOURCE psetnetwork.cpp
+SOURCE psetsaobserver.cpp
+SOURCE psetcsp.cpp
+SOURCE psetutility.cpp
+SOURCE psetrefreshhandlerimpl.cpp
+SOURCE psetcalldivertingbase.cpp
+SOURCE psetsubscriberidcheck.cpp
+SOURCE psetcalldivertingbasicimpl.cpp
+SOURCE psetcalldivertingcreator.cpp
+SOURCE psetcalldivertingdualaffectimpl.cpp
 
 USERINCLUDE     ../inc
-USERINCLUDE     ../logger 
+USERINCLUDE     ../logger
 SYSTEMINCLUDE   ../../../inc
-// APP include needed because telephonysettings 
-// uses vmbx headers from APP layer.
-// <-- QT PHONE START -->
+
 MW_LAYER_SYSTEMINCLUDE
-// <-- QT PHONE END -->
+
 LIBRARY euser.lib
 LIBRARY etel.lib
 LIBRARY etelmm.lib
 LIBRARY customapi.lib
-LIBRARY bafl.lib         
+LIBRARY bafl.lib
 LIBRARY sssettings.lib
-// <-- QT PHONE START -->
-//LIBRARY vmbx.lib
-// <-- QT PHONE END -->
 LIBRARY featmgr.lib
 
 LIBRARY centralrepository.lib
--- a/cellular/telephonysettings/xqbindings/psetwrapper/psetwrapper.pri	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/telephonysettings/xqbindings/psetwrapper/psetwrapper.pri	Fri Sep 17 08:33:29 2010 +0300
@@ -14,13 +14,13 @@
 # Description: 
 #
 
-HEADERS += ../../../../phonesrv_plat/\phone_settings_api/inc/psetcallbarringwrapper.h \
-           ../../../../phonesrv_plat/\phone_settings_api/inc/psetcalldivertingwrapper.h \
-           ../../../../phonesrv_plat/\phone_settings_api/inc/psetcallwaitingwrapper.h \
-           ../../../../phonesrv_plat/\phone_settings_api/inc/psetcliwrapper.h \
-           ../../../../phonesrv_plat/\phone_settings_api/inc/psetnetworkwrapper.h \
-           ../../../../phonesrv_plat/\phone_settings_api/inc/psetwrapper.h \
-           ../../../../phonesrv_plat/\phone_settings_api/inc/psetwrappertypes.h \
+HEADERS += ../../../../phonesrv_plat/phone_settings_api/inc/psetcallbarringwrapper.h \
+           ../../../../phonesrv_plat/phone_settings_api/inc/psetcalldivertingwrapper.h \
+           ../../../../phonesrv_plat/phone_settings_api/inc/psetcallwaitingwrapper.h \
+           ../../../../phonesrv_plat/phone_settings_api/inc/psetcliwrapper.h \
+           ../../../../phonesrv_plat/phone_settings_api/inc/psetnetworkwrapper.h \
+           ../../../../phonesrv_plat/phone_settings_api/inc/psetwrapper.h \
+           ../../../../phonesrv_plat/phone_settings_api/inc/psetwrappertypes.h \
            ./src/psetcallbarringwrapper_p.h \
            ./src/psetcalldivertingwrapper_p.h \
            ./src/psetcallwaitingwrapper_p.h \
--- a/cellular/telephonysettings/xqbindings/psetwrapper/tsrc/ut_psetcliwrapper/ut_psetcliwrapper.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/cellular/telephonysettings/xqbindings/psetwrapper/tsrc/ut_psetcliwrapper/ut_psetcliwrapper.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -19,7 +19,6 @@
 #include <mpsetcliobserver.h>
 #include <psetwrappertypes.h>
 #include <PsetCli.h>
-#include <psuiconstants.h>
 #include "ut_psetcliwrapper.h"
 #include "testutilities.h"
 #define private public
--- a/convergedcallengine/cenrepdatabase/group/cenrepdatabase.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/convergedcallengine/cenrepdatabase/group/cenrepdatabase.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -33,9 +33,7 @@
 
 USERINCLUDE             ../inc
 
-// <-- QT PHONE START -->
 MW_LAYER_SYSTEMINCLUDE 
-// <-- QT PHONE END -->
 
 LIBRARY                 euser.lib
 LIBRARY                 centralrepository.lib
--- a/convergedcallengine/spsettings/group/serviceprovidersettings.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/convergedcallengine/spsettings/group/serviceprovidersettings.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -38,9 +38,7 @@
 
 USERINCLUDE             ../inc
 
-// <-- QT PHONE START-->
 MW_LAYER_SYSTEMINCLUDE 
-// <-- QT PHONE END-->
 
 LIBRARY                 euser.lib
 LIBRARY                 centralrepository.lib
@@ -50,4 +48,4 @@
 LIBRARY                 featmgr.lib
 LIBRARY                 cenrepdatabase.lib
 
-//DEFFILE                 ?filename
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Fri Sep 17 08:33:29 2010 +0300
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0" xmlns:qt="http://www.nokia.com/qt">
+ <package id="phonesrv" name="Telephony and SIM Services" levels="utils framework server ui specific">
+  <collection id="phonesrv_plat" name="Telephony and SIM Services Platform Interfaces" level="specific">
+   <component id="string_parser_api" name="String Parser API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/string_parser_api/string_parser_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/string_parser_api/group"/>
+   </component>
+   <component id="cbs_mcn_client_api" name="CBS MCN Client API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/cbs_mcn_client_api/cbs_mcn_client_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/cbs_mcn_client_api/group"/>
+   </component>
+   <component id="converged_call_engine_api" name="Converged Call Engine API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/converged_call_engine_api/converged_call_engine_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/converged_call_engine_api/group"/>
+   </component>
+   <component id="aiw_dial_data_consumer_api" name="AIW Dial Data Consumer API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/aiw_dial_data_consumer_api/aiw_dial_data_consumer_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/aiw_dial_data_consumer_api/group"/>
+   </component>
+   <component id="phone_client_ussd_api" name="Phone Client USSD API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_ussd_api/phone_client_ussd_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_ussd_api/group"/>
+   </component>
+   <component id="sat_refresh_api" name="SAT Refresh API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/sat_refresh_api/sat_refresh_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/sat_refresh_api/group" filter="!test"/>
+    <unit bldFile="phonesrv_plat/sat_refresh_api/tsrc/group" filter="test,api_test"/>
+   </component>
+   <component id="network_handling_engine_api" name="Network Handling Engine API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/network_handling_engine_api/network_handling_engine_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/network_handling_engine_api/group"/>
+   </component>
+   <component id="phone_client_emergency_call_api" name="Phone Client Emergency Call API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_emergency_call_api/phone_client_emergency_call_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_emergency_call_api/group"/>
+   </component>
+   <component id="sat_configuration_api" name="SAT Configuration API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/sat_configuration_api/sat_configuration_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/sat_configuration_api/group"/>
+   </component>
+   <component id="dial_utils_api" name="Dial Utils API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/dial_utils_api/dial_utils_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/dial_utils_api/group"/>
+   </component>
+   <component id="phone_client_image_handler_api" name="Phone Client Image Handler API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_image_handler_api/phone_client_image_handler_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_image_handler_api/group"/>
+   </component>
+   <component id="phone_client_messenger_api" name="Phone Client Messenger API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_messenger_api/phone_client_messenger_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_messenger_api/group"/>
+   </component>
+   <component id="sat_client_api" name="SAT Client API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/sat_client_api/sat_client_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/sat_client_api/group" filter="!test"/>
+    <unit bldFile="phonesrv_plat/sat_client_api/tsrc/group" filter="test,api_test"/>
+   </component>
+   <component id="phone_client_api" name="Phone Client API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_api/phone_client_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_api/group"/>
+   </component>
+   <component id="sat_service_api" name="SAT Service API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/sat_service_api/sat_service_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/sat_service_api/group" filter="!test"/>
+    <unit bldFile="phonesrv_plat/sat_service_api/tsrc/group" filter="test,api_test"/>
+   </component>
+   <component id="cbs_message_api" name="CBS Message API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/cbs_message_api/cbs_message_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/cbs_message_api/group"/>
+   </component>
+   <component id="phone_client_server_information_api" name="Phone Client Server Information API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_server_information_api/phone_client_server_information_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_server_information_api/group"/>
+   </component>
+   <component id="phone_client_ussd_internal_api" name="Phone Client USSD Internal API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_ussd_internal_api/phone_client_ussd_internal_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_ussd_internal_api/group"/>
+   </component>
+   <component id="phone_client_command_handler_api" name="Phone Client Command Handler API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_command_handler_api/phone_client_command_handler_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_command_handler_api/group"/>
+   </component>
+   <component id="phone_client_notify_api" name="Phone Client Notify API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_notify_api/phone_client_notify_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_notify_api/group"/>
+   </component>
+   <component id="phone_client_utility_api" name="Phone Client Utility API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_client_utility_api/phone_client_utility_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_client_utility_api/group"/>
+   </component>
+   <component id="telephony_network_information_api" name="Telephony Network Information API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/telephony_network_information_api/telephony_network_information_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/telephony_network_information_api/group"/>
+   </component>
+   <component id="secondary_display_sat_api" name="Secondary Display SAT API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/secondary_display_sat_api/secondary_display_sat_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/secondary_display_sat_api/group"/>
+   </component>
+   <component id="callui_reconnect_query_api" name="CallUI Reconnect Query API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/callui_reconnect_query_api/callui_reconnect_query_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/callui_reconnect_query_api/group"/>
+   </component>
+   <component id="service_provider_settings_api" name="Service Provider Settings API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/service_provider_settings_api/service_provider_settings_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/service_provider_settings_api/group"/>
+   </component>
+   <component id="converged_call_provider_api" name="Converged Call Provider API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/converged_call_provider_api/converged_call_provider_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/converged_call_provider_api/group"/>
+   </component>
+   <component id="incoming_call_monitor_api" name="Incoming Call Monitor API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/incoming_call_monitor_api/incoming_call_monitor_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/incoming_call_monitor_api/group"/>
+   </component>
+   <component id="default_emergency_numbers_api" name="Default Emergency Numbers API" class="api" filter="s60">
+    <unit bldFile="phonesrv_plat/default_emergency_numbers_api/group"/>
+   </component>
+   <component id="cenrep_database_api" name="Central Repository Database API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/cenrep_database_api/cenrep_database_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/cenrep_database_api/group"/>
+   </component>
+   <component id="ss_settings_api" name="SS Settings API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/ss_settings_api/ss_settings_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/ss_settings_api/group"/>
+   </component>
+   <component id="phone_settings_observer_api" name="Phone Settings Observer API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_settings_observer_api/phone_settings_observer_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_settings_observer_api/group"/>
+   </component>
+   <component id="phone_settings_notes_ui_api" name="Phone Settings Notes UI API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_settings_notes_ui_api/phone_settings_notes_ui_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_settings_notes_ui_api/group"/>
+   </component>
+   <component id="phone_settings_api" name="Phone Settings API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/phone_settings_api/phone_settings_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_settings_api/group"/>
+   </component>
+   <component id="voice_mailbox_number_api" name="Voice Mailbox Number API" class="api" filter="s60">
+    <unit bldFile="phonesrv_plat/voice_mailbox_number_api/group"/>
+   </component>
+   <component id="voice_mailbox_settings_api" name="Voice Mailbox Settings API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/voice_mailbox_settings_api/voice_mailbox_settings_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/voice_mailbox_settings_api/group"/>
+   </component>
+   <component id="call_information_api" name="Call Information API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/call_information_api/call_information_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/call_information_api/group" filter="!test"/>
+    <unit bldFile="phonesrv_plat/call_information_api/tsrc/group" filter="test,api_test"/>
+   </component>
+   <component id="call_remote_party_information_api" name="Call Remote Party Information API" class="api" filter="s60">
+    <unit bldFile="phonesrv_plat/call_remote_party_information_api/group" filter="!test"/>
+    <unit bldFile="phonesrv_plat/call_remote_party_information_api/tsrc/group" filter="test,api_test"/>
+   </component>
+   <component id="telephony_mediator_api" name="Telephony Mediator API" class="api" filter="s60">
+    <meta rel="Api" href="phonesrv_plat/telephony_mediator_api/telephony_mediator_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/telephony_mediator_api/group" filter="!test"/>
+    <unit bldFile="phonesrv_plat/telephony_mediator_api/tsrc/ut_telephony_mediator_api/group" filter="test,api_test"/>
+   </component>
+   <component id="dialpad_api" name="Dialpad API" class="api" filter="s60" introduced="^4">
+    <unit bldFile="phonesrv_plat/dialpad_api/group"/>
+   </component>
+   <component id="phone_settings_ui_notes_api" name="Phone Settings UI Notes API" class="api" filter="s60" introduced="^4">
+    <meta rel="Api" href="phonesrv_plat/phone_settings_ui_notes_api/phone_settings_ui_notes_api.metaxml"/>
+    <unit bldFile="phonesrv_plat/phone_settings_ui_notes_api/group"/>
+   </component>
+  </collection>
+  <collection id="telutils" name="Telephony Utils" level="utils">
+   <component id="phoneparser" filter="s60" name="Phone Parser">
+    <unit bldFile="telutils/phoneparser/group"/>
+   </component>
+   <component id="telephonyservice" filter="s60" name="Telephony Service">
+    <unit bldFile="telutils/telephonyservice/group"/>
+   </component>
+   <component id="xqtelephonyservice" filter="s60" name="X Qt Telephony Service" introduced="^4">
+    <unit bldFile="telutils/xqtelephonyservice" qt:proFile="xqtelephonyservice.pro"/>
+   </component>
+   <component id="dialpad" filter="s60" name="Dial Pad" introduced="^4">
+    <unit bldFile="telutils/dialpad" qt:proFile="dialpad.pro"/>
+   </component>
+   <component id="keysequencerecognitionservice" filter="s60" name="Key Sequence Recognition Service" introduced="^4">
+    <unit bldFile="telutils/keysequencerecognitionservice" qt:proFile="keysequencerecognitionservice.pro"/>
+   </component>
+  </collection>
+  <collection id="cbs" name="Cellular Baseband Services" level="utils">
+   <component id="cbsserver" filter="s60" name="CBS Server">
+    <unit bldFile="cbs/cbsserver/group"/>
+   </component>
+  </collection>
+  <collection id="cellular" name="Cellular" level="server">
+   <component id="telephonysettings" filter="s60" name="Telephony Settings" purpose="development">
+    <unit bldFile="cellular/telephonysettings/group" filter="!test"/>
+    <unit bldFile="cellular/telephonysettings/tsrc/public/basic/group" filter="test,api_test"/>
+   </component>
+   <component id="psetwrapper" filter="s60" name="Provider Settings Wrapper" introduced="^4">
+	<!-- need to move to own component, not under sssettings -->
+    <unit bldFile="cellular/telephonysettings/xqbindings/psetwrapper" qt:proFile="psetwrapper.pro"/>
+   </component>
+   <component id="sssettings" filter="s60" name="Supplementary Service Settings" purpose="development">
+    <unit bldFile="cellular/sssettings/group" filter="!test"/>
+    <unit bldFile="cellular/SSSettings/tsrc/public/basic/group" filter="test,api_test"/>
+   </component>
+   <component id="sssettingswrapper" filter="s60" name="Supplementary Service Settings Wrapper" introduced="^4">
+	<!-- need to move to own component, not under sssettings -->
+    <unit bldFile="cellular/sssettings/xqbindings/sssettingswrapper" qt:proFile="sssettingswrapper.pro"/>
+   </component>
+   <component id="psetnotesui" filter="s60" name="Phone Settings Notes UI" purpose="development">
+    <unit bldFile="cellular/psetnotesui/group" filter="!test"/>
+    <unit bldFile="cellular/PsetNotesUi/tsrc/public/basic/group" filter="test,api_test"/>
+   </component>
+   <component id="psuinotes" filter="s60" name="Phone Settings Notes UI" introduced="^4">
+    <unit bldFile="cellular/psuinotes" qt:proFile="psuinotes.pro"/>
+   </component>
+   <component id="servicerequest" filter="s60" name="Service Request">
+    <unit bldFile="cellular/servicerequest/group"/>
+   </component>
+  </collection>
+  <collection id="convergedcallengine" name="Converged Call Engine" level="framework">
+   <component id="callprovider" filter="s60" name="Call Provider">
+    <unit bldFile="convergedcallengine/callprovider/group"/>
+   </component>
+   <component id="cce" filter="s60" name="CCE">
+    <unit bldFile="convergedcallengine/cce/group" filter="!test"/>
+    <unit filter="test,api_test" bldFile="convergedcallengine/cce/tsrc/public/basic/group"/>
+   </component>
+   <component id="spsettings" filter="s60" name="Service Provider Settings">
+    <unit bldFile="convergedcallengine/spsettings/group" filter="!test"/>
+    <unit filter="test,api_test" bldFile="convergedcallengine/spsettings/tsrc/public/basic/group"/>
+   </component>
+   <component id="cenrepdatabase" filter="s60" name="CCE Cenrep Database">
+    <unit bldFile="convergedcallengine/cenrepdatabase/group"/>
+   </component>
+   <component id="serviceselector" filter="s60" name="Service Selector">
+    <unit bldFile="convergedcallengine/serviceselector/group"/>
+   </component>
+  </collection>
+  <collection id="networkhandling" name="Network Handling" level="framework">
+   <component id="networkhandlingengine" filter="s60" name="Network Handling Engine">
+    <unit bldFile="networkhandling/networkhandlingengine/group"/>
+   </component>
+  </collection>
+  <collection id="phoneclientserver" name="Phone Client/Server" level="server">
+   <component id="enpolicy" filter="s60" name="Emergency Number Policy">
+    <unit bldFile="phoneclientserver/enpolicy/group"/>
+   </component>
+   <component id="aiwdialdata" filter="s60" name="AIW Dial Data">
+    <unit bldFile="phoneclientserver/aiwdialdata/group" filter="!test"/>
+    <unit filter="test,api_test" bldFile="phoneclientserver/aiwdialdata/tsrc/public/basic/group"/>
+   </component>
+   <component id="dialutils" filter="s60" name="Dial Utils">
+    <unit bldFile="phoneclientserver/dialutils/group" filter="!test"/>
+    <unit filter="test,api_test" bldFile="phoneclientserver/dialutils/tsrc/public/basic/group"/>
+   </component>
+   <component id="phoneclient" filter="s60" name="Phone Client">
+    <unit bldFile="phoneclientserver/phoneclient/group" filter="!test"/>
+    <unit filter="test,api_test" bldFile="phoneclientserver/phoneclient/tsrc/public/basic/group"/>
+   </component>
+   <component id="phoneserver" filter="s60" name="Phone Server">
+    <unit bldFile="phoneclientserver/phoneserver/group"/>
+   </component>
+  </collection>
+  <collection id="phonecmdhandler" name="Phone Command Handler" level="generic">
+   <component id="phonecmdhnlr" filter="s60" name="Phone Command Handler">
+    <unit bldFile="phonecmdhandler/phonecmdhnlr/group"/>
+   </component>
+  </collection>
+  <collection id="satengine" name="SAT Engine" level="server">
+   <component id="satserver" filter="s60" name="SAT Server">
+    <unit bldFile="satengine/satserver/group"/>
+   </component>
+  </collection>
+  <collection id="satui" name="SAT UI" level="ui">
+   <component id="satshellcontroller" filter="s60" name="SAT Shell Controller">
+    <unit bldFile="satui/satshellcontroller/group"/>
+   </component>
+   <component id="satapp" filter="s60" name="SAT Application" introduced="^4">
+    <unit bldFile="satui/satapp" qt:proFile="satapp.pro"/>
+   </component>
+  </collection>
+  <collection id="vmbx" name="Voice Mailbox" level="ui">
+   <component id="vmbxcpplugin" filter="s60" name="Voice Mailbox CP Plugin" class="plugin" introduced="^4">
+    <unit bldFile="vmbx/vmbxcpplugin" qt:proFile="vmbxcpplugin.pro"/>
+   </component>
+   <component id="vmbxengine" filter="s60" name="Voice Mailbox Engine"  introduced="^4">
+    <unit bldFile="vmbx/vmbxengine" qt:proFile="vmbxengine.pro"/>
+   </component>
+  </collection>
+ </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Fri Sep 17 08:33:29 2010 +0300
@@ -0,0 +1,1 @@
+<PackageMap root="sf" layer="mw"/>
--- a/phoneclientserver/phoneserver/Group/PhoneServer.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/phoneclientserver/phoneserver/Group/PhoneServer.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -113,16 +113,11 @@
 
 USERINCLUDE     ../../phoneclient/inc/sharedclientserver 
 
-// <-- QT PHONE START-->
 MW_LAYER_SYSTEMINCLUDE
-// <-- QT PHONE END-->
 
 SYSTEMINCLUDE   ../../../inc
 SYSTEMINCLUDE    ../../inc // for RPhCltEmergencyCall.h, CPhCltExtPhoneDialData.h
 
-// TEMPORARY DEFINITION FOR TELEPHONY VARIATION HEADERS
-SYSTEMINCLUDE   ../../../../../app/phone/inc
-
 // TEMPORARY DEFINITION FOR Orbit Device Dialog
 SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets
 SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore
--- a/phonecmdhandler/phonecmdhnlr/group/PhoneCmdHandler.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/phonecmdhandler/phonecmdhnlr/group/PhoneCmdHandler.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -51,9 +51,6 @@
 LIBRARY     phoneclient.lib
 LIBRARY     logcli.lib
 LIBRARY     efsrv.lib
-// <-- QT PHONE START -->
-//LIBRARY       pbkeng.lib
-// <-- QT PHONE END -->
 
 MACRO       API_TRACE_FLAG
 MACRO       COMPONENT_TRACE_FLAG
--- a/satengine/SatServer/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/satengine/SatServer/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -765,6 +765,15 @@
                 CompleteSetupCall( RSat::KModifiedByCallControl );
                 break;
                 }
+            case KErrSatBusy:
+                {
+                LOG( SIMPLE, 
+                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
+                KInteractionWithCCTemporaryError" )
+                // Call control some time can case this error.
+                CompleteSetupCall( RSat::KInteractionWithCCTemporaryError );
+                break;
+                }
                 
             default:
                 {
--- a/satengine/SatServer/inc/SatMacroes.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/satengine/SatServer/inc/SatMacroes.h	Fri Sep 17 08:33:29 2010 +0300
@@ -29,9 +29,11 @@
 // MACRO MODULE_TESTING_LB
 // #define MODULE_TESTING_LB
 
+#ifdef _DEBUG
 // Use this macro to enable logging.
 // Must be disabled on released version.
-// MACRO ENABLE_SAT_LOGGING
-// #define ENABLE_SAT_LOGGING
+MACRO ENABLE_SAT_LOGGING
+#define ENABLE_SAT_LOGGING
+#endif
 
 #endif      // SATMACROES_H
--- a/satui/satapp/inc/satappmainhandler.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/satui/satapp/inc/satappmainhandler.h	Fri Sep 17 08:33:29 2010 +0300
@@ -30,6 +30,7 @@
 class SatAppToneProvider;
 class SatAppPopupProvider;
 class SatAppConfirmProvider;
+class AfActivityStorage;
 
 class SatAppMainHandler : public QObject
 {
@@ -59,6 +60,7 @@
     SatAppPopupProvider* mPopup;
     SatAppConfirmProvider *mConfirm;
     QVariantHash mActivity;
+    AfActivityStorage *mActivityStorage;
     
     HbMessageBox *mOfflineWarningDlg;
 };
--- a/satui/satapp/satapp.pro	Thu Sep 02 21:00:29 2010 +0300
+++ b/satui/satapp/satapp.pro	Fri Sep 17 08:33:29 2010 +0300
@@ -47,7 +47,8 @@
         -lCdlEngine \
         -lmediaclientaudio \
         -lprofileeng \
-        -lbafl 
+        -lbafl \
+        -lafservice
 
 HEADERS += inc/satappmainhandler.h \
            inc/satappserverdispatcher.h \
--- a/satui/satapp/src/satappmainhandler.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/satui/satapp/src/satappmainhandler.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -17,9 +17,10 @@
 */
 //Qt
 #include <HbApplication>
-#include <HbActivityManager>
 #include <hbapplication.h>
 #include <hbmessagebox.h>
+#include <afactivitystorage.h>
+#include <afstorageglobals.h>
 
 // symbian
 #include <centralrepository.h>
@@ -62,6 +63,8 @@
     else{
         showOfflineWarning();
     }
+    
+    mActivityStorage = new AfActivityStorage(this);
     removeActivity();
     
     qDebug("SATAPP: SatAppMainHandler::SatAppMainHandler <");
@@ -211,7 +214,8 @@
 void SatAppMainHandler::updateActivity()
 {
     qDebug("SATAPP: SatAppMainHandler::updateActivity >");
-    mActivity.insert("screenshot", mMenu->takeScreenShot());
+    mActivity.insert(ActivityScreenshotKeyword, 
+        mMenu->takeScreenShot());
     qDebug("SATAPP: SatAppMainHandler::updateActivity <");
 }
 
@@ -224,8 +228,8 @@
     qDebug("SATAPP: SatAppMainHandler::saveActivity >");
 
     // Add the activity to the activity manager
-    const bool ok = qobject_cast<HbApplication*>(qApp)->activityManager()->
-        addActivity(SATAPP_ACTIVITY_ID, QVariant(), mActivity);
+    const bool ok = mActivityStorage->saveActivity(
+        SATAPP_ACTIVITY_ID, QVariant(), mActivity);
     
     qDebug("SATAPP: SatAppMainHandler::saveActivity < %d", ok);
 }
@@ -238,20 +242,13 @@
 {
     qDebug("SATAPP: SatAppMainHandler::removeActivity >");
         
-    QList<QVariantHash> activityList = 
-        qobject_cast<HbApplication*>(qApp)->activityManager()->activities();
-    qDebug("SATAPP: SatAppMenuProvider::removeActivity count=%d",
-        activityList.count());
-    foreach (QVariantHash activity, activityList){
-        if (activity.keys().contains(SATAPP_ACTIVITY_ID)){
-            mActivity = activity;
-            qDebug("SATAPP: SatAppMenuProvider::removeActivity store");
-            break;
-        }
-    }    
-
-    const bool ok = qobject_cast<HbApplication*>(qApp)->activityManager()->
-        removeActivity(SATAPP_ACTIVITY_ID);
+   
+    QVariantHash activity = mActivityStorage->activityMetaData(SATAPP_ACTIVITY_ID);
+    if(activity.keys().contains(SATAPP_ACTIVITY_ID)) {
+        mActivity = activity;
+        qDebug("SATAPP: SatAppMenuProvider::removeActivity store");
+    }
+    const bool ok = mActivityStorage->removeActivity(SATAPP_ACTIVITY_ID);
     
     qDebug("SATAPP: SatAppMainHandler::removeActivity < %d", ok);
 }
--- a/telutils/dialpad/dialpad.pro	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/dialpad.pro	Fri Sep 17 08:33:29 2010 +0300
@@ -38,7 +38,8 @@
            inc/dialpadmailboxeventfilterbase.h \
            inc/dialpademergencycalleventfilter.h \
            inc/dialpadhasheventfilter.h \
-           inc/dialpadnumericbutton.h
+           inc/dialpadnumericbutton.h \
+           inc/dialpadnumericbuttongrid.h
 
 SOURCES += src/dialpad.cpp \
            src/dialpadbutton.cpp \
@@ -56,7 +57,8 @@
            src/dialpademergencycalleventfilter.cpp \
            src/dialpadvtkeyhandler.cpp \
            src/dialpadhasheventfilter.cpp \
-	   src/dialpadnumericbutton.cpp
+           src/dialpadnumericbutton.cpp \
+           src/dialpadnumericbuttongrid.cpp
 
 RESOURCES += dialpad.qrc
 
--- a/telutils/dialpad/inc/dialpadinputfield.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/inc/dialpadinputfield.h	Fri Sep 17 08:33:29 2010 +0300
@@ -23,19 +23,23 @@
 class HbLineEdit;
 class DialpadButtonStyle;
 class DialpadButton;
+class HbMainWindow;
 
 class DialpadInputField : public HbWidget
 {
     Q_OBJECT
 
 public:
-    DialpadInputField(QGraphicsItem* parent=0);
+    DialpadInputField(const HbMainWindow& mainWindow,
+                      QGraphicsItem* parent=0);
     ~DialpadInputField();
 
     HbLineEdit& editor() const;
 
     DialpadButton& backspaceButton() const;
 
+    void updateLayout(Qt::Orientation orientation);
+
 protected:
     QSizeF sizeHint(Qt::SizeHint which,
                     const QSizeF & constraint = QSizeF()) const;
@@ -44,9 +48,10 @@
     void onEditorContentChanged();
 
 private:
+    const HbMainWindow& mMainWindow;
     HbLineEdit* mNumberEditor;
     DialpadButton* mBackspace;
-    int mHeight;
+    qreal mHeight;
 };
 
 #endif // DIALPADINPUTFIELD_H
--- a/telutils/dialpad/inc/dialpadkeypad.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/inc/dialpadkeypad.h	Fri Sep 17 08:33:29 2010 +0300
@@ -11,24 +11,21 @@
 *
 * Contributors:
 *
-* Description: Dialpad keypad
+* Description: Number grid and dial key.
 *
 */
 
 #ifndef DIALPADKEYPAD_H
 #define DIALPADKEYPAD_H
 
-#include <QTextLayout>
-#include <QColor>
-#include <hbinputbuttongroup.h>
+#include <hbwidget.h>
 
 class DialpadInputField;
 class DialpadButton;
-class DialpadNumericButton;
+class DialpadNumericButtonGrid;
 class QSignalMapper;
-class QGraphicsGridLayout;
 
-class DialpadKeypad : public HbInputButtonGroup
+class DialpadKeypad : public HbWidget
 {
     Q_OBJECT
 
@@ -41,71 +38,34 @@
     ~DialpadKeypad();
 
 public:
+    bool isCallButtonEnabled() const;
+
     void setCallButtonEnabled(bool enabled);
 
     void resetButtons();
 
-    DialpadButton& callButton() const;
-
 protected slots:
-    void setButtonTexts();
-
     void handleKeyClicked(int key);
     void sendKeyPressEvent(const QKeyEvent& event);
     void sendKeyReleaseEvent(const QKeyEvent& event);
     void sendLongPressEvent(const QKeyEvent& event);
     void handleKeyChangeEvent(const QKeyEvent& releaseEvent,
                               const QKeyEvent& pressEvent);
-    void cancelButtonPress();
 
 protected:
     void postKeyEvent(QEvent::Type type, int key);
     void sendKeyEventToEditor(QEvent::Type type, int key);
 
-    inline DialpadNumericButton* button(int i) const;
-    void updateButtonLabels();
-    void updateColorArray();
-    void updateIconColor();
-    void updateTextLayouts(const QSizeF &size);
-    void resolveTextContent(QList<QString> &content);
-    void createTextLayouts(const QSizeF &size,
-                           const QList<QString> &content);
-    void layoutTextLines(const QSizeF &size,
-                         QTextLayout &textLayout,
-                         int state,
-                         int type);
-
 protected:
-    void paint(QPainter* painter,
-               const QStyleOptionGraphicsItem* option,
-               QWidget* widget);
     void setGeometry(const QRectF &rect);
-    void changeEvent(QEvent *event);
-
-private:
-    enum ButtonState {
-        Normal = 0,
-        Pressed,
-        StateCount
-    };
-
-    enum TextType {
-        PrimaryText = 0,
-        SecondaryText,
-        TextTypeCount
-    };
 
 private:
     const HbMainWindow& mMainWindow;
     DialpadInputField& mInputField;
     QSignalMapper* mKeyClickedSignalMapper;
-    QMap<int,QChar> mGeneratedChar;
     int mPressedNumericKey;
     DialpadButton* mCallButton;
-    QList<QColor> mColors;
-    QList<QTextLayout*> mTextLayouts;
-    qreal mUnit;
-    qreal mMaxPrimaryLineWidth;
+    DialpadNumericButtonGrid* mNumericButtonGrid;
 };
 
 #endif // DIALPADKEYPAD_H
--- a/telutils/dialpad/inc/dialpadnumericbutton.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/inc/dialpadnumericbutton.h	Fri Sep 17 08:33:29 2010 +0300
@@ -38,10 +38,14 @@
     void setSecondaryText(const QString& text);
     QString secondaryText() const;
 
+    void setSecondary2ndRowText(const QString& text);
+    QString secondary2ndRowText() const;
+
 private:
     HbIcon mIcon;
     QString mText;
     QString mSecondaryText;
+    QString mSecondaryTextRow2;
 };
 
 #endif // DIALPADNUMERICBUTTON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/inc/dialpadnumericbuttongrid.h	Fri Sep 17 08:33:29 2010 +0300
@@ -0,0 +1,109 @@
+/*!
+* 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: Implements grid of numeric buttons
+*
+*/
+
+#ifndef DIALPADNUMERICBUTTONGRID_H
+#define DIALPADNUMERICBUTTONGRID_H
+
+#include <QTextLayout>
+#include <QColor>
+#include <hbinputbuttongroup.h>
+
+class DialpadNumericButton;
+
+class DialpadNumericButtonGrid : public HbInputButtonGroup
+{
+    Q_OBJECT
+
+public:
+    explicit DialpadNumericButtonGrid(
+        const HbMainWindow& mainWindow,
+        QGraphicsItem* parent=0);
+
+    ~DialpadNumericButtonGrid();
+
+public:
+    void resetButtons();
+
+    QChar inputCharacter(int keyCode) const;
+
+protected slots:
+    void setButtonTexts();
+    void updateButtonLabels();
+    void cancelButtonPress();
+
+protected:
+    inline DialpadNumericButton* button(int i) const;
+    void updateColorArray();
+    void updateIconColor();
+    void updateTextLayouts(const QSizeF &size);
+    void resolveTextContent(QList<QString> &content, bool& useTwoRows);
+    void createTextLayouts(const QSizeF &size,
+                           const QList<QString> &content,
+                           bool useTwoRows);
+    void layoutTextLines(const QSizeF &size,
+                         QTextLayout &textLayout,
+                         int state,
+                         int type,
+                         bool useTwoRows);
+    inline void layoutPrimaryText(
+        QTextLayout& layout,
+        DialpadNumericButton& button,
+        qreal cellWidth,
+        qreal cellHeight,
+        qreal textHeight) const;
+    inline void layoutSecondaryText(
+        QTextLayout& layout,
+        DialpadNumericButton& button,
+        qreal cellWidth,
+        qreal cellHeight,
+        qreal textHeight,
+        qreal textDescent,
+        bool useTwoRows) const;
+    bool isButtonPressed() const;
+    void updateIconSizes();
+
+protected:
+    void paint(QPainter* painter,
+               const QStyleOptionGraphicsItem* option,
+               QWidget* widget);
+    void setGeometry(const QRectF &rect);
+    void changeEvent(QEvent *event);
+
+private:
+    enum ButtonState {
+        Normal = 0,
+        Pressed,
+        StateCount
+    };
+
+    enum TextType {
+        PrimaryText = 0,
+        SecondaryText,
+        TextTypeCount
+    };
+
+private:
+    const HbMainWindow& mMainWindow;
+    QList<QColor> mColors;
+    QList<QTextLayout*> mTextLayouts;
+    qreal mUnit;
+    qreal mMaxPrimaryLineWidth;
+    qreal mPrimaryTextBaseline;
+    QMap<int,QChar> mGeneratedChar;
+};
+
+#endif // DIALPADNUMERICBUTTONGRID_H
--- a/telutils/dialpad/resources/dialpad.css	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/resources/dialpad.css	Fri Sep 17 08:33:29 2010 +0300
@@ -14,7 +14,7 @@
 DialpadInputField > HbLineEdit::text{
     left: -var(hb-param-margin-gene-middle-horizontal);
     right: var(hb-param-margin-gene-middle-horizontal);
-    top: -var(hb-param-margin-gene-middle-vertical);
-    bottom: var(hb-param-margin-gene-middle-vertical);
+    top: -0.3un;
+    bottom: 0.3un;
 }
 
--- a/telutils/dialpad/src/dialpad.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/src/dialpad.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -37,17 +37,15 @@
 #include "dialpadbackground.h"
 #include "dialpadbutton.h"
 
-static const QLatin1String backgroundGraphics("qtg_fr_input_v_bg");
+static const QLatin1String backgroundGraphicsV("qtg_fr_input_v_bg");
 static const QLatin1String backgroundGraphicsH("qtg_fr_input_h_bg");
-static const QLatin1String minimizeIcon("qtg_graf_input_v_swipe");
+static const QLatin1String minimizeIconV("qtg_graf_input_v_swipe");
 static const QLatin1String minimizeIconH("qtg_graf_input_h_swipe");
 static const int DialpadCloseAnimDuration = 200; // ms
 static const int DialpadOpenAnimDuration = 200; // ms
 static const qreal DialpadComponentMargin = 0.75; // units
 static const qreal DialpadCloseHandleHeight = 2.23; // units
 static const qreal DialpadCloseHandleWidth = 18.8; // units
-static const qreal DialpadCallButtonHeight = 8.75; // units, same as numeric buttons
-static const qreal DialpadCallButtonHeightH = 7.25; // units
 
 static const QLatin1String handsetIcon("qtg_mono_call");
 static const QLatin1String vmbxIcon("qtg_mono_voice_mailbox");
@@ -84,25 +82,23 @@
 
 void Dialpad::initialize()
 {
+    setObjectName(QLatin1String("dialpad"));
     setFocusPolicy(Qt::StrongFocus);
     setFlag(QGraphicsItem::ItemIsFocusable,true);
     setFlag(QGraphicsItem::ItemHasNoContents, false);
 
     // create input field
-    mInputField = new DialpadInputField(this);
+    mInputField = new DialpadInputField(mMainWindow,this);
 
     // create keypad
     mKeypad = new DialpadKeypad(mMainWindow,*mInputField,this);
 
     // layouting params
-    qreal unit = HbDeviceProfile::current().unitValue();
+    qreal unit = HbDeviceProfile::profile(&mMainWindow).unitValue();
     qreal margin = DialpadComponentMargin * unit;
     mCloseHandleHeight = DialpadCloseHandleHeight * unit;
     mCloseHandleWidth = DialpadCloseHandleWidth * unit;
 
-    mKeypad->callButton().setPreferredHeight(DialpadCallButtonHeight*unit);
-    mKeypad->callButton().setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-
     // create popup background
     mBackgroundDrawer = new HbFrameDrawer();
     mIconDrawer = new HbFrameDrawer();
@@ -112,7 +108,6 @@
         new QGraphicsLinearLayout(Qt::Vertical);
     popupLayout->addItem(mInputField);
     popupLayout->addItem(mKeypad);
-    popupLayout->addItem(&mKeypad->callButton());
     popupLayout->setContentsMargins(margin, mCloseHandleHeight, margin, margin);
     popupLayout->setSpacing(0);
     popupLayout->setItemSpacing(0,margin);
@@ -179,8 +174,8 @@
 
     // paint popup background
     if ( mOrientation == Qt::Vertical ) {
-        mBackgroundDrawer->setFrameGraphicsName(backgroundGraphics);
-        mIconDrawer->setFrameGraphicsName(minimizeIcon);
+        mBackgroundDrawer->setFrameGraphicsName(backgroundGraphicsV);
+        mIconDrawer->setFrameGraphicsName(minimizeIconV);
         mBackgroundDrawer->setFrameType(HbFrameDrawer::ThreePiecesVertical);
         mBackgroundDrawer->setBorderWidths(0.0, mCloseHandleHeight, 0.0, 0.0);
     } else {
@@ -227,7 +222,7 @@
 
 bool Dialpad::isCallButtonEnabled() const
 {
-    return mKeypad->callButton().isEnabled();
+    return mKeypad->isCallButtonEnabled();
 }
 
 void Dialpad::openDialpad()
@@ -258,6 +253,7 @@
 
     if (mOrientation!=previousOrientation) {
         updateLayout((Qt::Orientation)mOrientation);
+        mInputField->updateLayout((Qt::Orientation)mOrientation);
     }
 
     show();
@@ -410,6 +406,7 @@
 void Dialpad::orientationChangeFinished(Qt::Orientation current)
 {
     updateLayout(current);
+    mInputField->updateLayout(current);
 
     show();
 
@@ -441,7 +438,7 @@
 {
     Q_ASSERT(layout());
 
-    qreal unit = HbDeviceProfile::current().unitValue();
+    qreal unit = HbDeviceProfile::profile(&mMainWindow).unitValue();
     qreal margin = DialpadComponentMargin * unit;
 
     QGraphicsLinearLayout* mainLayout =
@@ -453,13 +450,11 @@
                                        mCloseHandleHeight,
                                        margin,
                                        margin);
-        mKeypad->callButton().setPreferredHeight(DialpadCallButtonHeight*unit);
     } else {
         mainLayout->setContentsMargins(mCloseHandleHeight,
                                        margin,
                                        margin,
                                        margin);
-        mKeypad->callButton().setPreferredHeight(DialpadCallButtonHeightH*unit);
     }
 }
 
--- a/telutils/dialpad/src/dialpadinputfield.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/src/dialpadinputfield.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -21,6 +21,7 @@
 #include <hbinputeditorinterface.h>
 #include <hbinputstandardfilters.h>
 #include <hbdeviceprofile.h>
+#include <hbmainwindow.h>
 
 #include "dialpadinputfield.h"
 #include "dialpadbutton.h"
@@ -29,15 +30,21 @@
 static const int DialpadAutoRepeatInterval = 150; // ms
 static const int DialpadAutoRepeatDelay = 1000; // ms
 static const qreal DialpadComponentMargin = 0.75; // units
-static const qreal DialpadBackspaceWidth = 9.4; // units
-static const qreal DialpadInputFieldHeight = 6.3; // units
+static const qreal DialpadBackspaceWidthV = 9.8; // units
+static const qreal DialpadBackspaceWidthH = 8.6; // units
+static const qreal DialpadInputFieldHeightV = 7.2; // units
+static const qreal DialpadInputFieldHeightH = 6.6; // units
 static const int DialpadMaxEditStringLenght = 100;
 
-DialpadInputField::DialpadInputField(QGraphicsItem* parent)
-    : HbWidget(parent)
+DialpadInputField::DialpadInputField(
+    const HbMainWindow& mainWindow,
+    QGraphicsItem* parent)
+    : HbWidget(parent),
+      mMainWindow(mainWindow)
 {
     // create editor
     mNumberEditor = new HbLineEdit(this);
+    mNumberEditor->setObjectName(QLatin1String("numberEdit"));
     HbEditorInterface editorInterface(mNumberEditor);
     editorInterface.setFilter(HbPhoneNumberFilter::instance());
     editorInterface.setInputConstraints(HbEditorConstraintIgnoreFocus);
@@ -45,37 +52,32 @@
     mNumberEditor->setMinRows(1);
     mNumberEditor->setMaxRows(1);    
     mNumberEditor->setAdjustFontSizeToFitHeight(true);
+    mNumberEditor->setFontSpec(HbFontSpec(HbFontSpec::Primary));
 
     // create backspace button
     mBackspace = new DialpadButton(this);
+    mBackspace->setObjectName(QLatin1String("backspaceButton"));
     mBackspace->setButtonType(DialpadButton::FunctionButton); // for css
     mBackspace->setFocusPolicy(Qt::NoFocus);
     mBackspace->setFlag(QGraphicsItem::ItemIsFocusable,false);
     mBackspace->setIcon(HbIcon(HbBackspaceIcon));
     mBackspace->setEnabled(false);
-    QString buttonName;
-    buttonName.setNum(Qt::Key_Backspace);
-    mBackspace->setObjectName(buttonName);
     mBackspace->setAutoRepeat(true);
     mBackspace->setAutoRepeatInterval(DialpadAutoRepeatInterval);
     mBackspace->setAutoRepeatDelay(DialpadAutoRepeatDelay);
+    mBackspace->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
 
     connect(mNumberEditor,SIGNAL(contentsChanged()),
             SLOT(onEditorContentChanged()));
 
     // set input field layout
-    qreal unit = HbDeviceProfile::current().unitValue();
-    mHeight = (int) DialpadInputFieldHeight * unit;
     QGraphicsLinearLayout* layout = new QGraphicsLinearLayout;
     layout->addItem(mNumberEditor);
     layout->setAlignment(mNumberEditor,Qt::AlignVCenter);
     layout->addItem(mBackspace);
     layout->setContentsMargins(0,0,0,0);
-    layout->setSpacing(DialpadComponentMargin* unit);
-    // layout parameters
-    mBackspace->setPreferredWidth(DialpadBackspaceWidth * unit);
-    mBackspace->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
     setLayout(layout);
+    updateLayout(mMainWindow.orientation());
 }
 
 DialpadInputField::~DialpadInputField()
@@ -92,6 +94,26 @@
     return *mBackspace;
 }
 
+void DialpadInputField::updateLayout(Qt::Orientation orientation)
+{
+    Q_ASSERT(layout());
+
+    qreal unit = HbDeviceProfile::profile(&mMainWindow).unitValue();
+
+    QGraphicsLinearLayout* mainLayout =
+        static_cast<QGraphicsLinearLayout*>(layout());
+
+    mainLayout->setSpacing(DialpadComponentMargin* unit);
+
+    if (orientation==Qt::Vertical) {
+        mHeight = DialpadInputFieldHeightV * unit;
+        mBackspace->setPreferredWidth(DialpadBackspaceWidthV * unit);
+    } else {
+        mHeight = DialpadInputFieldHeightH * unit;
+        mBackspace->setPreferredWidth(DialpadBackspaceWidthH * unit);
+    }
+}
+
 void DialpadInputField::onEditorContentChanged()
 {
     mBackspace->setEnabled(mNumberEditor->text().length());
--- a/telutils/dialpad/src/dialpadkeypad.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/src/dialpadkeypad.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -11,61 +11,34 @@
 *
 * Contributors:
 *
-* Description: Dialpad keypad
+* Description: Number grid and dial key.
 *
 */
 
-#include <QLocale>
 #include <QSignalMapper>
 
-#include <hbinstance.h>
-#include <hbinputkeymapfactory.h>
-#include <hbinputkeymap.h>
-#include <hbinpututils.h>
-#include <hbinputsettingproxy.h>
-#include <hbinputlanguage.h>
 #include <hbapplication.h>
-#include <hbcolorscheme.h>
 #include <hblineedit.h>
-#include <hbfontspec.h>
 #include <hbevent.h>
+#include <hbmainwindow.h>
 
 #include "dialpadnumericbutton.h"
 #include "dialpadkeypad.h"
 #include "dialpadbutton.h"
 #include "dialpadinputfield.h"
+#include "dialpadnumericbuttongrid.h"
 
-static const int DialpadRowCount = 4;
-static const int DialpadColumnCount = 3;
+static const int DialpadKeypadRowCount = 5;
 static const QLatin1String handsetIcon("qtg_mono_call");
-static const QLatin1String vmbxIcon("qtg_mono_voice_mailbox");
-// layout values in units
-static const qreal DialpadPrimaryTextSize = 5.5;
-static const qreal DialpadSecondaryTextSize = 4.0;
-static const qreal DialpadIconSize = 4.0;
-static const qreal DialpadPrimaryTextLeftMargin  = 1.5;
-static const qreal DialpadPrimarySecondaryMargin  = 0.75;
-
-static const int DialpadKeyCodeTable[DialpadRowCount*DialpadColumnCount] =
-{
-    Qt::Key_1,        Qt::Key_2,      Qt::Key_3,
-    Qt::Key_4,        Qt::Key_5,      Qt::Key_6,
-    Qt::Key_7,        Qt::Key_8,      Qt::Key_9,
-    Qt::Key_Asterisk, Qt::Key_0,      Qt::Key_NumberSign
-    // Qt::Key_Yes and Qt::Key_BackSpace are handled separately
-};
 
 DialpadKeypad::DialpadKeypad(
     const HbMainWindow& mainWindow,
     DialpadInputField& inputField,
     QGraphicsItem* parent) :
-    HbInputButtonGroup(parent),
+    HbWidget(parent),
     mMainWindow(mainWindow),
-    mInputField(inputField),
-    mMaxPrimaryLineWidth(0)
+    mInputField(inputField)
 {
-    setObjectName("keypad");
-
     // create clicked signal mapper
     mKeyClickedSignalMapper = new QSignalMapper(this);
     connect(mKeyClickedSignalMapper,SIGNAL(mapped(int)),
@@ -77,42 +50,11 @@
     mKeyClickedSignalMapper->setMapping(&mInputField.backspaceButton(),
                                         Qt::Key_Backspace);
 
-    // create keypad
-    setGridSize(QSize(DialpadColumnCount, DialpadRowCount));
-    setButtonBorderSize(0);    
-
-    QList<HbInputButton*> buttons;
-
-    for (int i = 0; i < DialpadRowCount * DialpadColumnCount; ++i) {
-        DialpadNumericButton *item = new DialpadNumericButton(
-            DialpadKeyCodeTable[i],
-            QPoint(i % DialpadColumnCount, i / DialpadColumnCount));
-        buttons.append(item);
-
-        item->setType(HbInputButton::ButtonTypeNormal);
-    }
-
-    setButtons(buttons);
-
-    // connect keypad signals
-    QObject::connect(this, SIGNAL(buttonPressed(const QKeyEvent&)),
-                     this, SLOT(sendKeyPressEvent(const QKeyEvent&)));
-    QObject::connect(this, SIGNAL(buttonReleased(const QKeyEvent&)),
-                     this, SLOT(sendKeyReleaseEvent(const QKeyEvent&)));
-    QObject::connect(this, SIGNAL(buttonLongPressed(const QKeyEvent&)),
-                     this, SLOT(sendLongPressEvent(const QKeyEvent&)));
-    QObject::connect(this, SIGNAL(pressedButtonChanged(const QKeyEvent&,
-                                                       const QKeyEvent&)),
-                     this, SLOT(handleKeyChangeEvent(const QKeyEvent&,
-                                                     const QKeyEvent&)));
-
-    // create call button (parent layouts this)
-    mCallButton = new DialpadButton(parent);
+    // create call button
+    mCallButton = new DialpadButton(this);
+    mCallButton->setObjectName("callButton");
     mCallButton->setButtonType(DialpadButton::CallButton);
     mCallButton->setIcon(HbIcon(handsetIcon));
-    QString buttonName;
-    buttonName.setNum(Qt::Key_Yes);
-    mCallButton->setObjectName(buttonName);
     connect(mCallButton,SIGNAL(clicked()),
             mKeyClickedSignalMapper,SLOT(map()));
     connect(mCallButton,SIGNAL(longPress(QPointF)),
@@ -120,93 +62,42 @@
     mKeyClickedSignalMapper->setMapping(mCallButton,
                                         Qt::Key_Yes);
 
-    // set button texts
-    setButtonTexts();
-    // set button icons
-    button(0)->setIcon(HbIcon(vmbxIcon));
-
-    // update button texts when input language is changed
-    connect(HbInputSettingProxy::instance(),
-            SIGNAL(globalInputLanguageChanged(HbInputLanguage)),
-            this,SLOT(setButtonTexts()));
-
-    updateColorArray();
-
-    mUnit = HbDeviceProfile::profile(this).unitValue();
+    // create numeric button grid
+    mNumericButtonGrid = new DialpadNumericButtonGrid(mMainWindow,this);
+    QObject::connect(mNumericButtonGrid,
+                     SIGNAL(buttonPressed(const QKeyEvent&)),
+                     this, SLOT(sendKeyPressEvent(const QKeyEvent&)));
+    QObject::connect(mNumericButtonGrid,
+                     SIGNAL(buttonReleased(const QKeyEvent&)),
+                     this, SLOT(sendKeyReleaseEvent(const QKeyEvent&)));
+    QObject::connect(mNumericButtonGrid,
+                     SIGNAL(buttonLongPressed(const QKeyEvent&)),
+                     this, SLOT(sendLongPressEvent(const QKeyEvent&)));
+    QObject::connect(mNumericButtonGrid,
+                     SIGNAL(pressedButtonChanged(const QKeyEvent&,
+                                                 const QKeyEvent&)),
+                     this, SLOT(handleKeyChangeEvent(const QKeyEvent&,
+                                                     const QKeyEvent&)));
 }
 
 DialpadKeypad::~DialpadKeypad()
 {
 }
 
-void DialpadKeypad::setButtonTexts()
+bool DialpadKeypad::isCallButtonEnabled() const
 {
-    HbInputLanguage inputLanguage =
-        HbInputSettingProxy::instance()->globalInputLanguage();
-    const HbKeymap *keymap =
-        HbKeymapFactory::instance()->keymap(inputLanguage.language());
-
-    mGeneratedChar.clear();
-
-    if (keymap) {
-        int buttonCount = (DialpadRowCount*DialpadColumnCount);
-        for (int i = 0; i < buttonCount; i++) {
-            int keyCode = DialpadKeyCodeTable[i];
-
-            if (keyCode == Qt::Key_Asterisk) {
-                // asterisk is not localized
-                QChar asterisk('*');
-                button(i)->setText(asterisk);
-                button(i)->setSecondaryText(QLatin1String("+"));
-                mGeneratedChar.insert(Qt::Key_Asterisk, asterisk);
-                continue;
-            }
-
-            if (keyCode == Qt::Key_NumberSign) {
-                // number sign is not localized
-                QChar numberSign('#');
-                button(i)->setText(numberSign);
-                mGeneratedChar.insert(Qt::Key_NumberSign, numberSign);
-                continue;
-            }
+    return mCallButton->isEnabled();
+}
 
-            int index = i;
-            if (keyCode==Qt::Key_0) {
-                index = i-1;
-            }
-
-            const HbMappedKey *key =
-                keymap->keyForIndex(HbKeyboardVirtual12Key, index);
-
-            if (key) {
-                QChar numberChar =
-                    HbInputUtils::findFirstNumberCharacterBoundToKey(
-                        key,
-                        inputLanguage.language(),
-                        HbInputUtils::inputDigitType(inputLanguage.language()));
-
-                // button text
-                button(i)->setText(numberChar);
-                mGeneratedChar.insert(keyCode,numberChar);
+void DialpadKeypad::setCallButtonEnabled(bool enabled)
+{
+    mCallButton->setEnabled(enabled);
+}
 
-                // additional text (letters)
-                int numberOfCharacters;
-                if (keyCode==Qt::Key_7 || keyCode == Qt::Key_9) {
-                    numberOfCharacters = 4;
-                } else if (keyCode==Qt::Key_0||keyCode==Qt::Key_1) {
-                    numberOfCharacters = 0;
-                } else {
-                    numberOfCharacters = 3;
-                }
-
-                QString characters = key->characters(HbModifierNone);
-
-                if (numberOfCharacters!=0 && keyCode!=Qt::Key_1) {
-                    button(i)->setSecondaryText(characters.left(numberOfCharacters));
-                }
-            }
-        }
-    }
+void DialpadKeypad::resetButtons()
+{
+    mNumericButtonGrid->resetButtons();
+    mCallButton->setDown(false);
 }
 
 void DialpadKeypad::handleKeyClicked(int key)
@@ -226,21 +117,19 @@
 void DialpadKeypad::sendKeyEventToEditor(QEvent::Type type, int key)
 {
     // send key event to editor
-    QKeyEvent keyEvent(type, key, Qt::NoModifier, mGeneratedChar.value(key));
+    QKeyEvent keyEvent(type, key, Qt::NoModifier,
+                       mNumericButtonGrid->inputCharacter(key));
     HbApplication::sendEvent(&mInputField.editor(), &keyEvent);
 }
 
 void DialpadKeypad::sendKeyPressEvent(const QKeyEvent& event)
 {
-    updateButtonLabels();
     mPressedNumericKey = event.key();
     postKeyEvent(QEvent::KeyPress, event.key());
 }
 
 void DialpadKeypad::sendKeyReleaseEvent(const QKeyEvent& event)
 {
-    updateButtonLabels();
-
     if (mPressedNumericKey) {
         // short press, update editor here
         sendKeyEventToEditor(QEvent::KeyPress, event.key());
@@ -262,316 +151,21 @@
     Q_UNUSED(pressEvent)
 
     postKeyEvent(QEvent::KeyRelease, releaseEvent.key());
-    cancelButtonPress();
-}
-
-void DialpadKeypad::setCallButtonEnabled(bool enabled)
-{
-    mCallButton->setEnabled(enabled);
-}
-
-void DialpadKeypad::resetButtons()
-{
-    cancelButtonPress();
-    mCallButton->setDown(false);
-}
-
-DialpadButton& DialpadKeypad::callButton() const
-{
-    return *mCallButton;
-}
-
-DialpadNumericButton* DialpadKeypad::button(int i) const
-{
-    return static_cast<DialpadNumericButton*>(HbInputButtonGroup::button(i));
-}
-
-void DialpadKeypad::updateButtonLabels()
-{
-    // update numeric buttons according to button state (pressed/released)
-    updateIconColor();
-    updateTextLayouts(rect().size());
-}
-
-void DialpadKeypad::paint(
-    QPainter* painter,
-    const QStyleOptionGraphicsItem* option,
-    QWidget* widget)
-{
-    Q_UNUSED(option);
-    Q_UNUSED(widget);
-
-    // Paints empty buttons
-    HbInputButtonGroup::paint(painter,option,widget);
-
-    qreal cellWidth = boundingRect().width() / gridSize().width();
-    qreal cellHeight = boundingRect().height() / gridSize().height();
-
-    // Draw icons
-    for (int i = 0; i < DialpadRowCount * DialpadColumnCount; i++) {
-        DialpadNumericButton *item = button(i);
-
-        if (!item->icon().isNull()) {
-            // icon is centered to button
-            qreal x = (item->position().x() * cellWidth) + (cellWidth / 2) -
-                      ((DialpadIconSize * mUnit) / 2);
-            qreal y = (item->position().y() * cellHeight) +  (cellHeight / 2) -
-                      ((DialpadIconSize * mUnit) / 2);
-
-            qreal width = DialpadIconSize * mUnit;
-            qreal height = DialpadIconSize * mUnit;
-
-            Qt::Alignment alignment =
-                static_cast<Qt::Alignment>(Qt::AlignVCenter | Qt::AlignHCenter);
-            item->icon().paint(painter,
-                               QRectF(x,y,width,height),
-                               Qt::KeepAspectRatio,
-                               alignment);
-        }                      
-    }
-
-    // Draw texts
-    QPen origPen = painter->pen();
-    for (int i = 0; i < mTextLayouts.count(); ++i) {
-        if (i==SecondaryText) {
-            // dimmed in normal state
-            painter->setPen(mColors.at(Pressed+1));
-        } else {
-            // otherwise normal or pressed color
-            painter->setPen(mColors.at(i/TextTypeCount));
-        }
-        mTextLayouts.at(i)->draw(painter, QPointF(0, 0));
-    }
-    painter->setPen(origPen);
-}
-
-void DialpadKeypad::updateColorArray()
-{
-    mColors.clear();
-
-    QColor normalColor = HbColorScheme::color("qtc_input_button_normal");
-    mColors.insert(Normal, normalColor);
-
-    QColor pressedColor = HbColorScheme::color("qtc_input_button_pressed");
-    mColors.insert(Pressed, pressedColor);
-
-    // this is used for alphabets shown dimmed, use alpha until exact color
-    // is specified
-    QColor disabledColor = HbColorScheme::color("qtc_input_button_normal");
-    disabledColor.setAlpha(128);
-    mColors.insert(Pressed+1, disabledColor);
-}
-
-void DialpadKeypad::updateIconColor()
-{
-    for (int i = 0; i < (DialpadRowCount * DialpadColumnCount); i++) {
-        DialpadNumericButton *item = button(i);
-
-        if (item->state()==HbInputButton::ButtonStatePressed) {
-            item->icon().setColor(mColors.at(Pressed));
-        } else {
-            item->icon().setColor(mColors.at(Normal));
-        }
-    }
-}
-
-void DialpadKeypad::cancelButtonPress()
-{
-    HbInputButtonGroup::cancelButtonPress();
-    updateButtonLabels();
+    mNumericButtonGrid->resetButtons();
 }
 
 void DialpadKeypad::setGeometry(const QRectF &rect)
 {
-    HbInputButtonGroup::setGeometry(rect);
-    updateTextLayouts(rect.size());
-}
-
-void DialpadKeypad::changeEvent(QEvent *event)
-{
-    HbInputButtonGroup::changeEvent(event);
-
-    if (event->type() == HbEvent::ThemeChanged) {
-        updateColorArray();
-        updateIconColor();
-    }
-}
-
-void DialpadKeypad::updateTextLayouts(const QSizeF &size)
-{
-    if (!size.width() && !size.height()) {
-        return;
-    }
-
-    // get normal and pressed state texts
-    QList<QString> textContent;
-    resolveTextContent(textContent);
-
-    // layout the texts
-    createTextLayouts(size, textContent);
-}
-
-void DialpadKeypad::resolveTextContent(QList<QString> &content)
-{
-    QString normalState;
-    QString normalStateSecondary;
-    QString pressedState;
-    QString pressedStateSecondary;
-
-    for (int i = 0; i < (DialpadRowCount*DialpadColumnCount); i++) {
-        DialpadNumericButton *item = button(i);
-        if (item->state()==HbInputButton::ButtonStatePressed) {
-            if (item->text().length()) {
-                pressedState.append(item->text());
-                pressedState.append(QChar(QChar::LineSeparator));
-            }
+    HbWidget::setGeometry(rect);
 
-            if (item->secondaryText().length()) {
-                pressedStateSecondary.append(item->secondaryText());
-                pressedStateSecondary.append(QChar(QChar::LineSeparator));
-            }
-        } else { // ButtonStateNormal
-            if (item->text().length()) {
-                normalState.append(item->text());
-                normalState.append(QChar(QChar::LineSeparator));
-            }
-
-            if (item->secondaryText().length()) {
-                normalStateSecondary.append(item->secondaryText());
-                normalStateSecondary.append(QChar(QChar::LineSeparator));
-            }
-        }
-    }
-
-    content.insert(PrimaryText, normalState);
-    content.insert(SecondaryText, normalStateSecondary);
-    content.insert(TextTypeCount + Pressed, pressedState);
-    content.insert(StateCount + SecondaryText, pressedStateSecondary);
-}
-
-void DialpadKeypad::createTextLayouts(
-    const QSizeF &size, const QList<QString> &content)
-{
-    // clear old layouts
-    qDeleteAll(mTextLayouts);
-    mTextLayouts.clear();
-
-    if (content.count()==2) {
-        // line width is measured only when all buttons are in normal state
-        mMaxPrimaryLineWidth = 0;
-    }
-
-    QFont primaryfFont = HbFontSpec(HbFontSpec::Primary).font();
-    primaryfFont.setPixelSize(DialpadPrimaryTextSize * mUnit);
-
-    QFont secondaryFont = HbFontSpec(HbFontSpec::Secondary).font();
-    secondaryFont.setPixelSize(DialpadSecondaryTextSize * mUnit);
-
-    for (int i=0; i < (StateCount*TextTypeCount); i++ ) {
-        QString text = content.at(i);
-
-        if (!text.isNull()) {
-            QTextLayout* textLayout;
-            int type;
+    // make button heights uniform
+    qreal buttonHeight = rect.height()/DialpadKeypadRowCount;
 
-            if (i%TextTypeCount) {
-                textLayout = new QTextLayout(text,secondaryFont);
-                type = SecondaryText;
-            } else {
-                textLayout = new QTextLayout(text,primaryfFont);
-                type = PrimaryText;
-            }
-
-            mTextLayouts.append(textLayout);
-
-            textLayout->beginLayout();
-
-            int state = (i>=TextTypeCount) ? Pressed : Normal;
-
-            layoutTextLines(size,*textLayout,state,type);
-
-            textLayout->endLayout();
-
-            textLayout->setCacheEnabled(true);
-        }
-    }
-}
-
-void DialpadKeypad::layoutTextLines(
-    const QSizeF &size,
-    QTextLayout &textLayout,
-    int state,
-    int type)
-{
-    QFontMetricsF fontMetrics(textLayout.font());
-    qreal textHeight = fontMetrics.height();
-
-    qreal cellWidth = size.width() / gridSize().width();
-    qreal cellHeight = size.height() / gridSize().height();
-    qreal maxLineWidth = 0;
-
-    for (int j = 0; j < (DialpadRowCount*DialpadColumnCount); j++) {
-        DialpadNumericButton *item = button(j);
-
-        if ((type==PrimaryText && item->text().isNull()) ||
-            (type==SecondaryText && item->secondaryText().isNull())) {
-            continue; // no text for this button -> next button
-        }
-
-        if ( ( state==Normal &&
-               item->state()==HbInputButton::ButtonStateReleased ) ||
-             ( state==Pressed &&
-               item->state()==HbInputButton::ButtonStatePressed ) ) {
-
-            QTextLine line = textLayout.createLine();
+    mNumericButtonGrid->setPos(QPointF(0,0));
+    QSizeF gridSize(rect.size());
+    gridSize.setHeight(gridSize.height()-buttonHeight);
+    mNumericButtonGrid->resize(gridSize);
 
-            qreal textPositionX = 0;
-            qreal textPositionY = 0;
-
-            if (line.isValid()) {
-                line.setNumColumns(item->text().length());
-                // layout text line
-                if (type==SecondaryText) {
-                    if (j==9) {
-                        // + is centered to button
-                        qreal lineWidth = fontMetrics.width(item->text());
-                        textPositionX = (item->position().x() * cellWidth) +
-                                        (cellWidth / 2) -
-                                        (lineWidth / 2);
-                        textPositionY = (item->position().y() +
-                                        (0.5 * item->size().height())) *
-                                        cellHeight - (0.5 * textHeight);
-
-                    } else {
-                        textPositionX = (item->position().x() * cellWidth) +
-                                        (DialpadPrimaryTextLeftMargin * mUnit) +
-                                        mMaxPrimaryLineWidth +
-                                        (DialpadPrimarySecondaryMargin * mUnit)
-                                        + buttonBorderSize();
-                        textPositionY = (item->position().y() +
-                                        (0.5 * item->size().height())) *
-                                        cellHeight - (0.5 * textHeight);
-                    }                    
-                } else {
-                    textPositionX = (item->position().x() * cellWidth) +
-                                    (DialpadPrimaryTextLeftMargin * mUnit)
-                                    + buttonBorderSize();
-                    textPositionY = (item->position().y() +
-                                    (0.5 * item->size().height())) *
-                                    cellHeight - (0.5 * textHeight);
-
-                    // store line width, for drawing secondary text
-                    qreal lineWidth = fontMetrics.width(item->text());
-                    if (mMaxPrimaryLineWidth == 0 && (j>0 && j<10) &&
-                        lineWidth > maxLineWidth) {
-                        maxLineWidth = lineWidth;
-                    }
-                }
-            }
-
-            line.setPosition(QPointF(textPositionX, textPositionY));
-        }
-    }
-
-    mMaxPrimaryLineWidth = maxLineWidth;
+    mCallButton->setPos(QPointF(0,gridSize.height()));
+    mCallButton->resize(rect.width(),buttonHeight);
 }
--- a/telutils/dialpad/src/dialpadnumericbutton.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/src/dialpadnumericbutton.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -57,3 +57,13 @@
 {
     return mSecondaryText;
 }
+
+void DialpadNumericButton::setSecondary2ndRowText(const QString& text)
+{
+    mSecondaryTextRow2 = text;
+}
+
+QString DialpadNumericButton::secondary2ndRowText() const
+{
+    return mSecondaryTextRow2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/dialpad/src/dialpadnumericbuttongrid.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -0,0 +1,594 @@
+/*!
+* 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: Implements grid of numeric buttons
+*
+*/
+
+#include <QPainter>
+
+#include <hbmainwindow.h>
+#include <hbcolorscheme.h>
+#include <hbevent.h>
+#include <hbinputkeymapfactory.h>
+#include <hbinputkeymap.h>
+#include <hbinpututils.h>
+#include <hbinputsettingproxy.h>
+#include <hbinputlanguage.h>
+
+#include "dialpadnumericbutton.h"
+#include "dialpadnumericbuttongrid.h"
+
+static const int DialpadRowCount = 4;
+static const int DialpadColumnCount = 3;
+// layout values in units
+static const qreal DialpadPrimaryTextSizeV = 5.25;
+static const qreal DialpadPrimaryTextSizeH = 4.5;
+static const qreal DialpadSecondaryTextSizeV = 3.8;
+static const qreal DialpadSecondaryTextSizeH = 3.3;
+static const qreal DialpadSecondaryTextSize2RowsV = 3.0;
+static const qreal DialpadSecondaryTextSize2RowsH = 2.6;
+static const qreal DialpadIconSizeV = 5.0;
+static const qreal DialpadIconSizeH = 4.25;
+static const qreal DialpadPrimaryTextLeftMargin  = 1.5;
+static const qreal DialpadPrimarySecondaryMargin  = 1.0;
+
+static const QLatin1String vmbxIcon("qtg_mono_voice_mailbox");
+
+static const int DialpadKeyCodeTable[DialpadRowCount*DialpadColumnCount] =
+{
+    Qt::Key_1,        Qt::Key_2,      Qt::Key_3,
+    Qt::Key_4,        Qt::Key_5,      Qt::Key_6,
+    Qt::Key_7,        Qt::Key_8,      Qt::Key_9,
+    Qt::Key_Asterisk, Qt::Key_0,      Qt::Key_NumberSign
+};
+
+DialpadNumericButtonGrid::DialpadNumericButtonGrid(
+    const HbMainWindow& mainWindow,
+    QGraphicsItem* parent) :
+    HbInputButtonGroup(parent),
+    mMainWindow(mainWindow),
+    mUnit(.0),
+    mMaxPrimaryLineWidth(.0),
+    mPrimaryTextBaseline(.0)
+{
+    setObjectName("numericButtons");
+
+    // create buttons
+    setGridSize(QSize(DialpadColumnCount, DialpadRowCount));
+    setButtonBorderSize(0);    
+
+    QList<HbInputButton*> buttons;
+
+    for (int i = 0; i < DialpadRowCount * DialpadColumnCount; ++i) {
+        DialpadNumericButton *item = new DialpadNumericButton(
+            DialpadKeyCodeTable[i],
+            QPoint(i % DialpadColumnCount, i / DialpadColumnCount));
+        buttons.append(item);
+
+        item->setType(HbInputButton::ButtonTypeNormal);
+    }
+
+    setButtons(buttons);
+
+    // connect signals from buttons
+    QObject::connect(this, SIGNAL(buttonPressed(const QKeyEvent&)),
+                     this, SLOT(updateButtonLabels()));
+    QObject::connect(this, SIGNAL(buttonReleased(const QKeyEvent&)),
+                     this, SLOT(updateButtonLabels()));
+    QObject::connect(this, SIGNAL(pressedButtonChanged(const QKeyEvent&,
+                                                       const QKeyEvent&)),
+                     this, SLOT(updateButtonLabels()));
+
+    // update colors
+    updateColorArray();
+    // set button texts
+    setButtonTexts();
+    // set button icons
+    button(0)->setIcon(HbIcon(vmbxIcon));
+
+    // update button texts when input language is changed
+    connect(HbInputSettingProxy::instance(),
+            SIGNAL(globalInputLanguageChanged(HbInputLanguage)),
+            this,
+            SLOT(setButtonTexts()));
+}
+
+DialpadNumericButtonGrid::~DialpadNumericButtonGrid()
+{
+}
+
+void DialpadNumericButtonGrid::resetButtons()
+{
+    cancelButtonPress();
+}
+
+QChar DialpadNumericButtonGrid::inputCharacter(int keyCode) const
+{
+    return mGeneratedChar.value(keyCode);
+}
+
+void DialpadNumericButtonGrid::setButtonTexts()
+{
+    HbInputLanguage inputLanguage =
+        HbInputSettingProxy::instance()->globalInputLanguage();
+    const HbKeymap *keymap =
+        HbKeymapFactory::instance()->keymap(inputLanguage.language());
+
+    mGeneratedChar.clear();
+
+    if (keymap) {
+        int buttonCount = (DialpadRowCount*DialpadColumnCount);
+        for (int i = 0; i < buttonCount; i++) {
+            int keyCode = DialpadKeyCodeTable[i];
+
+            if (keyCode == Qt::Key_Asterisk) {
+                // asterisk is not localized
+                QChar asterisk('*');
+                button(i)->setText(asterisk);
+                button(i)->setSecondaryText(QLatin1String("+"));
+                mGeneratedChar.insert(Qt::Key_Asterisk, asterisk);
+                continue;
+            }
+
+            if (keyCode == Qt::Key_NumberSign) {
+                // number sign is not localized
+                QChar numberSign('#');
+                button(i)->setText(numberSign);
+                mGeneratedChar.insert(Qt::Key_NumberSign, numberSign);
+                continue;
+            }
+
+            int index = i;
+            if (keyCode==Qt::Key_0) {
+                index = i-1;
+            }
+
+            const HbMappedKey *keyLabels =
+                keymap->keyForIndex(HbKeyboardVirtual12KeyLabels, index);
+
+            //
+            // set digits
+            // todo: input digit depend on digit type setting
+            // QChar numberChar(QLocale::system().zeroDigit().unicode()+
+            //                 (keyCode-0x30));
+            //
+            QChar numberChar;
+            if (keyLabels && keyLabels->chars.count()>=1 &&
+                keyLabels->chars.at(0).length()) {
+                numberChar = keyLabels->chars.at(0).at(0);
+            } else {
+                // fallback to latin
+                numberChar = QChar(keyCode);
+            }
+
+            button(i)->setText(numberChar);
+            mGeneratedChar.insert(keyCode,numberChar);
+
+            //
+            // set alphabets
+            //
+            if (keyLabels && keyLabels->chars.count()>=2) {
+                button(i)->setSecondaryText(keyLabels->chars.at(1));
+                if (keyLabels->chars.count()>=4) {
+                    button(i)->setSecondary2ndRowText(keyLabels->chars.at(3));
+                } else {
+                    button(i)->setSecondary2ndRowText(QString());
+                }
+            }
+        }
+
+        updateButtonLabels();
+    }
+}
+
+DialpadNumericButton* DialpadNumericButtonGrid::button(int i) const
+{
+    return static_cast<DialpadNumericButton*>(HbInputButtonGroup::button(i));
+}
+
+void DialpadNumericButtonGrid::updateButtonLabels()
+{
+    // update numeric buttons according to button state (pressed/released)
+    updateIconColor();
+    updateTextLayouts(rect().size());
+    update();
+}
+
+void DialpadNumericButtonGrid::paint(
+    QPainter* painter,
+    const QStyleOptionGraphicsItem* option,
+    QWidget* widget)
+{
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+
+    // Paints empty buttons
+    HbInputButtonGroup::paint(painter,option,widget);
+
+    qreal cellWidth = boundingRect().width() / gridSize().width();
+    qreal cellHeight = boundingRect().height() / gridSize().height();
+
+    for (int i = 0; i < DialpadRowCount * DialpadColumnCount; i++) {
+        DialpadNumericButton *item = button(i);
+
+        if (!item->icon().isNull()) {
+            // same as secondary text
+            qreal x = (item->position().x() * cellWidth) +
+                      (DialpadPrimaryTextLeftMargin * mUnit) +
+                      (DialpadPrimarySecondaryMargin * mUnit) +
+                      mMaxPrimaryLineWidth;
+            // top align with some margin
+            qreal y = item->position().y() * cellHeight + (cellHeight / 20.0);
+
+            qreal width = item->icon().size().width();
+            qreal height = item->icon().size().height();
+
+            Qt::Alignment alignment =
+                static_cast<Qt::Alignment>(Qt::AlignTop | Qt::AlignLeft);
+            item->icon().paint(painter,
+                               QRectF(x,y,width,height),
+                               Qt::KeepAspectRatio,
+                               alignment);
+        }                      
+    }
+
+    // Draw texts
+    QPen origPen = painter->pen();
+    for (int i = 0; i < mTextLayouts.count(); ++i) {
+        if (i==SecondaryText) {
+            // dimmed in normal state
+            painter->setPen(mColors.at(Pressed+1));
+        } else {
+            // otherwise normal or pressed color
+            painter->setPen(mColors.at(i/TextTypeCount));
+        }
+        mTextLayouts.at(i)->draw(painter, QPointF(0, 0));
+    }
+    painter->setPen(origPen);
+}
+
+void DialpadNumericButtonGrid::updateColorArray()
+{
+    mColors.clear();
+
+    QColor normalColor = HbColorScheme::color("qtc_input_button_normal");
+    mColors.insert(Normal, normalColor);
+
+    QColor pressedColor = HbColorScheme::color("qtc_input_button_pressed");
+    mColors.insert(Pressed, pressedColor);
+
+    // this is used for alphabets shown dimmed, use alpha until exact color
+    // is specified
+    QColor disabledColor = HbColorScheme::color("qtc_input_button_normal");
+    disabledColor.setAlpha(128);
+    mColors.insert(Pressed+1, disabledColor);
+}
+
+void DialpadNumericButtonGrid::updateIconColor()
+{
+    for (int i = 0; i < (DialpadRowCount * DialpadColumnCount); i++) {
+        DialpadNumericButton *item = button(i);
+
+        if (item->state()==HbInputButton::ButtonStatePressed) {
+            item->icon().setColor(mColors.at(Pressed));
+        } else {
+            item->icon().setColor(mColors.at(Normal));
+        }
+    }
+}
+
+void DialpadNumericButtonGrid::cancelButtonPress()
+{
+    HbInputButtonGroup::cancelButtonPress();
+    updateButtonLabels();
+}
+
+
+void DialpadNumericButtonGrid::setGeometry(const QRectF &rect)
+{
+    HbInputButtonGroup::setGeometry(rect);
+
+    mUnit = HbDeviceProfile::profile(&mMainWindow).unitValue();
+
+    updateTextLayouts(rect.size());
+
+    updateIconSizes();
+}
+
+void DialpadNumericButtonGrid::updateIconSizes()
+{
+    qreal width =  mMainWindow.orientation() == Qt::Vertical ?
+                   DialpadIconSizeV : DialpadIconSizeH;
+    width *= mUnit;
+
+    for (int i = 0; i < DialpadRowCount * DialpadColumnCount; i++) {
+        DialpadNumericButton *item = button(i);
+
+        if (!item->icon().isNull()) {
+            item->icon().setWidth(width);
+        }
+    }
+}
+
+void DialpadNumericButtonGrid::changeEvent(QEvent *event)
+{
+    HbInputButtonGroup::changeEvent(event);
+
+    if (event->type() == HbEvent::ThemeChanged) {
+        updateColorArray();
+        updateIconColor();
+    }
+}
+
+void DialpadNumericButtonGrid::updateTextLayouts(const QSizeF &size)
+{
+    if (!size.width() && !size.height()) {
+        return;
+    }
+
+    // get normal and pressed state texts
+    QList<QString> textContent;
+    bool useTwoRows;
+
+    resolveTextContent(textContent, useTwoRows);
+
+    // layout the texts
+    createTextLayouts(size, textContent, useTwoRows);
+}
+
+void DialpadNumericButtonGrid::resolveTextContent(
+    QList<QString> &content, bool& useTwoRows)
+{
+    QString normalState;
+    QString normalStateSecondary;
+    QString pressedState;
+    QString pressedStateSecondary;
+
+    useTwoRows = false;
+
+    for (int i = 0; i < (DialpadRowCount*DialpadColumnCount); i++) {
+        DialpadNumericButton *item = button(i);
+        if (item->state()==HbInputButton::ButtonStatePressed) {
+            if (item->text().length()) {
+                pressedState.append(item->text());
+                pressedState.append(QChar(QChar::LineSeparator));
+            }
+
+            if (item->secondaryText().length()) {
+                pressedStateSecondary.append(item->secondaryText());
+                pressedStateSecondary.append(QChar(QChar::LineSeparator));
+                if (item->secondary2ndRowText().length()) {
+                    pressedStateSecondary.append(item->secondary2ndRowText());
+                    pressedStateSecondary.append(QChar(QChar::LineSeparator));
+                    useTwoRows = true;
+                }
+            }
+        } else { // ButtonStateNormal
+            if (item->text().length()) {
+                normalState.append(item->text());
+                normalState.append(QChar(QChar::LineSeparator));
+            }
+
+            if (item->secondaryText().length()) {
+                normalStateSecondary.append(item->secondaryText());
+                normalStateSecondary.append(QChar(QChar::LineSeparator));
+                if (item->secondary2ndRowText().length()) {
+                    normalStateSecondary.append(item->secondary2ndRowText());
+                    normalStateSecondary.append(QChar(QChar::LineSeparator));
+                    useTwoRows = true;
+                }
+            }
+        }
+    }
+
+    content.insert(PrimaryText, normalState);
+    content.insert(SecondaryText, normalStateSecondary);
+    content.insert(TextTypeCount + Pressed, pressedState);
+    content.insert(StateCount + SecondaryText, pressedStateSecondary);
+}
+
+void DialpadNumericButtonGrid::createTextLayouts(
+    const QSizeF &size, const QList<QString> &content, bool useTwoRows)
+{
+    // clear old layouts
+    qDeleteAll(mTextLayouts);
+    mTextLayouts.clear();
+
+    if(!isButtonPressed()) {
+        mMaxPrimaryLineWidth = 0;
+    }
+
+    QFont primaryFont = HbFontSpec(HbFontSpec::Primary).font();
+    qreal primarySize = mMainWindow.orientation() == Qt::Vertical ?
+                     DialpadPrimaryTextSizeV :
+                     DialpadPrimaryTextSizeH;
+    primaryFont.setPixelSize(primarySize * mUnit);
+
+    QFont secondaryFont = HbFontSpec(HbFontSpec::Secondary).font();
+    if (useTwoRows) {
+        qreal secondarySize = mMainWindow.orientation() == Qt::Vertical ?
+                         DialpadSecondaryTextSize2RowsV :
+                         DialpadSecondaryTextSize2RowsH;
+        secondaryFont.setPixelSize(secondarySize * mUnit);
+    } else {
+        qreal secondarySize = mMainWindow.orientation() == Qt::Vertical ?
+                         DialpadSecondaryTextSizeV :
+                         DialpadSecondaryTextSizeH;
+        secondaryFont.setPixelSize(secondarySize * mUnit);
+    }
+
+    for (int i=0; i < (StateCount*TextTypeCount); i++ ) {
+        QString text = content.at(i);
+
+        if (!text.isNull()) {
+            QTextLayout* textLayout;
+            int type;
+
+            if (i%TextTypeCount) {
+                textLayout = new QTextLayout(text,secondaryFont);
+                type = SecondaryText;
+            } else {
+                textLayout = new QTextLayout(text,primaryFont);
+                type = PrimaryText;
+            }
+
+            mTextLayouts.append(textLayout);
+
+            textLayout->beginLayout();
+
+            int state = (i>=TextTypeCount) ? Pressed : Normal;
+
+            layoutTextLines(size,*textLayout,state,type,useTwoRows);
+
+            textLayout->endLayout();
+
+            textLayout->setCacheEnabled(true);
+        }
+    }
+}
+
+void DialpadNumericButtonGrid::layoutTextLines(
+    const QSizeF &size,
+    QTextLayout &textLayout,
+    int state,
+    int type,
+    bool useTwoRows)
+{
+    QFontMetricsF fontMetrics(textLayout.font());
+    qreal textHeight = fontMetrics.height();
+    qreal textDescent = fontMetrics.descent();
+
+    qreal cellWidth = size.width() / gridSize().width();
+    qreal cellHeight = size.height() / gridSize().height();
+    qreal maxLineWidth = 0;
+
+    for (int j = 0; j < (DialpadRowCount*DialpadColumnCount); j++) {
+        DialpadNumericButton *item = button(j);
+
+        if ((type==PrimaryText && item->text().isNull()) ||
+            (type==SecondaryText && item->secondaryText().isNull())) {
+            continue; // no text for this button -> next button
+        }
+
+        if ( ( state==Normal &&
+               item->state()==HbInputButton::ButtonStateReleased ) ||
+             ( state==Pressed &&
+               item->state()==HbInputButton::ButtonStatePressed ) ) {
+            // layout text line
+            if (type==SecondaryText) {
+                layoutSecondaryText(textLayout,*item,cellWidth,
+                                    cellHeight,textHeight,textDescent,
+                                    useTwoRows);
+            } else {
+                layoutPrimaryText(textLayout,*item,cellWidth,
+                                  cellHeight,textHeight);
+
+                // store line width, for drawing secondary text
+                qreal lineWidth = fontMetrics.width(item->text());
+                if (mMaxPrimaryLineWidth == 0 && (j>0 && j<10) &&
+                    lineWidth > maxLineWidth) {
+                    maxLineWidth = lineWidth;
+                    mPrimaryTextBaseline = textHeight/2 - textDescent;
+                }
+            }
+        }
+    }
+
+    if (maxLineWidth!=0) {
+        mMaxPrimaryLineWidth = maxLineWidth;
+    }
+}
+
+void DialpadNumericButtonGrid::layoutPrimaryText(
+    QTextLayout& layout,
+    DialpadNumericButton& button,
+    qreal cellWidth,
+    qreal cellHeight,
+    qreal textHeight) const
+{
+    QTextLine line = layout.createLine();
+    line.setNumColumns(button.text().length());
+    qreal textPositionX = (button.position().x() * cellWidth) +
+                    (DialpadPrimaryTextLeftMargin * mUnit)
+                    + buttonBorderSize();
+    qreal textPositionY = (button.position().y() +
+                    (0.5 * button.size().height())) *
+                    cellHeight - (0.5 * textHeight);
+    line.setPosition(QPointF(textPositionX, textPositionY));
+}
+
+void DialpadNumericButtonGrid::layoutSecondaryText(
+    QTextLayout& layout,
+    DialpadNumericButton& button,
+    qreal cellWidth,
+    qreal cellHeight,
+    qreal textHeight,
+    qreal textDescent,
+    bool useTwoRows) const
+{
+    qreal textPositionX;
+    qreal textPositionY;
+
+    QTextLine line = layout.createLine();
+
+    if (useTwoRows) {
+        line.setNumColumns(button.secondaryText().length());
+
+        textPositionX = (button.position().x() * cellWidth) +
+                        (DialpadPrimaryTextLeftMargin * mUnit) +
+                        mMaxPrimaryLineWidth +
+                        (DialpadPrimarySecondaryMargin * mUnit)
+                        + buttonBorderSize();
+
+        if (button.secondary2ndRowText().length()) {
+            textPositionY = (button.position().y() +
+                            (0.5 * button.size().height())) *
+                            cellHeight;
+
+            QTextLine line2 = layout.createLine();
+            line2.setNumColumns(button.secondary2ndRowText().length());
+            line2.setPosition(QPointF(textPositionX,textPositionY-textHeight));
+        } else {
+            textPositionY = (button.position().y() +
+                            (0.5 * button.size().height())) *
+                            cellHeight - (0.5 * textHeight);
+        }
+    } else {
+        line.setNumColumns(button.secondaryText().length());
+        textPositionX = (button.position().x() * cellWidth) +
+                        (DialpadPrimaryTextLeftMargin * mUnit) +
+                        mMaxPrimaryLineWidth +
+                        (DialpadPrimarySecondaryMargin * mUnit)
+                        + buttonBorderSize();
+        textPositionY = (button.position().y() +
+                        (0.5 * button.size().height())) *
+                        cellHeight + mPrimaryTextBaseline -
+                        (textHeight - textDescent);
+    }
+    line.setPosition(QPointF(textPositionX, textPositionY));
+}
+
+bool DialpadNumericButtonGrid::isButtonPressed() const
+{
+    bool pressed = false;
+
+    for (int i = 0; i < (DialpadRowCount*DialpadColumnCount); i++) {
+        if (button(i)->state()==HbInputButton::ButtonStatePressed) {
+            pressed = true;
+            break;
+        }
+    }
+
+    return pressed;
+}
--- a/telutils/dialpad/tsrc/dialpadtest/dialpadtestview.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/tsrc/dialpadtest/dialpadtestview.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -26,13 +26,15 @@
 #include <hblistwidgetitem.h>
 #include <hblineedit.h>
 #include <hbmessagebox.h>
+#include <hbinputsettingproxy.h>
+#include <hbextendedlocale.h>
 
 #include "dialpadtestview.h"
 #include "dialpad.h"
 #include "dialpadkeyhandler.h"
 
 DialpadTestView::DialpadTestView( HbMainWindow& mainWindow ) :
-    mMainWindow(mainWindow), mTapOutsideDismiss(0)
+    mMainWindow(mainWindow), mTapOutsideDismiss(0), mArabicMode(0), mArabicDigit(0)
 {
     setTitle("DialpadTest");
 
@@ -55,6 +57,10 @@
 
     menu()->addAction("Tap outside dismiss",this,SLOT(setTapOutsideDismiss()));
 
+    menu()->addAction("Arabic mode",this,SLOT(setArabicMode()));
+
+    menu()->addAction("Arabic digit",this,SLOT(setArabicDigit()));
+
     // create view widget (recent calls list mockup)
     createListWidget();
 
@@ -70,8 +76,7 @@
     mLongPressTimer->setSingleShot(true);
     connect(mLongPressTimer,SIGNAL(timeout()),this,SLOT(handleLongKeyPress()));
     
-    mKeyhandler = new DialpadKeyHandler(mDialpad, mMainWindow, this);
-    
+    // mKeyhandler = new DialpadKeyHandler(mDialpad, mMainWindow, this);
     mMainWindow.installEventFilter(this);
 }
 
@@ -225,3 +230,28 @@
     mTapOutsideDismiss = !mTapOutsideDismiss;
     mDialpad->setTapOutsideDismiss(mTapOutsideDismiss);
 }
+
+void DialpadTestView::setArabicMode()
+{
+    mArabicMode = !mArabicMode;
+
+    if (mArabicMode) {
+        HbInputLanguage lang(QLocale::Arabic);
+        HbInputSettingProxy::instance()->setGlobalInputLanguage(lang);
+    } else {
+        HbInputLanguage lang(QLocale::English, QLocale::UnitedKingdom);
+        HbInputSettingProxy::instance()->setGlobalInputLanguage(lang);
+    }
+}
+
+void DialpadTestView::setArabicDigit()
+{
+    mArabicDigit = !mArabicDigit;
+
+    if (mArabicDigit) {
+        HbExtendedLocale::system().setZeroDigit(ArabicIndicDigit);
+    } else {
+        HbExtendedLocale::system().setZeroDigit(WesternDigit);
+    }
+}
+
--- a/telutils/dialpad/tsrc/dialpadtest/dialpadtestview.h	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/tsrc/dialpadtest/dialpadtestview.h	Fri Sep 17 08:33:29 2010 +0300
@@ -50,6 +50,8 @@
     void onEditorContentChanged();
     void handleLongKeyPress();
     void setTapOutsideDismiss();
+    void setArabicMode();
+    void setArabicDigit();
 
 private:
     HbMainWindow& mMainWindow;
@@ -59,6 +61,8 @@
     QTimer* mLongPressTimer;
     QString mPressedKey;
     bool mTapOutsideDismiss;
+    bool mArabicMode;
+    bool mArabicDigit;
 };
 
 #endif // DIALPADTESTVIEW_H
--- a/telutils/dialpad/tsrc/unit/shared/dialpadtestutil.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/tsrc/unit/shared/dialpadtestutil.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -26,20 +26,20 @@
 DialpadTestUtil::DialpadTestUtil(HbMainWindow& mainWindow, QObject* parent) :
     QObject(parent), mMainWindow(mainWindow)
 {
-    mKeyNames.insert(Qt::Key_1,"keypad");
-    mKeyNames.insert(Qt::Key_2,"keypad");
-    mKeyNames.insert(Qt::Key_3,"keypad");
-    mKeyNames.insert(Qt::Key_4,"keypad");
-    mKeyNames.insert(Qt::Key_5,"keypad");
-    mKeyNames.insert(Qt::Key_6,"keypad");
-    mKeyNames.insert(Qt::Key_7,"keypad");
-    mKeyNames.insert(Qt::Key_8,"keypad");
-    mKeyNames.insert(Qt::Key_9,"keypad");
-    mKeyNames.insert(Qt::Key_Asterisk,"keypad");
-    mKeyNames.insert(Qt::Key_0,"keypad");
-    mKeyNames.insert(Qt::Key_NumberSign,"keypad");
-    mKeyNames.insert(Qt::Key_Backspace,"16777219");
-    mKeyNames.insert(Qt::Key_Yes,"16842753");
+    mKeyNames.insert(Qt::Key_1,"numericButtons");
+    mKeyNames.insert(Qt::Key_2,"numericButtons");
+    mKeyNames.insert(Qt::Key_3,"numericButtons");
+    mKeyNames.insert(Qt::Key_4,"numericButtons");
+    mKeyNames.insert(Qt::Key_5,"numericButtons");
+    mKeyNames.insert(Qt::Key_6,"numericButtons");
+    mKeyNames.insert(Qt::Key_7,"numericButtons");
+    mKeyNames.insert(Qt::Key_8,"numericButtons");
+    mKeyNames.insert(Qt::Key_9,"numericButtons");
+    mKeyNames.insert(Qt::Key_Asterisk,"numericButtons");
+    mKeyNames.insert(Qt::Key_0,"numericButtons");
+    mKeyNames.insert(Qt::Key_NumberSign,"numericButtons");
+    mKeyNames.insert(Qt::Key_Backspace,"backspaceButton");
+    mKeyNames.insert(Qt::Key_Yes,"callButton");
 }
 
 DialpadTestUtil::~DialpadTestUtil()
@@ -100,7 +100,7 @@
     if ( widget ) {
         QPointF widgetPos;
 
-        if (name=="keypad") {
+        if (name=="numericButtons") {
             widgetPos = widget->scenePos() +
                         keyPosition(widget, key);
         } else {
--- a/telutils/dialpad/tsrc/unit/ut_dialpadnumericbutton/ut_dialpadnumericbutton.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/dialpad/tsrc/unit/ut_dialpadnumericbutton/ut_dialpadnumericbutton.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -33,6 +33,7 @@
 
     void testSetText();
     void testSetSecondaryText();
+    void testSetSecondary2ndRowText();
     void testSetIcon();
 
 private:
@@ -74,5 +75,12 @@
     QVERIFY(mButton->icon().color() == Qt::white);
 }
 
+void ut_DialpadNumericButton::testSetSecondary2ndRowText()
+{
+    QVERIFY(mButton->secondary2ndRowText().isNull());
+    mButton->setSecondary2ndRowText(QLatin1String("Secondary 2nd row text"));
+    QVERIFY(mButton->secondary2ndRowText() == QLatin1String("Secondary 2nd row text"));
+}
+
 DIALPAD_TEST_MAIN(ut_DialpadNumericButton)
 #include "ut_dialpadnumericbutton.moc"
--- a/telutils/keysequencerecognitionservice/src/lifetimerkeysequencehandler.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/keysequencerecognitionservice/src/lifetimerkeysequencehandler.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -137,10 +137,6 @@
         lifeTimerText.append(locale.timeSeparator(KMinuteSeparatorInd));
         lifeTimerText.append(
             QString::number(static_cast<int>(lifeTimeData.iMinutes)));
-        // pad hour field to a length of 6 digits
-        const int KLifeTimerDataFieldLength = 9;
-        lifeTimerText = lifeTimerText.rightJustified(
-            KLifeTimerDataFieldLength, QChar('0'));
     }
     
     return lifeTimerText;
--- a/telutils/phoneparser/group/phoneparser.mmp	Thu Sep 02 21:00:29 2010 +0300
+++ b/telutils/phoneparser/group/phoneparser.mmp	Fri Sep 17 08:33:29 2010 +0300
@@ -54,10 +54,9 @@
 
 USERINCLUDE     ../inc 
 
-// <-- QT PHONE START-->
 // Default system include paths for MW layer modules.
 MW_LAYER_SYSTEMINCLUDE  
-// <-- QT PHONE END-->
+
 SYSTEMINCLUDE   ../../../inc // telephonyservices internal headers 
 
 LIBRARY         euser.lib
--- a/vmbx/vmbxcpplugin/src/vmbxcpgroup.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/vmbx/vmbxcpplugin/src/vmbxcpgroup.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -163,7 +163,6 @@
     if (KErrNone == result) {
         _DBGLOG2("VmbxCpGroup::queryCsVoiceNumber >, number=", number) 
         mUiEngine->setCsVoiceNumber(number);
-        UpdateWidgetContent(mCsVoice1Index, number);
     }
     mCsVoice1Editor->setEnabled(true);
     _DBGLOG("VmbxCpGroup::queryCsVoiceNumber <")
@@ -182,7 +181,6 @@
     if (KErrNone == result) {
         _DBGLOG2("VmbxCpGroup::queryCsVideoNumber >, number=", number)
         mUiEngine->setCsVideoNumber(number);
-        UpdateWidgetContent(mCsVideo1Index, number);
     }
     mCsVideo1Editor->setEnabled(true);
     _DBGLOG("VmbxCpGroup::queryCsVideoNumber <")
--- a/vmbx/vmbxengine/src/voicemailboximpl.cpp	Thu Sep 02 21:00:29 2010 +0300
+++ b/vmbx/vmbxengine/src/voicemailboximpl.cpp	Fri Sep 17 08:33:29 2010 +0300
@@ -828,7 +828,22 @@
         iVmbxFactory->CreateEngineL( vmbxEngine, aType );
         CleanupStack::PushL( vmbxEngine );
         CVoiceMailboxEntry* entry( NULL );
-        vmbxEngine->GetL( entry );
+        TRAPD(err,vmbxEngine->GetL( entry ));
+        VMBLOGSTRING2( "VMBX: CVoiceMailboxImpl::NotifyChangedL err=%d",err );
+        if(err == KErrNotFound)
+            {
+            delete entry;
+            entry = NULL;
+            entry = CVoiceMailboxEntry::NewL();
+            // get als line info
+            entry->SetVmbxAlsLineType( VmbxUtilities::AlsLine() );
+            entry->SetVoiceMailboxType( aType );
+            entry->SetVmbxNumber( KNullDesC());
+            }
+        else
+            {
+            User::LeaveIfError(err);
+            }
         CleanupStack::PushL( entry );
         iNotifyCallBack->HandleNotifyL( *entry );
         CleanupStack::PopAndDestroy( entry );