Merge fix for bug 2360. RCL_3
authorPat Downey <patd@symbian.org>
Fri, 23 Apr 2010 14:59:43 +0100
branchRCL_3
changeset 24 5d467ea4b3e5
parent 23 56ebb309c25d (diff)
parent 20 d398543c5fb7 (current diff)
child 26 a2e87f73f7d7
Merge fix for bug 2360.
--- a/group/bld.inf	Mon Apr 19 16:39:38 2010 +0300
+++ b/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2006 - 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"
@@ -16,10 +16,10 @@
 */
 
 
+#include "../phoneuis/group/bld.inf"
 #include "../phoneapp/group/bld.inf"
 #include "../phoneengine/group/bld.inf"
 #include "../phonesettings/group/bld.inf"
-#include "../phoneuis/group/bld.inf"
 #include "../phone_plat/group/bld.inf"
 #include "../phoneplugins/group/bld.inf"
 
--- a/package_definition.xml	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="phone" name="Phone Apps" levels="engine plugin ui app">
-    <collection id="phoneapp" name="Phone Application" level="app">
-      <component id="blacklist" filter="s60" name="Phone Blacklist Clearing" class="plugin">
-        <unit bldFile="phoneapp/blacklist/group"/>
-      </component>
-      <component id="phoneui" filter="s60" name="Phone UI">
-        <unit bldFile="phoneapp/phoneui/group"/>
-        	<!-- should these be separate components? #included? -->
-        <!-- <unit bldFile="phoneapp/phoneui/tsrc/public/basic/3dringingtoneinterface_tests/group"/> -->
-        <!-- <unit bldFile="phoneapp/phoneui/tsrc/public/basic/group"/> -->
-      </component>
-      <component id="phoneuicontrol" filter="s60" name="Phone UI Control">
-        <unit bldFile="phoneapp/phoneuicontrol/group"/>
-      </component>
-      <component id="phoneuistates" filter="s60" name="Phone UI States">
-        <unit bldFile="phoneapp/phoneuistates/group"/>
-      </component>
-      <component id="phoneuiutils" filter="s60" name="Phone UI Utils">
-        <unit bldFile="phoneapp/phoneuiutils/group"/>
-      </component>
-      <component id="phoneuiview" filter="s60" name="Phone UI View">
-        <unit bldFile="phoneapp/phoneuiview/group"/>
-      </component>
-      <component id="phoneuivoipextension" filter="s60" name="Phone UI VOIP Extension">
-        <unit bldFile="phoneapp/phoneuivoipextension/group"/>
-      </component>
-      <component id="silenceactionplugin" filter="s60" name="Silence Action Plugin" class="plugin">
-        <unit bldFile="phoneapp/silenceactionplugin/group"/>
-      </component>
-      <component id="phonemediatorcenter" filter="s60" name="Phone Mediator Center">
-        <unit bldFile="phoneapp/phonemediatorcenter/group"/>
-      </component>
-    </collection>
-    <collection id="phoneengine" name="Phone Engine" level="engine">
-      <component id="phonecntfinder" filter="s60" name="Phone Contact Finder">
-        <unit bldFile="phoneengine/phonecntfinder/group"/>
-      </component>
-      <component id="audiohandling" filter="s60" name="Phone Audio Handling">
-        <unit bldFile="phoneengine/audiohandling/group"/>
-      </component>
-      <component id="callhandling" filter="s60" name="Call Handling">
-        <unit bldFile="phoneengine/callhandling/group"/>
-      </component>
-      <component id="contacthandling" filter="s60" name="Phone Contact Handling">
-        <unit bldFile="phoneengine/contacthandling/group"/>
-      </component>
-      <component id="loghandling" filter="s60" name="Phone Log Handling">
-        <unit bldFile="phoneengine/loghandling/group"/>
-      </component>
-      <component id="engineinfo" filter="s60" name="Phone Engine Info">
-        <unit bldFile="phoneengine/engineinfo/group"/>
-      </component>
-      <component id="phonemodel" filter="s60" name="Phone Model">
-        <unit bldFile="phoneengine/phonemodel/group"/>
-      </component>
-      <component id="servicehandling" filter="s60" name="Phone Service Handling">
-        <unit bldFile="phoneengine/servicehandling/group"/>
-      </component>
-    </collection>
-    <collection id="phonesettings" name="Phone Settings" level="plugin">
-      <component id="aiwcallimageplugin" filter="s60" name="Call Image AIW Plugin" class="plugin">
-        <unit bldFile="phonesettings/aiwcallimageplugin/group"/>
-      </component>
-      <component id="pslncallimageplugin" filter="s60" name="Call Image Personalization Plugin"  class="plugin">
-        <unit bldFile="phonesettings/pslncallimageplugin/group"/>
-      </component>
-    </collection>
-    <collection id="phoneuis" name="Phone UIs" level="ui">
-      <component id="dialer" filter="s60" name="Dialer">
-        <unit bldFile="phoneuis/dialer/group"/>
-        	<!-- what to do about this test unit? -->
-        <!-- <unit bldFile="phoneuis/dialer/tsrc/public/basic/group"/> -->
-      </component>
-      <component id="bubblemanager" filter="s60" name="Phone Bubble Manager">
-        <unit bldFile="phoneuis/bubblemanager/group"/>
-      </component>
-      <component id="connectutil" filter="s60" name="Connection Utility" class="plugin">
-        <unit bldFile="phoneuis/connectutil/group"/>
-      </component>
-      <component id="sfiutils" filter="s60" name="Send File In Call Utilities" class="plugin">
-        <unit bldFile="phoneuis/sfiutils/group"/>
-        	<!-- what to do about this test unit? -->
-        <!-- <unit bldFile="phoneuis/sfiutils/tsrc/public/basic/group"/> -->
-      </component>
-      <component id="ussd" filter="s60" name="Unstructured Supplementary Services Data">
-        <unit bldFile="phoneuis/ussd/group"/>
-      </component>
-      <component id="vmbx" filter="s60" name="Voice Mailbox">
-        <unit bldFile="phoneuis/vmbx/group"/>
-      </component>
-      <component id="telephonydevicemode" filter="s60" name="Telephony Device Mode">
-        <unit bldFile="phoneuis/telephonydevicemode/group"/>
-      </component>
-    </collection>
-    <collection id="phone_info" name="Phone Apps Info" level="app">
-      <component id="phone_plat" filter="s60" name="Phone Apps Platform Interfaces" class="api">
-        <unit bldFile="phone_plat/group"/>
-      </component>
-    </collection>
-    <collection id="phoneplugins" name="Phone Plugins" level="plugin">
-      <component id="telbranding" filter="s60" name="Tel Branding" class="plugin" introduced="^2">
-        <unit bldFile="phoneplugins/telbranding/group"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- a/phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh	Mon Apr 19 16:39:38 2010 +0300
+++ b/phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -151,6 +151,9 @@
     EPhoneInCallCmdSecondaryCamera,
     EPhoneInCallCmdActivatEPhonebook, // NOT IN MENU!
 
+    // Video sharing
+    EPhoneInCallCmdShareLiveVideo,
+
     EPhoneInCallCmdConferenceHold, // JMK
     EPhoneInCallCmdConferenceUnhold, // JMK
     EPhoneInCallCmdNewCallFind,
@@ -219,7 +222,16 @@
     EPhoneIsCustomizedDialerVisible,
 
     EPhoneCmdVideoCallOutOfMemory,
-   
+
+    // dialer and easy dialing releated commands
+    EEasyDialingSettingsItemPlaceHolder,
+    EEasyDialingCmdSelect,
+    EPhoneDialerValidNumber,
+    EPhoneDialerInvalidNumber,
+    EPhoneCmdUpdateCba,
+    EPhoneCmdBlockingDialogLaunched,
+    EPhoneCmdBlockingDialogClosed,
+
     EPhoneCmdLast
     };
     
--- a/phone_plat/phone_application_voip_commands_api/inc/phoneappvoipcommands.hrh	Mon Apr 19 16:39:38 2010 +0300
+++ b/phone_plat/phone_application_voip_commands_api/inc/phoneappvoipcommands.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -74,6 +74,10 @@
     EPhoneCmdServiceEnablingTimedOut,
     EPhoneCmdHandoverToWlan,
     EPhoneCmdHandoverToGsm,
+    /** Command id for unattended transfer callback ok. */
+    EPhoneCmdUnattendedTransferCallBackOk,
+    /** Command id for unattended transfer callback cancel. */
+    EPhoneCmdUnattendedTransferCallBackCancel,
     // Last VoIP command, not used in menu nor soft key.
     // Add new VoIP commands before this.  
     EPhoneCmdVoIPLast
--- a/phone_plat/telephony_information_api/inc/telinformationpstypes.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phone_plat/telephony_information_api/inc/telinformationpstypes.h	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <cntdef.h>
-#include <phclttypes.h>
+#include <PhCltTypes.h>
 
 // CONSTANTS
 
--- a/phoneapp/phoneui/group/commonphoneapp_icons_scalable.mk	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/group/commonphoneapp_icons_scalable.mk	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2004-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"
@@ -75,6 +75,7 @@
 		/c8,8 qgn_indi_button_unmute_mic.svg \
 		/c8,8 qgn_indi_button_video_to_voice.svg \
 		/c8,8 qgn_indi_button_voice_to_video.svg \
+		/c8,8 qgn_indi_button_video_share.svg \
 		/c8,8 qgn_indi_button_answer.svg \
 		/c8,8 qgn_indi_button_reject.svg \
 		/c8,8 qgn_indi_tb_call.svg \
@@ -83,7 +84,9 @@
 		/c8,8 qgn_indi_dialer_add_contacts.svg \
 		/c8,8 qgn_indi_dialer_logs.svg \
 		/c8,8 qgn_indi_button_send_dtmf.svg \
-		/c8,8 qgn_indi_button_silence.svg
+		/c8,8 qgn_indi_button_silence.svg \
+		/c8,8 qgn_indi_button_answer_white.svg \
+		/c8,8 qgn_indi_button_logdialer_white.svg \
 
 FREEZE : do_nothing
 
--- a/phoneapp/phoneui/group/iconlist.txt	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/group/iconlist.txt	Fri Apr 23 14:59:43 2010 +0100
@@ -16,6 +16,7 @@
 -c8,8 qgn_indi_button_unmute_mic
 -c8,8 qgn_indi_button_video_to_voice
 -c8,8 qgn_indi_button_voice_to_video
+-c8,8 qgn_indi_button_video_share
 -c8,8 qgn_indi_button_answer
 -c8,8 qgn_indi_button_reject
 -c8,8 qgn_indi_dialer_call_send
@@ -29,4 +30,6 @@
 -c8,8 qgn_indi_tb_microphone_unmute
 -c8,8 qgn_indi_tb_ihf_on 
 -c8,8 qgn_indi_tb_handset
--c8,8 qgn_indi_tb_bthf
\ No newline at end of file
+-c8,8 qgn_indi_tb_bthf
+-c8,8 qgn_indi_button_answer_white
+-c8,8 qgn_indi_button_logdialer_white
\ No newline at end of file
Binary file phoneapp/phoneui/help/data/xhtml.zip has changed
--- a/phoneapp/phoneui/help/inc/incl.hlp.hrh	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/help/inc/incl.hlp.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -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/phoneapp/phoneui/inc/cphoneappui.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/inc/cphoneappui.h	Fri Apr 23 14:59:43 2010 +0100
@@ -279,8 +279,6 @@
         // Id of system events from Starter states.
         TInt iStarterEventId;
         
-        CPhoneQwertyHandler* iQwertyHandler;
-        
         // System evenviroment notifier
         CEnvironmentChangeNotifier* iEnvChangeNotifier;
         
--- a/phoneapp/phoneui/loc/phone.loc	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/loc/phone.loc	Fri Apr 23 14:59:43 2010 +0100
@@ -451,4 +451,10 @@
 //
 #define qtn_called_number_has_barred_incoming_calls "Called number has barred incoming calls"
 
+//d: Permanent note Invalid Card. Shown when the Sim inserted is not same as 
+//d: the one provided by the operator.
+//l: popup_note_window
+//w:
+//r: 5.0
+#define text_invalid_card "Invalid card"
 // End of File
--- a/phoneapp/phoneui/loc/voip.loc	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/loc/voip.loc	Fri Apr 23 14:59:43 2010 +0100
@@ -580,4 +580,21 @@
 // r: 5.0
 #define qtn_ipcomm_creating_conn_failed_permanently "Connecting %U failed due to defective settings. Contact your service provider."
 
+// d: Prompt text for number entry.
+// d: Topmost row shows text in case of transfer dialer. 
+// l: heading_pane_t1  
+// w:
+// r: 5.0
+//
+#define qtn_dialer_unatt_transfer_input_field_text "Address:"
+
+// d: Text in the transfer Dialer Options menu. This is shown only
+// d: when user has entered characters to number entry. This item
+// d: performs the unattended transfer request.
+// l: list_single_pane_t1_cp2  
+// w:
+// r: 5.0
+//
+#define qtn_dialer_options_send_uatransfer_req "Send"
+
 // End of File
--- a/phoneapp/phoneui/src/cphoneappui.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/src/cphoneappui.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -55,7 +55,6 @@
 #include "phoneconstants.h"
 #include "cphoneclearblacklist.h"
 #include "cphonestatuspane.h"
-#include "cphoneqwertyhandler.h"
 #include "tphonecmdparaminteger.h"
 #ifndef __WINS__
 #include <f32file.h>
@@ -90,7 +89,6 @@
         delete iPhoneViewController;
         }
     delete iPhoneUIController;
-    delete iQwertyHandler;
     
     CPhoneRecoverySystem::Remove( iStartupSignalRecoveryId );
 
@@ -109,6 +107,10 @@
     BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
     SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong );
     
+    // Item specific soft key IS DISABLED in order to make SK1 visible with easy dialing.
+    CEikCba* cba = static_cast<CEikCba*>( CEikButtonGroupContainer::Current()->ButtonGroup() );
+    cba->EnableItemSpecificSoftkey( EFalse );
+    
     SetAliasKeyCodeResolverL( this );
     
     // Set phone application to be system application so it can't be closed
@@ -132,8 +134,7 @@
     keySounds->PushContextL( R_PHONEUI_DEFAULT_SKEY_LIST );
    
     iPhoneViewController = CPhoneViewController::NewL( ClientRect() );
-    iPhoneUIController = CPhoneUIController::NewL( iPhoneViewController );
-    iQwertyHandler = CPhoneQwertyHandler::NewL();        
+    iPhoneUIController = CPhoneUIController::NewL( *iPhoneViewController );
 
     // Blacklist singleton is initialized here
     // return value is ignored since we do not require its services in this class
@@ -597,30 +598,6 @@
                     Exit();
                     return;     
                     }
-                           
-                if ( iQwertyHandler->IsQwertyInput() )
-                    {
-                    TInt code = iQwertyHandler->NumericKeyCode( *keyEvent );
-                    TBool fepSimulated = keyEvent->iModifiers & EModifierSpecial; 
-                    if ( !fepSimulated && 
-                         ( ( code != EKeyNull && code != keyEvent->iCode ) ||
-                         ( code == EKeyNull && CPhoneKeys::IsNumericKey( 
-                                                             *keyEvent, 
-                                                             ( TEventCode ) aEvent.Type() ) ) )
-                         ) 
-                        {
-                        // Modify event according to keyboard layout
-                        TWsEvent newWsEvent = aEvent;    
-                        TKeyEvent* newKeyEvent = newWsEvent.Key();
-                        newKeyEvent->iCode = code;
-                        TInt shiftMask = EModifierLeftShift  | 
-                                         EModifierRightShift | 
-                                         EModifierShift;
-                        shiftMask = ~shiftMask;
-                        newKeyEvent->iModifiers = newKeyEvent->iModifiers & shiftMask;
-                        return CAknAppUi::HandleWsEventL( newWsEvent, aDestination );
-                        }
-                    }
                 }
                 break;
                 
@@ -820,15 +797,6 @@
     {
     __LOGMETHODSTARTEND( EPhonePhoneapp, "CPhoneAppUI::HandleApplicationSpecificEventL" );
     
-    if( aType == EEikKeyLockEnabled )
-        {
-        iPhoneUIController->HandleKeyLockEnabled( ETrue );
-        }
-    else if( aType == EEikKeyLockDisabled )
-        {
-        iPhoneUIController->HandleKeyLockEnabled( EFalse );
-        }
-    
     CAknAppUi::HandleApplicationSpecificEventL( aType, aEvent );
     }
 
--- a/phoneapp/phoneui/srcdata/callhandlingui.rss	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/srcdata/callhandlingui.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -568,6 +568,33 @@
         };    
     }      
      
+// -----------------------------------------------------------------------------
+//
+//    r_phoneui_video_share_button
+//    Video share button
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE BUBBLE_TOUCH_PANE_BUTTON r_phoneui_video_share_button
+    {
+    commands =
+        {
+        EPhoneInCallCmdShareLiveVideo
+        };
+    button = AVKON_BUTTON
+        {
+        states =
+            {
+            AVKON_BUTTON_STATE
+                {
+                txt = qtn_incal_button_share_video\
+                      <0x0001>\
+                      qtn_incal_button_share_video_landscape;
+                }
+            };
+        };
+    }
+
 // ----------------------------------------------------------------
 //   
 //    r_phoneui_incall_buttons
@@ -587,7 +614,7 @@
         // r_phoneui_voice_to_video_toggle_button
         };
     }
-    
+
 // ----------------------------------------------------------------
 //   
 //    r_phoneui_two_singles_buttons
@@ -608,7 +635,27 @@
         // r_phoneui_end_all_calls_button
         };
     }    
-    
+
+// ----------------------------------------------------------------
+//
+//    r_phoneui_incall_video_share_buttons
+//    Touch buttons shown in incall situation.
+//
+// ----------------------------------------------------------------
+//
+RESOURCE BUBBLE_TOUCH_PANE r_phoneui_incall_video_share_buttons
+    {
+    buttons =
+        {
+        r_phoneui_video_share_button,
+        r_phoneui_end_call_button
+        
+        // ALTERNATIVE BUTTONS FOR REPLACE, TOTAL MAX.4 BUTTONS
+        // r_phoneui_go_to_idle_button
+        // r_phoneui_voice_to_video_toggle_button
+        };
+    }
+
 // ----------------------------------------------------------------
 //   
 //    r_phoneui_conference_buttons
--- a/phoneapp/phoneui/srcdata/phoneui.rss	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneui/srcdata/phoneui.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -35,7 +35,6 @@
 #include    <uikon.hrh>
 #include    <AiwCommon.hrh>
 #include    <AiwCommon.rh>
-#include    <aknnotifyplugin.loc>
 
 #include    <phone.loc>
 
@@ -4797,14 +4796,6 @@
 
 // ---------------------------------------------------------
 //
-RESOURCE TBUF r_notetext_use_keyguard_to_unlock
-    {
-    buf = qtn_keyg_info_note_display_lock_switch;
-    }
-
-
-// ---------------------------------------------------------
-//
 RESOURCE TBUF r_incal_remote_create_conference_text
     {
     buf = qtn_incal_info_conf_active;
@@ -6235,20 +6226,19 @@
     buf = qtn_bt_dev_address;
     }
 
-
-// ---------------------------------------------------------
-//
-//    r_phone_information_note_with_wait
+// ---------------------------------------------------------
+//
+//    r_phone_information_note_with_cba
 //    It defines note template for information notes. Text
 //    must be replaced to correct in code. Note has wait
 //    flag.
 //
 // ---------------------------------------------------------
 //
-RESOURCE DIALOG r_phone_information_note_with_wait
+RESOURCE DIALOG r_phone_information_note_with_cba
     {
     flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
-            EEikDialogFlagCbaButtons | EEikDialogFlagWait;
+            EEikDialogFlagCbaButtons;
     buttons = r_phoneui_wait_note_cba;
     items =
         {
@@ -6999,7 +6989,16 @@
     buf = text_sim_lock_active;
     }
 
-
+// -----------------------------------------------------------------------------
+//
+//    r_sim_invalid_uicc
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_sim_invalid_uicc
+    {
+    buf = text_invalid_card;
+    }      
 
 // -----------------------------------------------------------------------------
 //
@@ -7729,6 +7728,11 @@
             },
         MENU_ITEM
             {
+            command = EEasyDialingSettingsItemPlaceHolder;
+            flags = EEikMenuItemDimmed;
+            },
+        MENU_ITEM
+            {
             command = EAknCmdEditItemPlaceHolder;
             },
        MENU_ITEM
--- a/phoneapp/phoneuicontrol/bwins/phoneuicontrolu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/bwins/phoneuicontrolu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -1,11 +1,11 @@
 EXPORTS
 	?CallWaitingNoteL@CPhoneState@@IAEXH@Z @ 1 NONAME ; void CPhoneState::CallWaitingNoteL(int)
 	?HandleKeyMessageL@CPhoneStateIncoming@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 2 NONAME ; void CPhoneStateIncoming::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?EnableCallUIL@CPhoneState@@QAEXXZ @ 3 NONAME ; void CPhoneState::EnableCallUIL(void)
-	?TopAppIsDisplayedL@CPhoneState@@IBEHXZ @ 4 NONAME ; int CPhoneState::TopAppIsDisplayedL(void) const
-	?HandleKeyMessageL@CPhoneStateCallSetup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 5 NONAME ; void CPhoneStateCallSetup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?SetContextMenuL@CPhoneState@@MAEXH@Z @ 6 NONAME ; void CPhoneState::SetContextMenuL(int)
-	?CallFetchedNumberL@CPhoneStateInCall@@MAEXABVTDesC16@@@Z @ 7 NONAME ; void CPhoneStateInCall::CallFetchedNumberL(class TDesC16 const &)
+	?TopAppIsDisplayedL@CPhoneState@@IBEHXZ @ 3 NONAME ; int CPhoneState::TopAppIsDisplayedL(void) const
+	?HandleKeyMessageL@CPhoneStateCallSetup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 4 NONAME ; void CPhoneStateCallSetup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	?SetContextMenuL@CPhoneState@@MAEXH@Z @ 5 NONAME ; void CPhoneState::SetContextMenuL(int)
+	?CallFetchedNumberL@CPhoneStateInCall@@MAEXABVTDesC16@@@Z @ 6 NONAME ; void CPhoneStateInCall::CallFetchedNumberL(class TDesC16 const &)
+	?DisconnectCallL@CPhoneState@@MAEXXZ @ 7 NONAME ; void CPhoneState::DisconnectCallL(void)
 	?SetCbaL@CPhoneCbaManager@@QAEXH@Z @ 8 NONAME ; void CPhoneCbaManager::SetCbaL(int)
 	?InstanceL@CPhoneReconnectQuery@@SAPAV1@XZ @ 9 NONAME ; class CPhoneReconnectQuery * CPhoneReconnectQuery::InstanceL(void)
 	?HandlePhoneStartupL@CPhoneState@@UAEXXZ @ 10 NONAME ; void CPhoneState::HandlePhoneStartupL(void)
@@ -16,220 +16,222 @@
 	?DisplayCallTerminationNoteL@CPhoneState@@IAEXXZ @ 15 NONAME ; void CPhoneState::DisplayCallTerminationNoteL(void)
 	??0CPhoneStateInCall@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 16 NONAME ; CPhoneStateInCall::CPhoneStateInCall(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
 	?HandleNumberLongKeyPressL@CPhoneStateIdle@@IAEXXZ @ 17 NONAME ; void CPhoneStateIdle::HandleNumberLongKeyPressL(void)
-	?PhoneEngine@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@XZ @ 18 NONAME ; class MPEPhoneModel * CPhoneStateMachine::PhoneEngine(void)
-	?OpenMenuBarL@CPhoneStateCallSetup@@MAEXXZ @ 19 NONAME ; void CPhoneStateCallSetup::OpenMenuBarL(void)
-	??1CPhoneStateCallSetup@@UAE@XZ @ 20 NONAME ; CPhoneStateCallSetup::~CPhoneStateCallSetup(void)
-	?HandleEnvironmentChangeL@CPhoneUIController@@UAEXH@Z @ 21 NONAME ; void CPhoneUIController::HandleEnvironmentChangeL(int)
-	?Instance@CPhoneStateHandle@@SAPAV1@XZ @ 22 NONAME ; class CPhoneStateHandle * CPhoneStateHandle::Instance(void)
-	?HandleNumberEntryClearedL@CPhoneStateIdle@@MAEXXZ @ 23 NONAME ; void CPhoneStateIdle::HandleNumberEntryClearedL(void)
-	?DynInitMenuPaneL@CPhoneStateIncoming@@MAEXHPAVCEikMenuPane@@@Z @ 24 NONAME ; void CPhoneStateIncoming::DynInitMenuPaneL(int, class CEikMenuPane *)
-	?HandleCommandL@CPhoneState@@UAEHH@Z @ 25 NONAME ; int CPhoneState::HandleCommandL(int)
-	?StartAlsLineChangeTimerL@CPhoneState@@IAEXXZ @ 26 NONAME ; void CPhoneState::StartAlsLineChangeTimerL(void)
-	?IsNumberEntryVisibleL@CPhoneState@@QAEHXZ @ 27 NONAME ; int CPhoneState::IsNumberEntryVisibleL(void)
-	?RetainPreviousKeylockStateL@CPhoneState@@QAEXXZ @ 28 NONAME ; void CPhoneState::RetainPreviousKeylockStateL(void)
-	?HandlePhoneEngineMessageL@CPhoneStateIdle@@UAEXHH@Z @ 29 NONAME ; void CPhoneStateIdle::HandlePhoneEngineMessageL(int, int)
-	?HandleDialingL@CPhoneStateIdle@@MAEXH@Z @ 30 NONAME ; void CPhoneStateIdle::HandleDialingL(int)
-	?CustomizedDialerCbaResourceIdL@CPhoneState@@IAEHXZ @ 31 NONAME ; int CPhoneState::CustomizedDialerCbaResourceIdL(void)
-	?CaptureKeysDuringCallNotificationL@CPhoneState@@IAEXH@Z @ 32 NONAME ; void CPhoneState::CaptureKeysDuringCallNotificationL(int)
-	?HandleKeyPressDurationL@CPhoneState@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 33 NONAME ; void CPhoneState::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds)
-	?ChangeState@CPhoneStateMachine@@UAEXH@Z @ 34 NONAME ; void CPhoneStateMachine::ChangeState(int)
-	?IsSimStateNotPresentWithSecurityModeEnabled@CPhoneState@@IAEHXZ @ 35 NONAME ; int CPhoneState::IsSimStateNotPresentWithSecurityModeEnabled(void)
-	?HandlePhoneEngineMessageL@CPhoneState@@UAEXHH@Z @ 36 NONAME ; void CPhoneState::HandlePhoneEngineMessageL(int, int)
-	?HandleNumberEntryClearedL@CPhoneStateIncoming@@UAEXXZ @ 37 NONAME ; void CPhoneStateIncoming::HandleNumberEntryClearedL(void)
-	?HandleKeyEventL@CPhoneUIController@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 38 NONAME ; enum TKeyResponse CPhoneUIController::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?HandleRemConCommandL@CPhoneStateIdle@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 39 NONAME ; int CPhoneStateIdle::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
-	?HandleAudioPlayStoppedL@CPhoneStateIncoming@@MAEXXZ @ 40 NONAME ; void CPhoneStateIncoming::HandleAudioPlayStoppedL(void)
-	?HandleCenRepChangeL@CPhoneState@@UAEXABVTUid@@I@Z @ 41 NONAME ; void CPhoneState::HandleCenRepChangeL(class TUid const &, unsigned int)
-	?HandleLongHashL@CPhoneState@@UAEXXZ @ 42 NONAME ; void CPhoneState::HandleLongHashL(void)
-	?DialL@CPhoneStateIdle@@MAEXABVTDesC16@@W4TPhoneNumberType@@W4TDialInitiationMethod@1@@Z @ 43 NONAME ; void CPhoneStateIdle::DialL(class TDesC16 const &, enum TPhoneNumberType, enum CPhoneStateIdle::TDialInitiationMethod)
-	?ShowNumberBusyNoteL@CPhoneState@@IAEXXZ @ 44 NONAME ; void CPhoneState::ShowNumberBusyNoteL(void)
-	?DisconnectCallL@CPhoneState@@IAEHXZ @ 45 NONAME ; int CPhoneState::DisconnectCallL(void)
-	?HandleNumberEntryClearedL@CPhoneStateCallSetup@@MAEXXZ @ 46 NONAME ; void CPhoneStateCallSetup::HandleNumberEntryClearedL(void)
-	?HandleIdleForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 47 NONAME ; void CPhoneStateIdle::HandleIdleForegroundEventL(void)
-	?HandleDisconnectingL@CPhoneState@@IAEXH@Z @ 48 NONAME ; void CPhoneState::HandleDisconnectingL(int)
-	?HandleAudioMuteChangedL@CPhoneState@@IAEXXZ @ 49 NONAME ; void CPhoneState::HandleAudioMuteChangedL(void)
-	?HandleKeyLockEnabled@CPhoneState@@UAEXH@Z @ 50 NONAME ; void CPhoneState::HandleKeyLockEnabled(int)
-	?HandleCommandL@CPhoneStateIncoming@@UAEHH@Z @ 51 NONAME ; int CPhoneStateIncoming::HandleCommandL(int)
-	?UpdateSingleActiveCallL@CPhoneState@@IAEXH@Z @ 52 NONAME ; void CPhoneState::UpdateSingleActiveCallL(int)
-	?IsOnScreenDialerSupported@CPhoneState@@IBEHXZ @ 53 NONAME ; int CPhoneState::IsOnScreenDialerSupported(void) const
-	?SimState@CPhoneState@@IBE?AW4TPESimState@@XZ @ 54 NONAME ; enum TPESimState CPhoneState::SimState(void) const
-	?HandleKeyEventL@CPhoneStateCallSetup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 55 NONAME ; void CPhoneStateCallSetup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?SetupIdleScreenInBackgroundL@CPhoneState@@IAEXXZ @ 56 NONAME ; void CPhoneState::SetupIdleScreenInBackgroundL(void)
-	?SendGlobalWarningNoteL@CPhoneState@@IAEXH@Z @ 57 NONAME ; void CPhoneState::SendGlobalWarningNoteL(int)
-	?CompleteSatRequestL@CPhoneState@@IAEXH@Z @ 58 NONAME ; void CPhoneState::CompleteSatRequestL(int)
-	?NewL@CPhoneStateStartup@@SAPAV1@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 59 NONAME ; class CPhoneStateStartup * CPhoneStateStartup::NewL(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?LaunchNewCallQueryL@CPhoneStateInCall@@IAEXXZ @ 60 NONAME ; void CPhoneStateInCall::LaunchNewCallQueryL(void)
-	?NeedToSendToBackgroundL@CPhoneState@@IBEHXZ @ 61 NONAME ; int CPhoneState::NeedToSendToBackgroundL(void) const
+	?HandlePropertyChangedL@CPhoneStateMachine@@UAEXABVTUid@@IH@Z @ 18 NONAME ; void CPhoneStateMachine::HandlePropertyChangedL(class TUid const &, unsigned int, int)
+	?PhoneEngine@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@XZ @ 19 NONAME ; class MPEPhoneModel * CPhoneStateMachine::PhoneEngine(void)
+	?OpenMenuBarL@CPhoneStateCallSetup@@MAEXXZ @ 20 NONAME ; void CPhoneStateCallSetup::OpenMenuBarL(void)
+	??1CPhoneStateCallSetup@@UAE@XZ @ 21 NONAME ; CPhoneStateCallSetup::~CPhoneStateCallSetup(void)
+	?HandleEnvironmentChangeL@CPhoneUIController@@UAEXH@Z @ 22 NONAME ; void CPhoneUIController::HandleEnvironmentChangeL(int)
+	?SetToolbarButtonLoudspeakerEnabled@CPhoneState@@IAEXXZ @ 23 NONAME ; void CPhoneState::SetToolbarButtonLoudspeakerEnabled(void)
+	?Instance@CPhoneStateHandle@@SAPAV1@XZ @ 24 NONAME ; class CPhoneStateHandle * CPhoneStateHandle::Instance(void)
+	?HandleNumberEntryClearedL@CPhoneStateIdle@@MAEXXZ @ 25 NONAME ; void CPhoneStateIdle::HandleNumberEntryClearedL(void)
+	?DynInitMenuPaneL@CPhoneStateIncoming@@MAEXHPAVCEikMenuPane@@@Z @ 26 NONAME ; void CPhoneStateIncoming::DynInitMenuPaneL(int, class CEikMenuPane *)
+	?HandleCommandL@CPhoneState@@UAEHH@Z @ 27 NONAME ; int CPhoneState::HandleCommandL(int)
+	?StartAlsLineChangeTimerL@CPhoneState@@IAEXXZ @ 28 NONAME ; void CPhoneState::StartAlsLineChangeTimerL(void)
+	?IsNumberEntryVisibleL@CPhoneState@@QAEHXZ @ 29 NONAME ; int CPhoneState::IsNumberEntryVisibleL(void)
+	?HandlePhoneEngineMessageL@CPhoneStateIdle@@UAEXHH@Z @ 30 NONAME ; void CPhoneStateIdle::HandlePhoneEngineMessageL(int, int)
+	?HandleDialingL@CPhoneStateIdle@@MAEXH@Z @ 31 NONAME ; void CPhoneStateIdle::HandleDialingL(int)
+	?CustomizedDialerCbaResourceIdL@CPhoneState@@IAEHXZ @ 32 NONAME ; int CPhoneState::CustomizedDialerCbaResourceIdL(void)
+	?CaptureKeysDuringCallNotificationL@CPhoneState@@IAEXH@Z @ 33 NONAME ; void CPhoneState::CaptureKeysDuringCallNotificationL(int)
+	?HandleKeyPressDurationL@CPhoneState@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 34 NONAME ; void CPhoneState::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds)
+	?RegisterStateObserver@CPhoneSecurityModeObserver@@UAEXAAVMPhoneSecurityModeChangeObserver@@@Z @ 35 NONAME ; void CPhoneSecurityModeObserver::RegisterStateObserver(class MPhoneSecurityModeChangeObserver &)
+	?ChangeState@CPhoneStateMachine@@UAEXH@Z @ 36 NONAME ; void CPhoneStateMachine::ChangeState(int)
+	?NewL@CPhoneUIController@@SAPAV1@AAVCPhoneViewController@@@Z @ 37 NONAME ; class CPhoneUIController * CPhoneUIController::NewL(class CPhoneViewController &)
+	?IsSimStateNotPresentWithSecurityModeEnabled@CPhoneState@@IAEHXZ @ 38 NONAME ; int CPhoneState::IsSimStateNotPresentWithSecurityModeEnabled(void)
+	?HandlePhoneEngineMessageL@CPhoneState@@UAEXHH@Z @ 39 NONAME ; void CPhoneState::HandlePhoneEngineMessageL(int, int)
+	?HandleNumberEntryClearedL@CPhoneStateIncoming@@UAEXXZ @ 40 NONAME ; void CPhoneStateIncoming::HandleNumberEntryClearedL(void)
+	?HandleKeyEventL@CPhoneUIController@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 41 NONAME ; enum TKeyResponse CPhoneUIController::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?HandleRemConCommandL@CPhoneStateIdle@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 42 NONAME ; int CPhoneStateIdle::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
+	?HandleAudioPlayStoppedL@CPhoneStateIncoming@@MAEXXZ @ 43 NONAME ; void CPhoneStateIncoming::HandleAudioPlayStoppedL(void)
+	?HandleCenRepChangeL@CPhoneState@@UAEXABVTUid@@I@Z @ 44 NONAME ; void CPhoneState::HandleCenRepChangeL(class TUid const &, unsigned int)
+	?HandleLongHashL@CPhoneState@@UAEXXZ @ 45 NONAME ; void CPhoneState::HandleLongHashL(void)
+	?DialL@CPhoneStateIdle@@MAEXABVTDesC16@@W4TPhoneNumberType@@W4TDialInitiationMethod@1@@Z @ 46 NONAME ; void CPhoneStateIdle::DialL(class TDesC16 const &, enum TPhoneNumberType, enum CPhoneStateIdle::TDialInitiationMethod)
+	?ShowNumberBusyNoteL@CPhoneState@@IAEXXZ @ 47 NONAME ; void CPhoneState::ShowNumberBusyNoteL(void)
+	?HandleNumberEntryClearedL@CPhoneStateCallSetup@@MAEXXZ @ 48 NONAME ; void CPhoneStateCallSetup::HandleNumberEntryClearedL(void)
+	?HandleIdleForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 49 NONAME ; void CPhoneStateIdle::HandleIdleForegroundEventL(void)
+	?HandleDisconnectingL@CPhoneState@@IAEXH@Z @ 50 NONAME ; void CPhoneState::HandleDisconnectingL(int)
+	?HandleAudioMuteChangedL@CPhoneState@@IAEXXZ @ 51 NONAME ; void CPhoneState::HandleAudioMuteChangedL(void)
+	?HandleCommandL@CPhoneStateIncoming@@UAEHH@Z @ 52 NONAME ; int CPhoneStateIncoming::HandleCommandL(int)
+	?UpdateSingleActiveCallL@CPhoneState@@IAEXH@Z @ 53 NONAME ; void CPhoneState::UpdateSingleActiveCallL(int)
+	?IsOnScreenDialerSupported@CPhoneState@@IBEHXZ @ 54 NONAME ; int CPhoneState::IsOnScreenDialerSupported(void) const
+	?SimState@CPhoneState@@IBE?AW4TPESimState@@XZ @ 55 NONAME ; enum TPESimState CPhoneState::SimState(void) const
+	?HandleKeyEventL@CPhoneStateCallSetup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 56 NONAME ; void CPhoneStateCallSetup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?SetupIdleScreenInBackgroundL@CPhoneState@@IAEXXZ @ 57 NONAME ; void CPhoneState::SetupIdleScreenInBackgroundL(void)
+	?SendGlobalWarningNoteL@CPhoneState@@IAEXH@Z @ 58 NONAME ; void CPhoneState::SendGlobalWarningNoteL(int)
+	?CompleteSatRequestL@CPhoneState@@IAEXH@Z @ 59 NONAME ; void CPhoneState::CompleteSatRequestL(int)
+	?NewL@CPhoneStateStartup@@SAPAV1@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 60 NONAME ; class CPhoneStateStartup * CPhoneStateStartup::NewL(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?LaunchNewCallQueryL@CPhoneStateInCall@@IAEXXZ @ 61 NONAME ; void CPhoneStateInCall::LaunchNewCallQueryL(void)
 	?SetCallHeaderTextsForCallComingInL@CPhoneState@@IAEXHHPAVTPhoneCmdParamCallHeaderData@@@Z @ 62 NONAME ; void CPhoneState::SetCallHeaderTextsForCallComingInL(int, int, class TPhoneCmdParamCallHeaderData *)
-	?IsSimOk@CPhoneState@@QAEHXZ @ 63 NONAME ; int CPhoneState::IsSimOk(void)
-	?ClearNumberEntryContentCache@CPhoneState@@IAEXXZ @ 64 NONAME ; void CPhoneState::ClearNumberEntryContentCache(void)
-	?HandleCommandL@CPhoneStateIdle@@UAEHH@Z @ 65 NONAME ; int CPhoneStateIdle::HandleCommandL(int)
-	?ViewCommandHandle@CPhoneStateHandle@@QAEPAVMPhoneViewCommandHandle@@XZ @ 66 NONAME ; class MPhoneViewCommandHandle * CPhoneStateHandle::ViewCommandHandle(void)
-	?DialMultimediaCallL@CPhoneStateIdle@@IAEXXZ @ 67 NONAME ; void CPhoneStateIdle::DialMultimediaCallL(void)
-	?DisconnectOutgoingCallL@CPhoneStateInCall@@IAEXXZ @ 68 NONAME ; void CPhoneStateInCall::DisconnectOutgoingCallL(void)
-	?IsKeyLockOn@CPhoneState@@MBEHXZ @ 69 NONAME ; int CPhoneState::IsKeyLockOn(void) const
-	??1CPhoneStateInCall@@UAE@XZ @ 70 NONAME ; CPhoneStateInCall::~CPhoneStateInCall(void)
-	?CustomizedDialerMenuResourceIdL@CPhoneState@@IAEHXZ @ 71 NONAME ; int CPhoneState::CustomizedDialerMenuResourceIdL(void)
-	?ShowReconnectQueryL@CPhoneReconnectQuery@@QAEXH@Z @ 72 NONAME ; void CPhoneReconnectQuery::ShowReconnectQueryL(int)
-	?UpdateSilenceButtonDimming@CPhoneState@@IAEXXZ @ 73 NONAME ; void CPhoneState::UpdateSilenceButtonDimming(void)
-	?SetNumberEntryVisibilityL@CPhoneState@@IAEXH@Z @ 74 NONAME ; void CPhoneState::SetNumberEntryVisibilityL(int)
-	?HandleError@CPhoneUIController@@UAEXABUTPEErrorInfo@@@Z @ 75 NONAME ; void CPhoneUIController::HandleError(struct TPEErrorInfo const &)
-	?ConstructL@CPhoneStateInCall@@MAEXXZ @ 76 NONAME ; void CPhoneStateInCall::ConstructL(void)
-	?OnlyHashInNumberEntryL@CPhoneStateIdle@@MAEXXZ @ 77 NONAME ; void CPhoneStateIdle::OnlyHashInNumberEntryL(void)
-	?IsVideoCallRingingL@CPhoneStateInCall@@MAEHXZ @ 78 NONAME ; int CPhoneStateInCall::IsVideoCallRingingL(void)
-	?HandlePhoneForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 79 NONAME ; void CPhoneStateIdle::HandlePhoneForegroundEventL(void)
-	?HandleHoldSwitchL@CPhoneState@@QAEXXZ @ 80 NONAME ; void CPhoneState::HandleHoldSwitchL(void)
-	?CloseDtmfQueryL@CPhoneStateInCall@@IAEXXZ @ 81 NONAME ; void CPhoneStateInCall::CloseDtmfQueryL(void)
-	?DynInitMenuBarL@CPhoneState@@UAEXHPAVCEikMenuBar@@@Z @ 82 NONAME ; void CPhoneState::DynInitMenuBarL(int, class CEikMenuBar *)
-	?HandleDtmfKeyToneL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 83 NONAME ; void CPhoneStateStartup::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode)
-	?HandleNumberEntryEdited@CPhoneState@@MAEXXZ @ 84 NONAME ; void CPhoneState::HandleNumberEntryEdited(void)
-	?ShowTextQueryL@CPhoneState@@IAEXHHHPAVTDes16@@H@Z @ 85 NONAME ; void CPhoneState::ShowTextQueryL(int, int, int, class TDes16 *, int)
-	?DialMultimediaCallL@CPhoneState@@IAEXXZ @ 86 NONAME ; void CPhoneState::DialMultimediaCallL(void)
-	?NewL@CPhoneUIController@@SAPAV1@PAVMPhoneViewCommandHandle@@@Z @ 87 NONAME ; class CPhoneUIController * CPhoneUIController::NewL(class MPhoneViewCommandHandle *)
-	?HandleCreateNumberEntryL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 88 NONAME ; void CPhoneStateStartup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode)
-	?CheckDisableHWKeysAndCallUIL@CPhoneState@@QAEXXZ @ 89 NONAME ; void CPhoneState::CheckDisableHWKeysAndCallUIL(void)
+	?HandlePhoneEngineMessageL@CPhoneStateMachine@@UAEXHH@Z @ 63 NONAME ; void CPhoneStateMachine::HandlePhoneEngineMessageL(int, int)
+	?IsSecurityMode@CPhoneSecurityModeObserver@@UAEHXZ @ 64 NONAME ; int CPhoneSecurityModeObserver::IsSecurityMode(void)
+	?IsSimOk@CPhoneState@@QAEHXZ @ 65 NONAME ; int CPhoneState::IsSimOk(void)
+	?ClearNumberEntryContentCache@CPhoneState@@IAEXXZ @ 66 NONAME ; void CPhoneState::ClearNumberEntryContentCache(void)
+	?HandleCommandL@CPhoneStateIdle@@UAEHH@Z @ 67 NONAME ; int CPhoneStateIdle::HandleCommandL(int)
+	?ViewCommandHandle@CPhoneStateHandle@@QAEPAVMPhoneViewCommandHandle@@XZ @ 68 NONAME ; class MPhoneViewCommandHandle * CPhoneStateHandle::ViewCommandHandle(void)
+	?DialMultimediaCallL@CPhoneStateIdle@@IAEXXZ @ 69 NONAME ; void CPhoneStateIdle::DialMultimediaCallL(void)
+	?DisconnectOutgoingCallL@CPhoneStateInCall@@IAEXXZ @ 70 NONAME ; void CPhoneStateInCall::DisconnectOutgoingCallL(void)
+	?IsKeyLockOn@CPhoneState@@MBEHXZ @ 71 NONAME ; int CPhoneState::IsKeyLockOn(void) const
+	??1CPhoneStateInCall@@UAE@XZ @ 72 NONAME ; CPhoneStateInCall::~CPhoneStateInCall(void)
+	?CustomizedDialerMenuResourceIdL@CPhoneState@@IAEHXZ @ 73 NONAME ; int CPhoneState::CustomizedDialerMenuResourceIdL(void)
+	?ShowReconnectQueryL@CPhoneReconnectQuery@@QAEXH@Z @ 74 NONAME ; void CPhoneReconnectQuery::ShowReconnectQueryL(int)
+	?UpdateSilenceButtonDimming@CPhoneState@@IAEXXZ @ 75 NONAME ; void CPhoneState::UpdateSilenceButtonDimming(void)
+	?SetNumberEntryVisibilityL@CPhoneState@@IAEXH@Z @ 76 NONAME ; void CPhoneState::SetNumberEntryVisibilityL(int)
+	?HandleError@CPhoneUIController@@UAEXABUTPEErrorInfo@@@Z @ 77 NONAME ; void CPhoneUIController::HandleError(struct TPEErrorInfo const &)
+	?ConstructL@CPhoneStateInCall@@MAEXXZ @ 78 NONAME ; void CPhoneStateInCall::ConstructL(void)
+	?OnlyHashInNumberEntryL@CPhoneStateIdle@@MAEXXZ @ 79 NONAME ; void CPhoneStateIdle::OnlyHashInNumberEntryL(void)
+	?IsVideoCallRingingL@CPhoneStateInCall@@MAEHXZ @ 80 NONAME ; int CPhoneStateInCall::IsVideoCallRingingL(void)
+	?IsAutolockEnabled@CPhoneSecurityModeObserver@@UAEHXZ @ 81 NONAME ; int CPhoneSecurityModeObserver::IsAutolockEnabled(void)
+	?HandlePhoneForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 82 NONAME ; void CPhoneStateIdle::HandlePhoneForegroundEventL(void)
+	?CloseDtmfQueryL@CPhoneStateInCall@@IAEXXZ @ 83 NONAME ; void CPhoneStateInCall::CloseDtmfQueryL(void)
+	?DynInitMenuBarL@CPhoneState@@UAEXHPAVCEikMenuBar@@@Z @ 84 NONAME ; void CPhoneState::DynInitMenuBarL(int, class CEikMenuBar *)
+	?HandleDtmfKeyToneL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 85 NONAME ; void CPhoneStateStartup::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode)
+	?HandleNumberEntryEdited@CPhoneState@@MAEXXZ @ 86 NONAME ; void CPhoneState::HandleNumberEntryEdited(void)
+	?ShowTextQueryL@CPhoneState@@IAEXHHHPAVTDes16@@H@Z @ 87 NONAME ; void CPhoneState::ShowTextQueryL(int, int, int, class TDes16 *, int)
+	?DialMultimediaCallL@CPhoneState@@IAEXXZ @ 88 NONAME ; void CPhoneState::DialMultimediaCallL(void)
+	?HandleCreateNumberEntryL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 89 NONAME ; void CPhoneStateStartup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode)
 	?IsMenuBarVisibleL@CPhoneState@@UBEHXZ @ 90 NONAME ; int CPhoneState::IsMenuBarVisibleL(void) const
 	?HandleErrorL@CPhoneState@@UAEXABUTPEErrorInfo@@@Z @ 91 NONAME ; void CPhoneState::HandleErrorL(struct TPEErrorInfo const &)
 	?HandleCommandL@CPhoneStateCallSetup@@UAEHH@Z @ 92 NONAME ; int CPhoneStateCallSetup::HandleCommandL(int)
-	?HandleAudioOutputChangedL@CPhoneState@@IAEXXZ @ 93 NONAME ; void CPhoneState::HandleAudioOutputChangedL(void)
-	??1CPhoneUIController@@UAE@XZ @ 94 NONAME ; CPhoneUIController::~CPhoneUIController(void)
-	?HandleKeyEventL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 95 NONAME ; void CPhoneState::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?UpdateIncomingContextMenuL@CPhoneState@@MAEXH@Z @ 96 NONAME ; void CPhoneState::UpdateIncomingContextMenuL(int)
-	?OpenMenuBarL@CPhoneStateInCall@@MAEXXZ @ 97 NONAME ; void CPhoneStateInCall::OpenMenuBarL(void)
-	?UpdateIncomingCbaL@CPhoneCbaManager@@QAEXH@Z @ 98 NONAME ; void CPhoneCbaManager::UpdateIncomingCbaL(int)
-	?SetTouchPaneButtonDisabled@CPhoneState@@IAEXH@Z @ 99 NONAME ; void CPhoneState::SetTouchPaneButtonDisabled(int)
-	?ConstructL@CPhoneStateIncoming@@MAEXXZ @ 100 NONAME ; void CPhoneStateIncoming::ConstructL(void)
-	?CreatePhoneEngineL@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@AAVMEngineMonitor@@@Z @ 101 NONAME ; class MPEPhoneModel * CPhoneStateMachine::CreatePhoneEngineL(class MEngineMonitor &)
-	?SetTouchPaneButtons@CPhoneState@@IAEXH@Z @ 102 NONAME ; void CPhoneState::SetTouchPaneButtons(int)
-	?HandleIdleForegroundEventL@CPhoneStateStartup@@UAEXXZ @ 103 NONAME ; void CPhoneStateStartup::HandleIdleForegroundEventL(void)
-	?CallFromNumberEntryL@CPhoneState@@IAEXXZ @ 104 NONAME ; void CPhoneState::CallFromNumberEntryL(void)
-	?UpdateCbaL@CPhoneCbaManager@@QAEXH@Z @ 105 NONAME ; void CPhoneCbaManager::UpdateCbaL(int)
-	?IsVideoCall@CPhoneState@@IAEHH@Z @ 106 NONAME ; int CPhoneState::IsVideoCall(int)
-	?IsSwivelClosed@CPhoneState@@QBEHXZ @ 107 NONAME ; int CPhoneState::IsSwivelClosed(void) const
-	?CloseCustomizedDialerL@CPhoneState@@QAEXXZ @ 108 NONAME ; void CPhoneState::CloseCustomizedDialerL(void)
-	?HandlePhoneForegroundEventL@CPhoneUIController@@UAEXXZ @ 109 NONAME ; void CPhoneUIController::HandlePhoneForegroundEventL(void)
-	?CheckIfRestoreNEContentAfterDtmfDialer@CPhoneState@@IAEXXZ @ 110 NONAME ; void CPhoneState::CheckIfRestoreNEContentAfterDtmfDialer(void)
-	?UpdateInCallContextMenuL@CPhoneState@@UAEXXZ @ 111 NONAME ; void CPhoneState::UpdateInCallContextMenuL(void)
-	?HandleNumericKeyEventL@CPhoneState@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 112 NONAME ; void CPhoneState::HandleNumericKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?SendGlobalErrorNoteL@CPhoneState@@QAEXH@Z @ 113 NONAME ; void CPhoneState::SendGlobalErrorNoteL(int)
-	?IsAutoLockOn@CPhoneState@@UBEHXZ @ 114 NONAME ; int CPhoneState::IsAutoLockOn(void) const
-	?UpdateCbaL@CPhoneStateCallSetup@@MAEXH@Z @ 115 NONAME ; void CPhoneStateCallSetup::UpdateCbaL(int)
-	?RestoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 116 NONAME ; void CPhoneState::RestoreNumberEntryContentL(void)
-	?HandleKeyEventL@CPhoneStateIdle@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 117 NONAME ; void CPhoneStateIdle::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?IsNumberEntryContentStored@CPhoneState@@IAEHXZ @ 118 NONAME ; int CPhoneState::IsNumberEntryContentStored(void)
-	?IsVideoCallActiveL@CPhoneStateInCall@@MAEHXZ @ 119 NONAME ; int CPhoneStateInCall::IsVideoCallActiveL(void)
-	?HandlePhoneStartupL@CPhoneStateStartup@@UAEXXZ @ 120 NONAME ; void CPhoneStateStartup::HandlePhoneStartupL(void)
-	?DialVoiceCallL@CPhoneState@@IAEXXZ @ 121 NONAME ; void CPhoneState::DialVoiceCallL(void)
-	?EndUiUpdate@CPhoneState@@IAEXXZ @ 122 NONAME ; void CPhoneState::EndUiUpdate(void)
-	?HandleKeyPressDurationL@CPhoneStateIncoming@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 123 NONAME ; void CPhoneStateIncoming::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds)
-	?UpdateInCallCbaL@CPhoneStateInCall@@MAEXXZ @ 124 NONAME ; void CPhoneStateInCall::UpdateInCallCbaL(void)
-	?EndTransEffect@CPhoneState@@QAEXXZ @ 125 NONAME ; void CPhoneState::EndTransEffect(void)
-	?HandleEnvironmentChangeL@CPhoneState@@UAEXH@Z @ 126 NONAME ; void CPhoneState::HandleEnvironmentChangeL(int)
-	?HandleKeyMessageL@CPhoneStateInCall@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 127 NONAME ; void CPhoneStateInCall::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?SetRingingTonePlaybackL@CPhoneState@@IAEXH@Z @ 128 NONAME ; void CPhoneState::SetRingingTonePlaybackL(int)
-	?ProcessCommandL@CPhoneState@@UAEHH@Z @ 129 NONAME ; int CPhoneState::ProcessCommandL(int)
-	?BeginUiUpdateLC@CPhoneState@@IAEXXZ @ 130 NONAME ; void CPhoneState::BeginUiUpdateLC(void)
-	?DecreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 131 NONAME ; void CPhoneState::DecreaseAudioVolumeL(void)
-	?PhoneEngineInfo@CPhoneStateMachine@@UAEPAVMPEEngineInfo@@XZ @ 132 NONAME ; class MPEEngineInfo * CPhoneStateMachine::PhoneEngineInfo(void)
-	?CreateNumberEntryL@CPhoneStateInCall@@IAEXXZ @ 133 NONAME ; void CPhoneStateInCall::CreateNumberEntryL(void)
-	?HandleSystemEventL@CPhoneUIController@@UAEXABVTWsEvent@@@Z @ 134 NONAME ; void CPhoneUIController::HandleSystemEventL(class TWsEvent const &)
-	?DynInitMenuPaneL@CPhoneUIController@@UAEXHPAVCEikMenuPane@@@Z @ 135 NONAME ; void CPhoneUIController::DynInitMenuPaneL(int, class CEikMenuPane *)
-	??0CPhoneStateStartup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 136 NONAME ; CPhoneStateStartup::CPhoneStateStartup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?GetRemoteInfoDataL@CPhoneState@@IAEXHAAVTDes16@@@Z @ 137 NONAME ; void CPhoneState::GetRemoteInfoDataL(int, class TDes16 &)
-	?SetDivertIndication@CPhoneState@@UAEXH@Z @ 138 NONAME ; void CPhoneState::SetDivertIndication(int)
-	?UpdateCbaL@CPhoneStateInCall@@MAEXH@Z @ 139 NONAME ; void CPhoneStateInCall::UpdateCbaL(int)
-	?SetCallId@CPhoneStateMachine@@UAEXH@Z @ 140 NONAME ; void CPhoneStateMachine::SetCallId(int)
-	?ProcessCommandL@CPhoneUIController@@UAEHH@Z @ 141 NONAME ; int CPhoneUIController::ProcessCommandL(int)
-	?DisplayHeaderForCallComingInL@CPhoneState@@IAEXHH@Z @ 142 NONAME ; void CPhoneState::DisplayHeaderForCallComingInL(int, int)
-	??0CPhoneStateIdle@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 143 NONAME ; CPhoneStateIdle::CPhoneStateIdle(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?SendPhoneEngineMessage@CPhoneStateMachine@@UAEXH@Z @ 144 NONAME ; void CPhoneStateMachine::SendPhoneEngineMessage(int)
-	??0CPhoneStateCallSetup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 145 NONAME ; CPhoneStateCallSetup::CPhoneStateCallSetup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	??0CPhoneState@@QAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 146 NONAME ; CPhoneState::CPhoneState(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?HandleDtmfKeyToneL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 147 NONAME ; void CPhoneState::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode)
-	?HandleKeyMessageL@CPhoneStateIdle@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 148 NONAME ; void CPhoneStateIdle::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?HandleForegroundEventL@CPhoneUIController@@UAEXH@Z @ 149 NONAME ; void CPhoneUIController::HandleForegroundEventL(int)
-	?HandleSendCommandL@CPhoneStateIdle@@MAEXXZ @ 150 NONAME ; void CPhoneStateIdle::HandleSendCommandL(void)
-	?HandleCommandL@CPhoneUIController@@UAEHH@Z @ 151 NONAME ; int CPhoneUIController::HandleCommandL(int)
-	?HandleCreateNumberEntryL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 152 NONAME ; void CPhoneState::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode)
-	?DisableHWKeysL@CPhoneState@@QAEXXZ @ 153 NONAME ; void CPhoneState::DisableHWKeysL(void)
-	?DisplayHeaderForOutgoingCallL@CPhoneState@@IAEXH@Z @ 154 NONAME ; void CPhoneState::DisplayHeaderForOutgoingCallL(int)
-	?GetBlockedKeyList@CPhoneState@@UBEABV?$RArray@H@@XZ @ 155 NONAME ; class RArray<int> const & CPhoneState::GetBlockedKeyList(void) const
-	?HandlePhoneEngineMessageL@CPhoneStateInCall@@UAEXHH@Z @ 156 NONAME ; void CPhoneStateInCall::HandlePhoneEngineMessageL(int, int)
-	?IsSpeedDialNumber@CPhoneStateIdle@@IBEHABVTDesC16@@@Z @ 157 NONAME ; int CPhoneStateIdle::IsSpeedDialNumber(class TDesC16 const &) const
-	?IsNumberEntryUsedL@CPhoneState@@UAEHXZ @ 158 NONAME ; int CPhoneState::IsNumberEntryUsedL(void)
-	?PhoneStorage@CPhoneStateMachine@@UAEPAVMPhoneStorage@@XZ @ 159 NONAME ; class MPhoneStorage * CPhoneStateMachine::PhoneStorage(void)
-	??1CPhoneState@@UAE@XZ @ 160 NONAME ; CPhoneState::~CPhoneState(void)
-	?HandleCreateNumberEntryL@CPhoneStateCallSetup@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 161 NONAME ; void CPhoneStateCallSetup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode)
-	?HandlePhoneEngineMessageL@CPhoneStateCallSetup@@UAEXHH@Z @ 162 NONAME ; void CPhoneStateCallSetup::HandlePhoneEngineMessageL(int, int)
-	?HandlePhoneFocusLostEventL@CPhoneState@@UAEXXZ @ 163 NONAME ; void CPhoneState::HandlePhoneFocusLostEventL(void)
-	??1CPhoneStateMachine@@UAE@XZ @ 164 NONAME ; CPhoneStateMachine::~CPhoneStateMachine(void)
-	?HandleIdleForegroundEventL@CPhoneState@@UAEXXZ @ 165 NONAME ; void CPhoneState::HandleIdleForegroundEventL(void)
-	?DynInitMenuPaneL@CPhoneState@@UAEXHPAVCEikMenuPane@@@Z @ 166 NONAME ; void CPhoneState::DynInitMenuPaneL(int, class CEikMenuPane *)
-	?IsDTMFEditorVisibleL@CPhoneState@@IBEHXZ @ 167 NONAME ; int CPhoneState::IsDTMFEditorVisibleL(void) const
-	?ConstructL@CPhoneStateCallSetup@@MAEXXZ @ 168 NONAME ; void CPhoneStateCallSetup::ConstructL(void)
-	?BeginTransEffectLC@CPhoneState@@QAEXW4TStateTransEffectType@@@Z @ 169 NONAME ; void CPhoneState::BeginTransEffectLC(enum TStateTransEffectType)
-	?HandleMessage@CPhoneUIController@@UAEXHH@Z @ 170 NONAME ; void CPhoneUIController::HandleMessage(int, int)
-	?HandleSystemEventL@CPhoneState@@UAEXABVTWsEvent@@@Z @ 171 NONAME ; void CPhoneState::HandleSystemEventL(class TWsEvent const &)
-	?DisplayCallSetupL@CPhoneStateIdle@@IAEXH@Z @ 172 NONAME ; void CPhoneStateIdle::DisplayCallSetupL(int)
-	?ConstructL@CPhoneStateStartup@@MAEXXZ @ 173 NONAME ; void CPhoneStateStartup::ConstructL(void)
-	?HandleKeyMessageL@CPhoneStateStartup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 174 NONAME ; void CPhoneStateStartup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?ShowNoteL@CPhoneState@@IAEXH@Z @ 175 NONAME ; void CPhoneState::ShowNoteL(int)
-	?HandlePropertyChangedL@CPhoneState@@UAEXABVTUid@@IH@Z @ 176 NONAME ; void CPhoneState::HandlePropertyChangedL(class TUid const &, unsigned int, int)
-	?IsAnyQueryActiveL@CPhoneState@@QAEHXZ @ 177 NONAME ; int CPhoneState::IsAnyQueryActiveL(void)
-	?State@CPhoneStateMachine@@UAEPAVMPhoneState@@XZ @ 178 NONAME ; class MPhoneState * CPhoneStateMachine::State(void)
-	?SetHandsfreeModeL@CPhoneState@@IAEXH@Z @ 179 NONAME ; void CPhoneState::SetHandsfreeModeL(int)
-	?IsCustomizedDialerVisibleL@CPhoneState@@QBEHXZ @ 180 NONAME ; int CPhoneState::IsCustomizedDialerVisibleL(void) const
-	?UpdateInCallCbaL@CPhoneStateCallSetup@@MAEXXZ @ 181 NONAME ; void CPhoneStateCallSetup::UpdateInCallCbaL(void)
-	?HandleNumberEntryClearedL@CPhoneStateInCall@@MAEXXZ @ 182 NONAME ; void CPhoneStateInCall::HandleNumberEntryClearedL(void)
-	??0CPhoneStateIncoming@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 183 NONAME ; CPhoneStateIncoming::CPhoneStateIncoming(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	??1CPhoneStateIncoming@@UAE@XZ @ 184 NONAME ; CPhoneStateIncoming::~CPhoneStateIncoming(void)
-	?HandleKeyLockEnabled@CPhoneUIController@@UAEXH@Z @ 185 NONAME ; void CPhoneUIController::HandleKeyLockEnabled(int)
-	?DisableCallUIL@CPhoneState@@QAEXXZ @ 186 NONAME ; void CPhoneState::DisableCallUIL(void)
-	?DeleteTouchPaneButtons@CPhoneState@@IAEXXZ @ 187 NONAME ; void CPhoneState::DeleteTouchPaneButtons(void)
-	?ProcessCommandL@CPhoneStateIdle@@UAEHH@Z @ 188 NONAME ; int CPhoneStateIdle::ProcessCommandL(int)
-	?IsNoteVisibleL@CPhoneState@@MAEHXZ @ 189 NONAME ; int CPhoneState::IsNoteVisibleL(void)
-	?DynInitMenuBarL@CPhoneUIController@@UAEXHPAVCEikMenuBar@@@Z @ 190 NONAME ; void CPhoneUIController::DynInitMenuBarL(int, class CEikMenuBar *)
-	?IsAlphanumericSupportedAndCharInput@CPhoneState@@MAEHABUTKeyEvent@@@Z @ 191 NONAME ; int CPhoneState::IsAlphanumericSupportedAndCharInput(struct TKeyEvent const &)
-	?HandlePhoneEngineMessageL@CPhoneStateStartup@@UAEXHH@Z @ 192 NONAME ; void CPhoneStateStartup::HandlePhoneEngineMessageL(int, int)
-	?HandleKeyEventL@CPhoneStateIncoming@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 193 NONAME ; void CPhoneStateIncoming::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?HandleKeyEventL@CPhoneStateStartup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 194 NONAME ; void CPhoneStateStartup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?HandleNumberEntryClearedL@CPhoneState@@MAEXXZ @ 195 NONAME ; void CPhoneState::HandleNumberEntryClearedL(void)
-	?OnlyHashInNumberEntryL@CPhoneState@@MAEXXZ @ 196 NONAME ; void CPhoneState::OnlyHashInNumberEntryL(void)
-	?IncreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 197 NONAME ; void CPhoneState::IncreaseAudioVolumeL(void)
-	?ConstructL@CPhoneStateIdle@@MAEXXZ @ 198 NONAME ; void CPhoneStateIdle::ConstructL(void)
-	?CheckIfShowCallTerminationNote@CPhoneState@@MAEHXZ @ 199 NONAME ; int CPhoneState::CheckIfShowCallTerminationNote(void)
-	?SetCallHeaderType@CPhoneState@@IAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 200 NONAME ; void CPhoneState::SetCallHeaderType(enum CBubbleManager::TPhoneCallTypeFlags)
-	?SendGlobalInfoNoteL@CPhoneState@@QAEXH@Z @ 201 NONAME ; void CPhoneState::SendGlobalInfoNoteL(int)
-	?DisplayIdleScreenL@CPhoneState@@IAEXXZ @ 202 NONAME ; void CPhoneState::DisplayIdleScreenL(void)
-	?StartShowSecurityNoteL@CPhoneState@@IAEXXZ @ 203 NONAME ; void CPhoneState::StartShowSecurityNoteL(void)
-	?StoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 204 NONAME ; void CPhoneState::StoreNumberEntryContentL(void)
-	?SetBTHandsfreeModeL@CPhoneState@@IAEXH@Z @ 205 NONAME ; void CPhoneState::SetBTHandsfreeModeL(int)
-	?HandlePhoneEngineMessageL@CPhoneStateIncoming@@UAEXHH@Z @ 206 NONAME ; void CPhoneStateIncoming::HandlePhoneEngineMessageL(int, int)
-	?SetDefaultFlagsL@CPhoneState@@IAEXXZ @ 207 NONAME ; void CPhoneState::SetDefaultFlagsL(void)
-	?HandleCommandL@CPhoneStateInCall@@UAEHH@Z @ 208 NONAME ; int CPhoneStateInCall::HandleCommandL(int)
-	?DialVoiceCallL@CPhoneStateIdle@@IAEXXZ @ 209 NONAME ; void CPhoneStateIdle::DialVoiceCallL(void)
-	?UpdateRemoteInfoDataL@CPhoneState@@IAEXH@Z @ 210 NONAME ; void CPhoneState::UpdateRemoteInfoDataL(int)
-	?GetRingingCallL@CPhoneStateInCall@@MAEHXZ @ 211 NONAME ; int CPhoneStateInCall::GetRingingCallL(void)
-	?HandleIdleForegroundEventL@CPhoneUIController@@UAEXXZ @ 212 NONAME ; void CPhoneUIController::HandleIdleForegroundEventL(void)
-	?HandlePhoneForegroundEventL@CPhoneState@@UAEXXZ @ 213 NONAME ; void CPhoneState::HandlePhoneForegroundEventL(void)
-	?HandleForegroundEventL@CPhoneState@@UAEXH@Z @ 214 NONAME ; void CPhoneState::HandleForegroundEventL(int)
-	?DisplayIncomingCallL@CPhoneStateIdle@@IAEXH@Z @ 215 NONAME ; void CPhoneStateIdle::DisplayIncomingCallL(int)
-	?HandleRemConCommandL@CPhoneState@@UAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 216 NONAME ; int CPhoneState::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
-	??1CPhoneStateIdle@@UAE@XZ @ 217 NONAME ; CPhoneStateIdle::~CPhoneStateIdle(void)
-	?PhoneNumberFromEntryLC@CPhoneState@@IAEPAVHBufC16@@XZ @ 218 NONAME ; class HBufC16 * CPhoneState::PhoneNumberFromEntryLC(void)
-	?BaseConstructL@CPhoneState@@QAEXXZ @ 219 NONAME ; void CPhoneState::BaseConstructL(void)
-	?HandlePhoneStartupL@CPhoneUIController@@UAEXXZ @ 220 NONAME ; void CPhoneUIController::HandlePhoneStartupL(void)
-	?SpeedDialL@CPhoneStateIdle@@IAEXABIW4TDialInitiationMethod@1@@Z @ 221 NONAME ; void CPhoneStateIdle::SpeedDialL(unsigned int const &, enum CPhoneStateIdle::TDialInitiationMethod)
-	?SetTouchPaneButtonEnabled@CPhoneState@@IAEXH@Z @ 222 NONAME ; void CPhoneState::SetTouchPaneButtonEnabled(int)
-	?SetPhoneEngine@CPhoneStateMachine@@UAEXPAVMPEPhoneModel@@@Z @ 223 NONAME ; void CPhoneStateMachine::SetPhoneEngine(class MPEPhoneModel *)
-	?SpeedDialCanceledL@CPhoneStateIdle@@IAEXABI@Z @ 224 NONAME ; void CPhoneStateIdle::SpeedDialCanceledL(unsigned int const &)
-	?CloseDTMFEditorL@CPhoneState@@IAEXXZ @ 225 NONAME ; void CPhoneState::CloseDTMFEditorL(void)
-	?SetTouchPaneVisible@CPhoneState@@IAEXH@Z @ 226 NONAME ; void CPhoneState::SetTouchPaneVisible(int)
-	?HandlePhoneFocusLostEventL@CPhoneUIController@@UAEXXZ @ 227 NONAME ; void CPhoneUIController::HandlePhoneFocusLostEventL(void)
-	?HandleKeyLockEnabled@CPhoneStateIncoming@@UAEXH@Z @ 228 NONAME ; void CPhoneStateIncoming::HandleKeyLockEnabled(int)
-	??0CPhoneStateMachine@@IAE@PAVMPhoneViewCommandHandle@@@Z @ 229 NONAME ; CPhoneStateMachine::CPhoneStateMachine(class MPhoneViewCommandHandle *)
-	??1CPhoneStateStartup@@UAE@XZ @ 230 NONAME ; CPhoneStateStartup::~CPhoneStateStartup(void)
-	?HandleKeyMessageL@CPhoneState@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 231 NONAME ; void CPhoneState::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?SetToolbarButtonLoudspeakerEnabled@CPhoneState@@IAEXXZ @ 232 NONAME ; void CPhoneState::SetToolbarButtonLoudspeakerEnabled(void)
-	?SetToolbarDimming@CPhoneState@@IAEXH@Z @ 233 NONAME ; void CPhoneState::SetToolbarDimming(int)
+	?SecurityMode@CPhoneStateMachine@@UAEPAVMPhoneSecurityModeObserver@@XZ @ 93 NONAME ; class MPhoneSecurityModeObserver * CPhoneStateMachine::SecurityMode(void)
+	?HandleAudioOutputChangedL@CPhoneState@@IAEXXZ @ 94 NONAME ; void CPhoneState::HandleAudioOutputChangedL(void)
+	??1CPhoneUIController@@UAE@XZ @ 95 NONAME ; CPhoneUIController::~CPhoneUIController(void)
+	?HandleKeyEventL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 96 NONAME ; void CPhoneState::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?UpdateIncomingContextMenuL@CPhoneState@@MAEXH@Z @ 97 NONAME ; void CPhoneState::UpdateIncomingContextMenuL(int)
+	?OpenMenuBarL@CPhoneStateInCall@@MAEXXZ @ 98 NONAME ; void CPhoneStateInCall::OpenMenuBarL(void)
+	?UpdateIncomingCbaL@CPhoneCbaManager@@QAEXH@Z @ 99 NONAME ; void CPhoneCbaManager::UpdateIncomingCbaL(int)
+	?SetTouchPaneButtonDisabled@CPhoneState@@IAEXH@Z @ 100 NONAME ; void CPhoneState::SetTouchPaneButtonDisabled(int)
+	?ConstructL@CPhoneStateIncoming@@MAEXXZ @ 101 NONAME ; void CPhoneStateIncoming::ConstructL(void)
+	?CreatePhoneEngineL@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@AAVMEngineMonitor@@@Z @ 102 NONAME ; class MPEPhoneModel * CPhoneStateMachine::CreatePhoneEngineL(class MEngineMonitor &)
+	?SetTouchPaneButtons@CPhoneState@@IAEXH@Z @ 103 NONAME ; void CPhoneState::SetTouchPaneButtons(int)
+	?HandleIdleForegroundEventL@CPhoneStateStartup@@UAEXXZ @ 104 NONAME ; void CPhoneStateStartup::HandleIdleForegroundEventL(void)
+	?CallFromNumberEntryL@CPhoneState@@IAEXXZ @ 105 NONAME ; void CPhoneState::CallFromNumberEntryL(void)
+	?UpdateCbaL@CPhoneCbaManager@@QAEXH@Z @ 106 NONAME ; void CPhoneCbaManager::UpdateCbaL(int)
+	?IsVideoCall@CPhoneState@@IAEHH@Z @ 107 NONAME ; int CPhoneState::IsVideoCall(int)
+	?IsSwivelClosed@CPhoneState@@QBEHXZ @ 108 NONAME ; int CPhoneState::IsSwivelClosed(void) const
+	?CloseCustomizedDialerL@CPhoneState@@QAEXXZ @ 109 NONAME ; void CPhoneState::CloseCustomizedDialerL(void)
+	?HandlePhoneForegroundEventL@CPhoneUIController@@UAEXXZ @ 110 NONAME ; void CPhoneUIController::HandlePhoneForegroundEventL(void)
+	?CheckIfRestoreNEContentAfterDtmfDialer@CPhoneState@@IAEXXZ @ 111 NONAME ; void CPhoneState::CheckIfRestoreNEContentAfterDtmfDialer(void)
+	?UpdateInCallContextMenuL@CPhoneState@@UAEXXZ @ 112 NONAME ; void CPhoneState::UpdateInCallContextMenuL(void)
+	?HandleNumericKeyEventL@CPhoneState@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 113 NONAME ; void CPhoneState::HandleNumericKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?SetToolbarDimming@CPhoneState@@IAEXH@Z @ 114 NONAME ; void CPhoneState::SetToolbarDimming(int)
+	?SendGlobalErrorNoteL@CPhoneState@@QAEXH@Z @ 115 NONAME ; void CPhoneState::SendGlobalErrorNoteL(int)
+	?IsAutoLockOn@CPhoneState@@UBEHXZ @ 116 NONAME ; int CPhoneState::IsAutoLockOn(void) const
+	?UpdateCbaL@CPhoneStateCallSetup@@MAEXH@Z @ 117 NONAME ; void CPhoneStateCallSetup::UpdateCbaL(int)
+	?RestoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 118 NONAME ; void CPhoneState::RestoreNumberEntryContentL(void)
+	?HandleKeyEventL@CPhoneStateIdle@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 119 NONAME ; void CPhoneStateIdle::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?IsNumberEntryContentStored@CPhoneState@@IAEHXZ @ 120 NONAME ; int CPhoneState::IsNumberEntryContentStored(void)
+	?IsVideoCallActiveL@CPhoneStateInCall@@MAEHXZ @ 121 NONAME ; int CPhoneStateInCall::IsVideoCallActiveL(void)
+	?DialVoiceCallL@CPhoneState@@IAEXXZ @ 122 NONAME ; void CPhoneState::DialVoiceCallL(void)
+	?HandlePhoneStartupL@CPhoneStateStartup@@UAEXXZ @ 123 NONAME ; void CPhoneStateStartup::HandlePhoneStartupL(void)
+	?EndUiUpdate@CPhoneState@@IAEXXZ @ 124 NONAME ; void CPhoneState::EndUiUpdate(void)
+	?HandleKeyPressDurationL@CPhoneStateIncoming@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 125 NONAME ; void CPhoneStateIncoming::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds)
+	?UpdateInCallCbaL@CPhoneStateInCall@@MAEXXZ @ 126 NONAME ; void CPhoneStateInCall::UpdateInCallCbaL(void)
+	?EndTransEffect@CPhoneState@@QAEXXZ @ 127 NONAME ; void CPhoneState::EndTransEffect(void)
+	?HandleEnvironmentChangeL@CPhoneState@@UAEXH@Z @ 128 NONAME ; void CPhoneState::HandleEnvironmentChangeL(int)
+	?HandleKeyMessageL@CPhoneStateInCall@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 129 NONAME ; void CPhoneStateInCall::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	?SetRingingTonePlaybackL@CPhoneState@@IAEXH@Z @ 130 NONAME ; void CPhoneState::SetRingingTonePlaybackL(int)
+	?ProcessCommandL@CPhoneState@@UAEHH@Z @ 131 NONAME ; int CPhoneState::ProcessCommandL(int)
+	?BeginUiUpdateLC@CPhoneState@@IAEXXZ @ 132 NONAME ; void CPhoneState::BeginUiUpdateLC(void)
+	?DecreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 133 NONAME ; void CPhoneState::DecreaseAudioVolumeL(void)
+	?RemoveStateObserver@CPhoneSecurityModeObserver@@UAEXAAVMPhoneSecurityModeChangeObserver@@@Z @ 134 NONAME ; void CPhoneSecurityModeObserver::RemoveStateObserver(class MPhoneSecurityModeChangeObserver &)
+	?PhoneEngineInfo@CPhoneStateMachine@@UAEPAVMPEEngineInfo@@XZ @ 135 NONAME ; class MPEEngineInfo * CPhoneStateMachine::PhoneEngineInfo(void)
+	?CreateNumberEntryL@CPhoneStateInCall@@IAEXXZ @ 136 NONAME ; void CPhoneStateInCall::CreateNumberEntryL(void)
+	?HandleSystemEventL@CPhoneUIController@@UAEXABVTWsEvent@@@Z @ 137 NONAME ; void CPhoneUIController::HandleSystemEventL(class TWsEvent const &)
+	?DynInitMenuPaneL@CPhoneUIController@@UAEXHPAVCEikMenuPane@@@Z @ 138 NONAME ; void CPhoneUIController::DynInitMenuPaneL(int, class CEikMenuPane *)
+	??0CPhoneStateStartup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 139 NONAME ; CPhoneStateStartup::CPhoneStateStartup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?GetRemoteInfoDataL@CPhoneState@@IAEXHAAVTDes16@@@Z @ 140 NONAME ; void CPhoneState::GetRemoteInfoDataL(int, class TDes16 &)
+	?SetDivertIndication@CPhoneState@@UAEXH@Z @ 141 NONAME ; void CPhoneState::SetDivertIndication(int)
+	?UpdateCbaL@CPhoneStateInCall@@MAEXH@Z @ 142 NONAME ; void CPhoneStateInCall::UpdateCbaL(int)
+	?SetCallId@CPhoneStateMachine@@UAEXH@Z @ 143 NONAME ; void CPhoneStateMachine::SetCallId(int)
+	?ProcessCommandL@CPhoneUIController@@UAEHH@Z @ 144 NONAME ; int CPhoneUIController::ProcessCommandL(int)
+	?DisplayHeaderForCallComingInL@CPhoneState@@IAEXHH@Z @ 145 NONAME ; void CPhoneState::DisplayHeaderForCallComingInL(int, int)
+	??0CPhoneStateIdle@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 146 NONAME ; CPhoneStateIdle::CPhoneStateIdle(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?SendPhoneEngineMessage@CPhoneStateMachine@@UAEXH@Z @ 147 NONAME ; void CPhoneStateMachine::SendPhoneEngineMessage(int)
+	??0CPhoneStateCallSetup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 148 NONAME ; CPhoneStateCallSetup::CPhoneStateCallSetup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	??0CPhoneState@@QAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 149 NONAME ; CPhoneState::CPhoneState(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?HandleDtmfKeyToneL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 150 NONAME ; void CPhoneState::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode)
+	?HandleKeyMessageL@CPhoneStateIdle@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 151 NONAME ; void CPhoneStateIdle::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	?HandlePEConstructionReadyL@CPhoneStateStartup@@QAEXH@Z @ 152 NONAME ; void CPhoneStateStartup::HandlePEConstructionReadyL(int)
+	?HandleForegroundEventL@CPhoneUIController@@UAEXH@Z @ 153 NONAME ; void CPhoneUIController::HandleForegroundEventL(int)
+	?HandleSendCommandL@CPhoneStateIdle@@MAEXXZ @ 154 NONAME ; void CPhoneStateIdle::HandleSendCommandL(void)
+	?HandleCommandL@CPhoneUIController@@UAEHH@Z @ 155 NONAME ; int CPhoneUIController::HandleCommandL(int)
+	?HandleCreateNumberEntryL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 156 NONAME ; void CPhoneState::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode)
+	?DisplayHeaderForOutgoingCallL@CPhoneState@@IAEXH@Z @ 157 NONAME ; void CPhoneState::DisplayHeaderForOutgoingCallL(int)
+	?HandlePhoneEngineMessageL@CPhoneStateInCall@@UAEXHH@Z @ 158 NONAME ; void CPhoneStateInCall::HandlePhoneEngineMessageL(int, int)
+	?IsSpeedDialNumber@CPhoneStateIdle@@IBEHABVTDesC16@@@Z @ 159 NONAME ; int CPhoneStateIdle::IsSpeedDialNumber(class TDesC16 const &) const
+	?IsNumberEntryUsedL@CPhoneState@@UAEHXZ @ 160 NONAME ; int CPhoneState::IsNumberEntryUsedL(void)
+	??1CPhoneState@@UAE@XZ @ 161 NONAME ; CPhoneState::~CPhoneState(void)
+	?HandleCreateNumberEntryL@CPhoneStateCallSetup@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 162 NONAME ; void CPhoneStateCallSetup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode)
+	?HandlePhoneEngineMessageL@CPhoneStateCallSetup@@UAEXHH@Z @ 163 NONAME ; void CPhoneStateCallSetup::HandlePhoneEngineMessageL(int, int)
+	?HandlePhoneFocusLostEventL@CPhoneState@@UAEXXZ @ 164 NONAME ; void CPhoneState::HandlePhoneFocusLostEventL(void)
+	?HandlePropertyChangedL@CPhoneStateInCall@@EAEXABVTUid@@IH@Z @ 165 NONAME ; void CPhoneStateInCall::HandlePropertyChangedL(class TUid const &, unsigned int, int)
+	??1CPhoneStateMachine@@UAE@XZ @ 166 NONAME ; CPhoneStateMachine::~CPhoneStateMachine(void)
+	?HandleIdleForegroundEventL@CPhoneState@@UAEXXZ @ 167 NONAME ; void CPhoneState::HandleIdleForegroundEventL(void)
+	?DynInitMenuPaneL@CPhoneState@@UAEXHPAVCEikMenuPane@@@Z @ 168 NONAME ; void CPhoneState::DynInitMenuPaneL(int, class CEikMenuPane *)
+	?IsDTMFEditorVisibleL@CPhoneState@@IBEHXZ @ 169 NONAME ; int CPhoneState::IsDTMFEditorVisibleL(void) const
+	?ConstructL@CPhoneStateCallSetup@@MAEXXZ @ 170 NONAME ; void CPhoneStateCallSetup::ConstructL(void)
+	?BeginTransEffectLC@CPhoneState@@QAEXW4TStateTransEffectType@@@Z @ 171 NONAME ; void CPhoneState::BeginTransEffectLC(enum TStateTransEffectType)
+	?SetSecurityModeObserver@CPhoneStateMachine@@UAEXPAVMPhoneSecurityModeObserver@@@Z @ 172 NONAME ; void CPhoneStateMachine::SetSecurityModeObserver(class MPhoneSecurityModeObserver *)
+	?HandleMessage@CPhoneUIController@@UAEXHH@Z @ 173 NONAME ; void CPhoneUIController::HandleMessage(int, int)
+	?HandleSystemEventL@CPhoneState@@UAEXABVTWsEvent@@@Z @ 174 NONAME ; void CPhoneState::HandleSystemEventL(class TWsEvent const &)
+	?NeedToReturnToForegroundAppL@CPhoneState@@IBEHXZ @ 175 NONAME ; int CPhoneState::NeedToReturnToForegroundAppL(void) const
+	?DisplayCallSetupL@CPhoneStateIdle@@IAEXH@Z @ 176 NONAME ; void CPhoneStateIdle::DisplayCallSetupL(int)
+	?ConstructL@CPhoneStateStartup@@MAEXXZ @ 177 NONAME ; void CPhoneStateStartup::ConstructL(void)
+	?HandleKeyMessageL@CPhoneStateStartup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 178 NONAME ; void CPhoneStateStartup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	?ShowNoteL@CPhoneState@@IAEXH@Z @ 179 NONAME ; void CPhoneState::ShowNoteL(int)
+	?HandlePropertyChangedL@CPhoneState@@UAEXABVTUid@@IH@Z @ 180 NONAME ; void CPhoneState::HandlePropertyChangedL(class TUid const &, unsigned int, int)
+	?IsAnyQueryActiveL@CPhoneState@@QAEHXZ @ 181 NONAME ; int CPhoneState::IsAnyQueryActiveL(void)
+	?State@CPhoneStateMachine@@UAEPAVMPhoneState@@XZ @ 182 NONAME ; class MPhoneState * CPhoneStateMachine::State(void)
+	?SetHandsfreeModeL@CPhoneState@@IAEXH@Z @ 183 NONAME ; void CPhoneState::SetHandsfreeModeL(int)
+	?IsCustomizedDialerVisibleL@CPhoneState@@QBEHXZ @ 184 NONAME ; int CPhoneState::IsCustomizedDialerVisibleL(void) const
+	?UpdateInCallCbaL@CPhoneStateCallSetup@@MAEXXZ @ 185 NONAME ; void CPhoneStateCallSetup::UpdateInCallCbaL(void)
+	?HandleNumberEntryClearedL@CPhoneStateInCall@@MAEXXZ @ 186 NONAME ; void CPhoneStateInCall::HandleNumberEntryClearedL(void)
+	??0CPhoneStateIncoming@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 187 NONAME ; CPhoneStateIncoming::CPhoneStateIncoming(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	??1CPhoneStateIncoming@@UAE@XZ @ 188 NONAME ; CPhoneStateIncoming::~CPhoneStateIncoming(void)
+	?DeleteTouchPaneButtons@CPhoneState@@IAEXXZ @ 189 NONAME ; void CPhoneState::DeleteTouchPaneButtons(void)
+	?ProcessCommandL@CPhoneStateIdle@@UAEHH@Z @ 190 NONAME ; int CPhoneStateIdle::ProcessCommandL(int)
+	?IsNoteVisibleL@CPhoneState@@MAEHXZ @ 191 NONAME ; int CPhoneState::IsNoteVisibleL(void)
+	?DynInitMenuBarL@CPhoneUIController@@UAEXHPAVCEikMenuBar@@@Z @ 192 NONAME ; void CPhoneUIController::DynInitMenuBarL(int, class CEikMenuBar *)
+	?IsAlphanumericSupportedAndCharInput@CPhoneState@@MAEHABUTKeyEvent@@@Z @ 193 NONAME ; int CPhoneState::IsAlphanumericSupportedAndCharInput(struct TKeyEvent const &)
+	?HandlePhoneEngineMessageL@CPhoneStateStartup@@UAEXHH@Z @ 194 NONAME ; void CPhoneStateStartup::HandlePhoneEngineMessageL(int, int)
+	?HandleKeyEventL@CPhoneStateIncoming@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 195 NONAME ; void CPhoneStateIncoming::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?HandleKeyEventL@CPhoneStateStartup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 196 NONAME ; void CPhoneStateStartup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?HandleNumberEntryClearedL@CPhoneState@@MAEXXZ @ 197 NONAME ; void CPhoneState::HandleNumberEntryClearedL(void)
+	?OnlyHashInNumberEntryL@CPhoneState@@MAEXXZ @ 198 NONAME ; void CPhoneState::OnlyHashInNumberEntryL(void)
+	?IncreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 199 NONAME ; void CPhoneState::IncreaseAudioVolumeL(void)
+	?ConstructL@CPhoneStateIdle@@MAEXXZ @ 200 NONAME ; void CPhoneStateIdle::ConstructL(void)
+	?CheckIfShowCallTerminationNote@CPhoneState@@MAEHXZ @ 201 NONAME ; int CPhoneState::CheckIfShowCallTerminationNote(void)
+	?SetCallHeaderType@CPhoneState@@IAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 202 NONAME ; void CPhoneState::SetCallHeaderType(enum CBubbleManager::TPhoneCallTypeFlags)
+	?SendGlobalInfoNoteL@CPhoneState@@QAEXH@Z @ 203 NONAME ; void CPhoneState::SendGlobalInfoNoteL(int)
+	?DisplayIdleScreenL@CPhoneState@@IAEXXZ @ 204 NONAME ; void CPhoneState::DisplayIdleScreenL(void)
+	?StartShowSecurityNoteL@CPhoneState@@IAEXXZ @ 205 NONAME ; void CPhoneState::StartShowSecurityNoteL(void)
+	?StoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 206 NONAME ; void CPhoneState::StoreNumberEntryContentL(void)
+	?SetBTHandsfreeModeL@CPhoneState@@IAEXH@Z @ 207 NONAME ; void CPhoneState::SetBTHandsfreeModeL(int)
+	?HandlePhoneEngineMessageL@CPhoneStateIncoming@@UAEXHH@Z @ 208 NONAME ; void CPhoneStateIncoming::HandlePhoneEngineMessageL(int, int)
+	?SetDefaultFlagsL@CPhoneState@@IAEXXZ @ 209 NONAME ; void CPhoneState::SetDefaultFlagsL(void)
+	?HandleCommandL@CPhoneStateInCall@@UAEHH@Z @ 210 NONAME ; int CPhoneStateInCall::HandleCommandL(int)
+	?DialVoiceCallL@CPhoneStateIdle@@IAEXXZ @ 211 NONAME ; void CPhoneStateIdle::DialVoiceCallL(void)
+	?UpdateRemoteInfoDataL@CPhoneState@@IAEXH@Z @ 212 NONAME ; void CPhoneState::UpdateRemoteInfoDataL(int)
+	?GetRingingCallL@CPhoneStateInCall@@MAEHXZ @ 213 NONAME ; int CPhoneStateInCall::GetRingingCallL(void)
+	?HandleIdleForegroundEventL@CPhoneUIController@@UAEXXZ @ 214 NONAME ; void CPhoneUIController::HandleIdleForegroundEventL(void)
+	?HandlePhoneForegroundEventL@CPhoneState@@UAEXXZ @ 215 NONAME ; void CPhoneState::HandlePhoneForegroundEventL(void)
+	?HandleForegroundEventL@CPhoneState@@UAEXH@Z @ 216 NONAME ; void CPhoneState::HandleForegroundEventL(int)
+	?DisplayIncomingCallL@CPhoneStateIdle@@IAEXH@Z @ 217 NONAME ; void CPhoneStateIdle::DisplayIncomingCallL(int)
+	?SetSecurityMessageHandler@CPhoneStateMachine@@UAEXPAVMPhoneSecurityMessageHandler@@@Z @ 218 NONAME ; void CPhoneStateMachine::SetSecurityMessageHandler(class MPhoneSecurityMessageHandler *)
+	?HandleRemConCommandL@CPhoneState@@UAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 219 NONAME ; int CPhoneState::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
+	??1CPhoneStateIdle@@UAE@XZ @ 220 NONAME ; CPhoneStateIdle::~CPhoneStateIdle(void)
+	?IsDialingExtensionInFocusL@CPhoneState@@QBEHXZ @ 221 NONAME ; int CPhoneState::IsDialingExtensionInFocusL(void) const
+	?Initialize@CPhoneSecurityModeObserver@@UAEXXZ @ 222 NONAME ; void CPhoneSecurityModeObserver::Initialize(void)
+	?PhoneNumberFromEntryLC@CPhoneState@@IAEPAVHBufC16@@XZ @ 223 NONAME ; class HBufC16 * CPhoneState::PhoneNumberFromEntryLC(void)
+	?BaseConstructL@CPhoneState@@QAEXXZ @ 224 NONAME ; void CPhoneState::BaseConstructL(void)
+	?HandlePhoneStartupL@CPhoneUIController@@UAEXXZ @ 225 NONAME ; void CPhoneUIController::HandlePhoneStartupL(void)
+	?SpeedDialL@CPhoneStateIdle@@IAEXABIW4TDialInitiationMethod@1@@Z @ 226 NONAME ; void CPhoneStateIdle::SpeedDialL(unsigned int const &, enum CPhoneStateIdle::TDialInitiationMethod)
+	?SetTouchPaneButtonEnabled@CPhoneState@@IAEXH@Z @ 227 NONAME ; void CPhoneState::SetTouchPaneButtonEnabled(int)
+	?SetPhoneEngine@CPhoneStateMachine@@UAEXPAVMPEPhoneModel@@@Z @ 228 NONAME ; void CPhoneStateMachine::SetPhoneEngine(class MPEPhoneModel *)
+	?SpeedDialCanceledL@CPhoneStateIdle@@IAEXABI@Z @ 229 NONAME ; void CPhoneStateIdle::SpeedDialCanceledL(unsigned int const &)
+	?CloseDTMFEditorL@CPhoneState@@IAEXXZ @ 230 NONAME ; void CPhoneState::CloseDTMFEditorL(void)
+	?SetTouchPaneVisible@CPhoneState@@IAEXH@Z @ 231 NONAME ; void CPhoneState::SetTouchPaneVisible(int)
+	?HandlePhoneFocusLostEventL@CPhoneUIController@@UAEXXZ @ 232 NONAME ; void CPhoneUIController::HandlePhoneFocusLostEventL(void)
+	??0CPhoneStateMachine@@IAE@PAVMPhoneViewCommandHandle@@@Z @ 233 NONAME ; CPhoneStateMachine::CPhoneStateMachine(class MPhoneViewCommandHandle *)
+	??1CPhoneStateStartup@@UAE@XZ @ 234 NONAME ; CPhoneStateStartup::~CPhoneStateStartup(void)
+	?HandleKeyMessageL@CPhoneState@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 235 NONAME ; void CPhoneState::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
 
--- a/phoneapp/phoneuicontrol/eabi/phoneuicontrolu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/eabi/phoneuicontrolu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -3,172 +3,172 @@
 	_ZN11CPhoneState11EndUiUpdateEv @ 2 NONAME
 	_ZN11CPhoneState11IsVideoCallEi @ 3 NONAME
 	_ZN11CPhoneState12HandleErrorLERK12TPEErrorInfo @ 4 NONAME
-	_ZN11CPhoneState13EnableCallUILEv @ 5 NONAME
-	_ZN11CPhoneState14BaseConstructLEv @ 6 NONAME
-	_ZN11CPhoneState14DialVoiceCallLEv @ 7 NONAME
-	_ZN11CPhoneState14DisableCallUILEv @ 8 NONAME
-	_ZN11CPhoneState14DisableHWKeysLEv @ 9 NONAME
-	_ZN11CPhoneState14EndTransEffectEv @ 10 NONAME
-	_ZN11CPhoneState14HandleCommandLEi @ 11 NONAME
-	_ZN11CPhoneState14IsNoteVisibleLEv @ 12 NONAME
-	_ZN11CPhoneState14ShowTextQueryLEiiiP6TDes16i @ 13 NONAME
-	_ZN11CPhoneState15BeginUiUpdateLCEv @ 14 NONAME
-	_ZN11CPhoneState15DisconnectCallLEv @ 15 NONAME
-	_ZN11CPhoneState15DynInitMenuBarLEiP11CEikMenuBar @ 16 NONAME
-	_ZN11CPhoneState15HandleKeyEventLERK9TKeyEvent10TEventCode @ 17 NONAME
-	_ZN11CPhoneState15HandleLongHashLEv @ 18 NONAME
-	_ZN11CPhoneState15ProcessCommandLEi @ 19 NONAME
-	_ZN11CPhoneState15SetContextMenuLEi @ 20 NONAME
-	_ZN11CPhoneState16CallWaitingNoteLEi @ 21 NONAME
-	_ZN11CPhoneState16CloseDTMFEditorLEv @ 22 NONAME
-	_ZN11CPhoneState16DynInitMenuPaneLEiP12CEikMenuPane @ 23 NONAME
-	_ZN11CPhoneState16SetDefaultFlagsLEv @ 24 NONAME
-	_ZN11CPhoneState17HandleHoldSwitchLEv @ 25 NONAME
-	_ZN11CPhoneState17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 26 NONAME
-	_ZN11CPhoneState17IsAnyQueryActiveLEv @ 27 NONAME
-	_ZN11CPhoneState17SetCallHeaderTypeEN14CBubbleManager19TPhoneCallTypeFlagsE @ 28 NONAME
-	_ZN11CPhoneState17SetHandsfreeModeLEi @ 29 NONAME
-	_ZN11CPhoneState18BeginTransEffectLCE21TStateTransEffectType @ 30 NONAME
-	_ZN11CPhoneState18DisplayIdleScreenLEv @ 31 NONAME
-	_ZN11CPhoneState18GetRemoteInfoDataLEiR6TDes16 @ 32 NONAME
-	_ZN11CPhoneState18HandleDtmfKeyToneLERK9TKeyEvent10TEventCode @ 33 NONAME
-	_ZN11CPhoneState18HandleSystemEventLERK8TWsEvent @ 34 NONAME
-	_ZN11CPhoneState18IsNumberEntryUsedLEv @ 35 NONAME
-	_ZN11CPhoneState19CompleteSatRequestLEi @ 36 NONAME
-	_ZN11CPhoneState19DialMultimediaCallLEv @ 37 NONAME
-	_ZN11CPhoneState19HandleCenRepChangeLERK4TUidj @ 38 NONAME
-	_ZN11CPhoneState19HandlePhoneStartupLEv @ 39 NONAME
-	_ZN11CPhoneState19SendGlobalInfoNoteLEi @ 40 NONAME
-	_ZN11CPhoneState19SetBTHandsfreeModeLEi @ 41 NONAME
-	_ZN11CPhoneState19SetDivertIndicationEi @ 42 NONAME
-	_ZN11CPhoneState19SetTouchPaneButtonsEi @ 43 NONAME
-	_ZN11CPhoneState19SetTouchPaneVisibleEi @ 44 NONAME
-	_ZN11CPhoneState19ShowNumberBusyNoteLEv @ 45 NONAME
-	_ZN11CPhoneState20CallFromNumberEntryLEv @ 46 NONAME
-	_ZN11CPhoneState20DecreaseAudioVolumeLEv @ 47 NONAME
-	_ZN11CPhoneState20HandleDisconnectingLEi @ 48 NONAME
-	_ZN11CPhoneState20HandleKeyLockEnabledEi @ 49 NONAME
-	_ZN11CPhoneState20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 50 NONAME
-	_ZN11CPhoneState20IncreaseAudioVolumeLEv @ 51 NONAME
-	_ZN11CPhoneState20SendGlobalErrorNoteLEi @ 52 NONAME
-	_ZN11CPhoneState21IsNumberEntryVisibleLEv @ 53 NONAME
-	_ZN11CPhoneState21UpdateRemoteInfoDataLEi @ 54 NONAME
-	_ZN11CPhoneState22CloseCustomizedDialerLEv @ 55 NONAME
-	_ZN11CPhoneState22DeleteTouchPaneButtonsEv @ 56 NONAME
-	_ZN11CPhoneState22HandleForegroundEventLEi @ 57 NONAME
-	_ZN11CPhoneState22HandleNumericKeyEventLERK9TKeyEvent10TEventCode @ 58 NONAME
-	_ZN11CPhoneState22HandlePropertyChangedLERK4TUidji @ 59 NONAME
-	_ZN11CPhoneState22OnlyHashInNumberEntryLEv @ 60 NONAME
-	_ZN11CPhoneState22PhoneNumberFromEntryLCEv @ 61 NONAME
-	_ZN11CPhoneState22SendGlobalWarningNoteLEi @ 62 NONAME
-	_ZN11CPhoneState22StartShowSecurityNoteLEv @ 63 NONAME
-	_ZN11CPhoneState23HandleAudioMuteChangedLEv @ 64 NONAME
-	_ZN11CPhoneState23HandleKeyPressDurationLE8TKeyCode25TTimeIntervalMicroSeconds @ 65 NONAME
-	_ZN11CPhoneState23HandleNumberEntryEditedEv @ 66 NONAME
-	_ZN11CPhoneState23SetRingingTonePlaybackLEi @ 67 NONAME
-	_ZN11CPhoneState23UpdateSingleActiveCallLEi @ 68 NONAME
-	_ZN11CPhoneState24HandleCreateNumberEntryLERK9TKeyEvent10TEventCode @ 69 NONAME
-	_ZN11CPhoneState24HandleEnvironmentChangeLEi @ 70 NONAME
-	_ZN11CPhoneState24StartAlsLineChangeTimerLEv @ 71 NONAME
-	_ZN11CPhoneState24StoreNumberEntryContentLEv @ 72 NONAME
-	_ZN11CPhoneState24UpdateInCallContextMenuLEv @ 73 NONAME
-	_ZN11CPhoneState25HandleAudioOutputChangedLEv @ 74 NONAME
-	_ZN11CPhoneState25HandleNumberEntryClearedLEv @ 75 NONAME
-	_ZN11CPhoneState25HandlePhoneEngineMessageLEii @ 76 NONAME
-	_ZN11CPhoneState25SetNumberEntryVisibilityLEi @ 77 NONAME
-	_ZN11CPhoneState25SetTouchPaneButtonEnabledEi @ 78 NONAME
-	_ZN11CPhoneState26HandleIdleForegroundEventLEv @ 79 NONAME
-	_ZN11CPhoneState26HandlePhoneFocusLostEventLEv @ 80 NONAME
-	_ZN11CPhoneState26IsNumberEntryContentStoredEv @ 81 NONAME
-	_ZN11CPhoneState26RestoreNumberEntryContentLEv @ 82 NONAME
-	_ZN11CPhoneState26SetTouchPaneButtonDisabledEi @ 83 NONAME
-	_ZN11CPhoneState26UpdateIncomingContextMenuLEi @ 84 NONAME
-	_ZN11CPhoneState26UpdateSilenceButtonDimmingEv @ 85 NONAME
-	_ZN11CPhoneState27DisplayCallTerminationNoteLEv @ 86 NONAME
-	_ZN11CPhoneState27HandlePhoneForegroundEventLEv @ 87 NONAME
-	_ZN11CPhoneState27RetainPreviousKeylockStateLEv @ 88 NONAME
-	_ZN11CPhoneState28CheckDisableHWKeysAndCallUILEv @ 89 NONAME
-	_ZN11CPhoneState28ClearNumberEntryContentCacheEv @ 90 NONAME
-	_ZN11CPhoneState28SetupIdleScreenInBackgroundLEv @ 91 NONAME
-	_ZN11CPhoneState29DisplayHeaderForCallComingInLEii @ 92 NONAME
-	_ZN11CPhoneState29DisplayHeaderForOutgoingCallLEi @ 93 NONAME
-	_ZN11CPhoneState30CheckIfShowCallTerminationNoteEv @ 94 NONAME
-	_ZN11CPhoneState30CustomizedDialerCbaResourceIdLEv @ 95 NONAME
-	_ZN11CPhoneState31CustomizedDialerMenuResourceIdLEv @ 96 NONAME
-	_ZN11CPhoneState34CaptureKeysDuringCallNotificationLEi @ 97 NONAME
-	_ZN11CPhoneState34SetCallHeaderTextsForCallComingInLEiiP28TPhoneCmdParamCallHeaderData @ 98 NONAME
-	_ZN11CPhoneState35IsAlphanumericSupportedAndCharInputERK9TKeyEvent @ 99 NONAME
-	_ZN11CPhoneState38CheckIfRestoreNEContentAfterDtmfDialerEv @ 100 NONAME
-	_ZN11CPhoneState43IsSimStateNotPresentWithSecurityModeEnabledEv @ 101 NONAME
-	_ZN11CPhoneState7IsSimOkEv @ 102 NONAME
-	_ZN11CPhoneState9ShowNoteLEi @ 103 NONAME
-	_ZN11CPhoneStateC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 104 NONAME
-	_ZN11CPhoneStateC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 105 NONAME
-	_ZN11CPhoneStateD0Ev @ 106 NONAME
-	_ZN11CPhoneStateD1Ev @ 107 NONAME
-	_ZN11CPhoneStateD2Ev @ 108 NONAME
-	_ZN15CPhoneStateIdle10ConstructLEv @ 109 NONAME
-	_ZN15CPhoneStateIdle10SpeedDialLERKjNS_21TDialInitiationMethodE @ 110 NONAME
-	_ZN15CPhoneStateIdle14DialVoiceCallLEv @ 111 NONAME
-	_ZN15CPhoneStateIdle14HandleCommandLEi @ 112 NONAME
-	_ZN15CPhoneStateIdle14HandleDialingLEi @ 113 NONAME
-	_ZN15CPhoneStateIdle15HandleKeyEventLERK9TKeyEvent10TEventCode @ 114 NONAME
-	_ZN15CPhoneStateIdle15ProcessCommandLEi @ 115 NONAME
-	_ZN15CPhoneStateIdle17DisplayCallSetupLEi @ 116 NONAME
-	_ZN15CPhoneStateIdle17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 117 NONAME
-	_ZN15CPhoneStateIdle18HandleSendCommandLEv @ 118 NONAME
-	_ZN15CPhoneStateIdle18SpeedDialCanceledLERKj @ 119 NONAME
-	_ZN15CPhoneStateIdle19DialMultimediaCallLEv @ 120 NONAME
-	_ZN15CPhoneStateIdle20DisplayIncomingCallLEi @ 121 NONAME
-	_ZN15CPhoneStateIdle20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 122 NONAME
-	_ZN15CPhoneStateIdle22OnlyHashInNumberEntryLEv @ 123 NONAME
-	_ZN15CPhoneStateIdle25HandleNumberEntryClearedLEv @ 124 NONAME
-	_ZN15CPhoneStateIdle25HandleNumberLongKeyPressLEv @ 125 NONAME
-	_ZN15CPhoneStateIdle25HandlePhoneEngineMessageLEii @ 126 NONAME
-	_ZN15CPhoneStateIdle26HandleIdleForegroundEventLEv @ 127 NONAME
-	_ZN15CPhoneStateIdle26HandlePhoneFocusLostEventLEv @ 128 NONAME
-	_ZN15CPhoneStateIdle27HandlePhoneForegroundEventLEv @ 129 NONAME
-	_ZN15CPhoneStateIdle5DialLERK7TDesC1616TPhoneNumberTypeNS_21TDialInitiationMethodE @ 130 NONAME
-	_ZN15CPhoneStateIdleC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 131 NONAME
-	_ZN15CPhoneStateIdleC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 132 NONAME
-	_ZN15CPhoneStateIdleD0Ev @ 133 NONAME
-	_ZN15CPhoneStateIdleD1Ev @ 134 NONAME
-	_ZN15CPhoneStateIdleD2Ev @ 135 NONAME
-	_ZN16CPhoneCbaManager10UpdateCbaLEi @ 136 NONAME
-	_ZN16CPhoneCbaManager18UpdateIncomingCbaLEi @ 137 NONAME
-	_ZN16CPhoneCbaManager7SetCbaLEi @ 138 NONAME
-	_ZN17CPhoneStateHandle17ViewCommandHandleEv @ 139 NONAME
-	_ZN17CPhoneStateHandle8InstanceEv @ 140 NONAME
-	_ZN17CPhoneStateInCall10ConstructLEv @ 141 NONAME
-	_ZN17CPhoneStateInCall10UpdateCbaLEi @ 142 NONAME
-	_ZN17CPhoneStateInCall11HandleIdleLEi @ 143 NONAME
-	_ZN17CPhoneStateInCall12OpenMenuBarLEv @ 144 NONAME
-	_ZN17CPhoneStateInCall14HandleCommandLEi @ 145 NONAME
-	_ZN17CPhoneStateInCall15CloseDtmfQueryLEv @ 146 NONAME
-	_ZN17CPhoneStateInCall15GetRingingCallLEv @ 147 NONAME
-	_ZN17CPhoneStateInCall16UpdateInCallCbaLEv @ 148 NONAME
-	_ZN17CPhoneStateInCall17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 149 NONAME
-	_ZN17CPhoneStateInCall18CallFetchedNumberLERK7TDesC16 @ 150 NONAME
-	_ZN17CPhoneStateInCall18CreateNumberEntryLEv @ 151 NONAME
-	_ZN17CPhoneStateInCall18IsVideoCallActiveLEv @ 152 NONAME
-	_ZN17CPhoneStateInCall19IsVideoCallRingingLEv @ 153 NONAME
-	_ZN17CPhoneStateInCall19LaunchNewCallQueryLEv @ 154 NONAME
-	_ZN17CPhoneStateInCall23DisconnectOutgoingCallLEv @ 155 NONAME
-	_ZN17CPhoneStateInCall25HandleNumberEntryClearedLEv @ 156 NONAME
-	_ZN17CPhoneStateInCall25HandlePhoneEngineMessageLEii @ 157 NONAME
-	_ZN17CPhoneStateInCall34PhoneNumberAvailableInPhoneEngineLEi @ 158 NONAME
-	_ZN17CPhoneStateInCallC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 159 NONAME
-	_ZN17CPhoneStateInCallC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 160 NONAME
-	_ZN17CPhoneStateInCallD0Ev @ 161 NONAME
-	_ZN17CPhoneStateInCallD1Ev @ 162 NONAME
-	_ZN17CPhoneStateInCallD2Ev @ 163 NONAME
-	_ZN18CPhoneStateMachine11ChangeStateEi @ 164 NONAME
-	_ZN18CPhoneStateMachine11PhoneEngineEv @ 165 NONAME
-	_ZN18CPhoneStateMachine12PhoneStorageEv @ 166 NONAME
-	_ZN18CPhoneStateMachine14SetPhoneEngineEP13MPEPhoneModel @ 167 NONAME
-	_ZN18CPhoneStateMachine15PhoneEngineInfoEv @ 168 NONAME
-	_ZN18CPhoneStateMachine18CreatePhoneEngineLER14MEngineMonitor @ 169 NONAME
-	_ZN18CPhoneStateMachine22SendPhoneEngineMessageEi @ 170 NONAME
+	_ZN11CPhoneState14BaseConstructLEv @ 5 NONAME
+	_ZN11CPhoneState14DialVoiceCallLEv @ 6 NONAME
+	_ZN11CPhoneState14EndTransEffectEv @ 7 NONAME
+	_ZN11CPhoneState14HandleCommandLEi @ 8 NONAME
+	_ZN11CPhoneState14IsNoteVisibleLEv @ 9 NONAME
+	_ZN11CPhoneState14ShowTextQueryLEiiiP6TDes16i @ 10 NONAME
+	_ZN11CPhoneState15BeginUiUpdateLCEv @ 11 NONAME
+	_ZN11CPhoneState15DisconnectCallLEv @ 12 NONAME
+	_ZN11CPhoneState15DynInitMenuBarLEiP11CEikMenuBar @ 13 NONAME
+	_ZN11CPhoneState15HandleKeyEventLERK9TKeyEvent10TEventCode @ 14 NONAME
+	_ZN11CPhoneState15HandleLongHashLEv @ 15 NONAME
+	_ZN11CPhoneState15ProcessCommandLEi @ 16 NONAME
+	_ZN11CPhoneState15SetContextMenuLEi @ 17 NONAME
+	_ZN11CPhoneState16CallWaitingNoteLEi @ 18 NONAME
+	_ZN11CPhoneState16CloseDTMFEditorLEv @ 19 NONAME
+	_ZN11CPhoneState16DynInitMenuPaneLEiP12CEikMenuPane @ 20 NONAME
+	_ZN11CPhoneState16SetDefaultFlagsLEv @ 21 NONAME
+	_ZN11CPhoneState17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 22 NONAME
+	_ZN11CPhoneState17IsAnyQueryActiveLEv @ 23 NONAME
+	_ZN11CPhoneState17SetCallHeaderTypeEN14CBubbleManager19TPhoneCallTypeFlagsE @ 24 NONAME
+	_ZN11CPhoneState17SetHandsfreeModeLEi @ 25 NONAME
+	_ZN11CPhoneState17SetToolbarDimmingEi @ 26 NONAME
+	_ZN11CPhoneState18BeginTransEffectLCE21TStateTransEffectType @ 27 NONAME
+	_ZN11CPhoneState18DisplayIdleScreenLEv @ 28 NONAME
+	_ZN11CPhoneState18GetRemoteInfoDataLEiR6TDes16 @ 29 NONAME
+	_ZN11CPhoneState18HandleDtmfKeyToneLERK9TKeyEvent10TEventCode @ 30 NONAME
+	_ZN11CPhoneState18HandleSystemEventLERK8TWsEvent @ 31 NONAME
+	_ZN11CPhoneState18IsNumberEntryUsedLEv @ 32 NONAME
+	_ZN11CPhoneState19CompleteSatRequestLEi @ 33 NONAME
+	_ZN11CPhoneState19DialMultimediaCallLEv @ 34 NONAME
+	_ZN11CPhoneState19HandleCenRepChangeLERK4TUidj @ 35 NONAME
+	_ZN11CPhoneState19HandlePhoneStartupLEv @ 36 NONAME
+	_ZN11CPhoneState19SendGlobalInfoNoteLEi @ 37 NONAME
+	_ZN11CPhoneState19SetBTHandsfreeModeLEi @ 38 NONAME
+	_ZN11CPhoneState19SetDivertIndicationEi @ 39 NONAME
+	_ZN11CPhoneState19SetTouchPaneButtonsEi @ 40 NONAME
+	_ZN11CPhoneState19SetTouchPaneVisibleEi @ 41 NONAME
+	_ZN11CPhoneState19ShowNumberBusyNoteLEv @ 42 NONAME
+	_ZN11CPhoneState20CallFromNumberEntryLEv @ 43 NONAME
+	_ZN11CPhoneState20DecreaseAudioVolumeLEv @ 44 NONAME
+	_ZN11CPhoneState20HandleDisconnectingLEi @ 45 NONAME
+	_ZN11CPhoneState20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 46 NONAME
+	_ZN11CPhoneState20IncreaseAudioVolumeLEv @ 47 NONAME
+	_ZN11CPhoneState20SendGlobalErrorNoteLEi @ 48 NONAME
+	_ZN11CPhoneState21IsNumberEntryVisibleLEv @ 49 NONAME
+	_ZN11CPhoneState21UpdateRemoteInfoDataLEi @ 50 NONAME
+	_ZN11CPhoneState22CloseCustomizedDialerLEv @ 51 NONAME
+	_ZN11CPhoneState22DeleteTouchPaneButtonsEv @ 52 NONAME
+	_ZN11CPhoneState22HandleForegroundEventLEi @ 53 NONAME
+	_ZN11CPhoneState22HandleNumericKeyEventLERK9TKeyEvent10TEventCode @ 54 NONAME
+	_ZN11CPhoneState22HandlePropertyChangedLERK4TUidji @ 55 NONAME
+	_ZN11CPhoneState22OnlyHashInNumberEntryLEv @ 56 NONAME
+	_ZN11CPhoneState22PhoneNumberFromEntryLCEv @ 57 NONAME
+	_ZN11CPhoneState22SendGlobalWarningNoteLEi @ 58 NONAME
+	_ZN11CPhoneState22StartShowSecurityNoteLEv @ 59 NONAME
+	_ZN11CPhoneState23HandleAudioMuteChangedLEv @ 60 NONAME
+	_ZN11CPhoneState23HandleKeyPressDurationLE8TKeyCode25TTimeIntervalMicroSeconds @ 61 NONAME
+	_ZN11CPhoneState23HandleNumberEntryEditedEv @ 62 NONAME
+	_ZN11CPhoneState23SetRingingTonePlaybackLEi @ 63 NONAME
+	_ZN11CPhoneState23UpdateSingleActiveCallLEi @ 64 NONAME
+	_ZN11CPhoneState24HandleCreateNumberEntryLERK9TKeyEvent10TEventCode @ 65 NONAME
+	_ZN11CPhoneState24HandleEnvironmentChangeLEi @ 66 NONAME
+	_ZN11CPhoneState24StartAlsLineChangeTimerLEv @ 67 NONAME
+	_ZN11CPhoneState24StoreNumberEntryContentLEv @ 68 NONAME
+	_ZN11CPhoneState24UpdateInCallContextMenuLEv @ 69 NONAME
+	_ZN11CPhoneState25HandleAudioOutputChangedLEv @ 70 NONAME
+	_ZN11CPhoneState25HandleNumberEntryClearedLEv @ 71 NONAME
+	_ZN11CPhoneState25HandlePhoneEngineMessageLEii @ 72 NONAME
+	_ZN11CPhoneState25SetNumberEntryVisibilityLEi @ 73 NONAME
+	_ZN11CPhoneState25SetTouchPaneButtonEnabledEi @ 74 NONAME
+	_ZN11CPhoneState26HandleIdleForegroundEventLEv @ 75 NONAME
+	_ZN11CPhoneState26HandlePhoneFocusLostEventLEv @ 76 NONAME
+	_ZN11CPhoneState26IsNumberEntryContentStoredEv @ 77 NONAME
+	_ZN11CPhoneState26RestoreNumberEntryContentLEv @ 78 NONAME
+	_ZN11CPhoneState26SetTouchPaneButtonDisabledEi @ 79 NONAME
+	_ZN11CPhoneState26UpdateIncomingContextMenuLEi @ 80 NONAME
+	_ZN11CPhoneState26UpdateSilenceButtonDimmingEv @ 81 NONAME
+	_ZN11CPhoneState27DisplayCallTerminationNoteLEv @ 82 NONAME
+	_ZN11CPhoneState27HandlePhoneForegroundEventLEv @ 83 NONAME
+	_ZN11CPhoneState28ClearNumberEntryContentCacheEv @ 84 NONAME
+	_ZN11CPhoneState28SetupIdleScreenInBackgroundLEv @ 85 NONAME
+	_ZN11CPhoneState29DisplayHeaderForCallComingInLEii @ 86 NONAME
+	_ZN11CPhoneState29DisplayHeaderForOutgoingCallLEi @ 87 NONAME
+	_ZN11CPhoneState30CheckIfShowCallTerminationNoteEv @ 88 NONAME
+	_ZN11CPhoneState30CustomizedDialerCbaResourceIdLEv @ 89 NONAME
+	_ZN11CPhoneState31CustomizedDialerMenuResourceIdLEv @ 90 NONAME
+	_ZN11CPhoneState34CaptureKeysDuringCallNotificationLEi @ 91 NONAME
+	_ZN11CPhoneState34SetCallHeaderTextsForCallComingInLEiiP28TPhoneCmdParamCallHeaderData @ 92 NONAME
+	_ZN11CPhoneState34SetToolbarButtonLoudspeakerEnabledEv @ 93 NONAME
+	_ZN11CPhoneState35IsAlphanumericSupportedAndCharInputERK9TKeyEvent @ 94 NONAME
+	_ZN11CPhoneState38CheckIfRestoreNEContentAfterDtmfDialerEv @ 95 NONAME
+	_ZN11CPhoneState43IsSimStateNotPresentWithSecurityModeEnabledEv @ 96 NONAME
+	_ZN11CPhoneState7IsSimOkEv @ 97 NONAME
+	_ZN11CPhoneState9ShowNoteLEi @ 98 NONAME
+	_ZN11CPhoneStateC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 99 NONAME
+	_ZN11CPhoneStateC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 100 NONAME
+	_ZN11CPhoneStateD0Ev @ 101 NONAME
+	_ZN11CPhoneStateD1Ev @ 102 NONAME
+	_ZN11CPhoneStateD2Ev @ 103 NONAME
+	_ZN15CPhoneStateIdle10ConstructLEv @ 104 NONAME
+	_ZN15CPhoneStateIdle10SpeedDialLERKjNS_21TDialInitiationMethodE @ 105 NONAME
+	_ZN15CPhoneStateIdle14DialVoiceCallLEv @ 106 NONAME
+	_ZN15CPhoneStateIdle14HandleCommandLEi @ 107 NONAME
+	_ZN15CPhoneStateIdle14HandleDialingLEi @ 108 NONAME
+	_ZN15CPhoneStateIdle15HandleKeyEventLERK9TKeyEvent10TEventCode @ 109 NONAME
+	_ZN15CPhoneStateIdle15ProcessCommandLEi @ 110 NONAME
+	_ZN15CPhoneStateIdle17DisplayCallSetupLEi @ 111 NONAME
+	_ZN15CPhoneStateIdle17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 112 NONAME
+	_ZN15CPhoneStateIdle18HandleSendCommandLEv @ 113 NONAME
+	_ZN15CPhoneStateIdle18SpeedDialCanceledLERKj @ 114 NONAME
+	_ZN15CPhoneStateIdle19DialMultimediaCallLEv @ 115 NONAME
+	_ZN15CPhoneStateIdle20DisplayIncomingCallLEi @ 116 NONAME
+	_ZN15CPhoneStateIdle20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 117 NONAME
+	_ZN15CPhoneStateIdle22OnlyHashInNumberEntryLEv @ 118 NONAME
+	_ZN15CPhoneStateIdle25HandleNumberEntryClearedLEv @ 119 NONAME
+	_ZN15CPhoneStateIdle25HandleNumberLongKeyPressLEv @ 120 NONAME
+	_ZN15CPhoneStateIdle25HandlePhoneEngineMessageLEii @ 121 NONAME
+	_ZN15CPhoneStateIdle26HandleIdleForegroundEventLEv @ 122 NONAME
+	_ZN15CPhoneStateIdle26HandlePhoneFocusLostEventLEv @ 123 NONAME
+	_ZN15CPhoneStateIdle27HandlePhoneForegroundEventLEv @ 124 NONAME
+	_ZN15CPhoneStateIdle5DialLERK7TDesC1616TPhoneNumberTypeNS_21TDialInitiationMethodE @ 125 NONAME
+	_ZN15CPhoneStateIdleC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 126 NONAME
+	_ZN15CPhoneStateIdleC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 127 NONAME
+	_ZN15CPhoneStateIdleD0Ev @ 128 NONAME
+	_ZN15CPhoneStateIdleD1Ev @ 129 NONAME
+	_ZN15CPhoneStateIdleD2Ev @ 130 NONAME
+	_ZN16CPhoneCbaManager10UpdateCbaLEi @ 131 NONAME
+	_ZN16CPhoneCbaManager18UpdateIncomingCbaLEi @ 132 NONAME
+	_ZN16CPhoneCbaManager7SetCbaLEi @ 133 NONAME
+	_ZN17CPhoneStateHandle17ViewCommandHandleEv @ 134 NONAME
+	_ZN17CPhoneStateHandle8InstanceEv @ 135 NONAME
+	_ZN17CPhoneStateInCall10ConstructLEv @ 136 NONAME
+	_ZN17CPhoneStateInCall10UpdateCbaLEi @ 137 NONAME
+	_ZN17CPhoneStateInCall11HandleIdleLEi @ 138 NONAME
+	_ZN17CPhoneStateInCall12OpenMenuBarLEv @ 139 NONAME
+	_ZN17CPhoneStateInCall14HandleCommandLEi @ 140 NONAME
+	_ZN17CPhoneStateInCall15CloseDtmfQueryLEv @ 141 NONAME
+	_ZN17CPhoneStateInCall15GetRingingCallLEv @ 142 NONAME
+	_ZN17CPhoneStateInCall16UpdateInCallCbaLEv @ 143 NONAME
+	_ZN17CPhoneStateInCall17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 144 NONAME
+	_ZN17CPhoneStateInCall18CallFetchedNumberLERK7TDesC16 @ 145 NONAME
+	_ZN17CPhoneStateInCall18CreateNumberEntryLEv @ 146 NONAME
+	_ZN17CPhoneStateInCall18IsVideoCallActiveLEv @ 147 NONAME
+	_ZN17CPhoneStateInCall19IsVideoCallRingingLEv @ 148 NONAME
+	_ZN17CPhoneStateInCall19LaunchNewCallQueryLEv @ 149 NONAME
+	_ZN17CPhoneStateInCall22HandlePropertyChangedLERK4TUidji @ 150 NONAME
+	_ZN17CPhoneStateInCall23DisconnectOutgoingCallLEv @ 151 NONAME
+	_ZN17CPhoneStateInCall25HandleNumberEntryClearedLEv @ 152 NONAME
+	_ZN17CPhoneStateInCall25HandlePhoneEngineMessageLEii @ 153 NONAME
+	_ZN17CPhoneStateInCall34PhoneNumberAvailableInPhoneEngineLEi @ 154 NONAME
+	_ZN17CPhoneStateInCallC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 155 NONAME
+	_ZN17CPhoneStateInCallC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 156 NONAME
+	_ZN17CPhoneStateInCallD0Ev @ 157 NONAME
+	_ZN17CPhoneStateInCallD1Ev @ 158 NONAME
+	_ZN17CPhoneStateInCallD2Ev @ 159 NONAME
+	_ZN18CPhoneStateMachine11ChangeStateEi @ 160 NONAME
+	_ZN18CPhoneStateMachine11PhoneEngineEv @ 161 NONAME
+	_ZN18CPhoneStateMachine12SecurityModeEv @ 162 NONAME
+	_ZN18CPhoneStateMachine14SetPhoneEngineEP13MPEPhoneModel @ 163 NONAME
+	_ZN18CPhoneStateMachine15PhoneEngineInfoEv @ 164 NONAME
+	_ZN18CPhoneStateMachine18CreatePhoneEngineLER14MEngineMonitor @ 165 NONAME
+	_ZN18CPhoneStateMachine22HandlePropertyChangedLERK4TUidji @ 166 NONAME
+	_ZN18CPhoneStateMachine22SendPhoneEngineMessageEi @ 167 NONAME
+	_ZN18CPhoneStateMachine23SetSecurityModeObserverEP26MPhoneSecurityModeObserver @ 168 NONAME
+	_ZN18CPhoneStateMachine25HandlePhoneEngineMessageLEii @ 169 NONAME
+	_ZN18CPhoneStateMachine25SetSecurityMessageHandlerEP28MPhoneSecurityMessageHandler @ 170 NONAME
 	_ZN18CPhoneStateMachine5StateEv @ 171 NONAME
 	_ZN18CPhoneStateMachine9SetCallIdEi @ 172 NONAME
 	_ZN18CPhoneStateMachineC1EP23MPhoneViewCommandHandle @ 173 NONAME
@@ -184,28 +184,28 @@
 	_ZN18CPhoneStateStartup24HandleCreateNumberEntryLERK9TKeyEvent10TEventCode @ 183 NONAME
 	_ZN18CPhoneStateStartup25HandlePhoneEngineMessageLEii @ 184 NONAME
 	_ZN18CPhoneStateStartup26HandleIdleForegroundEventLEv @ 185 NONAME
-	_ZN18CPhoneStateStartup4NewLEP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 186 NONAME
-	_ZN18CPhoneStateStartupC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 187 NONAME
-	_ZN18CPhoneStateStartupC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 188 NONAME
-	_ZN18CPhoneStateStartupD0Ev @ 189 NONAME
-	_ZN18CPhoneStateStartupD1Ev @ 190 NONAME
-	_ZN18CPhoneStateStartupD2Ev @ 191 NONAME
-	_ZN18CPhoneUIController11HandleErrorERK12TPEErrorInfo @ 192 NONAME
-	_ZN18CPhoneUIController13HandleMessageEii @ 193 NONAME
-	_ZN18CPhoneUIController14HandleCommandLEi @ 194 NONAME
-	_ZN18CPhoneUIController15DynInitMenuBarLEiP11CEikMenuBar @ 195 NONAME
-	_ZN18CPhoneUIController15HandleKeyEventLERK9TKeyEvent10TEventCode @ 196 NONAME
-	_ZN18CPhoneUIController15ProcessCommandLEi @ 197 NONAME
-	_ZN18CPhoneUIController16DynInitMenuPaneLEiP12CEikMenuPane @ 198 NONAME
-	_ZN18CPhoneUIController18HandleSystemEventLERK8TWsEvent @ 199 NONAME
-	_ZN18CPhoneUIController19HandlePhoneStartupLEv @ 200 NONAME
-	_ZN18CPhoneUIController20HandleKeyLockEnabledEi @ 201 NONAME
+	_ZN18CPhoneStateStartup26HandlePEConstructionReadyLEi @ 186 NONAME
+	_ZN18CPhoneStateStartup4NewLEP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 187 NONAME
+	_ZN18CPhoneStateStartupC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 188 NONAME
+	_ZN18CPhoneStateStartupC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 189 NONAME
+	_ZN18CPhoneStateStartupD0Ev @ 190 NONAME
+	_ZN18CPhoneStateStartupD1Ev @ 191 NONAME
+	_ZN18CPhoneStateStartupD2Ev @ 192 NONAME
+	_ZN18CPhoneUIController11HandleErrorERK12TPEErrorInfo @ 193 NONAME
+	_ZN18CPhoneUIController13HandleMessageEii @ 194 NONAME
+	_ZN18CPhoneUIController14HandleCommandLEi @ 195 NONAME
+	_ZN18CPhoneUIController15DynInitMenuBarLEiP11CEikMenuBar @ 196 NONAME
+	_ZN18CPhoneUIController15HandleKeyEventLERK9TKeyEvent10TEventCode @ 197 NONAME
+	_ZN18CPhoneUIController15ProcessCommandLEi @ 198 NONAME
+	_ZN18CPhoneUIController16DynInitMenuPaneLEiP12CEikMenuPane @ 199 NONAME
+	_ZN18CPhoneUIController18HandleSystemEventLERK8TWsEvent @ 200 NONAME
+	_ZN18CPhoneUIController19HandlePhoneStartupLEv @ 201 NONAME
 	_ZN18CPhoneUIController22HandleForegroundEventLEi @ 202 NONAME
 	_ZN18CPhoneUIController24HandleEnvironmentChangeLEi @ 203 NONAME
 	_ZN18CPhoneUIController26HandleIdleForegroundEventLEv @ 204 NONAME
 	_ZN18CPhoneUIController26HandlePhoneFocusLostEventLEv @ 205 NONAME
 	_ZN18CPhoneUIController27HandlePhoneForegroundEventLEv @ 206 NONAME
-	_ZN18CPhoneUIController4NewLEP23MPhoneViewCommandHandle @ 207 NONAME
+	_ZN18CPhoneUIController4NewLER20CPhoneViewController @ 207 NONAME
 	_ZN18CPhoneUIControllerD0Ev @ 208 NONAME
 	_ZN18CPhoneUIControllerD1Ev @ 209 NONAME
 	_ZN18CPhoneUIControllerD2Ev @ 210 NONAME
@@ -214,206 +214,206 @@
 	_ZN19CPhoneStateIncoming15HandleKeyEventLERK9TKeyEvent10TEventCode @ 213 NONAME
 	_ZN19CPhoneStateIncoming16DynInitMenuPaneLEiP12CEikMenuPane @ 214 NONAME
 	_ZN19CPhoneStateIncoming17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 215 NONAME
-	_ZN19CPhoneStateIncoming20HandleKeyLockEnabledEi @ 216 NONAME
-	_ZN19CPhoneStateIncoming23HandleAudioPlayStoppedLEv @ 217 NONAME
-	_ZN19CPhoneStateIncoming23HandleKeyPressDurationLE8TKeyCode25TTimeIntervalMicroSeconds @ 218 NONAME
-	_ZN19CPhoneStateIncoming25HandleNumberEntryClearedLEv @ 219 NONAME
-	_ZN19CPhoneStateIncoming25HandlePhoneEngineMessageLEii @ 220 NONAME
-	_ZN19CPhoneStateIncomingC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 221 NONAME
-	_ZN19CPhoneStateIncomingC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 222 NONAME
-	_ZN19CPhoneStateIncomingD0Ev @ 223 NONAME
-	_ZN19CPhoneStateIncomingD1Ev @ 224 NONAME
-	_ZN19CPhoneStateIncomingD2Ev @ 225 NONAME
-	_ZN20CPhoneReconnectQuery19ShowReconnectQueryLEi @ 226 NONAME
-	_ZN20CPhoneReconnectQuery9InstanceLEv @ 227 NONAME
-	_ZN20CPhoneStateCallSetup10ConstructLEv @ 228 NONAME
-	_ZN20CPhoneStateCallSetup10UpdateCbaLEi @ 229 NONAME
-	_ZN20CPhoneStateCallSetup12OpenMenuBarLEv @ 230 NONAME
-	_ZN20CPhoneStateCallSetup14HandleCommandLEi @ 231 NONAME
-	_ZN20CPhoneStateCallSetup15HandleKeyEventLERK9TKeyEvent10TEventCode @ 232 NONAME
-	_ZN20CPhoneStateCallSetup16UpdateInCallCbaLEv @ 233 NONAME
-	_ZN20CPhoneStateCallSetup17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 234 NONAME
-	_ZN20CPhoneStateCallSetup24HandleCreateNumberEntryLERK9TKeyEvent10TEventCode @ 235 NONAME
-	_ZN20CPhoneStateCallSetup25HandleNumberEntryClearedLEv @ 236 NONAME
-	_ZN20CPhoneStateCallSetup25HandlePhoneEngineMessageLEii @ 237 NONAME
-	_ZN20CPhoneStateCallSetupC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 238 NONAME
-	_ZN20CPhoneStateCallSetupC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 239 NONAME
-	_ZN20CPhoneStateCallSetupD0Ev @ 240 NONAME
-	_ZN20CPhoneStateCallSetupD1Ev @ 241 NONAME
-	_ZN20CPhoneStateCallSetupD2Ev @ 242 NONAME
-	_ZNK11CPhoneState11IsKeyLockOnEv @ 243 NONAME
-	_ZNK11CPhoneState12IsAutoLockOnEv @ 244 NONAME
-	_ZNK11CPhoneState14IsSwivelClosedEv @ 245 NONAME
-	_ZNK11CPhoneState17GetBlockedKeyListEv @ 246 NONAME
-	_ZNK11CPhoneState17IsMenuBarVisibleLEv @ 247 NONAME
-	_ZNK11CPhoneState18TopAppIsDisplayedLEv @ 248 NONAME
-	_ZNK11CPhoneState20IsDTMFEditorVisibleLEv @ 249 NONAME
-	_ZNK11CPhoneState23NeedToSendToBackgroundLEv @ 250 NONAME
-	_ZNK11CPhoneState25IsOnScreenDialerSupportedEv @ 251 NONAME
-	_ZNK11CPhoneState26IsCustomizedDialerVisibleLEv @ 252 NONAME
-	_ZNK11CPhoneState8SimStateEv @ 253 NONAME
-	_ZNK15CPhoneStateIdle17IsSpeedDialNumberERK7TDesC16 @ 254 NONAME
-	_ZTI11CPhoneState @ 255 NONAME
-	_ZTI15CPhoneStateIdle @ 256 NONAME
-	_ZTI17CPhoneStateHandle @ 257 NONAME
-	_ZTI17CPhoneStateInCall @ 258 NONAME
-	_ZTI18CPhoneStateMachine @ 259 NONAME
-	_ZTI18CPhoneStateStartup @ 260 NONAME
-	_ZTI18CPhoneUIController @ 261 NONAME
-	_ZTI19CPhoneStateIncoming @ 262 NONAME
-	_ZTI20CPhoneReconnectQuery @ 263 NONAME
-	_ZTI20CPhoneStateCallSetup @ 264 NONAME
-	_ZTI23CPhoneDtmfWaitCharTimer @ 265 NONAME
-	_ZTI23CPhoneKeyEventForwarder @ 266 NONAME
-	_ZTI24CPhoneSystemEventHandler @ 267 NONAME
-	_ZTI26CPhoneRemoteControlHandler @ 268 NONAME
-	_ZTI27CPhoneBtaaDisconnectHandler @ 269 NONAME
-	_ZTV11CPhoneState @ 270 NONAME
-	_ZTV15CPhoneStateIdle @ 271 NONAME
-	_ZTV17CPhoneStateHandle @ 272 NONAME
-	_ZTV17CPhoneStateInCall @ 273 NONAME
-	_ZTV18CPhoneStateMachine @ 274 NONAME
-	_ZTV18CPhoneStateStartup @ 275 NONAME
-	_ZTV18CPhoneUIController @ 276 NONAME
-	_ZTV19CPhoneStateIncoming @ 277 NONAME
-	_ZTV20CPhoneReconnectQuery @ 278 NONAME
-	_ZTV20CPhoneStateCallSetup @ 279 NONAME
-	_ZTV23CPhoneDtmfWaitCharTimer @ 280 NONAME
-	_ZTV23CPhoneKeyEventForwarder @ 281 NONAME
-	_ZTV24CPhoneSystemEventHandler @ 282 NONAME
-	_ZTV26CPhoneRemoteControlHandler @ 283 NONAME
-	_ZTV27CPhoneBtaaDisconnectHandler @ 284 NONAME
-	_ZThn12_N11CPhoneState15DynInitMenuBarLEiP11CEikMenuBar @ 285 NONAME
-	_ZThn12_N11CPhoneState16DynInitMenuPaneLEiP12CEikMenuPane @ 286 NONAME
-	_ZThn12_N11CPhoneState18HandleSystemEventLERK8TWsEvent @ 287 NONAME
-	_ZThn12_N11CPhoneState19HandleCenRepChangeLERK4TUidj @ 288 NONAME
-	_ZThn12_N11CPhoneState19HandlePhoneStartupLEv @ 289 NONAME
-	_ZThn12_N11CPhoneState20HandleKeyLockEnabledEi @ 290 NONAME
-	_ZThn12_N11CPhoneState22HandleForegroundEventLEi @ 291 NONAME
-	_ZThn12_N11CPhoneState22HandlePropertyChangedLERK4TUidji @ 292 NONAME
-	_ZThn12_N11CPhoneState24HandleEnvironmentChangeLEi @ 293 NONAME
-	_ZThn12_N11CPhoneState26HandleIdleForegroundEventLEv @ 294 NONAME
-	_ZThn12_N11CPhoneState26HandlePhoneFocusLostEventLEv @ 295 NONAME
-	_ZThn12_N11CPhoneState27HandlePhoneForegroundEventLEv @ 296 NONAME
-	_ZThn12_N11CPhoneStateD0Ev @ 297 NONAME
-	_ZThn12_N11CPhoneStateD1Ev @ 298 NONAME
-	_ZThn12_N15CPhoneStateIdle26HandleIdleForegroundEventLEv @ 299 NONAME
-	_ZThn12_N15CPhoneStateIdle26HandlePhoneFocusLostEventLEv @ 300 NONAME
-	_ZThn12_N15CPhoneStateIdle27HandlePhoneForegroundEventLEv @ 301 NONAME
-	_ZThn12_N15CPhoneStateIdleD0Ev @ 302 NONAME
-	_ZThn12_N15CPhoneStateIdleD1Ev @ 303 NONAME
-	_ZThn12_N17CPhoneStateInCallD0Ev @ 304 NONAME
-	_ZThn12_N17CPhoneStateInCallD1Ev @ 305 NONAME
-	_ZThn12_N18CPhoneStateStartup19HandlePhoneStartupLEv @ 306 NONAME
-	_ZThn12_N18CPhoneStateStartup26HandleIdleForegroundEventLEv @ 307 NONAME
-	_ZThn12_N18CPhoneStateStartupD0Ev @ 308 NONAME
-	_ZThn12_N18CPhoneStateStartupD1Ev @ 309 NONAME
-	_ZThn12_N18CPhoneUIController15DynInitMenuBarLEiP11CEikMenuBar @ 310 NONAME
-	_ZThn12_N18CPhoneUIController16DynInitMenuPaneLEiP12CEikMenuPane @ 311 NONAME
-	_ZThn12_N18CPhoneUIController18HandleSystemEventLERK8TWsEvent @ 312 NONAME
-	_ZThn12_N18CPhoneUIController19HandlePhoneStartupLEv @ 313 NONAME
-	_ZThn12_N18CPhoneUIController20HandleKeyLockEnabledEi @ 314 NONAME
-	_ZThn12_N18CPhoneUIController22HandleForegroundEventLEi @ 315 NONAME
-	_ZThn12_N18CPhoneUIController24HandleEnvironmentChangeLEi @ 316 NONAME
-	_ZThn12_N18CPhoneUIController26HandleIdleForegroundEventLEv @ 317 NONAME
-	_ZThn12_N18CPhoneUIController26HandlePhoneFocusLostEventLEv @ 318 NONAME
-	_ZThn12_N18CPhoneUIController27HandlePhoneForegroundEventLEv @ 319 NONAME
-	_ZThn12_N18CPhoneUIControllerD0Ev @ 320 NONAME
-	_ZThn12_N18CPhoneUIControllerD1Ev @ 321 NONAME
-	_ZThn12_N19CPhoneStateIncoming16DynInitMenuPaneLEiP12CEikMenuPane @ 322 NONAME
-	_ZThn12_N19CPhoneStateIncoming20HandleKeyLockEnabledEi @ 323 NONAME
-	_ZThn12_N19CPhoneStateIncomingD0Ev @ 324 NONAME
-	_ZThn12_N19CPhoneStateIncomingD1Ev @ 325 NONAME
-	_ZThn12_N20CPhoneStateCallSetupD0Ev @ 326 NONAME
-	_ZThn12_N20CPhoneStateCallSetupD1Ev @ 327 NONAME
-	_ZThn16_N11CPhoneState14HandleCommandLEi @ 328 NONAME
-	_ZThn16_N11CPhoneState15ProcessCommandLEi @ 329 NONAME
-	_ZThn16_N11CPhoneStateD0Ev @ 330 NONAME
-	_ZThn16_N11CPhoneStateD1Ev @ 331 NONAME
-	_ZThn16_N15CPhoneStateIdle14HandleCommandLEi @ 332 NONAME
-	_ZThn16_N15CPhoneStateIdle15ProcessCommandLEi @ 333 NONAME
-	_ZThn16_N15CPhoneStateIdleD0Ev @ 334 NONAME
-	_ZThn16_N15CPhoneStateIdleD1Ev @ 335 NONAME
-	_ZThn16_N17CPhoneStateInCall14HandleCommandLEi @ 336 NONAME
-	_ZThn16_N17CPhoneStateInCallD0Ev @ 337 NONAME
-	_ZThn16_N17CPhoneStateInCallD1Ev @ 338 NONAME
-	_ZThn16_N18CPhoneStateStartupD0Ev @ 339 NONAME
-	_ZThn16_N18CPhoneStateStartupD1Ev @ 340 NONAME
-	_ZThn16_N18CPhoneUIController14HandleCommandLEi @ 341 NONAME
-	_ZThn16_N18CPhoneUIController15ProcessCommandLEi @ 342 NONAME
-	_ZThn16_N18CPhoneUIControllerD0Ev @ 343 NONAME
-	_ZThn16_N18CPhoneUIControllerD1Ev @ 344 NONAME
-	_ZThn16_N19CPhoneStateIncoming14HandleCommandLEi @ 345 NONAME
-	_ZThn16_N19CPhoneStateIncomingD0Ev @ 346 NONAME
-	_ZThn16_N19CPhoneStateIncomingD1Ev @ 347 NONAME
-	_ZThn16_N20CPhoneStateCallSetup14HandleCommandLEi @ 348 NONAME
-	_ZThn16_N20CPhoneStateCallSetupD0Ev @ 349 NONAME
-	_ZThn16_N20CPhoneStateCallSetupD1Ev @ 350 NONAME
-	_ZThn20_N11CPhoneState20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 351 NONAME
-	_ZThn20_N11CPhoneStateD0Ev @ 352 NONAME
-	_ZThn20_N11CPhoneStateD1Ev @ 353 NONAME
-	_ZThn20_N15CPhoneStateIdle20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 354 NONAME
-	_ZThn20_N15CPhoneStateIdleD0Ev @ 355 NONAME
-	_ZThn20_N15CPhoneStateIdleD1Ev @ 356 NONAME
-	_ZThn20_N17CPhoneStateInCallD0Ev @ 357 NONAME
-	_ZThn20_N17CPhoneStateInCallD1Ev @ 358 NONAME
-	_ZThn20_N18CPhoneStateStartupD0Ev @ 359 NONAME
-	_ZThn20_N18CPhoneStateStartupD1Ev @ 360 NONAME
-	_ZThn20_N19CPhoneStateIncomingD0Ev @ 361 NONAME
-	_ZThn20_N19CPhoneStateIncomingD1Ev @ 362 NONAME
-	_ZThn20_N20CPhoneStateCallSetupD0Ev @ 363 NONAME
-	_ZThn20_N20CPhoneStateCallSetupD1Ev @ 364 NONAME
-	_ZThn24_N11CPhoneState19SetDivertIndicationEi @ 365 NONAME
-	_ZThn24_N11CPhoneStateD0Ev @ 366 NONAME
-	_ZThn24_N11CPhoneStateD1Ev @ 367 NONAME
-	_ZThn24_N15CPhoneStateIdleD0Ev @ 368 NONAME
-	_ZThn24_N15CPhoneStateIdleD1Ev @ 369 NONAME
-	_ZThn24_N17CPhoneStateInCallD0Ev @ 370 NONAME
-	_ZThn24_N17CPhoneStateInCallD1Ev @ 371 NONAME
-	_ZThn24_N18CPhoneStateStartupD0Ev @ 372 NONAME
-	_ZThn24_N18CPhoneStateStartupD1Ev @ 373 NONAME
-	_ZThn24_N19CPhoneStateIncomingD0Ev @ 374 NONAME
-	_ZThn24_N19CPhoneStateIncomingD1Ev @ 375 NONAME
-	_ZThn24_N20CPhoneStateCallSetupD0Ev @ 376 NONAME
-	_ZThn24_N20CPhoneStateCallSetupD1Ev @ 377 NONAME
-	_ZThn28_NK11CPhoneState17GetBlockedKeyListEv @ 378 NONAME
-	_ZThn32_N11CPhoneState25HandleNumberEntryClearedLEv @ 379 NONAME
-	_ZThn32_N15CPhoneStateIdle25HandleNumberEntryClearedLEv @ 380 NONAME
-	_ZThn32_N17CPhoneStateInCall25HandleNumberEntryClearedLEv @ 381 NONAME
-	_ZThn32_N19CPhoneStateIncoming25HandleNumberEntryClearedLEv @ 382 NONAME
-	_ZThn32_N20CPhoneStateCallSetup25HandleNumberEntryClearedLEv @ 383 NONAME
-	_ZThn36_N11CPhoneState23HandleNumberEntryEditedEv @ 384 NONAME
-	_ZThn36_N11CPhoneStateD0Ev @ 385 NONAME
-	_ZThn36_N11CPhoneStateD1Ev @ 386 NONAME
-	_ZThn36_N15CPhoneStateIdleD0Ev @ 387 NONAME
-	_ZThn36_N15CPhoneStateIdleD1Ev @ 388 NONAME
-	_ZThn36_N17CPhoneStateInCallD0Ev @ 389 NONAME
-	_ZThn36_N17CPhoneStateInCallD1Ev @ 390 NONAME
-	_ZThn36_N18CPhoneStateStartupD0Ev @ 391 NONAME
-	_ZThn36_N18CPhoneStateStartupD1Ev @ 392 NONAME
-	_ZThn36_N19CPhoneStateIncomingD0Ev @ 393 NONAME
-	_ZThn36_N19CPhoneStateIncomingD1Ev @ 394 NONAME
-	_ZThn36_N20CPhoneStateCallSetupD0Ev @ 395 NONAME
-	_ZThn36_N20CPhoneStateCallSetupD1Ev @ 396 NONAME
-	_ZThn40_NK11CPhoneState11IsKeyLockOnEv @ 397 NONAME
-	_ZThn40_NK11CPhoneState12IsAutoLockOnEv @ 398 NONAME
-	_ZThn4_N11CPhoneState12HandleErrorLERK12TPEErrorInfo @ 399 NONAME
-	_ZThn4_N11CPhoneState25HandlePhoneEngineMessageLEii @ 400 NONAME
-	_ZThn4_N11CPhoneStateD0Ev @ 401 NONAME
-	_ZThn4_N11CPhoneStateD1Ev @ 402 NONAME
-	_ZThn4_N15CPhoneStateIdle25HandlePhoneEngineMessageLEii @ 403 NONAME
-	_ZThn4_N15CPhoneStateIdleD0Ev @ 404 NONAME
-	_ZThn4_N15CPhoneStateIdleD1Ev @ 405 NONAME
-	_ZThn4_N17CPhoneStateInCall25HandlePhoneEngineMessageLEii @ 406 NONAME
-	_ZThn4_N17CPhoneStateInCallD0Ev @ 407 NONAME
-	_ZThn4_N17CPhoneStateInCallD1Ev @ 408 NONAME
-	_ZThn4_N18CPhoneStateMachine11ChangeStateEi @ 409 NONAME
-	_ZThn4_N18CPhoneStateMachine11PhoneEngineEv @ 410 NONAME
-	_ZThn4_N18CPhoneStateMachine12PhoneStorageEv @ 411 NONAME
-	_ZThn4_N18CPhoneStateMachine14SetPhoneEngineEP13MPEPhoneModel @ 412 NONAME
-	_ZThn4_N18CPhoneStateMachine15PhoneEngineInfoEv @ 413 NONAME
-	_ZThn4_N18CPhoneStateMachine18CreatePhoneEngineLER14MEngineMonitor @ 414 NONAME
-	_ZThn4_N18CPhoneStateMachine22SendPhoneEngineMessageEi @ 415 NONAME
+	_ZN19CPhoneStateIncoming23HandleAudioPlayStoppedLEv @ 216 NONAME
+	_ZN19CPhoneStateIncoming23HandleKeyPressDurationLE8TKeyCode25TTimeIntervalMicroSeconds @ 217 NONAME
+	_ZN19CPhoneStateIncoming25HandleNumberEntryClearedLEv @ 218 NONAME
+	_ZN19CPhoneStateIncoming25HandlePhoneEngineMessageLEii @ 219 NONAME
+	_ZN19CPhoneStateIncomingC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 220 NONAME
+	_ZN19CPhoneStateIncomingC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 221 NONAME
+	_ZN19CPhoneStateIncomingD0Ev @ 222 NONAME
+	_ZN19CPhoneStateIncomingD1Ev @ 223 NONAME
+	_ZN19CPhoneStateIncomingD2Ev @ 224 NONAME
+	_ZN20CPhoneReconnectQuery19ShowReconnectQueryLEi @ 225 NONAME
+	_ZN20CPhoneReconnectQuery9InstanceLEv @ 226 NONAME
+	_ZN20CPhoneStateCallSetup10ConstructLEv @ 227 NONAME
+	_ZN20CPhoneStateCallSetup10UpdateCbaLEi @ 228 NONAME
+	_ZN20CPhoneStateCallSetup12OpenMenuBarLEv @ 229 NONAME
+	_ZN20CPhoneStateCallSetup14HandleCommandLEi @ 230 NONAME
+	_ZN20CPhoneStateCallSetup15HandleKeyEventLERK9TKeyEvent10TEventCode @ 231 NONAME
+	_ZN20CPhoneStateCallSetup16UpdateInCallCbaLEv @ 232 NONAME
+	_ZN20CPhoneStateCallSetup17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 233 NONAME
+	_ZN20CPhoneStateCallSetup24HandleCreateNumberEntryLERK9TKeyEvent10TEventCode @ 234 NONAME
+	_ZN20CPhoneStateCallSetup25HandleNumberEntryClearedLEv @ 235 NONAME
+	_ZN20CPhoneStateCallSetup25HandlePhoneEngineMessageLEii @ 236 NONAME
+	_ZN20CPhoneStateCallSetupC1EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 237 NONAME
+	_ZN20CPhoneStateCallSetupC2EP18MPhoneStateMachineP23MPhoneViewCommandHandleP19MPhoneCustomization @ 238 NONAME
+	_ZN20CPhoneStateCallSetupD0Ev @ 239 NONAME
+	_ZN20CPhoneStateCallSetupD1Ev @ 240 NONAME
+	_ZN20CPhoneStateCallSetupD2Ev @ 241 NONAME
+	_ZNK11CPhoneState11IsKeyLockOnEv @ 242 NONAME
+	_ZNK11CPhoneState12IsAutoLockOnEv @ 243 NONAME
+	_ZNK11CPhoneState14IsSwivelClosedEv @ 244 NONAME
+	_ZNK11CPhoneState17IsMenuBarVisibleLEv @ 245 NONAME
+	_ZNK11CPhoneState18TopAppIsDisplayedLEv @ 246 NONAME
+	_ZNK11CPhoneState20IsDTMFEditorVisibleLEv @ 247 NONAME
+	_ZNK11CPhoneState25IsOnScreenDialerSupportedEv @ 248 NONAME
+	_ZNK11CPhoneState26IsCustomizedDialerVisibleLEv @ 249 NONAME
+	_ZNK11CPhoneState26IsDialingExtensionInFocusLEv @ 250 NONAME
+	_ZNK11CPhoneState28NeedToReturnToForegroundAppLEv @ 251 NONAME
+	_ZNK11CPhoneState8SimStateEv @ 252 NONAME
+	_ZNK15CPhoneStateIdle17IsSpeedDialNumberERK7TDesC16 @ 253 NONAME
+	_ZTI11CPhoneState @ 254 NONAME
+	_ZTI15CPhoneStateIdle @ 255 NONAME
+	_ZTI17CPhoneStateHandle @ 256 NONAME
+	_ZTI17CPhoneStateInCall @ 257 NONAME
+	_ZTI18CPhoneStateMachine @ 258 NONAME
+	_ZTI18CPhoneStateStartup @ 259 NONAME
+	_ZTI18CPhoneUIController @ 260 NONAME
+	_ZTI19CPhoneStateIncoming @ 261 NONAME
+	_ZTI20CPhoneReconnectQuery @ 262 NONAME
+	_ZTI20CPhoneStateCallSetup @ 263 NONAME
+	_ZTI23CPhoneDtmfWaitCharTimer @ 264 NONAME
+	_ZTI23CPhoneKeyEventForwarder @ 265 NONAME
+	_ZTI24CPhoneSystemEventHandler @ 266 NONAME
+	_ZTI26CPhoneRemoteControlHandler @ 267 NONAME
+	_ZTI27CPhoneBtaaDisconnectHandler @ 268 NONAME
+	_ZTV11CPhoneState @ 269 NONAME
+	_ZTV15CPhoneStateIdle @ 270 NONAME
+	_ZTV17CPhoneStateHandle @ 271 NONAME
+	_ZTV17CPhoneStateInCall @ 272 NONAME
+	_ZTV18CPhoneStateMachine @ 273 NONAME
+	_ZTV18CPhoneStateStartup @ 274 NONAME
+	_ZTV18CPhoneUIController @ 275 NONAME
+	_ZTV19CPhoneStateIncoming @ 276 NONAME
+	_ZTV20CPhoneReconnectQuery @ 277 NONAME
+	_ZTV20CPhoneStateCallSetup @ 278 NONAME
+	_ZTV23CPhoneDtmfWaitCharTimer @ 279 NONAME
+	_ZTV23CPhoneKeyEventForwarder @ 280 NONAME
+	_ZTV24CPhoneSystemEventHandler @ 281 NONAME
+	_ZTV26CPhoneRemoteControlHandler @ 282 NONAME
+	_ZTV27CPhoneBtaaDisconnectHandler @ 283 NONAME
+	_ZThn12_N11CPhoneState15DynInitMenuBarLEiP11CEikMenuBar @ 284 NONAME
+	_ZThn12_N11CPhoneState16DynInitMenuPaneLEiP12CEikMenuPane @ 285 NONAME
+	_ZThn12_N11CPhoneState18HandleSystemEventLERK8TWsEvent @ 286 NONAME
+	_ZThn12_N11CPhoneState19HandleCenRepChangeLERK4TUidj @ 287 NONAME
+	_ZThn12_N11CPhoneState19HandlePhoneStartupLEv @ 288 NONAME
+	_ZThn12_N11CPhoneState22HandleForegroundEventLEi @ 289 NONAME
+	_ZThn12_N11CPhoneState22HandlePropertyChangedLERK4TUidji @ 290 NONAME
+	_ZThn12_N11CPhoneState24HandleEnvironmentChangeLEi @ 291 NONAME
+	_ZThn12_N11CPhoneState26HandleIdleForegroundEventLEv @ 292 NONAME
+	_ZThn12_N11CPhoneState26HandlePhoneFocusLostEventLEv @ 293 NONAME
+	_ZThn12_N11CPhoneState27HandlePhoneForegroundEventLEv @ 294 NONAME
+	_ZThn12_N11CPhoneStateD0Ev @ 295 NONAME
+	_ZThn12_N11CPhoneStateD1Ev @ 296 NONAME
+	_ZThn12_N15CPhoneStateIdle26HandleIdleForegroundEventLEv @ 297 NONAME
+	_ZThn12_N15CPhoneStateIdle26HandlePhoneFocusLostEventLEv @ 298 NONAME
+	_ZThn12_N15CPhoneStateIdle27HandlePhoneForegroundEventLEv @ 299 NONAME
+	_ZThn12_N15CPhoneStateIdleD0Ev @ 300 NONAME
+	_ZThn12_N15CPhoneStateIdleD1Ev @ 301 NONAME
+	_ZThn12_N17CPhoneStateInCall22HandlePropertyChangedLERK4TUidji @ 302 NONAME
+	_ZThn12_N17CPhoneStateInCallD0Ev @ 303 NONAME
+	_ZThn12_N17CPhoneStateInCallD1Ev @ 304 NONAME
+	_ZThn12_N18CPhoneStateStartup19HandlePhoneStartupLEv @ 305 NONAME
+	_ZThn12_N18CPhoneStateStartup26HandleIdleForegroundEventLEv @ 306 NONAME
+	_ZThn12_N18CPhoneStateStartupD0Ev @ 307 NONAME
+	_ZThn12_N18CPhoneStateStartupD1Ev @ 308 NONAME
+	_ZThn12_N18CPhoneUIController15DynInitMenuBarLEiP11CEikMenuBar @ 309 NONAME
+	_ZThn12_N18CPhoneUIController16DynInitMenuPaneLEiP12CEikMenuPane @ 310 NONAME
+	_ZThn12_N18CPhoneUIController18HandleSystemEventLERK8TWsEvent @ 311 NONAME
+	_ZThn12_N18CPhoneUIController19HandlePhoneStartupLEv @ 312 NONAME
+	_ZThn12_N18CPhoneUIController22HandleForegroundEventLEi @ 313 NONAME
+	_ZThn12_N18CPhoneUIController24HandleEnvironmentChangeLEi @ 314 NONAME
+	_ZThn12_N18CPhoneUIController26HandleIdleForegroundEventLEv @ 315 NONAME
+	_ZThn12_N18CPhoneUIController26HandlePhoneFocusLostEventLEv @ 316 NONAME
+	_ZThn12_N18CPhoneUIController27HandlePhoneForegroundEventLEv @ 317 NONAME
+	_ZThn12_N18CPhoneUIControllerD0Ev @ 318 NONAME
+	_ZThn12_N18CPhoneUIControllerD1Ev @ 319 NONAME
+	_ZThn12_N19CPhoneStateIncoming16DynInitMenuPaneLEiP12CEikMenuPane @ 320 NONAME
+	_ZThn12_N19CPhoneStateIncomingD0Ev @ 321 NONAME
+	_ZThn12_N19CPhoneStateIncomingD1Ev @ 322 NONAME
+	_ZThn12_N20CPhoneStateCallSetupD0Ev @ 323 NONAME
+	_ZThn12_N20CPhoneStateCallSetupD1Ev @ 324 NONAME
+	_ZThn16_N11CPhoneState14HandleCommandLEi @ 325 NONAME
+	_ZThn16_N11CPhoneState15ProcessCommandLEi @ 326 NONAME
+	_ZThn16_N11CPhoneStateD0Ev @ 327 NONAME
+	_ZThn16_N11CPhoneStateD1Ev @ 328 NONAME
+	_ZThn16_N15CPhoneStateIdle14HandleCommandLEi @ 329 NONAME
+	_ZThn16_N15CPhoneStateIdle15ProcessCommandLEi @ 330 NONAME
+	_ZThn16_N15CPhoneStateIdleD0Ev @ 331 NONAME
+	_ZThn16_N15CPhoneStateIdleD1Ev @ 332 NONAME
+	_ZThn16_N17CPhoneStateInCall14HandleCommandLEi @ 333 NONAME
+	_ZThn16_N17CPhoneStateInCallD0Ev @ 334 NONAME
+	_ZThn16_N17CPhoneStateInCallD1Ev @ 335 NONAME
+	_ZThn16_N18CPhoneStateStartupD0Ev @ 336 NONAME
+	_ZThn16_N18CPhoneStateStartupD1Ev @ 337 NONAME
+	_ZThn16_N18CPhoneUIController14HandleCommandLEi @ 338 NONAME
+	_ZThn16_N18CPhoneUIController15ProcessCommandLEi @ 339 NONAME
+	_ZThn16_N18CPhoneUIControllerD0Ev @ 340 NONAME
+	_ZThn16_N18CPhoneUIControllerD1Ev @ 341 NONAME
+	_ZThn16_N19CPhoneStateIncoming14HandleCommandLEi @ 342 NONAME
+	_ZThn16_N19CPhoneStateIncomingD0Ev @ 343 NONAME
+	_ZThn16_N19CPhoneStateIncomingD1Ev @ 344 NONAME
+	_ZThn16_N20CPhoneStateCallSetup14HandleCommandLEi @ 345 NONAME
+	_ZThn16_N20CPhoneStateCallSetupD0Ev @ 346 NONAME
+	_ZThn16_N20CPhoneStateCallSetupD1Ev @ 347 NONAME
+	_ZThn20_N11CPhoneState20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 348 NONAME
+	_ZThn20_N11CPhoneStateD0Ev @ 349 NONAME
+	_ZThn20_N11CPhoneStateD1Ev @ 350 NONAME
+	_ZThn20_N15CPhoneStateIdle20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 351 NONAME
+	_ZThn20_N15CPhoneStateIdleD0Ev @ 352 NONAME
+	_ZThn20_N15CPhoneStateIdleD1Ev @ 353 NONAME
+	_ZThn20_N17CPhoneStateInCallD0Ev @ 354 NONAME
+	_ZThn20_N17CPhoneStateInCallD1Ev @ 355 NONAME
+	_ZThn20_N18CPhoneStateStartupD0Ev @ 356 NONAME
+	_ZThn20_N18CPhoneStateStartupD1Ev @ 357 NONAME
+	_ZThn20_N19CPhoneStateIncomingD0Ev @ 358 NONAME
+	_ZThn20_N19CPhoneStateIncomingD1Ev @ 359 NONAME
+	_ZThn20_N20CPhoneStateCallSetupD0Ev @ 360 NONAME
+	_ZThn20_N20CPhoneStateCallSetupD1Ev @ 361 NONAME
+	_ZThn24_N11CPhoneState19SetDivertIndicationEi @ 362 NONAME
+	_ZThn24_N11CPhoneStateD0Ev @ 363 NONAME
+	_ZThn24_N11CPhoneStateD1Ev @ 364 NONAME
+	_ZThn24_N15CPhoneStateIdleD0Ev @ 365 NONAME
+	_ZThn24_N15CPhoneStateIdleD1Ev @ 366 NONAME
+	_ZThn24_N17CPhoneStateInCallD0Ev @ 367 NONAME
+	_ZThn24_N17CPhoneStateInCallD1Ev @ 368 NONAME
+	_ZThn24_N18CPhoneStateStartupD0Ev @ 369 NONAME
+	_ZThn24_N18CPhoneStateStartupD1Ev @ 370 NONAME
+	_ZThn24_N19CPhoneStateIncomingD0Ev @ 371 NONAME
+	_ZThn24_N19CPhoneStateIncomingD1Ev @ 372 NONAME
+	_ZThn24_N20CPhoneStateCallSetupD0Ev @ 373 NONAME
+	_ZThn24_N20CPhoneStateCallSetupD1Ev @ 374 NONAME
+	_ZThn28_N11CPhoneState25HandleNumberEntryClearedLEv @ 375 NONAME
+	_ZThn28_N15CPhoneStateIdle25HandleNumberEntryClearedLEv @ 376 NONAME
+	_ZThn28_N17CPhoneStateInCall25HandleNumberEntryClearedLEv @ 377 NONAME
+	_ZThn28_N19CPhoneStateIncoming25HandleNumberEntryClearedLEv @ 378 NONAME
+	_ZThn28_N20CPhoneStateCallSetup25HandleNumberEntryClearedLEv @ 379 NONAME
+	_ZThn32_N11CPhoneState23HandleNumberEntryEditedEv @ 380 NONAME
+	_ZThn32_N11CPhoneStateD0Ev @ 381 NONAME
+	_ZThn32_N11CPhoneStateD1Ev @ 382 NONAME
+	_ZThn32_N15CPhoneStateIdleD0Ev @ 383 NONAME
+	_ZThn32_N15CPhoneStateIdleD1Ev @ 384 NONAME
+	_ZThn32_N17CPhoneStateInCallD0Ev @ 385 NONAME
+	_ZThn32_N17CPhoneStateInCallD1Ev @ 386 NONAME
+	_ZThn32_N18CPhoneStateStartupD0Ev @ 387 NONAME
+	_ZThn32_N18CPhoneStateStartupD1Ev @ 388 NONAME
+	_ZThn32_N19CPhoneStateIncomingD0Ev @ 389 NONAME
+	_ZThn32_N19CPhoneStateIncomingD1Ev @ 390 NONAME
+	_ZThn32_N20CPhoneStateCallSetupD0Ev @ 391 NONAME
+	_ZThn32_N20CPhoneStateCallSetupD1Ev @ 392 NONAME
+	_ZThn36_NK11CPhoneState11IsKeyLockOnEv @ 393 NONAME
+	_ZThn36_NK11CPhoneState12IsAutoLockOnEv @ 394 NONAME
+	_ZThn4_N11CPhoneState12HandleErrorLERK12TPEErrorInfo @ 395 NONAME
+	_ZThn4_N11CPhoneState25HandlePhoneEngineMessageLEii @ 396 NONAME
+	_ZThn4_N11CPhoneStateD0Ev @ 397 NONAME
+	_ZThn4_N11CPhoneStateD1Ev @ 398 NONAME
+	_ZThn4_N15CPhoneStateIdle25HandlePhoneEngineMessageLEii @ 399 NONAME
+	_ZThn4_N15CPhoneStateIdleD0Ev @ 400 NONAME
+	_ZThn4_N15CPhoneStateIdleD1Ev @ 401 NONAME
+	_ZThn4_N17CPhoneStateInCall25HandlePhoneEngineMessageLEii @ 402 NONAME
+	_ZThn4_N17CPhoneStateInCallD0Ev @ 403 NONAME
+	_ZThn4_N17CPhoneStateInCallD1Ev @ 404 NONAME
+	_ZThn4_N18CPhoneStateMachine11ChangeStateEi @ 405 NONAME
+	_ZThn4_N18CPhoneStateMachine11PhoneEngineEv @ 406 NONAME
+	_ZThn4_N18CPhoneStateMachine12SecurityModeEv @ 407 NONAME
+	_ZThn4_N18CPhoneStateMachine14SetPhoneEngineEP13MPEPhoneModel @ 408 NONAME
+	_ZThn4_N18CPhoneStateMachine15PhoneEngineInfoEv @ 409 NONAME
+	_ZThn4_N18CPhoneStateMachine18CreatePhoneEngineLER14MEngineMonitor @ 410 NONAME
+	_ZThn4_N18CPhoneStateMachine22HandlePropertyChangedLERK4TUidji @ 411 NONAME
+	_ZThn4_N18CPhoneStateMachine22SendPhoneEngineMessageEi @ 412 NONAME
+	_ZThn4_N18CPhoneStateMachine23SetSecurityModeObserverEP26MPhoneSecurityModeObserver @ 413 NONAME
+	_ZThn4_N18CPhoneStateMachine25HandlePhoneEngineMessageLEii @ 414 NONAME
+	_ZThn4_N18CPhoneStateMachine25SetSecurityMessageHandlerEP28MPhoneSecurityMessageHandler @ 415 NONAME
 	_ZThn4_N18CPhoneStateMachine5StateEv @ 416 NONAME
 	_ZThn4_N18CPhoneStateMachine9SetCallIdEi @ 417 NONAME
 	_ZThn4_N18CPhoneStateMachineD0Ev @ 418 NONAME
@@ -466,6 +466,4 @@
 	_ZThn8_N20CPhoneStateCallSetupD0Ev @ 465 NONAME
 	_ZThn8_N20CPhoneStateCallSetupD1Ev @ 466 NONAME
 	_ZThn8_NK11CPhoneState17IsMenuBarVisibleLEv @ 467 NONAME
-	_ZN11CPhoneState17SetToolbarDimmingEi @ 468 NONAME
-	_ZN11CPhoneState34SetToolbarButtonLoudspeakerEnabledEv @ 469 NONAME
 
--- a/phoneapp/phoneuicontrol/group/phoneuicontrol.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/group/phoneuicontrol.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -52,7 +52,8 @@
 SOURCE          tphonecallheaderparam.cpp
 SOURCE          cphonecallheadermanager.cpp 
 SOURCE          cphonenumberentrymanager.cpp
-SOURCE          cphonecbamanager.cpp 
+SOURCE          cphonecbamanager.cpp
+SOURCE          cphonesecuritymodeobserver.cpp
 
 /* Languages */
 LANG SC
--- a/phoneapp/phoneuicontrol/inc/cphoneaccessorybthandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphoneaccessorybthandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -22,9 +22,9 @@
 // INCLUDES
 #include <e32base.h>
 #include <pevirtualengine.h> 
-#include <mphoneneclearedhandler.h>
-#include <mphonestatemachine.h>
-#include <mphoneviewcommandhandle.h>
+#include "mphoneneclearedhandler.h"
+#include "mphonestatemachine.h"
+#include "mphoneviewcommandhandle.h"
 
 // CLASS DECLARATION
  
--- a/phoneapp/phoneuicontrol/inc/cphonecbamanager.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonecbamanager.h	Fri Apr 23 14:59:43 2010 +0100
@@ -61,6 +61,9 @@
 
         /**
         * Set CBA
+        * If the given CBA resource ID equals EPhoneEasyDialingCba, then get the actual resource
+        * ID from the Dialer Extension View by executing command EPhoneViewGetEasyDialingCbaId
+        * via the Phone View Command Handle.
         */
         IMPORT_C void SetCbaL( TInt aResource );
         
@@ -101,6 +104,12 @@
         */
         TInt GetIncomingCallSilenceCBA( const TBool aSoftRejectActivated ); 
         
+        /**
+        * Get cba resource when number entry is visible
+        * @return Resource id of CBA
+        */
+        TInt GetNumberEntryCbaIdL();
+        
     private:
     
         /**
--- a/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h	Fri Apr 23 14:59:43 2010 +0100
@@ -28,6 +28,8 @@
 class MPhoneKeyEventHandler;
 class MPhoneViewCommandHandle;
 class CPhoneTimer;
+class CPhoneQwertyHandler;
+class MPhoneQwertyModeObserver;
 
 // CLASS DECLARATION
 
@@ -194,6 +196,14 @@
          * @ return ETrue if alpha mode, EFalse otherwise.
          */
         TBool IsKeyBlocked( const TKeyEvent& aKeyEvent ) const;
+        
+        /**
+         * Handles dialer key event. This includes handling multitapping of *-key. 
+         * If multitap happens, function creates back space event 
+         * to delete previous character, and replaces it with
+         * the next one in the cyclig character list *+pw.
+         */
+        void HandleTouchDialerKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
 
     private:    // Data
         
@@ -228,6 +238,27 @@
          * Zeroed in HandleEventKeyUpL.
          */
         TInt iScanCode;
+
+        /*
+        * Has information of used qwerty keyboard.
+        * Own.
+        */
+        CPhoneQwertyHandler* iQwertyHandler;
+        
+        /*
+         * Time of the previous key press. Used for multitap behaviour.
+         */
+        TTime iPreviousKeyPressTime;
+        
+        /*
+         * Keycode of the previous keypress. Used for multitap behaviour.
+         */
+        TInt iPreviousScanCode;
+        
+        /*
+         * Points to next character in multitap character list.
+         */
+        TInt iMultitapIndex;
     };
 
 #endif      // CPHONEKEYEVENTFORWARDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/inc/cphonesecuritymodeobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     A dynamic state class for security mode.
+*
+*/
+
+#ifndef CPHONESECURITYMODEOBSERVER_H
+#define CPHONESECURITYMODEOBSERVER_H
+
+#include "mphonesecuritymodeobserver.h"
+#include "mphonesecuritymessagehandler.h"
+#include "mphonesecuritymodechangeobserver.h"
+#include <e32base.h>
+#include <pevirtualengine.h>
+#include <startupdomainpskeys.h>
+#include <coreapplicationuisdomainpskeys.h>
+#include <e32cmn.h>
+
+// Forward Declarations
+class MPEEngineInfo;
+
+/**
+ * Dynamic state class for security mode.
+ * 
+ */
+NONSHARABLE_CLASS( CPhoneSecurityModeObserver ) : public CBase,
+	public MPhoneSecurityModeObserver,
+	public MPhoneSecurityMessageHandler
+	{
+public:
+	
+	/**
+	 * Default static two-phased constructor.
+	 * 
+	 * @return Pointer to new instance.
+	 */
+	static CPhoneSecurityModeObserver* NewL();
+	
+	/**
+	 * Default static two-phased constructor.
+	 * 
+	 * @return Pointer to new instance.
+	 */
+	static CPhoneSecurityModeObserver* NewLC();
+	
+	/**
+	 * Destructor.
+	 */
+	~CPhoneSecurityModeObserver();
+	
+	/**
+	 * Sets pointer to phone engine info interface.
+	 * 
+	 * @param aEngineInfo Pointer to engine info interface.
+	 */
+	void SetPhoneEngineInfo( MPEEngineInfo* aEngineInfo );
+	
+	// From MPhoneSecurityModeState
+	
+	/**
+	 * Register state observer.
+	 * 
+	 * @param aObserver Reference to state observer instance.
+	 */
+	IMPORT_C void RegisterStateObserver( MPhoneSecurityModeChangeObserver& aObserver );
+	
+	/**
+	 * Remove state observer
+	 * 
+	 * @param aObserver Reference to state observer instance.
+	 */
+	IMPORT_C void RemoveStateObserver( MPhoneSecurityModeChangeObserver& aObserver );
+	
+	/**
+	 * Checks if autolock is enabled.
+	 * 
+	 * @return ETrue if enabled. EFalse otherwise.
+	 */
+	IMPORT_C TBool IsAutolockEnabled();
+	
+	/**
+	 * Checks if security mode is enabled.
+	 * 
+	 * @return ETrue if enabled. EFalse otherwise.
+	 */
+	IMPORT_C TBool IsSecurityMode();
+	
+	/**
+	 * Initializes state instance. This should be called when dynamic security
+	 * mode observers are ready.
+	 */
+	IMPORT_C void Initialize();
+	
+	/**
+	 * Handles phone engine message. Dynamic state object listens phone engine
+	 * message to determinate sim states.
+	 * 
+	 * @param aMessage Message enumeration.
+	 * @param aCallId Call identifier.
+	 */
+	void HandlePhoneEngineMessageL( const TInt aMessage, TInt aCallId );
+	
+	/**
+	 * Handle property change. Dynamic state object listens P&S key changes
+	 * to determinate autolock and sim security states.
+	 * 
+	 * @param aCategory Unique identifer category reference.
+	 * @param aKey Key as unsigned integer.
+	 * @param aValue Key value as integer.
+	 */
+	void HandlePropertyChangedL(const TUid& aCategory,
+	     const TUint aKey,
+	     const TInt aValue );
+	
+private:
+	
+	/**
+	 * Default C++ constructor.
+	 */
+	CPhoneSecurityModeObserver();
+	
+	/**
+	 * Defines iSecurityMode with corresponding logic implementation.
+	 */
+	void DefineSecurityModeState();
+	
+	/**
+	 * Handles security mode state change. Basicly calls observer functions.
+	 */
+	void HandleStateChange();
+	
+	/**
+	 * Checks if sim security status is enabled.
+	 * 
+	 * @return ETrue if enabled.
+	 */
+	TBool IsSimSecurityStatus();
+	
+	/**
+	 * Checks if sim security status is accepted, not in security mode.
+	 * 
+	 * @return ETrue if not in security mode.
+	 */
+	TBool IsEngineSimStateAccepted();
+	
+	/**
+	 * Checks if simless features are supported.
+	 * 
+	 * @return ETrue if features are supported.
+	 */
+	TBool AreSimlessFeaturesSupported();
+	
+private:
+	
+    // Phone sim security state. Used to define dialer security mode and
+    // usability restrictions dynamically.
+    TPSSimSecurityStatus iSimState;
+    
+    // Telephony engine sim state. Used to define dialer security mode and
+    // usability restrictions dynamically.
+    TPESimState iEngineCurrentSimState;
+    
+    // Some special cases requires that we know previous sim state to 
+    // calculate security mode.
+    TPESimState iEnginePreviousSimState;
+            
+    // Phone device lock state. Used to define dialer security mode and
+    // usability restrictions dynamically.
+    TPSAutolockStatus iDeviceLockState;
+    
+    // Security mode status flag. This is calculated from iSimState and
+    // iDeviceLockState
+    TBool iSecurityMode;
+    
+    /**
+     * Pointer array for observers. This dynamic security mode state object
+     * doesn't own the observer instances. 
+     */
+    RPointerArray< MPhoneSecurityModeChangeObserver > iObserverArray;
+    
+    /**
+     * Pointer to Phone Engine info instance. This object doens't own the
+     * engine info instance.
+     */
+    MPEEngineInfo* iEngineInfo;
+    
+    /**
+     * Flag to determinate if this security mode state object has been fully
+     * initialized.
+     */
+    TBool iInitialized;
+	
+	};
+
+#endif
--- a/phoneapp/phoneuicontrol/inc/cphonestate.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonestate.h	Fri Apr 23 14:59:43 2010 +0100
@@ -170,11 +170,6 @@
         IMPORT_C virtual void HandleIdleForegroundEventL();
 
         /**
-        * Indicates when the keylock events
-        */
-        IMPORT_C virtual void HandleKeyLockEnabled( TBool aKeylockEnabled );
-        
-        /**
         * Handle environment changes.
         * @param aChanges environment changes which may be reported by
         *  a change notifier through the RChangeNotifier interface.
@@ -288,42 +283,6 @@
         IMPORT_C void SendGlobalErrorNoteL( TInt aResourceId );
 
         /**
-         * Get blocked key list
-         * @returns RArray<TInt>& lsit of blocked keys 
-         */
-        IMPORT_C const RArray<TInt>& GetBlockedKeyList() const;
-
-        /**
-         * Disable HW Keys if needed
-         */
-        IMPORT_C void DisableHWKeysL();
-
-        /**
-         * Disable Call UI
-         */
-        IMPORT_C void DisableCallUIL();
-
-        /**
-         * Enable Call UI
-         */
-        IMPORT_C void EnableCallUIL();
-
-        /**
-         * Disable HW Keys and Call UI if needed
-         */
-        IMPORT_C void CheckDisableHWKeysAndCallUIL();
-
-        /**
-         * Handle hold switch key event when there is an incoming or waiting call
-         */
-        IMPORT_C void HandleHoldSwitchL();
-        
-        /**
-         * Enable HW Keys and Call UI if needed
-         */
-        IMPORT_C void CheckEnableHWKeysAndCallUIL();
-        
-        /**
         * Fetches autolock information - is it set on or not
         * @return is autolock set on (ETrue) or off (EFalse)
         */
@@ -367,8 +326,12 @@
         */
         TBool IsNoteDismissableL();
 
-        IMPORT_C void RetainPreviousKeylockStateL();
-        
+        /**
+        * Check if possible dialer extension is in focus
+        * @return boolean value indicating if dialer extension is in focus
+        */
+        IMPORT_C TBool IsDialingExtensionInFocusL() const;
+
     public: // NumberEntry functions.
 
         /**
@@ -424,7 +387,7 @@
         /**
         * Disconnect call
         */
-        IMPORT_C TBool DisconnectCallL();
+        IMPORT_C virtual void DisconnectCallL();
 
         /**
         * Display idle screen
@@ -546,7 +509,7 @@
         * @return boolean value indicating that application needs to be
         *  sent to the background
         */
-        IMPORT_C TBool NeedToSendToBackgroundL() const;
+        IMPORT_C TBool NeedToReturnToForegroundAppL() const;
 
         /**
         * Check if the top application is currently displayed in the foreground
@@ -1102,6 +1065,12 @@
         * Opens virtual keyboard.
         */
         void OpenVkbL();
+        
+        /**
+        * Handles commands sent by easydialing plugin.
+        * @param aCommandId - command id to be handled
+        */
+        void HandleEasyDialingCommandsL( TInt aCommandId );
 
     private: // NumberEntry functions.
 
--- a/phoneapp/phoneuicontrol/inc/cphonestateidle.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonestateidle.h	Fri Apr 23 14:59:43 2010 +0100
@@ -281,6 +281,13 @@
              TPhoneCmdParamSpeedDial& aSpeedDialParam ) const;
 
          void HandleVoiceCallCommandL( TBool aSendKey );
+
+         /**
+          * Returns options menu id when number entry is visible.
+		  * If easydialing is in focus, id is asked from it.
+          * @return Menu resource id.
+          */   
+         TInt GetNumberAcqMenuIdL();
          
     private:
     
--- a/phoneapp/phoneuicontrol/inc/cphonestateincall.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonestateincall.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2005-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"
@@ -283,6 +283,18 @@
         */
         void HandleVoiceKeyPressL( TPhoneKeyEventMessages aMessage );
         
+        // From CPhoneState
+        /**
+         * This function is called when there is property value change.
+         * @param aCategory Category of the property
+         * @param aKey      Property key that is changed
+         * @param aValue    New property value
+         */
+        IMPORT_C virtual void HandlePropertyChangedL(
+            const TUid& aCategory,
+            const TUint aKey,
+            const TInt aValue );
+
     private:
     
     	/**
--- a/phoneapp/phoneuicontrol/inc/cphonestateincoming.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonestateincoming.h	Fri Apr 23 14:59:43 2010 +0100
@@ -78,11 +78,6 @@
         */ 
         IMPORT_C void HandleNumberEntryClearedL();
 
-        /** 
-        * Handle keylock state change events
-        */ 
-        IMPORT_C void HandleKeyLockEnabled( TBool aKeylockEnabled );
-        
     protected:
 
         /**
--- a/phoneapp/phoneuicontrol/inc/cphonestatemachine.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonestatemachine.h	Fri Apr 23 14:59:43 2010 +0100
@@ -30,7 +30,8 @@
 
 // FORWARD DECLARATIONS
 class MPhoneState;
-class MPhoneStorage;
+class MPhoneSecurityModeObserver;
+class MPhoneSecurityMessageHandler;
 
 // CLASS DECLARATION
 
@@ -101,12 +102,46 @@
         */    
         IMPORT_C void SetCallId( const TInt aCallId );
 
-       
+   
         /**
-        * Instantiates phone storage.
-        * @return storage instance    
-        */    
-        IMPORT_C MPhoneStorage* PhoneStorage();        
+         * Getter for security mode observer interface.
+         * 
+         * @return Pointer to security mode interface.
+         */
+        IMPORT_C MPhoneSecurityModeObserver* SecurityMode();
+        
+		/**
+		 * Setter for security mode observer interface.
+		 *
+		 * @param aObserver Pointer to observer interface.
+		 */
+		IMPORT_C void SetSecurityModeObserver( MPhoneSecurityModeObserver* aObserver );
+
+		/**
+		 * Set security message handler for security message observations.
+		 * 
+		 * @param aHandler Pointer to handler instance. 
+		 */
+		IMPORT_C void SetSecurityMessageHandler( MPhoneSecurityMessageHandler* aHandler );
+		
+        /**
+         * Handle phone engine message.
+         * 
+         * @param aMessage Message
+         * @param aCallId Call id
+         */
+        IMPORT_C void HandlePhoneEngineMessageL(const TInt aMessage, 
+             	TInt aCallId );
+        
+        /**
+          * This function is called when there is property value change.
+          * @param aCategory Category of the property
+          * @param aKey Property key that is changed
+          * @param aValue New property value
+          */
+         IMPORT_C void HandlePropertyChangedL(const TUid& aCategory,
+         	const TUint aKey,
+         	const TInt aValue );
 
     protected:
 
@@ -145,9 +180,19 @@
 
         // Idle state which is hold in memory all the time
         MPhoneState* iIdleState;
-
-        // Phone's storage
-        MPhoneStorage* iPhoneStorage;
+        
+        /**
+         * Security mode state
+         * Not own.
+         */
+        MPhoneSecurityModeObserver* iSecurityModeObserver;
+        
+        /**
+         * Security message handling interface.
+         * Not own.
+         */
+        MPhoneSecurityMessageHandler* iSecurityMessageHandler;
+        
     };
 
 #endif      // CPHONESTATEMACHINE_H
--- a/phoneapp/phoneuicontrol/inc/cphonestatestartup.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonestatestartup.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 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"
@@ -54,7 +54,7 @@
         * @param aMessage Message from Phone Engine
         * @param aCallId Call id the message concerns
         */
-        IMPORT_C void HandlePhoneEngineMessageL(
+        IMPORT_C virtual void HandlePhoneEngineMessageL(
             const TInt aMessage, 
             TInt aCallId );       
             
@@ -72,6 +72,11 @@
         IMPORT_C virtual void HandlePhoneStartupL();
 
         /**
+        * A message handling function for message EPEMessagePEConstructionReady.
+        * @param aCallId: the call id of the call
+        */
+        IMPORT_C void HandlePEConstructionReadyL( TInt aCallId );
+        /**
          * Indicates when the Idle app is in the foreground.
          */
         IMPORT_C virtual void HandleIdleForegroundEventL();
@@ -106,11 +111,6 @@
         IMPORT_C void HandleDtmfKeyToneL( const TKeyEvent& aKeyEvent,
                 TEventCode aEventCode );
         
-        /**
-        * A message handling function for message EPEMessagePEConstructionReady.
-        * @param aCallId: the call id of the call
-        */
-        void HandlePEConstructionReadyL( TInt aCallId );
         
         /**
         * Starts to shows note.
@@ -122,6 +122,11 @@
         * if necessary.
         */
         void CreateAndShowNoteAfterIdle();
+        
+        /**
+        * Finishes phone application initialization
+        */        
+        void InitializationReadyL();
 
 
     protected: // Data
@@ -129,10 +134,10 @@
         // Provides phone engine startup status
         TBool iPEReady;
 
-    private: // Data
 
         // Provides phone application startup status
         TBool iPhoneReady;
+    private: // Data
         
         // Ownded: idle object to create note.
         CIdle* iCreateNote;
--- a/phoneapp/phoneuicontrol/inc/cphonesystemeventhandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonesystemeventhandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -75,8 +75,6 @@
         
         void HandlePhoneFocusLostEventL();
 
-        void HandleKeyLockEnabled( TBool aKeylockEnabled );
-        
     public: // From MPhonePubSubObserver
 
         /**
--- a/phoneapp/phoneuicontrol/inc/cphoneuicontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphoneuicontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -39,6 +39,8 @@
 class CPEPhoneModel;
 class CPhoneRemoteControlHandler;
 class CPhoneKeyEventForwarder;
+class CPhoneSecurityModeObserver;
+class CPhoneViewController;
 
 class CPhoneUIController : 
     public CBase, 
@@ -52,8 +54,7 @@
         /**
         * Two-phased constructor.
         */
-        IMPORT_C static CPhoneUIController* NewL( 
-            MPhoneViewCommandHandle* aViewCommandHandle );
+        IMPORT_C static CPhoneUIController* NewL( CPhoneViewController& aViewCommandHandle );
         
         /**
         * Destructor.
@@ -158,13 +159,6 @@
         */
         IMPORT_C TBool ProcessCommandL( TInt aCommand );
 
-        /**
-        * Handles keylock events
-        * @param aCommand It is the code of the command to be handled.
-        */
-        IMPORT_C void HandleKeyLockEnabled( TBool aKeylockEnabled );
-        
-        
     private:
         
         /**
@@ -175,12 +169,12 @@
         /**
         * By default EPOC constructor is private.
         */
-        void ConstructL( MPhoneViewCommandHandle* aViewCommandHandle );
+        void ConstructL( CPhoneViewController& aController );
         
         /**
         * Creates correct protocol DLL depending of the variation.
         */
-        void CreateProtocolDllL( MPhoneViewCommandHandle* aViewCommandHandle );
+        void CreateProtocolDllL( CPhoneViewController& aController );
         /**
         * CallBack for Phone Number Editor
         */
@@ -237,7 +231,13 @@
         * iKeyEventForwarder
         */
         CPhoneKeyEventForwarder* iKeyEventForwarder;
-        
+
+		/**
+		 * Security mode observer.
+		 * Own.
+		 */
+		CPhoneSecurityModeObserver* iSecurityModeObserver;
+		
     };
 
 #endif      // CPHONEUICONTROLLER_H   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/inc/mphonesecuritymessagehandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2010-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     A dynamic state class for security mode.
+*
+*/
+
+#ifndef MPHONESECURITYMESSAGEHANDLER_H
+#define MPHONESECURITYMESSAGEHANDLER_H
+
+class TUid;
+
+class MPhoneSecurityMessageHandler
+	{
+	public:
+	/**
+	 * Handles phone engine message. Dynamic state object listens phone engine
+	 * message to determinate sim states.
+	 * 
+	 * @param aMessage Message enumeration.
+	 * @param aCallId Call identifier.
+	 */
+	virtual void HandlePhoneEngineMessageL( const TInt aMessage, TInt aCallId ) = 0;
+	
+	/**
+	 * Handle property change. Dynamic state object listens P&S key changes
+	 * to determinate autolock and sim security states.
+	 * 
+	 * @param aCategory Unique identifer category reference.
+	 * @param aKey Key as unsigned integer.
+	 * @param aValue Key value as integer.
+	 */
+	virtual void HandlePropertyChangedL(const TUid& aCategory,
+	     const TUint aKey,
+	     const TInt aValue ) = 0;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/inc/mphonesecuritymodechangeobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,41 @@
+/* 
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     A dynamic security mode state class observer interface.
+*
+*/
+
+#ifndef MPHONESECURITYMODECHANGEOBSERVER_H
+#define MPHONESECURITYMODECHANGEOBSERVER_H
+
+#include <e32def.h>
+
+/**
+ * Observer interface to observe dynamic security mode state changes.
+ */
+class MPhoneSecurityModeChangeObserver
+	{
+public:
+	/**
+	 * Handles security mode state change. This is called only when state
+	 * actually changes.
+	 * 
+	 * @param aIsEnabled Defines if security mode is enabled.
+	 */
+	virtual void HandleSecurityModeChanged( TBool aIsEnabled ) = 0;
+	};
+
+#endif
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/inc/mphonesecuritymodeobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,70 @@
+/* 
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     An interface for dynamic security mode state class.
+*
+*/
+
+#ifndef MPHONESECURITYMODEOBSERVER_H
+#define MPHONESECURITYMODEOBSERVER_H
+
+#include <e32def.h>
+
+// Forward declarations
+class MPhoneSecurityModeChangeObserver;
+
+/**
+ * Interface for dynamic security mode state class.
+ */
+class MPhoneSecurityModeObserver
+	{
+public :
+	
+	/**
+	 * Checks if autolock is enabled.
+	 * 
+	 * @return ETrue if autolock is enabled. EFalse otherwise.
+	 */
+	virtual TBool IsAutolockEnabled() = 0;
+	
+	/**
+	 * Checks if security mode is enabled.
+	 * 
+	 * @return ETrue if enabled, otherwise EFalse.
+	 */
+	virtual TBool IsSecurityMode() = 0;
+	
+	/**
+	 * Registers security mode state observer to observer state changes.
+	 *  
+	 * @param aObserver Reference to state observer instance..
+	 */
+	virtual void RegisterStateObserver( MPhoneSecurityModeChangeObserver& aObserver ) = 0;
+	
+	/** 
+	 * Removes registered state observer.
+	 * 
+	 * @param aObserver Reference to observer instance.
+	 */
+	virtual void RemoveStateObserver( MPhoneSecurityModeChangeObserver& aObserver ) = 0;
+	
+	/**
+	 * Initializes dynamic security mode state observer.
+	 */
+	virtual void Initialize() = 0;
+	};
+
+#endif
+
+// End of file
--- a/phoneapp/phoneuicontrol/inc/mphonestate.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/mphonestate.h	Fri Apr 23 14:59:43 2010 +0100
@@ -30,7 +30,6 @@
 #include "mphoneneclearedhandler.h"
 #include "mphonenumberentryevents.h"
 #include "mphonelockinfo.h"
-#include "mphoneblockedkeys.h"
 
 // FORWARD DECLARATIONS
 
@@ -47,7 +46,6 @@
     public MPhoneMenuAndCbaEvents,
     public MPhoneRemoteControlEvents,
     public MPhoneDivertIF,
-    public MPhoneBlockedKeys,
     public MPhoneNEClearedHandler,
     public MPhoneNumberEntryEvents,
     public MPhoneLockInfo
--- a/phoneapp/phoneuicontrol/inc/mphonestatemachine.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/mphonestatemachine.h	Fri Apr 23 14:59:43 2010 +0100
@@ -30,7 +30,8 @@
 class MPEPhoneModel;
 class MPEEngineInfo;
 class CSpdiaControl;
-class MPhoneStorage;
+class MPhoneSecurityMessageHandler;
+class MPhoneSecurityModeObserver;
 
 /**
 *  Describes the interface for setting and getting active state
@@ -86,11 +87,46 @@
         * @param aCallId
         */    
         virtual void SetCallId( TInt aCallId ) = 0;
+    
+        /**
+         * Getter for security mode observer interface.
+         * 
+         * @return Pointer to security mode interface.
+         */
+        virtual MPhoneSecurityModeObserver* SecurityMode() = 0;
+        
+		/**
+		 * Sets security mode observer. Doesn't transfer ownership.
+		 *
+		 * @param aObserver Pointer to observer instance.
+		 */
+		virtual void SetSecurityModeObserver( MPhoneSecurityModeObserver* aObserver ) = 0;
+		
+		/**
+		 * Set security message handler for security message observations.
+		 * 
+		 * @param aHandler Pointer to handler instance. 
+		 */
+		virtual void SetSecurityMessageHandler( MPhoneSecurityMessageHandler* aHandler ) = 0;
+		
+        /**
+         * Handle phone engine message.
+         * 
+         * @param aMessage Message
+         * @param aCallId Call id
+         */
+        virtual void HandlePhoneEngineMessageL(const TInt aMessage, 
+        	TInt aCallId ) = 0;
         
         /**
-        * Phone's Storage
-        */
-        virtual MPhoneStorage* PhoneStorage() = 0;        
+         * This function is called when there is property value change.
+         * @param aCategory Category of the property
+         * @param aKey Property key that is changed
+         * @param aValue New property value
+         */
+        virtual void HandlePropertyChangedL(const TUid& aCategory,
+        	const TUint aKey,
+        	const TInt aValue ) = 0;
 
     };
 
--- a/phoneapp/phoneuicontrol/inc/mphonesystemeventhandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/mphonesystemeventhandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -95,11 +95,6 @@
         */
         virtual void HandlePhoneStartupL() = 0;
 
-        /**
-        * Indicates when the keylock events
-        */
-        virtual void HandleKeyLockEnabled( TBool aKeylockEnabled ) = 0;
-        
     };
 
 #endif      // __MPHONESYSTEMEVENTHANDLER_H   
--- a/phoneapp/phoneuicontrol/inc/mphonesystemevents.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/mphonesystemevents.h	Fri Apr 23 14:59:43 2010 +0100
@@ -85,11 +85,6 @@
         virtual void HandleIdleForegroundEventL() = 0;
 
         /**
-        * Indicates when the keylock events
-        */
-        virtual void HandleKeyLockEnabled( TBool aKeylockEnabled ) = 0;
-        
-        /**
         * Handle environment changes.
         * @param aChanges environment changes which may be reported by
         *  a change notifier through the RChangeNotifier interface.
--- a/phoneapp/phoneuicontrol/src/cphonebtaadisconnecthandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonebtaadisconnecthandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -97,11 +97,12 @@
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneBtaaDisconnectHandler::Cancel()");
     TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveQuery ) );
-    DeleteAll();
-    if ( !iOldMuted && iStateMachine->PhoneEngineInfo()->AudioMute() )
+    if ( !iOldMuted && iStateMachine->PhoneEngineInfo()->AudioMute() &&
+    	ELaunchQuery == iState )
         {
         TRAP_IGNORE ( SetMuteL( EFalse ) );
         }
+	DeleteAll();
     iOldMuted = EFalse;
     }
 
--- a/phoneapp/phoneuicontrol/src/cphonecbamanager.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonecbamanager.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -38,6 +38,7 @@
 #include "tphonecmdparamboolean.h"
 #include "tphonecmdparaminteger.h"
 #include "tphonecmdparamcallstatedata.h"
+#include "mphonesecuritymodeobserver.h"
 
 
 // ======== MEMBER FUNCTIONS ========
@@ -115,6 +116,7 @@
         EPEBTAudioAccessory );
 
     // Call setup cases
+    
     if ( EPhoneCallHandlingCallSetupCBA == aResource )
         {
         if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling) )
@@ -131,7 +133,7 @@
         }
 
     // Is numberentry visible
-    else if ( iState->IsNumberEntryUsedL() )
+    else if ( iState->IsNumberEntryUsedL() && iState->IsNumberEntryVisibleL() )
         {
         if ( iState->IsAutoLockOn() || !(iState->IsSimOk()) )
             {
@@ -139,37 +141,7 @@
             }
         else
             {
-            TBool dtmfEditorVisible = iViewCommandHandle.HandleCommandL(
-                    EPhoneViewIsDTMFEditorVisible ) ==
-                    EPhoneViewResponseSuccess;
-            TPhoneCmdParamInteger activeCallCount;
-            iViewCommandHandle.ExecuteCommandL(
-                    EPhoneViewGetCountOfActiveCalls, &activeCallCount );
-            
-            TPhoneCmdParamCallStateData callStateData;
-		    callStateData.SetCallState( EPEStateRinging );
-            iViewCommandHandle.HandleCommandL(
-                    EPhoneViewGetCallIdByState, &callStateData );
-		    
-            TInt incomingCall = callStateData.CallId();
-
-            if( dtmfEditorVisible )
-            	{
-                resourceId = EPhoneDtmfDialerCBA;
-                }                    
-            else if( activeCallCount.Integer() == ENoActiveCalls )
-                {
-                resourceId = EPhoneNumberAcqCBA;
-                }
-            else if ( activeCallCount.Integer() > ENoActiveCalls &&  
-            		  incomingCall > KErrNotFound )
-				{
-				resourceId = EPhoneCallHandlingCallWaitingCBA;
-				}
-            else
-                {
-                resourceId = EPhoneInCallNumberAcqCBA;
-                }
+            resourceId = GetNumberEntryCbaIdL();
             }
         }
 
@@ -279,10 +251,16 @@
         &softRejectParam );
 
     TInt incomingCbaResourceId;
+    
+    TBool securityMode = iStateMachine.SecurityMode()->IsSecurityMode();
 
     if ( iState->IsSwivelClosed() )
         {
-        if ( !callIsAlerting || iRingtoneSilenced )
+        if ( securityMode )
+        	{
+        	incomingCbaResourceId = EPhoneCallHandlingIncomingSilentSliderCBA;
+        	}
+        else if ( !callIsAlerting || iRingtoneSilenced )
             {
             incomingCbaResourceId = EPhoneCallHandlingIncomingSilentSwivelClosedCBA;
             }
@@ -294,7 +272,12 @@
 
     else if ( coverHideSendEndKey )
         {
-        if ( callIsAlerting )
+        if ( securityMode )
+        	{
+        	// Set CBA to Options..Reject
+        	incomingCbaResourceId = EPhoneCallHandlingIncomingSilentSliderCBA;
+        	}
+        else if ( callIsAlerting )
             {
             // Set CBA to Options..Silence
             incomingCbaResourceId = EPhoneCallHandlingIncomingSliderCBA;
@@ -313,7 +296,11 @@
 
     else
         {
-        if ( callIsAlerting )
+        if ( securityMode )
+        	{
+        	incomingCbaResourceId = EPhoneCallHandlingIncomingRejectCBA;
+        	}
+        else if ( callIsAlerting )
             {
             incomingCbaResourceId = GetIncomingCallSilenceCBA( softRejectActivated );
             }
@@ -343,9 +330,18 @@
             "CPhoneCbaManager::SetCbaL : %d",aResource );
 
     TPhoneCmdParamInteger integerParam;
-    integerParam.SetInteger(
-        CPhoneMainResourceResolver::Instance()->ResolveResourceID(
-        aResource ) );
+    
+    if ( EPhoneEasyDialingCba == aResource )
+        {
+        iViewCommandHandle.ExecuteCommandL( EPhoneViewGetEasyDialingCbaId, &integerParam );
+        }
+    else
+        {
+        integerParam.SetInteger(
+            CPhoneMainResourceResolver::Instance()->ResolveResourceID(
+            aResource ) );
+        }
+
     iViewCommandHandle.ExecuteCommandL( EPhoneViewUpdateCba,
         &integerParam );
     }
@@ -464,7 +460,11 @@
     touchpaneButtonsParam.SetInteger( CPhoneMainResourceResolver::Instance()->
                              ResolveResourceID( EPhoneIncomingCallButtons ) );
 
-    if ( touchpaneButtonsParam.Integer() 
+    if ( iStateMachine.SecurityMode()->IsSecurityMode() )
+    	{
+    	ret = EPhoneCallHandlingIncomingRejectCBA;
+    	}
+    else if ( touchpaneButtonsParam.Integer() 
          == R_PHONEUI_INCOMING_CALL_SILENCE_BUTTONS )
         {
         aSoftRejectActivated ? 
@@ -487,6 +487,56 @@
     return ret;
     }
 
+// -----------------------------------------------------------
+// CPhoneCbaManager::GetNumberEntryCbaIdL
+// -----------------------------------------------------------
+//
+TInt CPhoneCbaManager::GetNumberEntryCbaIdL()
+    {
+    TInt ret( EPhoneNumberAcqCBA );
+    
+    if ( iState->IsDialingExtensionInFocusL() )
+        {
+        ret = EPhoneEasyDialingCba;
+        }
+    else
+        {
+        TBool dtmfEditorVisible = iViewCommandHandle.HandleCommandL(
+                EPhoneViewIsDTMFEditorVisible ) ==
+                EPhoneViewResponseSuccess;
+        TPhoneCmdParamInteger activeCallCount;
+        iViewCommandHandle.ExecuteCommandL(
+                EPhoneViewGetCountOfActiveCalls, &activeCallCount );
+
+        TPhoneCmdParamCallStateData callStateData;
+        callStateData.SetCallState( EPEStateRinging );
+        iViewCommandHandle.HandleCommandL(
+                EPhoneViewGetCallIdByState, &callStateData );
+
+        TInt incomingCall = callStateData.CallId();
+
+        if( dtmfEditorVisible )
+            {
+            ret = EPhoneDtmfDialerCBA;
+            }                    
+        else if( activeCallCount.Integer() == ENoActiveCalls )
+            {
+            ret = EPhoneNumberAcqCBA;
+            }
+        else if ( activeCallCount.Integer() > ENoActiveCalls &&  
+                incomingCall > KErrNotFound )
+            {
+            ret = EPhoneCallHandlingCallWaitingCBA;
+            }
+        else
+            {
+            ret = EPhoneInCallNumberAcqCBA;
+            }
+        }
+    
+    return ret;
+    }
+
 // ======== LOCAL FUNCTIONS ========
 
 
--- a/phoneapp/phoneuicontrol/src/cphoneenginehandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphoneenginehandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -54,7 +54,7 @@
     __PHONELOG2( EBasic, EPhoneControl,
         "CPhoneEngineHandler::DoHandleMessageL - Message received (aMessage=%d aCallId=%d)",
             aMessage, aCallId );
-    iStateMachine->State()->HandlePhoneEngineMessageL( aMessage, aCallId );
+    iStateMachine->HandlePhoneEngineMessageL( aMessage, aCallId );
     }
 
 //  End of File  
--- a/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -31,6 +31,11 @@
 #include "cphonetimer.h"
 #include "phonelogger.h"
 #include "phoneui.pan"
+#include "mphoneviewcommandhandle.h"
+#include "cphoneqwertyhandler.h"
+#include "tphonecmdparampointer.h"
+#include "mphoneqwertymodeobserver.h"
+#include "cdialer.h"
 
 // CONSTANTS
 
@@ -38,6 +43,13 @@
 const TUid KCRUidAvkon = { 0x101F876E };
 const TUint32 KAknKeyBoardLayout = 0x0000000B;
 
+// Characters resulting from multitapping *-key.
+_LIT( KAsteriskMultitapCharacters, "*+pw" );
+
+// Multitap delay parameter in micro seconds.
+const TInt KMultitapDelay = 1000000;
+
+
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
@@ -73,6 +85,8 @@
         env->EikAppUi()->RemoveFromStack( this );
         }
     delete iLongPressKeyEventTimer;
+    
+    delete iQwertyHandler;
     }
 
 // -----------------------------------------------------------------------------
@@ -199,6 +213,17 @@
 
     // Create the long press key event timer
     iLongPressKeyEventTimer = CPhoneTimer::NewL();
+    
+    // Create qwerty mode handler
+    iQwertyHandler = CPhoneQwertyHandler::NewL(); 
+    
+    TPhoneCmdParamPointer ptrParam;
+    iViewCommandHandle->ExecuteCommand( EPhoneViewGetQwertyModeObserver, &ptrParam );
+    CDialer* qwertyObserver = 
+            static_cast<CDialer*>( ptrParam.Pointer() );
+            
+    iQwertyHandler->AddQwertyModeObserverL( *qwertyObserver );
+
     }
 
 // -----------------------------------------------------------------------------
@@ -260,6 +285,54 @@
     }
 
 // -----------------------------------------------------------------------------
+// CPhoneKeyEventForwarder::HandleTouchDialerKeyEventL
+// 
+// -----------------------------------------------------------------------------
+//
+void CPhoneKeyEventForwarder::HandleTouchDialerKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TBool multitap = aKeyEvent.iScanCode == EStdKeyNkpAsterisk && 
+            iPreviousScanCode == EStdKeyNkpAsterisk &&
+            iKeyPressTime.MicroSecondsFrom( iPreviousKeyPressTime ) < KMultitapDelay;
+    
+    if ( multitap )
+        {
+        if ( aType == EEventKeyDown )
+            {
+            // Update multitap index
+            iMultitapIndex = ( iMultitapIndex + 1 ) % KAsteriskMultitapCharacters().Length();
+            
+            // Delete the previously entered character by simulating a backspace character.
+            TKeyEvent backSpaceEvent;
+            backSpaceEvent.iModifiers = 0;
+            backSpaceEvent.iRepeats = 0;
+            backSpaceEvent.iCode = EKeyBackspace;
+            backSpaceEvent.iScanCode = EStdKeyBackspace;
+            iStateMachine->State()->HandleKeyEventL( backSpaceEvent, EEventKey );
+            }
+        
+        TKeyEvent keyEvent( aKeyEvent );
+        
+        // Modify the key event to contain the next character on multitap list.
+        keyEvent.iCode = ( TInt ) KAsteriskMultitapCharacters()[ iMultitapIndex ];
+        
+        // Send character to number entry.
+        iStateMachine->State()->HandleKeyEventL( keyEvent, aType );
+        }
+    
+    else 
+        {
+        iMultitapIndex = 0;
+        iStateMachine->State()->HandleKeyEventL( aKeyEvent, aType );
+        }
+    
+    if ( aType == EEventKeyUp )
+        {
+        iPreviousScanCode = aKeyEvent.iScanCode;
+        }
+    }
+
+// -----------------------------------------------------------------------------
 // CPhoneKeyEventForwarder::OfferKeyEventBeforeControlStackL
 // Let phone handle before other components in control stack
 // -----------------------------------------------------------------------------
@@ -272,31 +345,49 @@
         "CPhoneKeyEventForwarder::OfferKeyEventBeforeControlStackL");
 
     TKeyResponse response( EKeyWasNotConsumed );
-    if( !IsKeyBlocked( aKeyEvent ) )
+
+    // Handle key events before FEP
+    // This is must becouse FEP consumes * key and when
+    // editor is in alphanumeric mode FEP consumes all alphanumeric
+    // keys
+    switch( aType )
         {
-        // Handle key events before FEP
-        // This is must becouse FEP consumes * key and when
-        // editor is in alphanumeric mode FEP consumes all alphanumeric
-        // keys
-        switch( aType )
-            {
-             // EEventKeyDown
-            case EEventKeyDown:
-                response = HandleEventKeyDownBeforeControlStackL( aKeyEvent );
-                break;
-            // EEventKey
-            case EEventKey:
-                response = HandleEventKeyBeforeControlStackL( aKeyEvent );
-                break;
-            // EEventKeyUp
-            case EEventKeyUp:
-                response = HandleEventKeyUpBeforeControlStackL( aKeyEvent );
-                break;
-            default:
-                break;
-            }
+         // EEventKeyDown
+        case EEventKeyDown:
+            response = HandleEventKeyDownBeforeControlStackL( aKeyEvent );
+            break;
+        // EEventKey
+        case EEventKey:
+            response = HandleEventKeyBeforeControlStackL( aKeyEvent );
+            break;
+        // EEventKeyUp
+        case EEventKeyUp:
+            response = HandleEventKeyUpBeforeControlStackL( aKeyEvent );
+            break;
+        default:
+            break;
+        }
+    
+    // Check if keyEvent is simulated by Dialer.
+    const TBool simulatedByDialer = 
+        ( ( aKeyEvent.iModifiers & ( EModifierNumLock | EModifierKeypad ) ) 
+                == ( EModifierNumLock | EModifierKeypad ) );
+    
+    if( simulatedByDialer )
+        {
+        HandleTouchDialerKeyEventL( aKeyEvent, aType );
+        response = EKeyWasConsumed;
+        }
+    
+    else 
+        {
+        // If not simulated by dialer, multitap related fields are reset.
+        // Any key event not originating from dialer interrupts multitap
+        // behaviour.
+        iMultitapIndex = 0;
+        iPreviousScanCode = 0;
+        }
 
-        }
     return response;
     }
 
@@ -313,23 +404,20 @@
     __LOGMETHODSTARTEND( EPhoneControl,
         "CPhoneKeyEventForwarder::OfferKeyEventAfterControlStackL");
     
-	if( !IsKeyBlocked( aKeyEvent ) )
+    // Send key to editor
+    iStateMachine->State()->HandleKeyEventL( aKeyEvent, aType );
+    
+    if( EEventKeyUp == aType 
+            && EKeyNull != iKeyPressedDown )
         {
-        // Send key to editor
-        iStateMachine->State()->HandleKeyEventL( aKeyEvent, aType );
-        
-        if( EEventKeyUp == aType 
-                && EKeyNull != iKeyPressedDown )
-            {
-            // Handle short key press
-            iStateMachine->State()->HandleKeyMessageL( 
-                MPhoneKeyEvents::EPhoneKeyShortPress, 
-                TKeyCode( iKeyPressedDown ) );
+        // Handle short key press
+        iStateMachine->State()->HandleKeyMessageL( 
+            MPhoneKeyEvents::EPhoneKeyShortPress, 
+            TKeyCode( iKeyPressedDown ) );
 
-            // Reset key code
-            iScanCode = EStdKeyNull;
-            iKeyPressedDown = EKeyNull;
-            }
+        // Reset key code
+        iScanCode = EStdKeyNull;
+        iKeyPressedDown = EKeyNull;
         }
 
     return EKeyWasNotConsumed;
@@ -349,6 +437,9 @@
     ConvertKeyCode( iKeyPressedDown, aKeyEvent );
     // Save key scan code
     iScanCode = aKeyEvent.iScanCode;
+    
+    // Store the previous keypress time.
+    iPreviousKeyPressTime = iKeyPressTime;
 
     // Start the key press timer
     iKeyPressTime.UniversalTime();
@@ -547,32 +638,5 @@
         "CPhoneKeyEventHandler::ConvertKeyCode aCode (%d)", aCode );
     }
 
-// -----------------------------------------------------------------------------
-// CPhoneKeyEventForwarder::IsKeyBlocked
-// -----------------------------------------------------------------------------
-//
-TBool CPhoneKeyEventForwarder::IsKeyBlocked( const TKeyEvent& aKeyEvent ) const
-    {
-    TBool ret = EFalse;
-    
-    // Check blocked keys
-    const RArray<TInt>& keyScanCodeList = iStateMachine->State()->GetBlockedKeyList();
-    TInt count = keyScanCodeList.Count();
-    if( count )
-        {
-        for( TInt i = 0; i < count; i++ )
-            {
-            if( keyScanCodeList[i] == aKeyEvent.iScanCode )
-                {
-                ret = ETrue;
-                }
-            }
-        }
-    __PHONELOG1( EBasic, EPhoneControl,
-        "CPhoneKeyEventHandler::IsKeyBlocked return (%d)", ret );
-    
-    return ret;
-    }
-
 //  End of File
 
--- a/phoneapp/phoneuicontrol/src/cphonenumberentrymanager.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonenumberentrymanager.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -40,6 +40,7 @@
 #include "phoneviewcommanddefinitions.h"
 #include "phoneappcommands.hrh"
 #include "phonelogger.h"
+#include "mphonesecuritymodeobserver.h"
 
 const TInt  KPhoneKeyStart            = 33;
 const TInt  KPhoneKeyEnd              = 127;
@@ -224,12 +225,12 @@
     {
     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::HandleCreateNumberEntryL() ");
     
-    const TBool autoLcokOn = iState->IsAutoLockOn();
+    const TBool autoLockOn = iStateMachine.SecurityMode()->IsSecurityMode();
     const TBool idleVal = CPhonePubSubProxy::Instance()->Value( KPSUidAiInformation, KActiveIdleState );
     const TBool queryActive = iState->IsAnyQueryActiveL();
     const TBool menuBarVisible = iState->IsMenuBarVisibleL();
     
-    if( autoLcokOn || 
+    if( autoLockOn || 
         ( idleVal == EPSAiForeground ) ||
         ( menuBarVisible || queryActive ) )
         {
@@ -237,7 +238,7 @@
              "CPhoneNumberEntryManager::HandleCreateNumberEntryL() NE NOT CREATED" );
         __PHONELOG2( EBasic, EPhoneControl, 
              "CPhoneNumberEntryManager::HandleCreateNumberEntryL() autoLcokOn(%d) idleVal(%d)", 
-             autoLcokOn, idleVal );
+             autoLockOn, idleVal );
         __PHONELOG2( EBasic, EPhoneControl, 
              "CPhoneNumberEntryManager::HandleCreateNumberEntryL() queryActive(%d) menuBarVisible(%d)", 
              queryActive, menuBarVisible );
@@ -257,9 +258,7 @@
                 iViewCommandHandle.ExecuteCommandL( EPhoneViewRemoveNote );
                 }
             
-            TPhoneCmdParamBoolean isSecurityMode;      
-            iViewCommandHandle.ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-            if( isSecurityMode.Boolean() )
+            if( iStateMachine.SecurityMode()->IsSecurityMode() )
                 {
                 iState->HandleCommandL( EPhoneNumberAcqSecurityDialer );
                 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/src/cphonesecuritymodeobserver.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,342 @@
+/*
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPhoneSecurityModeState class.
+*
+*/
+
+#include "cphonesecuritymodeobserver.h"
+#include "mphonesecuritymodechangeobserver.h"
+#include "cphonelogger.h"
+#include "cphonepubsubproxy.h"
+
+#include <mpeengineinfo.h>
+#include <featmgr.h>
+#include <e32cmn.h>
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::NewL
+// -----------------------------------------------------------
+CPhoneSecurityModeObserver* CPhoneSecurityModeObserver::NewL()
+	{
+	return new( ELeave )CPhoneSecurityModeObserver;
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::NewLC
+// -----------------------------------------------------------
+CPhoneSecurityModeObserver* CPhoneSecurityModeObserver::NewLC()
+	{
+	CPhoneSecurityModeObserver* self = new( ELeave )CPhoneSecurityModeObserver;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::~CPhoneSecurityModeObserver
+// -----------------------------------------------------------
+CPhoneSecurityModeObserver::~CPhoneSecurityModeObserver()
+	{
+	iObserverArray.Reset();
+	iObserverArray.Close();
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::SetPhoneEngineInfo
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::SetPhoneEngineInfo( MPEEngineInfo* aEngineInfo )
+	{
+	iEngineInfo = aEngineInfo;
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::RegisterStateObserver
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::RegisterStateObserver( MPhoneSecurityModeChangeObserver& aObserver )
+	{
+	iObserverArray.Append( &aObserver );
+	if ( iInitialized )
+		{
+		// Notify observer with registration call, if state instance is initialized.
+		aObserver.HandleSecurityModeChanged( iSecurityMode );
+		}
+	}
+	
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::RemoveStateObserver
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::RemoveStateObserver( MPhoneSecurityModeChangeObserver& aObserver )
+	{
+	TInt index = iObserverArray.Find( &aObserver );
+	if ( KErrNotFound != index )
+		{
+		iObserverArray.Remove( index );
+		}
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::IsAutolockEnabled
+// -----------------------------------------------------------
+TBool CPhoneSecurityModeObserver::IsAutolockEnabled()
+	{
+	// Autolock is enabled in uninitialized state also.
+	return ( iDeviceLockState > EAutolockOff
+		|| EAutolockStatusUninitialized == iDeviceLockState );
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::IsSecurityMode
+// -----------------------------------------------------------
+TBool CPhoneSecurityModeObserver::IsSecurityMode()
+	{
+	return iSecurityMode;
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::HandlePhoneEngineMessageL
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::HandlePhoneEngineMessageL( const TInt aMessage,
+	TInt /*aCallId*/ )
+	{
+	TBool previousSecurityMode = iSecurityMode;
+	switch( aMessage )
+		{
+		case MEngineMonitor::EPEMessageSIMStateChanged:
+			{
+			__PHONELOG( EBasic,
+				EPhoneControl,
+				"CPhoneSecurityModeObserver::HandlePhoneEngineMessageL() " );
+	
+			// Register new sim states.
+			iEnginePreviousSimState = iEngineCurrentSimState;
+			if ( iEngineInfo )
+				{
+				iEngineCurrentSimState = iEngineInfo->SimState();
+				DefineSecurityModeState();
+				}
+			}
+		break;
+		}
+		
+	// Notify observers for state change.
+	if ( previousSecurityMode != iSecurityMode )
+		{
+		HandleStateChange();
+		}
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::HandlePropertyChangedL
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::HandlePropertyChangedL(const TUid& aCategory,
+	const TUint aKey,
+	const TInt aValue )
+	{
+	__PHONELOG( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::HandlePropertyChangedL() " );
+	
+	// Register sim security and autolock value changes.
+	TBool previousSecurityMode = iSecurityMode;
+	if ( KPSUidStartup == aCategory && KStartupSimSecurityStatus == aKey )
+		{
+		iSimState = ( TPSSimSecurityStatus )aValue;
+		DefineSecurityModeState();
+		}
+	else if ( KPSUidCoreApplicationUIs == aCategory 
+	    && KCoreAppUIsAutolockStatus == aKey )
+		{
+		iDeviceLockState = ( TPSAutolockStatus )aValue;
+		DefineSecurityModeState();
+		}
+		
+	// Notify observer for state change.
+	if ( previousSecurityMode != iSecurityMode )
+		{
+		HandleStateChange();
+		}
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::Initialize
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::Initialize()
+	{
+	__PHONELOG1( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::Initialize() %d ", iSecurityMode );
+	if ( !iInitialized )
+		{
+		if ( !iEngineInfo )
+			{
+			// Do not initialize if engine info data interface hasn't been set.
+			return;
+			}
+			
+		// Get current values for sim states and autolock value.
+		iEngineCurrentSimState = iEngineInfo->SimState();
+		iSimState = ( TPSSimSecurityStatus )CPhonePubSubProxy::Instance()->Value(
+			KPSUidStartup,
+			KStartupSimSecurityStatus );
+		iDeviceLockState = ( TPSAutolockStatus )CPhonePubSubProxy::Instance()->Value(
+			KPSUidCoreApplicationUIs,
+			KCoreAppUIsAutolockStatus );
+		iInitialized = ETrue;
+		DefineSecurityModeState();
+		HandleStateChange();
+		}
+		
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::CPhoneSecurityModeObserver
+// -----------------------------------------------------------
+CPhoneSecurityModeObserver::CPhoneSecurityModeObserver() :
+	iSimState( ESimSecurityStatusUninitialized ),
+	iEngineCurrentSimState( EPESimStatusUninitialized ),
+	iEnginePreviousSimState(EPESimStatusUninitialized ),
+	iDeviceLockState( EAutolockStatusUninitialized )
+	{
+	
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::DefineSecurityModeState
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::DefineSecurityModeState()
+	{
+	// Device lock 
+	if ( IsAutolockEnabled() )
+		{
+		iSecurityMode = ETrue;
+		}
+	
+	// Sim security status
+	else if ( IsSimSecurityStatus() )
+		{
+		iSecurityMode = ETrue;
+		}
+		
+	// Phone engine sim state
+	else if ( !IsEngineSimStateAccepted() )
+		{
+		iSecurityMode = ETrue;
+		}
+	
+	else
+		{
+		iSecurityMode = EFalse;
+		}
+	
+	
+	__PHONELOG1( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::DefineSecurityModeState(), iEngineCurrentSimState( %d )",
+		iEngineCurrentSimState );
+		
+	__PHONELOG1( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::DefineSecurityModeState(), iEnginePreviousSimState( %d )",
+		iEnginePreviousSimState );
+		
+	__PHONELOG1( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::DefineSecurityModeState(), iSimState( %d )",
+		iSimState );
+		
+	__PHONELOG1( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::DefineSecurityModeState(), iDeviceLockState( %d )",
+		iDeviceLockState );
+		
+	__PHONELOG1( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::DefineSecurityModeState(), iSecurityMode( %d )",
+		iSecurityMode );
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::HandleStateChange
+// -----------------------------------------------------------
+void CPhoneSecurityModeObserver::HandleStateChange()
+	{
+	__PHONELOG2( EBasic,
+		EPhoneControl,
+		"CPhoneSecurityModeObserver::HandleStateChange() %d, %d observers ", iSecurityMode, iObserverArray.Count() );
+	if ( iInitialized )
+		{
+		for( TInt i( 0 ); i < iObserverArray.Count(); i++ )
+			{
+			MPhoneSecurityModeChangeObserver& observer = *( iObserverArray[ i ] );
+			observer.HandleSecurityModeChanged( iSecurityMode );
+			}
+		}
+	}
+
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::HandleStateChange
+// -----------------------------------------------------------
+TBool CPhoneSecurityModeObserver::IsSimSecurityStatus()
+	{
+	TBool securityStatus( EFalse );
+	if ( ESimRejected == iSimState )
+		{
+		securityStatus = ETrue;
+		}
+	else if ( ESimUnaccepted == iSimState )
+		{
+		securityStatus = ETrue;
+		}
+	else if ( ESimInvalid == iSimState )
+		{
+		securityStatus = ETrue;
+		}
+	return securityStatus;
+	}
+	
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::HandleStateChange
+// -----------------------------------------------------------
+TBool CPhoneSecurityModeObserver::IsEngineSimStateAccepted()
+	{
+	TBool accepted( ETrue );
+	if ( ( EPESimNotPresent == iEngineCurrentSimState )
+		&& ( ( EPESimUsable == iEnginePreviousSimState )
+		|| ( EPESimReadable == iEnginePreviousSimState )
+		|| ( EPESimNotReady == iEnginePreviousSimState ) ) )
+		{
+		accepted = EFalse;
+		}
+	else if ( EPESimNotSupported == iEngineCurrentSimState )
+		{
+		accepted = EFalse;
+		}
+	else if ( EPESimNotPresent == iEngineCurrentSimState &&
+		!AreSimlessFeaturesSupported() )
+		{
+		accepted = EFalse;
+		}
+	return accepted;
+	}
+	
+// -----------------------------------------------------------
+// CPhoneSecurityModeObserver::HandleStateChange
+// -----------------------------------------------------------
+TBool CPhoneSecurityModeObserver::AreSimlessFeaturesSupported()
+	{
+	return FeatureManager::FeatureSupported( KFeatureIdOfflineMode )
+		&&FeatureManager::FeatureSupported( KFeatureIdFfSimlessOfflineSupport );
+	}
+	
+
+// END OF FILE
--- a/phoneapp/phoneuicontrol/src/cphonestate.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestate.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-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"
@@ -36,7 +36,7 @@
 #include <wlaninternalpskeys.h>
 #include <btengdomainpskeys.h>
 #include <btengdomaincrkeys.h>
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
 #include <starterclient.h>
 #include <RSSSettings.h>
 #include <UikonInternalPSKeys.h>
@@ -104,7 +104,9 @@
 #include "cphonecontinueemergencycallcommand.h"
 #include "cphonecallheadermanager.h"
 #include "cphonenumberentrymanager.h"
-#include "mphonestorage.h"
+#include "mphonesecuritymodeobserver.h"
+#include "easydialingcommands.hrh"
+
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -459,7 +461,8 @@
         CPhoneBtaaDisconnectHandler::InstanceL()->HandleConnectionLostL();
         }
     else if ( audioOutput == EPEBTAudioAccessory && 
-            previousOutput != EPEBTAudioAccessory &&
+    		previousOutput > EPENotActive && 
+    		previousOutput != EPEBTAudioAccessory &&
             btAvailable )
         {
         CPhoneAccessoryBTHandler* bt = CPhoneAccessoryBTHandler::NewLC(
@@ -672,7 +675,13 @@
     TBool numericMode = iViewCommandHandle->HandleCommandL(
       EPhoneViewIsNumberEntryNumericMode ) == EPhoneViewResponseSuccess;
 
-    if ( ( aKeyEvent.iModifiers & EModifierSpecial ) != 0 || !numericMode )
+    // Key presses simulated by dialer are played even if in alphanumeric mode.
+    const TBool simulatedByDialer = 
+        ( ( aKeyEvent.iModifiers & ( EModifierNumLock | EModifierKeypad ) ) 
+                == ( EModifierNumLock | EModifierKeypad ) );
+
+
+    if ( ( ( aKeyEvent.iModifiers & EModifierSpecial ) != 0 || !numericMode ) && !simulatedByDialer )
         {
         return EFalse;
         }
@@ -1059,7 +1068,9 @@
 
     if ( numberEntryUsed && ( aKeyEvent.iRepeats == 0 ||
               aKeyEvent.iScanCode == EStdKeyBackspace ||
-              aKeyEvent.iScanCode ==EStdKeyLeftArrow  ||
+              aKeyEvent.iScanCode ==EStdKeyLeftArrow  ||              
+              aKeyEvent.iScanCode == EStdKeyUpArrow  ||
+              aKeyEvent.iScanCode == EStdKeyDownArrow  ||              
               aKeyEvent.iScanCode ==EStdKeyRightArrow ))
         {
         // Number entry exists but may be hidden
@@ -1128,6 +1139,18 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneState::IsDialingExtensionInFocusL
+// -----------------------------------------------------------
+//
+EXPORT_C TBool CPhoneState::IsDialingExtensionInFocusL() const
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::IsDialingExtensionInFocusL( ) ");
+    return iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetEasyDialingInFocusStatus ) ==
+        EPhoneViewResponseSuccess;
+    }
+
+// -----------------------------------------------------------
 // CPhoneState::SendKeyEventL
 // -----------------------------------------------------------
 //
@@ -1323,10 +1346,7 @@
 
         else
             {
-            TPhoneCmdParamBoolean isSecurityMode;
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-
-            if ( !isSecurityMode.Boolean() )
+            if ( !iStateMachine->SecurityMode()->IsSecurityMode() )
                 {
                 __PHONELOG( EBasic, EPhoneControl,
                   "CPhoneState::HandlePhoneForegroundEventL - Force Idle to the foreground" );
@@ -1437,7 +1457,9 @@
     else if ( aCategory == KPSUidStartup && aKey == KStartupSimSecurityStatus )
         {
         // Show security note, SIM is not valid.
-        if ( aValue == ESimRejected ||  aValue == ESimUnaccepted )
+        if ( aValue == ESimRejected 
+                || aValue == ESimUnaccepted 
+                || aValue == ESimInvalid )
             {
             __PHONELOG( EBasic, EPhoneControl, "CPhoneStateStartup::HandlePropertyChangedL - SimSecurity status received" );
             StartShowSecurityNoteL();
@@ -1461,13 +1483,13 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneState::NeedToSendToBackgroundL
+// CPhoneState::NeedToReturnToForegroundAppL
 // -----------------------------------------------------------
 //
-EXPORT_C TBool CPhoneState::NeedToSendToBackgroundL() const
+EXPORT_C TBool CPhoneState::NeedToReturnToForegroundAppL() const
     {
     return iViewCommandHandle->HandleCommandL(
-        EPhoneViewGetNeedToSendToBackgroundStatus ) ==
+        EPhoneViewGetNeedToReturnToForegroundAppStatus ) ==
         EPhoneViewResponseSuccess;
     }
 
@@ -1504,12 +1526,6 @@
     switch( aCommand )
         {
         case EPhoneEmergencyCmdExit:
-            {
-            //cancel emergency mode.
-            TPhoneCmdParamBoolean booleanParam;
-            booleanParam.SetBoolean( EFalse );
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetRetrictedDialer,&booleanParam );
-            }
             // this should be bypasses?
         case EPhoneDialerCallHandling:
         case EPhoneCmdBack:
@@ -1628,30 +1644,6 @@
             }
             break;
 
-        case EPhoneNumberAcqSecurityDialer:
-            {
-            if ( IsOnScreenDialerSupported() && !IsNumberEntryUsedL() )
-                {
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote );
-                TPhoneCmdParamBoolean visibleMode;
-                visibleMode.SetBoolean( ETrue );
-                iViewCommandHandle->ExecuteCommandL(
-                            EPhoneViewSetStatusPaneVisible, &visibleMode );
-
-
-                // Set emergency CBA, empty - exit
-                iCbaManager->SetCbaL( EPhoneEmergencyModeNoteCBA );
-
-                // Set dialer to restricted mode.
-                TPhoneCmdParamBoolean booleanParam;
-                booleanParam.SetBoolean( ETrue );
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewSetRetrictedDialer,&booleanParam );
-
-                NumberEntryManagerL()->CreateNumberEntryL();
-                }
-            }
-            break;
-
         case EPhoneDialerCmdContacts:
             {
             // Launch Phonebook application
@@ -1698,7 +1690,7 @@
                 // Show the number entry if it exists
                 SetNumberEntryVisibilityL(ETrue);
                 }
-            else if ( NeedToSendToBackgroundL() )
+            else if ( NeedToReturnToForegroundAppL() )
                 {
                 // Continue displaying current app but set up the
                 // idle screen in the background
@@ -1734,16 +1726,28 @@
             DisconnectCallL();
             break;
 
+        case EPhoneCmdUpdateCba:
+        case EPhoneDialerValidNumber:
+        case EPhoneDialerInvalidNumber:
+        case EPhoneCmdBlockingDialogLaunched:
+        case EPhoneCmdBlockingDialogClosed:
+            {
+            // these command ids are sent by easydialing to communicate to phone app
+            HandleEasyDialingCommandsL( aCommand );
+            }
+            break;
+                
         default:
             if ( IsOnScreenDialerSupported() )
                 {
                 // Offer command to view.
+                // Easydialing commands are handled in view, too.
                 TPhoneViewResponseId resId =
                             iViewCommandHandle->HandleCommandL( aCommand );
 
                 if( resId == EPhoneViewResponseFailed )
                     {
-                    commandStatus = EFalse;
+                     commandStatus = EFalse;
                     }
                 }
             else
@@ -1958,7 +1962,7 @@
 // CPhoneState::DisconnectCallL
 // -----------------------------------------------------------
 //
-EXPORT_C TBool CPhoneState::DisconnectCallL()
+EXPORT_C void CPhoneState::DisconnectCallL()
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisconnectCallL( ) ");
     // Fetch active call's id from view
@@ -1999,7 +2003,6 @@
             }
         }
 
-    TBool ret = EFalse;
     if( callStateData.CallId() > KErrNotFound )
         {
         // Release the call
@@ -2022,16 +2025,13 @@
             iStateMachine->SendPhoneEngineMessage(
                 MPEPhoneModel::EPEMessageRelease );
             }
-        ret = ETrue;
         }
     else
         {
         __PHONELOG( EOnlyFatal, EPhoneControl,
             "CPhoneState::DisconnectCallL has negative call id!" );
-        }
-
-    return ret;
-    }
+        }   
+   }
 
 // -----------------------------------------------------------
 // CPhoneState::DisplayIdleScreenL
@@ -2122,33 +2122,41 @@
                 }
             }
         }
-
-    // Get the number entry contents
-    HBufC* phoneNumber = PhoneNumberFromEntryLC();
-
-    // Call the number
-    iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber );
-
-    if ( phoneNumber->Des().Length() < KPhoneValidPhoneNumberLength )
+    
+    // If easydialing has focus, call should be initiated to focused contact.
+    if ( IsDialingExtensionInFocusL() )
         {
-        // Closing effect is shown when dialer exist.
-        BeginTransEffectLC( ENumberEntryClose );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
-        EndTransEffect();
-
-        HandleNumberEntryClearedL();
+        iViewCommandHandle->HandleCommandL( EEasyDialingVoiceCall );
         }
-
-    CleanupStack::PopAndDestroy( phoneNumber );
-
-    if ( !iCustomization ||
-         !iCustomization->HandleCallFromNumberEntryL() )
-        {
-        // Customization didn't handle call. Dial voice call
-        // as normally
-        DialVoiceCallL();
+    else
+        {  
+        // Get the number entry contents
+        HBufC* phoneNumber = PhoneNumberFromEntryLC();
+        
+        // Call the number
+        iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber );
+    
+        if ( phoneNumber->Des().Length() < KPhoneValidPhoneNumberLength )
+            {
+            // Closing effect is shown when dialer exist.
+            BeginTransEffectLC( ENumberEntryClose );            
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
+            EndTransEffect();
+            
+            HandleNumberEntryClearedL();
+            }
+    
+        CleanupStack::PopAndDestroy( phoneNumber );        
+    
+        if ( !iCustomization || 
+             !iCustomization->HandleCallFromNumberEntryL() )
+            {
+            // Customization didn't handle call. Dial voice call
+            // as normally
+            DialVoiceCallL();
+            }
         }
-
+    
     }
 
 // -----------------------------------------------------------
@@ -2240,22 +2248,16 @@
         iViewCommandHandle->ExecuteCommandL( EPhoneViewSetVideoCallFlag, &booleanParam );
         }
 
-    // Go to background if necessary
-    if ( NeedToSendToBackgroundL() ||  IsAutoLockOn() )
+    // Check if application and number entry was open before incoming call. If so give control to number entry 
+	// to prevent flickering
+    if ( NeedToReturnToForegroundAppL() ||  IsAutoLockOn() )
         {
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
         // If number entry is used set control and visibility.
         if ( IsNumberEntryUsedL() )
            {
            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
            }
         }
-    // If there is no need to send back ground and number entry is used then
-    // we must show number entry.
-    else if ( !NeedToSendToBackgroundL() && IsNumberEntryUsedL() )
-        {
-        SetNumberEntryVisibilityL(ETrue);
-        }
     }
 
 // -----------------------------------------------------------
@@ -2732,7 +2734,7 @@
             KCTsyCallType ) );
 
     TInt activeCallId = GetActiveCallIdL();
-    if ( activeCallId > KErrNotFound )
+    if ( activeCallId > KErrNone )
         {
         if ( iStateMachine->PhoneEngineInfo()->CallALSLine( activeCallId )
              == CCCECallParameters::ECCELineTypeAux )
@@ -2780,6 +2782,11 @@
                 }
             }
         }
+    // TODO: Refactor -> this looks really dubious.
+    else
+        {
+        incallIndicatorParam.SetLittleBubbleVisible( ETrue );
+        }
 
     // Update the in-call indicator
     iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateIncallIndicator,
@@ -3334,6 +3341,7 @@
             {
             case ESimRejected:
             case ESimUnaccepted:
+            case ESimInvalid:
                 retVal = EFalse;
                 break;
 
@@ -3352,9 +3360,7 @@
 //
 EXPORT_C TBool CPhoneState::IsSimStateNotPresentWithSecurityModeEnabled()
     {
-    TPhoneCmdParamBoolean isSecurityMode;
-    TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode ) );
-    if ( SimState() == EPESimNotPresent && isSecurityMode.Boolean() )
+    if ( SimState() == EPESimNotPresent && iStateMachine->SecurityMode()->IsSecurityMode() )
         {
         return ETrue;
         }
@@ -3409,11 +3415,6 @@
     {
     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::StartShowSecurityNoteL ");
 
-    // Set security mode on.
-    TPhoneCmdParamBoolean securityMode;
-    securityMode.SetBoolean( ETrue );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetSecurityMode, &securityMode );
-
     // Remove number entry from screen
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
 
@@ -3435,21 +3436,38 @@
 
     TInt resourceId ( KErrNone );
 
-    if ( SimSecurityStatus() == ESimRejected )
-        {
-        resourceId = CPhoneMainResourceResolver::Instance()->
-            ResolveResourceID( EPhoneSimRejected );
-        }
-    else if ( SimState() == EPESimNotPresent )
+
+    switch( SimSecurityStatus() )
         {
-        // insert sim card -note
-        resourceId = CPhoneMainResourceResolver::Instance()->
-            ResolveResourceID( EPhoneSimRemoved );
-        }
-    else if ( SimSecurityStatus() == ESimUnaccepted )
-        {
-        resourceId = CPhoneMainResourceResolver::Instance()->
-            ResolveResourceID( EPhoneSimUnaccepted );
+			  case ESimRejected:
+			      {
+			      resourceId = CPhoneMainResourceResolver::Instance()->
+              ResolveResourceID( EPhoneSimRejected );
+            break;
+			      }
+			  case ESimUnaccepted:
+			      {
+			      // insert sim card -note
+            resourceId = CPhoneMainResourceResolver::Instance()->
+              ResolveResourceID( EPhoneSimUnaccepted );	
+			      break;
+			      }
+			  case ESimInvalid:
+			      {
+			      resourceId = CPhoneMainResourceResolver::Instance()->
+              ResolveResourceID( EPhoneSIMInvalidUICC );
+			      break;
+			      }
+        default:
+	          {
+	          if ( SimState() == EPESimNotPresent )
+                {
+                // insert sim card -note
+                resourceId = CPhoneMainResourceResolver::Instance()->
+                    ResolveResourceID( EPhoneSimRemoved );
+                }
+	          break;	
+	          }
         }
 
     if ( resourceId != KErrNone )
@@ -3821,33 +3839,11 @@
             &numberEntryCountParam );
     TInt neLength( numberEntryCountParam.Integer() );
 
-    if( iCustomization && iCustomization->AllowAlphaNumericMode() )
+    if( neLength == 1 )
         {
-        if ( NumberEntryManagerL()->NumberEntryInNumericModeL() )
+         if ( !iStateMachine->SecurityMode()->IsSecurityMode() )
             {
-            if ( neLength == 0 )
-                {
-                OnlyHashInNumberEntryL();
-                }
-
-            if ( neLength == 1 )
-                {
-                NumberEntryClearL();
-                }
-            }
-        NumberEntryManagerL()->NumberEntryToggleAlphaNumericModeL();
-        }
-    else
-        {
-        if( neLength == 1 )
-            {
-            TPhoneCmdParamBoolean isSecurityMode;
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-
-            if ( !isSecurityMode.Boolean() )
-                {
-                OnlyHashInNumberEntryL();
-                }
+            OnlyHashInNumberEntryL();
             }
         }
     }
@@ -4053,9 +4049,7 @@
         &globalNotifierParam );
 
     // uncapture App and Camera keys if not security mode
-    TPhoneCmdParamBoolean isSecurityMode;
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-    if ( !isSecurityMode.Boolean() )
+    if ( !iStateMachine->SecurityMode()->IsSecurityMode() )
         {
         CaptureKeysDuringCallNotificationL( EFalse );
         }
@@ -4064,13 +4058,6 @@
                     KPSUidScreenSaver,
                     KScreenSaverAllowScreenSaver,
                     EPhoneScreensaverAllowed );
-
-    // Restore keylock if phone has been locked before call.
-    if ( iStateMachine->PhoneStorage()->NeedToEnableKeylock() )
-        {
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewEnableKeyLock );
-        iStateMachine->PhoneStorage()->SetNeedToEnableKeylock( EFalse );
-        }
     }
 
 // -----------------------------------------------------------
@@ -4132,6 +4119,8 @@
     ESimSecurityStatusUninitialized = KStartupEnumerationFirstValue,
     ESimRejected,   // The PUK code has been entered incorrectly, so the card is rejected.
     ESimUnaccepted  // The SIM lock is on, so the card is unaccepted.
+    ESimInvalid     // The Sim inserted is not same as the one provided by the
+                    // operator, so card is invalid.
     */
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SimSecurityStatus()" );
     return CPhonePubSubProxy::Instance()->Value(
@@ -4709,207 +4698,6 @@
             }
         }
     }
-
-// -----------------------------------------------------------
-// CPhoneState::GetBlockedKeyList
-// -----------------------------------------------------------
-//
-EXPORT_C const RArray<TInt>& CPhoneState::GetBlockedKeyList() const
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::GetBlockedKeyList( ) ");
-    return iStateMachine->PhoneStorage()->GetBlockedKeyList();
-    }
-
-// -----------------------------------------------------------
-// CPhoneState::DisableHWKeysL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneState::DisableHWKeysL()
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisableHWKeysL( ) ");
-
-    if( iStateMachine->PhoneStorage()->IsBlockedKeysListEmpty() )
-        {
-        __PHONELOG( EBasic, EPhoneControl, " CPhoneState::DisableHWKeysL HW Keys Disabled " );
-
-        iStateMachine->PhoneStorage()->AppendBlockedKeysListL( EStdKeyNo );
-        iStateMachine->PhoneStorage()->AppendBlockedKeysListL( EStdKeyYes );
-        }
-    }
-
-// -----------------------------------------------------------
-// CPhoneState::DisableCallUIL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneState::DisableCallUIL()
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisableCallUIL( ) ");
-
-    // Set Call UI state to storage
-    if( !iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        __PHONELOG( EBasic, EPhoneControl, " CPhoneState::DisableCallUIL CallUI Disabled " );
-
-        // Show keys locked note
-        TPhoneCmdParamNote noteParam;
-        noteParam.SetType( EPhoneNoteUIDisabled );
-        noteParam.SetResourceId( CPhoneMainResourceResolver::Instance()->
-            ResolveResourceID( EPhoneInformationNote ) );
-    
-        HBufC* noteText = StringLoader::LoadLC( 
-            CPhoneMainResourceResolver::Instance()->
-                ResolveResourceID( EPhoneIncomingCallKeysLocked ) );
-        noteParam.SetText( *noteText );
-    
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewShowNote, &noteParam );
-        CleanupStack::PopAndDestroy( noteText );
-    
-        // Start capturing the key guard key
-        TPhoneCmdParamKeyCapture appKeyCaptureParam;
-        appKeyCaptureParam.SetKey( EStdKeyDevice7 );
-        appKeyCaptureParam.SetKeyCode( EKeyDeviceF );
-        appKeyCaptureParam.SetCaptureType( EPhoneKeyAllEvents );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewStartCapturingKey, &appKeyCaptureParam );
-        
-        // Set Call UI state to storage
-        iStateMachine->PhoneStorage()->SetScreenLocked( ETrue );
-        }
-    }
-
-// -----------------------------------------------------------
-// CPhoneState::EnableCallUIL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneState::EnableCallUIL()
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::EnableCallUIL( ) ");
-
-    if( iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        __PHONELOG( EBasic, EPhoneControl, " CPhoneState::EnableCallUIL CallUI Enabled " );
-
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote );
-
-        // Stop capturing the key guard key
-        TPhoneCmdParamKeyCapture appKeyCaptureParam;
-        appKeyCaptureParam.SetKey( EStdKeyDevice7 );
-        appKeyCaptureParam.SetKeyCode( EKeyDeviceF );
-        appKeyCaptureParam.SetCaptureType( EPhoneKeyAllEvents );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewStopCapturingKey, &appKeyCaptureParam );
-        
-        iStateMachine->PhoneStorage()->SetScreenLocked( EFalse );
-        }
-    }
-
-// -----------------------------------------------------------
-// CPhoneState::CheckDisableHWKeysAndCallUIL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneState::CheckDisableHWKeysAndCallUIL()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneState::CheckDisableHWKeysAndCallUIL( ) ");
-
-    if( IsKeyLockOn() || IsAutoLockOn() )
-        {
-        // Disable HW keys if needed
-        if( CPhoneCenRepProxy::Instance()->
-                IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) )
-            {
-            DisableHWKeysL();
-            }
-
-        // Disable Call UI if needed
-        if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
-                && !CPhoneCenRepProxy::Instance()->
-                IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) )
-            {
-            DisableCallUIL();
-            iStateMachine->PhoneStorage()->SetNeedToEnableKeylock( ETrue );
-            }
-        }
-    }
-
-// -----------------------------------------------------------
-// CPhoneState::HandleHoldSwitchL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneState::HandleHoldSwitchL()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneState::HandleHoldSwitchL( ) ");
-
-    if( CPhoneCenRepProxy::Instance()->
-            IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) )
-        {
-        if( iStateMachine->PhoneStorage()->IsBlockedKeysListEmpty() )
-            {
-            // Disable HW Keys if needed
-            DisableHWKeysL();
-            }
-        else
-            {
-            // Reset blocked keys list
-            iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-            }
-        }
-    
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-            && !CPhoneCenRepProxy::Instance()->
-            IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) )
-        {
-        if( iStateMachine->PhoneStorage()->IsScreenLocked() )
-            {
-            // Enable Call
-            EnableCallUIL();
-            }
-        else
-            {
-            // Set keylock enabled
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewEnableKeyLockWithoutNote );
-            // Disable Call
-            DisableCallUIL();
-            }
-        }
-        
-        // Stop ringingtone
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewStopRingTone );
-    }
-
-// -----------------------------------------------------------
-// CPhoneState::RetainPreviousKeylockStateL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneState::RetainPreviousKeylockStateL()
-    {
-    // Lock keypad, if keylock was enabled before incoming call.
-    // Also reset PhoneStorage keylock status.
-    if ( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) &&
-        iStateMachine->PhoneStorage()->NeedToEnableKeylock() )
-        {
-        iStateMachine->PhoneStorage()->SetNeedToEnableKeylock( EFalse );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewEnableKeyLockWithoutNote ); 
-        }
-    }
-
-// ---------------------------------------------------------
-// CPhoneState::HandleKeyLockEnabledL
-// ---------------------------------------------------------
-//
-EXPORT_C void CPhoneState::HandleKeyLockEnabled( TBool aKeylockEnabled )
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleKeyLockEnabledL( ) ");
-    if( !FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
-		&& CPhoneCenRepProxy::Instance()->
-			IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) )
-		{
-    	if( !aKeylockEnabled )
-	        {
-	        // Keylock disabled
-            // Reset blocked keys list
-            iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-	        }
-		}
-    }
 	
 // ---------------------------------------------------------
 // CPhoneState::SetToolbarDimming
@@ -4917,12 +4705,16 @@
 //
 EXPORT_C void CPhoneState::SetToolbarDimming( TBool aDimmed )
     {
-    if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
+	if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
         {
-        TPhoneCmdParamBoolean booleanParam;
-        booleanParam.SetBoolean( aDimmed );
-        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL(
-            EPhoneViewSetToolbarDimming, &booleanParam ));
+		// Check that we are not undimming toolbar in security mode
+		if ( !( !aDimmed && iStateMachine->SecurityMode()->IsSecurityMode() ) )
+			{
+			TPhoneCmdParamBoolean booleanParam;
+			booleanParam.SetBoolean( aDimmed );
+			TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL(
+				EPhoneViewSetToolbarDimming, &booleanParam ));
+			}
         }
     }
 
@@ -4941,6 +4733,54 @@
         }
     }
 
+// ---------------------------------------------------------
+// CPhoneState::HandleEasyDialingCommandsL
+// ---------------------------------------------------------
+//
+void CPhoneState::HandleEasyDialingCommandsL( TInt aCommandId )
+    {
+    switch ( aCommandId )
+        {
+        case EPhoneCmdUpdateCba:
+            iCbaManager->UpdateInCallCbaL();
+            break;
+                
+        case EPhoneDialerValidNumber:
+            {
+            TPhoneCmdParamBoolean command;
+            command.SetBoolean( EFalse );
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetInvalidCsPhoneNumberFlag, &command );           
+            }
+            break;
+                
+        case EPhoneDialerInvalidNumber:
+            {
+            TPhoneCmdParamBoolean command;
+            command.SetBoolean( ETrue );
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetInvalidCsPhoneNumberFlag, &command );
+            }
+            break;
+            
+        case EPhoneCmdBlockingDialogLaunched:
+            {
+            TPhoneCmdParamBoolean param;
+            param.SetBoolean( ETrue );
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetBlockingDialogStatus, &param );
+            }
+            break;
+            
+        case EPhoneCmdBlockingDialogClosed:
+            {
+            TPhoneCmdParamBoolean param;
+            param.SetBoolean( EFalse );
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetBlockingDialogStatus, &param );
+            }
+            break;
+            
+        default:
+            break;
+        }
+    }
 
 //  End of File
 
--- a/phoneapp/phoneuicontrol/src/cphonestatecallsetup.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestatecallsetup.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -566,13 +566,8 @@
 //
 void CPhoneStateCallSetup::HandleConnectedL( TInt aCallId )
     {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateCallSetup::HandleConnectedL()");
-    // Keep Phone in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( EFalse );
-    iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
-        
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateCallSetup::HandleConnectedL()");        
+
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
     
@@ -631,7 +626,7 @@
         // Show the number entry if it exists
         SetNumberEntryVisibilityL(ETrue);    
         }    
-    else if ( NeedToSendToBackgroundL() )
+    else if ( NeedToReturnToForegroundAppL() )
         {
         __PHONELOG( EBasic,EPhoneControl,"CPhoneStateCallSetup::elseif1");
         // Continue displaying current app but set up the 
--- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -58,6 +58,8 @@
 #include "phoneui.pan"
 #include "phoneconstants.h"
 #include "mphonecustomization.h"
+#include <easydialingcommands.hrh>
+#include "mphonesecuritymodeobserver.h"
 
 //CONSTANTS
 const TInt  KMaxParamLength = 1024;
@@ -126,19 +128,15 @@
     TEventCode aEventCode )
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleKeyEventL( ) ");
-    // Security mode check
-    TPhoneCmdParamBoolean isSecurityMode;      
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );  
     
- 
     // Number entry is blocked, if active Query
     if ( !IsAnyQueryActiveL() )
         {
         // Handle numeric keys when key events are received in idle state
         HandleNumericKeyEventL( aKeyEvent, aEventCode );  
         }
-    else if ( isSecurityMode.Boolean() && CPhoneKeys::IsNumericKey( 
-        aKeyEvent, aEventCode ) )
+    else if ( iStateMachine->SecurityMode()->IsSecurityMode()
+    	&& CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) )
         {
         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote );
         // Handle numeric keys when key events are received in single state
@@ -212,10 +210,7 @@
                 {
                 if ( IsNumberEntryUsedL() )
                     {
-                    // Security mode check
-                    TPhoneCmdParamBoolean isSecurityMode;      
-                    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-
+                   
                     TPhoneCmdParamInteger numberEntryCountParam;
                     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount,
                     &numberEntryCountParam );
@@ -232,7 +227,7 @@
                         return;
                         }
                     
-                    else if ( neLength == 0 && !isSecurityMode.Boolean())
+                    else if ( neLength == 0 && !iStateMachine->SecurityMode()->IsSecurityMode() )
                         {
                         // start logs
                         iViewCommandHandle->HandleCommandL( 
@@ -244,17 +239,12 @@
                 // If dialer is not open but phone is in foreground and phone receives
                 // send-key event we have to check if security mode is true and if it
                 // is then open emergency dialer.
-                else if ( !IsNumberEntryUsedL() )
+                else if ( !IsNumberEntryUsedL() ) 
                     {
-                    // Security mode check
-                    TPhoneCmdParamBoolean isSecurityMode;      
-                    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-
-                    if ( isSecurityMode.Boolean())
-                        {
-                        // launch dialer.
-                        HandleCommandL(EPhoneNumberAcqSecurityDialer);
-                        }
+                   if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+						{
+						iViewCommandHandle->HandleCommandL( EPhoneViewOpenNumberEntry );
+						}
                     }           
                 }
             else // iOnScreenDialer false, non-touch.
@@ -265,16 +255,12 @@
             
         case EKeyApplication0:
             {
-            // Security mode
-            TPhoneCmdParamBoolean isSecurityMode;      
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-            	
             // If dialer is not open but phone is in foreground and phone receives
             // applicaion-key event we have to open emergency dialer. 
             // Securitymode check because Applicationkey only open dialer in securitymode.
-            if ( isSecurityMode.Boolean() && !IsNumberEntryUsedL() )
+            if ( iStateMachine->SecurityMode()->IsSecurityMode() && !IsNumberEntryUsedL() )
                 {
-                HandleCommandL(EPhoneNumberAcqSecurityDialer);
+                iViewCommandHandle->HandleCommandL( EPhoneViewOpenNumberEntry );
                 }           
             }
             break;
@@ -307,7 +293,14 @@
         case EKeyEnter:
             if ( IsNumberEntryVisibleL() )
                 {
-                HandleCommandL( EPhoneCmdOptions );
+                if ( IsDialingExtensionInFocusL() )
+                    {
+                    HandleCommandL( EEasyDialingEnterKeyAction );
+                    }
+                else
+                    {
+                    HandleCommandL( EPhoneCmdOptions );
+                    }               
                 }
             break;
 #endif
@@ -350,7 +343,7 @@
                     // Show the number entry if it exists
                     SetNumberEntryVisibilityL(ETrue);    
                     }    
-                else if ( NeedToSendToBackgroundL() )
+                else if ( NeedToReturnToForegroundAppL() )
                     {
                     // Continue displaying current app but set up the 
                     // idle screen in the background
@@ -422,9 +415,6 @@
     // Display incoming call
     DisplayIncomingCallL( aCallId );
 
-    // Disable HW keys and Call UI if needed
-    CheckDisableHWKeysAndCallUIL();
-    
     EndUiUpdate();
     
     EndTransEffect();
@@ -541,9 +531,8 @@
             // Open number entry menubar
             TPhoneCmdParamInteger integerParam;  
                       
-            integerParam.SetInteger( 
-             CPhoneMainResourceResolver::Instance()->
-                ResolveResourceID( EPhoneNumberAcqMenubar ) );               
+            TInt menuId( GetNumberAcqMenuIdL() );
+            integerParam.SetInteger( menuId );   
 
             iViewCommandHandle->ExecuteCommandL( 
                 EPhoneViewMenuBarOpen, &integerParam );
@@ -562,8 +551,10 @@
             break;
             
         case EPhoneCmdBack:
+            BeginTransEffectLC( ENumberEntryClose );
             HandleBackCommandL();
-            break;            
+            EndTransEffect();
+            break;
             
         default:
             commandStatus = CPhoneState::HandleCommandL( aCommand );
@@ -593,7 +584,7 @@
                ResolveResourceID( EPhoneNumberAcqOkMenubar ) );
            iViewCommandHandle->ExecuteCommandL( 
                EPhoneViewMenuBarOpen, &integerParam );
-	       commandStatus = ETrue;
+           commandStatus = ETrue;
            }
            break;       
            
@@ -649,6 +640,7 @@
 void CPhoneStateIdle::HandleBackCommandL()
     {
     TBool previousApp(EFalse);
+
     // If previous app activation is true then open
     // previous application.
     if ( iOnScreenDialer && 
@@ -658,6 +650,7 @@
         iViewCommandHandle->ExecuteCommandL( 
             EPhoneViewGetActivatePreviousApp, &booleanParam );
         
+
         if ( booleanParam.Boolean() )
             {
             // Open previous app.
@@ -670,7 +663,7 @@
 
             iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW ); 
             previousApp = ETrue;   
-            }
+            }        
         }
         
     if ( !previousApp )
@@ -678,9 +671,11 @@
         // Remove number entry from screen
         iViewCommandHandle->ExecuteCommandL( 
             EPhoneViewRemoveNumberEntry );
+         
         // Do state-specific operation when number entry is cleared
         HandleNumberEntryClearedL();
-        }    
+        }  
+ 
     }
 
 // -----------------------------------------------------------
@@ -738,12 +733,12 @@
     // Capture keys when there is an incoming call
     CaptureKeysDuringCallNotificationL( ETrue );
 
-    // Indicate that the Phone needs to be sent to the background if
-    // an application other than the top application is in the foreground
+    // Indicate that the Foreground application needs to be sent to the foreground 
+    // after call is ended.
     TPhoneCmdParamBoolean booleanParam;
     booleanParam.SetBoolean( !TopAppIsDisplayedL() );
     iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
+        EPhoneViewSetNeedToReturnToForegroundAppStatus,
         &booleanParam );
 
     // Bring Phone app in the foreground
@@ -781,15 +776,6 @@
 
     // Capture keys when the phone is dialling
     CaptureKeysDuringCallNotificationL( ETrue );
-
-    // Indicate that the Phone needs to be sent to the background if
-    // an application other than the top application is in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( !TopAppIsDisplayedL() );
-    
-    iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
-        &booleanParam );
     
     // Bring Phone app in the foreground
     TPhoneCmdParamInteger uidParam;
@@ -841,9 +827,6 @@
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandlePhoneForegroundEventL( ) ");
     
-    TPhoneCmdParamBoolean isSecurityMode;      
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-
     TBool activatePhone = CPhonePubSubProxy::Instance()->Value(
                     KPSUidAiInformation, KActiveIdleState ) == EPSAiNumberEntry;
     
@@ -871,7 +854,7 @@
         // If dialer is open add icon to FSW list.
         iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW );
         }
-    else if ( !IsNumberEntryUsedL() && !isSecurityMode.Boolean() )
+    else if ( !IsNumberEntryUsedL() && !iStateMachine->SecurityMode()->IsSecurityMode() )
         {
         // Bring Idle app to the foreground
         iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground );
@@ -1148,21 +1131,22 @@
             else if ( !TopAppIsDisplayedL() )
                 {
                 // Phone might not be the topmost app since it has
-                // some dialog/query open therefore we need to check this
-                // and remove dialog/phone.
-                if ( IsAnyQueryActiveL()  )
+                // some dialog/query open therefore we need to remove dialog/phone.
+            
+                if ( !IsSimStateNotPresentWithSecurityModeEnabled() )
                     {
-                    if ( !IsSimStateNotPresentWithSecurityModeEnabled() )
-                        {
-                        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-                        }
+                    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+                    }
+                // Remove number entry from screen
+                iViewCommandHandle->ExecuteCommandL( 
+                        EPhoneViewRemoveNumberEntry );
                     
-                    // Remove number entry from screen
-                    iViewCommandHandle->ExecuteCommandL( 
-                        EPhoneViewRemoveNumberEntry );
-                    } 
-			    // Bring Idle app to the foreground
+                // Bring Idle app to the foreground
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground );
+                
+                // Updates Task list
+                iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW );
+
                 }
             }
         else if ( IsNumberEntryUsedL() )
@@ -1307,32 +1291,31 @@
 // -----------------------------------------------------------------------------
 //
 TBool CPhoneStateIdle::CheckAppLaunchingL( const TKeyCode aCode )
-	{
-	TBool valuesFetched( EFalse );
-	
-	if( !IsSimOk() )
-	    {
-	    return valuesFetched;
-	    }
-	
-	TPhoneCmdParamAppInfo appInfo;
-	HBufC8* appParam = HBufC8::NewL( KMaxParamLength );
-	CleanupStack::PushL( appParam );
+    {
+    TBool valuesFetched( EFalse );
+    
+    if( !IsSimOk() )
+        {
+        return valuesFetched;
+        }
+    
+    TPhoneCmdParamAppInfo appInfo;
+    HBufC8* appParam = HBufC8::NewL( KMaxParamLength );
+    CleanupStack::PushL( appParam );
 
-    TPhoneCmdParamInteger numberEntryCount;
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount,
-        &numberEntryCount );
+    TBool isValidAppLaunchingKeyEvent = ETrue;
     
-    TBool isValidAppLaunchingKeyEvent = EFalse;
-    if ( iCustomization && iCustomization->AllowAlphaNumericMode() &&
-         TKeyCode( KPhoneDtmfHashCharacter ) == aCode )
+    // By-pass checking of number entry length in case of #-character.
+    // #-character is handled differently from other keys, and number 
+    // entry length has been checked earlier. Checking number entry length
+    // for #-character is difficult here, because we cannot know if FEP
+    // has removed the long-# from number entry or not.
+    if ( TKeyCode( KPhoneDtmfHashCharacter ) != aCode )
         {
-        // If alphanumeric mode is supported FEP changes text input mode with
-        // long hash and removes hash from number entry.
-        isValidAppLaunchingKeyEvent = ( numberEntryCount.Integer() == 0 );
-        }
-    else
-        {
+        TPhoneCmdParamInteger numberEntryCount;
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount,
+            &numberEntryCount );
+    
         isValidAppLaunchingKeyEvent = ( numberEntryCount.Integer() == 1 );
         }
     
@@ -1340,21 +1323,21 @@
         {
         TRAPD( err, 
             CPhoneCenRepProxy::Instance()->FetchValuesFromCenRepL( 
-        	appInfo, aCode, appParam, valuesFetched ) );
+            appInfo, aCode, appParam, valuesFetched ) );
         
         if ( KErrNone == err && valuesFetched )
             {
             // Remove the number entry window
             iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
 
-        	// Stop playing DTMF tone
-        	iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
+            // Stop playing DTMF tone
+            iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
 
             TPhoneCommandParam* phoneCommandParam = 
                 static_cast<TPhoneCommandParam*>( &appInfo );
-        	iViewCommandHandle->ExecuteCommandL( 
-        				EPhoneViewActivateAppViewConventional,
-        				phoneCommandParam ); 
+            iViewCommandHandle->ExecuteCommandL( 
+                        EPhoneViewActivateAppViewConventional,
+                        phoneCommandParam ); 
             
             // Continue displaying current app but set up the 
             // idle screen in the background
@@ -1363,7 +1346,7 @@
         }
     CleanupStack::PopAndDestroy( appParam );
     return valuesFetched;
-	}
+    }
 
 // -----------------------------------------------------------
 // CPhoneStateIdle::NumberForSpeedDialLocationL
@@ -1422,7 +1405,12 @@
         else
 #endif // _DEBUG
             {
-            if ( IsSpeedDialNumber( *phoneNumber ) )
+            if ( IsDialingExtensionInFocusL() )
+                {
+                CPhoneState::HandleCommandL( EEasyDialingVoiceCall );
+                }
+            
+            else if ( IsSpeedDialNumber( *phoneNumber ) )
                 {
                 // Handle speed dial
                 SpeedDialL( (*phoneNumber)[0], aSendKey ? EDialMethodSendCommand : EDialMethodMenuSelection );
@@ -1439,4 +1427,29 @@
         }    
     }
 
+// -----------------------------------------------------------
+// CPhoneStateIdle::HandleVoiceCallCommandL()
+// -----------------------------------------------------------
+//
+TInt CPhoneStateIdle::GetNumberAcqMenuIdL()
+    {
+    TInt menuId = CPhoneMainResourceResolver::Instance()->
+            ResolveResourceID( EPhoneNumberAcqMenubar );
+    
+    // Use easy dialing menu id, if easydialing is in focus.
+    // Otherwise use number acquisition menu id.
+    if ( IsDialingExtensionInFocusL() )
+        {
+        // Fetch easydialing menu id, check its validity and assign to menuId
+        TPhoneCmdParamInteger integerParam;  
+        iViewCommandHandle->ExecuteCommandL(
+                EPhoneViewGetEasyDialingMenuId, &integerParam );
+        if ( integerParam.Integer() ) 
+            {
+            menuId = integerParam.Integer();
+            }
+        }
+    return menuId;
+    }
+
 // End of File
--- a/phoneapp/phoneuicontrol/src/cphonestateincall.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateincall.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2005-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"
@@ -26,6 +26,7 @@
 #include <videotelcontrolmediatorapi.h>
 #include <MediatorDomainUIDs.h>
 #include <bldvariant.hrh>
+#include <coreapplicationuisdomainpskeys.h>
 
 #include "cphonestateincall.h"
 #include "tphonecmdparamboolean.h"
@@ -37,6 +38,7 @@
 #include "tphonecmdparamcallstatedata.h"
 #include "tphonecmdparamsfidata.h"
 #include "mphonestatemachine.h"
+#include "mphonesecuritymodeobserver.h"
 #include "phonestatedefinitions.h"
 #include "phoneviewcommanddefinitions.h"
 #include "phoneui.hrh"
@@ -51,6 +53,8 @@
 #include "cphonemediatorsender.h"
 #include "cphoneterminateallconnectionscommand.h"
 #include "mphonecustomization.h"
+#include "easydialingcommands.hrh"
+
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -74,10 +78,7 @@
 //
 EXPORT_C CPhoneStateInCall::~CPhoneStateInCall()
     {
-    if( iDtmfWaitCharTimer )
-        {
-        delete iDtmfWaitCharTimer;            
-        }
+    delete iDtmfWaitCharTimer;            
     }
 
 // -----------------------------------------------------------
@@ -146,7 +147,15 @@
                 }
             else if ( IsNumberEntryVisibleL() )
                 {
-                HandleCommandL( EPhoneCmdOptions );
+                if ( IsDialingExtensionInFocusL() )
+                    {
+                    iViewCommandHandle->HandleCommandL(
+                                       EEasyDialingEnterKeyAction );
+                    }
+                else
+                    {
+                    HandleCommandL( EPhoneCmdOptions );
+                    }
                 }
             break;
 #endif            
@@ -296,30 +305,43 @@
     SetDefaultFlagsL();
     if ( IsNumberEntryUsedL() )
         {
-        // Show the number entry if it exists and update cba's.
-        SetNumberEntryVisibilityL( ETrue );
-        
-        // Close dtmf dialer when call is disconnected.
-        if ( IsDTMFEditorVisibleL() )
-            {      
-            CloseDTMFEditorL();
+        if ( NeedToReturnToForegroundAppL() )
+            {
+            // Return phone to the background if menu application is needed to foreground.
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
+    
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
+    
+            // Set Number Entry CBA
+            iCbaManager->SetCbaL( EPhoneNumberAcqCBA );
+            }
+        else
+            {
+            // Show the number entry if it exists and update cba's.
+            SetNumberEntryVisibilityL( ETrue );
             
-            // Display idle screen and update CBA's
-            DisplayIdleScreenL();
+            // Close dtmf dialer when call is disconnected.
+            if ( IsDTMFEditorVisibleL() )
+                {      
+                CloseDTMFEditorL();
+                
+                // Display idle screen and update CBA's
+                DisplayIdleScreenL();
+                }
+            else if ( iOnScreenDialer && IsCustomizedDialerVisibleL() )
+                {            
+                CloseCustomizedDialerL();
+                // Display idle screen and update CBA's
+                DisplayIdleScreenL();
+                } 
             }
-        else if ( iOnScreenDialer && IsCustomizedDialerVisibleL() )
-            {            
-            CloseCustomizedDialerL();
-            // Display idle screen and update CBA's
-            DisplayIdleScreenL();
-            }          
         }
     else
         {
         // Close menu bar, if it is displayed
         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
         
-        if ( !TopAppIsDisplayedL() || IsAutoLockOn() )
+        if ( !TopAppIsDisplayedL() || IsAutoLockOn() || NeedToReturnToForegroundAppL() )
             {        
             // Continue displaying current app but set up the 
             // idle screen in the background
@@ -359,11 +381,11 @@
 EXPORT_C void CPhoneStateInCall::UpdateCbaL( TInt aResource )
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateInCall::UpdateCbaL() ");
-    if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
+    if ( iOnScreenDialer && IsNumberEntryVisibleL() && IsDTMFEditorVisibleL() )
         {
         iCbaManager->SetCbaL( EPhoneDtmfDialerCBA );        
         }
-    else if ( iOnScreenDialer && IsCustomizedDialerVisibleL() )
+    else if ( iOnScreenDialer && IsNumberEntryVisibleL() && IsCustomizedDialerVisibleL() )
         {
         iCbaManager->SetCbaL( CustomizedDialerCbaResourceIdL() );
         }
@@ -590,9 +612,13 @@
             
             // Activate DTMF list query when cancel is pressed.
             // Forwards command to the framework 
-            HandleCommandL( EPhoneInCallCmdDtmfListQuery );
+            if ( !iStateMachine->SecurityMode()->IsSecurityMode() )
+                {
+                HandleCommandL( EPhoneInCallCmdDtmfListQuery );
+                }
             }
             break;  
+			
         case EPhoneDtmfDialerExit:
             {
             CloseDTMFEditorL();   
@@ -618,7 +644,14 @@
             break;
         //DTMF list query - dialog   
         case EPhoneInCallCmdDtmfListQuery:
-            LaunchDtmfListQueryL();
+            if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+                {
+                HandleCommandL( EPhoneInCallCmdDtmfManualQuery );
+                }
+             else
+                {
+                LaunchDtmfListQueryL();
+                }
             break;
             
         //DTMF list query - Search   
@@ -762,7 +795,7 @@
 
         case EPhoneCmdEnd:
             CloseDtmfQueryL();
-            CPhoneState::DisconnectCallL();
+            DisconnectCallL();
             break;
             
         // 'End all calls' from menu
@@ -807,6 +840,10 @@
             commandStatus = CPhoneState::HandleCommandL( aCommand );        
             break;
  
+        case EPhoneInCallCmdShareLiveVideo:
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewLaunchMultimediaSharing );
+            break;
+
        default:
             commandStatus = CPhoneState::HandleCommandL( aCommand );
             break;
@@ -1281,7 +1318,7 @@
     }
 
 // -----------------------------------------------------------------------------
-// CPhoneStateInCall::LockKeysL
+// CPhoneStateInCall::LockKeypadL
 // -----------------------------------------------------------------------------
 //
 void CPhoneStateInCall::LockKeypadL()
@@ -1590,4 +1627,30 @@
         &queryDialogParam );    
     }
   
+// -----------------------------------------------------------------------------
+// CPhoneStateInCall::HandlePropertyChangedL
+// from CPhoneState
+// -----------------------------------------------------------------------------
+//  
+EXPORT_C void CPhoneStateInCall::HandlePropertyChangedL(
+        const TUid& aCategory, const TUint aKey, const TInt aValue)
+    {
+    if ( aCategory == KPSUidCoreApplicationUIs &&
+         aKey == KCoreAppUIsVideoSharingIndicator )
+        {
+        if ( aValue == ECoreAppUIsVideoSharingIndicatorOn )
+            {
+            SetTouchPaneButtons( EPhoneIncallVideoShareButtons );
+            }
+        else
+            {
+            SetTouchPaneButtons( EPhoneIncallButtons );
+            }
+        }
+    else
+        {
+        CPhoneState::HandlePropertyChangedL( aCategory, aKey, aValue );
+        }
+    }
+
 // End of File
--- a/phoneapp/phoneuicontrol/src/cphonestateincoming.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateincoming.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -54,7 +54,7 @@
 #include "cphonemediatorsender.h"
 #include "cphonereleasecommand.h"
 #include "mphonecustomization.h"
-#include "mphonestorage.h"
+#include "mphonesecuritymodeobserver.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -228,14 +228,6 @@
                 }
             break;
 
-        case EKeyDeviceF:
-                {
-                __PHONELOG( EBasic, EPhoneUIStates,
-                    "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL-deviceF" );
-                HandleHoldSwitchL();
-                }
-            break;
-            
         default:
             break;
         }
@@ -380,26 +372,9 @@
     // Stop tone playing, if necessary
     iViewCommandHandle->ExecuteCommandL( EPhoneViewStopRingTone );
     
-    if( IsVideoCall( aCallId ) && !IsAutoLockOn() )
-        {
-        // For keeping video call on top
-        TPhoneCmdParamBoolean booleanParam;
-        booleanParam.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL(
-            EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
-        }
     
     BeginTransEffectLC( ENumberEntryOpen );
 
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-         && iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        EnableCallUIL();
-        }
-    
-    // Reset blocked keys list
-    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-
     BeginUiUpdateLC();
     
     // Update single call
@@ -439,6 +414,11 @@
         {
         resourceId = EPhoneNumberAcqCBA;
         }
+    else if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+    	{
+		// Use 'answer & reject' softkeys if security mode is enabled.
+    	resourceId = EPhoneCallHandlingIncomingRejectCBA;
+    	}
     else if ( softRejectParam.Boolean() )
         {
         resourceId = EPhoneCallHandlingIncomingSoftRejectCBA;
@@ -458,16 +438,6 @@
     BeginTransEffectLC( ENumberEntryOpen );
     BeginUiUpdateLC();
 
-    // Enable call UI
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-        && iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        EnableCallUIL();
-        }
-
-    // Reset blocked keys list
-    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-    
     // Remove call
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
     // Close menu bar, if it is displayed
@@ -485,7 +455,7 @@
     
      if ( IsNumberEntryUsedL() )
         {
-        if ( NeedToSendToBackgroundL() )
+        if ( NeedToReturnToForegroundAppL() )
             {
             // Return phone to the background if send to background is needed.
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
@@ -501,7 +471,7 @@
             SetNumberEntryVisibilityL(ETrue);
             }
         }
-    else if ( NeedToSendToBackgroundL() ||
+    else if ( NeedToReturnToForegroundAppL() ||
         SoftRejectMessageEditorIsDisplayedL() )
         {
         // Continue displaying current app but set up the
@@ -873,33 +843,4 @@
         &callHeaderParam );
     }
 
-// ---------------------------------------------------------
-// CPhoneStateIncoming::HandleKeyLockEnabledL
-// ---------------------------------------------------------
-//
-EXPORT_C void CPhoneStateIncoming::HandleKeyLockEnabled( TBool aKeylockEnabled )
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIncoming::HandleKeyLockEnabledL( ) ");
-    if( !FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
-		&& CPhoneCenRepProxy::Instance()->
-			IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) )
-		{
-    	if( aKeylockEnabled )
-        	{
-	        // Keylock enabled
-            if( iStateMachine->PhoneStorage()->IsBlockedKeysListEmpty() )
-                {
-                // Disable HW Keys if needed
-                DisableHWKeysL();
-                }
-	        }
-	    else
-	        {
-	        // Keylock disabled
-            // Reset blocked keys list
-            iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-	        }
-		}
-    }
-
 // End of File
--- a/phoneapp/phoneuicontrol/src/cphonestatemachine.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestatemachine.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -29,8 +29,8 @@
 #include "cphonestateincall.h"
 #include "phonestatedefinitions.h"
 #include "phonelogger.h"
-#include "cphonestorage.h"
-#include "mphonestorage.h"
+#include "mphonesecuritymodeobserver.h"
+#include "mphonesecuritymessagehandler.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -57,34 +57,14 @@
     {
 	if( iState == iIdleState )
 		{
-		delete iState;
-		iState = NULL;
+		// Avoid deleting idle state instance twice.
+		// If state is idle, iState points to idle state instance.
 		iIdleState = NULL;			
 		}
-	else
-		{
-	    if( iState )
-		    {
-		    delete iState;
-		    iState = NULL;	    	
-		    }
-		if( iIdleState )
-			{
-		    delete iIdleState;
-		    iIdleState = NULL;			
-			}			
-		}
-	if( iPhoneEngine )
-		{
-	    delete iPhoneEngine;
-	    iPhoneEngine = NULL;			
-		}
-	if( iPhoneStorage )
-	    {
-	    delete iPhoneStorage;
-	    iPhoneStorage = NULL;
-	    }
-    }
+	delete iState;
+	delete iIdleState;
+	delete iPhoneEngine;
+	}
 
 // ---------------------------------------------------------
 // CPhoneStateMachine::SetPhoneEngine
@@ -183,19 +163,66 @@
     PhoneEngineInfo()->SetCallId( aCallId );
     }
 
+
 // -----------------------------------------------------------
-// CPhoneStateMachine::PhoneStorage
+// CPhoneStateMachine::SecurityMode
+// -----------------------------------------------------------
+//
+EXPORT_C MPhoneSecurityModeObserver* CPhoneStateMachine::SecurityMode()
+	{
+	return iSecurityModeObserver;
+	}
+	
+// -----------------------------------------------------------
+// CPhoneStateMachine::SetSecurityModeObserver
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateMachine::SetSecurityModeObserver( MPhoneSecurityModeObserver* aObserver )
+	{
+	iSecurityModeObserver = aObserver;
+	}
+
+// -----------------------------------------------------------
+// CPhoneStateMachine::SetSecurityMessageHandler
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateMachine::SetSecurityMessageHandler( MPhoneSecurityMessageHandler* aHandler )
+	{
+	iSecurityMessageHandler = aHandler;
+	}
+
+// -----------------------------------------------------------
+// CPhoneStateMachine::HandlePhoneEngineMessageL
 // -----------------------------------------------------------
 //
-EXPORT_C MPhoneStorage* CPhoneStateMachine::PhoneStorage()
-    {
-    if ( iPhoneStorage == NULL )
-        {
-        TInt err( KErrNone );
-        TRAP( err, iPhoneStorage = CPhoneStorage::NewL());
-        __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
-        }
-    return iPhoneStorage;
-    }
+EXPORT_C void CPhoneStateMachine::HandlePhoneEngineMessageL(const TInt aMessage, 
+     TInt aCallId )
+	{
+	// Forward engine messages to security mode state and current phone state
+	// instance.
+	if ( iSecurityMessageHandler )
+		{
+		iSecurityMessageHandler->HandlePhoneEngineMessageL( aMessage, aCallId );
+		}
+	
+	State()->HandlePhoneEngineMessageL( aMessage, aCallId );
+	}
 
+// -----------------------------------------------------------
+// CPhoneStateMachine::HandlePropertyChangedL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateMachine::HandlePropertyChangedL(const TUid& aCategory,
+     const TUint aKey,
+     const TInt aValue )
+	{
+	// Forward P&S key changes to security mode state and current phone state
+	// instance.
+	if ( iSecurityMessageHandler )
+		{
+		iSecurityMessageHandler->HandlePropertyChangedL( aCategory, aKey, aValue );
+		}
+	State()->HandlePropertyChangedL( aCategory, aKey, aValue );
+	}
+	
 // End of File
--- a/phoneapp/phoneuicontrol/src/cphonestatestartup.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestatestartup.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2005-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"
@@ -24,6 +24,7 @@
 #include "tphonecmdparamboolean.h"
 #include "phonelogger.h"
 #include "phonerssbase.h"
+#include "mphonesecuritymodeobserver.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -134,7 +135,7 @@
 // CPhoneStateStartup::HandlePEConstructionReadyL
 // -----------------------------------------------------------
 //
-void CPhoneStateStartup::HandlePEConstructionReadyL( TInt /*aCallId*/ )
+EXPORT_C void CPhoneStateStartup::HandlePEConstructionReadyL( TInt /*aCallId*/ )
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateStartup::HandlePEConstructionReadyL() ");
     // Indicate that phone engine construction is ready
@@ -143,25 +144,7 @@
     // Only go to the idle state if phone is also ready
     if ( iPhoneReady )
         {
-        // Security mode check. 
-	    TPhoneCmdParamBoolean isSecurityMode;      
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );        
-        if ( !isSecurityMode.Boolean() && !IsSimOk() )
-            {
-            TPhoneCmdParamBoolean securityMode;
-            securityMode.SetBoolean( ETrue );
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetSecurityMode, &securityMode );
-            iCreateNote = CIdle::NewL( CActive::EPriorityHigh );
-            
-            CreateAndShowNoteAfterIdle(); 
-            }
-        // Go to idle state
-        SetDefaultFlagsL();
-        iCbaManager->UpdateCbaL( EPhoneEmptyCBA );
-        
-        iViewCommandHandle->ExecuteCommand( EPhoneViewPrepareIcons );
-        
-        iStateMachine->ChangeState( EPhoneStateIdle );
+        InitializationReadyL();
         }
     }
 
@@ -232,26 +215,7 @@
     // Only go to idle state when Phone engine is also ready
     if ( iPEReady )
         {
-        // Security mode check.
-	    TPhoneCmdParamBoolean isSecurityMode;      
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-        if ( !isSecurityMode.Boolean() && !IsSimOk() )
-            {
-            TPhoneCmdParamBoolean securityMode;
-            securityMode.SetBoolean( ETrue );
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetSecurityMode, &securityMode );
-            iCreateNote = CIdle::NewL( CActive::EPriorityHigh );
-            
-            CreateAndShowNoteAfterIdle(); 
-            }
-        // Go to idle state
-        SetDefaultFlagsL();
-        iCbaManager->UpdateCbaL( EPhoneEmptyCBA );
-        
-        iViewCommandHandle->ExecuteCommand( EPhoneViewPrepareIcons );
-        iViewCommandHandle->ExecuteCommand( EPhoneViewLoadPlugins );
-        
-        iStateMachine->ChangeState( EPhoneStateIdle );
+        InitializationReadyL();
         }
     }
 
@@ -265,15 +229,9 @@
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateStartup::HandleIdleForegroundEventL( ) ");
     // Security mode check. 
-    TPhoneCmdParamBoolean isSecurityMode;      
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );        
-    if ( !isSecurityMode.Boolean() && !IsSimOk() )
+    if ( !iStateMachine->SecurityMode()->IsSecurityMode() && !IsSimOk() )
         {
-        TPhoneCmdParamBoolean securityMode;
-        securityMode.SetBoolean( ETrue );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetSecurityMode, &securityMode );
         iCreateNote = CIdle::NewL( CActive::EPriorityHigh );
-        
         CreateAndShowNoteAfterIdle(); 
         }
     }
@@ -310,4 +268,27 @@
     return KErrNone;
     }
 
+// -----------------------------------------------------------------------------
+// CPhoneStateStartup::InitializationReadyL
+//
+// -----------------------------------------------------------------------------
+//
+void CPhoneStateStartup::InitializationReadyL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateStartup::InitializationReady() ");
+	iStateMachine->SecurityMode()->Initialize();
+ if ( !IsSimOk() )
+        {
+        iCreateNote = CIdle::NewL( CActive::EPriorityHigh );
+        CreateAndShowNoteAfterIdle(); 
+        }
+    // Go to idle state
+    SetDefaultFlagsL();
+    iCbaManager->UpdateCbaL( EPhoneEmptyCBA );
+    iViewCommandHandle->ExecuteCommand( EPhoneViewPrepareIcons );
+    iViewCommandHandle->ExecuteCommand( EPhoneViewLoadPlugins );
+    iStateMachine->ChangeState( EPhoneStateIdle );   
+    }
+
+
 // End of File
--- a/phoneapp/phoneuicontrol/src/cphonesystemeventhandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonesystemeventhandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-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"
@@ -22,6 +22,9 @@
 #include <UikonInternalPSKeys.h>
 #include <startupdomainpskeys.h>
 #include <hwrmdomainpskeys.h>
+#include <oem/simlockuikeys.h>
+#include <featmgr.h>
+#include <coreapplicationuisdomainpskeys.h>
 
 #include "cphonesystemeventhandler.h"
 #include "mphonestate.h"
@@ -87,6 +90,13 @@
         KPSUidStartup,
         KStartupSimSecurityStatus,
         this );
+    
+    // Set up notifications for autolock state changes.
+    CPhonePubSubProxy::Instance()->NotifyChangeL(
+    	KPSUidCoreApplicationUIs,
+    	KCoreAppUIsAutolockStatus,
+    	this );
+    
 
     if ( CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported(
             KTelephonyLVFlagSwivelInDevice ))
@@ -97,6 +107,24 @@
             KHWRMGripStatus,
             this );
         }
+    
+    if ( FeatureManager::FeatureSupported( KFeatureIdFfSimlockUi ) )
+       {
+        //Set up notifications for Sim Lock Dialogs values.
+        CPhonePubSubProxy::Instance()->NotifyChangeL(
+            KSimLockProperty,
+            ESimLockActiveStatus,
+            this );
+       }
+
+    if ( FeatureManager::FeatureSupported( KFeatureIdFfEntryPointForVideoShare ) )
+        {
+        // Set up notifications for Video Share (un)availability
+        CPhonePubSubProxy::Instance()->NotifyChangeL(
+            KPSUidCoreApplicationUIs,
+            KCoreAppUIsVideoSharingIndicator,
+            this );
+        }
     }
 
 // ---------------------------------------------------------
@@ -175,15 +203,6 @@
     iStateMachine->State()->HandleIdleForegroundEventL();
     }
 
-// ---------------------------------------------------------
-// CPhoneSystemEventHandler::HandleKeyLockEnabled
-// ---------------------------------------------------------
-//
-void CPhoneSystemEventHandler::HandleKeyLockEnabled( TBool aKeylockEnabled )
-    {
-    iStateMachine->State()->HandleKeyLockEnabled( aKeylockEnabled );
-    }
-
 // -----------------------------------------------------------
 // CPhoneSystemEventHandler::HandleEnvironmentChangeL
 // -----------------------------------------------------------
@@ -211,7 +230,7 @@
     const TUint aKey,
     const TInt aValue )
     {
-    iStateMachine->State()->HandlePropertyChangedL( aCategory, aKey, aValue );
+    iStateMachine->HandlePropertyChangedL( aCategory, aKey, aValue );
     }
 
 // -----------------------------------------------------------
--- a/phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -19,6 +19,7 @@
 // INCLUDE FILES
 #include <featmgr.h>        // for FeatureManager
 #include <settingsinternalcrkeys.h>
+#include <phoneappcommands.hrh>
 
 #include "cphoneuicontroller.h"
 #include "pevirtualengine.h"
@@ -26,7 +27,6 @@
 #include "cphoneenginehandler.h"
 #include "cphonesystemeventhandler.h"
 #include "cphoneremotecontrolhandler.h"
-#include "mphoneviewcommandhandle.h"
 #include "phonestatedefinitions.h"
 #include "phonelogger.h"
 #include "phoneconstants.h"
@@ -35,6 +35,8 @@
 #include "cphonecenrepproxy.h"
 #include "cphonemediatorfactory.h"
 #include "tphonecmdparamnumberentryobserver.h"
+#include "cphonesecuritymodeobserver.h"
+#include "cphoneviewcontroller.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -53,12 +55,11 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------
 //
-void CPhoneUIController::ConstructL( 
-    MPhoneViewCommandHandle* aViewCommandHandle )
+void CPhoneUIController::ConstructL( CPhoneViewController& aViewController )
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUIController::ConstructL()");
     // Creates correct protocol DLL
-    CreateProtocolDllL( aViewCommandHandle );
+    CreateProtocolDllL( aViewController );
 
     // Reference the phone state machine
     iStateMachine = CPhoneStateHandle::Instance()->StateMachine();
@@ -71,7 +72,7 @@
     iRemoteControlHandler = CPhoneRemoteControlHandler::NewL( iStateMachine );
     // Create the key event forwarder
     iKeyEventForwarder = CPhoneKeyEventForwarder::NewL( 
-        CEikonEnv::Static()->EikAppUi()->ClientRect(), iStateMachine, aViewCommandHandle );
+        CEikonEnv::Static()->EikAppUi()->ClientRect(), iStateMachine, &aViewController );
 
     TInt leaveCode( 0 );
     TInt retry( 0 );
@@ -111,13 +112,22 @@
 
     // Store the phone engine information in the state machine
     iStateMachine->SetPhoneEngine( iPhoneEngine );
-
+	
+	// Set up security mode observer.
+	iSecurityModeObserver = CPhoneSecurityModeObserver::NewL();
+	iSecurityModeObserver->SetPhoneEngineInfo( iPhoneEngine->EngineInfo() );
+	iStateMachine->SetSecurityModeObserver( iSecurityModeObserver );
+	iStateMachine->SetSecurityMessageHandler( iSecurityModeObserver );
+	
     // Set Number Entry observer
     TPhoneCmdParamNumberEntryObserver cmdParamNumberEntryObserver;
     cmdParamNumberEntryObserver.SetObserver( TCallBack( HandlePhoneNumberEditorCallBack, this ) );
-    aViewCommandHandle->ExecuteCommand( EPhoneViewSetNumberEntryObserver, 
+    aViewController.ExecuteCommand( EPhoneViewSetNumberEntryObserver, 
                                             &cmdParamNumberEntryObserver);
     
+	// Set up controller to observe security mode state changes.
+    iStateMachine->SecurityMode()->RegisterStateObserver( aViewController );
+	
     // Go to the startup state
     iStateMachine->ChangeState( EPhoneStateStartup );
 
@@ -131,12 +141,10 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CPhoneUIController* CPhoneUIController::NewL( 
-    MPhoneViewCommandHandle* aViewCommandHandle )
+    CPhoneViewController& aViewCommandHandle )
     {
-	__ASSERT_DEBUG( aViewCommandHandle,
-		Panic( EPhoneCtrlParameterNotInitialized ) );
-    
-    CPhoneUIController* self = new( ELeave ) CPhoneUIController;
+
+    CPhoneUIController* self = new( ELeave ) CPhoneUIController();
     
     CleanupStack::PushL( self );
     self->ConstructL( aViewCommandHandle );
@@ -153,6 +161,7 @@
 EXPORT_C CPhoneUIController::~CPhoneUIController()
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUIController::~CPhoneUIController()");
+	delete iSecurityModeObserver;
 	delete iRemoteControlHandler;
 	delete iSystemEventHandler;
 	delete iEngineHandler;
@@ -325,7 +334,14 @@
 
 	// Send key up message to engine so that we wouldn't accidentally play
 	// any DTMF tone.
-    iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
+    
+    // DTMF tone is not ended if command is EPhoneDialerValidNumber or
+    // EPhoneDialerInvalidNumber. These commands result from
+    // user pressing numbers, and they must not interfere with tones.
+    if ( ! ( aCommand == EPhoneDialerValidNumber || aCommand == EPhoneDialerInvalidNumber ) )
+        {
+        iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
+        }
 
     return iStateMachine->State()->HandleCommandL( aCommand );
     }
@@ -340,22 +356,11 @@
     return iStateMachine->State()->ProcessCommandL( aCommand );
     }
 
-
-// ---------------------------------------------------------
-// CPhoneUIController::HandleKeyLockEnabled
-// ---------------------------------------------------------
-//
-EXPORT_C void CPhoneUIController::HandleKeyLockEnabled( TBool aKeylockEnabled )
-    {
-    iSystemEventHandler->HandleKeyLockEnabled( aKeylockEnabled );
-    }
-
 // ---------------------------------------------------------
 // CPhoneUIController::CreateProtocolDllL
 // ---------------------------------------------------------
 //
-void CPhoneUIController::CreateProtocolDllL( 
-	MPhoneViewCommandHandle* aViewCommandHandle )
+void CPhoneUIController::CreateProtocolDllL( CPhoneViewController& aViewController )
 	{
 	TBool voipSupported( EFalse );
 
@@ -374,14 +379,14 @@
     if( voipSupported )
 	    {
 	    iStateHandle = CPhoneStateHandle::CreateL(
-	        aViewCommandHandle,
+	        &aViewController,
 	        KVoIPExtension,
 	        KUidAppVoIPExtensionStates );				    	
 	    }
 	else
 		{
 	    iStateHandle = CPhoneStateHandle::CreateL(
-	        aViewCommandHandle,
+	        &aViewController,
 	        KGSMProtocol,
 	        KUidAppGSMStates );			
 		}		
--- a/phoneapp/phoneuistates/bwins/phoneuistatesu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/bwins/phoneuistatesu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -1,65 +1,73 @@
 EXPORTS
-	??1CPhoneResourceResolverGSM@@UAE@XZ @ 1 NONAME ; CPhoneResourceResolverGSM::~CPhoneResourceResolverGSM(void)
-	?HandleKeyMessageL@CPhoneSingleCall@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 2 NONAME ; void CPhoneSingleCall::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?ConstructL@CPhoneTwoSingles@@MAEXXZ @ 3 NONAME ; void CPhoneTwoSingles::ConstructL(void)
-	??0CPhoneCallSetup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 4 NONAME ; CPhoneCallSetup::CPhoneCallSetup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?NewPhoneUIStateMachineFactoryL@@YAPAVCPhoneUIStateMachineFactoryBase@@XZ @ 5 NONAME ; class CPhoneUIStateMachineFactoryBase * NewPhoneUIStateMachineFactoryL(void)
-	?SendGlobalErrorNoteL@CPhoneErrorMessagesHandler@@IAEXH@Z @ 6 NONAME ; void CPhoneErrorMessagesHandler::SendGlobalErrorNoteL(int)
-	?HandlePhoneEngineMessageL@CPhoneCallSetup@@UAEXHH@Z @ 7 NONAME ; void CPhoneCallSetup::HandlePhoneEngineMessageL(int, int)
-	?HandleKeyMessageL@CPhoneAlerting@@MAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 8 NONAME ; void CPhoneAlerting::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	?HandleCommandL@CPhoneAlerting@@MAEHH@Z @ 9 NONAME ; int CPhoneAlerting::HandleCommandL(int)
-	?HandleKeyMessageL@CPhoneTwoSingles@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 10 NONAME ; void CPhoneTwoSingles::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
-	??1CPhoneSingleCall@@UAE@XZ @ 11 NONAME ; CPhoneSingleCall::~CPhoneSingleCall(void)
-	??1CPhoneAlerting@@UAE@XZ @ 12 NONAME ; CPhoneAlerting::~CPhoneAlerting(void)
-	??0CPhoneIncoming@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 13 NONAME ; CPhoneIncoming::CPhoneIncoming(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?HandleConnectedL@CPhoneAlerting@@IAEXH@Z @ 14 NONAME ; void CPhoneAlerting::HandleConnectedL(int)
-	?ConstructL@CPhoneAlerting@@MAEXXZ @ 15 NONAME ; void CPhoneAlerting::ConstructL(void)
-	??0CPhoneSingleCall@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 16 NONAME ; CPhoneSingleCall::CPhoneSingleCall(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	??1CPhoneIncoming@@UAE@XZ @ 17 NONAME ; CPhoneIncoming::~CPhoneIncoming(void)
-	?HandleCommandL@CPhoneSingleCall@@UAEHH@Z @ 18 NONAME ; int CPhoneSingleCall::HandleCommandL(int)
-	?ConstructL@CPhoneIncoming@@MAEXXZ @ 19 NONAME ; void CPhoneIncoming::ConstructL(void)
-	?HandlePhoneEngineMessageL@CPhoneSingleCall@@UAEXHH@Z @ 20 NONAME ; void CPhoneSingleCall::HandlePhoneEngineMessageL(int, int)
-	??1CPhoneErrorMessagesHandler@@UAE@XZ @ 21 NONAME ; CPhoneErrorMessagesHandler::~CPhoneErrorMessagesHandler(void)
-	?ConstructL@CPhoneCallSetup@@MAEXXZ @ 22 NONAME ; void CPhoneCallSetup::ConstructL(void)
-	??0CPhoneErrorMessagesHandler@@IAE@PAVMPhoneViewCommandHandle@@PAVMPhoneStateMachine@@@Z @ 23 NONAME ; CPhoneErrorMessagesHandler::CPhoneErrorMessagesHandler(class MPhoneViewCommandHandle *, class MPhoneStateMachine *)
-	?HandleErrorL@CPhoneTwoSinglesAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 24 NONAME ; void CPhoneTwoSinglesAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
-	??1CPhoneTwoSingles@@UAE@XZ @ 25 NONAME ; CPhoneTwoSingles::~CPhoneTwoSingles(void)
-	?HandleDisconnectingL@CPhoneAlerting@@IAEXH@Z @ 26 NONAME ; void CPhoneAlerting::HandleDisconnectingL(int)
-	?HandleCommandL@CPhoneGsmInCall@@MAEHH@Z @ 27 NONAME ; int CPhoneGsmInCall::HandleCommandL(int)
-	?CreatePhoneEngineL@CPhoneStateMachineGSM@@UAEPAVMPEPhoneModel@@AAVMEngineMonitor@@@Z @ 28 NONAME ; class MPEPhoneModel * CPhoneStateMachineGSM::CreatePhoneEngineL(class MEngineMonitor &)
-	?ResolveResourceID@CPhoneResourceResolverGSM@@UBEHABH@Z @ 29 NONAME ; int CPhoneResourceResolverGSM::ResolveResourceID(int const &) const
-	?HandleErrorL@CPhoneIncoming@@UAEXABUTPEErrorInfo@@@Z @ 30 NONAME ; void CPhoneIncoming::HandleErrorL(struct TPEErrorInfo const &)
-	??0CPhoneIdle@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 31 NONAME ; CPhoneIdle::CPhoneIdle(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?ShowErrorSpecificNoteL@CPhoneErrorMessagesHandler@@UAEXABUTPEErrorInfo@@@Z @ 32 NONAME ; void CPhoneErrorMessagesHandler::ShowErrorSpecificNoteL(struct TPEErrorInfo const &)
-	??1CPhoneStateMachineGSM@@UAE@XZ @ 33 NONAME ; CPhoneStateMachineGSM::~CPhoneStateMachineGSM(void)
-	?OpenMenuBarL@CPhoneSingleCall@@MAEXXZ @ 34 NONAME ; void CPhoneSingleCall::OpenMenuBarL(void)
-	??0CPhoneStateMachineGSM@@IAE@PAVMPhoneViewCommandHandle@@@Z @ 35 NONAME ; CPhoneStateMachineGSM::CPhoneStateMachineGSM(class MPhoneViewCommandHandle *)
-	?SetDivertIndication@CPhoneGsmInCall@@MAEXH@Z @ 36 NONAME ; void CPhoneGsmInCall::SetDivertIndication(int)
-	?HandlePhoneEngineMessageL@CPhoneTwoSingles@@UAEXHH@Z @ 37 NONAME ; void CPhoneTwoSingles::HandlePhoneEngineMessageL(int, int)
-	?HandlePhoneEngineMessageL@CPhoneAlerting@@UAEXHH@Z @ 38 NONAME ; void CPhoneAlerting::HandlePhoneEngineMessageL(int, int)
-	?HandleRemConCommandL@CPhoneEmergency@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 39 NONAME ; int CPhoneEmergency::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
-	?ConstructL@CPhoneSingleCall@@MAEXXZ @ 40 NONAME ; void CPhoneSingleCall::ConstructL(void)
-	?HandlePhoneEngineMessageL@CPhoneIncoming@@UAEXHH@Z @ 41 NONAME ; void CPhoneIncoming::HandlePhoneEngineMessageL(int, int)
-	?State@CPhoneStateMachineGSM@@UAEPAVMPhoneState@@XZ @ 42 NONAME ; class MPhoneState * CPhoneStateMachineGSM::State(void)
-	?HandleErrorL@CPhoneIdle@@MAEXABUTPEErrorInfo@@@Z @ 43 NONAME ; void CPhoneIdle::HandleErrorL(struct TPEErrorInfo const &)
-	?HandleConnectingL@CPhoneCallSetup@@MAEXH@Z @ 44 NONAME ; void CPhoneCallSetup::HandleConnectingL(int)
-	?UpdateInCallCbaL@CPhoneTwoSingles@@MAEXXZ @ 45 NONAME ; void CPhoneTwoSingles::UpdateInCallCbaL(void)
-	?HandleErrorL@CPhoneSingleAndWaiting@@MAEXABUTPEErrorInfo@@@Z @ 46 NONAME ; void CPhoneSingleAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
-	??0CPhoneResourceResolverGSM@@IAE@XZ @ 47 NONAME ; CPhoneResourceResolverGSM::CPhoneResourceResolverGSM(void)
-	?ConstructL@CPhoneResourceResolverGSM@@IAEXXZ @ 48 NONAME ; void CPhoneResourceResolverGSM::ConstructL(void)
-	?HandlePhoneForegroundEventL@CPhoneGsmInCall@@MAEXXZ @ 49 NONAME ; void CPhoneGsmInCall::HandlePhoneForegroundEventL(void)
-	?HandlePhoneEngineMessageL@CPhoneIdle@@UAEXHH@Z @ 50 NONAME ; void CPhoneIdle::HandlePhoneEngineMessageL(int, int)
-	??1CPhoneIdle@@UAE@XZ @ 51 NONAME ; CPhoneIdle::~CPhoneIdle(void)
-	??1CPhoneCallSetup@@UAE@XZ @ 52 NONAME ; CPhoneCallSetup::~CPhoneCallSetup(void)
-	?ConstructL@CPhoneIdle@@MAEXXZ @ 53 NONAME ; void CPhoneIdle::ConstructL(void)
-	??0CPhoneAlerting@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 54 NONAME ; CPhoneAlerting::CPhoneAlerting(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?OpenMenuBarL@CPhoneAlerting@@MAEXXZ @ 55 NONAME ; void CPhoneAlerting::OpenMenuBarL(void)
-	?SendGlobalWarningNoteL@CPhoneErrorMessagesHandler@@IAEXH@Z @ 56 NONAME ; void CPhoneErrorMessagesHandler::SendGlobalWarningNoteL(int)
-	?SendGlobalInfoNoteL@CPhoneErrorMessagesHandler@@IAEXH@Z @ 57 NONAME ; void CPhoneErrorMessagesHandler::SendGlobalInfoNoteL(int)
-	?HandleNumberEntryClearedL@CPhoneTwoSingles@@MAEXXZ @ 58 NONAME ; void CPhoneTwoSingles::HandleNumberEntryClearedL(void)
-	?CheckIfShowCallTerminationNote@CPhoneAlerting@@MAEHXZ @ 59 NONAME ; int CPhoneAlerting::CheckIfShowCallTerminationNote(void)
-	?OpenMenuBarL@CPhoneTwoSingles@@MAEXXZ @ 60 NONAME ; void CPhoneTwoSingles::OpenMenuBarL(void)
-	??0CPhoneTwoSingles@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 61 NONAME ; CPhoneTwoSingles::CPhoneTwoSingles(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
-	?CallId@CPhoneSingleCall@@IBEHXZ @ 62 NONAME ; int CPhoneSingleCall::CallId(void) const
-	?HandleConnectedConferenceL@CPhoneTwoSingles@@MAEXH@Z @ 63 NONAME ; void CPhoneTwoSingles::HandleConnectedConferenceL(int)
+	?NewPhoneUIStateMachineFactoryL@@YAPAVCPhoneUIStateMachineFactoryBase@@XZ @ 1 NONAME ; class CPhoneUIStateMachineFactoryBase * NewPhoneUIStateMachineFactoryL(void)
+	?ConstructL@CPhoneTwoSingles@@MAEXXZ @ 2 NONAME ; void CPhoneTwoSingles::ConstructL(void)
+	?SendGlobalErrorNoteL@CPhoneErrorMessagesHandler@@IAEXH@Z @ 3 NONAME ; void CPhoneErrorMessagesHandler::SendGlobalErrorNoteL(int)
+	?HandleKeyMessageL@CPhoneAlerting@@MAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 4 NONAME ; void CPhoneAlerting::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	?HandleKeyMessageL@CPhoneTwoSingles@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 5 NONAME ; void CPhoneTwoSingles::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	??0CPhoneIncoming@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 6 NONAME ; CPhoneIncoming::CPhoneIncoming(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	??0CPhoneSingleCall@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 7 NONAME ; CPhoneSingleCall::CPhoneSingleCall(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?HandleCommandL@CPhoneSingleCall@@UAEHH@Z @ 8 NONAME ; int CPhoneSingleCall::HandleCommandL(int)
+	?ConstructL@CPhoneCallSetup@@MAEXXZ @ 9 NONAME ; void CPhoneCallSetup::ConstructL(void)
+	??0CPhoneErrorMessagesHandler@@IAE@PAVMPhoneViewCommandHandle@@PAVMPhoneStateMachine@@@Z @ 10 NONAME ; CPhoneErrorMessagesHandler::CPhoneErrorMessagesHandler(class MPhoneViewCommandHandle *, class MPhoneStateMachine *)
+	?HandlePhoneEngineMessageL@CPhoneStartupSimlockUi@@UAEXHH@Z @ 11 NONAME ; void CPhoneStartupSimlockUi::HandlePhoneEngineMessageL(int, int)
+	??1CPhoneTwoSingles@@UAE@XZ @ 12 NONAME ; CPhoneTwoSingles::~CPhoneTwoSingles(void)
+	?HandleDisconnectingL@CPhoneAlerting@@IAEXH@Z @ 13 NONAME ; void CPhoneAlerting::HandleDisconnectingL(int)
+	??0CPhoneIdle@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 14 NONAME ; CPhoneIdle::CPhoneIdle(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?ShowErrorSpecificNoteL@CPhoneErrorMessagesHandler@@UAEXABUTPEErrorInfo@@@Z @ 15 NONAME ; void CPhoneErrorMessagesHandler::ShowErrorSpecificNoteL(struct TPEErrorInfo const &)
+	?HandleErrorL@CPhoneConferenceAndSingleAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 16 NONAME ; void CPhoneConferenceAndSingleAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
+	??0CPhoneStateMachineGSM@@IAE@PAVMPhoneViewCommandHandle@@@Z @ 17 NONAME ; CPhoneStateMachineGSM::CPhoneStateMachineGSM(class MPhoneViewCommandHandle *)
+	?SetDivertIndication@CPhoneGsmInCall@@MAEXH@Z @ 18 NONAME ; void CPhoneGsmInCall::SetDivertIndication(int)
+	?HandlePhoneEngineMessageL@CPhoneAlerting@@UAEXHH@Z @ 19 NONAME ; void CPhoneAlerting::HandlePhoneEngineMessageL(int, int)
+	?ConstructL@CPhoneSingleCall@@MAEXXZ @ 20 NONAME ; void CPhoneSingleCall::ConstructL(void)
+	?HandlePhoneEngineMessageL@CPhoneIncoming@@UAEXHH@Z @ 21 NONAME ; void CPhoneIncoming::HandlePhoneEngineMessageL(int, int)
+	?State@CPhoneStateMachineGSM@@UAEPAVMPhoneState@@XZ @ 22 NONAME ; class MPhoneState * CPhoneStateMachineGSM::State(void)
+	?HandleErrorL@CPhoneIdle@@MAEXABUTPEErrorInfo@@@Z @ 23 NONAME ; void CPhoneIdle::HandleErrorL(struct TPEErrorInfo const &)
+	?HandleConnectingL@CPhoneCallSetup@@MAEXH@Z @ 24 NONAME ; void CPhoneCallSetup::HandleConnectingL(int)
+	?HandleErrorL@CPhoneSingleAndWaiting@@MAEXABUTPEErrorInfo@@@Z @ 25 NONAME ; void CPhoneSingleAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
+	??0CPhoneResourceResolverGSM@@IAE@XZ @ 26 NONAME ; CPhoneResourceResolverGSM::CPhoneResourceResolverGSM(void)
+	?ConstructL@CPhoneResourceResolverGSM@@IAEXXZ @ 27 NONAME ; void CPhoneResourceResolverGSM::ConstructL(void)
+	?HandlePhoneEngineMessageL@CPhoneIdle@@UAEXHH@Z @ 28 NONAME ; void CPhoneIdle::HandlePhoneEngineMessageL(int, int)
+	??1CPhoneIdle@@UAE@XZ @ 29 NONAME ; CPhoneIdle::~CPhoneIdle(void)
+	??1CPhoneCallSetup@@UAE@XZ @ 30 NONAME ; CPhoneCallSetup::~CPhoneCallSetup(void)
+	??0CPhoneAlerting@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 31 NONAME ; CPhoneAlerting::CPhoneAlerting(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?SendGlobalInfoNoteL@CPhoneErrorMessagesHandler@@IAEXH@Z @ 32 NONAME ; void CPhoneErrorMessagesHandler::SendGlobalInfoNoteL(int)
+	?HandleNumberEntryClearedL@CPhoneTwoSingles@@MAEXXZ @ 33 NONAME ; void CPhoneTwoSingles::HandleNumberEntryClearedL(void)
+	?CheckIfShowCallTerminationNote@CPhoneAlerting@@MAEHXZ @ 34 NONAME ; int CPhoneAlerting::CheckIfShowCallTerminationNote(void)
+	?OpenMenuBarL@CPhoneTwoSingles@@MAEXXZ @ 35 NONAME ; void CPhoneTwoSingles::OpenMenuBarL(void)
+	?CallId@CPhoneSingleCall@@IBEHXZ @ 36 NONAME ; int CPhoneSingleCall::CallId(void) const
+	??1CPhoneResourceResolverGSM@@UAE@XZ @ 37 NONAME ; CPhoneResourceResolverGSM::~CPhoneResourceResolverGSM(void)
+	?HandleKeyMessageL@CPhoneSingleCall@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 38 NONAME ; void CPhoneSingleCall::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode)
+	??0CPhoneCallSetup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 39 NONAME ; CPhoneCallSetup::CPhoneCallSetup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?HandlePhoneEngineMessageL@CPhoneCallSetup@@UAEXHH@Z @ 40 NONAME ; void CPhoneCallSetup::HandlePhoneEngineMessageL(int, int)
+	?HandleCommandL@CPhoneAlerting@@MAEHH@Z @ 41 NONAME ; int CPhoneAlerting::HandleCommandL(int)
+	?HandleErrorL@CPhoneSingleAndCallSetupAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 42 NONAME ; void CPhoneSingleAndCallSetupAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
+	??1CPhoneSingleCall@@UAE@XZ @ 43 NONAME ; CPhoneSingleCall::~CPhoneSingleCall(void)
+	??1CPhoneAlerting@@UAE@XZ @ 44 NONAME ; CPhoneAlerting::~CPhoneAlerting(void)
+	?HandleConnectedL@CPhoneAlerting@@IAEXH@Z @ 45 NONAME ; void CPhoneAlerting::HandleConnectedL(int)
+	?ConstructL@CPhoneAlerting@@MAEXXZ @ 46 NONAME ; void CPhoneAlerting::ConstructL(void)
+	?HandleErrorL@CPhoneCallSetupAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 47 NONAME ; void CPhoneCallSetupAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
+	??1CPhoneIncoming@@UAE@XZ @ 48 NONAME ; CPhoneIncoming::~CPhoneIncoming(void)
+	?HandlePhoneStartupL@CPhoneStartupSimlockUi@@EAEXXZ @ 49 NONAME ; void CPhoneStartupSimlockUi::HandlePhoneStartupL(void)
+	?ConstructL@CPhoneIncoming@@MAEXXZ @ 50 NONAME ; void CPhoneIncoming::ConstructL(void)
+	?HandleErrorL@CPhoneConferenceAndWaitingAndCallSetup@@UAEXABUTPEErrorInfo@@@Z @ 51 NONAME ; void CPhoneConferenceAndWaitingAndCallSetup::HandleErrorL(struct TPEErrorInfo const &)
+	?HandlePhoneEngineMessageL@CPhoneSingleCall@@UAEXHH@Z @ 52 NONAME ; void CPhoneSingleCall::HandlePhoneEngineMessageL(int, int)
+	??1CPhoneErrorMessagesHandler@@UAE@XZ @ 53 NONAME ; CPhoneErrorMessagesHandler::~CPhoneErrorMessagesHandler(void)
+	?HandleErrorL@CPhoneTwoSinglesAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 54 NONAME ; void CPhoneTwoSinglesAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
+	?CreatePhoneEngineL@CPhoneStateMachineGSM@@UAEPAVMPEPhoneModel@@AAVMEngineMonitor@@@Z @ 55 NONAME ; class MPEPhoneModel * CPhoneStateMachineGSM::CreatePhoneEngineL(class MEngineMonitor &)
+	?HandleCommandL@CPhoneGsmInCall@@MAEHH@Z @ 56 NONAME ; int CPhoneGsmInCall::HandleCommandL(int)
+	?ResolveResourceID@CPhoneResourceResolverGSM@@UBEHABH@Z @ 57 NONAME ; int CPhoneResourceResolverGSM::ResolveResourceID(int const &) const
+	?HandleErrorL@CPhoneIncoming@@UAEXABUTPEErrorInfo@@@Z @ 58 NONAME ; void CPhoneIncoming::HandleErrorL(struct TPEErrorInfo const &)
+	??1CPhoneStateMachineGSM@@UAE@XZ @ 59 NONAME ; CPhoneStateMachineGSM::~CPhoneStateMachineGSM(void)
+	?OpenMenuBarL@CPhoneSingleCall@@MAEXXZ @ 60 NONAME ; void CPhoneSingleCall::OpenMenuBarL(void)
+	?HandleErrorL@CPhoneConferenceAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 61 NONAME ; void CPhoneConferenceAndWaiting::HandleErrorL(struct TPEErrorInfo const &)
+	?HandlePhoneEngineMessageL@CPhoneTwoSingles@@UAEXHH@Z @ 62 NONAME ; void CPhoneTwoSingles::HandlePhoneEngineMessageL(int, int)
+	?HandleRemConCommandL@CPhoneEmergency@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 63 NONAME ; int CPhoneEmergency::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction)
+	?UpdateInCallCbaL@CPhoneTwoSingles@@MAEXXZ @ 64 NONAME ; void CPhoneTwoSingles::UpdateInCallCbaL(void)
+	?ConstructL@CPhoneIdle@@MAEXXZ @ 65 NONAME ; void CPhoneIdle::ConstructL(void)
+	?HandlePhoneForegroundEventL@CPhoneGsmInCall@@MAEXXZ @ 66 NONAME ; void CPhoneGsmInCall::HandlePhoneForegroundEventL(void)
+	?OpenMenuBarL@CPhoneAlerting@@MAEXXZ @ 67 NONAME ; void CPhoneAlerting::OpenMenuBarL(void)
+	?SendGlobalWarningNoteL@CPhoneErrorMessagesHandler@@IAEXH@Z @ 68 NONAME ; void CPhoneErrorMessagesHandler::SendGlobalWarningNoteL(int)
+	?HandleConnectedConferenceL@CPhoneTwoSingles@@MAEXH@Z @ 69 NONAME ; void CPhoneTwoSingles::HandleConnectedConferenceL(int)
+	??0CPhoneTwoSingles@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 70 NONAME ; CPhoneTwoSingles::CPhoneTwoSingles(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *)
+	?HandlePropertyChangedL@CPhoneStartupSimlockUi@@UAEXABVTUid@@IH@Z @ 71 NONAME ; void CPhoneStartupSimlockUi::HandlePropertyChangedL(class TUid const &, unsigned int, int)
 
--- a/phoneapp/phoneuistates/eabi/phoneuistatesu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/eabi/phoneuistatesu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -71,188 +71,206 @@
 	_ZN21CPhoneStateMachineGSMD1Ev @ 70 NONAME
 	_ZN21CPhoneStateMachineGSMD2Ev @ 71 NONAME
 	_ZN22CPhoneSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 72 NONAME
-	_ZN25CPhoneResourceResolverGSM10ConstructLEv @ 73 NONAME
-	_ZN25CPhoneResourceResolverGSMC1Ev @ 74 NONAME
-	_ZN25CPhoneResourceResolverGSMC2Ev @ 75 NONAME
-	_ZN25CPhoneResourceResolverGSMD0Ev @ 76 NONAME
-	_ZN25CPhoneResourceResolverGSMD1Ev @ 77 NONAME
-	_ZN25CPhoneResourceResolverGSMD2Ev @ 78 NONAME
-	_ZN26CPhoneErrorMessagesHandler19SendGlobalInfoNoteLEi @ 79 NONAME
-	_ZN26CPhoneErrorMessagesHandler20SendGlobalErrorNoteLEi @ 80 NONAME
-	_ZN26CPhoneErrorMessagesHandler22SendGlobalWarningNoteLEi @ 81 NONAME
-	_ZN26CPhoneErrorMessagesHandler22ShowErrorSpecificNoteLERK12TPEErrorInfo @ 82 NONAME
-	_ZN26CPhoneErrorMessagesHandlerC1EP23MPhoneViewCommandHandleP18MPhoneStateMachine @ 83 NONAME
-	_ZN26CPhoneErrorMessagesHandlerC2EP23MPhoneViewCommandHandleP18MPhoneStateMachine @ 84 NONAME
-	_ZN26CPhoneErrorMessagesHandlerD0Ev @ 85 NONAME
-	_ZN26CPhoneErrorMessagesHandlerD1Ev @ 86 NONAME
-	_ZN26CPhoneErrorMessagesHandlerD2Ev @ 87 NONAME
-	_ZN26CPhoneTwoSinglesAndWaiting12HandleErrorLERK12TPEErrorInfo @ 88 NONAME
-	_ZNK16CPhoneSingleCall6CallIdEv @ 89 NONAME
-	_ZNK25CPhoneResourceResolverGSM17ResolveResourceIDERKi @ 90 NONAME
-	_ZTI10CPhoneIdle @ 91 NONAME
-	_ZTI13CPhoneStartup @ 92 NONAME
-	_ZTI14CPhoneAlerting @ 93 NONAME
-	_ZTI14CPhoneIncoming @ 94 NONAME
-	_ZTI15CPhoneCallSetup @ 95 NONAME
-	_ZTI15CPhoneEmergency @ 96 NONAME
-	_ZTI15CPhoneGsmInCall @ 97 NONAME
-	_ZTI16CPhoneConference @ 98 NONAME
-	_ZTI16CPhoneSingleCall @ 99 NONAME
-	_ZTI16CPhoneTwoSingles @ 100 NONAME
-	_ZTI21CPhoneStateMachineGSM @ 101 NONAME
-	_ZTI22CPhoneSingleAndWaiting @ 102 NONAME
-	_ZTI23CPhoneSingleAndAlerting @ 103 NONAME
-	_ZTI24CPhoneSingleAndCallSetup @ 104 NONAME
-	_ZTI25CPhoneCallSetupAndWaiting @ 105 NONAME
-	_ZTI25CPhoneConferenceAndSingle @ 106 NONAME
-	_ZTI25CPhoneResourceResolverGSM @ 107 NONAME
-	_ZTI26CPhoneConferenceAndWaiting @ 108 NONAME
-	_ZTI26CPhoneErrorMessagesHandler @ 109 NONAME
-	_ZTI26CPhoneTwoSinglesAndWaiting @ 110 NONAME
-	_ZTI28CPhoneConferenceAndCallSetup @ 111 NONAME
-	_ZTI30CPhoneUIStateMachineFactoryGSM @ 112 NONAME
-	_ZTI31CPhoneGeneralGsmMessagesHandler @ 113 NONAME
-	_ZTI34CPhoneSingleAndCallSetupAndWaiting @ 114 NONAME
-	_ZTI35CPhoneConferenceAndSingleAndWaiting @ 115 NONAME
-	_ZTI38CPhoneConferenceAndWaitingAndCallSetup @ 116 NONAME
-	_ZTV10CPhoneIdle @ 117 NONAME
-	_ZTV13CPhoneStartup @ 118 NONAME
-	_ZTV14CPhoneAlerting @ 119 NONAME
-	_ZTV14CPhoneIncoming @ 120 NONAME
-	_ZTV15CPhoneCallSetup @ 121 NONAME
-	_ZTV15CPhoneEmergency @ 122 NONAME
-	_ZTV15CPhoneGsmInCall @ 123 NONAME
-	_ZTV16CPhoneConference @ 124 NONAME
-	_ZTV16CPhoneSingleCall @ 125 NONAME
-	_ZTV16CPhoneTwoSingles @ 126 NONAME
-	_ZTV21CPhoneStateMachineGSM @ 127 NONAME
-	_ZTV22CPhoneSingleAndWaiting @ 128 NONAME
-	_ZTV23CPhoneSingleAndAlerting @ 129 NONAME
-	_ZTV24CPhoneSingleAndCallSetup @ 130 NONAME
-	_ZTV25CPhoneCallSetupAndWaiting @ 131 NONAME
-	_ZTV25CPhoneConferenceAndSingle @ 132 NONAME
-	_ZTV25CPhoneResourceResolverGSM @ 133 NONAME
-	_ZTV26CPhoneConferenceAndWaiting @ 134 NONAME
-	_ZTV26CPhoneErrorMessagesHandler @ 135 NONAME
-	_ZTV26CPhoneTwoSinglesAndWaiting @ 136 NONAME
-	_ZTV28CPhoneConferenceAndCallSetup @ 137 NONAME
-	_ZTV30CPhoneUIStateMachineFactoryGSM @ 138 NONAME
-	_ZTV31CPhoneGeneralGsmMessagesHandler @ 139 NONAME
-	_ZTV34CPhoneSingleAndCallSetupAndWaiting @ 140 NONAME
-	_ZTV35CPhoneConferenceAndSingleAndWaiting @ 141 NONAME
-	_ZTV38CPhoneConferenceAndWaitingAndCallSetup @ 142 NONAME
-	_ZThn12_N10CPhoneIdleD0Ev @ 143 NONAME
-	_ZThn12_N10CPhoneIdleD1Ev @ 144 NONAME
-	_ZThn12_N14CPhoneAlertingD0Ev @ 145 NONAME
-	_ZThn12_N14CPhoneAlertingD1Ev @ 146 NONAME
-	_ZThn12_N14CPhoneIncomingD0Ev @ 147 NONAME
-	_ZThn12_N14CPhoneIncomingD1Ev @ 148 NONAME
-	_ZThn12_N15CPhoneCallSetupD0Ev @ 149 NONAME
-	_ZThn12_N15CPhoneCallSetupD1Ev @ 150 NONAME
-	_ZThn12_N15CPhoneGsmInCall27HandlePhoneForegroundEventLEv @ 151 NONAME
-	_ZThn12_N16CPhoneSingleCallD0Ev @ 152 NONAME
-	_ZThn12_N16CPhoneSingleCallD1Ev @ 153 NONAME
-	_ZThn12_N16CPhoneTwoSinglesD0Ev @ 154 NONAME
-	_ZThn12_N16CPhoneTwoSinglesD1Ev @ 155 NONAME
-	_ZThn16_N10CPhoneIdleD0Ev @ 156 NONAME
-	_ZThn16_N10CPhoneIdleD1Ev @ 157 NONAME
-	_ZThn16_N14CPhoneAlerting14HandleCommandLEi @ 158 NONAME
-	_ZThn16_N14CPhoneAlertingD0Ev @ 159 NONAME
-	_ZThn16_N14CPhoneAlertingD1Ev @ 160 NONAME
-	_ZThn16_N14CPhoneIncomingD0Ev @ 161 NONAME
-	_ZThn16_N14CPhoneIncomingD1Ev @ 162 NONAME
-	_ZThn16_N15CPhoneCallSetupD0Ev @ 163 NONAME
-	_ZThn16_N15CPhoneCallSetupD1Ev @ 164 NONAME
-	_ZThn16_N15CPhoneGsmInCall14HandleCommandLEi @ 165 NONAME
-	_ZThn16_N16CPhoneSingleCall14HandleCommandLEi @ 166 NONAME
-	_ZThn16_N16CPhoneSingleCallD0Ev @ 167 NONAME
-	_ZThn16_N16CPhoneSingleCallD1Ev @ 168 NONAME
-	_ZThn16_N16CPhoneTwoSinglesD0Ev @ 169 NONAME
-	_ZThn16_N16CPhoneTwoSinglesD1Ev @ 170 NONAME
-	_ZThn20_N10CPhoneIdleD0Ev @ 171 NONAME
-	_ZThn20_N10CPhoneIdleD1Ev @ 172 NONAME
-	_ZThn20_N14CPhoneAlertingD0Ev @ 173 NONAME
-	_ZThn20_N14CPhoneAlertingD1Ev @ 174 NONAME
-	_ZThn20_N14CPhoneIncomingD0Ev @ 175 NONAME
-	_ZThn20_N14CPhoneIncomingD1Ev @ 176 NONAME
-	_ZThn20_N15CPhoneCallSetupD0Ev @ 177 NONAME
-	_ZThn20_N15CPhoneCallSetupD1Ev @ 178 NONAME
-	_ZThn20_N15CPhoneEmergency20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 179 NONAME
-	_ZThn20_N16CPhoneSingleCallD0Ev @ 180 NONAME
-	_ZThn20_N16CPhoneSingleCallD1Ev @ 181 NONAME
-	_ZThn20_N16CPhoneTwoSinglesD0Ev @ 182 NONAME
-	_ZThn20_N16CPhoneTwoSinglesD1Ev @ 183 NONAME
-	_ZThn24_N10CPhoneIdleD0Ev @ 184 NONAME
-	_ZThn24_N10CPhoneIdleD1Ev @ 185 NONAME
-	_ZThn24_N14CPhoneAlertingD0Ev @ 186 NONAME
-	_ZThn24_N14CPhoneAlertingD1Ev @ 187 NONAME
-	_ZThn24_N14CPhoneIncomingD0Ev @ 188 NONAME
-	_ZThn24_N14CPhoneIncomingD1Ev @ 189 NONAME
-	_ZThn24_N15CPhoneCallSetupD0Ev @ 190 NONAME
-	_ZThn24_N15CPhoneCallSetupD1Ev @ 191 NONAME
-	_ZThn24_N15CPhoneGsmInCall19SetDivertIndicationEi @ 192 NONAME
-	_ZThn24_N16CPhoneSingleCallD0Ev @ 193 NONAME
-	_ZThn24_N16CPhoneSingleCallD1Ev @ 194 NONAME
-	_ZThn24_N16CPhoneTwoSinglesD0Ev @ 195 NONAME
-	_ZThn24_N16CPhoneTwoSinglesD1Ev @ 196 NONAME
-	_ZThn32_N16CPhoneTwoSingles25HandleNumberEntryClearedLEv @ 197 NONAME
-	_ZThn36_N10CPhoneIdleD0Ev @ 198 NONAME
-	_ZThn36_N10CPhoneIdleD1Ev @ 199 NONAME
-	_ZThn36_N14CPhoneAlertingD0Ev @ 200 NONAME
-	_ZThn36_N14CPhoneAlertingD1Ev @ 201 NONAME
-	_ZThn36_N14CPhoneIncomingD0Ev @ 202 NONAME
-	_ZThn36_N14CPhoneIncomingD1Ev @ 203 NONAME
-	_ZThn36_N15CPhoneCallSetupD0Ev @ 204 NONAME
-	_ZThn36_N15CPhoneCallSetupD1Ev @ 205 NONAME
-	_ZThn36_N16CPhoneSingleCallD0Ev @ 206 NONAME
-	_ZThn36_N16CPhoneSingleCallD1Ev @ 207 NONAME
-	_ZThn36_N16CPhoneTwoSinglesD0Ev @ 208 NONAME
-	_ZThn36_N16CPhoneTwoSinglesD1Ev @ 209 NONAME
-	_ZThn4_N10CPhoneIdle12HandleErrorLERK12TPEErrorInfo @ 210 NONAME
-	_ZThn4_N10CPhoneIdle25HandlePhoneEngineMessageLEii @ 211 NONAME
-	_ZThn4_N10CPhoneIdleD0Ev @ 212 NONAME
-	_ZThn4_N10CPhoneIdleD1Ev @ 213 NONAME
-	_ZThn4_N14CPhoneAlerting25HandlePhoneEngineMessageLEii @ 214 NONAME
-	_ZThn4_N14CPhoneAlertingD0Ev @ 215 NONAME
-	_ZThn4_N14CPhoneAlertingD1Ev @ 216 NONAME
-	_ZThn4_N14CPhoneIncoming12HandleErrorLERK12TPEErrorInfo @ 217 NONAME
-	_ZThn4_N14CPhoneIncoming25HandlePhoneEngineMessageLEii @ 218 NONAME
-	_ZThn4_N14CPhoneIncomingD0Ev @ 219 NONAME
-	_ZThn4_N14CPhoneIncomingD1Ev @ 220 NONAME
-	_ZThn4_N15CPhoneCallSetup25HandlePhoneEngineMessageLEii @ 221 NONAME
-	_ZThn4_N15CPhoneCallSetupD0Ev @ 222 NONAME
-	_ZThn4_N15CPhoneCallSetupD1Ev @ 223 NONAME
-	_ZThn4_N16CPhoneSingleCall25HandlePhoneEngineMessageLEii @ 224 NONAME
-	_ZThn4_N16CPhoneSingleCallD0Ev @ 225 NONAME
-	_ZThn4_N16CPhoneSingleCallD1Ev @ 226 NONAME
-	_ZThn4_N16CPhoneTwoSingles25HandlePhoneEngineMessageLEii @ 227 NONAME
-	_ZThn4_N16CPhoneTwoSinglesD0Ev @ 228 NONAME
-	_ZThn4_N16CPhoneTwoSinglesD1Ev @ 229 NONAME
-	_ZThn4_N21CPhoneStateMachineGSM18CreatePhoneEngineLER14MEngineMonitor @ 230 NONAME
-	_ZThn4_N21CPhoneStateMachineGSM5StateEv @ 231 NONAME
-	_ZThn4_N21CPhoneStateMachineGSMD0Ev @ 232 NONAME
-	_ZThn4_N21CPhoneStateMachineGSMD1Ev @ 233 NONAME
-	_ZThn4_N22CPhoneSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 234 NONAME
-	_ZThn4_N25CPhoneResourceResolverGSMD0Ev @ 235 NONAME
-	_ZThn4_N25CPhoneResourceResolverGSMD1Ev @ 236 NONAME
-	_ZThn4_N26CPhoneErrorMessagesHandler22ShowErrorSpecificNoteLERK12TPEErrorInfo @ 237 NONAME
-	_ZThn4_N26CPhoneErrorMessagesHandlerD0Ev @ 238 NONAME
-	_ZThn4_N26CPhoneErrorMessagesHandlerD1Ev @ 239 NONAME
-	_ZThn4_N26CPhoneTwoSinglesAndWaiting12HandleErrorLERK12TPEErrorInfo @ 240 NONAME
-	_ZThn4_NK25CPhoneResourceResolverGSM17ResolveResourceIDERKi @ 241 NONAME
-	_ZThn8_N10CPhoneIdleD0Ev @ 242 NONAME
-	_ZThn8_N10CPhoneIdleD1Ev @ 243 NONAME
-	_ZThn8_N14CPhoneAlerting17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 244 NONAME
-	_ZThn8_N14CPhoneAlertingD0Ev @ 245 NONAME
-	_ZThn8_N14CPhoneAlertingD1Ev @ 246 NONAME
-	_ZThn8_N14CPhoneIncomingD0Ev @ 247 NONAME
-	_ZThn8_N14CPhoneIncomingD1Ev @ 248 NONAME
-	_ZThn8_N15CPhoneCallSetupD0Ev @ 249 NONAME
-	_ZThn8_N15CPhoneCallSetupD1Ev @ 250 NONAME
-	_ZThn8_N16CPhoneSingleCall17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 251 NONAME
-	_ZThn8_N16CPhoneSingleCallD0Ev @ 252 NONAME
-	_ZThn8_N16CPhoneSingleCallD1Ev @ 253 NONAME
-	_ZThn8_N16CPhoneTwoSingles17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 254 NONAME
-	_ZThn8_N16CPhoneTwoSinglesD0Ev @ 255 NONAME
-	_ZThn8_N16CPhoneTwoSinglesD1Ev @ 256 NONAME
+	_ZN22CPhoneStartupSimlockUi19HandlePhoneStartupLEv @ 73 NONAME
+	_ZN22CPhoneStartupSimlockUi22HandlePropertyChangedLERK4TUidji @ 74 NONAME
+	_ZN22CPhoneStartupSimlockUi25HandlePhoneEngineMessageLEii @ 75 NONAME
+	_ZN25CPhoneCallSetupAndWaiting12HandleErrorLERK12TPEErrorInfo @ 76 NONAME
+	_ZN25CPhoneResourceResolverGSM10ConstructLEv @ 77 NONAME
+	_ZN25CPhoneResourceResolverGSMC1Ev @ 78 NONAME
+	_ZN25CPhoneResourceResolverGSMC2Ev @ 79 NONAME
+	_ZN25CPhoneResourceResolverGSMD0Ev @ 80 NONAME
+	_ZN25CPhoneResourceResolverGSMD1Ev @ 81 NONAME
+	_ZN25CPhoneResourceResolverGSMD2Ev @ 82 NONAME
+	_ZN26CPhoneConferenceAndWaiting12HandleErrorLERK12TPEErrorInfo @ 83 NONAME
+	_ZN26CPhoneErrorMessagesHandler19SendGlobalInfoNoteLEi @ 84 NONAME
+	_ZN26CPhoneErrorMessagesHandler20SendGlobalErrorNoteLEi @ 85 NONAME
+	_ZN26CPhoneErrorMessagesHandler22SendGlobalWarningNoteLEi @ 86 NONAME
+	_ZN26CPhoneErrorMessagesHandler22ShowErrorSpecificNoteLERK12TPEErrorInfo @ 87 NONAME
+	_ZN26CPhoneErrorMessagesHandlerC1EP23MPhoneViewCommandHandleP18MPhoneStateMachine @ 88 NONAME
+	_ZN26CPhoneErrorMessagesHandlerC2EP23MPhoneViewCommandHandleP18MPhoneStateMachine @ 89 NONAME
+	_ZN26CPhoneErrorMessagesHandlerD0Ev @ 90 NONAME
+	_ZN26CPhoneErrorMessagesHandlerD1Ev @ 91 NONAME
+	_ZN26CPhoneErrorMessagesHandlerD2Ev @ 92 NONAME
+	_ZN26CPhoneTwoSinglesAndWaiting12HandleErrorLERK12TPEErrorInfo @ 93 NONAME
+	_ZN34CPhoneSingleAndCallSetupAndWaiting12HandleErrorLERK12TPEErrorInfo @ 94 NONAME
+	_ZN35CPhoneConferenceAndSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 95 NONAME
+	_ZN38CPhoneConferenceAndWaitingAndCallSetup12HandleErrorLERK12TPEErrorInfo @ 96 NONAME
+	_ZNK16CPhoneSingleCall6CallIdEv @ 97 NONAME
+	_ZNK25CPhoneResourceResolverGSM17ResolveResourceIDERKi @ 98 NONAME
+	_ZTI10CPhoneIdle @ 99 NONAME
+	_ZTI13CPhoneStartup @ 100 NONAME
+	_ZTI14CPhoneAlerting @ 101 NONAME
+	_ZTI14CPhoneIncoming @ 102 NONAME
+	_ZTI15CPhoneCallSetup @ 103 NONAME
+	_ZTI15CPhoneEmergency @ 104 NONAME
+	_ZTI15CPhoneGsmInCall @ 105 NONAME
+	_ZTI16CPhoneConference @ 106 NONAME
+	_ZTI16CPhoneSingleCall @ 107 NONAME
+	_ZTI16CPhoneTwoSingles @ 108 NONAME
+	_ZTI21CPhoneStateMachineGSM @ 109 NONAME
+	_ZTI22CPhoneSingleAndWaiting @ 110 NONAME
+	_ZTI22CPhoneStartupSimlockUi @ 111 NONAME
+	_ZTI23CPhoneSingleAndAlerting @ 112 NONAME
+	_ZTI24CPhoneSingleAndCallSetup @ 113 NONAME
+	_ZTI25CPhoneCallSetupAndWaiting @ 114 NONAME
+	_ZTI25CPhoneConferenceAndSingle @ 115 NONAME
+	_ZTI25CPhoneResourceResolverGSM @ 116 NONAME
+	_ZTI26CPhoneConferenceAndWaiting @ 117 NONAME
+	_ZTI26CPhoneErrorMessagesHandler @ 118 NONAME
+	_ZTI26CPhoneTwoSinglesAndWaiting @ 119 NONAME
+	_ZTI28CPhoneConferenceAndCallSetup @ 120 NONAME
+	_ZTI30CPhoneUIStateMachineFactoryGSM @ 121 NONAME
+	_ZTI31CPhoneGeneralGsmMessagesHandler @ 122 NONAME
+	_ZTI34CPhoneSingleAndCallSetupAndWaiting @ 123 NONAME
+	_ZTI35CPhoneConferenceAndSingleAndWaiting @ 124 NONAME
+	_ZTI38CPhoneConferenceAndWaitingAndCallSetup @ 125 NONAME
+	_ZTV10CPhoneIdle @ 126 NONAME
+	_ZTV13CPhoneStartup @ 127 NONAME
+	_ZTV14CPhoneAlerting @ 128 NONAME
+	_ZTV14CPhoneIncoming @ 129 NONAME
+	_ZTV15CPhoneCallSetup @ 130 NONAME
+	_ZTV15CPhoneEmergency @ 131 NONAME
+	_ZTV15CPhoneGsmInCall @ 132 NONAME
+	_ZTV16CPhoneConference @ 133 NONAME
+	_ZTV16CPhoneSingleCall @ 134 NONAME
+	_ZTV16CPhoneTwoSingles @ 135 NONAME
+	_ZTV21CPhoneStateMachineGSM @ 136 NONAME
+	_ZTV22CPhoneSingleAndWaiting @ 137 NONAME
+	_ZTV22CPhoneStartupSimlockUi @ 138 NONAME
+	_ZTV23CPhoneSingleAndAlerting @ 139 NONAME
+	_ZTV24CPhoneSingleAndCallSetup @ 140 NONAME
+	_ZTV25CPhoneCallSetupAndWaiting @ 141 NONAME
+	_ZTV25CPhoneConferenceAndSingle @ 142 NONAME
+	_ZTV25CPhoneResourceResolverGSM @ 143 NONAME
+	_ZTV26CPhoneConferenceAndWaiting @ 144 NONAME
+	_ZTV26CPhoneErrorMessagesHandler @ 145 NONAME
+	_ZTV26CPhoneTwoSinglesAndWaiting @ 146 NONAME
+	_ZTV28CPhoneConferenceAndCallSetup @ 147 NONAME
+	_ZTV30CPhoneUIStateMachineFactoryGSM @ 148 NONAME
+	_ZTV31CPhoneGeneralGsmMessagesHandler @ 149 NONAME
+	_ZTV34CPhoneSingleAndCallSetupAndWaiting @ 150 NONAME
+	_ZTV35CPhoneConferenceAndSingleAndWaiting @ 151 NONAME
+	_ZTV38CPhoneConferenceAndWaitingAndCallSetup @ 152 NONAME
+	_ZThn12_N10CPhoneIdleD0Ev @ 153 NONAME
+	_ZThn12_N10CPhoneIdleD1Ev @ 154 NONAME
+	_ZThn12_N14CPhoneAlertingD0Ev @ 155 NONAME
+	_ZThn12_N14CPhoneAlertingD1Ev @ 156 NONAME
+	_ZThn12_N14CPhoneIncomingD0Ev @ 157 NONAME
+	_ZThn12_N14CPhoneIncomingD1Ev @ 158 NONAME
+	_ZThn12_N15CPhoneCallSetupD0Ev @ 159 NONAME
+	_ZThn12_N15CPhoneCallSetupD1Ev @ 160 NONAME
+	_ZThn12_N15CPhoneGsmInCall27HandlePhoneForegroundEventLEv @ 161 NONAME
+	_ZThn12_N16CPhoneSingleCallD0Ev @ 162 NONAME
+	_ZThn12_N16CPhoneSingleCallD1Ev @ 163 NONAME
+	_ZThn12_N16CPhoneTwoSinglesD0Ev @ 164 NONAME
+	_ZThn12_N16CPhoneTwoSinglesD1Ev @ 165 NONAME
+	_ZThn12_N22CPhoneStartupSimlockUi19HandlePhoneStartupLEv @ 166 NONAME
+	_ZThn12_N22CPhoneStartupSimlockUi22HandlePropertyChangedLERK4TUidji @ 167 NONAME
+	_ZThn16_N10CPhoneIdleD0Ev @ 168 NONAME
+	_ZThn16_N10CPhoneIdleD1Ev @ 169 NONAME
+	_ZThn16_N14CPhoneAlerting14HandleCommandLEi @ 170 NONAME
+	_ZThn16_N14CPhoneAlertingD0Ev @ 171 NONAME
+	_ZThn16_N14CPhoneAlertingD1Ev @ 172 NONAME
+	_ZThn16_N14CPhoneIncomingD0Ev @ 173 NONAME
+	_ZThn16_N14CPhoneIncomingD1Ev @ 174 NONAME
+	_ZThn16_N15CPhoneCallSetupD0Ev @ 175 NONAME
+	_ZThn16_N15CPhoneCallSetupD1Ev @ 176 NONAME
+	_ZThn16_N15CPhoneGsmInCall14HandleCommandLEi @ 177 NONAME
+	_ZThn16_N16CPhoneSingleCall14HandleCommandLEi @ 178 NONAME
+	_ZThn16_N16CPhoneSingleCallD0Ev @ 179 NONAME
+	_ZThn16_N16CPhoneSingleCallD1Ev @ 180 NONAME
+	_ZThn16_N16CPhoneTwoSinglesD0Ev @ 181 NONAME
+	_ZThn16_N16CPhoneTwoSinglesD1Ev @ 182 NONAME
+	_ZThn20_N10CPhoneIdleD0Ev @ 183 NONAME
+	_ZThn20_N10CPhoneIdleD1Ev @ 184 NONAME
+	_ZThn20_N14CPhoneAlertingD0Ev @ 185 NONAME
+	_ZThn20_N14CPhoneAlertingD1Ev @ 186 NONAME
+	_ZThn20_N14CPhoneIncomingD0Ev @ 187 NONAME
+	_ZThn20_N14CPhoneIncomingD1Ev @ 188 NONAME
+	_ZThn20_N15CPhoneCallSetupD0Ev @ 189 NONAME
+	_ZThn20_N15CPhoneCallSetupD1Ev @ 190 NONAME
+	_ZThn20_N15CPhoneEmergency20HandleRemConCommandLE25TRemConCoreApiOperationId26TRemConCoreApiButtonAction @ 191 NONAME
+	_ZThn20_N16CPhoneSingleCallD0Ev @ 192 NONAME
+	_ZThn20_N16CPhoneSingleCallD1Ev @ 193 NONAME
+	_ZThn20_N16CPhoneTwoSinglesD0Ev @ 194 NONAME
+	_ZThn20_N16CPhoneTwoSinglesD1Ev @ 195 NONAME
+	_ZThn24_N10CPhoneIdleD0Ev @ 196 NONAME
+	_ZThn24_N10CPhoneIdleD1Ev @ 197 NONAME
+	_ZThn24_N14CPhoneAlertingD0Ev @ 198 NONAME
+	_ZThn24_N14CPhoneAlertingD1Ev @ 199 NONAME
+	_ZThn24_N14CPhoneIncomingD0Ev @ 200 NONAME
+	_ZThn24_N14CPhoneIncomingD1Ev @ 201 NONAME
+	_ZThn24_N15CPhoneCallSetupD0Ev @ 202 NONAME
+	_ZThn24_N15CPhoneCallSetupD1Ev @ 203 NONAME
+	_ZThn24_N15CPhoneGsmInCall19SetDivertIndicationEi @ 204 NONAME
+	_ZThn24_N16CPhoneSingleCallD0Ev @ 205 NONAME
+	_ZThn24_N16CPhoneSingleCallD1Ev @ 206 NONAME
+	_ZThn24_N16CPhoneTwoSinglesD0Ev @ 207 NONAME
+	_ZThn24_N16CPhoneTwoSinglesD1Ev @ 208 NONAME
+	_ZThn28_N16CPhoneTwoSingles25HandleNumberEntryClearedLEv @ 209 NONAME
+	_ZThn32_N10CPhoneIdleD0Ev @ 210 NONAME
+	_ZThn32_N10CPhoneIdleD1Ev @ 211 NONAME
+	_ZThn32_N14CPhoneAlertingD0Ev @ 212 NONAME
+	_ZThn32_N14CPhoneAlertingD1Ev @ 213 NONAME
+	_ZThn32_N14CPhoneIncomingD0Ev @ 214 NONAME
+	_ZThn32_N14CPhoneIncomingD1Ev @ 215 NONAME
+	_ZThn32_N15CPhoneCallSetupD0Ev @ 216 NONAME
+	_ZThn32_N15CPhoneCallSetupD1Ev @ 217 NONAME
+	_ZThn32_N16CPhoneSingleCallD0Ev @ 218 NONAME
+	_ZThn32_N16CPhoneSingleCallD1Ev @ 219 NONAME
+	_ZThn32_N16CPhoneTwoSinglesD0Ev @ 220 NONAME
+	_ZThn32_N16CPhoneTwoSinglesD1Ev @ 221 NONAME
+	_ZThn4_N10CPhoneIdle12HandleErrorLERK12TPEErrorInfo @ 222 NONAME
+	_ZThn4_N10CPhoneIdle25HandlePhoneEngineMessageLEii @ 223 NONAME
+	_ZThn4_N10CPhoneIdleD0Ev @ 224 NONAME
+	_ZThn4_N10CPhoneIdleD1Ev @ 225 NONAME
+	_ZThn4_N14CPhoneAlerting25HandlePhoneEngineMessageLEii @ 226 NONAME
+	_ZThn4_N14CPhoneAlertingD0Ev @ 227 NONAME
+	_ZThn4_N14CPhoneAlertingD1Ev @ 228 NONAME
+	_ZThn4_N14CPhoneIncoming12HandleErrorLERK12TPEErrorInfo @ 229 NONAME
+	_ZThn4_N14CPhoneIncoming25HandlePhoneEngineMessageLEii @ 230 NONAME
+	_ZThn4_N14CPhoneIncomingD0Ev @ 231 NONAME
+	_ZThn4_N14CPhoneIncomingD1Ev @ 232 NONAME
+	_ZThn4_N15CPhoneCallSetup25HandlePhoneEngineMessageLEii @ 233 NONAME
+	_ZThn4_N15CPhoneCallSetupD0Ev @ 234 NONAME
+	_ZThn4_N15CPhoneCallSetupD1Ev @ 235 NONAME
+	_ZThn4_N16CPhoneSingleCall25HandlePhoneEngineMessageLEii @ 236 NONAME
+	_ZThn4_N16CPhoneSingleCallD0Ev @ 237 NONAME
+	_ZThn4_N16CPhoneSingleCallD1Ev @ 238 NONAME
+	_ZThn4_N16CPhoneTwoSingles25HandlePhoneEngineMessageLEii @ 239 NONAME
+	_ZThn4_N16CPhoneTwoSinglesD0Ev @ 240 NONAME
+	_ZThn4_N16CPhoneTwoSinglesD1Ev @ 241 NONAME
+	_ZThn4_N21CPhoneStateMachineGSM18CreatePhoneEngineLER14MEngineMonitor @ 242 NONAME
+	_ZThn4_N21CPhoneStateMachineGSM5StateEv @ 243 NONAME
+	_ZThn4_N21CPhoneStateMachineGSMD0Ev @ 244 NONAME
+	_ZThn4_N21CPhoneStateMachineGSMD1Ev @ 245 NONAME
+	_ZThn4_N22CPhoneSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 246 NONAME
+	_ZThn4_N22CPhoneStartupSimlockUi25HandlePhoneEngineMessageLEii @ 247 NONAME
+	_ZThn4_N25CPhoneCallSetupAndWaiting12HandleErrorLERK12TPEErrorInfo @ 248 NONAME
+	_ZThn4_N25CPhoneResourceResolverGSMD0Ev @ 249 NONAME
+	_ZThn4_N25CPhoneResourceResolverGSMD1Ev @ 250 NONAME
+	_ZThn4_N26CPhoneConferenceAndWaiting12HandleErrorLERK12TPEErrorInfo @ 251 NONAME
+	_ZThn4_N26CPhoneErrorMessagesHandler22ShowErrorSpecificNoteLERK12TPEErrorInfo @ 252 NONAME
+	_ZThn4_N26CPhoneErrorMessagesHandlerD0Ev @ 253 NONAME
+	_ZThn4_N26CPhoneErrorMessagesHandlerD1Ev @ 254 NONAME
+	_ZThn4_N26CPhoneTwoSinglesAndWaiting12HandleErrorLERK12TPEErrorInfo @ 255 NONAME
+	_ZThn4_N34CPhoneSingleAndCallSetupAndWaiting12HandleErrorLERK12TPEErrorInfo @ 256 NONAME
+	_ZThn4_N35CPhoneConferenceAndSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 257 NONAME
+	_ZThn4_N38CPhoneConferenceAndWaitingAndCallSetup12HandleErrorLERK12TPEErrorInfo @ 258 NONAME
+	_ZThn4_NK25CPhoneResourceResolverGSM17ResolveResourceIDERKi @ 259 NONAME
+	_ZThn8_N10CPhoneIdleD0Ev @ 260 NONAME
+	_ZThn8_N10CPhoneIdleD1Ev @ 261 NONAME
+	_ZThn8_N14CPhoneAlerting17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 262 NONAME
+	_ZThn8_N14CPhoneAlertingD0Ev @ 263 NONAME
+	_ZThn8_N14CPhoneAlertingD1Ev @ 264 NONAME
+	_ZThn8_N14CPhoneIncomingD0Ev @ 265 NONAME
+	_ZThn8_N14CPhoneIncomingD1Ev @ 266 NONAME
+	_ZThn8_N15CPhoneCallSetupD0Ev @ 267 NONAME
+	_ZThn8_N15CPhoneCallSetupD1Ev @ 268 NONAME
+	_ZThn8_N16CPhoneSingleCall17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 269 NONAME
+	_ZThn8_N16CPhoneSingleCallD0Ev @ 270 NONAME
+	_ZThn8_N16CPhoneSingleCallD1Ev @ 271 NONAME
+	_ZThn8_N16CPhoneTwoSingles17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 272 NONAME
+	_ZThn8_N16CPhoneTwoSinglesD0Ev @ 273 NONAME
+	_ZThn8_N16CPhoneTwoSinglesD1Ev @ 274 NONAME
 
--- a/phoneapp/phoneuistates/group/phoneuistates.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/group/phoneuistates.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 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"
@@ -62,7 +62,7 @@
 SOURCE          cphonetwosingles.cpp
 SOURCE          cphonetwosinglesandwaiting.cpp
 SOURCE          cphoneuistatemachinefactorygsm.cpp
-
+SOURCE          cphonestartupsimlockui.cpp 
 /* Languages */
 LANG SC
 
--- a/phoneapp/phoneuistates/inc/cphonecallsetupandwaiting.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphonecallsetupandwaiting.h	Fri Apr 23 14:59:43 2010 +0100
@@ -60,6 +60,14 @@
             const TInt aMessage, 
             TInt aCallId );       
         
+        /**
+        * HandleError
+        * Implements error handling framework
+        * @param aErrorInfo: the error info
+        */
+        IMPORT_C virtual void HandleErrorL( 
+            const TPEErrorInfo& aErrorInfo ); 
+
     protected:
 
         /**
--- a/phoneapp/phoneuistates/inc/cphoneconference.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneconference.h	Fri Apr 23 14:59:43 2010 +0100
@@ -121,6 +121,7 @@
 
         void UpdateConferenceSecurityStatusL( TInt aCallId );
 		
+        virtual void DisconnectCallL();
         
      private:
               
--- a/phoneapp/phoneuistates/inc/cphoneconferenceandsingle.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneconferenceandsingle.h	Fri Apr 23 14:59:43 2010 +0100
@@ -90,6 +90,7 @@
         
         virtual void HandleConferenceIdleL();
         
+        virtual void DisconnectCallL();
         
      private:
      
--- a/phoneapp/phoneuistates/inc/cphoneconferenceandsingleandwaiting.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneconferenceandsingleandwaiting.h	Fri Apr 23 14:59:43 2010 +0100
@@ -62,9 +62,13 @@
             TPhoneKeyEventMessages aMessage,
             TKeyCode aCode );
 
-        virtual void HandleKeyEventL( 
-            const TKeyEvent& aKeyEvent,
-            TEventCode aEventCode );
+        /**
+        * HandleError
+        * Implements error handling framework
+        * @param aErrorInfo: the error info
+        */
+        IMPORT_C virtual void HandleErrorL( 
+            const TPEErrorInfo& aErrorInfo ); 
         
     protected:
 
--- a/phoneapp/phoneuistates/inc/cphoneconferenceandwaiting.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneconferenceandwaiting.h	Fri Apr 23 14:59:43 2010 +0100
@@ -62,9 +62,13 @@
             TPhoneKeyEventMessages aMessage,
             TKeyCode aCode );
      
-        virtual void HandleKeyEventL(
-            const TKeyEvent& aKeyEvent,
-            TEventCode aEventCode );
+        /**
+        * HandleError
+        * Implements error handling framework
+        * @param aErrorInfo: the error info
+        */
+        IMPORT_C virtual void HandleErrorL( 
+            const TPEErrorInfo& aErrorInfo ); 
         
     protected:
 
--- a/phoneapp/phoneuistates/inc/cphoneconferenceandwaitingandcallsetup.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneconferenceandwaitingandcallsetup.h	Fri Apr 23 14:59:43 2010 +0100
@@ -64,6 +64,13 @@
             TPhoneKeyEventMessages aMessage,
             TKeyCode aCode );
      
+        /**
+        * HandleError
+        * Implements error handling framework
+        * @param aErrorInfo: the error info
+        */
+        IMPORT_C virtual void HandleErrorL( 
+            const TPEErrorInfo& aErrorInfo ); 
 
     protected:
 
--- a/phoneapp/phoneuistates/inc/cphoneemergency.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneemergency.h	Fri Apr 23 14:59:43 2010 +0100
@@ -195,11 +195,7 @@
        void HandlePhoneStartupL();
          
     private:
-        /**
-        * Is device lock on/off
-        */
-        TBool iDeviceLockOn;
-        
+ 
         /**
         * If true update emergency call wait note
         */
--- a/phoneapp/phoneuistates/inc/cphonesingleandcallsetupandwaiting.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphonesingleandcallsetupandwaiting.h	Fri Apr 23 14:59:43 2010 +0100
@@ -64,7 +64,14 @@
             TPhoneKeyEventMessages aMessage,
             TKeyCode aCode );
 
-            
+        /**
+        * HandleError
+        * Implements error handling framework
+        * @param aErrorInfo: the error info
+        */
+        IMPORT_C virtual void HandleErrorL( 
+            const TPEErrorInfo& aErrorInfo ); 
+
     protected:
 
         /**
--- a/phoneapp/phoneuistates/inc/cphonesingleandwaiting.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphonesingleandwaiting.h	Fri Apr 23 14:59:43 2010 +0100
@@ -96,10 +96,6 @@
             TPhoneKeyEventMessages aMessage,
             TKeyCode aCode );
 
-        virtual void HandleKeyEventL( 
-            const TKeyEvent& aKeyEvent,
-            TEventCode aEventCode );
-        
         /**
         * Opens menu bar.
         */    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuistates/inc/cphonestartupsimlockui.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     GSM-specific single call state implementation.
+*
+*/
+#ifndef CPHONESTARTUPSIMLOCKUI_H
+#define CPHONESTARTUPSIMLOCKUI_H
+
+// INCLUDES
+#include "cphonestatestartup.h"
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+/**
+ *  GSM-specific start up state implementation.
+ */
+class CPhoneStartupSimlockUi : public CPhoneStateStartup
+    {
+public:
+
+    /**
+     * Destructor.
+     */
+    virtual ~CPhoneStartupSimlockUi();
+
+    /**
+     * Creates the Start up state class
+     * @param aStateMachine: a state machine
+     * @param aViewCommandHandle: handle to the PhoneUIView
+     * @param aPEReady: true if Phone Engine already started
+     * @return an instance of class CPhoneEmergency
+     */
+    static CPhoneStartupSimlockUi* NewL( MPhoneStateMachine* aStateMachine,
+            MPhoneViewCommandHandle* aViewCommandHandle, TBool aPEReady );
+
+     /**
+     * A message handling function for Phone Engine messages
+     * @param aMessage Message from Phone Engine
+     * @param aCallId Call id the message concerns
+     */
+     IMPORT_C void HandlePhoneEngineMessageL(
+         const TInt aMessage, 
+         TInt aCallId );       
+
+
+    // From MPhonePubSubObserver
+    /**
+     * This function is called when there is property value change.
+     * @param aCategory Category of the property
+     * @param aKey Property key that is changed
+     * @param aValue New property value
+     */
+    IMPORT_C virtual void HandlePropertyChangedL( const TUid& aCategory,
+            const TUint aKey, const TInt aValue );       
+
+private:
+
+    /**
+     * By default EPOC constructor is private.
+     */
+    CPhoneStartupSimlockUi( MPhoneStateMachine* aStateMachine,
+            MPhoneViewCommandHandle* aViewCommandHandle, TBool aPEReady );
+
+    /**
+     * ConstructL()
+     */
+    void ConstructL();
+
+    /**
+     * SimLock Observer.
+     * Determines  if the SimLock mode should be entered
+     */
+    void EnterSimLockModeL();
+
+    /**
+     * SimLock Observer.
+     * Takes care of the SimLock Exit Scenario
+     */
+    void ExitSimLockModeL();
+
+    /**
+     * Handles startup of the phone application 
+     */
+    IMPORT_C virtual void HandlePhoneStartupL();
+
+
+private:
+       
+    //To check if Simlock is active
+    TBool iSimLockActive;
+    
+    // Ownded: idle object to create note.
+    CIdle* iCreateNote;
+
+    };
+
+#endif // CPHONESTARTUPSIMLOCK_H
+// End of File
--- a/phoneapp/phoneuistates/inc/cphonestatemachinegsm.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphonestatemachinegsm.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 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"
@@ -76,6 +76,10 @@
         // Phone customization
         MPhoneCustomization* iCustomization;
         
+    private:
+    	
+        TBool IsSimlockStartupStateCreated()const;
+        
  	private: // Data
  	
 		// Is emergency object instantiated - needed to prevent multiple instantiation
--- a/phoneapp/phoneuistates/inc/cphonetwosinglesandwaiting.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphonetwosinglesandwaiting.h	Fri Apr 23 14:59:43 2010 +0100
@@ -53,10 +53,6 @@
             TPhoneKeyEventMessages aMessage,
             TKeyCode aCode );
 
-        virtual void HandleKeyEventL( 
-            const TKeyEvent& aKeyEvent,
-            TEventCode aEventCode );
-        
         /**
         * A message handling function for Phone Engine messages
         * @param aMessage Message from Phone Engine
--- a/phoneapp/phoneuistates/src/cphonealerting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonealerting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -226,12 +226,7 @@
                 }
             }
             break;
-        case MEngineMonitor::EPEMessageColpNumberAvailable:
-            {
-            HandleColpNoteL( aCallId );
-            return;
-            }
-            break;            
+                   
         
         default:
             break;
@@ -248,11 +243,6 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates,
         "CPhoneAlerting::HandleConnectedL()");
-    // Keep Phone in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( EFalse );
-    iViewCommandHandle->ExecuteCommandL(
-        EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
 
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
--- a/phoneapp/phoneuistates/src/cphonecallsetup.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonecallsetup.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -31,6 +31,7 @@
 #include "cphonegeneralgsmmessageshandler.h"
 #include "cphonemediatorfactory.h"
 #include "cphonemediatorsender.h"
+#include "mphonesecuritymodeobserver.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -102,11 +103,20 @@
         case MEngineMonitor::EPEMessageConnecting:
             HandleConnectingL( aCallId );
             break;
+		
+		case MEngineMonitor::EPEMessageShowVersion:
+			{
+			if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+				{
+				// Do nothing if security mode is enabled.
+				return;
+				}
+			}
+		// Fall through
 
         // fall through.    
         case MEngineMonitor::EPEMessageIssuingSSRequest:
         case MEngineMonitor::EPEMessageCallBarred:
-        case MEngineMonitor::EPEMessageShowVersion:
         case MEngineMonitor::EPEMessageIssuedSSRequest:
         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
         case MEngineMonitor::EPEMessageIncCallIsForw:
--- a/phoneapp/phoneuistates/src/cphonecallsetupandwaiting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonecallsetupandwaiting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -121,6 +121,28 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneCallSetupAndWaiting::HandleErrorL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneCallSetupAndWaiting::HandleErrorL( 
+        const TPEErrorInfo& aErrorInfo )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneCallSetupAndWaiting::HandleErrorL()");
+    
+    if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
+        {
+        // Should not shown "No Answer" note
+        __PHONELOG1( EBasic, EPhoneUIStates,
+       "PhoneUIStates: CPhoneCallSetupAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ",
+            aErrorInfo.iErrorCode);
+        }
+    else
+        {
+        CPhoneState::HandleErrorL( aErrorInfo );
+        }
+    }
+
+// -----------------------------------------------------------
 // CPhoneCallSetupAndWaiting::OpenMenuBarL
 // -----------------------------------------------------------
 //
--- a/phoneapp/phoneuistates/src/cphoneconference.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconference.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -704,18 +704,31 @@
 
     if ( IsNumberEntryUsedL() )
         {
-        // Show the number entry if it exists
-        SetNumberEntryVisibilityL(ETrue);
+        if ( NeedToReturnToForegroundAppL() )
+            {
+            // Return phone to the background if menu application is needed to foreground.
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
+    
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
+    
+            // Set Number Entry CBA
+            iCbaManager->SetCbaL( EPhoneNumberAcqCBA );
+            }
+        else
+            {
+            // Show the number entry if it exists
+            SetNumberEntryVisibilityL(ETrue);
         
-        // Close dtmf dialer when call is disconnected.
-        if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
-            {            
-            CloseDTMFEditorL();
-            // Display idle screen and update CBAs
-            DisplayIdleScreenL();
-            }        
-        }
-    else if ( !TopAppIsDisplayedL() )
+            // Close dtmf dialer when call is disconnected.
+            if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
+                {            
+                CloseDTMFEditorL();
+                // Display idle screen and update CBAs
+                DisplayIdleScreenL();
+                }
+            }
+        }  
+    else if ( !TopAppIsDisplayedL() || NeedToReturnToForegroundAppL() )
         {
         // Close menu bar, if it is displayed
         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
@@ -752,11 +765,7 @@
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
  
-    if ( IsNumberEntryUsedL() )
-        {
-        // Show the number entry if it exists
-        SetNumberEntryVisibilityL(ETrue);
-        }
+
     SetTouchPaneButtons( EPhoneIncallButtons );    
   
     // Go to single state
@@ -775,11 +784,6 @@
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    if ( IsNumberEntryUsedL() )
-        {
-        // Show the number entry if it exists
-        SetNumberEntryVisibilityL(ETrue);
-        }
         
     SetTouchPaneButtons( EPhoneTwoSinglesButtons );        
     
@@ -924,6 +928,20 @@
         "CPhoneConference::HandleIncomingL()");
     
     BeginUiUpdateLC();
+    
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );    
+        }
+    
+    // Indicate that the menu application on foreground needs to be sent back to the foreground 
+    // after call is ended.
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( !TopAppIsDisplayedL() );
+    iViewCommandHandle->ExecuteCommandL( 
+        EPhoneViewSetNeedToReturnToForegroundAppStatus,
+        &booleanParam );
  
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
@@ -936,9 +954,6 @@
     // Close fast swap window if it's displayed
     CEikonEnv::Static()->DismissTaskList();
 
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-    
     SetTouchPaneButtons( EPhoneWaitingCallButtons );
     
     // Display incoming call
@@ -964,25 +979,15 @@
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    // Cannot delete active note, e.g. New call query, 
-    // but show waiting note with or without caller name
-    if ( IsAnyQueryActiveL() ||  
-        ( !aCommandParam.Boolean() && iOnScreenDialer ) )
-        {
-        CallWaitingNoteL( aCallId );        
-        }
-    else
-        {
-        // Remove any phone dialogs if they are displayed
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-        }
+    // Remove any phone dialogs if they are displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
 
     // Indicate that the Phone needs to be sent to the background if
     // an application other than the top application is in the foreground
     TPhoneCmdParamBoolean booleanParam;
     booleanParam.SetBoolean( !TopAppIsDisplayedL() );
     iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
+        EPhoneViewSetNeedToReturnToForegroundAppStatus,
         &booleanParam );
 
     // Bring Phone app in the foreground
@@ -1126,4 +1131,35 @@
         }
     }
 
+// -----------------------------------------------------------
+// CPhoneConference::DisconnectCallL
+// -----------------------------------------------------------
+//
+void CPhoneConference::DisconnectCallL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConference::DisconnectCallL( ) ");
+    // Fetch active call's id from view
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallState( EPEStateConnected );
+    iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+
+    if( callStateData.CallId() == KErrNotFound )
+        {
+        // No connected call, find the hold call
+        callStateData.SetCallState( EPEStateHeld );
+        iViewCommandHandle->HandleCommandL(
+            EPhoneViewGetCallIdByState, &callStateData );
+        }
+  
+    if( callStateData.CallId() > KErrNotFound  )
+        {
+        iStateMachine->SendPhoneEngineMessage(
+                      CPEPhoneModelIF::EPEMessageHangUpConference );  
+        }
+    else
+        {
+        CPhoneState::DisconnectCallL();
+        }
+    }
 // End of File
--- a/phoneapp/phoneuistates/src/cphoneconferenceandcallsetup.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandcallsetup.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -52,13 +52,15 @@
 //
 CPhoneConferenceAndCallSetup::~CPhoneConferenceAndCallSetup()
     {
-    // Reset flag
+    // Need to check iViewCommandHandle validity here to not
+    // trigger a high/can panic error in a Codescanner run.
+    // coverity[var_compare_op]
     if ( iViewCommandHandle )
         {
         TPhoneCmdParamBoolean dtmfSendFlag;
         dtmfSendFlag.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
-    	    &dtmfSendFlag );
+        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
+    	    &dtmfSendFlag ) );
         }
     }
 
@@ -131,12 +133,6 @@
             }
             break;
             
-        case MEngineMonitor::EPEMessageColpNumberAvailable:
-            {
-            HandleColpNoteL( aCallId );            
-            }
-            break;         
-            
         default:
             {
             CPhoneConference::HandlePhoneEngineMessageL( aMessage, 
@@ -299,13 +295,7 @@
     
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
-    
-    // Keep Phone in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( EFalse );
-    iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
-    
+ 
     BeginUiUpdateLC();
         
     // Show bubble
--- a/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -57,13 +57,15 @@
 //
 CPhoneConferenceAndSingle::~CPhoneConferenceAndSingle()
     {
-    // Reset flag 
+    // Need to check iViewCommandHandle validity here to not
+    // trigger a high/can panic error in a Codescanner run.
+    // coverity[var_compare_op]
     if ( iViewCommandHandle )
         {
         TPhoneCmdParamBoolean dtmfSendFlag;
         dtmfSendFlag.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
-    	    &dtmfSendFlag );     	
+        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
+    	    &dtmfSendFlag ) );     	
         }
     }
 
@@ -461,6 +463,12 @@
     
     BeginUiUpdateLC();  
     
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );    
+        }
+    
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
     
@@ -478,9 +486,6 @@
     // Set touch controls
     SetTouchPaneButtonDisabled( EPhoneCallComingCmdAnswer );
 
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-
     SetTouchPaneButtons( EPhoneWaitingCallButtons );
         
     // Display incoming call
@@ -653,4 +658,28 @@
     CleanupStack::PopAndDestroy( phoneNumber );
     }
 
+// -----------------------------------------------------------
+// CPhoneConferenceAndSingle::DisconnectCallL
+// -----------------------------------------------------------
+//
+void CPhoneConferenceAndSingle::DisconnectCallL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingle::DisconnectCallL( ) ");
+    // Fetch active call's id from view
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallState( EPEStateConnected );
+    iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+  
+    if( callStateData.CallId() > KErrNotFound  && callStateData.CallId() == KConferenceCallId )
+        {
+        iStateMachine->SendPhoneEngineMessage(
+                      CPEPhoneModelIF::EPEMessageHangUpConference );  
+        }
+    else
+        {
+        CPhoneState::DisconnectCallL();
+        }
+    }
+
 // End of File
--- a/phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -32,9 +32,6 @@
 #include "phonerssbase.h"
 #include "tphonecmdparamglobalnote.h"
 #include "phoneui.hrh"
-#include "mphonestorage.h"
-#include "cphonecenrepproxy.h"
-#include <TelephonyVariant.hrh>
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -57,13 +54,15 @@
 //
 CPhoneConferenceAndSingleAndWaiting::~CPhoneConferenceAndSingleAndWaiting()
     {
-    // Reset flag
+    // Need to check iViewCommandHandle validity here to not
+    // trigger a high/can panic error in a Codescanner run.
+    // coverity[var_compare_op]
     if ( iViewCommandHandle )
         {
         TPhoneCmdParamBoolean dtmfSendFlag;
         dtmfSendFlag.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
-    	&dtmfSendFlag );
+        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
+    	&dtmfSendFlag ) );
         }
     }
 
@@ -202,7 +201,7 @@
         
     // Effect is shown when dialer exist.
     TBool effectStarted ( EFalse );
-    if ( !NeedToSendToBackgroundL() )
+    if ( !NeedToReturnToForegroundAppL() )
         {
         BeginTransEffectLC( ENumberEntryOpen );
         effectStarted = ETrue; 
@@ -294,9 +293,6 @@
     SetTouchPaneButtons( EPhoneWaitingCallButtons ); 
     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
     
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-
     // Go to Conference And Waiting state
     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
     iStateMachine->ChangeState( EPhoneStateConferenceAndWaiting );
@@ -311,15 +307,6 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
 
-    if( /*FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-        */ 1 &&  iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        EnableCallUIL();
-        }
-    
-    // Reset blocked keys list
-    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-    
     if ( !IsNumberEntryUsedL() )
         {
         // Close menu bar, if number entry isnt open.
@@ -328,7 +315,7 @@
 
     if ( IsNumberEntryUsedL() )
         {
-        if ( NeedToSendToBackgroundL() )
+        if ( NeedToReturnToForegroundAppL() ) 
             {
             // Return phone to the background if send to background is needed.
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
@@ -346,9 +333,9 @@
     else
         {
         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
-        // If numberentry is not open just check NeedToSendToBackgroundL and 
+        // If numberentry is not open just check NeedToReturnToForegroundAppL and 
         // sendbackround if needed.
-        if ( NeedToSendToBackgroundL() )
+        if ( NeedToReturnToForegroundAppL() ) 
             {
             // Return phone to the background if send to background is needed.
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
@@ -421,18 +408,24 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneConferenceAndSingleAndWaiting::HandleKeyEventL
+// CPhoneConferenceAndSingleAndWaiting::HandleErrorL
 // -----------------------------------------------------------
 //
-void CPhoneConferenceAndSingleAndWaiting::HandleKeyEventL(
-    const TKeyEvent& aKeyEvent,
-    TEventCode aEventCode )
+EXPORT_C void CPhoneConferenceAndSingleAndWaiting::HandleErrorL( 
+        const TPEErrorInfo& aErrorInfo )
     {
-    if( EKeyDeviceF == aKeyEvent.iCode )
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleErrorL()");
+    
+    if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
         {
-        __PHONELOG( EBasic, EPhoneUIStates,
-            "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL-deviceF" );
-        HandleHoldSwitchL();
+        // Should not shown "No Answer" note
+        __PHONELOG1( EBasic, EPhoneUIStates,
+       "PhoneUIStates: CPhoneConferenceAndSingleAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ",
+            aErrorInfo.iErrorCode);
+        }
+    else
+        {
+        CPhoneState::HandleErrorL( aErrorInfo );
         }
     }
 
@@ -485,9 +478,6 @@
                 // Go to Incoming state
                 iCbaManager->UpdateIncomingCbaL( callStateData.CallId() );
 
-                // Check if HW Keys or Call UI should be disabled
-                CheckDisableHWKeysAndCallUIL();
-                
                 SetTouchPaneButtons( EPhoneIncomingCallButtons );
                 UpdateSilenceButtonDimming();
                 SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
@@ -510,9 +500,6 @@
             SetTouchPaneButtons( EPhoneWaitingCallButtons );        
             SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
 
-            // Check if HW Keys or Call UI should be disabled
-            CheckDisableHWKeysAndCallUIL();
-
             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );        
             }
             break;
@@ -521,9 +508,6 @@
             // Go to Two Singles And Waiting state
             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
 
-            // Check if HW Keys or Call UI should be disabled
-            CheckDisableHWKeysAndCallUIL();
-
             SetTouchPaneButtons( EPhoneWaitingCallButtons );        
             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
             }
--- a/phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -19,8 +19,6 @@
 // INCLUDES
 #include <StringLoader.h>
 #include <cpephonemodelif.h>
-#include <featmgr.h>
-#include <TelephonyVariant.hrh>
 #include "cphoneconferenceandwaiting.h"
 #include "mphonestatemachine.h"
 #include "phoneviewcommanddefinitions.h"
@@ -34,8 +32,6 @@
 #include "phonerssbase.h"
 #include "tphonecmdparamglobalnote.h"
 #include "phoneui.hrh"
-#include "cphonecenrepproxy.h"
-#include "mphonestorage.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -171,18 +167,24 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneConferenceAndWaiting::HandleKeyEventL
+// CPhoneConferenceAndWaiting::HandleErrorL
 // -----------------------------------------------------------
 //
-void CPhoneConferenceAndWaiting::HandleKeyEventL(
-    const TKeyEvent& aKeyEvent,
-    TEventCode aEventCode )
+EXPORT_C void CPhoneConferenceAndWaiting::HandleErrorL( 
+        const TPEErrorInfo& aErrorInfo )
     {
-    if( EKeyDeviceF == aKeyEvent.iCode )
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndWaiting::HandleErrorL()");
+    
+    if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
         {
-        __PHONELOG( EBasic, EPhoneUIStates,
-            "CPhoneConferenceAndWaiting::HandleKeyMessageL-deviceF" );
-        HandleHoldSwitchL();
+        // Should not shown "No Answer" note
+        __PHONELOG1( EBasic, EPhoneUIStates,
+       "PhoneUIStates: CPhoneConferenceAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ",
+            aErrorInfo.iErrorCode);
+        }
+    else
+        {
+        CPhoneState::HandleErrorL( aErrorInfo );
         }
     }
 
@@ -206,6 +208,13 @@
         resourceId = EPhoneConfCallParticipantsMenubar;    
         }        
     
+    TPhoneCmdParamBoolean booleanParam;
+    const TBool videoWaiting = IsVideoCallRingingL();
+    booleanParam.SetBoolean( videoWaiting );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndWaitingVideo,
+        &booleanParam );
+    
+    
     TPhoneCmdParamInteger integerParam;
     integerParam.SetInteger( 
                 CPhoneMainResourceResolver::Instance()->
@@ -257,18 +266,9 @@
     {
     __LOGMETHODSTARTEND(EPhoneUIStates, "CPhoneConferenceAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
     
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
-        && iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        EnableCallUIL();
-        }
-    
-    // Reset blocked keys list
-    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-    
     // Effect is shown when dialer exist.
     TBool effectStarted ( EFalse );
-    if ( !NeedToSendToBackgroundL() )
+    if ( !NeedToReturnToForegroundAppL() )
         {
         BeginTransEffectLC( ENumberEntryOpen );
         effectStarted = ETrue; 
@@ -292,31 +292,16 @@
     
     if ( IsNumberEntryUsedL() )
         {
-        if ( NeedToSendToBackgroundL() )
+        if ( NeedToReturnToForegroundAppL() )
             {
-            // Return phone to the background if send to background is needed.
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
-            
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
             
             UpdateCbaL( EPhoneCallHandlingInCallCBA );
             }
-        else
-            {
-            // Show the number entry if it exists.
-            SetNumberEntryVisibilityL(ETrue);
-            }
         }
     else
         {
         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
-        // If numberentry is not open just check NeedToSendToBackgroundL and 
-        // sendbackround if needed.
-        if ( NeedToSendToBackgroundL() )
-            {
-            // Return phone to the background if send to background is needed.
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
-            }
         }
     SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );
     SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
@@ -352,7 +337,7 @@
         {
         // Effect is shown when dialer exist.
         TBool effectStarted ( EFalse );
-        if ( !NeedToSendToBackgroundL() )
+        if ( !NeedToReturnToForegroundAppL() )
             {
             BeginTransEffectLC( ENumberEntryOpen );
             effectStarted = ETrue;
@@ -369,42 +354,28 @@
             
         if ( IsNumberEntryUsedL() )
             {
-            if ( NeedToSendToBackgroundL() )
+            if ( NeedToReturnToForegroundAppL() ) 
                 {
-                // Return phone to the background if send to background is needed.
+                // Return phone to the background if menu application is needed to foreground.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
  
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
                 
                 UpdateCbaL( EPhoneCallHandlingInCallCBA );
                 }
-            else
-                {
-                // Show the number entry if it exists.
-                SetNumberEntryVisibilityL(ETrue);
-                }
             }
         else
             {
             UpdateCbaL( EPhoneCallHandlingInCallCBA );
-            // If numberentry is not open just check NeedToSendToBackgroundL and 
+            // If numberentry is not open just check NeedToReturnToForegroundAppL and 
             // sendbackround if needed.
-            if ( NeedToSendToBackgroundL() )
+            if ( NeedToReturnToForegroundAppL() )
                 {
                 // Return phone to the background if send to background is needed.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
                 }
             }
         
-        if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-            && iStateMachine->PhoneStorage()->IsScreenLocked() )
-            {
-            EnableCallUIL();
-            }
-        
-        // Reset blocked keys list
-        iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-
         if ( iViewCommandHandle->HandleCommandL( EPhoneViewIsConferenceInExpandedMode ) 
                 == EPhoneViewResponseSuccess )
             {
@@ -490,9 +461,6 @@
                 SetNumberEntryVisibilityL(EFalse);   
                 }
             
-            // Check if HW Keys or Call UI should be disabled
-            CheckDisableHWKeysAndCallUIL();
-            
             SetTouchPaneButtons( EPhoneIncomingCallButtons );
             SetTouchPaneButtonEnabled( EPhoneCallComingCmdSilent );
             SetRingingTonePlaybackL( iRingingCallId );          
@@ -510,9 +478,6 @@
             // Go to waiting in single state
             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
             
-            // Check if HW Keys or Call UI should be disabled
-            CheckDisableHWKeysAndCallUIL();
-            
             SetTouchPaneButtons( EPhoneWaitingCallButtons );             
             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );
             break;
@@ -526,9 +491,6 @@
             // Go to two singles and waiting state
             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
             
-            // Check if HW Keys or Call UI should be disabled
-            CheckDisableHWKeysAndCallUIL();
-            
             SetTouchPaneButtons( EPhoneWaitingCallButtons );               
 
             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
--- a/phoneapp/phoneuistates/src/cphoneconferenceandwaitingandcallsetup.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandwaitingandcallsetup.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -54,13 +54,15 @@
 //
 CPhoneConferenceAndWaitingAndCallSetup::~CPhoneConferenceAndWaitingAndCallSetup()
     {
-    // Reset flag
+    // Need to check iViewCommandHandle validity here to not
+    // trigger a high/can panic error in a Codescanner run.
+    // coverity[var_compare_op]
     if ( iViewCommandHandle )
         {
         TPhoneCmdParamBoolean dtmfSendFlag;
         dtmfSendFlag.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
-            &dtmfSendFlag );        
+        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
+            &dtmfSendFlag ) );        
         }
     }
 
@@ -135,12 +137,6 @@
             HandleIdleL( aCallId );
             }
             break;
-            
-        case MEngineMonitor::EPEMessageColpNumberAvailable:
-            {
-            HandleColpNoteL( aCallId );            
-            }
-            break;         
 
         default:
             {
@@ -213,6 +209,28 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneConferenceAndWaitingAndCallSetup::HandleErrorL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneConferenceAndWaitingAndCallSetup::HandleErrorL( 
+        const TPEErrorInfo& aErrorInfo )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndWaitingAndCallSetup::HandleErrorL()");
+    
+    if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
+        {
+        // Should not shown "No Answer" note
+        __PHONELOG1( EBasic, EPhoneUIStates,
+       "PhoneUIStates: CPhoneConferenceAndWaitingAndCallSetup::HandleErrorL - aErrorInfo.iErrorCode =%d ",
+            aErrorInfo.iErrorCode);
+        }
+    else
+        {
+        CPhoneState::HandleErrorL( aErrorInfo );
+        }
+    }
+
+// -----------------------------------------------------------
 // CPhoneConferenceAndWaitingAndCallSetup::OpenMenuBarL
 // -----------------------------------------------------------
 //
--- a/phoneapp/phoneuistates/src/cphoneemergency.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneemergency.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -41,6 +41,7 @@
 #include "cphonepubsubproxy.h"
 #include "cphonekeys.h"
 #include "tphonecmdparamaudiooutput.h"
+#include "cphonesecuritymodeobserver.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -182,6 +183,13 @@
                     }
                  }
             break;
+            
+        case MEngineMonitor::EPEMessageColpNumberAvailable:
+            {
+            //Don't show COLP note during emergency call.
+            return;                    
+            }
+            break; 
 
         default:
             CPhoneGsmInCall::HandlePhoneEngineMessageL(
@@ -227,7 +235,7 @@
             }
         else
             {
-            if ( !TopAppIsDisplayedL() || iDeviceLockOn  )
+            if ( !TopAppIsDisplayedL() || iStateMachine->SecurityMode()->IsAutolockEnabled() )
                 {
                 // Continue displaying current app but set up the
                 // idle screen in the background
@@ -286,9 +294,7 @@
                 {
                 UpdateCbaL( EPhoneEmptyCBA );
 
-                TPhoneCmdParamBoolean securityMode;
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &securityMode );
-                if ( !securityMode.Boolean() )
+                if ( !iStateMachine->SecurityMode()->IsSecurityMode() )
                     {
                     // Setup idle as next active app.
                     SetupIdleScreenInBackgroundL();
@@ -328,8 +334,6 @@
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSetStatusPaneVisible, &visibleMode );
             }
 
-        iDeviceLockOn = IsAutoLockOn();
-
         // Close menu bar, if it is displayed
         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
@@ -348,7 +352,7 @@
         TPhoneCmdParamBoolean booleanParam;
         booleanParam.SetBoolean( !TopAppIsDisplayedL() );
         iViewCommandHandle->ExecuteCommandL(
-            EPhoneViewSetNeedToSendToBackgroundStatus,
+                EPhoneViewSetNeedToReturnToForegroundAppStatus,
             &booleanParam );
 
         // Bring Phone app in the foreground
@@ -407,18 +411,12 @@
             CaptureKeysDuringCallNotificationL( EFalse );
             }
         }
-    else if ( !iDeviceLockOn && SimState() == EPESimUsable )
+    else if ( !iStateMachine->SecurityMode()->IsAutolockEnabled() && SimState() == EPESimUsable )
         {
         // Stop capturing keys
         CaptureKeysDuringCallNotificationL( EFalse );
         }
 
-    // Keep Phone in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( EFalse );
-    iViewCommandHandle->ExecuteCommandL(
-        EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
-
     // Remove emergency connecting note
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote );
 
@@ -543,7 +541,9 @@
             resourceId = EPhoneInCallNumberAcqCBA;
             }
         }
-    else if ( iDeviceLockOn || SimState() != EPESimUsable || iStartupInterrupted )
+    else if ( iStateMachine->SecurityMode()->IsAutolockEnabled()
+    	|| SimState() != EPESimUsable
+    	|| iStartupInterrupted )
         {
         if ( TouchCallHandlingSupported() )
         	{
@@ -636,7 +636,8 @@
                 {
                 CPhoneGsmInCall::HandleKeyMessageL( aMessage, aCode ); 
                 }
-            else if ( !iDeviceLockOn && SimState() == EPESimUsable )   
+            else if ( !iStateMachine->SecurityMode()->IsAutolockEnabled()
+            	&& SimState() == EPESimUsable )   
                 {
                 // do base operation
                 CPhoneGsmInCall::HandleKeyMessageL( aMessage, aCode );
@@ -774,7 +775,8 @@
         }
     else
         {
-		 if ( iDeviceLockOn && CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) )
+		 if ( iStateMachine->SecurityMode()->IsAutolockEnabled()
+			&& CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) )
 			{
 			// Send the key event to the phone engine
 			SendKeyEventL( aKeyEvent, aEventCode );
--- a/phoneapp/phoneuistates/src/cphonegsmincall.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonegsmincall.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -35,6 +35,7 @@
 
 #include "tphonecmdparamcallstatedata.h"
 #include "tphonecmdparamcallheaderdata.h"
+#include "mphonesecuritymodeobserver.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -118,10 +119,20 @@
             CPhoneState::SendGlobalInfoNoteL( 
                 EPhoneInformationRemoteCreateConferenceNote );
             break;        
+			
+		case MEngineMonitor::EPEMessageShowVersion:
+			{
+			if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+				{
+				// Do nothing if security mode is enabled.
+				return;
+				}
+			}
+		// Fall through
+		
         case MEngineMonitor::EPEMessageIncCallIsForw:  // fall through
         case MEngineMonitor::EPEMessageIssuingSSRequest: // fall through
         case MEngineMonitor::EPEMessageCallBarred: // fall through
-        case MEngineMonitor::EPEMessageShowVersion: // fall through
         case MEngineMonitor::EPEMessageIssuedSSRequest: // fall through
         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
         case MEngineMonitor::EPEMessageIncCallForwToC: // fall through
@@ -139,9 +150,22 @@
 			
             // Needed also in non-touch, if call waiting request (*43#) 
             // is sent during active call at least.
-    	    UpdateCbaL( EPhoneCallHandlingInCallCBA );
+			if ( aMessage == MEngineMonitor::EPEMessageIncCallIsForw )
+				{
+				UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
+				}
+			else 
+				{
+				UpdateCbaL( EPhoneCallHandlingInCallCBA );
+				}						
 			}
 			break;
+			
+        case MEngineMonitor::EPEMessageColpNumberAvailable:
+            {
+            HandleColpNoteL( aCallId );                    
+            }
+            break; 
 
         default:
             CPhoneStateInCall::HandlePhoneEngineMessageL( 
--- a/phoneapp/phoneuistates/src/cphoneidle.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneidle.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -22,6 +22,8 @@
 #include "phonelogger.h"
 #include "cphonegeneralgsmmessageshandler.h"
 #include "tphonecmdparamboolean.h"
+#include "mphonesecuritymodeobserver.h"
+#include "mphonestatemachine.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -114,7 +116,6 @@
         		}
         case MEngineMonitor::EPEMessageIssuingSSRequest: // fall through
         case MEngineMonitor::EPEMessageCallBarred: // fall through
-        case MEngineMonitor::EPEMessageShowVersion: // fall through
         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
         case MEngineMonitor::EPEMessageIncCallIsForw: // fall through
         case MEngineMonitor::EPEMessageIncCallForwToC: // fall through
@@ -131,7 +132,22 @@
 			CleanupStack::PopAndDestroy( gsmMsgHandler );
 			}
 			break;
-
+		
+		case MEngineMonitor::EPEMessageShowVersion:
+			{
+			if ( !iStateMachine->SecurityMode()->IsSecurityMode() )
+				{
+				CPhoneGeneralGsmMessagesHandler* gsmMsgHandler =
+				CPhoneGeneralGsmMessagesHandler::NewL( *iStateMachine,
+													   *iViewCommandHandle,
+													   *this );
+				CleanupStack::PushL( gsmMsgHandler );
+				gsmMsgHandler->HandlePhoneEngineMessageL( aMessage, aCallId );
+				CleanupStack::PopAndDestroy( gsmMsgHandler );
+				}
+			}
+			break;
+		
         default:
             CPhoneStateIdle::HandlePhoneEngineMessageL( 
                 aMessage, aCallId );
--- a/phoneapp/phoneuistates/src/cphoneincoming.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneincoming.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -18,7 +18,6 @@
 
 // INCLUDES
 #include <featmgr.h>
-#include <telephonyvariant.hrh>
 #include "cphoneincoming.h"
 #include "phonerssbase.h"
 #include "phonelogger.h"
@@ -28,8 +27,7 @@
 #include "tphonecmdparamboolean.h"
 #include "phoneui.hrh"
 #include "mphonestatemachine.h"
-#include "mphonestorage.h"
-#include "cphonecenrepproxy.h"
+#include "mphonesecuritymodeobserver.h"
 #include "tphonecmdparamcallstatedata.h"
 
 // ================= MEMBER FUNCTIONS =======================
@@ -125,11 +123,20 @@
         case MEngineMonitor::EPEMessageRemoteResumed:
                 SendGlobalInfoNoteL( EPhoneInformationConnectedNote );
             break;
+		
+		case MEngineMonitor::EPEMessageShowVersion:
+			{
+			if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+				{
+				// Do nothing if security mode is enabled.
+				return;
+				}
+			}
+		// Fall through
 
         // fall through.
         case MEngineMonitor::EPEMessageIssuingSSRequest:
         case MEngineMonitor::EPEMessageCallBarred:
-        case MEngineMonitor::EPEMessageShowVersion:
         case MEngineMonitor::EPEMessageIssuedSSRequest:
         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
         case MEngineMonitor::EPEMessageIncCallIsForw:
@@ -194,6 +201,12 @@
     
     BeginUiUpdateLC();
     
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );    
+        }
+    
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
     
@@ -222,29 +235,6 @@
     // Display incoming call
     DisplayIncomingCallL( aCallId, dialerParam );
 
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-            && !CPhoneCenRepProxy::Instance()->
-            IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) 
-            && ( IsKeyLockOn() || IsAutoLockOn() ) )
-        {
-        DisableCallUIL();
-        }
-    else
-        {
-        // if keys have been locked, disable keylock without information note
-        if ( IsKeyLockOn() )
-            {
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote );
-            }
-        }
-    
-    if( CPhoneCenRepProxy::Instance()->
-            IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) 
-            && ( IsKeyLockOn() || IsAutoLockOn() ) )
-        {
-        DisableHWKeysL();
-        }
-    
     EndUiUpdate();
 
     if ( connectedCall > KErrNotFound )
@@ -269,17 +259,13 @@
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    // Cannot delete active note, e.g. New call query, 
-    // but show waiting note with or without caller name
-    if ( IsAnyQueryActiveL() || 
-        ( aCommandParam.Boolean() && iOnScreenDialer ) )
+    // Remove any phone dialogs if they are displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+
+    // if keys have been locked, disable keylock without information note
+    if ( IsKeyLockOn() )
         {
-        CallWaitingNoteL( aCallId );        
-        }
-    else
-        {
-        // Remove any phone dialogs if they are displayed
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote );
         }
     
     // Indicate that the Phone needs to be sent to the background if
@@ -287,7 +273,7 @@
     TPhoneCmdParamBoolean booleanParam;
     booleanParam.SetBoolean( !TopAppIsDisplayedL() );
     iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
+            EPhoneViewSetNeedToReturnToForegroundAppStatus,
         &booleanParam );
 
     // Bring Phone app in the foreground
--- a/phoneapp/phoneuistates/src/cphonesingleandalerting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonesingleandalerting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -111,13 +111,7 @@
             HandleIdleL( aCallId );
             }
             break;
-            
-        case MEngineMonitor::EPEMessageColpNumberAvailable:
-            {
-            HandleColpNoteL( aCallId );            
-            }
-            break;         
-            
+           
         default:
             {
             CPhoneAlerting::HandlePhoneEngineMessageL( aMessage, aCallId );
@@ -198,13 +192,7 @@
         EPhoneViewGetCallIdByState, &callStateData );
         
     if( callStateData.CallId() == aCallId )
-        {    
-        // Keep Phone in the foreground
-        TPhoneCmdParamBoolean booleanParam;
-        booleanParam.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL( 
-            EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
-        
+        {        
         // Close menu bar, if it is displayed
         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
--- a/phoneapp/phoneuistates/src/cphonesingleandcallsetupandwaiting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonesingleandcallsetupandwaiting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -221,12 +221,7 @@
             // Flow through to default branch.
             CaptureKeysDuringCallNotificationL( EFalse );
             }
-            
-        case MEngineMonitor::EPEMessageColpNumberAvailable:
-            {
-            HandleColpNoteL( aCallId );            
-            }
-            break;   
+           
         default:
             {
             CPhoneGsmInCall::HandlePhoneEngineMessageL( aMessage, aCallId );
@@ -273,6 +268,28 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneSingleAndCallSetupAndWaiting::HandleErrorL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneSingleAndCallSetupAndWaiting::HandleErrorL( 
+        const TPEErrorInfo& aErrorInfo )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleAndCallSetupAndWaiting::HandleErrorL()");
+    
+    if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
+        {
+        // Should not shown "No Answer" note
+        __PHONELOG1( EBasic, EPhoneUIStates,
+       "PhoneUIStates: CPhoneSingleAndCallSetupAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ",
+            aErrorInfo.iErrorCode);
+        }
+    else
+        {
+        CPhoneState::HandleErrorL( aErrorInfo );
+        }
+    }
+
+// -----------------------------------------------------------
 // CPhoneSingleAndCallSetupAndWaiting::OpenMenuBarL
 // -----------------------------------------------------------
 //
@@ -440,12 +457,7 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneSingleAndCallSetupAndWaiting::HandleConnectedL()");
-    // Keep Phone in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( EFalse );
-    iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
-    
+  
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
--- a/phoneapp/phoneuistates/src/cphonesingleandwaiting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonesingleandwaiting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -42,7 +42,6 @@
 #include "phonelogger.h"
 #include "cphonecenrepproxy.h"
 #include "cphonepubsubproxy.h"
-#include "mphonestorage.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -328,22 +327,6 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneSingleAndWaiting::HandleKeyEventL
-// -----------------------------------------------------------
-//
-void CPhoneSingleAndWaiting::HandleKeyEventL(
-    const TKeyEvent& aKeyEvent,
-    TEventCode aEventCode )
-    {
-    if( EKeyDeviceF == aKeyEvent.iCode )
-        {
-        __PHONELOG( EBasic, EPhoneUIStates,
-            "CPhoneSingleAndWaiting::HandleKeyMessageL-deviceF" );
-        HandleHoldSwitchL();
-        }
-    }
-
-// -----------------------------------------------------------
 // CPhoneSingleAndWaiting::HandleIdleL
 // -----------------------------------------------------------
 //
@@ -427,9 +410,6 @@
                 SetNumberEntryVisibilityL(EFalse);
                 }
 
-            // Check if HW Keys or Call UI should be disabled
-            CheckDisableHWKeysAndCallUIL();
-            
             SetTouchPaneButtons( EPhoneIncomingCallButtons );
             SetTouchPaneButtonEnabled( EPhoneCallComingCmdSilent );
             
@@ -452,7 +432,7 @@
         {
         // Effect is shown when dialer exist.
         TBool effectStarted ( EFalse );
-        if ( !NeedToSendToBackgroundL() )
+        if ( !NeedToReturnToForegroundAppL() )
             {
             BeginTransEffectLC( ENumberEntryOpen );
             effectStarted = ETrue;
@@ -466,7 +446,7 @@
         // Idle message came for waiting call
         if ( IsNumberEntryUsedL() )
             {
-            if ( NeedToSendToBackgroundL() )
+            if ( NeedToReturnToForegroundAppL() )
                 {
                 // Return phone to the background if send to background is needed.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
@@ -484,25 +464,15 @@
         else
             {
             UpdateCbaL( EPhoneCallHandlingInCallCBA );
-            // If numberentry is not open just check NeedToSendToBackgroundL and
+            // If numberentry is not open just check NeedToReturnToForegroundAppL and
             // sendbackround if needed.
-            if ( NeedToSendToBackgroundL() )
+            if ( NeedToReturnToForegroundAppL() )
                 {
                 // Return phone to the background if send to background is needed.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
                 }
             }
         
-        // Enable call UI
-        if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-            && iStateMachine->PhoneStorage()->IsScreenLocked() )
-            {
-            EnableCallUIL();
-            }
-
-        // Reset blocked keys list
-        iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-
         SetTouchPaneButtons( EPhoneIncallButtons );
         EndUiUpdate();
         if( effectStarted )
@@ -622,15 +592,12 @@
 
     // Effect is shown when dialer exist.
     TBool effectStarted ( EFalse );
-    if ( !NeedToSendToBackgroundL() )
+    if ( !NeedToReturnToForegroundAppL() )
         {
         BeginTransEffectLC( ENumberEntryOpen );
         effectStarted = ETrue;
         }
     
-    // Reset blocked keys list
-    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-    
     BeginUiUpdateLC();
 
     UpdateRemoteInfoDataL ( aCallId );
@@ -645,37 +612,6 @@
     holdFlag.SetBoolean( EFalse );
     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
 
-    if ( IsNumberEntryUsedL() )
-        {
-        if ( NeedToSendToBackgroundL() )
-            {
-            // Return phone to the background if send to background is needed.
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
-
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
-
-            UpdateCbaL( EPhoneCallHandlingInCallCBA );
-            }
-        else
-            {
-            // Show the number entry if it exists.
-            SetNumberEntryVisibilityL(ETrue);
-            }
-        }
-    else
-        {
-        // Set Two singles softkeys
-        UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
-
-        // If numberentry is not open just check NeedToSendToBackgroundL and
-        // sendbackround if needed.
-        if ( NeedToSendToBackgroundL() )
-            {
-            // Return phone to the background if send to background is needed.
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
-            }
-        }
-
     // Close dtmf dialer if exist.
     if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
         {
@@ -685,6 +621,18 @@
         {
         CloseCustomizedDialerL();
         }
+     
+    if ( IsNumberEntryUsedL() && NeedToReturnToForegroundAppL() )
+        {
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
+
+        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+        }
+    else
+        {
+        // Set Two singles softkeys
+        UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
+        }
 
     SetTouchPaneButtons( EPhoneTwoSinglesButtons );
     EndUiUpdate();
@@ -824,19 +772,6 @@
 void CPhoneSingleAndWaiting::HandleDisconnectingL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleAndWaiting::HandleDisconnectingL( ) ");
-    
-    if( ( iSingleCallId == aCallId ) && IsVideoCall( aCallId ) )
-        {
-        __PHONELOG( EBasic, EPhoneControl, 
-            "CPhoneSingleAndWaiting::HandleDisconnectingL EPhoneViewSetNeedToSendToBackgroundStatus" );
-        
-        // Keep phone on the foreground
-        TPhoneCmdParamBoolean booleanParam;
-        booleanParam.SetBoolean( EFalse );
-        iViewCommandHandle->ExecuteCommandL(
-            EPhoneViewSetNeedToSendToBackgroundStatus,
-            &booleanParam );
-        }
     }
 
 // End of File
--- a/phoneapp/phoneuistates/src/cphonesinglecall.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonesinglecall.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -27,7 +27,6 @@
 #include <connect/sbdefs.h>
 #include <videotelcontrolmediatorapi.h>
 #include <MediatorDomainUIDs.h>
-#include <TelephonyVariant.hrh>
 
 #include "cphonesinglecall.h"
 #include "tphonecmdparamstring.h"
@@ -47,8 +46,6 @@
 #include "cphonemediatorfactory.h"
 #include "cphonemediatorsender.h"
 #include "cphoneswitchtovideoorvoicecommand.h"
-#include "mphonestorage.h"
-#include "cphonecenrepproxy.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -499,6 +496,12 @@
     
     BeginUiUpdateLC();
     
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );    
+        }
+    
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
     
@@ -514,29 +517,6 @@
     // Display incoming call
     DisplayIncomingCallL( aCallId, dialerParam );
 
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-            && !CPhoneCenRepProxy::Instance()->
-            IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) 
-            && ( IsKeyLockOn() || IsAutoLockOn() ) )
-        {
-        DisableCallUIL();
-        }
-    else
-        {
-        // if keys have been locked, disable keylock without information note
-        if ( IsKeyLockOn() )
-            {
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote );
-            }
-        }
-    
-    if( CPhoneCenRepProxy::Instance()->
-            IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) 
-            && ( IsKeyLockOn() || IsAutoLockOn() ) )
-        {
-        DisableHWKeysL();
-        }
-    
     EndUiUpdate();
 
     // This query is required to dismiss
@@ -564,17 +544,13 @@
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    // Cannot delete active note, e.g. New call query, 
-    // but show waiting note with or without caller name
-    if ( IsAnyQueryActiveL() || 
-        ( !aCommandParam.Boolean() && iOnScreenDialer ) )
+    // Remove any phone dialogs if they are displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+
+    // if keys have been locked, disable keylock without information note
+    if ( IsKeyLockOn() )
         {
-        CallWaitingNoteL( aCallId );        
-        }
-    else
-        {
-        // Remove any phone dialogs if they are displayed
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote );
         }
     
     // Indicate that the Phone needs to be sent to the background if
@@ -582,7 +558,7 @@
     TPhoneCmdParamBoolean booleanParam;
     booleanParam.SetBoolean( !TopAppIsDisplayedL() );
     iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
+        EPhoneViewSetNeedToReturnToForegroundAppStatus,
         &booleanParam );
 
     // Bring Phone app in the foreground
--- a/phoneapp/phoneuistates/src/cphonestartup.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonestartup.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -20,6 +20,8 @@
 #include "cphonestartup.h"
 #include "phonerssbase.h"
 #include "phonelogger.h"
+#include "mphonestatemachine.h"
+#include "mphonesecuritymodeobserver.h"
 #include "cphonegeneralgsmmessageshandler.h"
 
 // ================= MEMBER FUNCTIONS =======================
@@ -100,10 +102,19 @@
             CPhoneState::SendGlobalInfoNoteL( 
                 EPhoneInformationConnectedNote );
             break;
+		
+		case MEngineMonitor::EPEMessageShowVersion:
+			{
+			if ( iStateMachine->SecurityMode()->IsSecurityMode() )
+				{
+				// Do nothing if security mode is enabled.
+				return;
+				}
+			}
+		// Fall through
 
         case MEngineMonitor::EPEMessageIssuingSSRequest: // fall through
         case MEngineMonitor::EPEMessageCallBarred: // fall through
-        case MEngineMonitor::EPEMessageShowVersion: // fall through
         case MEngineMonitor::EPEMessageIssuedSSRequest: // fall through
         case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
         case MEngineMonitor::EPEMessageIncCallIsForw: // fall through
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuistates/src/cphonestartupsimlockui.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Implementation of CPhoneStartup class.
+ *
+ */
+
+// INCLUDES
+#include "phonerssbase.h"
+#include "phonelogger.h"
+#include "cphonestartupsimlockui.h"
+#include "tphonecmdparamappinfo.h"
+#include "tphonecmdparamboolean.h"
+#include "phoneconstants.h"
+#include "cphonestatestartup.h"
+#include "phonestatedefinitions.h"
+#include "mphonestatemachine.h"
+#include "tphonecmdparamKeycapture.h"
+#include "tphonecmdparamboolean.h"
+#include "cphonepubsubproxy.h"
+#include "phoneconstants.h"
+#include <startupdomainpskeys.h>
+#include <oem/simlockuikeys.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+
+CPhoneStartupSimlockUi::CPhoneStartupSimlockUi(
+        MPhoneStateMachine* aStateMachine,
+        MPhoneViewCommandHandle* aViewCommandHandle, TBool aPEReady ) :
+CPhoneStateStartup( aStateMachine, aViewCommandHandle, NULL ), iSimLockActive (EFalse)
+    {
+    iPEReady = aPEReady;
+    }
+
+// -----------------------------------------------------------
+// CPhoneStartupSimlockUi::~CPhoneStartupSimlockUi()
+// Destructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+
+CPhoneStartupSimlockUi::~CPhoneStartupSimlockUi()
+    {
+    }
+
+// -----------------------------------------------------------
+// CPhoneStartupSimlockUi::ConstructL()
+// Constructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+void CPhoneStartupSimlockUi::ConstructL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneStartupSimlockUi::ConstructL()" );
+
+    CPhoneStateStartup::ConstructL();
+    iSimLockActive = ETrue;
+    EnterSimLockModeL();
+
+    }
+
+// -----------------------------------------------------------
+// CPhoneStartupSimlockUi::NewL()
+// Constructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+CPhoneStartupSimlockUi* CPhoneStartupSimlockUi::NewL(
+        MPhoneStateMachine* aStateMachine,
+        MPhoneViewCommandHandle* aViewCommandHandle, TBool aPEReady )
+
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneStartupSimlockUi::NewL()");
+    
+    CPhoneStartupSimlockUi* self = new (ELeave) CPhoneStartupSimlockUi(
+            aStateMachine, aViewCommandHandle, aPEReady );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateStartup::HandlePhoneEngineMessageL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStartupSimlockUi::HandlePhoneEngineMessageL( 
+    const TInt aMessage, 
+    TInt aCallId )
+    {
+    __LOGMETHODSTARTEND( EPhoneControl, "CPhoneStartupSimlockUi::HandlePhoneEngineMessageL() " );
+    switch ( aMessage )
+        {
+        case MEngineMonitor::EPEMessagePEConstructionReady:
+
+            // phone start is now possible
+            if ( !iSimLockActive )
+                {
+                CPhoneStateStartup::HandlePhoneEngineMessageL( aMessage, aCallId );
+                }
+            else
+                {
+                iPEReady = ETrue;
+                }
+            break;
+            
+        default:
+        	CPhoneStateStartup::HandlePhoneEngineMessageL( aMessage, aCallId );
+            break;
+        }
+    }
+
+// -----------------------------------------------------------
+// CPhoneStartupSimlockUi::HandlePhoneStartupL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStartupSimlockUi::HandlePhoneStartupL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStartupSimlockUi::HandlePhoneStartupL() ");
+
+    if( !iSimLockActive )
+        {
+        CPhoneStateStartup::HandlePhoneStartupL();
+        }
+    else
+        {
+        // set the flag in base class
+        iPhoneReady = ETrue;
+        }        
+    }
+
+// -----------------------------------------------------------
+// CPhoneStartupSimlockUi::HandlePropertyChangedL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStartupSimlockUi::HandlePropertyChangedL(
+        const TUid& aCategory, const TUint aKey, const TInt aValue )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates,"CPhoneStartupSimlockUi::HandlePropertyChangedL( ) " );
+
+    if ( aCategory == KSimLockProperty )
+        {
+        if ( aKey == ESimLockActiveStatus )
+            {
+            if ( aValue == KSimLockStatusDone )
+                {
+                // No longer in Sim Lock mode
+                ExitSimLockModeL();
+                }
+            }
+        }
+    else
+        {
+        CPhoneState::HandlePropertyChangedL( aCategory, aKey, aValue );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneStartupSimlockUi::EnterSimLockModeL
+// -----------------------------------------------------------------------------
+//
+void CPhoneStartupSimlockUi::EnterSimLockModeL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates,"CPhoneStartupSimlockUi::EnterSimLockModeL( ) " );
+
+    TPhoneCmdParamAppInfo appInfoParam;
+    appInfoParam.SetAppUid( KSimLockUIApplicationUid );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewActivateApp, &appInfoParam );
+
+    }
+// -----------------------------------------------------------------------------
+// CPhoneStartupSimlockUi::ExitSimLockModeL
+// -----------------------------------------------------------------------------
+//
+void CPhoneStartupSimlockUi::ExitSimLockModeL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates,"CPhoneStartupSimlockUi::ExitSimLockModeL( ) " );
+    iSimLockActive = EFalse;
+	
+	if ( iPhoneReady )
+		{
+		CPhoneStateStartup::HandlePhoneStartupL();
+    	}
+	else if ( iPEReady )
+		{
+		CPhoneStateStartup::HandlePEConstructionReadyL( 0 );
+		}
+
+	//if iPhoneReady or iPEReady is EFalse, we should just wait.
+    }
+
+// End of File
--- a/phoneapp/phoneuistates/src/cphonestatemachinegsm.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonestatemachinegsm.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 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"
@@ -40,8 +40,13 @@
 #include "cphoneemergency.h"
 #include "cphoneconferenceandwaitingandcallsetup.h"
 #include "cphoneidle.h"
+#include "cphonestartup.h"
 #include "cphoneincoming.h"
-#include "cphonestartup.h"
+#include "cphonestartupsimlockui.h"
+#include "cphonepubsubproxy.h"
+#include <startupdomainpskeys.h>
+#include "phoneconstants.h"
+#include <featmgr.h>
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -262,9 +267,20 @@
                 break;
 
             case EPhoneStateStartup:
-                TRAP( err, iState = 
-          			CPhoneStartup::NewL( this, iViewCommandHandle, 
-          			iOldStateId == EPhoneStateEmergency ) );
+            	
+                if( IsSimlockStartupStateCreated() )
+                    {
+                    TRAP( err, iState =
+                        CPhoneStartupSimlockUi::NewL( this, iViewCommandHandle,
+                            iOldStateId == EPhoneStateEmergency ) );
+                    }
+                else
+                    {
+                    TRAP( err, iState =
+                        CPhoneStartup::NewL( this, iViewCommandHandle,
+                            iOldStateId == EPhoneStateEmergency ) );
+                    }
+
                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
                 madeStateTransition = ETrue;
                 break;
@@ -284,6 +300,28 @@
     return iState;
     }
 
+
+// -----------------------------------------------------------
+// CPhoneStateMachineGSM::IsSimlockStartupStateCreated
+// -----------------------------------------------------------
+//
+TBool CPhoneStateMachineGSM::IsSimlockStartupStateCreated() const
+    {
+    if ( FeatureManager::FeatureSupported( KFeatureIdFfSimlockUi ) )
+        {
+        TInt securityStatus =
+                CPhonePubSubProxy::Instance()->Value(
+                        KPSUidStartup, KStartupSimSecurityStatus );
+        if ( securityStatus == ESimUnaccepted )
+            {
+            return ETrue;
+            }
+        }
+
+    return EFalse;
+    }
+
+
 // -----------------------------------------------------------
 // CPhoneStateMachineGSM::NewL()
 // Constructor
--- a/phoneapp/phoneuistates/src/cphonetwosingles.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonetwosingles.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -200,20 +200,12 @@
     switch( activeCallCount.Integer() )
         {
         case EOneActiveCall:
-            {   
-            if ( IsNumberEntryUsedL() )
-                {
-                // Show the number entry if it exists
-                SetNumberEntryVisibilityL(ETrue);
-                }
-            else
-                {
-                // Close menu bar if number entry is not open.
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+            {
+            // Close menu bar if number entry is not open.
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
                 
-                // Set incall CBAs
-                UpdateCbaL( EPhoneCallHandlingInCallCBA );                
-                }
+            // Set incall CBAs
+            UpdateCbaL( EPhoneCallHandlingInCallCBA );                
             
             TPhoneCmdParamCallStateData callStateData;  
             callStateData.SetCallState( EPEStateHeld );
@@ -399,6 +391,12 @@
     
     BeginUiUpdateLC();
     
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );    
+        }
+    
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
     
@@ -414,9 +412,6 @@
     // Set touch controls
     SetTouchPaneButtonDisabled( EPhoneCallComingCmdAnswer );
     
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-    
     SetTouchPaneButtons( EPhoneWaitingCallButtons );
 
     EndUiUpdate();
@@ -439,25 +434,15 @@
     // Close menu bar, if it is displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    // Cannot delete active note, e.g. New call query, 
-    // but show waiting note with or without caller name
-    if ( IsAnyQueryActiveL() ||  
-        ( !aCommandParam.Boolean() && iOnScreenDialer ) )
-        {
-        CallWaitingNoteL( aCallId );        
-        }
-    else
-        {
-        // Remove any phone dialogs if they are displayed
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-        }
+    // Remove any phone dialogs if they are displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
 
     // Indicate that the Phone needs to be sent to the background if
     // an application other than the top application is in the foreground
     TPhoneCmdParamBoolean booleanParam;
     booleanParam.SetBoolean( !TopAppIsDisplayedL() );
     iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
+        EPhoneViewSetNeedToReturnToForegroundAppStatus,
         &booleanParam );
 
     // Bring Phone app in the foreground
--- a/phoneapp/phoneuistates/src/cphonetwosinglesandwaiting.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonetwosinglesandwaiting.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 #include <pevirtualengine.h>
 #include <StringLoader.h>
 #include <mpeengineinfo.h>
-#include <FeatMgr.h>
+#include <featmgr.h>
 #include "cphonetwosinglesandwaiting.h"
 #include "tphonecmdparamboolean.h"
 #include "mphonestatemachine.h"
@@ -36,7 +36,6 @@
 #include "phonerssbase.h"
 #include "phonestatedefinitionsgsm.h"
 #include "phonelogger.h"
-#include "mphonestorage.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -136,22 +135,6 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneTwoSinglesAndWaiting::HandleKeyEventL
-// -----------------------------------------------------------
-//
-void CPhoneTwoSinglesAndWaiting::HandleKeyEventL(
-    const TKeyEvent& aKeyEvent,
-    TEventCode aEventCode )
-    {
-    if( EKeyDeviceF == aKeyEvent.iCode )
-        {
-        __PHONELOG( EBasic, EPhoneUIStates,
-            "CPhoneTwoSinglesAndWaiting::HandleKeyMessageL-deviceF" );
-        HandleHoldSwitchL();
-        }
-    }
-
-// -----------------------------------------------------------
 // CPhoneTwoSinglesAndWaiting::HandlePhoneEngineMessageL
 // -----------------------------------------------------------
 //
@@ -238,7 +221,7 @@
     // Effect is shown when dialer exist.
     
     TBool effectStarted ( EFalse );
-    if ( !NeedToSendToBackgroundL())
+    if ( !NeedToReturnToForegroundAppL() )
         {
         BeginTransEffectLC( ENumberEntryOpen );
         effectStarted = ETrue;   
@@ -282,9 +265,9 @@
     if ( IsNumberEntryUsedL() )
         {
         // Go to background if necessary
-        if ( NeedToSendToBackgroundL() )
+        if ( NeedToReturnToForegroundAppL() )
             {
-            // Return phone to the background if send to background is needed.
+            // Return phone to the background if menu application is needed to foreground.
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
 
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
@@ -302,24 +285,15 @@
         // Set Two singles softkeys
         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
 	    
-        // If numberentry is not open just check NeedToSendToBackgroundL and 
+        // If numberentry is not open just check NeedToReturnToForegroundAppL and 
         // sendbackround if needed.
-        if ( NeedToSendToBackgroundL() )
+        if ( NeedToReturnToForegroundAppL() )
             {
             // Return phone to the background if send to background is needed.
             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
             }
         }
 
-    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
-        && iStateMachine->PhoneStorage()->IsScreenLocked() )
-        {
-        EnableCallUIL();
-        }
-    
-    // Reset blocked keys list
-    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
-
     // Go to two singles state
     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
     SetTouchPaneButtons( EPhoneTwoSinglesButtons );
@@ -341,9 +315,6 @@
     // Set touch controls
     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
     
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-    
     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   
     iStateMachine->ChangeState( EPhoneStateWaitingInSingle );                             
@@ -386,9 +357,6 @@
     // Set touch controls
     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
 
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-    
     SetTouchPaneButtons( EPhoneWaitingCallButtons );
 
     iViewCommandHandle->ExecuteCommandL( EPhoneViewCreateConference, aCallId,
@@ -398,7 +366,8 @@
     TPhoneCmdParamBoolean booleanParam;
     booleanParam.SetBoolean( EFalse );
     iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
+         EPhoneViewSetNeedToReturnToForegroundAppStatus,
+         &booleanParam );
         
     EndUiUpdate();
     // Go to Conference And Waiting state
--- a/phoneapp/phoneuiutils/bwins/phoneuiutilsu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/bwins/phoneuiutilsu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -36,302 +36,293 @@
 	??1CPhoneMethodLogger@@UAE@XZ @ 35 NONAME ; CPhoneMethodLogger::~CPhoneMethodLogger(void)
 	?WaitForReady@TPhoneCmdParamGlobalNote@@QBEHXZ @ 36 NONAME ; int TPhoneCmdParamGlobalNote::WaitForReady(void) const
 	?MaskBitmap@TPhoneCmdParamBitmap@@QBEPAVCFbsBitmap@@XZ @ 37 NONAME ; class CFbsBitmap * TPhoneCmdParamBitmap::MaskBitmap(void) const
-	?IsScreenLocked@CPhoneStorage@@UAEHXZ @ 38 NONAME ; int CPhoneStorage::IsScreenLocked(void)
-	?SetText@TPhoneCmdParamGlobalNote@@QAEXABVTDesC16@@@Z @ 39 NONAME ; void TPhoneCmdParamGlobalNote::SetText(class TDesC16 const &)
-	?AddLibraryL@CPhoneLibraryContainer@@QAEXABVRLibrary@@@Z @ 40 NONAME ; void CPhoneLibraryContainer::AddLibraryL(class RLibrary const &)
-	??1CPhoneResourceResolverBase@@UAE@XZ @ 41 NONAME ; CPhoneResourceResolverBase::~CPhoneResourceResolverBase(void)
-	?ResetBlockedKeysList@CPhoneStorage@@UAEXXZ @ 42 NONAME ; void CPhoneStorage::ResetBlockedKeysList(void)
-	?SetInt@CPhoneCenRepProxy@@QAEHABVTUid@@IH@Z @ 43 NONAME ; int CPhoneCenRepProxy::SetInt(class TUid const &, unsigned int, int)
-	?GetCustomCommandForTimeOut@TPhoneCmdParamQuery@@QBEHAAH@Z @ 44 NONAME ; int TPhoneCmdParamQuery::GetCustomCommandForTimeOut(int &) const
-	?ParamId@TPhoneCommandParam@@QBE?AW4TPhoneParamId@1@XZ @ 45 NONAME ; enum TPhoneCommandParam::TPhoneParamId TPhoneCommandParam::ParamId(void) const
-	?SetString@CPhoneCenRepProxy@@QAEHABVTUid@@IABVTDesC16@@@Z @ 46 NONAME ; int CPhoneCenRepProxy::SetString(class TUid const &, unsigned int, class TDesC16 const &)
-	?Line2@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 47 NONAME ; int TPhoneCmdParamCallHeaderData::Line2(void) const
-	??1CPhoneTimer@@UAE@XZ @ 48 NONAME ; CPhoneTimer::~CPhoneTimer(void)
-	?LogMsgFromPEToPhoneUIEnd@CPhoneLogger@@QAEXH@Z @ 49 NONAME ; void CPhoneLogger::LogMsgFromPEToPhoneUIEnd(int)
-	?DialerController@TPhoneCmdParamCustomDialer@@QAEPAVMPhoneDialerController@@XZ @ 50 NONAME ; class MPhoneDialerController * TPhoneCmdParamCustomDialer::DialerController(void)
-	?Type@TPhoneCmdParamGlobalNote@@QBE?AW4TAknGlobalNoteType@@XZ @ 51 NONAME ; enum TAknGlobalNoteType TPhoneCmdParamGlobalNote::Type(void) const
-	?SetMultipleInstances@TPhoneCmdParamAppInfo@@QAEXH@Z @ 52 NONAME ; void TPhoneCmdParamAppInfo::SetMultipleInstances(int)
-	?Tone@TPhoneCmdParamGlobalNote@@QBEHXZ @ 53 NONAME ; int TPhoneCmdParamGlobalNote::Tone(void) const
-	?ChangePropertyValue@CPhonePubSubProxy@@QAEXABVTUid@@IH@Z @ 54 NONAME ; void CPhonePubSubProxy::ChangePropertyValue(class TUid const &, unsigned int, int)
-	?SetThumbnail@TPhoneCmdParamCallHeaderData@@QAEXPAVCFbsBitmap@@@Z @ 55 NONAME ; void TPhoneCmdParamCallHeaderData::SetThumbnail(class CFbsBitmap *)
-	?SetCbaCommandMapping@TPhoneCmdParamQuery@@QAEXHH@Z @ 56 NONAME ; void TPhoneCmdParamQuery::SetCbaCommandMapping(int, int)
-	?EventCode@TPhoneCmdParamKeyEvent@@QBE?AW4TEventCode@@XZ @ 57 NONAME ; enum TEventCode TPhoneCmdParamKeyEvent::EventCode(void) const
-	?KeyEvent@TPhoneCmdParamKeyEvent@@QBE?BUTKeyEvent@@XZ @ 58 NONAME ; struct TKeyEvent const TPhoneCmdParamKeyEvent::KeyEvent(void) const
-	?SetDataText@TPhoneCmdParamQuery@@QAEXPAVTDes16@@@Z @ 59 NONAME ; void TPhoneCmdParamQuery::SetDataText(class TDes16 *)
-	??0TPhoneCmdParamAppInfo@@QAE@XZ @ 60 NONAME ; TPhoneCmdParamAppInfo::TPhoneCmdParamAppInfo(void)
-	?LittleBubbleVisible@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 61 NONAME ; int TPhoneCmdParamIncallIndicatorData::LittleBubbleVisible(void) const
-	?SetCallState@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 62 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetCallState(int)
-	?GetString@CPhoneCenRepProxy@@QBEHABVTUid@@IAAVTDes16@@@Z @ 63 NONAME ; int CPhoneCenRepProxy::GetString(class TUid const &, unsigned int, class TDes16 &) const
-	?ResourceId@TPhoneCmdParamProgressNote@@QBEHXZ @ 64 NONAME ; int TPhoneCmdParamProgressNote::ResourceId(void) const
-	?ReconnectQueryObserver@TPhoneCmdParamReconnectQuery@@QBEAAVMCaUiReconnectQueryObserver@@XZ @ 65 NONAME ; class MCaUiReconnectQueryObserver & TPhoneCmdParamReconnectQuery::ReconnectQueryObserver(void) const
-	?CallId@TPhoneCmdParamCallStateData@@QBEHXZ @ 66 NONAME ; int TPhoneCmdParamCallStateData::CallId(void) const
-	?SetContactMatcher@TPhoneCmdParamReconnectQuery@@QAEXPAVCPhCntMatcher@@@Z @ 67 NONAME ; void TPhoneCmdParamReconnectQuery::SetContactMatcher(class CPhCntMatcher *)
-	?NotifyChangeL@CPhoneCenRepProxy@@QAEXABVTUid@@IPAVMPhoneCenRepObserver@@@Z @ 68 NONAME ; void CPhoneCenRepProxy::NotifyChangeL(class TUid const &, unsigned int, class MPhoneCenRepObserver *)
-	?SetResourceId@TPhoneCmdParamDynMenu@@QAEXH@Z @ 69 NONAME ; void TPhoneCmdParamDynMenu::SetResourceId(int)
-	?Validate@CPhoneKeys@@SAHABVTDesC16@@@Z @ 70 NONAME ; int CPhoneKeys::Validate(class TDesC16 const &)
-	??0TPhoneCmdParamKeyCapture@@QAE@XZ @ 71 NONAME ; TPhoneCmdParamKeyCapture::TPhoneCmdParamKeyCapture(void)
-	?SetResourceId@TPhoneCmdParamNote@@QAEXH@Z @ 72 NONAME ; void TPhoneCmdParamNote::SetResourceId(int)
-	?LogMsgFromPEToPhoneUI@CPhoneLogger@@QAEXHH@Z @ 73 NONAME ; void CPhoneLogger::LogMsgFromPEToPhoneUI(int, int)
-	??0TPhoneCmdParamProgressNote@@QAE@XZ @ 74 NONAME ; TPhoneCmdParamProgressNote::TPhoneCmdParamProgressNote(void)
-	?CallState@TPhoneCmdParamCallStateData@@QBEHXZ @ 75 NONAME ; int TPhoneCmdParamCallStateData::CallState(void) const
-	?SetPointer@TPhoneCmdParamPointer@@QAEXPAX@Z @ 76 NONAME ; void TPhoneCmdParamPointer::SetPointer(void *)
-	??1CPhoneCenRepProxy@@UAE@XZ @ 77 NONAME ; CPhoneCenRepProxy::~CPhoneCenRepProxy(void)
-	?SetEventCode@TPhoneCmdParamKeyEvent@@QAEXW4TEventCode@@@Z @ 78 NONAME ; void TPhoneCmdParamKeyEvent::SetEventCode(enum TEventCode)
-	?WaitTime@TPhoneCmdParamProgressNote@@QBE?AVTTimeIntervalMicroSeconds32@@XZ @ 79 NONAME ; class TTimeIntervalMicroSeconds32 TPhoneCmdParamProgressNote::WaitTime(void) const
-	?SetParam@TPhoneCmdParamAppInfo@@QAEXABVTDesC8@@@Z @ 80 NONAME ; void TPhoneCmdParamAppInfo::SetParam(class TDesC8 const &)
-	?CallType@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 81 NONAME ; int TPhoneCmdParamCallHeaderData::CallType(void) const
-	??0TPhoneCmdParamPointer@@QAE@XZ @ 82 NONAME ; TPhoneCmdParamPointer::TPhoneCmdParamPointer(void)
-	??0TPhoneCmdParamGlobalNote@@QAE@XZ @ 83 NONAME ; TPhoneCmdParamGlobalNote::TPhoneCmdParamGlobalNote(void)
-	?SetCiphering@TPhoneCmdParamEmergencyCallHeaderData@@QAEXH@Z @ 84 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetCiphering(int)
-	?SetTone@TPhoneCmdParamNote@@QAEXW4TTone@CAknNoteDialog@@@Z @ 85 NONAME ; void TPhoneCmdParamNote::SetTone(enum CAknNoteDialog::TTone)
-	?SetCustomCommandForTimeOut@TPhoneCmdParamQuery@@QAEXH@Z @ 86 NONAME ; void TPhoneCmdParamQuery::SetCustomCommandForTimeOut(int)
-	?SetIncludeVideoOption@TPhoneCmdParamReconnectQuery@@QAEXH@Z @ 87 NONAME ; void TPhoneCmdParamReconnectQuery::SetIncludeVideoOption(int)
-	?IsBTAccAvailable@TPhoneCmdParamAudioAvailability@@QBEHXZ @ 88 NONAME ; int TPhoneCmdParamAudioAvailability::IsBTAccAvailable(void) const
-	?NewL@CPhoneStorage@@SAPAV1@XZ @ 89 NONAME ; class CPhoneStorage * CPhoneStorage::NewL(void)
-	?Timeout@TPhoneCmdParamNote@@QBE?AW4TTimeout@CAknNoteDialog@@XZ @ 90 NONAME ; enum CAknNoteDialog::TTimeout TPhoneCmdParamNote::Timeout(void) const
-	?Instance@CPhoneRecoverySystem@@SAPAV1@XZ @ 91 NONAME ; class CPhoneRecoverySystem * CPhoneRecoverySystem::Instance(void)
-	?CancelTimer@CPhoneTimer@@QAEXXZ @ 92 NONAME ; void CPhoneTimer::CancelTimer(void)
-	?NewL@CPhoneTimer@@SAPAV1@H@Z @ 93 NONAME ; class CPhoneTimer * CPhoneTimer::NewL(int)
-	?GetInt@CPhoneCenRepProxy@@QBEHABVTUid@@IAAH@Z @ 94 NONAME ; int CPhoneCenRepProxy::GetInt(class TUid const &, unsigned int, int &) const
-	?SetTextToSay@TPhoneCmdParamRingTone@@QAEXABVTDesC16@@@Z @ 95 NONAME ; void TPhoneCmdParamRingTone::SetTextToSay(class TDesC16 const &)
-	?SetCallState@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 96 NONAME ; void TPhoneCmdParamCallHeaderData::SetCallState(int)
-	?ContentCba@TPhoneCmdParamQuery@@QBEHXZ @ 97 NONAME ; int TPhoneCmdParamQuery::ContentCba(void) const
-	?SetTextResourceId@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 98 NONAME ; void TPhoneCmdParamGlobalNote::SetTextResourceId(int)
-	??0TPhoneCmdParamDynMenu@@QAE@XZ @ 99 NONAME ; TPhoneCmdParamDynMenu::TPhoneCmdParamDynMenu(void)
-	?CancelAllNotifications@CPhonePubSubProxy@@SAXPAVMPhonePubSubObserver@@@Z @ 100 NONAME ; void CPhonePubSubProxy::CancelAllNotifications(class MPhonePubSubObserver *)
-	??0TPhoneCommandParam@@QAE@XZ @ 101 NONAME ; TPhoneCommandParam::TPhoneCommandParam(void)
-	?SetCNAPText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@W4TPhoneClippingDirection@CBubbleManager@@@Z @ 102 NONAME ; void TPhoneCmdParamCallHeaderData::SetCNAPText(class TDesC16 const &, enum CBubbleManager::TPhoneClippingDirection)
-	??1CPhoneLogger@@UAE@XZ @ 103 NONAME ; CPhoneLogger::~CPhoneLogger(void)
-	?Softkeys@TPhoneCmdParamGlobalNote@@QBEHXZ @ 104 NONAME ; int TPhoneCmdParamGlobalNote::Softkeys(void) const
-	??0TPhoneCmdParamMessageEditor@@QAE@XZ @ 105 NONAME ; TPhoneCmdParamMessageEditor::TPhoneCmdParamMessageEditor(void)
-	?SetCallState@TPhoneCmdParamCallStateData@@QAEXH@Z @ 106 NONAME ; void TPhoneCmdParamCallStateData::SetCallState(int)
-	?CallerText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 107 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::CallerText(void) const
-	?String@TPhoneCmdParamString@@QAEPAVTPtr16@@XZ @ 108 NONAME ; class TPtr16 * TPhoneCmdParamString::String(void)
-	?SetKey@TPhoneCmdParamKeyCapture@@QAEXW4TStdScanCode@@@Z @ 109 NONAME ; void TPhoneCmdParamKeyCapture::SetKey(enum TStdScanCode)
-	?IsExtraChar@CPhoneKeys@@SAHH@Z @ 110 NONAME ; int CPhoneKeys::IsExtraChar(int)
-	?SetDynMenu@TPhoneCmdParamDynMenu@@QAEXPAX@Z @ 111 NONAME ; void TPhoneCmdParamDynMenu::SetDynMenu(void *)
-	?IsSecondHashKey@CPhoneKeys@@SAHABVTDes16@@@Z @ 112 NONAME ; int CPhoneKeys::IsSecondHashKey(class TDes16 const &)
-	?SetCallerImageStatus@TPhoneCmdParamRingTone@@QAEXH@Z @ 113 NONAME ; void TPhoneCmdParamRingTone::SetCallerImageStatus(int)
-	?GetReal@CPhoneCenRepProxy@@QBEHABVTUid@@IAAN@Z @ 114 NONAME ; int CPhoneCenRepProxy::GetReal(class TUid const &, unsigned int, double &) const
-	?SetShortLabelText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 115 NONAME ; void TPhoneCmdParamCallHeaderData::SetShortLabelText(class TDesC16 const &)
-	?SetDialerController@TPhoneCmdParamCustomDialer@@QAEXPAVMPhoneDialerController@@@Z @ 116 NONAME ; void TPhoneCmdParamCustomDialer::SetDialerController(class MPhoneDialerController *)
-	?RingTone@TPhoneCmdParamRingTone@@QBEABVTDesC16@@XZ @ 117 NONAME ; class TDesC16 const & TPhoneCmdParamRingTone::RingTone(void) const
-	?TimeOut@TPhoneCmdParamQuery@@QBEHXZ @ 118 NONAME ; int TPhoneCmdParamQuery::TimeOut(void) const
-	?ShortLabelText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 119 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::ShortLabelText(void) const
-	?SetInteger@TPhoneCmdParamInteger@@QAEXH@Z @ 120 NONAME ; void TPhoneCmdParamInteger::SetInteger(int)
-	?SetMaskBitmap@TPhoneCmdParamBitmap@@QAEXPAVCFbsBitmap@@@Z @ 121 NONAME ; void TPhoneCmdParamBitmap::SetMaskBitmap(class CFbsBitmap *)
-	?SetTimeout@TPhoneCmdParamNote@@QAEXW4TTimeout@CAknNoteDialog@@@Z @ 122 NONAME ; void TPhoneCmdParamNote::SetTimeout(enum CAknNoteDialog::TTimeout)
-	?IsBlockedKeysListEmpty@CPhoneStorage@@UAEHXZ @ 123 NONAME ; int CPhoneStorage::IsBlockedKeysListEmpty(void)
-	?SetCustomMessage@TPhoneCmdParamAppInfo@@QAEXABVTDesC8@@@Z @ 124 NONAME ; void TPhoneCmdParamAppInfo::SetCustomMessage(class TDesC8 const &)
-	?BaseConstructL@CPhoneResourceResolverBase@@QAEXXZ @ 125 NONAME ; void CPhoneResourceResolverBase::BaseConstructL(void)
-	?SetTextResourceId@TPhoneCmdParamNote@@QAEXH@Z @ 126 NONAME ; void TPhoneCmdParamNote::SetTextResourceId(int)
-	?SetString@TPhoneCmdParamString@@QAEXPAVTPtr16@@@Z @ 127 NONAME ; void TPhoneCmdParamString::SetString(class TPtr16 *)
-	?SetAppUid@TPhoneCmdParamAppInfo@@QAEXABVTUid@@@Z @ 128 NONAME ; void TPhoneCmdParamAppInfo::SetAppUid(class TUid const &)
-	?String@TPhoneCmdParamSingleItemFetch@@QBEPAVTDes16@@XZ @ 129 NONAME ; class TDes16 * TPhoneCmdParamSingleItemFetch::String(void) const
-	?SetBTAccAvailable@TPhoneCmdParamAudioAvailability@@QAEXH@Z @ 130 NONAME ; void TPhoneCmdParamAudioAvailability::SetBTAccAvailable(int)
-	?IsTelephonyFeatureSupported@CPhoneCenRepProxy@@QAEHH@Z @ 131 NONAME ; int CPhoneCenRepProxy::IsTelephonyFeatureSupported(int)
-	?CallImageThemeFilePath@CPhoneCallThemeMonitor@@QBE?AVTPtrC16@@XZ @ 132 NONAME ; class TPtrC16 CPhoneCallThemeMonitor::CallImageThemeFilePath(void) const
-	?HasThumbnail@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 133 NONAME ; int TPhoneCmdParamCallHeaderData::HasThumbnail(void) const
-	?ClearBlackListNow@CPhoneClearBlacklist@@QAEXXZ @ 134 NONAME ; void CPhoneClearBlacklist::ClearBlackListNow(void)
-	?SetCipheringIndicatorAllowed@TPhoneCmdParamEmergencyCallHeaderData@@QAEXH@Z @ 135 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetCipheringIndicatorAllowed(int)
-	?SetCommandParamId@TPhoneCmdParamQuery@@QAEXW4TPhoneParamId@TPhoneCommandParam@@@Z @ 136 NONAME ; void TPhoneCmdParamQuery::SetCommandParamId(enum TPhoneCommandParam::TPhoneParamId)
-	??0TPhoneCmdParamEmergencyCallHeaderData@@QAE@XZ @ 137 NONAME ; TPhoneCmdParamEmergencyCallHeaderData::TPhoneCmdParamEmergencyCallHeaderData(void)
-	?After@CPhoneTimer@@QAEXVTTimeIntervalMicroSeconds32@@PAVMPhoneTimer@@@Z @ 138 NONAME ; void CPhoneTimer::After(class TTimeIntervalMicroSeconds32, class MPhoneTimer *)
-	?NewL@CPhoneLibraryContainer@@SAPAV1@XZ @ 139 NONAME ; class CPhoneLibraryContainer * CPhoneLibraryContainer::NewL(void)
-	?CreateL@CPhoneClearBlacklist@@SAPAV1@AAVRWsSession@@ABVRWindowBase@@@Z @ 140 NONAME ; class CPhoneClearBlacklist * CPhoneClearBlacklist::CreateL(class RWsSession &, class RWindowBase const &)
-	??1CPhoneStorage@@UAE@XZ @ 141 NONAME ; CPhoneStorage::~CPhoneStorage(void)
-	?SetVolume@TPhoneCmdParamRingTone@@QAEXH@Z @ 142 NONAME ; void TPhoneCmdParamRingTone::SetVolume(int)
-	??0TPhoneCmdParamString@@QAE@XZ @ 143 NONAME ; TPhoneCmdParamString::TPhoneCmdParamString(void)
-	?SetContactLink@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC8@@@Z @ 144 NONAME ; void TPhoneCmdParamCallHeaderData::SetContactLink(class TDesC8 const &)
-	??4TPhoneCmdParamQuery@@QAEAAV0@ABV0@@Z @ 145 NONAME ; class TPhoneCmdParamQuery & TPhoneCmdParamQuery::operator=(class TPhoneCmdParamQuery const &)
-	??0TPhoneCmdParamAudioAvailability@@QAE@XZ @ 146 NONAME ; TPhoneCmdParamAudioAvailability::TPhoneCmdParamAudioAvailability(void)
-	?GetBlockedKeyList@CPhoneStorage@@UBEABV?$RArray@H@@XZ @ 147 NONAME ; class RArray<int> const & CPhoneStorage::GetBlockedKeyList(void) const
-	??0TPhoneCmdParamRingTone@@QAE@XZ @ 148 NONAME ; TPhoneCmdParamRingTone::TPhoneCmdParamRingTone(void)
-	?Observer@TPhoneCmdParamNumberEntryObserver@@QAE?AVTCallBack@@XZ @ 149 NONAME ; class TCallBack TPhoneCmdParamNumberEntryObserver::Observer(void)
-	?SetSoftkeys@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 150 NONAME ; void TPhoneCmdParamGlobalNote::SetSoftkeys(int)
-	??0CPhoneResourceResolverBase@@IAE@XZ @ 151 NONAME ; CPhoneResourceResolverBase::CPhoneResourceResolverBase(void)
-	?SetCallId@TPhoneCmdParamCallStateData@@QAEXH@Z @ 152 NONAME ; void TPhoneCmdParamCallStateData::SetCallId(int)
-	?MultipleInstances@TPhoneCmdParamAppInfo@@QBEHXZ @ 153 NONAME ; int TPhoneCmdParamAppInfo::MultipleInstances(void) const
-	?ItemTextArrayForListQuery@TPhoneCmdParamQuery@@QBEPAVMDesC16Array@@XZ @ 154 NONAME ; class MDesC16Array * TPhoneCmdParamQuery::ItemTextArrayForListQuery(void) const
-	?SetHeaderText@TPhoneCmdParamEmergencyCallHeaderData@@QAEXABVTDesC16@@@Z @ 155 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetHeaderText(class TDesC16 const &)
-	?SetContentCba@TPhoneCmdParamQuery@@QAEXH@Z @ 156 NONAME ; void TPhoneCmdParamQuery::SetContentCba(int)
-	?CaptureType@TPhoneCmdParamKeyCapture@@QBE?AW4TPhoneCaptureType@@XZ @ 157 NONAME ; enum TPhoneCaptureType TPhoneCmdParamKeyCapture::CaptureType(void) const
-	?SetQueryResourceId@TPhoneCmdParamQuery@@QAEXH@Z @ 158 NONAME ; void TPhoneCmdParamQuery::SetQueryResourceId(int)
-	?CancelNotify@CPhoneCenRepProxy@@QAEXPAVMPhoneCenRepObserver@@I@Z @ 159 NONAME ; void CPhoneCenRepProxy::CancelNotify(class MPhoneCenRepObserver *, unsigned int)
-	?Param@TPhoneCmdParamAppInfo@@QBEABVTDesC8@@XZ @ 160 NONAME ; class TDesC8 const & TPhoneCmdParamAppInfo::Param(void) const
-	??0CPhoneMethodLogger@@QAE@W4TPhoneUILoggingComponent@@VTPtrC16@@@Z @ 161 NONAME ; CPhoneMethodLogger::CPhoneMethodLogger(enum TPhoneUILoggingComponent, class TPtrC16)
-	?IsDtmfTone@CPhoneKeys@@SAHABUTKeyEvent@@W4TEventCode@@@Z @ 162 NONAME ; int CPhoneKeys::IsDtmfTone(struct TKeyEvent const &, enum TEventCode)
-	?SetMode@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 163 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetMode(int)
-	?NewL@CPhoneCallThemeMonitor@@SAPAV1@XZ @ 164 NONAME ; class CPhoneCallThemeMonitor * CPhoneCallThemeMonitor::NewL(void)
-	?SetCLIText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@W4TPhoneClippingDirection@CBubbleManager@@@Z @ 165 NONAME ; void TPhoneCmdParamCallHeaderData::SetCLIText(class TDesC16 const &, enum CBubbleManager::TPhoneClippingDirection)
-	?SetPhoneNumber@TPhoneCmdParamSpeedDial@@QAEXPAVTPtr16@@@Z @ 166 NONAME ; void TPhoneCmdParamSpeedDial::SetPhoneNumber(class TPtr16 *)
-	?SendKeyEnabled@TPhoneCmdParamQuery@@QBEHXZ @ 167 NONAME ; int TPhoneCmdParamQuery::SendKeyEnabled(void) const
-	?SetNeedToEnableKeylock@CPhoneStorage@@UAEXH@Z @ 168 NONAME ; void CPhoneStorage::SetNeedToEnableKeylock(int)
-	?SetTitlePaneResourceId@TPhoneCmdParamSingleItemFetch@@QAEXH@Z @ 169 NONAME ; void TPhoneCmdParamSingleItemFetch::SetTitlePaneResourceId(int)
-	?Find@CPhoneCenRepProxy@@QBEHABVTUid@@KKAAV?$RArray@K@@@Z @ 170 NONAME ; int CPhoneCenRepProxy::Find(class TUid const &, unsigned long, unsigned long, class RArray<unsigned long> &) const
-	?SetLabelText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 171 NONAME ; void TPhoneCmdParamCallHeaderData::SetLabelText(class TDesC16 const &)
-	?CNAPText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 172 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::CNAPText(void) const
-	?SetOwnPhoneNumberText@TPhoneCmdParamEmergencyCallHeaderData@@QAEXABVTDesC16@@@Z @ 173 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetOwnPhoneNumberText(class TDesC16 const &)
-	?Emergency@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 174 NONAME ; int TPhoneCmdParamIncallIndicatorData::Emergency(void) const
-	?SetCbaResourceId@TPhoneCmdParamSingleItemFetch@@QAEXH@Z @ 175 NONAME ; void TPhoneCmdParamSingleItemFetch::SetCbaResourceId(int)
-	?AppUid@TPhoneCmdParamAppInfo@@QBE?AVTUid@@XZ @ 176 NONAME ; class TUid TPhoneCmdParamAppInfo::AppUid(void) const
-	?CustomMessage@TPhoneCmdParamAppInfo@@QBEABVTDesC8@@XZ @ 177 NONAME ; class TDesC8 const & TPhoneCmdParamAppInfo::CustomMessage(void) const
-	?QueryResourceId@TPhoneCmdParamQuery@@QBEHXZ @ 178 NONAME ; int TPhoneCmdParamQuery::QueryResourceId(void) const
-	?SetRingTone@TPhoneCmdParamRingTone@@QAEXABVTDesC16@@@Z @ 179 NONAME ; void TPhoneCmdParamRingTone::SetRingTone(class TDesC16 const &)
-	?NotifyChangeL@CPhonePubSubProxy@@QAEXABVTUid@@IPAVMPhonePubSubObserver@@@Z @ 180 NONAME ; void CPhonePubSubProxy::NotifyChangeL(class TUid const &, unsigned int, class MPhonePubSubObserver *)
-	?AppendBlockedKeysListL@CPhoneStorage@@UAEXW4TStdScanCode@@@Z @ 181 NONAME ; void CPhoneStorage::AppendBlockedKeysListL(enum TStdScanCode)
-	?SetEmergency@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 182 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetEmergency(int)
-	?SetDefaultCba@TPhoneCmdParamQuery@@QAEXH@Z @ 183 NONAME ; void TPhoneCmdParamQuery::SetDefaultCba(int)
-	?Type@TPhoneCmdParamTransEffect@@QBE?AW4TPhoneTransEffectType@@XZ @ 184 NONAME ; enum TPhoneTransEffectType TPhoneCmdParamTransEffect::Type(void) const
-	??0TPhoneCmdParamSfiData@@QAE@XZ @ 185 NONAME ; TPhoneCmdParamSfiData::TPhoneCmdParamSfiData(void)
-	??0TPhoneCmdParamCallHeaderData@@QAE@XZ @ 186 NONAME ; TPhoneCmdParamCallHeaderData::TPhoneCmdParamCallHeaderData(void)
-	??1CPhoneClearBlacklist@@UAE@XZ @ 187 NONAME ; CPhoneClearBlacklist::~CPhoneClearBlacklist(void)
-	?SetMute@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 188 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetMute(int)
-	?KeyCode@TPhoneCmdParamKeyCapture@@QBE?AW4TKeyCode@@XZ @ 189 NONAME ; enum TKeyCode TPhoneCmdParamKeyCapture::KeyCode(void) const
-	?IsNumberKey@CPhoneKeys@@SAHABUTKeyEvent@@W4TEventCode@@@Z @ 190 NONAME ; int CPhoneKeys::IsNumberKey(struct TKeyEvent const &, enum TEventCode)
-	?TextResourceId@TPhoneCmdParamGlobalNote@@QBEHXZ @ 191 NONAME ; int TPhoneCmdParamGlobalNote::TextResourceId(void) const
-	?SetCiphering@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 192 NONAME ; void TPhoneCmdParamCallHeaderData::SetCiphering(int)
-	?EnablePreconditionL@CPhoneRecoverySystem@@QAEXXZ @ 193 NONAME ; void CPhoneRecoverySystem::EnablePreconditionL(void)
-	?AddL@CPhoneRecoverySystem@@QAEHVTCallBack@@CW4TRecoveryState@CTeleRecoverySystem@@@Z @ 194 NONAME ; int CPhoneRecoverySystem::AddL(class TCallBack, signed char, enum CTeleRecoverySystem::TRecoveryState)
-	?SetLine2@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 195 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetLine2(int)
-	?SetAudioOutput@TPhoneCmdParamAudioOutput@@QAEXW4TPEAudioOutput@@@Z @ 196 NONAME ; void TPhoneCmdParamAudioOutput::SetAudioOutput(enum TPEAudioOutput)
-	?HeaderText@TPhoneCmdParamEmergencyCallHeaderData@@QBEABVTDesC16@@XZ @ 197 NONAME ; class TDesC16 const & TPhoneCmdParamEmergencyCallHeaderData::HeaderText(void) const
-	?CallImageThemeSettings@CPhoneCallThemeMonitor@@QBEHXZ @ 198 NONAME ; int CPhoneCallThemeMonitor::CallImageThemeSettings(void) const
-	?SetLocation@TPhoneCmdParamSpeedDial@@QAEXH@Z @ 199 NONAME ; void TPhoneCmdParamSpeedDial::SetLocation(int)
-	??0TPhoneCmdParamTransEffect@@QAE@XZ @ 200 NONAME ; TPhoneCmdParamTransEffect::TPhoneCmdParamTransEffect(void)
-	?Number@TPhoneCmdParamSfiData@@QBEABVTDesC16@@XZ @ 201 NONAME ; class TDesC16 const & TPhoneCmdParamSfiData::Number(void) const
-	?OwnPhoneNumberText@TPhoneCmdParamEmergencyCallHeaderData@@QBEABVTDesC16@@XZ @ 202 NONAME ; class TDesC16 const & TPhoneCmdParamEmergencyCallHeaderData::OwnPhoneNumberText(void) const
-	?QueryPrompt@TPhoneCmdParamQuery@@QBEABVTDesC16@@XZ @ 203 NONAME ; class TDesC16 const & TPhoneCmdParamQuery::QueryPrompt(void) const
-	?SetQueryPrompt@TPhoneCmdParamQuery@@QAEXABVTDesC16@@@Z @ 204 NONAME ; void TPhoneCmdParamQuery::SetQueryPrompt(class TDesC16 const &)
-	?NewL@CPhoneQwertyHandler@@SAPAV1@XZ @ 205 NONAME ; class CPhoneQwertyHandler * CPhoneQwertyHandler::NewL(void)
-	?IsNumericKey@CPhoneKeys@@SAHABUTKeyEvent@@W4TEventCode@@@Z @ 206 NONAME ; int CPhoneKeys::IsNumericKey(struct TKeyEvent const &, enum TEventCode)
-	?SetCaptureType@TPhoneCmdParamKeyCapture@@QAEXW4TPhoneCaptureType@@@Z @ 207 NONAME ; void TPhoneCmdParamKeyCapture::SetCaptureType(enum TPhoneCaptureType)
-	?ViewUid@TPhoneCmdParamAppInfo@@QBE?AVTUid@@XZ @ 208 NONAME ; class TUid TPhoneCmdParamAppInfo::ViewUid(void) const
-	?CallFlag@TPhoneCmdParamCallHeaderData@@QBEKXZ @ 209 NONAME ; unsigned long TPhoneCmdParamCallHeaderData::CallFlag(void) const
-	?SetLabelText@TPhoneCmdParamEmergencyCallHeaderData@@QAEXABVTDesC16@@@Z @ 210 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetLabelText(class TDesC16 const &)
-	??0TPhoneCmdParamSpeedDial@@QAE@XZ @ 211 NONAME ; TPhoneCmdParamSpeedDial::TPhoneCmdParamSpeedDial(void)
-	?IsCallerText@TPhoneCmdParamRingTone@@QAEHXZ @ 212 NONAME ; int TPhoneCmdParamRingTone::IsCallerText(void)
-	?SetBitmap@TPhoneCmdParamBitmap@@QAEXPAVCFbsBitmap@@@Z @ 213 NONAME ; void TPhoneCmdParamBitmap::SetBitmap(class CFbsBitmap *)
-	?SetNumber@TPhoneCmdParamSfiData@@QAEXABVTDesC16@@@Z @ 214 NONAME ; void TPhoneCmdParamSfiData::SetNumber(class TDesC16 const &)
-	?Location@TPhoneCmdParamSpeedDial@@QAEHXZ @ 215 NONAME ; int TPhoneCmdParamSpeedDial::Location(void)
-	?CipheringIndicatorAllowed@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 216 NONAME ; int TPhoneCmdParamCallHeaderData::CipheringIndicatorAllowed(void) const
-	?Name@TPhoneCmdParamSfiData@@QBEABVTDesC16@@XZ @ 217 NONAME ; class TDesC16 const & TPhoneCmdParamSfiData::Name(void) const
-	??0TPhoneCmdParamQuery@@QAE@ABV0@@Z @ 218 NONAME ; TPhoneCmdParamQuery::TPhoneCmdParamQuery(class TPhoneCmdParamQuery const &)
-	?CallState@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 219 NONAME ; int TPhoneCmdParamCallHeaderData::CallState(void) const
-	??0TPhoneCmdParamIncallIndicatorData@@QAE@XZ @ 220 NONAME ; TPhoneCmdParamIncallIndicatorData::TPhoneCmdParamIncallIndicatorData(void)
-	?Picture@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 221 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::Picture(void) const
-	?SetCallThemeSettingsObserver@CPhoneCallThemeMonitor@@QAEXPAVMPhoneCallThemeSettingsObserver@@@Z @ 222 NONAME ; void CPhoneCallThemeMonitor::SetCallThemeSettingsObserver(class MPhoneCallThemeSettingsObserver *)
-	?ServiceId@TPhoneCmdParamCallHeaderData@@QBEKXZ @ 223 NONAME ; unsigned long TPhoneCmdParamCallHeaderData::ServiceId(void) const
-	?LabelText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 224 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::LabelText(void) const
-	?Overflow@CPhoneLogger@@EAEXAAVTDes16@@@Z @ 225 NONAME ; void CPhoneLogger::Overflow(class TDes16 &)
-	?SetServiceId@TPhoneCmdParamSpeedDial@@QAEXI@Z @ 226 NONAME ; void TPhoneCmdParamSpeedDial::SetServiceId(unsigned int)
-	?SetKeyEvent@TPhoneCmdParamKeyEvent@@QAEXABUTKeyEvent@@@Z @ 227 NONAME ; void TPhoneCmdParamKeyEvent::SetKeyEvent(struct TKeyEvent const &)
-	?Instance@CPhonePubSubProxy@@SAPAV1@XZ @ 228 NONAME ; class CPhonePubSubProxy * CPhonePubSubProxy::Instance(void)
-	?ResourceId@TPhoneCmdParamNote@@QBEHXZ @ 229 NONAME ; int TPhoneCmdParamNote::ResourceId(void) const
-	?CipheringIndicatorAllowed@TPhoneCmdParamEmergencyCallHeaderData@@QBEHXZ @ 230 NONAME ; int TPhoneCmdParamEmergencyCallHeaderData::CipheringIndicatorAllowed(void) const
-	?CancelAllNotifies@CPhoneCenRepProxy@@SAXPAVMPhoneCenRepObserver@@@Z @ 231 NONAME ; void CPhoneCenRepProxy::CancelAllNotifies(class MPhoneCenRepObserver *)
-	??1CPhoneQwertyHandler@@UAE@XZ @ 232 NONAME ; CPhoneQwertyHandler::~CPhoneQwertyHandler(void)
-	?TextResourceId@TPhoneCmdParamNote@@QBEHXZ @ 233 NONAME ; int TPhoneCmdParamNote::TextResourceId(void) const
-	?SetRemotePhoneNumber@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 234 NONAME ; void TPhoneCmdParamCallHeaderData::SetRemotePhoneNumber(class TDesC16 const &)
-	?CipheringIndicatorAllowed@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 235 NONAME ; int TPhoneCmdParamIncallIndicatorData::CipheringIndicatorAllowed(void) const
-	?SetScreenLocked@CPhoneStorage@@UAEXH@Z @ 236 NONAME ; void CPhoneStorage::SetScreenLocked(int)
-	??0TPhoneCmdParamCallStateData@@QAE@XZ @ 237 NONAME ; TPhoneCmdParamCallStateData::TPhoneCmdParamCallStateData(void)
-	?SetKeyCode@TPhoneCmdParamKeyCapture@@QAEXW4TKeyCode@@@Z @ 238 NONAME ; void TPhoneCmdParamKeyCapture::SetKeyCode(enum TKeyCode)
-	?CustomMessageId@TPhoneCmdParamAppInfo@@QBE?AVTUid@@XZ @ 239 NONAME ; class TUid TPhoneCmdParamAppInfo::CustomMessageId(void) const
-	?RemotePhoneNumber@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 240 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::RemotePhoneNumber(void) const
-	?SetType@TPhoneCmdParamNote@@QAEXW4TPhoneNoteType@@@Z @ 241 NONAME ; void TPhoneCmdParamNote::SetType(enum TPhoneNoteType)
-	?Instance@CPhoneClearBlacklist@@SAPAV1@XZ @ 242 NONAME ; class CPhoneClearBlacklist * CPhoneClearBlacklist::Instance(void)
-	?TextToSay@TPhoneCmdParamRingTone@@QBEABVTDesC16@@XZ @ 243 NONAME ; class TDesC16 const & TPhoneCmdParamRingTone::TextToSay(void) const
-	?Type@TPhoneCmdParamNote@@QBE?AW4TPhoneNoteType@@XZ @ 244 NONAME ; enum TPhoneNoteType TPhoneCmdParamNote::Type(void) const
-	??0TPhoneCmdParamReconnectQuery@@QAE@AAVMCaUiReconnectQueryObserver@@@Z @ 245 NONAME ; TPhoneCmdParamReconnectQuery::TPhoneCmdParamReconnectQuery(class MCaUiReconnectQueryObserver &)
-	?SetCallFlag@TPhoneCmdParamCallHeaderData@@QAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 246 NONAME ; void TPhoneCmdParamCallHeaderData::SetCallFlag(enum CBubbleManager::TPhoneCallTypeFlags)
-	?SetPicture@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 247 NONAME ; void TPhoneCmdParamCallHeaderData::SetPicture(class TDesC16 const &)
-	?Integer@TPhoneCmdParamInteger@@QBEHXZ @ 248 NONAME ; int TPhoneCmdParamInteger::Integer(void) const
-	?Mode@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 249 NONAME ; int TPhoneCmdParamIncallIndicatorData::Mode(void) const
-	?SetText@TPhoneCmdParamNote@@QAEXABVTDesC16@@@Z @ 250 NONAME ; void TPhoneCmdParamNote::SetText(class TDesC16 const &)
-	?SetCallerTextStatus@TPhoneCmdParamRingTone@@QAEXH@Z @ 251 NONAME ; void TPhoneCmdParamRingTone::SetCallerTextStatus(int)
-	?IsWiredAccAvailable@TPhoneCmdParamAudioAvailability@@QBEHXZ @ 252 NONAME ; int TPhoneCmdParamAudioAvailability::IsWiredAccAvailable(void) const
-	?SetWaitForReady@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 253 NONAME ; void TPhoneCmdParamGlobalNote::SetWaitForReady(int)
-	??0TPhoneCmdParamBoolean@@QAE@XZ @ 254 NONAME ; TPhoneCmdParamBoolean::TPhoneCmdParamBoolean(void)
-	?QueryCommandObserver@TPhoneCmdParamQuery@@QAEPAVMPhoneQueryCommandObserver@@XZ @ 255 NONAME ; class MPhoneQueryCommandObserver * TPhoneCmdParamQuery::QueryCommandObserver(void)
-	?DataText@TPhoneCmdParamQuery@@QBEPAVTDes16@@XZ @ 256 NONAME ; class TDes16 * TPhoneCmdParamQuery::DataText(void) const
-	?SetType@TPhoneCmdParamSingleItemFetch@@QAEXW4TFetchType@CPhCntSingleItemFetch@@@Z @ 257 NONAME ; void TPhoneCmdParamSingleItemFetch::SetType(enum CPhCntSingleItemFetch::TFetchType)
-	?SetReal@CPhoneCenRepProxy@@QAEHABVTUid@@IN@Z @ 258 NONAME ; int CPhoneCenRepProxy::SetReal(class TUid const &, unsigned int, double)
-	??0TPhoneCmdParamCustomDialer@@QAE@XZ @ 259 NONAME ; TPhoneCmdParamCustomDialer::TPhoneCmdParamCustomDialer(void)
-	??1CPhonePubSubProxy@@UAE@XZ @ 260 NONAME ; CPhonePubSubProxy::~CPhonePubSubProxy(void)
-	?NumericKeyCode@CPhoneQwertyHandler@@QAEHABUTKeyEvent@@@Z @ 261 NONAME ; int CPhoneQwertyHandler::NumericKeyCode(struct TKeyEvent const &)
-	?SetMessageData@TPhoneCmdParamMessageEditor@@QAEXPAVCMessageData@@@Z @ 262 NONAME ; void TPhoneCmdParamMessageEditor::SetMessageData(class CMessageData *)
-	??0TPhoneCmdParamNote@@QAE@XZ @ 263 NONAME ; TPhoneCmdParamNote::TPhoneCmdParamNote(void)
-	?Volume@TPhoneCmdParamRingTone@@QBEHXZ @ 264 NONAME ; int TPhoneCmdParamRingTone::Volume(void) const
-	?SetItemTextArrayForListQuery@TPhoneCmdParamQuery@@QAEXAAVMDesC16Array@@@Z @ 265 NONAME ; void TPhoneCmdParamQuery::SetItemTextArrayForListQuery(class MDesC16Array &)
-	?Type@TPhoneCmdParamRingTone@@QBE?AW4TPhoneRingToneType@@XZ @ 266 NONAME ; enum TPhoneRingToneType TPhoneCmdParamRingTone::Type(void) const
-	?Key@TPhoneCmdParamKeyCapture@@QBE?AW4TStdScanCode@@XZ @ 267 NONAME ; enum TStdScanCode TPhoneCmdParamKeyCapture::Key(void) const
-	?LabelText@TPhoneCmdParamEmergencyCallHeaderData@@QBEABVTDesC16@@XZ @ 268 NONAME ; class TDesC16 const & TPhoneCmdParamEmergencyCallHeaderData::LabelText(void) const
-	?Ciphering@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 269 NONAME ; int TPhoneCmdParamIncallIndicatorData::Ciphering(void) const
-	?SetQueryCommandObserver@TPhoneCmdParamQuery@@QAEXAAVMPhoneQueryCommandObserver@@@Z @ 270 NONAME ; void TPhoneCmdParamQuery::SetQueryCommandObserver(class MPhoneQueryCommandObserver &)
-	?IsPhoneUIFeatureSupported@CPhoneCenRepProxy@@QAEHH@Z @ 271 NONAME ; int CPhoneCenRepProxy::IsPhoneUIFeatureSupported(int)
-	?DefaultCba@TPhoneCmdParamQuery@@QBEHXZ @ 272 NONAME ; int TPhoneCmdParamQuery::DefaultCba(void) const
-	?CallState@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 273 NONAME ; int TPhoneCmdParamIncallIndicatorData::CallState(void) const
-	??0TPhoneCmdParamNumberEntryObserver@@QAE@XZ @ 274 NONAME ; TPhoneCmdParamNumberEntryObserver::TPhoneCmdParamNumberEntryObserver(void)
-	?MessageData@TPhoneCmdParamMessageEditor@@QBEPAVCMessageData@@XZ @ 275 NONAME ; class CMessageData * TPhoneCmdParamMessageEditor::MessageData(void) const
-	?SetLine2@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 276 NONAME ; void TPhoneCmdParamCallHeaderData::SetLine2(int)
-	?FetchValuesFromCenRepL@CPhoneCenRepProxy@@QAEXAAVTPhoneCmdParamAppInfo@@W4TKeyCode@@PAVHBufC8@@AAH@Z @ 277 NONAME ; void CPhoneCenRepProxy::FetchValuesFromCenRepL(class TPhoneCmdParamAppInfo &, enum TKeyCode, class HBufC8 *, int &)
-	?CNAPTextClippingDirection@TPhoneCmdParamCallHeaderData@@QBE?AW4TPhoneClippingDirection@CBubbleManager@@XZ @ 278 NONAME ; enum CBubbleManager::TPhoneClippingDirection TPhoneCmdParamCallHeaderData::CNAPTextClippingDirection(void) const
-	?ParticipantCLI@TPhoneCmdParamCallHeaderData@@QBE?AW4TPhoneParticipantListCLI@1@XZ @ 279 NONAME ; enum TPhoneCmdParamCallHeaderData::TPhoneParticipantListCLI TPhoneCmdParamCallHeaderData::ParticipantCLI(void) const
-	?Thumbnail@TPhoneCmdParamCallHeaderData@@QBEPAVCFbsBitmap@@XZ @ 280 NONAME ; class CFbsBitmap * TPhoneCmdParamCallHeaderData::Thumbnail(void) const
-	?SetTimeOut@TPhoneCmdParamQuery@@QAEXH@Z @ 281 NONAME ; void TPhoneCmdParamQuery::SetTimeOut(int)
-	?Boolean@TPhoneCmdParamBoolean@@QBEHXZ @ 282 NONAME ; int TPhoneCmdParamBoolean::Boolean(void) const
-	?LogMsgFromPhoneUIToPE@CPhoneLogger@@QAEXHH@Z @ 283 NONAME ; void CPhoneLogger::LogMsgFromPhoneUIToPE(int, int)
-	?SetCustomMessageId@TPhoneCmdParamAppInfo@@QAEXABVTUid@@@Z @ 284 NONAME ; void TPhoneCmdParamAppInfo::SetCustomMessageId(class TUid const &)
-	?ResolveResourceID@CPhoneResourceResolverBase@@UBEHABH@Z @ 285 NONAME ; int CPhoneResourceResolverBase::ResolveResourceID(int const &) const
-	?SetName@TPhoneCmdParamSfiData@@QAEXABVTDesC16@@@Z @ 286 NONAME ; void TPhoneCmdParamSfiData::SetName(class TDesC16 const &)
-	?TitlePaneResourceId@TPhoneCmdParamSingleItemFetch@@QBEHXZ @ 287 NONAME ; int TPhoneCmdParamSingleItemFetch::TitlePaneResourceId(void) const
-	?SetType@TPhoneCmdParamGlobalNote@@QAEXW4TAknGlobalNoteType@@@Z @ 288 NONAME ; void TPhoneCmdParamGlobalNote::SetType(enum TAknGlobalNoteType)
-	?IncludeVideoCallOption@TPhoneCmdParamReconnectQuery@@QBEHXZ @ 289 NONAME ; int TPhoneCmdParamReconnectQuery::IncludeVideoCallOption(void) const
-	?SetLittleBubbleVisible@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 290 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetLittleBubbleVisible(int)
-	?Ciphering@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 291 NONAME ; int TPhoneCmdParamCallHeaderData::Ciphering(void) const
-	?SetType@TPhoneCmdParamRingTone@@QAEXW4TPhoneRingToneType@@@Z @ 292 NONAME ; void TPhoneCmdParamRingTone::SetType(enum TPhoneRingToneType)
-	?ResourceId@TPhoneCmdParamDynMenu@@QBEHXZ @ 293 NONAME ; int TPhoneCmdParamDynMenu::ResourceId(void) const
-	?SetCipheringIndicatorAllowed@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 294 NONAME ; void TPhoneCmdParamCallHeaderData::SetCipheringIndicatorAllowed(int)
-	?SetWaitTime@TPhoneCmdParamProgressNote@@QAEXVTTimeIntervalMicroSeconds32@@@Z @ 295 NONAME ; void TPhoneCmdParamProgressNote::SetWaitTime(class TTimeIntervalMicroSeconds32)
-	?Ciphering@TPhoneCmdParamEmergencyCallHeaderData@@QBEHXZ @ 296 NONAME ; int TPhoneCmdParamEmergencyCallHeaderData::Ciphering(void) const
-	??1CPhoneCallThemeMonitor@@UAE@XZ @ 297 NONAME ; CPhoneCallThemeMonitor::~CPhoneCallThemeMonitor(void)
-	?SetNumberType@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 298 NONAME ; void TPhoneCmdParamCallHeaderData::SetNumberType(int)
-	?Mute@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 299 NONAME ; int TPhoneCmdParamIncallIndicatorData::Mute(void) const
-	?IsQwertyInput@CPhoneQwertyHandler@@QBEHXZ @ 300 NONAME ; int CPhoneQwertyHandler::IsQwertyInput(void) const
-	?SetBoolean@TPhoneCmdParamBoolean@@QAEXH@Z @ 301 NONAME ; void TPhoneCmdParamBoolean::SetBoolean(int)
-	?IsTelephonyFeatureSupported@CPhoneResourceResolverBase@@MBEHH@Z @ 302 NONAME ; int CPhoneResourceResolverBase::IsTelephonyFeatureSupported(int) const
-	?Instance@CPhoneMainErrorMessagesHandler@@SAPAV1@XZ @ 303 NONAME ; class CPhoneMainErrorMessagesHandler * CPhoneMainErrorMessagesHandler::Instance(void)
-	?SetViewUid@TPhoneCmdParamAppInfo@@QAEXABVTUid@@@Z @ 304 NONAME ; void TPhoneCmdParamAppInfo::SetViewUid(class TUid const &)
-	?SetServiceId@TPhoneCmdParamCallHeaderData@@QAEXK@Z @ 305 NONAME ; void TPhoneCmdParamCallHeaderData::SetServiceId(unsigned long)
-	?Instance@CPhoneCenRepProxy@@SAPAV1@XZ @ 306 NONAME ; class CPhoneCenRepProxy * CPhoneCenRepProxy::Instance(void)
-	?AddCallFlag@TPhoneCmdParamCallHeaderData@@QAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 307 NONAME ; void TPhoneCmdParamCallHeaderData::AddCallFlag(enum CBubbleManager::TPhoneCallTypeFlags)
-	?SetQueryType@TPhoneCmdParamQuery@@QAEXW4TPhoneQueryType@@@Z @ 308 NONAME ; void TPhoneCmdParamQuery::SetQueryType(enum TPhoneQueryType)
-	?Value@CPhonePubSubProxy@@QAEHABVTUid@@I@Z @ 309 NONAME ; int CPhonePubSubProxy::Value(class TUid const &, unsigned int)
-	?SetWiredAccAvailable@TPhoneCmdParamAudioAvailability@@QAEXH@Z @ 310 NONAME ; void TPhoneCmdParamAudioAvailability::SetWiredAccAvailable(int)
-	?SetString@TPhoneCmdParamSingleItemFetch@@QAEXPAVTDes16@@@Z @ 311 NONAME ; void TPhoneCmdParamSingleItemFetch::SetString(class TDes16 *)
-	??0TPhoneCmdParamAudioOutput@@QAE@XZ @ 312 NONAME ; TPhoneCmdParamAudioOutput::TPhoneCmdParamAudioOutput(void)
-	?IsCallerImage@TPhoneCmdParamRingTone@@QAEHXZ @ 313 NONAME ; int TPhoneCmdParamRingTone::IsCallerImage(void)
-	??0TPhoneCmdParamQuery@@QAE@XZ @ 314 NONAME ; TPhoneCmdParamQuery::TPhoneCmdParamQuery(void)
-	?SetPhoneNumber@TPhoneCmdParamReconnectQuery@@QAEXVTPtrC16@@@Z @ 315 NONAME ; void TPhoneCmdParamReconnectQuery::SetPhoneNumber(class TPtrC16)
-	?Instance@CPhoneMainResourceResolver@@SAPAV1@XZ @ 316 NONAME ; class CPhoneMainResourceResolver * CPhoneMainResourceResolver::Instance(void)
-	?ServiceId@TPhoneCmdParamSpeedDial@@QBEIXZ @ 317 NONAME ; unsigned int TPhoneCmdParamSpeedDial::ServiceId(void) const
-	??1CPhoneLibraryContainer@@UAE@XZ @ 318 NONAME ; CPhoneLibraryContainer::~CPhoneLibraryContainer(void)
-	?ClearBlackListOnNextKey@CPhoneClearBlacklist@@QAEXXZ @ 319 NONAME ; void CPhoneClearBlacklist::ClearBlackListOnNextKey(void)
-	?Tone@TPhoneCmdParamQuery@@QBEHXZ @ 320 NONAME ; int TPhoneCmdParamQuery::Tone(void) const
-	?SetNumberType@TPhoneCmdParamSpeedDial@@QAEXW4TPhoneNumberType@@@Z @ 321 NONAME ; void TPhoneCmdParamSpeedDial::SetNumberType(enum TPhoneNumberType)
-	?SetRingingType@TPhoneCmdParamRingTone@@QAEXH@Z @ 322 NONAME ; void TPhoneCmdParamRingTone::SetRingingType(int)
-	?CbaResourceId@TPhoneCmdParamSingleItemFetch@@QBEHXZ @ 323 NONAME ; int TPhoneCmdParamSingleItemFetch::CbaResourceId(void) const
-	?SetCiphering@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 324 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetCiphering(int)
-	?SetCipheringIndicatorAllowed@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 325 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetCipheringIndicatorAllowed(int)
-	?NeedToEnableKeylock@CPhoneStorage@@UAEHXZ @ 326 NONAME ; int CPhoneStorage::NeedToEnableKeylock(void)
-	?AudioOutput@TPhoneCmdParamAudioOutput@@QBE?AW4TPEAudioOutput@@XZ @ 327 NONAME ; enum TPEAudioOutput TPhoneCmdParamAudioOutput::AudioOutput(void) const
-	?SetResourceId@TPhoneCmdParamProgressNote@@QAEXH@Z @ 328 NONAME ; void TPhoneCmdParamProgressNote::SetResourceId(int)
-	??0TPhoneCmdParamInteger@@QAE@XZ @ 329 NONAME ; TPhoneCmdParamInteger::TPhoneCmdParamInteger(void)
-	?Type@TPhoneCmdParamSingleItemFetch@@QAE?AW4TFetchType@CPhCntSingleItemFetch@@XZ @ 330 NONAME ; enum CPhCntSingleItemFetch::TFetchType TPhoneCmdParamSingleItemFetch::Type(void)
-	?SetType@TPhoneCmdParamTransEffect@@QAEXW4TPhoneTransEffectType@@@Z @ 331 NONAME ; void TPhoneCmdParamTransEffect::SetType(enum TPhoneTransEffectType)
-	?Bitmap@TPhoneCmdParamBitmap@@QBEPAVCFbsBitmap@@XZ @ 332 NONAME ; class CFbsBitmap * TPhoneCmdParamBitmap::Bitmap(void) const
-	?SetTone@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 333 NONAME ; void TPhoneCmdParamGlobalNote::SetTone(int)
-	?After@CPhoneTimer@@QAEXVTTimeIntervalMicroSeconds32@@VTCallBack@@@Z @ 334 NONAME ; void CPhoneTimer::After(class TTimeIntervalMicroSeconds32, class TCallBack)
-	?ContactMatcher@TPhoneCmdParamReconnectQuery@@QBEPAVCPhCntMatcher@@XZ @ 335 NONAME ; class CPhCntMatcher * TPhoneCmdParamReconnectQuery::ContactMatcher(void) const
+	?SetText@TPhoneCmdParamGlobalNote@@QAEXABVTDesC16@@@Z @ 38 NONAME ; void TPhoneCmdParamGlobalNote::SetText(class TDesC16 const &)
+	?AddLibraryL@CPhoneLibraryContainer@@QAEXABVRLibrary@@@Z @ 39 NONAME ; void CPhoneLibraryContainer::AddLibraryL(class RLibrary const &)
+	??1CPhoneResourceResolverBase@@UAE@XZ @ 40 NONAME ; CPhoneResourceResolverBase::~CPhoneResourceResolverBase(void)
+	?SetInt@CPhoneCenRepProxy@@QAEHABVTUid@@IH@Z @ 41 NONAME ; int CPhoneCenRepProxy::SetInt(class TUid const &, unsigned int, int)
+	?GetCustomCommandForTimeOut@TPhoneCmdParamQuery@@QBEHAAH@Z @ 42 NONAME ; int TPhoneCmdParamQuery::GetCustomCommandForTimeOut(int &) const
+	?ParamId@TPhoneCommandParam@@QBE?AW4TPhoneParamId@1@XZ @ 43 NONAME ; enum TPhoneCommandParam::TPhoneParamId TPhoneCommandParam::ParamId(void) const
+	?SetString@CPhoneCenRepProxy@@QAEHABVTUid@@IABVTDesC16@@@Z @ 44 NONAME ; int CPhoneCenRepProxy::SetString(class TUid const &, unsigned int, class TDesC16 const &)
+	?Line2@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 45 NONAME ; int TPhoneCmdParamCallHeaderData::Line2(void) const
+	??1CPhoneTimer@@UAE@XZ @ 46 NONAME ; CPhoneTimer::~CPhoneTimer(void)
+	?LogMsgFromPEToPhoneUIEnd@CPhoneLogger@@QAEXH@Z @ 47 NONAME ; void CPhoneLogger::LogMsgFromPEToPhoneUIEnd(int)
+	?DialerController@TPhoneCmdParamCustomDialer@@QAEPAVMPhoneDialerController@@XZ @ 48 NONAME ; class MPhoneDialerController * TPhoneCmdParamCustomDialer::DialerController(void)
+	?Type@TPhoneCmdParamGlobalNote@@QBE?AW4TAknGlobalNoteType@@XZ @ 49 NONAME ; enum TAknGlobalNoteType TPhoneCmdParamGlobalNote::Type(void) const
+	?SetMultipleInstances@TPhoneCmdParamAppInfo@@QAEXH@Z @ 50 NONAME ; void TPhoneCmdParamAppInfo::SetMultipleInstances(int)
+	?Tone@TPhoneCmdParamGlobalNote@@QBEHXZ @ 51 NONAME ; int TPhoneCmdParamGlobalNote::Tone(void) const
+	?ChangePropertyValue@CPhonePubSubProxy@@QAEXABVTUid@@IH@Z @ 52 NONAME ; void CPhonePubSubProxy::ChangePropertyValue(class TUid const &, unsigned int, int)
+	?SetThumbnail@TPhoneCmdParamCallHeaderData@@QAEXPAVCFbsBitmap@@@Z @ 53 NONAME ; void TPhoneCmdParamCallHeaderData::SetThumbnail(class CFbsBitmap *)
+	?SetCbaCommandMapping@TPhoneCmdParamQuery@@QAEXHH@Z @ 54 NONAME ; void TPhoneCmdParamQuery::SetCbaCommandMapping(int, int)
+	?EventCode@TPhoneCmdParamKeyEvent@@QBE?AW4TEventCode@@XZ @ 55 NONAME ; enum TEventCode TPhoneCmdParamKeyEvent::EventCode(void) const
+	?KeyEvent@TPhoneCmdParamKeyEvent@@QBE?BUTKeyEvent@@XZ @ 56 NONAME ; struct TKeyEvent const TPhoneCmdParamKeyEvent::KeyEvent(void) const
+	?SetDataText@TPhoneCmdParamQuery@@QAEXPAVTDes16@@@Z @ 57 NONAME ; void TPhoneCmdParamQuery::SetDataText(class TDes16 *)
+	??0TPhoneCmdParamAppInfo@@QAE@XZ @ 58 NONAME ; TPhoneCmdParamAppInfo::TPhoneCmdParamAppInfo(void)
+	?LittleBubbleVisible@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 59 NONAME ; int TPhoneCmdParamIncallIndicatorData::LittleBubbleVisible(void) const
+	?SetCallState@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 60 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetCallState(int)
+	?GetString@CPhoneCenRepProxy@@QBEHABVTUid@@IAAVTDes16@@@Z @ 61 NONAME ; int CPhoneCenRepProxy::GetString(class TUid const &, unsigned int, class TDes16 &) const
+	?ResourceId@TPhoneCmdParamProgressNote@@QBEHXZ @ 62 NONAME ; int TPhoneCmdParamProgressNote::ResourceId(void) const
+	?ReconnectQueryObserver@TPhoneCmdParamReconnectQuery@@QBEAAVMCaUiReconnectQueryObserver@@XZ @ 63 NONAME ; class MCaUiReconnectQueryObserver & TPhoneCmdParamReconnectQuery::ReconnectQueryObserver(void) const
+	?CallId@TPhoneCmdParamCallStateData@@QBEHXZ @ 64 NONAME ; int TPhoneCmdParamCallStateData::CallId(void) const
+	?SetContactMatcher@TPhoneCmdParamReconnectQuery@@QAEXPAVCPhCntMatcher@@@Z @ 65 NONAME ; void TPhoneCmdParamReconnectQuery::SetContactMatcher(class CPhCntMatcher *)
+	?NotifyChangeL@CPhoneCenRepProxy@@QAEXABVTUid@@IPAVMPhoneCenRepObserver@@@Z @ 66 NONAME ; void CPhoneCenRepProxy::NotifyChangeL(class TUid const &, unsigned int, class MPhoneCenRepObserver *)
+	?SetResourceId@TPhoneCmdParamDynMenu@@QAEXH@Z @ 67 NONAME ; void TPhoneCmdParamDynMenu::SetResourceId(int)
+	?Validate@CPhoneKeys@@SAHABVTDesC16@@@Z @ 68 NONAME ; int CPhoneKeys::Validate(class TDesC16 const &)
+	??0TPhoneCmdParamKeyCapture@@QAE@XZ @ 69 NONAME ; TPhoneCmdParamKeyCapture::TPhoneCmdParamKeyCapture(void)
+	?SetResourceId@TPhoneCmdParamNote@@QAEXH@Z @ 70 NONAME ; void TPhoneCmdParamNote::SetResourceId(int)
+	?LogMsgFromPEToPhoneUI@CPhoneLogger@@QAEXHH@Z @ 71 NONAME ; void CPhoneLogger::LogMsgFromPEToPhoneUI(int, int)
+	??0TPhoneCmdParamProgressNote@@QAE@XZ @ 72 NONAME ; TPhoneCmdParamProgressNote::TPhoneCmdParamProgressNote(void)
+	?CallState@TPhoneCmdParamCallStateData@@QBEHXZ @ 73 NONAME ; int TPhoneCmdParamCallStateData::CallState(void) const
+	?SetPointer@TPhoneCmdParamPointer@@QAEXPAX@Z @ 74 NONAME ; void TPhoneCmdParamPointer::SetPointer(void *)
+	??1CPhoneCenRepProxy@@UAE@XZ @ 75 NONAME ; CPhoneCenRepProxy::~CPhoneCenRepProxy(void)
+	?SetEventCode@TPhoneCmdParamKeyEvent@@QAEXW4TEventCode@@@Z @ 76 NONAME ; void TPhoneCmdParamKeyEvent::SetEventCode(enum TEventCode)
+	?WaitTime@TPhoneCmdParamProgressNote@@QBE?AVTTimeIntervalMicroSeconds32@@XZ @ 77 NONAME ; class TTimeIntervalMicroSeconds32 TPhoneCmdParamProgressNote::WaitTime(void) const
+	?SetParam@TPhoneCmdParamAppInfo@@QAEXABVTDesC8@@@Z @ 78 NONAME ; void TPhoneCmdParamAppInfo::SetParam(class TDesC8 const &)
+	?CallType@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 79 NONAME ; int TPhoneCmdParamCallHeaderData::CallType(void) const
+	??0TPhoneCmdParamPointer@@QAE@XZ @ 80 NONAME ; TPhoneCmdParamPointer::TPhoneCmdParamPointer(void)
+	??0TPhoneCmdParamGlobalNote@@QAE@XZ @ 81 NONAME ; TPhoneCmdParamGlobalNote::TPhoneCmdParamGlobalNote(void)
+	?SetCiphering@TPhoneCmdParamEmergencyCallHeaderData@@QAEXH@Z @ 82 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetCiphering(int)
+	?SetTone@TPhoneCmdParamNote@@QAEXW4TTone@CAknNoteDialog@@@Z @ 83 NONAME ; void TPhoneCmdParamNote::SetTone(enum CAknNoteDialog::TTone)
+	?SetCustomCommandForTimeOut@TPhoneCmdParamQuery@@QAEXH@Z @ 84 NONAME ; void TPhoneCmdParamQuery::SetCustomCommandForTimeOut(int)
+	?SetIncludeVideoOption@TPhoneCmdParamReconnectQuery@@QAEXH@Z @ 85 NONAME ; void TPhoneCmdParamReconnectQuery::SetIncludeVideoOption(int)
+	?IsBTAccAvailable@TPhoneCmdParamAudioAvailability@@QBEHXZ @ 86 NONAME ; int TPhoneCmdParamAudioAvailability::IsBTAccAvailable(void) const
+	?Timeout@TPhoneCmdParamNote@@QBE?AW4TTimeout@CAknNoteDialog@@XZ @ 87 NONAME ; enum CAknNoteDialog::TTimeout TPhoneCmdParamNote::Timeout(void) const
+	?Instance@CPhoneRecoverySystem@@SAPAV1@XZ @ 88 NONAME ; class CPhoneRecoverySystem * CPhoneRecoverySystem::Instance(void)
+	?CancelTimer@CPhoneTimer@@QAEXXZ @ 89 NONAME ; void CPhoneTimer::CancelTimer(void)
+	?NewL@CPhoneTimer@@SAPAV1@H@Z @ 90 NONAME ; class CPhoneTimer * CPhoneTimer::NewL(int)
+	?GetInt@CPhoneCenRepProxy@@QBEHABVTUid@@IAAH@Z @ 91 NONAME ; int CPhoneCenRepProxy::GetInt(class TUid const &, unsigned int, int &) const
+	?SetTextToSay@TPhoneCmdParamRingTone@@QAEXABVTDesC16@@@Z @ 92 NONAME ; void TPhoneCmdParamRingTone::SetTextToSay(class TDesC16 const &)
+	?SetCallState@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 93 NONAME ; void TPhoneCmdParamCallHeaderData::SetCallState(int)
+	?ContentCba@TPhoneCmdParamQuery@@QBEHXZ @ 94 NONAME ; int TPhoneCmdParamQuery::ContentCba(void) const
+	?SetTextResourceId@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 95 NONAME ; void TPhoneCmdParamGlobalNote::SetTextResourceId(int)
+	??0TPhoneCmdParamDynMenu@@QAE@XZ @ 96 NONAME ; TPhoneCmdParamDynMenu::TPhoneCmdParamDynMenu(void)
+	?CancelAllNotifications@CPhonePubSubProxy@@SAXPAVMPhonePubSubObserver@@@Z @ 97 NONAME ; void CPhonePubSubProxy::CancelAllNotifications(class MPhonePubSubObserver *)
+	??0TPhoneCommandParam@@QAE@XZ @ 98 NONAME ; TPhoneCommandParam::TPhoneCommandParam(void)
+	?SetCNAPText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@W4TPhoneClippingDirection@CBubbleManager@@@Z @ 99 NONAME ; void TPhoneCmdParamCallHeaderData::SetCNAPText(class TDesC16 const &, enum CBubbleManager::TPhoneClippingDirection)
+	??1CPhoneLogger@@UAE@XZ @ 100 NONAME ; CPhoneLogger::~CPhoneLogger(void)
+	?Softkeys@TPhoneCmdParamGlobalNote@@QBEHXZ @ 101 NONAME ; int TPhoneCmdParamGlobalNote::Softkeys(void) const
+	??0TPhoneCmdParamMessageEditor@@QAE@XZ @ 102 NONAME ; TPhoneCmdParamMessageEditor::TPhoneCmdParamMessageEditor(void)
+	?SetCallState@TPhoneCmdParamCallStateData@@QAEXH@Z @ 103 NONAME ; void TPhoneCmdParamCallStateData::SetCallState(int)
+	?CallerText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 104 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::CallerText(void) const
+	?String@TPhoneCmdParamString@@QAEPAVTPtr16@@XZ @ 105 NONAME ; class TPtr16 * TPhoneCmdParamString::String(void)
+	?SetKey@TPhoneCmdParamKeyCapture@@QAEXW4TStdScanCode@@@Z @ 106 NONAME ; void TPhoneCmdParamKeyCapture::SetKey(enum TStdScanCode)
+	?IsExtraChar@CPhoneKeys@@SAHH@Z @ 107 NONAME ; int CPhoneKeys::IsExtraChar(int)
+	?SetDynMenu@TPhoneCmdParamDynMenu@@QAEXPAX@Z @ 108 NONAME ; void TPhoneCmdParamDynMenu::SetDynMenu(void *)
+	?IsSecondHashKey@CPhoneKeys@@SAHABVTDes16@@@Z @ 109 NONAME ; int CPhoneKeys::IsSecondHashKey(class TDes16 const &)
+	?SetCallerImageStatus@TPhoneCmdParamRingTone@@QAEXH@Z @ 110 NONAME ; void TPhoneCmdParamRingTone::SetCallerImageStatus(int)
+	?GetReal@CPhoneCenRepProxy@@QBEHABVTUid@@IAAN@Z @ 111 NONAME ; int CPhoneCenRepProxy::GetReal(class TUid const &, unsigned int, double &) const
+	?SetShortLabelText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 112 NONAME ; void TPhoneCmdParamCallHeaderData::SetShortLabelText(class TDesC16 const &)
+	?SetDialerController@TPhoneCmdParamCustomDialer@@QAEXPAVMPhoneDialerController@@@Z @ 113 NONAME ; void TPhoneCmdParamCustomDialer::SetDialerController(class MPhoneDialerController *)
+	?RingTone@TPhoneCmdParamRingTone@@QBEABVTDesC16@@XZ @ 114 NONAME ; class TDesC16 const & TPhoneCmdParamRingTone::RingTone(void) const
+	?TimeOut@TPhoneCmdParamQuery@@QBEHXZ @ 115 NONAME ; int TPhoneCmdParamQuery::TimeOut(void) const
+	?ShortLabelText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 116 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::ShortLabelText(void) const
+	?SetInteger@TPhoneCmdParamInteger@@QAEXH@Z @ 117 NONAME ; void TPhoneCmdParamInteger::SetInteger(int)
+	?SetMaskBitmap@TPhoneCmdParamBitmap@@QAEXPAVCFbsBitmap@@@Z @ 118 NONAME ; void TPhoneCmdParamBitmap::SetMaskBitmap(class CFbsBitmap *)
+	?SetTimeout@TPhoneCmdParamNote@@QAEXW4TTimeout@CAknNoteDialog@@@Z @ 119 NONAME ; void TPhoneCmdParamNote::SetTimeout(enum CAknNoteDialog::TTimeout)
+	?SetCustomMessage@TPhoneCmdParamAppInfo@@QAEXABVTDesC8@@@Z @ 120 NONAME ; void TPhoneCmdParamAppInfo::SetCustomMessage(class TDesC8 const &)
+	?BaseConstructL@CPhoneResourceResolverBase@@QAEXXZ @ 121 NONAME ; void CPhoneResourceResolverBase::BaseConstructL(void)
+	?SetTextResourceId@TPhoneCmdParamNote@@QAEXH@Z @ 122 NONAME ; void TPhoneCmdParamNote::SetTextResourceId(int)
+	?SetString@TPhoneCmdParamString@@QAEXPAVTPtr16@@@Z @ 123 NONAME ; void TPhoneCmdParamString::SetString(class TPtr16 *)
+	?SetAppUid@TPhoneCmdParamAppInfo@@QAEXABVTUid@@@Z @ 124 NONAME ; void TPhoneCmdParamAppInfo::SetAppUid(class TUid const &)
+	?String@TPhoneCmdParamSingleItemFetch@@QBEPAVTDes16@@XZ @ 125 NONAME ; class TDes16 * TPhoneCmdParamSingleItemFetch::String(void) const
+	?SetBTAccAvailable@TPhoneCmdParamAudioAvailability@@QAEXH@Z @ 126 NONAME ; void TPhoneCmdParamAudioAvailability::SetBTAccAvailable(int)
+	?IsTelephonyFeatureSupported@CPhoneCenRepProxy@@QAEHH@Z @ 127 NONAME ; int CPhoneCenRepProxy::IsTelephonyFeatureSupported(int)
+	?CallImageThemeFilePath@CPhoneCallThemeMonitor@@QBE?AVTPtrC16@@XZ @ 128 NONAME ; class TPtrC16 CPhoneCallThemeMonitor::CallImageThemeFilePath(void) const
+	?HasThumbnail@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 129 NONAME ; int TPhoneCmdParamCallHeaderData::HasThumbnail(void) const
+	?ClearBlackListNow@CPhoneClearBlacklist@@QAEXXZ @ 130 NONAME ; void CPhoneClearBlacklist::ClearBlackListNow(void)
+	?SetCipheringIndicatorAllowed@TPhoneCmdParamEmergencyCallHeaderData@@QAEXH@Z @ 131 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetCipheringIndicatorAllowed(int)
+	?SetCommandParamId@TPhoneCmdParamQuery@@QAEXW4TPhoneParamId@TPhoneCommandParam@@@Z @ 132 NONAME ; void TPhoneCmdParamQuery::SetCommandParamId(enum TPhoneCommandParam::TPhoneParamId)
+	??0TPhoneCmdParamEmergencyCallHeaderData@@QAE@XZ @ 133 NONAME ; TPhoneCmdParamEmergencyCallHeaderData::TPhoneCmdParamEmergencyCallHeaderData(void)
+	?After@CPhoneTimer@@QAEXVTTimeIntervalMicroSeconds32@@PAVMPhoneTimer@@@Z @ 134 NONAME ; void CPhoneTimer::After(class TTimeIntervalMicroSeconds32, class MPhoneTimer *)
+	?NewL@CPhoneLibraryContainer@@SAPAV1@XZ @ 135 NONAME ; class CPhoneLibraryContainer * CPhoneLibraryContainer::NewL(void)
+	?CreateL@CPhoneClearBlacklist@@SAPAV1@AAVRWsSession@@ABVRWindowBase@@@Z @ 136 NONAME ; class CPhoneClearBlacklist * CPhoneClearBlacklist::CreateL(class RWsSession &, class RWindowBase const &)
+	?SetVolume@TPhoneCmdParamRingTone@@QAEXH@Z @ 137 NONAME ; void TPhoneCmdParamRingTone::SetVolume(int)
+	??0TPhoneCmdParamString@@QAE@XZ @ 138 NONAME ; TPhoneCmdParamString::TPhoneCmdParamString(void)
+	?SetContactLink@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC8@@@Z @ 139 NONAME ; void TPhoneCmdParamCallHeaderData::SetContactLink(class TDesC8 const &)
+	??4TPhoneCmdParamQuery@@QAEAAV0@ABV0@@Z @ 140 NONAME ; class TPhoneCmdParamQuery & TPhoneCmdParamQuery::operator=(class TPhoneCmdParamQuery const &)
+	??0TPhoneCmdParamAudioAvailability@@QAE@XZ @ 141 NONAME ; TPhoneCmdParamAudioAvailability::TPhoneCmdParamAudioAvailability(void)
+	??0TPhoneCmdParamRingTone@@QAE@XZ @ 142 NONAME ; TPhoneCmdParamRingTone::TPhoneCmdParamRingTone(void)
+	?Observer@TPhoneCmdParamNumberEntryObserver@@QAE?AVTCallBack@@XZ @ 143 NONAME ; class TCallBack TPhoneCmdParamNumberEntryObserver::Observer(void)
+	?SetSoftkeys@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 144 NONAME ; void TPhoneCmdParamGlobalNote::SetSoftkeys(int)
+	??0CPhoneResourceResolverBase@@IAE@XZ @ 145 NONAME ; CPhoneResourceResolverBase::CPhoneResourceResolverBase(void)
+	?SetCallId@TPhoneCmdParamCallStateData@@QAEXH@Z @ 146 NONAME ; void TPhoneCmdParamCallStateData::SetCallId(int)
+	?MultipleInstances@TPhoneCmdParamAppInfo@@QBEHXZ @ 147 NONAME ; int TPhoneCmdParamAppInfo::MultipleInstances(void) const
+	?ItemTextArrayForListQuery@TPhoneCmdParamQuery@@QBEPAVMDesC16Array@@XZ @ 148 NONAME ; class MDesC16Array * TPhoneCmdParamQuery::ItemTextArrayForListQuery(void) const
+	?SetHeaderText@TPhoneCmdParamEmergencyCallHeaderData@@QAEXABVTDesC16@@@Z @ 149 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetHeaderText(class TDesC16 const &)
+	?SetContentCba@TPhoneCmdParamQuery@@QAEXH@Z @ 150 NONAME ; void TPhoneCmdParamQuery::SetContentCba(int)
+	?CaptureType@TPhoneCmdParamKeyCapture@@QBE?AW4TPhoneCaptureType@@XZ @ 151 NONAME ; enum TPhoneCaptureType TPhoneCmdParamKeyCapture::CaptureType(void) const
+	?SetQueryResourceId@TPhoneCmdParamQuery@@QAEXH@Z @ 152 NONAME ; void TPhoneCmdParamQuery::SetQueryResourceId(int)
+	?CancelNotify@CPhoneCenRepProxy@@QAEXPAVMPhoneCenRepObserver@@I@Z @ 153 NONAME ; void CPhoneCenRepProxy::CancelNotify(class MPhoneCenRepObserver *, unsigned int)
+	?Param@TPhoneCmdParamAppInfo@@QBEABVTDesC8@@XZ @ 154 NONAME ; class TDesC8 const & TPhoneCmdParamAppInfo::Param(void) const
+	??0CPhoneMethodLogger@@QAE@W4TPhoneUILoggingComponent@@VTPtrC16@@@Z @ 155 NONAME ; CPhoneMethodLogger::CPhoneMethodLogger(enum TPhoneUILoggingComponent, class TPtrC16)
+	?IsDtmfTone@CPhoneKeys@@SAHABUTKeyEvent@@W4TEventCode@@@Z @ 156 NONAME ; int CPhoneKeys::IsDtmfTone(struct TKeyEvent const &, enum TEventCode)
+	?SetMode@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 157 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetMode(int)
+	?NewL@CPhoneCallThemeMonitor@@SAPAV1@XZ @ 158 NONAME ; class CPhoneCallThemeMonitor * CPhoneCallThemeMonitor::NewL(void)
+	?SetCLIText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@W4TPhoneClippingDirection@CBubbleManager@@@Z @ 159 NONAME ; void TPhoneCmdParamCallHeaderData::SetCLIText(class TDesC16 const &, enum CBubbleManager::TPhoneClippingDirection)
+	?SetPhoneNumber@TPhoneCmdParamSpeedDial@@QAEXPAVTPtr16@@@Z @ 160 NONAME ; void TPhoneCmdParamSpeedDial::SetPhoneNumber(class TPtr16 *)
+	?SendKeyEnabled@TPhoneCmdParamQuery@@QBEHXZ @ 161 NONAME ; int TPhoneCmdParamQuery::SendKeyEnabled(void) const
+	?SetTitlePaneResourceId@TPhoneCmdParamSingleItemFetch@@QAEXH@Z @ 162 NONAME ; void TPhoneCmdParamSingleItemFetch::SetTitlePaneResourceId(int)
+	?Find@CPhoneCenRepProxy@@QBEHABVTUid@@KKAAV?$RArray@K@@@Z @ 163 NONAME ; int CPhoneCenRepProxy::Find(class TUid const &, unsigned long, unsigned long, class RArray<unsigned long> &) const
+	?SetLabelText@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 164 NONAME ; void TPhoneCmdParamCallHeaderData::SetLabelText(class TDesC16 const &)
+	?CNAPText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 165 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::CNAPText(void) const
+	?SetOwnPhoneNumberText@TPhoneCmdParamEmergencyCallHeaderData@@QAEXABVTDesC16@@@Z @ 166 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetOwnPhoneNumberText(class TDesC16 const &)
+	?Emergency@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 167 NONAME ; int TPhoneCmdParamIncallIndicatorData::Emergency(void) const
+	?SetCbaResourceId@TPhoneCmdParamSingleItemFetch@@QAEXH@Z @ 168 NONAME ; void TPhoneCmdParamSingleItemFetch::SetCbaResourceId(int)
+	?AppUid@TPhoneCmdParamAppInfo@@QBE?AVTUid@@XZ @ 169 NONAME ; class TUid TPhoneCmdParamAppInfo::AppUid(void) const
+	?CustomMessage@TPhoneCmdParamAppInfo@@QBEABVTDesC8@@XZ @ 170 NONAME ; class TDesC8 const & TPhoneCmdParamAppInfo::CustomMessage(void) const
+	?QueryResourceId@TPhoneCmdParamQuery@@QBEHXZ @ 171 NONAME ; int TPhoneCmdParamQuery::QueryResourceId(void) const
+	?SetRingTone@TPhoneCmdParamRingTone@@QAEXABVTDesC16@@@Z @ 172 NONAME ; void TPhoneCmdParamRingTone::SetRingTone(class TDesC16 const &)
+	?NotifyChangeL@CPhonePubSubProxy@@QAEXABVTUid@@IPAVMPhonePubSubObserver@@@Z @ 173 NONAME ; void CPhonePubSubProxy::NotifyChangeL(class TUid const &, unsigned int, class MPhonePubSubObserver *)
+	?SetEmergency@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 174 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetEmergency(int)
+	?SetDefaultCba@TPhoneCmdParamQuery@@QAEXH@Z @ 175 NONAME ; void TPhoneCmdParamQuery::SetDefaultCba(int)
+	?Type@TPhoneCmdParamTransEffect@@QBE?AW4TPhoneTransEffectType@@XZ @ 176 NONAME ; enum TPhoneTransEffectType TPhoneCmdParamTransEffect::Type(void) const
+	??0TPhoneCmdParamSfiData@@QAE@XZ @ 177 NONAME ; TPhoneCmdParamSfiData::TPhoneCmdParamSfiData(void)
+	??0TPhoneCmdParamCallHeaderData@@QAE@XZ @ 178 NONAME ; TPhoneCmdParamCallHeaderData::TPhoneCmdParamCallHeaderData(void)
+	??1CPhoneClearBlacklist@@UAE@XZ @ 179 NONAME ; CPhoneClearBlacklist::~CPhoneClearBlacklist(void)
+	?SetMute@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 180 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetMute(int)
+	?KeyCode@TPhoneCmdParamKeyCapture@@QBE?AW4TKeyCode@@XZ @ 181 NONAME ; enum TKeyCode TPhoneCmdParamKeyCapture::KeyCode(void) const
+	?IsNumberKey@CPhoneKeys@@SAHABUTKeyEvent@@W4TEventCode@@@Z @ 182 NONAME ; int CPhoneKeys::IsNumberKey(struct TKeyEvent const &, enum TEventCode)
+	?TextResourceId@TPhoneCmdParamGlobalNote@@QBEHXZ @ 183 NONAME ; int TPhoneCmdParamGlobalNote::TextResourceId(void) const
+	?SetCiphering@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 184 NONAME ; void TPhoneCmdParamCallHeaderData::SetCiphering(int)
+	?EnablePreconditionL@CPhoneRecoverySystem@@QAEXXZ @ 185 NONAME ; void CPhoneRecoverySystem::EnablePreconditionL(void)
+	?AddL@CPhoneRecoverySystem@@QAEHVTCallBack@@CW4TRecoveryState@CTeleRecoverySystem@@@Z @ 186 NONAME ; int CPhoneRecoverySystem::AddL(class TCallBack, signed char, enum CTeleRecoverySystem::TRecoveryState)
+	?SetLine2@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 187 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetLine2(int)
+	?SetAudioOutput@TPhoneCmdParamAudioOutput@@QAEXW4TPEAudioOutput@@@Z @ 188 NONAME ; void TPhoneCmdParamAudioOutput::SetAudioOutput(enum TPEAudioOutput)
+	?HeaderText@TPhoneCmdParamEmergencyCallHeaderData@@QBEABVTDesC16@@XZ @ 189 NONAME ; class TDesC16 const & TPhoneCmdParamEmergencyCallHeaderData::HeaderText(void) const
+	?CallImageThemeSettings@CPhoneCallThemeMonitor@@QBEHXZ @ 190 NONAME ; int CPhoneCallThemeMonitor::CallImageThemeSettings(void) const
+	?SetLocation@TPhoneCmdParamSpeedDial@@QAEXH@Z @ 191 NONAME ; void TPhoneCmdParamSpeedDial::SetLocation(int)
+	??0TPhoneCmdParamTransEffect@@QAE@XZ @ 192 NONAME ; TPhoneCmdParamTransEffect::TPhoneCmdParamTransEffect(void)
+	?Number@TPhoneCmdParamSfiData@@QBEABVTDesC16@@XZ @ 193 NONAME ; class TDesC16 const & TPhoneCmdParamSfiData::Number(void) const
+	?OwnPhoneNumberText@TPhoneCmdParamEmergencyCallHeaderData@@QBEABVTDesC16@@XZ @ 194 NONAME ; class TDesC16 const & TPhoneCmdParamEmergencyCallHeaderData::OwnPhoneNumberText(void) const
+	?QueryPrompt@TPhoneCmdParamQuery@@QBEABVTDesC16@@XZ @ 195 NONAME ; class TDesC16 const & TPhoneCmdParamQuery::QueryPrompt(void) const
+	?SetQueryPrompt@TPhoneCmdParamQuery@@QAEXABVTDesC16@@@Z @ 196 NONAME ; void TPhoneCmdParamQuery::SetQueryPrompt(class TDesC16 const &)
+	?NewL@CPhoneQwertyHandler@@SAPAV1@XZ @ 197 NONAME ; class CPhoneQwertyHandler * CPhoneQwertyHandler::NewL(void)
+	?IsNumericKey@CPhoneKeys@@SAHABUTKeyEvent@@W4TEventCode@@@Z @ 198 NONAME ; int CPhoneKeys::IsNumericKey(struct TKeyEvent const &, enum TEventCode)
+	?SetCaptureType@TPhoneCmdParamKeyCapture@@QAEXW4TPhoneCaptureType@@@Z @ 199 NONAME ; void TPhoneCmdParamKeyCapture::SetCaptureType(enum TPhoneCaptureType)
+	?ViewUid@TPhoneCmdParamAppInfo@@QBE?AVTUid@@XZ @ 200 NONAME ; class TUid TPhoneCmdParamAppInfo::ViewUid(void) const
+	?CallFlag@TPhoneCmdParamCallHeaderData@@QBEKXZ @ 201 NONAME ; unsigned long TPhoneCmdParamCallHeaderData::CallFlag(void) const
+	?SetLabelText@TPhoneCmdParamEmergencyCallHeaderData@@QAEXABVTDesC16@@@Z @ 202 NONAME ; void TPhoneCmdParamEmergencyCallHeaderData::SetLabelText(class TDesC16 const &)
+	??0TPhoneCmdParamSpeedDial@@QAE@XZ @ 203 NONAME ; TPhoneCmdParamSpeedDial::TPhoneCmdParamSpeedDial(void)
+	?IsCallerText@TPhoneCmdParamRingTone@@QAEHXZ @ 204 NONAME ; int TPhoneCmdParamRingTone::IsCallerText(void)
+	?SetBitmap@TPhoneCmdParamBitmap@@QAEXPAVCFbsBitmap@@@Z @ 205 NONAME ; void TPhoneCmdParamBitmap::SetBitmap(class CFbsBitmap *)
+	?SetNumber@TPhoneCmdParamSfiData@@QAEXABVTDesC16@@@Z @ 206 NONAME ; void TPhoneCmdParamSfiData::SetNumber(class TDesC16 const &)
+	?Location@TPhoneCmdParamSpeedDial@@QAEHXZ @ 207 NONAME ; int TPhoneCmdParamSpeedDial::Location(void)
+	?CipheringIndicatorAllowed@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 208 NONAME ; int TPhoneCmdParamCallHeaderData::CipheringIndicatorAllowed(void) const
+	?Name@TPhoneCmdParamSfiData@@QBEABVTDesC16@@XZ @ 209 NONAME ; class TDesC16 const & TPhoneCmdParamSfiData::Name(void) const
+	??0TPhoneCmdParamQuery@@QAE@ABV0@@Z @ 210 NONAME ; TPhoneCmdParamQuery::TPhoneCmdParamQuery(class TPhoneCmdParamQuery const &)
+	?CallState@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 211 NONAME ; int TPhoneCmdParamCallHeaderData::CallState(void) const
+	??0TPhoneCmdParamIncallIndicatorData@@QAE@XZ @ 212 NONAME ; TPhoneCmdParamIncallIndicatorData::TPhoneCmdParamIncallIndicatorData(void)
+	?Picture@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 213 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::Picture(void) const
+	?SetCallThemeSettingsObserver@CPhoneCallThemeMonitor@@QAEXPAVMPhoneCallThemeSettingsObserver@@@Z @ 214 NONAME ; void CPhoneCallThemeMonitor::SetCallThemeSettingsObserver(class MPhoneCallThemeSettingsObserver *)
+	?ServiceId@TPhoneCmdParamCallHeaderData@@QBEKXZ @ 215 NONAME ; unsigned long TPhoneCmdParamCallHeaderData::ServiceId(void) const
+	?LabelText@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 216 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::LabelText(void) const
+	?Overflow@CPhoneLogger@@EAEXAAVTDes16@@@Z @ 217 NONAME ; void CPhoneLogger::Overflow(class TDes16 &)
+	?SetServiceId@TPhoneCmdParamSpeedDial@@QAEXI@Z @ 218 NONAME ; void TPhoneCmdParamSpeedDial::SetServiceId(unsigned int)
+	?SetKeyEvent@TPhoneCmdParamKeyEvent@@QAEXABUTKeyEvent@@@Z @ 219 NONAME ; void TPhoneCmdParamKeyEvent::SetKeyEvent(struct TKeyEvent const &)
+	?Instance@CPhonePubSubProxy@@SAPAV1@XZ @ 220 NONAME ; class CPhonePubSubProxy * CPhonePubSubProxy::Instance(void)
+	?ResourceId@TPhoneCmdParamNote@@QBEHXZ @ 221 NONAME ; int TPhoneCmdParamNote::ResourceId(void) const
+	?CipheringIndicatorAllowed@TPhoneCmdParamEmergencyCallHeaderData@@QBEHXZ @ 222 NONAME ; int TPhoneCmdParamEmergencyCallHeaderData::CipheringIndicatorAllowed(void) const
+	?CancelAllNotifies@CPhoneCenRepProxy@@SAXPAVMPhoneCenRepObserver@@@Z @ 223 NONAME ; void CPhoneCenRepProxy::CancelAllNotifies(class MPhoneCenRepObserver *)
+	??1CPhoneQwertyHandler@@UAE@XZ @ 224 NONAME ; CPhoneQwertyHandler::~CPhoneQwertyHandler(void)
+	?TextResourceId@TPhoneCmdParamNote@@QBEHXZ @ 225 NONAME ; int TPhoneCmdParamNote::TextResourceId(void) const
+	?SetRemotePhoneNumber@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 226 NONAME ; void TPhoneCmdParamCallHeaderData::SetRemotePhoneNumber(class TDesC16 const &)
+	?CipheringIndicatorAllowed@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 227 NONAME ; int TPhoneCmdParamIncallIndicatorData::CipheringIndicatorAllowed(void) const
+	??0TPhoneCmdParamCallStateData@@QAE@XZ @ 228 NONAME ; TPhoneCmdParamCallStateData::TPhoneCmdParamCallStateData(void)
+	?SetKeyCode@TPhoneCmdParamKeyCapture@@QAEXW4TKeyCode@@@Z @ 229 NONAME ; void TPhoneCmdParamKeyCapture::SetKeyCode(enum TKeyCode)
+	?CustomMessageId@TPhoneCmdParamAppInfo@@QBE?AVTUid@@XZ @ 230 NONAME ; class TUid TPhoneCmdParamAppInfo::CustomMessageId(void) const
+	?RemotePhoneNumber@TPhoneCmdParamCallHeaderData@@QBEABVTDesC16@@XZ @ 231 NONAME ; class TDesC16 const & TPhoneCmdParamCallHeaderData::RemotePhoneNumber(void) const
+	?SetType@TPhoneCmdParamNote@@QAEXW4TPhoneNoteType@@@Z @ 232 NONAME ; void TPhoneCmdParamNote::SetType(enum TPhoneNoteType)
+	?Instance@CPhoneClearBlacklist@@SAPAV1@XZ @ 233 NONAME ; class CPhoneClearBlacklist * CPhoneClearBlacklist::Instance(void)
+	?TextToSay@TPhoneCmdParamRingTone@@QBEABVTDesC16@@XZ @ 234 NONAME ; class TDesC16 const & TPhoneCmdParamRingTone::TextToSay(void) const
+	?Type@TPhoneCmdParamNote@@QBE?AW4TPhoneNoteType@@XZ @ 235 NONAME ; enum TPhoneNoteType TPhoneCmdParamNote::Type(void) const
+	??0TPhoneCmdParamReconnectQuery@@QAE@AAVMCaUiReconnectQueryObserver@@@Z @ 236 NONAME ; TPhoneCmdParamReconnectQuery::TPhoneCmdParamReconnectQuery(class MCaUiReconnectQueryObserver &)
+	?SetCallFlag@TPhoneCmdParamCallHeaderData@@QAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 237 NONAME ; void TPhoneCmdParamCallHeaderData::SetCallFlag(enum CBubbleManager::TPhoneCallTypeFlags)
+	?SetPicture@TPhoneCmdParamCallHeaderData@@QAEXABVTDesC16@@@Z @ 238 NONAME ; void TPhoneCmdParamCallHeaderData::SetPicture(class TDesC16 const &)
+	?Integer@TPhoneCmdParamInteger@@QBEHXZ @ 239 NONAME ; int TPhoneCmdParamInteger::Integer(void) const
+	?Mode@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 240 NONAME ; int TPhoneCmdParamIncallIndicatorData::Mode(void) const
+	?SetText@TPhoneCmdParamNote@@QAEXABVTDesC16@@@Z @ 241 NONAME ; void TPhoneCmdParamNote::SetText(class TDesC16 const &)
+	?SetCallerTextStatus@TPhoneCmdParamRingTone@@QAEXH@Z @ 242 NONAME ; void TPhoneCmdParamRingTone::SetCallerTextStatus(int)
+	?IsWiredAccAvailable@TPhoneCmdParamAudioAvailability@@QBEHXZ @ 243 NONAME ; int TPhoneCmdParamAudioAvailability::IsWiredAccAvailable(void) const
+	?SetWaitForReady@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 244 NONAME ; void TPhoneCmdParamGlobalNote::SetWaitForReady(int)
+	??0TPhoneCmdParamBoolean@@QAE@XZ @ 245 NONAME ; TPhoneCmdParamBoolean::TPhoneCmdParamBoolean(void)
+	?QueryCommandObserver@TPhoneCmdParamQuery@@QAEPAVMPhoneQueryCommandObserver@@XZ @ 246 NONAME ; class MPhoneQueryCommandObserver * TPhoneCmdParamQuery::QueryCommandObserver(void)
+	?DataText@TPhoneCmdParamQuery@@QBEPAVTDes16@@XZ @ 247 NONAME ; class TDes16 * TPhoneCmdParamQuery::DataText(void) const
+	?SetType@TPhoneCmdParamSingleItemFetch@@QAEXW4TFetchType@CPhCntSingleItemFetch@@@Z @ 248 NONAME ; void TPhoneCmdParamSingleItemFetch::SetType(enum CPhCntSingleItemFetch::TFetchType)
+	?SetReal@CPhoneCenRepProxy@@QAEHABVTUid@@IN@Z @ 249 NONAME ; int CPhoneCenRepProxy::SetReal(class TUid const &, unsigned int, double)
+	??0TPhoneCmdParamCustomDialer@@QAE@XZ @ 250 NONAME ; TPhoneCmdParamCustomDialer::TPhoneCmdParamCustomDialer(void)
+	??1CPhonePubSubProxy@@UAE@XZ @ 251 NONAME ; CPhonePubSubProxy::~CPhonePubSubProxy(void)
+	?NumericKeyCode@CPhoneQwertyHandler@@QAEHABUTKeyEvent@@@Z @ 252 NONAME ; int CPhoneQwertyHandler::NumericKeyCode(struct TKeyEvent const &)
+	?SetMessageData@TPhoneCmdParamMessageEditor@@QAEXPAVCMessageData@@@Z @ 253 NONAME ; void TPhoneCmdParamMessageEditor::SetMessageData(class CMessageData *)
+	??0TPhoneCmdParamNote@@QAE@XZ @ 254 NONAME ; TPhoneCmdParamNote::TPhoneCmdParamNote(void)
+	?Volume@TPhoneCmdParamRingTone@@QBEHXZ @ 255 NONAME ; int TPhoneCmdParamRingTone::Volume(void) const
+	?SetItemTextArrayForListQuery@TPhoneCmdParamQuery@@QAEXAAVMDesC16Array@@@Z @ 256 NONAME ; void TPhoneCmdParamQuery::SetItemTextArrayForListQuery(class MDesC16Array &)
+	?Type@TPhoneCmdParamRingTone@@QBE?AW4TPhoneRingToneType@@XZ @ 257 NONAME ; enum TPhoneRingToneType TPhoneCmdParamRingTone::Type(void) const
+	?Key@TPhoneCmdParamKeyCapture@@QBE?AW4TStdScanCode@@XZ @ 258 NONAME ; enum TStdScanCode TPhoneCmdParamKeyCapture::Key(void) const
+	?LabelText@TPhoneCmdParamEmergencyCallHeaderData@@QBEABVTDesC16@@XZ @ 259 NONAME ; class TDesC16 const & TPhoneCmdParamEmergencyCallHeaderData::LabelText(void) const
+	?Ciphering@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 260 NONAME ; int TPhoneCmdParamIncallIndicatorData::Ciphering(void) const
+	?SetQueryCommandObserver@TPhoneCmdParamQuery@@QAEXAAVMPhoneQueryCommandObserver@@@Z @ 261 NONAME ; void TPhoneCmdParamQuery::SetQueryCommandObserver(class MPhoneQueryCommandObserver &)
+	?IsPhoneUIFeatureSupported@CPhoneCenRepProxy@@QAEHH@Z @ 262 NONAME ; int CPhoneCenRepProxy::IsPhoneUIFeatureSupported(int)
+	?DefaultCba@TPhoneCmdParamQuery@@QBEHXZ @ 263 NONAME ; int TPhoneCmdParamQuery::DefaultCba(void) const
+	?CallState@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 264 NONAME ; int TPhoneCmdParamIncallIndicatorData::CallState(void) const
+	??0TPhoneCmdParamNumberEntryObserver@@QAE@XZ @ 265 NONAME ; TPhoneCmdParamNumberEntryObserver::TPhoneCmdParamNumberEntryObserver(void)
+	?MessageData@TPhoneCmdParamMessageEditor@@QBEPAVCMessageData@@XZ @ 266 NONAME ; class CMessageData * TPhoneCmdParamMessageEditor::MessageData(void) const
+	?SetLine2@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 267 NONAME ; void TPhoneCmdParamCallHeaderData::SetLine2(int)
+	?FetchValuesFromCenRepL@CPhoneCenRepProxy@@QAEXAAVTPhoneCmdParamAppInfo@@W4TKeyCode@@PAVHBufC8@@AAH@Z @ 268 NONAME ; void CPhoneCenRepProxy::FetchValuesFromCenRepL(class TPhoneCmdParamAppInfo &, enum TKeyCode, class HBufC8 *, int &)
+	?CNAPTextClippingDirection@TPhoneCmdParamCallHeaderData@@QBE?AW4TPhoneClippingDirection@CBubbleManager@@XZ @ 269 NONAME ; enum CBubbleManager::TPhoneClippingDirection TPhoneCmdParamCallHeaderData::CNAPTextClippingDirection(void) const
+	?ParticipantCLI@TPhoneCmdParamCallHeaderData@@QBE?AW4TPhoneParticipantListCLI@1@XZ @ 270 NONAME ; enum TPhoneCmdParamCallHeaderData::TPhoneParticipantListCLI TPhoneCmdParamCallHeaderData::ParticipantCLI(void) const
+	?Thumbnail@TPhoneCmdParamCallHeaderData@@QBEPAVCFbsBitmap@@XZ @ 271 NONAME ; class CFbsBitmap * TPhoneCmdParamCallHeaderData::Thumbnail(void) const
+	?SetTimeOut@TPhoneCmdParamQuery@@QAEXH@Z @ 272 NONAME ; void TPhoneCmdParamQuery::SetTimeOut(int)
+	?Boolean@TPhoneCmdParamBoolean@@QBEHXZ @ 273 NONAME ; int TPhoneCmdParamBoolean::Boolean(void) const
+	?LogMsgFromPhoneUIToPE@CPhoneLogger@@QAEXHH@Z @ 274 NONAME ; void CPhoneLogger::LogMsgFromPhoneUIToPE(int, int)
+	?SetCustomMessageId@TPhoneCmdParamAppInfo@@QAEXABVTUid@@@Z @ 275 NONAME ; void TPhoneCmdParamAppInfo::SetCustomMessageId(class TUid const &)
+	?ResolveResourceID@CPhoneResourceResolverBase@@UBEHABH@Z @ 276 NONAME ; int CPhoneResourceResolverBase::ResolveResourceID(int const &) const
+	?SetName@TPhoneCmdParamSfiData@@QAEXABVTDesC16@@@Z @ 277 NONAME ; void TPhoneCmdParamSfiData::SetName(class TDesC16 const &)
+	?TitlePaneResourceId@TPhoneCmdParamSingleItemFetch@@QBEHXZ @ 278 NONAME ; int TPhoneCmdParamSingleItemFetch::TitlePaneResourceId(void) const
+	?SetType@TPhoneCmdParamGlobalNote@@QAEXW4TAknGlobalNoteType@@@Z @ 279 NONAME ; void TPhoneCmdParamGlobalNote::SetType(enum TAknGlobalNoteType)
+	?IncludeVideoCallOption@TPhoneCmdParamReconnectQuery@@QBEHXZ @ 280 NONAME ; int TPhoneCmdParamReconnectQuery::IncludeVideoCallOption(void) const
+	?SetLittleBubbleVisible@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 281 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetLittleBubbleVisible(int)
+	?Ciphering@TPhoneCmdParamCallHeaderData@@QBEHXZ @ 282 NONAME ; int TPhoneCmdParamCallHeaderData::Ciphering(void) const
+	?SetType@TPhoneCmdParamRingTone@@QAEXW4TPhoneRingToneType@@@Z @ 283 NONAME ; void TPhoneCmdParamRingTone::SetType(enum TPhoneRingToneType)
+	?ResourceId@TPhoneCmdParamDynMenu@@QBEHXZ @ 284 NONAME ; int TPhoneCmdParamDynMenu::ResourceId(void) const
+	?SetCipheringIndicatorAllowed@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 285 NONAME ; void TPhoneCmdParamCallHeaderData::SetCipheringIndicatorAllowed(int)
+	?SetWaitTime@TPhoneCmdParamProgressNote@@QAEXVTTimeIntervalMicroSeconds32@@@Z @ 286 NONAME ; void TPhoneCmdParamProgressNote::SetWaitTime(class TTimeIntervalMicroSeconds32)
+	?Ciphering@TPhoneCmdParamEmergencyCallHeaderData@@QBEHXZ @ 287 NONAME ; int TPhoneCmdParamEmergencyCallHeaderData::Ciphering(void) const
+	??1CPhoneCallThemeMonitor@@UAE@XZ @ 288 NONAME ; CPhoneCallThemeMonitor::~CPhoneCallThemeMonitor(void)
+	?SetNumberType@TPhoneCmdParamCallHeaderData@@QAEXH@Z @ 289 NONAME ; void TPhoneCmdParamCallHeaderData::SetNumberType(int)
+	?Mute@TPhoneCmdParamIncallIndicatorData@@QBEHXZ @ 290 NONAME ; int TPhoneCmdParamIncallIndicatorData::Mute(void) const
+	?IsQwertyInput@CPhoneQwertyHandler@@QBEHXZ @ 291 NONAME ; int CPhoneQwertyHandler::IsQwertyInput(void) const
+	?SetBoolean@TPhoneCmdParamBoolean@@QAEXH@Z @ 292 NONAME ; void TPhoneCmdParamBoolean::SetBoolean(int)
+	?IsTelephonyFeatureSupported@CPhoneResourceResolverBase@@MBEHH@Z @ 293 NONAME ; int CPhoneResourceResolverBase::IsTelephonyFeatureSupported(int) const
+	?Instance@CPhoneMainErrorMessagesHandler@@SAPAV1@XZ @ 294 NONAME ; class CPhoneMainErrorMessagesHandler * CPhoneMainErrorMessagesHandler::Instance(void)
+	?SetViewUid@TPhoneCmdParamAppInfo@@QAEXABVTUid@@@Z @ 295 NONAME ; void TPhoneCmdParamAppInfo::SetViewUid(class TUid const &)
+	?SetServiceId@TPhoneCmdParamCallHeaderData@@QAEXK@Z @ 296 NONAME ; void TPhoneCmdParamCallHeaderData::SetServiceId(unsigned long)
+	?Instance@CPhoneCenRepProxy@@SAPAV1@XZ @ 297 NONAME ; class CPhoneCenRepProxy * CPhoneCenRepProxy::Instance(void)
+	?AddCallFlag@TPhoneCmdParamCallHeaderData@@QAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 298 NONAME ; void TPhoneCmdParamCallHeaderData::AddCallFlag(enum CBubbleManager::TPhoneCallTypeFlags)
+	?SetQueryType@TPhoneCmdParamQuery@@QAEXW4TPhoneQueryType@@@Z @ 299 NONAME ; void TPhoneCmdParamQuery::SetQueryType(enum TPhoneQueryType)
+	?Value@CPhonePubSubProxy@@QAEHABVTUid@@I@Z @ 300 NONAME ; int CPhonePubSubProxy::Value(class TUid const &, unsigned int)
+	?SetWiredAccAvailable@TPhoneCmdParamAudioAvailability@@QAEXH@Z @ 301 NONAME ; void TPhoneCmdParamAudioAvailability::SetWiredAccAvailable(int)
+	?SetString@TPhoneCmdParamSingleItemFetch@@QAEXPAVTDes16@@@Z @ 302 NONAME ; void TPhoneCmdParamSingleItemFetch::SetString(class TDes16 *)
+	??0TPhoneCmdParamAudioOutput@@QAE@XZ @ 303 NONAME ; TPhoneCmdParamAudioOutput::TPhoneCmdParamAudioOutput(void)
+	?IsCallerImage@TPhoneCmdParamRingTone@@QAEHXZ @ 304 NONAME ; int TPhoneCmdParamRingTone::IsCallerImage(void)
+	??0TPhoneCmdParamQuery@@QAE@XZ @ 305 NONAME ; TPhoneCmdParamQuery::TPhoneCmdParamQuery(void)
+	?Instance@CPhoneMainResourceResolver@@SAPAV1@XZ @ 306 NONAME ; class CPhoneMainResourceResolver * CPhoneMainResourceResolver::Instance(void)
+	?ServiceId@TPhoneCmdParamSpeedDial@@QBEIXZ @ 307 NONAME ; unsigned int TPhoneCmdParamSpeedDial::ServiceId(void) const
+	?SetPhoneNumber@TPhoneCmdParamReconnectQuery@@QAEXVTPtrC16@@@Z @ 308 NONAME ; void TPhoneCmdParamReconnectQuery::SetPhoneNumber(class TPtrC16)
+	??1CPhoneLibraryContainer@@UAE@XZ @ 309 NONAME ; CPhoneLibraryContainer::~CPhoneLibraryContainer(void)
+	?ClearBlackListOnNextKey@CPhoneClearBlacklist@@QAEXXZ @ 310 NONAME ; void CPhoneClearBlacklist::ClearBlackListOnNextKey(void)
+	?Tone@TPhoneCmdParamQuery@@QBEHXZ @ 311 NONAME ; int TPhoneCmdParamQuery::Tone(void) const
+	?SetNumberType@TPhoneCmdParamSpeedDial@@QAEXW4TPhoneNumberType@@@Z @ 312 NONAME ; void TPhoneCmdParamSpeedDial::SetNumberType(enum TPhoneNumberType)
+	?SetRingingType@TPhoneCmdParamRingTone@@QAEXH@Z @ 313 NONAME ; void TPhoneCmdParamRingTone::SetRingingType(int)
+	?CbaResourceId@TPhoneCmdParamSingleItemFetch@@QBEHXZ @ 314 NONAME ; int TPhoneCmdParamSingleItemFetch::CbaResourceId(void) const
+	?SetCiphering@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 315 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetCiphering(int)
+	?SetCipheringIndicatorAllowed@TPhoneCmdParamIncallIndicatorData@@QAEXH@Z @ 316 NONAME ; void TPhoneCmdParamIncallIndicatorData::SetCipheringIndicatorAllowed(int)
+	?AudioOutput@TPhoneCmdParamAudioOutput@@QBE?AW4TPEAudioOutput@@XZ @ 317 NONAME ; enum TPEAudioOutput TPhoneCmdParamAudioOutput::AudioOutput(void) const
+	?SetResourceId@TPhoneCmdParamProgressNote@@QAEXH@Z @ 318 NONAME ; void TPhoneCmdParamProgressNote::SetResourceId(int)
+	??0TPhoneCmdParamInteger@@QAE@XZ @ 319 NONAME ; TPhoneCmdParamInteger::TPhoneCmdParamInteger(void)
+	?Type@TPhoneCmdParamSingleItemFetch@@QAE?AW4TFetchType@CPhCntSingleItemFetch@@XZ @ 320 NONAME ; enum CPhCntSingleItemFetch::TFetchType TPhoneCmdParamSingleItemFetch::Type(void)
+	?SetType@TPhoneCmdParamTransEffect@@QAEXW4TPhoneTransEffectType@@@Z @ 321 NONAME ; void TPhoneCmdParamTransEffect::SetType(enum TPhoneTransEffectType)
+	?Bitmap@TPhoneCmdParamBitmap@@QBEPAVCFbsBitmap@@XZ @ 322 NONAME ; class CFbsBitmap * TPhoneCmdParamBitmap::Bitmap(void) const
+	?SetTone@TPhoneCmdParamGlobalNote@@QAEXH@Z @ 323 NONAME ; void TPhoneCmdParamGlobalNote::SetTone(int)
+	?After@CPhoneTimer@@QAEXVTTimeIntervalMicroSeconds32@@VTCallBack@@@Z @ 324 NONAME ; void CPhoneTimer::After(class TTimeIntervalMicroSeconds32, class TCallBack)
+	?ContactMatcher@TPhoneCmdParamReconnectQuery@@QBEPAVCPhCntMatcher@@XZ @ 325 NONAME ; class CPhCntMatcher * TPhoneCmdParamReconnectQuery::ContactMatcher(void) const
+	?AddQwertyModeObserverL@CPhoneQwertyHandler@@QAEXAAVMPhoneQwertyModeObserver@@@Z @ 326 NONAME ; void CPhoneQwertyHandler::AddQwertyModeObserverL(class MPhoneQwertyModeObserver &)
 
--- a/phoneapp/phoneuiutils/eabi/phoneuiutilsu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/eabi/phoneuiutilsu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -26,418 +26,395 @@
 	_ZN12CPhoneLoggerD0Ev @ 25 NONAME
 	_ZN12CPhoneLoggerD1Ev @ 26 NONAME
 	_ZN12CPhoneLoggerD2Ev @ 27 NONAME
-	_ZN13CPhoneStorage14IsScreenLockedEv @ 28 NONAME
-	_ZN13CPhoneStorage15SetScreenLockedEi @ 29 NONAME
-	_ZN13CPhoneStorage19NeedToEnableKeylockEv @ 30 NONAME
-	_ZN13CPhoneStorage20ResetBlockedKeysListEv @ 31 NONAME
-	_ZN13CPhoneStorage22AppendBlockedKeysListLE12TStdScanCode @ 32 NONAME
-	_ZN13CPhoneStorage22IsBlockedKeysListEmptyEv @ 33 NONAME
-	_ZN13CPhoneStorage22SetNeedToEnableKeylockEi @ 34 NONAME
-	_ZN13CPhoneStorage4NewLEv @ 35 NONAME
-	_ZN13CPhoneStorageD0Ev @ 36 NONAME
-	_ZN13CPhoneStorageD1Ev @ 37 NONAME
-	_ZN13CPhoneStorageD2Ev @ 38 NONAME
-	_ZN17CPhoneCenRepProxy12CancelNotifyEP20MPhoneCenRepObserverj @ 39 NONAME
-	_ZN17CPhoneCenRepProxy13NotifyChangeLERK4TUidjP20MPhoneCenRepObserver @ 40 NONAME
-	_ZN17CPhoneCenRepProxy17CancelAllNotifiesEP20MPhoneCenRepObserver @ 41 NONAME
-	_ZN17CPhoneCenRepProxy22FetchValuesFromCenRepLER21TPhoneCmdParamAppInfo8TKeyCodeP6HBufC8Ri @ 42 NONAME
-	_ZN17CPhoneCenRepProxy25IsPhoneUIFeatureSupportedEi @ 43 NONAME
-	_ZN17CPhoneCenRepProxy27IsTelephonyFeatureSupportedEi @ 44 NONAME
-	_ZN17CPhoneCenRepProxy6SetIntERK4TUidji @ 45 NONAME
-	_ZN17CPhoneCenRepProxy7SetRealERK4TUidjd @ 46 NONAME
-	_ZN17CPhoneCenRepProxy8InstanceEv @ 47 NONAME
-	_ZN17CPhoneCenRepProxy9SetStringERK4TUidjRK7TDesC16 @ 48 NONAME
-	_ZN17CPhoneCenRepProxyD0Ev @ 49 NONAME
-	_ZN17CPhoneCenRepProxyD1Ev @ 50 NONAME
-	_ZN17CPhoneCenRepProxyD2Ev @ 51 NONAME
-	_ZN17CPhonePubSubProxy13NotifyChangeLERK4TUidjP20MPhonePubSubObserver @ 52 NONAME
-	_ZN17CPhonePubSubProxy19ChangePropertyValueERK4TUidji @ 53 NONAME
-	_ZN17CPhonePubSubProxy22CancelAllNotificationsEP20MPhonePubSubObserver @ 54 NONAME
-	_ZN17CPhonePubSubProxy5ValueERK4TUidj @ 55 NONAME
-	_ZN17CPhonePubSubProxy8InstanceEv @ 56 NONAME
-	_ZN17CPhonePubSubProxyD0Ev @ 57 NONAME
-	_ZN17CPhonePubSubProxyD1Ev @ 58 NONAME
-	_ZN17CPhonePubSubProxyD2Ev @ 59 NONAME
-	_ZN18CPhoneMethodLoggerC1E24TPhoneUILoggingComponent7TPtrC16 @ 60 NONAME
-	_ZN18CPhoneMethodLoggerC2E24TPhoneUILoggingComponent7TPtrC16 @ 61 NONAME
-	_ZN18CPhoneMethodLoggerD0Ev @ 62 NONAME
-	_ZN18CPhoneMethodLoggerD1Ev @ 63 NONAME
-	_ZN18CPhoneMethodLoggerD2Ev @ 64 NONAME
-	_ZN18TPhoneCmdParamNote10SetTimeoutEN14CAknNoteDialog8TTimeoutE @ 65 NONAME
-	_ZN18TPhoneCmdParamNote13SetResourceIdEi @ 66 NONAME
-	_ZN18TPhoneCmdParamNote17SetTextResourceIdEi @ 67 NONAME
-	_ZN18TPhoneCmdParamNote7SetTextERK7TDesC16 @ 68 NONAME
-	_ZN18TPhoneCmdParamNote7SetToneEN14CAknNoteDialog5TToneE @ 69 NONAME
-	_ZN18TPhoneCmdParamNote7SetTypeE14TPhoneNoteType @ 70 NONAME
-	_ZN18TPhoneCmdParamNoteC1Ev @ 71 NONAME
-	_ZN18TPhoneCmdParamNoteC2Ev @ 72 NONAME
-	_ZN18TPhoneCommandParamC1Ev @ 73 NONAME
-	_ZN18TPhoneCommandParamC2Ev @ 74 NONAME
-	_ZN19CPhoneQwertyHandler14NumericKeyCodeERK9TKeyEvent @ 75 NONAME
-	_ZN19CPhoneQwertyHandler4NewLEv @ 76 NONAME
-	_ZN19CPhoneQwertyHandlerD0Ev @ 77 NONAME
-	_ZN19CPhoneQwertyHandlerD1Ev @ 78 NONAME
-	_ZN19CPhoneQwertyHandlerD2Ev @ 79 NONAME
-	_ZN19TPhoneCmdParamQuery10SetTimeOutEi @ 80 NONAME
-	_ZN19TPhoneCmdParamQuery11SetDataTextEP6TDes16 @ 81 NONAME
-	_ZN19TPhoneCmdParamQuery12SetQueryTypeE15TPhoneQueryType @ 82 NONAME
-	_ZN19TPhoneCmdParamQuery13SetContentCbaEi @ 83 NONAME
-	_ZN19TPhoneCmdParamQuery13SetDefaultCbaEi @ 84 NONAME
-	_ZN19TPhoneCmdParamQuery14SetQueryPromptERK7TDesC16 @ 85 NONAME
-	_ZN19TPhoneCmdParamQuery17SetCommandParamIdEN18TPhoneCommandParam13TPhoneParamIdE @ 86 NONAME
-	_ZN19TPhoneCmdParamQuery17SetSendKeyEnabledEi @ 87 NONAME
-	_ZN19TPhoneCmdParamQuery18SetQueryResourceIdEi @ 88 NONAME
-	_ZN19TPhoneCmdParamQuery20QueryCommandObserverEv @ 89 NONAME
-	_ZN19TPhoneCmdParamQuery20SetCbaCommandMappingEii @ 90 NONAME
-	_ZN19TPhoneCmdParamQuery23SetQueryCommandObserverER26MPhoneQueryCommandObserver @ 91 NONAME
-	_ZN19TPhoneCmdParamQuery26SetCustomCommandForTimeOutEi @ 92 NONAME
-	_ZN19TPhoneCmdParamQuery28SetItemTextArrayForListQueryER12MDesC16Array @ 93 NONAME
-	_ZN19TPhoneCmdParamQuery7SetToneEi @ 94 NONAME
-	_ZN19TPhoneCmdParamQueryC1ERKS_ @ 95 NONAME
-	_ZN19TPhoneCmdParamQueryC1Ev @ 96 NONAME
-	_ZN19TPhoneCmdParamQueryC2ERKS_ @ 97 NONAME
-	_ZN19TPhoneCmdParamQueryC2Ev @ 98 NONAME
-	_ZN19TPhoneCmdParamQueryaSERKS_ @ 99 NONAME
-	_ZN20CPhoneClearBlacklist17ClearBlackListNowEv @ 100 NONAME
-	_ZN20CPhoneClearBlacklist23ClearBlackListOnNextKeyEv @ 101 NONAME
-	_ZN20CPhoneClearBlacklist7CreateLER10RWsSessionRK11RWindowBase @ 102 NONAME
-	_ZN20CPhoneClearBlacklist8InstanceEv @ 103 NONAME
-	_ZN20CPhoneClearBlacklistD0Ev @ 104 NONAME
-	_ZN20CPhoneClearBlacklistD1Ev @ 105 NONAME
-	_ZN20CPhoneClearBlacklistD2Ev @ 106 NONAME
-	_ZN20CPhoneRecoverySystem10RecoverNowEiai @ 107 NONAME
-	_ZN20CPhoneRecoverySystem19EnablePreconditionLEv @ 108 NONAME
-	_ZN20CPhoneRecoverySystem4AddLE9TCallBackaN19CTeleRecoverySystem14TRecoveryStateE @ 109 NONAME
-	_ZN20CPhoneRecoverySystem6RemoveEi @ 110 NONAME
-	_ZN20CPhoneRecoverySystem8InstanceEv @ 111 NONAME
-	_ZN20TPhoneCmdParamBitmap13SetMaskBitmapEP10CFbsBitmap @ 112 NONAME
-	_ZN20TPhoneCmdParamBitmap9SetBitmapEP10CFbsBitmap @ 113 NONAME
-	_ZN20TPhoneCmdParamBitmapC1Ev @ 114 NONAME
-	_ZN20TPhoneCmdParamBitmapC2Ev @ 115 NONAME
-	_ZN20TPhoneCmdParamString6StringEv @ 116 NONAME
-	_ZN20TPhoneCmdParamString9SetStringEP6TPtr16 @ 117 NONAME
-	_ZN20TPhoneCmdParamStringC1Ev @ 118 NONAME
-	_ZN20TPhoneCmdParamStringC2Ev @ 119 NONAME
-	_ZN21TPhoneCmdParamAppInfo10SetViewUidERK4TUid @ 120 NONAME
-	_ZN21TPhoneCmdParamAppInfo16SetCustomMessageERK6TDesC8 @ 121 NONAME
-	_ZN21TPhoneCmdParamAppInfo18SetCustomMessageIdERK4TUid @ 122 NONAME
-	_ZN21TPhoneCmdParamAppInfo20SetMultipleInstancesEi @ 123 NONAME
-	_ZN21TPhoneCmdParamAppInfo8SetParamERK6TDesC8 @ 124 NONAME
-	_ZN21TPhoneCmdParamAppInfo9SetAppUidERK4TUid @ 125 NONAME
-	_ZN21TPhoneCmdParamAppInfoC1Ev @ 126 NONAME
-	_ZN21TPhoneCmdParamAppInfoC2Ev @ 127 NONAME
-	_ZN21TPhoneCmdParamBoolean10SetBooleanEi @ 128 NONAME
-	_ZN21TPhoneCmdParamBooleanC1Ev @ 129 NONAME
-	_ZN21TPhoneCmdParamBooleanC2Ev @ 130 NONAME
-	_ZN21TPhoneCmdParamDynMenu10SetDynMenuEPv @ 131 NONAME
-	_ZN21TPhoneCmdParamDynMenu13SetResourceIdEi @ 132 NONAME
-	_ZN21TPhoneCmdParamDynMenu7DynMenuEv @ 133 NONAME
-	_ZN21TPhoneCmdParamDynMenuC1Ev @ 134 NONAME
-	_ZN21TPhoneCmdParamDynMenuC2Ev @ 135 NONAME
-	_ZN21TPhoneCmdParamInteger10SetIntegerEi @ 136 NONAME
-	_ZN21TPhoneCmdParamIntegerC1Ev @ 137 NONAME
-	_ZN21TPhoneCmdParamIntegerC2Ev @ 138 NONAME
-	_ZN21TPhoneCmdParamPointer10SetPointerEPv @ 139 NONAME
-	_ZN21TPhoneCmdParamPointerC1Ev @ 140 NONAME
-	_ZN21TPhoneCmdParamPointerC2Ev @ 141 NONAME
-	_ZN21TPhoneCmdParamSfiData7SetNameERK7TDesC16 @ 142 NONAME
-	_ZN21TPhoneCmdParamSfiData9SetNumberERK7TDesC16 @ 143 NONAME
-	_ZN21TPhoneCmdParamSfiDataC1Ev @ 144 NONAME
-	_ZN21TPhoneCmdParamSfiDataC2Ev @ 145 NONAME
-	_ZN22CPhoneCallThemeMonitor28SetCallThemeSettingsObserverEP31MPhoneCallThemeSettingsObserver @ 146 NONAME
-	_ZN22CPhoneCallThemeMonitor4NewLEv @ 147 NONAME
-	_ZN22CPhoneCallThemeMonitorD0Ev @ 148 NONAME
-	_ZN22CPhoneCallThemeMonitorD1Ev @ 149 NONAME
-	_ZN22CPhoneCallThemeMonitorD2Ev @ 150 NONAME
-	_ZN22CPhoneLibraryContainer11AddLibraryLERK8RLibrary @ 151 NONAME
-	_ZN22CPhoneLibraryContainer4NewLEv @ 152 NONAME
-	_ZN22CPhoneLibraryContainerD0Ev @ 153 NONAME
-	_ZN22CPhoneLibraryContainerD1Ev @ 154 NONAME
-	_ZN22CPhoneLibraryContainerD2Ev @ 155 NONAME
-	_ZN22TPhoneCmdParamKeyEvent11SetKeyEventERK9TKeyEvent @ 156 NONAME
-	_ZN22TPhoneCmdParamKeyEvent12SetEventCodeE10TEventCode @ 157 NONAME
-	_ZN22TPhoneCmdParamKeyEventC1Ev @ 158 NONAME
-	_ZN22TPhoneCmdParamKeyEventC2Ev @ 159 NONAME
-	_ZN22TPhoneCmdParamRingTone11SetRingToneERK7TDesC16 @ 160 NONAME
-	_ZN22TPhoneCmdParamRingTone12IsCallerTextEv @ 161 NONAME
-	_ZN22TPhoneCmdParamRingTone12SetTextToSayERK7TDesC16 @ 162 NONAME
-	_ZN22TPhoneCmdParamRingTone13IsCallerImageEv @ 163 NONAME
-	_ZN22TPhoneCmdParamRingTone14SetRingingTypeEi @ 164 NONAME
-	_ZN22TPhoneCmdParamRingTone19SetCallerTextStatusEi @ 165 NONAME
-	_ZN22TPhoneCmdParamRingTone20SetCallerImageStatusEi @ 166 NONAME
-	_ZN22TPhoneCmdParamRingTone7SetTypeE18TPhoneRingToneType @ 167 NONAME
-	_ZN22TPhoneCmdParamRingTone9SetVolumeEi @ 168 NONAME
-	_ZN22TPhoneCmdParamRingToneC1Ev @ 169 NONAME
-	_ZN22TPhoneCmdParamRingToneC2Ev @ 170 NONAME
-	_ZN23TPhoneCmdParamSpeedDial10NumberTypeEv @ 171 NONAME
-	_ZN23TPhoneCmdParamSpeedDial11PhoneNumberEv @ 172 NONAME
-	_ZN23TPhoneCmdParamSpeedDial11SetLocationEi @ 173 NONAME
-	_ZN23TPhoneCmdParamSpeedDial12SetServiceIdEj @ 174 NONAME
-	_ZN23TPhoneCmdParamSpeedDial13SetNumberTypeE16TPhoneNumberType @ 175 NONAME
-	_ZN23TPhoneCmdParamSpeedDial14SetPhoneNumberEP6TPtr16 @ 176 NONAME
-	_ZN23TPhoneCmdParamSpeedDial8LocationEv @ 177 NONAME
-	_ZN23TPhoneCmdParamSpeedDialC1Ev @ 178 NONAME
-	_ZN23TPhoneCmdParamSpeedDialC2Ev @ 179 NONAME
-	_ZN24TPhoneCmdParamGlobalNote11SetSoftkeysEi @ 180 NONAME
-	_ZN24TPhoneCmdParamGlobalNote15SetWaitForReadyEi @ 181 NONAME
-	_ZN24TPhoneCmdParamGlobalNote17SetTextResourceIdEi @ 182 NONAME
-	_ZN24TPhoneCmdParamGlobalNote7SetTextERK7TDesC16 @ 183 NONAME
-	_ZN24TPhoneCmdParamGlobalNote7SetToneEi @ 184 NONAME
-	_ZN24TPhoneCmdParamGlobalNote7SetTypeE18TAknGlobalNoteType @ 185 NONAME
-	_ZN24TPhoneCmdParamGlobalNoteC1Ev @ 186 NONAME
-	_ZN24TPhoneCmdParamGlobalNoteC2Ev @ 187 NONAME
-	_ZN24TPhoneCmdParamKeyCapture10SetKeyCodeE8TKeyCode @ 188 NONAME
-	_ZN24TPhoneCmdParamKeyCapture14SetCaptureTypeE17TPhoneCaptureType @ 189 NONAME
-	_ZN24TPhoneCmdParamKeyCapture6SetKeyE12TStdScanCode @ 190 NONAME
-	_ZN24TPhoneCmdParamKeyCaptureC1Ev @ 191 NONAME
-	_ZN24TPhoneCmdParamKeyCaptureC2Ev @ 192 NONAME
-	_ZN25TPhoneCmdParamAudioOutput14SetAudioOutputE14TPEAudioOutput @ 193 NONAME
-	_ZN25TPhoneCmdParamAudioOutputC1Ev @ 194 NONAME
-	_ZN25TPhoneCmdParamAudioOutputC2Ev @ 195 NONAME
-	_ZN25TPhoneCmdParamTransEffect7SetTypeE21TPhoneTransEffectType @ 196 NONAME
-	_ZN25TPhoneCmdParamTransEffectC1Ev @ 197 NONAME
-	_ZN25TPhoneCmdParamTransEffectC2Ev @ 198 NONAME
-	_ZN26CPhoneMainResourceResolver8InstanceEv @ 199 NONAME
-	_ZN26CPhoneResourceResolverBase14BaseConstructLEv @ 200 NONAME
-	_ZN26CPhoneResourceResolverBaseC1Ev @ 201 NONAME
-	_ZN26CPhoneResourceResolverBaseC2Ev @ 202 NONAME
-	_ZN26CPhoneResourceResolverBaseD0Ev @ 203 NONAME
-	_ZN26CPhoneResourceResolverBaseD1Ev @ 204 NONAME
-	_ZN26CPhoneResourceResolverBaseD2Ev @ 205 NONAME
-	_ZN26TPhoneCmdParamCustomDialer16DialerControllerEv @ 206 NONAME
-	_ZN26TPhoneCmdParamCustomDialer19SetDialerControllerEP22MPhoneDialerController @ 207 NONAME
-	_ZN26TPhoneCmdParamCustomDialerC1Ev @ 208 NONAME
-	_ZN26TPhoneCmdParamCustomDialerC2Ev @ 209 NONAME
-	_ZN26TPhoneCmdParamProgressNote11SetWaitTimeE27TTimeIntervalMicroSeconds32 @ 210 NONAME
-	_ZN26TPhoneCmdParamProgressNote13SetResourceIdEi @ 211 NONAME
-	_ZN26TPhoneCmdParamProgressNoteC1Ev @ 212 NONAME
-	_ZN26TPhoneCmdParamProgressNoteC2Ev @ 213 NONAME
-	_ZN27TPhoneCmdParamCallStateData12SetCallStateEi @ 214 NONAME
-	_ZN27TPhoneCmdParamCallStateData9SetCallIdEi @ 215 NONAME
-	_ZN27TPhoneCmdParamCallStateDataC1Ev @ 216 NONAME
-	_ZN27TPhoneCmdParamCallStateDataC2Ev @ 217 NONAME
-	_ZN27TPhoneCmdParamMessageEditor14SetMessageDataEP12CMessageData @ 218 NONAME
-	_ZN27TPhoneCmdParamMessageEditorC1Ev @ 219 NONAME
-	_ZN27TPhoneCmdParamMessageEditorC2Ev @ 220 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData10SetCLITextERK7TDesC16N14CBubbleManager23TPhoneClippingDirectionE @ 221 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData10SetPictureERK7TDesC16 @ 222 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData11AddCallFlagEN14CBubbleManager19TPhoneCallTypeFlagsE @ 223 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData11SetCNAPTextERK7TDesC16N14CBubbleManager23TPhoneClippingDirectionE @ 224 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData11SetCallFlagEN14CBubbleManager19TPhoneCallTypeFlagsE @ 225 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData11SetCallTypeEi @ 226 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData12SetCallStateEi @ 227 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData12SetCipheringEi @ 228 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData12SetLabelTextERK7TDesC16 @ 229 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData12SetServiceIdEm @ 230 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData12SetThumbnailEP10CFbsBitmap @ 231 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData13SetCallerTextERK7TDesC16 @ 232 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData13SetNumberTypeEi @ 233 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData14SetContactLinkERK6TDesC8 @ 234 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData15SetHasThumbnailEi @ 235 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData17SetShortLabelTextERK7TDesC16 @ 236 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData20SetRemotePhoneNumberERK7TDesC16 @ 237 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData21SetParticipantListCLIENS_24TPhoneParticipantListCLIE @ 238 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData28SetCipheringIndicatorAllowedEi @ 239 NONAME
-	_ZN28TPhoneCmdParamCallHeaderData8SetLine2Ei @ 240 NONAME
-	_ZN28TPhoneCmdParamCallHeaderDataC1Ev @ 241 NONAME
-	_ZN28TPhoneCmdParamCallHeaderDataC2Ev @ 242 NONAME
-	_ZN28TPhoneCmdParamReconnectQuery14SetPhoneNumberE7TPtrC16 @ 243 NONAME
-	_ZN28TPhoneCmdParamReconnectQuery17SetContactMatcherEP13CPhCntMatcher @ 244 NONAME
-	_ZN28TPhoneCmdParamReconnectQuery21SetIncludeVideoOptionEi @ 245 NONAME
-	_ZN28TPhoneCmdParamReconnectQueryC1ER27MCaUiReconnectQueryObserver @ 246 NONAME
-	_ZN28TPhoneCmdParamReconnectQueryC2ER27MCaUiReconnectQueryObserver @ 247 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetch16SetCbaResourceIdEi @ 248 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetch22SetTitlePaneResourceIdEi @ 249 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetch4TypeEv @ 250 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetch7SetTypeEN21CPhCntSingleItemFetch10TFetchTypeE @ 251 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetch9SetStringEP6TDes16 @ 252 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetchC1Ev @ 253 NONAME
-	_ZN29TPhoneCmdParamSingleItemFetchC2Ev @ 254 NONAME
-	_ZN30CPhoneMainErrorMessagesHandler8InstanceEv @ 255 NONAME
-	_ZN31TPhoneCmdParamAudioAvailability17SetBTAccAvailableEi @ 256 NONAME
-	_ZN31TPhoneCmdParamAudioAvailability20SetWiredAccAvailableEi @ 257 NONAME
-	_ZN31TPhoneCmdParamAudioAvailabilityC1Ev @ 258 NONAME
-	_ZN31TPhoneCmdParamAudioAvailabilityC2Ev @ 259 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData12SetCallStateEi @ 260 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData12SetCipheringEi @ 261 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData12SetEmergencyEi @ 262 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData22SetLittleBubbleVisibleEi @ 263 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData28SetCipheringIndicatorAllowedEi @ 264 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData7SetModeEi @ 265 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData7SetMuteEi @ 266 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorData8SetLine2Ei @ 267 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorDataC1Ev @ 268 NONAME
-	_ZN33TPhoneCmdParamIncallIndicatorDataC2Ev @ 269 NONAME
-	_ZN33TPhoneCmdParamNumberEntryObserver11SetObserverE9TCallBack @ 270 NONAME
-	_ZN33TPhoneCmdParamNumberEntryObserver8ObserverEv @ 271 NONAME
-	_ZN33TPhoneCmdParamNumberEntryObserverC1Ev @ 272 NONAME
-	_ZN33TPhoneCmdParamNumberEntryObserverC2Ev @ 273 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderData12SetCipheringEi @ 274 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderData12SetLabelTextERK7TDesC16 @ 275 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderData13SetHeaderTextERK7TDesC16 @ 276 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderData21SetOwnPhoneNumberTextERK7TDesC16 @ 277 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderData28SetCipheringIndicatorAllowedEi @ 278 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderDataC1Ev @ 279 NONAME
-	_ZN37TPhoneCmdParamEmergencyCallHeaderDataC2Ev @ 280 NONAME
-	_ZNK13CPhoneStorage17GetBlockedKeyListEv @ 281 NONAME
-	_ZNK17CPhoneCenRepProxy4FindERK4TUidmmR6RArrayImE @ 282 NONAME
-	_ZNK17CPhoneCenRepProxy6GetIntERK4TUidjRi @ 283 NONAME
-	_ZNK17CPhoneCenRepProxy7GetRealERK4TUidjRd @ 284 NONAME
-	_ZNK17CPhoneCenRepProxy9GetStringERK4TUidjR6TDes16 @ 285 NONAME
-	_ZNK18TPhoneCmdParamNote10ResourceIdEv @ 286 NONAME
-	_ZNK18TPhoneCmdParamNote14TextResourceIdEv @ 287 NONAME
-	_ZNK18TPhoneCmdParamNote4TextEv @ 288 NONAME
-	_ZNK18TPhoneCmdParamNote4ToneEv @ 289 NONAME
-	_ZNK18TPhoneCmdParamNote4TypeEv @ 290 NONAME
-	_ZNK18TPhoneCmdParamNote7TimeoutEv @ 291 NONAME
-	_ZNK18TPhoneCommandParam7ParamIdEv @ 292 NONAME
-	_ZNK19CPhoneQwertyHandler13IsQwertyInputEv @ 293 NONAME
-	_ZNK19TPhoneCmdParamQuery10ContentCbaEv @ 294 NONAME
-	_ZNK19TPhoneCmdParamQuery10DefaultCbaEv @ 295 NONAME
-	_ZNK19TPhoneCmdParamQuery11QueryPromptEv @ 296 NONAME
-	_ZNK19TPhoneCmdParamQuery14SendKeyEnabledEv @ 297 NONAME
-	_ZNK19TPhoneCmdParamQuery15QueryResourceIdEv @ 298 NONAME
-	_ZNK19TPhoneCmdParamQuery17CbaCommandMappingEi @ 299 NONAME
-	_ZNK19TPhoneCmdParamQuery25ItemTextArrayForListQueryEv @ 300 NONAME
-	_ZNK19TPhoneCmdParamQuery26GetCustomCommandForTimeOutERi @ 301 NONAME
-	_ZNK19TPhoneCmdParamQuery4ToneEv @ 302 NONAME
-	_ZNK19TPhoneCmdParamQuery7TimeOutEv @ 303 NONAME
-	_ZNK19TPhoneCmdParamQuery8DataTextEv @ 304 NONAME
-	_ZNK19TPhoneCmdParamQuery9QueryTypeEv @ 305 NONAME
-	_ZNK20TPhoneCmdParamBitmap10MaskBitmapEv @ 306 NONAME
-	_ZNK20TPhoneCmdParamBitmap6BitmapEv @ 307 NONAME
-	_ZNK21TPhoneCmdParamAppInfo13CustomMessageEv @ 308 NONAME
-	_ZNK21TPhoneCmdParamAppInfo15CustomMessageIdEv @ 309 NONAME
-	_ZNK21TPhoneCmdParamAppInfo17MultipleInstancesEv @ 310 NONAME
-	_ZNK21TPhoneCmdParamAppInfo5ParamEv @ 311 NONAME
-	_ZNK21TPhoneCmdParamAppInfo6AppUidEv @ 312 NONAME
-	_ZNK21TPhoneCmdParamAppInfo7ViewUidEv @ 313 NONAME
-	_ZNK21TPhoneCmdParamBoolean7BooleanEv @ 314 NONAME
-	_ZNK21TPhoneCmdParamDynMenu10ResourceIdEv @ 315 NONAME
-	_ZNK21TPhoneCmdParamInteger7IntegerEv @ 316 NONAME
-	_ZNK21TPhoneCmdParamPointer7PointerEv @ 317 NONAME
-	_ZNK21TPhoneCmdParamSfiData4NameEv @ 318 NONAME
-	_ZNK21TPhoneCmdParamSfiData6NumberEv @ 319 NONAME
-	_ZNK22CPhoneCallThemeMonitor22CallImageThemeFilePathEv @ 320 NONAME
-	_ZNK22CPhoneCallThemeMonitor22CallImageThemeSettingsEv @ 321 NONAME
-	_ZNK22TPhoneCmdParamKeyEvent8KeyEventEv @ 322 NONAME
-	_ZNK22TPhoneCmdParamKeyEvent9EventCodeEv @ 323 NONAME
-	_ZNK22TPhoneCmdParamRingTone11RingingTypeEv @ 324 NONAME
-	_ZNK22TPhoneCmdParamRingTone4TypeEv @ 325 NONAME
-	_ZNK22TPhoneCmdParamRingTone6VolumeEv @ 326 NONAME
-	_ZNK22TPhoneCmdParamRingTone8RingToneEv @ 327 NONAME
-	_ZNK22TPhoneCmdParamRingTone9TextToSayEv @ 328 NONAME
-	_ZNK23TPhoneCmdParamSpeedDial9ServiceIdEv @ 329 NONAME
-	_ZNK24TPhoneCmdParamGlobalNote12WaitForReadyEv @ 330 NONAME
-	_ZNK24TPhoneCmdParamGlobalNote14TextResourceIdEv @ 331 NONAME
-	_ZNK24TPhoneCmdParamGlobalNote4TextEv @ 332 NONAME
-	_ZNK24TPhoneCmdParamGlobalNote4ToneEv @ 333 NONAME
-	_ZNK24TPhoneCmdParamGlobalNote4TypeEv @ 334 NONAME
-	_ZNK24TPhoneCmdParamGlobalNote8SoftkeysEv @ 335 NONAME
-	_ZNK24TPhoneCmdParamKeyCapture11CaptureTypeEv @ 336 NONAME
-	_ZNK24TPhoneCmdParamKeyCapture3KeyEv @ 337 NONAME
-	_ZNK24TPhoneCmdParamKeyCapture7KeyCodeEv @ 338 NONAME
-	_ZNK25TPhoneCmdParamAudioOutput11AudioOutputEv @ 339 NONAME
-	_ZNK25TPhoneCmdParamTransEffect4TypeEv @ 340 NONAME
-	_ZNK26CPhoneResourceResolverBase17ResolveResourceIDERKi @ 341 NONAME
-	_ZNK26CPhoneResourceResolverBase27IsTelephonyFeatureSupportedEi @ 342 NONAME
-	_ZNK26TPhoneCmdParamProgressNote10ResourceIdEv @ 343 NONAME
-	_ZNK26TPhoneCmdParamProgressNote8WaitTimeEv @ 344 NONAME
-	_ZNK27TPhoneCmdParamCallStateData6CallIdEv @ 345 NONAME
-	_ZNK27TPhoneCmdParamCallStateData9CallStateEv @ 346 NONAME
-	_ZNK27TPhoneCmdParamMessageEditor11MessageDataEv @ 347 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData10CallerTextEv @ 348 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData10NumberTypeEv @ 349 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData11ContactLinkEv @ 350 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData12HasThumbnailEv @ 351 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData14ParticipantCLIEv @ 352 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData14ShortLabelTextEv @ 353 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData17RemotePhoneNumberEv @ 354 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData24CLITextClippingDirectionEv @ 355 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData25CNAPTextClippingDirectionEv @ 356 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData25CipheringIndicatorAllowedEv @ 357 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData5Line2Ev @ 358 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData7CLITextEv @ 359 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData7PictureEv @ 360 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData8CNAPTextEv @ 361 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData8CallFlagEv @ 362 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData8CallTypeEv @ 363 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData9CallStateEv @ 364 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData9CipheringEv @ 365 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData9LabelTextEv @ 366 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData9ServiceIdEv @ 367 NONAME
-	_ZNK28TPhoneCmdParamCallHeaderData9ThumbnailEv @ 368 NONAME
-	_ZNK28TPhoneCmdParamReconnectQuery11PhoneNumberEv @ 369 NONAME
-	_ZNK28TPhoneCmdParamReconnectQuery14ContactMatcherEv @ 370 NONAME
-	_ZNK28TPhoneCmdParamReconnectQuery22IncludeVideoCallOptionEv @ 371 NONAME
-	_ZNK28TPhoneCmdParamReconnectQuery22ReconnectQueryObserverEv @ 372 NONAME
-	_ZNK29TPhoneCmdParamSingleItemFetch13CbaResourceIdEv @ 373 NONAME
-	_ZNK29TPhoneCmdParamSingleItemFetch19TitlePaneResourceIdEv @ 374 NONAME
-	_ZNK29TPhoneCmdParamSingleItemFetch6StringEv @ 375 NONAME
-	_ZNK31TPhoneCmdParamAudioAvailability16IsBTAccAvailableEv @ 376 NONAME
-	_ZNK31TPhoneCmdParamAudioAvailability19IsWiredAccAvailableEv @ 377 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData19LittleBubbleVisibleEv @ 378 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData25CipheringIndicatorAllowedEv @ 379 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData4ModeEv @ 380 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData4MuteEv @ 381 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData5Line2Ev @ 382 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData9CallStateEv @ 383 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData9CipheringEv @ 384 NONAME
-	_ZNK33TPhoneCmdParamIncallIndicatorData9EmergencyEv @ 385 NONAME
-	_ZNK37TPhoneCmdParamEmergencyCallHeaderData10HeaderTextEv @ 386 NONAME
-	_ZNK37TPhoneCmdParamEmergencyCallHeaderData18OwnPhoneNumberTextEv @ 387 NONAME
-	_ZNK37TPhoneCmdParamEmergencyCallHeaderData25CipheringIndicatorAllowedEv @ 388 NONAME
-	_ZNK37TPhoneCmdParamEmergencyCallHeaderData9CipheringEv @ 389 NONAME
-	_ZNK37TPhoneCmdParamEmergencyCallHeaderData9LabelTextEv @ 390 NONAME
-	_ZTI11CPhoneTimer @ 391 NONAME
-	_ZTI12CPhoneLogger @ 392 NONAME
-	_ZTI13CPhoneStorage @ 393 NONAME
-	_ZTI17CPhoneCenRepProxy @ 394 NONAME
-	_ZTI17CPhonePubSubProxy @ 395 NONAME
-	_ZTI18CPhoneMethodLogger @ 396 NONAME
-	_ZTI19CPhoneQwertyHandler @ 397 NONAME
-	_ZTI20CPhoneClearBlacklist @ 398 NONAME
-	_ZTI20CPhoneRecoverySystem @ 399 NONAME
-	_ZTI22CPhoneCallThemeMonitor @ 400 NONAME
-	_ZTI22CPhoneLibraryContainer @ 401 NONAME
-	_ZTI23CPhoneQwertyModeMonitor @ 402 NONAME
-	_ZTI24CPhoneCenRepEventHandler @ 403 NONAME
-	_ZTI24CPhoneLangSettingMonitor @ 404 NONAME
-	_ZTI25CPhonePublishSubscriberAO @ 405 NONAME
-	_ZTI26CPhoneMainResourceResolver @ 406 NONAME
-	_ZTI26CPhoneResourceResolverBase @ 407 NONAME
-	_ZTI30CPhoneMainErrorMessagesHandler @ 408 NONAME
-	_ZTV11CPhoneTimer @ 409 NONAME
-	_ZTV12CPhoneLogger @ 410 NONAME
-	_ZTV13CPhoneStorage @ 411 NONAME
-	_ZTV17CPhoneCenRepProxy @ 412 NONAME
-	_ZTV17CPhonePubSubProxy @ 413 NONAME
-	_ZTV18CPhoneMethodLogger @ 414 NONAME
-	_ZTV19CPhoneQwertyHandler @ 415 NONAME
-	_ZTV20CPhoneClearBlacklist @ 416 NONAME
-	_ZTV20CPhoneRecoverySystem @ 417 NONAME
-	_ZTV22CPhoneCallThemeMonitor @ 418 NONAME
-	_ZTV22CPhoneLibraryContainer @ 419 NONAME
-	_ZTV23CPhoneQwertyModeMonitor @ 420 NONAME
-	_ZTV24CPhoneCenRepEventHandler @ 421 NONAME
-	_ZTV24CPhoneLangSettingMonitor @ 422 NONAME
-	_ZTV25CPhonePublishSubscriberAO @ 423 NONAME
-	_ZTV26CPhoneMainResourceResolver @ 424 NONAME
-	_ZTV26CPhoneResourceResolverBase @ 425 NONAME
-	_ZTV30CPhoneMainErrorMessagesHandler @ 426 NONAME
-	_ZThn4_N12CPhoneLoggerD0Ev @ 427 NONAME
-	_ZThn4_N12CPhoneLoggerD1Ev @ 428 NONAME
-	_ZThn4_N13CPhoneStorage14IsScreenLockedEv @ 429 NONAME
-	_ZThn4_N13CPhoneStorage15SetScreenLockedEi @ 430 NONAME
-	_ZThn4_N13CPhoneStorage19NeedToEnableKeylockEv @ 431 NONAME
-	_ZThn4_N13CPhoneStorage20ResetBlockedKeysListEv @ 432 NONAME
-	_ZThn4_N13CPhoneStorage22AppendBlockedKeysListLE12TStdScanCode @ 433 NONAME
-	_ZThn4_N13CPhoneStorage22IsBlockedKeysListEmptyEv @ 434 NONAME
-	_ZThn4_N13CPhoneStorage22SetNeedToEnableKeylockEi @ 435 NONAME
-	_ZThn4_N13CPhoneStorageD0Ev @ 436 NONAME
-	_ZThn4_N13CPhoneStorageD1Ev @ 437 NONAME
-	_ZThn4_N26CPhoneResourceResolverBaseD0Ev @ 438 NONAME
-	_ZThn4_N26CPhoneResourceResolverBaseD1Ev @ 439 NONAME
-	_ZThn4_NK13CPhoneStorage17GetBlockedKeyListEv @ 440 NONAME
-	_ZThn4_NK26CPhoneResourceResolverBase17ResolveResourceIDERKi @ 441 NONAME
+	_ZN17CPhoneCenRepProxy12CancelNotifyEP20MPhoneCenRepObserverj @ 28 NONAME
+	_ZN17CPhoneCenRepProxy13NotifyChangeLERK4TUidjP20MPhoneCenRepObserver @ 29 NONAME
+	_ZN17CPhoneCenRepProxy17CancelAllNotifiesEP20MPhoneCenRepObserver @ 30 NONAME
+	_ZN17CPhoneCenRepProxy22FetchValuesFromCenRepLER21TPhoneCmdParamAppInfo8TKeyCodeP6HBufC8Ri @ 31 NONAME
+	_ZN17CPhoneCenRepProxy25IsPhoneUIFeatureSupportedEi @ 32 NONAME
+	_ZN17CPhoneCenRepProxy27IsTelephonyFeatureSupportedEi @ 33 NONAME
+	_ZN17CPhoneCenRepProxy6SetIntERK4TUidji @ 34 NONAME
+	_ZN17CPhoneCenRepProxy7SetRealERK4TUidjd @ 35 NONAME
+	_ZN17CPhoneCenRepProxy8InstanceEv @ 36 NONAME
+	_ZN17CPhoneCenRepProxy9SetStringERK4TUidjRK7TDesC16 @ 37 NONAME
+	_ZN17CPhoneCenRepProxyD0Ev @ 38 NONAME
+	_ZN17CPhoneCenRepProxyD1Ev @ 39 NONAME
+	_ZN17CPhoneCenRepProxyD2Ev @ 40 NONAME
+	_ZN17CPhonePubSubProxy13NotifyChangeLERK4TUidjP20MPhonePubSubObserver @ 41 NONAME
+	_ZN17CPhonePubSubProxy19ChangePropertyValueERK4TUidji @ 42 NONAME
+	_ZN17CPhonePubSubProxy22CancelAllNotificationsEP20MPhonePubSubObserver @ 43 NONAME
+	_ZN17CPhonePubSubProxy5ValueERK4TUidj @ 44 NONAME
+	_ZN17CPhonePubSubProxy8InstanceEv @ 45 NONAME
+	_ZN17CPhonePubSubProxyD0Ev @ 46 NONAME
+	_ZN17CPhonePubSubProxyD1Ev @ 47 NONAME
+	_ZN17CPhonePubSubProxyD2Ev @ 48 NONAME
+	_ZN18CPhoneMethodLoggerC1E24TPhoneUILoggingComponent7TPtrC16 @ 49 NONAME
+	_ZN18CPhoneMethodLoggerC2E24TPhoneUILoggingComponent7TPtrC16 @ 50 NONAME
+	_ZN18CPhoneMethodLoggerD0Ev @ 51 NONAME
+	_ZN18CPhoneMethodLoggerD1Ev @ 52 NONAME
+	_ZN18CPhoneMethodLoggerD2Ev @ 53 NONAME
+	_ZN18TPhoneCmdParamNote10SetTimeoutEN14CAknNoteDialog8TTimeoutE @ 54 NONAME
+	_ZN18TPhoneCmdParamNote13SetResourceIdEi @ 55 NONAME
+	_ZN18TPhoneCmdParamNote17SetTextResourceIdEi @ 56 NONAME
+	_ZN18TPhoneCmdParamNote7SetTextERK7TDesC16 @ 57 NONAME
+	_ZN18TPhoneCmdParamNote7SetToneEN14CAknNoteDialog5TToneE @ 58 NONAME
+	_ZN18TPhoneCmdParamNote7SetTypeE14TPhoneNoteType @ 59 NONAME
+	_ZN18TPhoneCmdParamNoteC1Ev @ 60 NONAME
+	_ZN18TPhoneCmdParamNoteC2Ev @ 61 NONAME
+	_ZN18TPhoneCommandParamC1Ev @ 62 NONAME
+	_ZN18TPhoneCommandParamC2Ev @ 63 NONAME
+	_ZN19CPhoneQwertyHandler14NumericKeyCodeERK9TKeyEvent @ 64 NONAME
+	_ZN19CPhoneQwertyHandler4NewLEv @ 65 NONAME
+	_ZN19CPhoneQwertyHandlerD0Ev @ 66 NONAME
+	_ZN19CPhoneQwertyHandlerD1Ev @ 67 NONAME
+	_ZN19CPhoneQwertyHandlerD2Ev @ 68 NONAME
+	_ZN19TPhoneCmdParamQuery10SetTimeOutEi @ 69 NONAME
+	_ZN19TPhoneCmdParamQuery11SetDataTextEP6TDes16 @ 70 NONAME
+	_ZN19TPhoneCmdParamQuery12SetQueryTypeE15TPhoneQueryType @ 71 NONAME
+	_ZN19TPhoneCmdParamQuery13SetContentCbaEi @ 72 NONAME
+	_ZN19TPhoneCmdParamQuery13SetDefaultCbaEi @ 73 NONAME
+	_ZN19TPhoneCmdParamQuery14SetQueryPromptERK7TDesC16 @ 74 NONAME
+	_ZN19TPhoneCmdParamQuery17SetCommandParamIdEN18TPhoneCommandParam13TPhoneParamIdE @ 75 NONAME
+	_ZN19TPhoneCmdParamQuery17SetSendKeyEnabledEi @ 76 NONAME
+	_ZN19TPhoneCmdParamQuery18SetQueryResourceIdEi @ 77 NONAME
+	_ZN19TPhoneCmdParamQuery20QueryCommandObserverEv @ 78 NONAME
+	_ZN19TPhoneCmdParamQuery20SetCbaCommandMappingEii @ 79 NONAME
+	_ZN19TPhoneCmdParamQuery23SetQueryCommandObserverER26MPhoneQueryCommandObserver @ 80 NONAME
+	_ZN19TPhoneCmdParamQuery26SetCustomCommandForTimeOutEi @ 81 NONAME
+	_ZN19TPhoneCmdParamQuery28SetItemTextArrayForListQueryER12MDesC16Array @ 82 NONAME
+	_ZN19TPhoneCmdParamQuery7SetToneEi @ 83 NONAME
+	_ZN19TPhoneCmdParamQueryC1ERKS_ @ 84 NONAME
+	_ZN19TPhoneCmdParamQueryC1Ev @ 85 NONAME
+	_ZN19TPhoneCmdParamQueryC2ERKS_ @ 86 NONAME
+	_ZN19TPhoneCmdParamQueryC2Ev @ 87 NONAME
+	_ZN19TPhoneCmdParamQueryaSERKS_ @ 88 NONAME
+	_ZN20CPhoneClearBlacklist17ClearBlackListNowEv @ 89 NONAME
+	_ZN20CPhoneClearBlacklist23ClearBlackListOnNextKeyEv @ 90 NONAME
+	_ZN20CPhoneClearBlacklist7CreateLER10RWsSessionRK11RWindowBase @ 91 NONAME
+	_ZN20CPhoneClearBlacklist8InstanceEv @ 92 NONAME
+	_ZN20CPhoneClearBlacklistD0Ev @ 93 NONAME
+	_ZN20CPhoneClearBlacklistD1Ev @ 94 NONAME
+	_ZN20CPhoneClearBlacklistD2Ev @ 95 NONAME
+	_ZN20CPhoneRecoverySystem10RecoverNowEiai @ 96 NONAME
+	_ZN20CPhoneRecoverySystem19EnablePreconditionLEv @ 97 NONAME
+	_ZN20CPhoneRecoverySystem4AddLE9TCallBackaN19CTeleRecoverySystem14TRecoveryStateE @ 98 NONAME
+	_ZN20CPhoneRecoverySystem6RemoveEi @ 99 NONAME
+	_ZN20CPhoneRecoverySystem8InstanceEv @ 100 NONAME
+	_ZN20TPhoneCmdParamBitmap13SetMaskBitmapEP10CFbsBitmap @ 101 NONAME
+	_ZN20TPhoneCmdParamBitmap9SetBitmapEP10CFbsBitmap @ 102 NONAME
+	_ZN20TPhoneCmdParamBitmapC1Ev @ 103 NONAME
+	_ZN20TPhoneCmdParamBitmapC2Ev @ 104 NONAME
+	_ZN20TPhoneCmdParamString6StringEv @ 105 NONAME
+	_ZN20TPhoneCmdParamString9SetStringEP6TPtr16 @ 106 NONAME
+	_ZN20TPhoneCmdParamStringC1Ev @ 107 NONAME
+	_ZN20TPhoneCmdParamStringC2Ev @ 108 NONAME
+	_ZN21TPhoneCmdParamAppInfo10SetViewUidERK4TUid @ 109 NONAME
+	_ZN21TPhoneCmdParamAppInfo16SetCustomMessageERK6TDesC8 @ 110 NONAME
+	_ZN21TPhoneCmdParamAppInfo18SetCustomMessageIdERK4TUid @ 111 NONAME
+	_ZN21TPhoneCmdParamAppInfo20SetMultipleInstancesEi @ 112 NONAME
+	_ZN21TPhoneCmdParamAppInfo8SetParamERK6TDesC8 @ 113 NONAME
+	_ZN21TPhoneCmdParamAppInfo9SetAppUidERK4TUid @ 114 NONAME
+	_ZN21TPhoneCmdParamAppInfoC1Ev @ 115 NONAME
+	_ZN21TPhoneCmdParamAppInfoC2Ev @ 116 NONAME
+	_ZN21TPhoneCmdParamBoolean10SetBooleanEi @ 117 NONAME
+	_ZN21TPhoneCmdParamBooleanC1Ev @ 118 NONAME
+	_ZN21TPhoneCmdParamBooleanC2Ev @ 119 NONAME
+	_ZN21TPhoneCmdParamDynMenu10SetDynMenuEPv @ 120 NONAME
+	_ZN21TPhoneCmdParamDynMenu13SetResourceIdEi @ 121 NONAME
+	_ZN21TPhoneCmdParamDynMenu7DynMenuEv @ 122 NONAME
+	_ZN21TPhoneCmdParamDynMenuC1Ev @ 123 NONAME
+	_ZN21TPhoneCmdParamDynMenuC2Ev @ 124 NONAME
+	_ZN21TPhoneCmdParamInteger10SetIntegerEi @ 125 NONAME
+	_ZN21TPhoneCmdParamIntegerC1Ev @ 126 NONAME
+	_ZN21TPhoneCmdParamIntegerC2Ev @ 127 NONAME
+	_ZN21TPhoneCmdParamPointer10SetPointerEPv @ 128 NONAME
+	_ZN21TPhoneCmdParamPointerC1Ev @ 129 NONAME
+	_ZN21TPhoneCmdParamPointerC2Ev @ 130 NONAME
+	_ZN21TPhoneCmdParamSfiData7SetNameERK7TDesC16 @ 131 NONAME
+	_ZN21TPhoneCmdParamSfiData9SetNumberERK7TDesC16 @ 132 NONAME
+	_ZN21TPhoneCmdParamSfiDataC1Ev @ 133 NONAME
+	_ZN21TPhoneCmdParamSfiDataC2Ev @ 134 NONAME
+	_ZN22CPhoneCallThemeMonitor28SetCallThemeSettingsObserverEP31MPhoneCallThemeSettingsObserver @ 135 NONAME
+	_ZN22CPhoneCallThemeMonitor4NewLEv @ 136 NONAME
+	_ZN22CPhoneCallThemeMonitorD0Ev @ 137 NONAME
+	_ZN22CPhoneCallThemeMonitorD1Ev @ 138 NONAME
+	_ZN22CPhoneCallThemeMonitorD2Ev @ 139 NONAME
+	_ZN22CPhoneLibraryContainer11AddLibraryLERK8RLibrary @ 140 NONAME
+	_ZN22CPhoneLibraryContainer4NewLEv @ 141 NONAME
+	_ZN22CPhoneLibraryContainerD0Ev @ 142 NONAME
+	_ZN22CPhoneLibraryContainerD1Ev @ 143 NONAME
+	_ZN22CPhoneLibraryContainerD2Ev @ 144 NONAME
+	_ZN22TPhoneCmdParamKeyEvent11SetKeyEventERK9TKeyEvent @ 145 NONAME
+	_ZN22TPhoneCmdParamKeyEvent12SetEventCodeE10TEventCode @ 146 NONAME
+	_ZN22TPhoneCmdParamKeyEventC1Ev @ 147 NONAME
+	_ZN22TPhoneCmdParamKeyEventC2Ev @ 148 NONAME
+	_ZN22TPhoneCmdParamRingTone11SetRingToneERK7TDesC16 @ 149 NONAME
+	_ZN22TPhoneCmdParamRingTone12IsCallerTextEv @ 150 NONAME
+	_ZN22TPhoneCmdParamRingTone12SetTextToSayERK7TDesC16 @ 151 NONAME
+	_ZN22TPhoneCmdParamRingTone13IsCallerImageEv @ 152 NONAME
+	_ZN22TPhoneCmdParamRingTone14SetRingingTypeEi @ 153 NONAME
+	_ZN22TPhoneCmdParamRingTone19SetCallerTextStatusEi @ 154 NONAME
+	_ZN22TPhoneCmdParamRingTone20SetCallerImageStatusEi @ 155 NONAME
+	_ZN22TPhoneCmdParamRingTone7SetTypeE18TPhoneRingToneType @ 156 NONAME
+	_ZN22TPhoneCmdParamRingTone9SetVolumeEi @ 157 NONAME
+	_ZN22TPhoneCmdParamRingToneC1Ev @ 158 NONAME
+	_ZN22TPhoneCmdParamRingToneC2Ev @ 159 NONAME
+	_ZN23TPhoneCmdParamSpeedDial10NumberTypeEv @ 160 NONAME
+	_ZN23TPhoneCmdParamSpeedDial11PhoneNumberEv @ 161 NONAME
+	_ZN23TPhoneCmdParamSpeedDial11SetLocationEi @ 162 NONAME
+	_ZN23TPhoneCmdParamSpeedDial12SetServiceIdEj @ 163 NONAME
+	_ZN23TPhoneCmdParamSpeedDial13SetNumberTypeE16TPhoneNumberType @ 164 NONAME
+	_ZN23TPhoneCmdParamSpeedDial14SetPhoneNumberEP6TPtr16 @ 165 NONAME
+	_ZN23TPhoneCmdParamSpeedDial8LocationEv @ 166 NONAME
+	_ZN23TPhoneCmdParamSpeedDialC1Ev @ 167 NONAME
+	_ZN23TPhoneCmdParamSpeedDialC2Ev @ 168 NONAME
+	_ZN24TPhoneCmdParamGlobalNote11SetSoftkeysEi @ 169 NONAME
+	_ZN24TPhoneCmdParamGlobalNote15SetWaitForReadyEi @ 170 NONAME
+	_ZN24TPhoneCmdParamGlobalNote17SetTextResourceIdEi @ 171 NONAME
+	_ZN24TPhoneCmdParamGlobalNote7SetTextERK7TDesC16 @ 172 NONAME
+	_ZN24TPhoneCmdParamGlobalNote7SetToneEi @ 173 NONAME
+	_ZN24TPhoneCmdParamGlobalNote7SetTypeE18TAknGlobalNoteType @ 174 NONAME
+	_ZN24TPhoneCmdParamGlobalNoteC1Ev @ 175 NONAME
+	_ZN24TPhoneCmdParamGlobalNoteC2Ev @ 176 NONAME
+	_ZN24TPhoneCmdParamKeyCapture10SetKeyCodeE8TKeyCode @ 177 NONAME
+	_ZN24TPhoneCmdParamKeyCapture14SetCaptureTypeE17TPhoneCaptureType @ 178 NONAME
+	_ZN24TPhoneCmdParamKeyCapture6SetKeyE12TStdScanCode @ 179 NONAME
+	_ZN24TPhoneCmdParamKeyCaptureC1Ev @ 180 NONAME
+	_ZN24TPhoneCmdParamKeyCaptureC2Ev @ 181 NONAME
+	_ZN25TPhoneCmdParamAudioOutput14SetAudioOutputE14TPEAudioOutput @ 182 NONAME
+	_ZN25TPhoneCmdParamAudioOutputC1Ev @ 183 NONAME
+	_ZN25TPhoneCmdParamAudioOutputC2Ev @ 184 NONAME
+	_ZN25TPhoneCmdParamTransEffect7SetTypeE21TPhoneTransEffectType @ 185 NONAME
+	_ZN25TPhoneCmdParamTransEffectC1Ev @ 186 NONAME
+	_ZN25TPhoneCmdParamTransEffectC2Ev @ 187 NONAME
+	_ZN26CPhoneMainResourceResolver8InstanceEv @ 188 NONAME
+	_ZN26CPhoneResourceResolverBase14BaseConstructLEv @ 189 NONAME
+	_ZN26CPhoneResourceResolverBaseC1Ev @ 190 NONAME
+	_ZN26CPhoneResourceResolverBaseC2Ev @ 191 NONAME
+	_ZN26CPhoneResourceResolverBaseD0Ev @ 192 NONAME
+	_ZN26CPhoneResourceResolverBaseD1Ev @ 193 NONAME
+	_ZN26CPhoneResourceResolverBaseD2Ev @ 194 NONAME
+	_ZN26TPhoneCmdParamCustomDialer16DialerControllerEv @ 195 NONAME
+	_ZN26TPhoneCmdParamCustomDialer19SetDialerControllerEP22MPhoneDialerController @ 196 NONAME
+	_ZN26TPhoneCmdParamCustomDialerC1Ev @ 197 NONAME
+	_ZN26TPhoneCmdParamCustomDialerC2Ev @ 198 NONAME
+	_ZN26TPhoneCmdParamProgressNote11SetWaitTimeE27TTimeIntervalMicroSeconds32 @ 199 NONAME
+	_ZN26TPhoneCmdParamProgressNote13SetResourceIdEi @ 200 NONAME
+	_ZN26TPhoneCmdParamProgressNoteC1Ev @ 201 NONAME
+	_ZN26TPhoneCmdParamProgressNoteC2Ev @ 202 NONAME
+	_ZN27TPhoneCmdParamCallStateData12SetCallStateEi @ 203 NONAME
+	_ZN27TPhoneCmdParamCallStateData9SetCallIdEi @ 204 NONAME
+	_ZN27TPhoneCmdParamCallStateDataC1Ev @ 205 NONAME
+	_ZN27TPhoneCmdParamCallStateDataC2Ev @ 206 NONAME
+	_ZN27TPhoneCmdParamMessageEditor14SetMessageDataEP12CMessageData @ 207 NONAME
+	_ZN27TPhoneCmdParamMessageEditorC1Ev @ 208 NONAME
+	_ZN27TPhoneCmdParamMessageEditorC2Ev @ 209 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData10SetCLITextERK7TDesC16N14CBubbleManager23TPhoneClippingDirectionE @ 210 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData10SetPictureERK7TDesC16 @ 211 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData11AddCallFlagEN14CBubbleManager19TPhoneCallTypeFlagsE @ 212 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData11SetCNAPTextERK7TDesC16N14CBubbleManager23TPhoneClippingDirectionE @ 213 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData11SetCallFlagEN14CBubbleManager19TPhoneCallTypeFlagsE @ 214 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData11SetCallTypeEi @ 215 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData12SetCallStateEi @ 216 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData12SetCipheringEi @ 217 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData12SetLabelTextERK7TDesC16 @ 218 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData12SetServiceIdEm @ 219 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData12SetThumbnailEP10CFbsBitmap @ 220 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData13SetCallerTextERK7TDesC16 @ 221 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData13SetNumberTypeEi @ 222 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData14SetContactLinkERK6TDesC8 @ 223 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData15SetHasThumbnailEi @ 224 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData17SetShortLabelTextERK7TDesC16 @ 225 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData20SetRemotePhoneNumberERK7TDesC16 @ 226 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData21SetParticipantListCLIENS_24TPhoneParticipantListCLIE @ 227 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData28SetCipheringIndicatorAllowedEi @ 228 NONAME
+	_ZN28TPhoneCmdParamCallHeaderData8SetLine2Ei @ 229 NONAME
+	_ZN28TPhoneCmdParamCallHeaderDataC1Ev @ 230 NONAME
+	_ZN28TPhoneCmdParamCallHeaderDataC2Ev @ 231 NONAME
+	_ZN28TPhoneCmdParamReconnectQuery14SetPhoneNumberE7TPtrC16 @ 232 NONAME
+	_ZN28TPhoneCmdParamReconnectQuery17SetContactMatcherEP13CPhCntMatcher @ 233 NONAME
+	_ZN28TPhoneCmdParamReconnectQuery21SetIncludeVideoOptionEi @ 234 NONAME
+	_ZN28TPhoneCmdParamReconnectQueryC1ER27MCaUiReconnectQueryObserver @ 235 NONAME
+	_ZN28TPhoneCmdParamReconnectQueryC2ER27MCaUiReconnectQueryObserver @ 236 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetch16SetCbaResourceIdEi @ 237 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetch22SetTitlePaneResourceIdEi @ 238 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetch4TypeEv @ 239 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetch7SetTypeEN21CPhCntSingleItemFetch10TFetchTypeE @ 240 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetch9SetStringEP6TDes16 @ 241 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetchC1Ev @ 242 NONAME
+	_ZN29TPhoneCmdParamSingleItemFetchC2Ev @ 243 NONAME
+	_ZN30CPhoneMainErrorMessagesHandler8InstanceEv @ 244 NONAME
+	_ZN31TPhoneCmdParamAudioAvailability17SetBTAccAvailableEi @ 245 NONAME
+	_ZN31TPhoneCmdParamAudioAvailability20SetWiredAccAvailableEi @ 246 NONAME
+	_ZN31TPhoneCmdParamAudioAvailabilityC1Ev @ 247 NONAME
+	_ZN31TPhoneCmdParamAudioAvailabilityC2Ev @ 248 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData12SetCallStateEi @ 249 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData12SetCipheringEi @ 250 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData12SetEmergencyEi @ 251 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData22SetLittleBubbleVisibleEi @ 252 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData28SetCipheringIndicatorAllowedEi @ 253 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData7SetModeEi @ 254 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData7SetMuteEi @ 255 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorData8SetLine2Ei @ 256 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorDataC1Ev @ 257 NONAME
+	_ZN33TPhoneCmdParamIncallIndicatorDataC2Ev @ 258 NONAME
+	_ZN33TPhoneCmdParamNumberEntryObserver11SetObserverE9TCallBack @ 259 NONAME
+	_ZN33TPhoneCmdParamNumberEntryObserver8ObserverEv @ 260 NONAME
+	_ZN33TPhoneCmdParamNumberEntryObserverC1Ev @ 261 NONAME
+	_ZN33TPhoneCmdParamNumberEntryObserverC2Ev @ 262 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderData12SetCipheringEi @ 263 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderData12SetLabelTextERK7TDesC16 @ 264 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderData13SetHeaderTextERK7TDesC16 @ 265 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderData21SetOwnPhoneNumberTextERK7TDesC16 @ 266 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderData28SetCipheringIndicatorAllowedEi @ 267 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderDataC1Ev @ 268 NONAME
+	_ZN37TPhoneCmdParamEmergencyCallHeaderDataC2Ev @ 269 NONAME
+	_ZNK17CPhoneCenRepProxy4FindERK4TUidmmR6RArrayImE @ 270 NONAME
+	_ZNK17CPhoneCenRepProxy6GetIntERK4TUidjRi @ 271 NONAME
+	_ZNK17CPhoneCenRepProxy7GetRealERK4TUidjRd @ 272 NONAME
+	_ZNK17CPhoneCenRepProxy9GetStringERK4TUidjR6TDes16 @ 273 NONAME
+	_ZNK18TPhoneCmdParamNote10ResourceIdEv @ 274 NONAME
+	_ZNK18TPhoneCmdParamNote14TextResourceIdEv @ 275 NONAME
+	_ZNK18TPhoneCmdParamNote4TextEv @ 276 NONAME
+	_ZNK18TPhoneCmdParamNote4ToneEv @ 277 NONAME
+	_ZNK18TPhoneCmdParamNote4TypeEv @ 278 NONAME
+	_ZNK18TPhoneCmdParamNote7TimeoutEv @ 279 NONAME
+	_ZNK18TPhoneCommandParam7ParamIdEv @ 280 NONAME
+	_ZNK19CPhoneQwertyHandler13IsQwertyInputEv @ 281 NONAME
+	_ZNK19TPhoneCmdParamQuery10ContentCbaEv @ 282 NONAME
+	_ZNK19TPhoneCmdParamQuery10DefaultCbaEv @ 283 NONAME
+	_ZNK19TPhoneCmdParamQuery11QueryPromptEv @ 284 NONAME
+	_ZNK19TPhoneCmdParamQuery14SendKeyEnabledEv @ 285 NONAME
+	_ZNK19TPhoneCmdParamQuery15QueryResourceIdEv @ 286 NONAME
+	_ZNK19TPhoneCmdParamQuery17CbaCommandMappingEi @ 287 NONAME
+	_ZNK19TPhoneCmdParamQuery25ItemTextArrayForListQueryEv @ 288 NONAME
+	_ZNK19TPhoneCmdParamQuery26GetCustomCommandForTimeOutERi @ 289 NONAME
+	_ZNK19TPhoneCmdParamQuery4ToneEv @ 290 NONAME
+	_ZNK19TPhoneCmdParamQuery7TimeOutEv @ 291 NONAME
+	_ZNK19TPhoneCmdParamQuery8DataTextEv @ 292 NONAME
+	_ZNK19TPhoneCmdParamQuery9QueryTypeEv @ 293 NONAME
+	_ZNK20TPhoneCmdParamBitmap10MaskBitmapEv @ 294 NONAME
+	_ZNK20TPhoneCmdParamBitmap6BitmapEv @ 295 NONAME
+	_ZNK21TPhoneCmdParamAppInfo13CustomMessageEv @ 296 NONAME
+	_ZNK21TPhoneCmdParamAppInfo15CustomMessageIdEv @ 297 NONAME
+	_ZNK21TPhoneCmdParamAppInfo17MultipleInstancesEv @ 298 NONAME
+	_ZNK21TPhoneCmdParamAppInfo5ParamEv @ 299 NONAME
+	_ZNK21TPhoneCmdParamAppInfo6AppUidEv @ 300 NONAME
+	_ZNK21TPhoneCmdParamAppInfo7ViewUidEv @ 301 NONAME
+	_ZNK21TPhoneCmdParamBoolean7BooleanEv @ 302 NONAME
+	_ZNK21TPhoneCmdParamDynMenu10ResourceIdEv @ 303 NONAME
+	_ZNK21TPhoneCmdParamInteger7IntegerEv @ 304 NONAME
+	_ZNK21TPhoneCmdParamPointer7PointerEv @ 305 NONAME
+	_ZNK21TPhoneCmdParamSfiData4NameEv @ 306 NONAME
+	_ZNK21TPhoneCmdParamSfiData6NumberEv @ 307 NONAME
+	_ZNK22CPhoneCallThemeMonitor22CallImageThemeFilePathEv @ 308 NONAME
+	_ZNK22CPhoneCallThemeMonitor22CallImageThemeSettingsEv @ 309 NONAME
+	_ZNK22TPhoneCmdParamKeyEvent8KeyEventEv @ 310 NONAME
+	_ZNK22TPhoneCmdParamKeyEvent9EventCodeEv @ 311 NONAME
+	_ZNK22TPhoneCmdParamRingTone11RingingTypeEv @ 312 NONAME
+	_ZNK22TPhoneCmdParamRingTone4TypeEv @ 313 NONAME
+	_ZNK22TPhoneCmdParamRingTone6VolumeEv @ 314 NONAME
+	_ZNK22TPhoneCmdParamRingTone8RingToneEv @ 315 NONAME
+	_ZNK22TPhoneCmdParamRingTone9TextToSayEv @ 316 NONAME
+	_ZNK23TPhoneCmdParamSpeedDial9ServiceIdEv @ 317 NONAME
+	_ZNK24TPhoneCmdParamGlobalNote12WaitForReadyEv @ 318 NONAME
+	_ZNK24TPhoneCmdParamGlobalNote14TextResourceIdEv @ 319 NONAME
+	_ZNK24TPhoneCmdParamGlobalNote4TextEv @ 320 NONAME
+	_ZNK24TPhoneCmdParamGlobalNote4ToneEv @ 321 NONAME
+	_ZNK24TPhoneCmdParamGlobalNote4TypeEv @ 322 NONAME
+	_ZNK24TPhoneCmdParamGlobalNote8SoftkeysEv @ 323 NONAME
+	_ZNK24TPhoneCmdParamKeyCapture11CaptureTypeEv @ 324 NONAME
+	_ZNK24TPhoneCmdParamKeyCapture3KeyEv @ 325 NONAME
+	_ZNK24TPhoneCmdParamKeyCapture7KeyCodeEv @ 326 NONAME
+	_ZNK25TPhoneCmdParamAudioOutput11AudioOutputEv @ 327 NONAME
+	_ZNK25TPhoneCmdParamTransEffect4TypeEv @ 328 NONAME
+	_ZNK26CPhoneResourceResolverBase17ResolveResourceIDERKi @ 329 NONAME
+	_ZNK26CPhoneResourceResolverBase27IsTelephonyFeatureSupportedEi @ 330 NONAME
+	_ZNK26TPhoneCmdParamProgressNote10ResourceIdEv @ 331 NONAME
+	_ZNK26TPhoneCmdParamProgressNote8WaitTimeEv @ 332 NONAME
+	_ZNK27TPhoneCmdParamCallStateData6CallIdEv @ 333 NONAME
+	_ZNK27TPhoneCmdParamCallStateData9CallStateEv @ 334 NONAME
+	_ZNK27TPhoneCmdParamMessageEditor11MessageDataEv @ 335 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData10CallerTextEv @ 336 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData10NumberTypeEv @ 337 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData11ContactLinkEv @ 338 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData12HasThumbnailEv @ 339 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData14ParticipantCLIEv @ 340 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData14ShortLabelTextEv @ 341 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData17RemotePhoneNumberEv @ 342 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData24CLITextClippingDirectionEv @ 343 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData25CNAPTextClippingDirectionEv @ 344 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData25CipheringIndicatorAllowedEv @ 345 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData5Line2Ev @ 346 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData7CLITextEv @ 347 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData7PictureEv @ 348 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData8CNAPTextEv @ 349 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData8CallFlagEv @ 350 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData8CallTypeEv @ 351 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData9CallStateEv @ 352 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData9CipheringEv @ 353 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData9LabelTextEv @ 354 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData9ServiceIdEv @ 355 NONAME
+	_ZNK28TPhoneCmdParamCallHeaderData9ThumbnailEv @ 356 NONAME
+	_ZNK28TPhoneCmdParamReconnectQuery11PhoneNumberEv @ 357 NONAME
+	_ZNK28TPhoneCmdParamReconnectQuery14ContactMatcherEv @ 358 NONAME
+	_ZNK28TPhoneCmdParamReconnectQuery22IncludeVideoCallOptionEv @ 359 NONAME
+	_ZNK28TPhoneCmdParamReconnectQuery22ReconnectQueryObserverEv @ 360 NONAME
+	_ZNK29TPhoneCmdParamSingleItemFetch13CbaResourceIdEv @ 361 NONAME
+	_ZNK29TPhoneCmdParamSingleItemFetch19TitlePaneResourceIdEv @ 362 NONAME
+	_ZNK29TPhoneCmdParamSingleItemFetch6StringEv @ 363 NONAME
+	_ZNK31TPhoneCmdParamAudioAvailability16IsBTAccAvailableEv @ 364 NONAME
+	_ZNK31TPhoneCmdParamAudioAvailability19IsWiredAccAvailableEv @ 365 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData19LittleBubbleVisibleEv @ 366 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData25CipheringIndicatorAllowedEv @ 367 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData4ModeEv @ 368 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData4MuteEv @ 369 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData5Line2Ev @ 370 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData9CallStateEv @ 371 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData9CipheringEv @ 372 NONAME
+	_ZNK33TPhoneCmdParamIncallIndicatorData9EmergencyEv @ 373 NONAME
+	_ZNK37TPhoneCmdParamEmergencyCallHeaderData10HeaderTextEv @ 374 NONAME
+	_ZNK37TPhoneCmdParamEmergencyCallHeaderData18OwnPhoneNumberTextEv @ 375 NONAME
+	_ZNK37TPhoneCmdParamEmergencyCallHeaderData25CipheringIndicatorAllowedEv @ 376 NONAME
+	_ZNK37TPhoneCmdParamEmergencyCallHeaderData9CipheringEv @ 377 NONAME
+	_ZNK37TPhoneCmdParamEmergencyCallHeaderData9LabelTextEv @ 378 NONAME
+	_ZTI11CPhoneTimer @ 379 NONAME
+	_ZTI12CPhoneLogger @ 380 NONAME
+	_ZTI17CPhoneCenRepProxy @ 381 NONAME
+	_ZTI17CPhonePubSubProxy @ 382 NONAME
+	_ZTI18CPhoneMethodLogger @ 383 NONAME
+	_ZTI19CPhoneQwertyHandler @ 384 NONAME
+	_ZTI20CPhoneClearBlacklist @ 385 NONAME
+	_ZTI20CPhoneRecoverySystem @ 386 NONAME
+	_ZTI22CPhoneCallThemeMonitor @ 387 NONAME
+	_ZTI22CPhoneLibraryContainer @ 388 NONAME
+	_ZTI23CPhoneQwertyModeMonitor @ 389 NONAME
+	_ZTI24CPhoneCenRepEventHandler @ 390 NONAME
+	_ZTI24CPhoneLangSettingMonitor @ 391 NONAME
+	_ZTI25CPhonePublishSubscriberAO @ 392 NONAME
+	_ZTI26CPhoneMainResourceResolver @ 393 NONAME
+	_ZTI26CPhoneResourceResolverBase @ 394 NONAME
+	_ZTI30CPhoneMainErrorMessagesHandler @ 395 NONAME
+	_ZTV11CPhoneTimer @ 396 NONAME
+	_ZTV12CPhoneLogger @ 397 NONAME
+	_ZTV17CPhoneCenRepProxy @ 398 NONAME
+	_ZTV17CPhonePubSubProxy @ 399 NONAME
+	_ZTV18CPhoneMethodLogger @ 400 NONAME
+	_ZTV19CPhoneQwertyHandler @ 401 NONAME
+	_ZTV20CPhoneClearBlacklist @ 402 NONAME
+	_ZTV20CPhoneRecoverySystem @ 403 NONAME
+	_ZTV22CPhoneCallThemeMonitor @ 404 NONAME
+	_ZTV22CPhoneLibraryContainer @ 405 NONAME
+	_ZTV23CPhoneQwertyModeMonitor @ 406 NONAME
+	_ZTV24CPhoneCenRepEventHandler @ 407 NONAME
+	_ZTV24CPhoneLangSettingMonitor @ 408 NONAME
+	_ZTV25CPhonePublishSubscriberAO @ 409 NONAME
+	_ZTV26CPhoneMainResourceResolver @ 410 NONAME
+	_ZTV26CPhoneResourceResolverBase @ 411 NONAME
+	_ZTV30CPhoneMainErrorMessagesHandler @ 412 NONAME
+	_ZThn4_N12CPhoneLoggerD0Ev @ 413 NONAME
+	_ZThn4_N12CPhoneLoggerD1Ev @ 414 NONAME
+	_ZThn4_N26CPhoneResourceResolverBaseD0Ev @ 415 NONAME
+	_ZThn4_N26CPhoneResourceResolverBaseD1Ev @ 416 NONAME
+	_ZThn4_NK26CPhoneResourceResolverBase17ResolveResourceIDERKi @ 417 NONAME
+	_ZN19CPhoneQwertyHandler22AddQwertyModeObserverLER24MPhoneQwertyModeObserver @ 418 NONAME
 
--- a/phoneapp/phoneuiutils/group/phoneuiutils.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/group/phoneuiutils.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -53,7 +53,6 @@
 SOURCE          phoneloggerviewcommands.cpp
 SOURCE          phonestatestrings.cpp
 SOURCE          phonestatestringsgsm.cpp
-SOURCE          cphonestorage.cpp
 SOURCE          rphoneanimclearblacklist.cpp
 SOURCE          tphonecmdparamappinfo.cpp
 SOURCE          tphonecmdparamaudiooutput.cpp
--- a/phoneapp/phoneuiutils/inc/cphoneqwertyhandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/inc/cphoneqwertyhandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -68,6 +68,11 @@
         */
         IMPORT_C TInt NumericKeyCode( const TKeyEvent& aKeyEvent );
 
+        /**
+        * Add qwerty mode observer. 
+        */
+        IMPORT_C void AddQwertyModeObserverL( MPhoneQwertyModeObserver& aObserver );
+
     private:
     
         /**
--- a/phoneapp/phoneuiutils/inc/cphonestorage.h	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Storage of data
-*
-*/
-
-
-#ifndef CPHONESTORAGE_H
-#define CPHONESTORAGE_H
-
-#include "mphonestorage.h"
-#include <e32base.h>
-
-
-// CLASS DECLARATION
-
-/**
- *  Data storage.
- *
- *  @lib PhoneUIUtils.lib
- *  @since S60 v5.0
- */
-class CPhoneStorage : 
-    public CBase, public MPhoneStorage
-    {
-public:
-
-    IMPORT_C static CPhoneStorage* NewL();
-
-    IMPORT_C virtual ~CPhoneStorage();
-    
-    /**
-     * AppendBlockedKeysListL.
-     *
-     * @since S60 v5.0
-     */
-    IMPORT_C void AppendBlockedKeysListL( TStdScanCode aScanCode );
-    
-    /**
-     * GetBlockedKeyList.
-     *
-     * @since S60 v5.0
-     */
-    IMPORT_C const RArray<TInt>& GetBlockedKeyList() const;
-
-    /**
-     * ResetBlockedKeysList.
-     *
-     * @since S60 v5.0
-     */
-    IMPORT_C void ResetBlockedKeysList();
-
-    /**
-     * IsBlockedKeysListEmpty.
-     */
-    IMPORT_C TBool IsBlockedKeysListEmpty();
-
-    /**
-     * SetScreenLocked.
-     */
-    IMPORT_C void SetScreenLocked( TBool aLocked );
-    
-    /**
-     * IsScreenLocked.
-     */
-    IMPORT_C TBool IsScreenLocked();
-    
-    /**
-     * SetNeedToEnableKeylock.
-     */
-    IMPORT_C void SetNeedToEnableKeylock( TBool aNeedToEnableKeylock );
-
-    /**
-     * NeedToEnableKeylock.
-     */
-    IMPORT_C TBool NeedToEnableKeylock();
-    
-private:
-
-    CPhoneStorage();
-    
-    void ConstructL();
-    
-private: // data
-
-     // Blocked key list
-     RArray<TInt> iBlockedKeysScanCode;
-     
-     // Is touch screen locked there is an incoming call
-     TBool iIsScreenLocked;
-     
-     // ETrue, if keylock must enable when call ends
-     TBool iNeedToEnableKeylock;
-    };
-#endif // CPHONESTORAGE_H
--- a/phoneapp/phoneuiutils/inc/mphonestorage.h	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Storage for data.
-*
-*/
-
-
-#ifndef __MPHONESTORAGE_H
-#define __MPHONESTORAGE_H
-
-// INCLUDES
-
-#include <e32base.h>
-#include <e32keys.h>
-
-// CLASS DECLARATION
-
-class MPhoneStorage
-    {
-    public:
-
-        /**
-        * Destructor.
-        */
-        virtual ~MPhoneStorage() {};
-
-        virtual void AppendBlockedKeysListL( TStdScanCode aScanCode ) = 0;
-        
-        virtual const RArray<TInt>& GetBlockedKeyList() const = 0;
-        
-        virtual void ResetBlockedKeysList() = 0;
-        
-        virtual TBool IsBlockedKeysListEmpty() = 0;
-        
-        virtual void SetScreenLocked( TBool aLocked ) = 0;
-        
-        virtual TBool IsScreenLocked() = 0;
-        
-        virtual TBool NeedToEnableKeylock() = 0;
-        
-        virtual void SetNeedToEnableKeylock( TBool aEnableKeylock ) = 0;
-    };
-
-#endif // __MPHONESTORAGE_H
-
-// End of File
--- a/phoneapp/phoneuiutils/inc/phoneconstants.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/inc/phoneconstants.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2005-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"
@@ -63,6 +63,9 @@
 const TUid KPhoneUidLogStm = { 0x01002982 };        // Id for stm for Log application
 _LIT8( KPhoneStmLoadMagicString, "outside" );       // Message for activating view of an application
 
+// SimLock Ui UID to launch the SimLock App
+const TUid KSimLockUIApplicationUid= {0x2000B0FA};
+
 // Used in CPhoneKeyEventHandler
 // Seconds in microseconds
 const TInt KPhoneSecondInMicroseconds = 1000000;
--- a/phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,21 +1,23 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ============================================================================
+*  Name     : phoneloggerviewcommands.h
+*  Part of  : PhoneUI / phoneuiutils.dll
+*
+*  Description:
+*     Macro definition file for logging.
+*  Version:
 *
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Macro definition file for logging.
-*
+*  Copyright © 2007 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing,  adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ============================================================================
 */
-
 // Autogenerated from phoneloggerviewcommands.st by the stringtable tool - Do not edit
 
 #ifndef STRINGTABLE_PhoneLoggerviewCommands
@@ -255,8 +257,6 @@
 		EPhoneViewSetStatusPaneVisible,
 		/** EPhoneViewEnableKeyLock */
 		EPhoneViewEnableKeyLock,
-		/** EPhoneViewEnableKeyLockWithoutNote */
-		EPhoneViewEnableKeyLockWithoutNote,
 		/** EPhoneViewLaunchFaxModem */
 		EPhoneViewLaunchFaxModem,
 		/** EPhoneViewUpdateFSW */
@@ -293,8 +293,8 @@
 		EPhoneViewIsStraightCallToVideoMailBox,
 		/** EPhoneViewSetDtmfDialerViewVisible */
 		EPhoneViewSetDtmfDialerViewVisible,
-		/** EPhoneViewSetRetrictedDialer */
-		EPhoneViewSetRetrictedDialer,
+		/** EPhoneViewSetRestrictedDialer */
+		EPhoneViewSetRestrictedDialer,
 		/** EPhoneViewIsConferenceInExpandedMode */
 		EPhoneViewIsConferenceInExpandedMode,
 		/** EPhoneViewIsMenuBarVisible */
@@ -367,10 +367,6 @@
 		EPhoneViewCancelAllNotications,
 		/** EPhoneViewSetVideoCallDTMFVisibilityFlag */
 		EPhoneViewSetVideoCallDTMFVisibilityFlag,
-		/** EPhoneViewIsKeyLockEnabled */
-		EPhoneViewIsKeyLockEnabled,
-		/** EPhoneViewDisableKeyLock */
-		EPhoneViewDisableKeyLock,
 		/** EPhoneViewLoadPlugins */
 		EPhoneViewLoadPlugins,
 		/** PhoneViewServiceSelection */
@@ -415,6 +411,30 @@
 		EPhoneViewSetNoConnectedCalls,
 		/** EPhoneViewIsDTMFEditorVisible */
 		EPhoneViewIsDTMFEditorVisible,
+		/** EPhoneViewSetToolbarDimming */
+		EPhoneViewSetToolbarDimming,
+		/** EPhoneViewEnableToolbarButton */
+		EPhoneViewEnableToolbarButton,
+		/** EPhoneViewHideToolbar */
+		EPhoneViewHideToolbar,
+		/** EPhoneViewShowToolbar */
+		EPhoneViewShowToolbar,
+		/** EPhoneViewGetEasyDialingInFocusStatus */
+		EPhoneViewGetEasyDialingInFocusStatus,
+		/** EPhoneViewSetInvalidCsPhoneNumberFlag */
+		EPhoneViewSetInvalidCsPhoneNumberFlag,
+		/** EPhoneViewGetInvalidCsPhoneNumberFlag */
+		EPhoneViewGetInvalidCsPhoneNumberFlag,
+		/** EPhoneViewGetEasyDialingMenuId */
+		EPhoneViewGetEasyDialingMenuId,
+		/** EPhoneViewGetEasyDialingCbaId */
+		EPhoneViewGetEasyDialingCbaId,
+		/** EPhoneViewGetNeedToReturnToForegroundAppStatus */
+		EPhoneViewGetNeedToReturnToForegroundAppStatus,
+		/** EPhoneViewSetNeedToReturnToForegroundAppStatus */
+		EPhoneViewSetNeedToReturnToForegroundAppStatus,
+		/** EPhoneViewGetQwertyModeObserver */
+		EPhoneViewGetQwertyModeObserver,
 		/** , // Don't remove this, this should always be the last in list. */
 		EPhoneAmountOfCommands
 		};
--- a/phoneapp/phoneuiutils/inc/phonerssbase.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/inc/phonerssbase.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002 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"
@@ -37,7 +37,6 @@
     EPhoneExitEmergencyModeQuery,
     EPhoneIncomingCallLabel,
     EPhoneIncomingCallLabelShort,
-    EPhoneIncomingCallKeysLocked,
     EPhoneOutgoingVideoCallLabel,
     EPhoneOutgoingVideoCallLabelShort,
     EPhoneOutgoingCallLabel,
@@ -359,6 +358,7 @@
     EPhoneNoteTTYNoAudioControl, //300
     EPhoneInfoClirChange,
     EPhoneInfoCugInUse,
+    EPhoneSIMInvalidUICC,
 
     //the "DTMF number" list query
     EPhoneDtmfNumberListQuery,
@@ -369,6 +369,7 @@
 
     // Touch buttons
     EPhoneIncallButtons,
+    EPhoneIncallVideoShareButtons,
     EPhoneTwoSinglesButtons,
     EPhoneConferenceButtons,
     EPhoneParticipantListButtons,
@@ -389,6 +390,8 @@
     EPhoneNoteUnableToMakeVideoCallNotSupportedByOtherPhone, // cause 57,88 
     EPhoneNoteCalledNumberHasBarredIncomingCalls, // cause 21
 
+    EPhoneEasyDialingCba, // the CBA resource id is asked from Easydialing plugin
+
     // Last
     EPhoneRssBaseLast
     };
--- a/phoneapp/phoneuiutils/inc/phonerssvoip.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/inc/phonerssvoip.h	Fri Apr 23 14:59:43 2010 +0100
@@ -89,6 +89,8 @@
     EPhoneVoIPCallsNotSupported,
     EPhoneVoIPNotAvailableWhenConnecting,
     EPhoneVoIPDefectiveSettings,
+    EPhoneVoIPTransferCallBackHeader,
+    EPhoneVoIPTransferCallBackText,
     // Last
     EPhoneVoIPLast
     };
--- a/phoneapp/phoneuiutils/src/cphonepubsubproxy.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/cphonepubsubproxy.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -301,22 +301,6 @@
             // Remove observer 
             observerRemoved = ETrue;
             iObserverArray->Delete( i );
-
-            // Remove this observers' subscriptions
-            TInt pubSubCount = iPublishSubscriberArray->Count();
-     
-            for ( TInt j = pubSubCount - 1; j >= 0; j++ )
-                {
-                CPhonePublishSubscriberAO* publishSubscriber = 
-                    iPublishSubscriberArray->At( j );
-
-                if ( publishSubscriber->Category() == observerTag.iCategory && 
-                    publishSubscriber->Key() == observerTag.iKey )
-                    {
-                    iPublishSubscriberArray->Delete( i );
-                    delete publishSubscriber;
-                    }
-                }
             }
         }
     }
--- a/phoneapp/phoneuiutils/src/cphoneqwertyhandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/cphoneqwertyhandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -228,4 +228,18 @@
     return EKeyNull;         
     }           
 
+// -----------------------------------------------------------------------------
+// CPhoneQwertyHandler::AddQwertyModeObserverL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPhoneQwertyHandler::AddQwertyModeObserverL( 
+        MPhoneQwertyModeObserver& aObserver )
+    {
+    iQwertyModeMonitor->AddObserverL( aObserver );
+    
+    // Observer need to be notified with a current qwerty status so that
+    // status dependent objects would get correct initial value.
+    aObserver.HandleQwertyModeChange( iQwertyMode );
+    }
+
 //  End of File  
--- a/phoneapp/phoneuiutils/src/cphoneqwertymodemonitor.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/cphoneqwertymodemonitor.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -126,6 +126,9 @@
         if ( aKey == KAknQwertyInputModeActive )
             {
             iQwertyMode = aValue;
+            
+            __PHONELOG1( EBasic, EPhoneUIUtils, 
+                    "CPhoneQwertyModeMonitor::HandlePropertyChangedL KAknQwertyInputModeActive = %d", aValue  );
 
             for ( TInt i = 0; i < iObserverArray.Count(); i++ ) 
                 {
@@ -136,6 +139,9 @@
 #ifdef RD_INTELLIGENT_TEXT_INPUT        
         else if ( aKey == KAknKeyBoardLayout )
             {
+            __PHONELOG1( EBasic, EPhoneUIUtils, 
+                    "CPhoneQwertyModeMonitor::HandlePropertyChangedL KAknKeyBoardLayout = %d", aValue  );
+
             for ( TInt i = 0; i < iObserverArray.Count(); i++ ) 
                 {
                 iKeyboard = aValue;
--- a/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 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"
@@ -964,10 +964,6 @@
             retVal = R_PHONE_EXIT_EMERGENCY_MODE_QUERY;
             break;
 
-        case EPhoneIncomingCallKeysLocked:
-            retVal = R_NOTETEXT_USE_KEYGUARD_TO_UNLOCK;
-            break;
-
         case EPhoneIncomingCallLabel:
             retVal = R_PHONEUI_MTCAL_INCOMING_CALL;
             break;
@@ -1113,7 +1109,7 @@
             break;
 
         case EPhoneInformationWaitNote:
-            retVal = R_PHONE_INFORMATION_NOTE_WITH_WAIT;
+            retVal = R_PHONE_INFORMATION_NOTE_WITH_CBA;
             break;
 
         case EPhoneInformationErrorNote:
@@ -1307,6 +1303,9 @@
             retVal = R_PHONEUI_SIM_REMOVED;
             break;
 
+        case EPhoneSIMInvalidUICC:
+            retVal = R_SIM_INVALID_UICC;
+            break;
         case EPhoneRebootRequired:
             retVal = R_PHONEUI_REBOOT_REQUIRED;
             break;
@@ -1371,6 +1370,10 @@
             retVal = R_PHONEUI_INCALL_BUTTONS;
             break;
 
+        case EPhoneIncallVideoShareButtons:
+            retVal = R_PHONEUI_INCALL_VIDEO_SHARE_BUTTONS;
+            break;
+
         case EPhoneTwoSinglesButtons:
             retVal = R_PHONEUI_TWO_SINGLES_BUTTONS;
             break;
--- a/phoneapp/phoneuiutils/src/cphonestorage.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Storage of data
-*
-*/
-
-
-#include <eikappui.h>
-#include <eikenv.h>
-#include "cphonestorage.h"
-#include "phonelogger.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// Constructor
-// ---------------------------------------------------------------------------
-//
-CPhoneStorage::CPhoneStorage()
-    : iIsScreenLocked( EFalse ),
-    iNeedToEnableKeylock( EFalse )
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::CPhoneStorage()");
-    }
-
-// ---------------------------------------------------------------------------
-// Second phase constructor
-// ---------------------------------------------------------------------------
-//
-void CPhoneStorage::ConstructL()
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::ConstructL()");
-    }
-
-// ---------------------------------------------------------------------------
-// Static constructor
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CPhoneStorage* CPhoneStorage::NewL()
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::NewL()");
-    CPhoneStorage* self = 
-        new (ELeave) CPhoneStorage();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CPhoneStorage::~CPhoneStorage()
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::~CPhoneStorage()");
-    iBlockedKeysScanCode.Reset();
-    iBlockedKeysScanCode.Close();
-    }
-
-// ---------------------------------------------------------------------------
-// CPhoneStorage::AppendBlockedKeysListL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CPhoneStorage::AppendBlockedKeysListL( TStdScanCode aScanCode )
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::AppendBlockedKeysListL()");
-    iBlockedKeysScanCode.AppendL( aScanCode );
-    }
-
-// -----------------------------------------------------------
-// CPhoneStorage::GetBlockedKeyList
-// -----------------------------------------------------------
-//
-EXPORT_C const RArray<TInt>& CPhoneStorage::GetBlockedKeyList() const
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::GetBlockedKeyList()");
-    return iBlockedKeysScanCode;
-    }
-
-// -----------------------------------------------------------
-// CPhoneStorage::ResetBlockedKeysList
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneStorage::ResetBlockedKeysList()
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::ResetBlockedKeysList()");
-    iBlockedKeysScanCode.Reset();
-    }
-
-// -----------------------------------------------------------
-// CPhoneStorage::IsBlockedKeysListSet
-// -----------------------------------------------------------
-//
-EXPORT_C TBool CPhoneStorage::IsBlockedKeysListEmpty()
-    {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneStorage::IsBlockedKeysListSet()");
-    TBool ret = ETrue;
-    if( iBlockedKeysScanCode.Count() )
-        {
-        ret = EFalse;
-        }
-    return ret;
-    }
-
-// -----------------------------------------------------------
-// CPhoneStorage::SetScreenLocked
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneStorage::SetScreenLocked( TBool aLocked )
-    {
-    iIsScreenLocked = aLocked;
-    }
-
-// -----------------------------------------------------------
-// CPhoneStorage::IsScreenLocked
-// -----------------------------------------------------------
-//
-EXPORT_C TBool CPhoneStorage::IsScreenLocked()
-    {
-    return iIsScreenLocked;
-    }
-
-// -----------------------------------------------------------
-// CPhoneStorage::NeedToEnableKeylock
-// -----------------------------------------------------------
-//
-EXPORT_C TBool CPhoneStorage::NeedToEnableKeylock()
-    {
-    return iNeedToEnableKeylock;
-    }
-
-
-// -----------------------------------------------------------
-// CPhoneStorage::NeedToEnableKeylock
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneStorage::SetNeedToEnableKeylock( TBool aNeedToEnableKeylock )
-    {
-    iNeedToEnableKeylock = aNeedToEnableKeylock;
-    }
-
-// END
--- a/phoneapp/phoneuiutils/src/cphonetimer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/cphonetimer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,6 @@
 // INCLUDE FILES
 #include "cphonetimer.h"
 #include "phoneui.pan"
-#include "phonelogger.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -31,7 +30,6 @@
 CPhoneTimer::CPhoneTimer( TInt aPriority ) :
     CTimer( aPriority)
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::CPhoneTimer() ");
     CActiveScheduler::Add( this );
     }
 
@@ -41,7 +39,6 @@
 //
 void CPhoneTimer::ConstructL()
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::ConstructL() ");
     CTimer::ConstructL();
     }
 
@@ -51,7 +48,6 @@
 //
 EXPORT_C CPhoneTimer* CPhoneTimer::NewL( TInt aPriority )
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::NewL() ");
     CPhoneTimer* self = new (ELeave) CPhoneTimer( aPriority );
     
     CleanupStack::PushL( self );
@@ -67,7 +63,6 @@
 //
 EXPORT_C CPhoneTimer::~CPhoneTimer()
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::~CPhoneTimer() ");
     Cancel();    
     }
 
@@ -77,10 +72,6 @@
 //
 void CPhoneTimer::RunL()
     {
-    __PHONELOG1( EBasic, EPhoneUIUtils, 
-        "CPhoneTimer::RunL iStatus(%d)", 
-        iStatus.Int() );
-    
     if ( iStatus != KErrNone )
         {
         //error code is ignored, as CPeriodic. 
@@ -89,14 +80,10 @@
    
     if ( !iTimerObserver )
         {
-        __PHONELOG( EBasic, EPhoneUIUtils, 
-            "CPhoneTimer::RunL CallBack" );
         iCallBack.CallBack();
         }
     else
         {
-        __PHONELOG( EBasic, EPhoneUIUtils, 
-            "CPhoneTimer::RunL HandleTimeOutL" );
         iTimerObserver->HandleTimeOutL();
         }
     }
@@ -109,7 +96,6 @@
     TTimeIntervalMicroSeconds32 anInterval, 
     TCallBack aCallBack )
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::After() ");
     
     if ( IsActive() )
         {
@@ -129,7 +115,6 @@
     TTimeIntervalMicroSeconds32 anInterval, 
     MPhoneTimer* aObserver )
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::After() ");
     
     __ASSERT_DEBUG( aObserver, Panic( EPhoneUtilsParameterNotInitialized ) );
     
@@ -147,7 +132,6 @@
 //
 EXPORT_C void CPhoneTimer::CancelTimer()
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::CancelTimer() ");
     Cancel();
     }
 
@@ -157,7 +141,6 @@
 //
 void CPhoneTimer::DoCancel()
     {
-    __LOGMETHODSTARTEND(EPhoneUIUtils, "CPhoneTimer::DoCancel() ");
     iTimerObserver = NULL;
     CTimer::DoCancel();
     }
--- a/phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,21 +1,23 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ============================================================================
+*  Name     : phoneloggerviewcommands.cpp
+*  Part of  : PhoneUI / phoneuiutils.dll
+*
+*  Description:
+*     Macro definition file for logging.
+*  Version:
 *
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Macro definition file for logging.
-*
+*  Copyright © 2007 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing,  adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ============================================================================
 */
-
 // Autogenerated from phoneloggerviewcommands.st by the stringtable tool - Do not edit
 #include <e32std.h>
 #include <stringpool.h>
@@ -137,87 +139,96 @@
 _STLIT8(K110, "EPhoneViewGetSecurityModeStatus");
 _STLIT8(K111, "EPhoneViewSetStatusPaneVisible");
 _STLIT8(K112, "EPhoneViewEnableKeyLock");
-_STLIT8(K113, "EPhoneViewEnableKeyLockWithoutNote");
-_STLIT8(K114, "EPhoneViewLaunchFaxModem");
-_STLIT8(K115, "EPhoneViewUpdateFSW");
-_STLIT8(K116, "EPhoneViewIsQuery");
-_STLIT8(K117, "EPhoneViewBringIdleToForeground");
-_STLIT8(K118, "EPhoneViewSetIdleTopApplication");
-_STLIT8(K119, "EPhoneViewBeginUpdate");
-_STLIT8(K120, "EPhoneViewEndUpdate");
-_STLIT8(K121, "EPhoneViewSetConfrenceOptionsFlag");
-_STLIT8(K122, "EPhoneViewRemoveConferenceBubble");
-_STLIT8(K123, "EPhoneViewGetSoftRejectWindowGroupId");
-_STLIT8(K124, "EPhoneViewSetTouchPaneButtons");
-_STLIT8(K125, "EPhoneViewSetTouchPaneVisible");
-_STLIT8(K126, "EPhoneViewEnableTouchButton");
-_STLIT8(K127, "EPhoneViewDisableTouchButton");
-_STLIT8(K128, "EPhoneResetTouchButtons");
-_STLIT8(K129, "EPhoneViewGetIsConferenceInSelectionMode");
-_STLIT8(K130, "EPhoneViewIsStraightCallToVideoMailBox");
-_STLIT8(K131, "EPhoneViewSetDtmfDialerViewVisible");
-_STLIT8(K132, "EPhoneViewSetRetrictedDialer");
-_STLIT8(K133, "EPhoneViewIsConferenceInExpandedMode");
-_STLIT8(K134, "EPhoneViewIsMenuBarVisible");
-_STLIT8(K135, "EPhoneViewGetBlockingDialogStatus");
-_STLIT8(K136, "EPhoneViewYesSingleItemFetch");
-_STLIT8(K137, "EPhoneViewNoSingleItemFetch");
-_STLIT8(K138, "EPhoneViewGetLocalizedNumberFromEntry");
-_STLIT8(K139, "EPhoneViewIsNoteActive");
-_STLIT8(K140, "EPhoneViewOpenNumberEntry");
-_STLIT8(K141, "EPhoneViewOpenCallHandling");
-_STLIT8(K142, "EPhoneViewGetConferenceAndSingleFlag");
-_STLIT8(K143, "EPhoneViewSetConferenceAndSingleFlag");
-_STLIT8(K144, "EPhoneViewSetVideoCallFlag");
-_STLIT8(K145, "EPhoneViewSetDtmfOptionsFlag");
-_STLIT8(K146, "EPhoneViewShowVTSetupFailedCreateCallToSameContactQuery");
-_STLIT8(K147, "EPhoneViewGetAudioVolumeLevel");
-_STLIT8(K148, "EPhoneViewIsIdleTopApp");
-_STLIT8(K149, "EPhoneViewUpdateToolbar");
-_STLIT8(K150, "EPhoneViewSetControlAndVisibility");
-_STLIT8(K151, "EPhoneViewAllowWaitingCallHeader");
-_STLIT8(K152, "EPhoneViewBeginTransEffect");
-_STLIT8(K153, "EPhoneViewEndTransEffect");
-_STLIT8(K154, "EPhoneViewSetDialerControlVisible");
-_STLIT8(K155, "EPhoneViewCloseSingleItemFetchDialog");
-_STLIT8(K156, "EPhoneViewGetActivatePreviousApp");
-_STLIT8(K157, "EPhoneViewActivatePreviousApp");
-_STLIT8(K158, "EPhoneViewSetPointerCapture");
-_STLIT8(K159, "EPhoneViewSetSendKeyDialerActivationFlag");
-_STLIT8(K160, "EPhoneViewPrepareIcons");
-_STLIT8(K161, "EPhoneViewKeypadAudioEnabled");
-_STLIT8(K162, "EPhoneViewKeypadAudioDisabled");
-_STLIT8(K163, "EPhoneViewUpdateCallHeaderRemoteInfoDataAndLabel");
-_STLIT8(K164, "EPhoneViewRemoveDtmfNote");
-_STLIT8(K165, "EPhoneViewUpdatePhoneIconToFSW");
-_STLIT8(K166, "EPhoneViewSetEikonNotifiersDisabled");
-_STLIT8(K167, "EPhoneViewCancelAllNotications");
-_STLIT8(K168, "EPhoneViewSetVideoCallDTMFVisibilityFlag");
-_STLIT8(K169, "EPhoneViewIsKeyLockEnabled");
-_STLIT8(K170, "EPhoneViewDisableKeyLock");
-_STLIT8(K171, "EPhoneViewLoadPlugins");
-_STLIT8(K172, "PhoneViewServiceSelection");
-_STLIT8(K173, "EPhoneViewOpenVirtualKeyBoard");
-_STLIT8(K174, "EPhoneViewUpdateNoteSoftkeys");
-_STLIT8(K175, "EPhoneViewShowCustomizedDialer");
-_STLIT8(K176, "EPhoneViewHideCustomizedDialer");
-_STLIT8(K177, "EPhoneViewGetCustomizedDialerMenuResourceId");
-_STLIT8(K178, "EPhoneViewGetCustomizedDialerCbaResourceId");
-_STLIT8(K179, "EPhoneViewCreatePhoneBookServices");
-_STLIT8(K180, "EPhoneViewDisableKeyLockWithoutNote");
-_STLIT8(K181, "EPhoneViewGetKeyLockStatus");
-_STLIT8(K182, "EPhoneViewSetNumberEntryObserver");
-_STLIT8(K183, "EPhoneViewGetSingleItemFetchType");
-_STLIT8(K184, "EPhoneViewRemoveGlobalWaitNote");
-_STLIT8(K185, "EPhoneViewSetPhoneCustomization");
-_STLIT8(K186, "EPhoneViewSetViewCustomization");
-_STLIT8(K187, "EPhoneViewSetButtonCustomization");
-_STLIT8(K188, "EPhoneViewUpdateContactByString");
-_STLIT8(K189, "EPhoneViewAddContactByString");
-_STLIT8(K190, "EPhoneViewIsActiveNoteDissmissableByKeyEvent");
-_STLIT8(K191, "EPhoneViewSetNoConnectedCalls");
-_STLIT8(K192, "EPhoneViewIsDTMFEditorVisible");
-_STLIT8(K193, ", // Don't remove this, this should always be the last in list.");
+_STLIT8(K113, "EPhoneViewLaunchFaxModem");
+_STLIT8(K114, "EPhoneViewUpdateFSW");
+_STLIT8(K115, "EPhoneViewIsQuery");
+_STLIT8(K116, "EPhoneViewBringIdleToForeground");
+_STLIT8(K117, "EPhoneViewSetIdleTopApplication");
+_STLIT8(K118, "EPhoneViewBeginUpdate");
+_STLIT8(K119, "EPhoneViewEndUpdate");
+_STLIT8(K120, "EPhoneViewSetConfrenceOptionsFlag");
+_STLIT8(K121, "EPhoneViewRemoveConferenceBubble");
+_STLIT8(K122, "EPhoneViewGetSoftRejectWindowGroupId");
+_STLIT8(K123, "EPhoneViewSetTouchPaneButtons");
+_STLIT8(K124, "EPhoneViewSetTouchPaneVisible");
+_STLIT8(K125, "EPhoneViewEnableTouchButton");
+_STLIT8(K126, "EPhoneViewDisableTouchButton");
+_STLIT8(K127, "EPhoneResetTouchButtons");
+_STLIT8(K128, "EPhoneViewGetIsConferenceInSelectionMode");
+_STLIT8(K129, "EPhoneViewIsStraightCallToVideoMailBox");
+_STLIT8(K130, "EPhoneViewSetDtmfDialerViewVisible");
+_STLIT8(K131, "EPhoneViewSetRestrictedDialer");
+_STLIT8(K132, "EPhoneViewIsConferenceInExpandedMode");
+_STLIT8(K133, "EPhoneViewIsMenuBarVisible");
+_STLIT8(K134, "EPhoneViewGetBlockingDialogStatus");
+_STLIT8(K135, "EPhoneViewYesSingleItemFetch");
+_STLIT8(K136, "EPhoneViewNoSingleItemFetch");
+_STLIT8(K137, "EPhoneViewGetLocalizedNumberFromEntry");
+_STLIT8(K138, "EPhoneViewIsNoteActive");
+_STLIT8(K139, "EPhoneViewOpenNumberEntry");
+_STLIT8(K140, "EPhoneViewOpenCallHandling");
+_STLIT8(K141, "EPhoneViewGetConferenceAndSingleFlag");
+_STLIT8(K142, "EPhoneViewSetConferenceAndSingleFlag");
+_STLIT8(K143, "EPhoneViewSetVideoCallFlag");
+_STLIT8(K144, "EPhoneViewSetDtmfOptionsFlag");
+_STLIT8(K145, "EPhoneViewShowVTSetupFailedCreateCallToSameContactQuery");
+_STLIT8(K146, "EPhoneViewGetAudioVolumeLevel");
+_STLIT8(K147, "EPhoneViewIsIdleTopApp");
+_STLIT8(K148, "EPhoneViewUpdateToolbar");
+_STLIT8(K149, "EPhoneViewSetControlAndVisibility");
+_STLIT8(K150, "EPhoneViewAllowWaitingCallHeader");
+_STLIT8(K151, "EPhoneViewBeginTransEffect");
+_STLIT8(K152, "EPhoneViewEndTransEffect");
+_STLIT8(K153, "EPhoneViewSetDialerControlVisible");
+_STLIT8(K154, "EPhoneViewCloseSingleItemFetchDialog");
+_STLIT8(K155, "EPhoneViewGetActivatePreviousApp");
+_STLIT8(K156, "EPhoneViewActivatePreviousApp");
+_STLIT8(K157, "EPhoneViewSetPointerCapture");
+_STLIT8(K158, "EPhoneViewSetSendKeyDialerActivationFlag");
+_STLIT8(K159, "EPhoneViewPrepareIcons");
+_STLIT8(K160, "EPhoneViewKeypadAudioEnabled");
+_STLIT8(K161, "EPhoneViewKeypadAudioDisabled");
+_STLIT8(K162, "EPhoneViewUpdateCallHeaderRemoteInfoDataAndLabel");
+_STLIT8(K163, "EPhoneViewRemoveDtmfNote");
+_STLIT8(K164, "EPhoneViewUpdatePhoneIconToFSW");
+_STLIT8(K165, "EPhoneViewSetEikonNotifiersDisabled");
+_STLIT8(K166, "EPhoneViewCancelAllNotications");
+_STLIT8(K167, "EPhoneViewSetVideoCallDTMFVisibilityFlag");
+_STLIT8(K168, "EPhoneViewLoadPlugins");
+_STLIT8(K169, "PhoneViewServiceSelection");
+_STLIT8(K170, "EPhoneViewOpenVirtualKeyBoard");
+_STLIT8(K171, "EPhoneViewUpdateNoteSoftkeys");
+_STLIT8(K172, "EPhoneViewShowCustomizedDialer");
+_STLIT8(K173, "EPhoneViewHideCustomizedDialer");
+_STLIT8(K174, "EPhoneViewGetCustomizedDialerMenuResourceId");
+_STLIT8(K175, "EPhoneViewGetCustomizedDialerCbaResourceId");
+_STLIT8(K176, "EPhoneViewCreatePhoneBookServices");
+_STLIT8(K177, "EPhoneViewDisableKeyLockWithoutNote");
+_STLIT8(K178, "EPhoneViewGetKeyLockStatus");
+_STLIT8(K179, "EPhoneViewSetNumberEntryObserver");
+_STLIT8(K180, "EPhoneViewGetSingleItemFetchType");
+_STLIT8(K181, "EPhoneViewRemoveGlobalWaitNote");
+_STLIT8(K182, "EPhoneViewSetPhoneCustomization");
+_STLIT8(K183, "EPhoneViewSetViewCustomization");
+_STLIT8(K184, "EPhoneViewSetButtonCustomization");
+_STLIT8(K185, "EPhoneViewUpdateContactByString");
+_STLIT8(K186, "EPhoneViewAddContactByString");
+_STLIT8(K187, "EPhoneViewIsActiveNoteDissmissableByKeyEvent");
+_STLIT8(K188, "EPhoneViewSetNoConnectedCalls");
+_STLIT8(K189, "EPhoneViewIsDTMFEditorVisible");
+_STLIT8(K190, "EPhoneViewSetToolbarDimming");
+_STLIT8(K191, "EPhoneViewEnableToolbarButton");
+_STLIT8(K192, "EPhoneViewHideToolbar");
+_STLIT8(K193, "EPhoneViewShowToolbar");
+_STLIT8(K194, "EPhoneViewGetEasyDialingInFocusStatus");
+_STLIT8(K195, "EPhoneViewSetInvalidCsPhoneNumberFlag");
+_STLIT8(K196, "EPhoneViewGetInvalidCsPhoneNumberFlag");
+_STLIT8(K197, "EPhoneViewGetEasyDialingMenuId");
+_STLIT8(K198, "EPhoneViewGetEasyDialingCbaId");
+_STLIT8(K199, "EPhoneViewGetNeedToReturnToForegroundAppStatus");
+_STLIT8(K200, "EPhoneViewSetNeedToReturnToForegroundAppStatus");
+_STLIT8(K201, "EPhoneViewGetQwertyModeObserver");
+_STLIT8(K202, ", // Don't remove this, this should always be the last in list.");
 
 // Intermediate
 const void * const KStringPointers[] =
@@ -414,8 +425,17 @@
 	(const void*)&K190,
 	(const void*)&K191,
 	(const void*)&K192,
-	(const void*)&K193
+	(const void*)&K193,
+	(const void*)&K194,
+	(const void*)&K195,
+	(const void*)&K196,
+	(const void*)&K197,
+	(const void*)&K198,
+	(const void*)&K199,
+	(const void*)&K200,
+	(const void*)&K201,
+	(const void*)&K202
 	};
 
-const TStringTable PhoneLoggerviewCommands::Table = {193, KStringPointers, EFalse};
+const TStringTable PhoneLoggerviewCommands::Table = {202, KStringPointers, EFalse};
 
--- a/phoneapp/phoneuiutils/src/phoneloggerviewcommands.st	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiutils/src/phoneloggerviewcommands.st	Fri Apr 23 14:59:43 2010 +0100
@@ -112,7 +112,6 @@
 EPhoneViewGetSecurityModeStatus EPhoneViewGetSecurityModeStatus
 EPhoneViewSetStatusPaneVisible EPhoneViewSetStatusPaneVisible
 EPhoneViewEnableKeyLock EPhoneViewEnableKeyLock
-EPhoneViewEnableKeyLockWithoutNote EPhoneViewEnableKeyLockWithoutNote
 EPhoneViewLaunchFaxModem EPhoneViewLaunchFaxModem
 EPhoneViewUpdateFSW EPhoneViewUpdateFSW
 EPhoneViewIsQuery EPhoneViewIsQuery
@@ -131,7 +130,7 @@
 EPhoneViewGetIsConferenceInSelectionMode EPhoneViewGetIsConferenceInSelectionMode  
 EPhoneViewIsStraightCallToVideoMailBox EPhoneViewIsStraightCallToVideoMailBox
 EPhoneViewSetDtmfDialerViewVisible EPhoneViewSetDtmfDialerViewVisible
-EPhoneViewSetRetrictedDialer EPhoneViewSetRetrictedDialer
+EPhoneViewSetRestrictedDialer EPhoneViewSetRestrictedDialer
 EPhoneViewIsConferenceInExpandedMode EPhoneViewIsConferenceInExpandedMode 
 EPhoneViewIsMenuBarVisible EPhoneViewIsMenuBarVisible
 EPhoneViewGetBlockingDialogStatus EPhoneViewGetBlockingDialogStatus
@@ -168,8 +167,6 @@
 EPhoneViewSetEikonNotifiersDisabled EPhoneViewSetEikonNotifiersDisabled
 EPhoneViewCancelAllNotications EPhoneViewCancelAllNotications
 EPhoneViewSetVideoCallDTMFVisibilityFlag EPhoneViewSetVideoCallDTMFVisibilityFlag
-EPhoneViewIsKeyLockEnabled EPhoneViewIsKeyLockEnabled
-EPhoneViewDisableKeyLock EPhoneViewDisableKeyLock
 EPhoneViewLoadPlugins EPhoneViewLoadPlugins
 PhoneViewServiceSelection PhoneViewServiceSelection
 EPhoneViewOpenVirtualKeyBoard EPhoneViewOpenVirtualKeyBoard
@@ -192,4 +189,16 @@
 EPhoneViewIsActiveNoteDissmissableByKeyEvent EPhoneViewIsActiveNoteDissmissableByKeyEvent
 EPhoneViewSetNoConnectedCalls EPhoneViewSetNoConnectedCalls
 EPhoneViewIsDTMFEditorVisible EPhoneViewIsDTMFEditorVisible
+EPhoneViewSetToolbarDimming EPhoneViewSetToolbarDimming
+EPhoneViewEnableToolbarButton EPhoneViewEnableToolbarButton
+EPhoneViewHideToolbar EPhoneViewHideToolbar
+EPhoneViewShowToolbar EPhoneViewShowToolbar
+EPhoneViewGetEasyDialingInFocusStatus EPhoneViewGetEasyDialingInFocusStatus
+EPhoneViewSetInvalidCsPhoneNumberFlag EPhoneViewSetInvalidCsPhoneNumberFlag
+EPhoneViewGetInvalidCsPhoneNumberFlag EPhoneViewGetInvalidCsPhoneNumberFlag
+EPhoneViewGetEasyDialingMenuId EPhoneViewGetEasyDialingMenuId
+EPhoneViewGetEasyDialingCbaId EPhoneViewGetEasyDialingCbaId
+EPhoneViewGetNeedToReturnToForegroundAppStatus EPhoneViewGetNeedToReturnToForegroundAppStatus
+EPhoneViewSetNeedToReturnToForegroundAppStatus EPhoneViewSetNeedToReturnToForegroundAppStatus
+EPhoneViewGetQwertyModeObserver EPhoneViewGetQwertyModeObserver
 EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list.
--- a/phoneapp/phoneuiview/bwins/phoneuiviewu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/bwins/phoneuiviewu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -1,27 +1,40 @@
 EXPORTS
 	?HandleResourceChangeL@CPhoneViewController@@QAEXH@Z @ 1 NONAME ; void CPhoneViewController::HandleResourceChangeL(int)
-	?ExecuteCommand@CPhoneViewController@@UAEXHPAVTPhoneCommandParam@@@Z @ 2 NONAME ; void CPhoneViewController::ExecuteCommand(int, class TPhoneCommandParam *)
-	?DoFetchForegroundApplicationWindowGroupIdL@CPhoneViewController@@SAHAAVCEikonEnv@@@Z @ 3 NONAME ; int CPhoneViewController::DoFetchForegroundApplicationWindowGroupIdL(class CEikonEnv &)
-	?ExecuteCommandL@CPhoneViewController@@UAEXHHPAVTPhoneCommandParam@@@Z @ 4 NONAME ; void CPhoneViewController::ExecuteCommandL(int, int, class TPhoneCommandParam *)
-	?SetBlockingDialogIsDisplayed@CPhoneViewController@@UAEXH@Z @ 5 NONAME ; void CPhoneViewController::SetBlockingDialogIsDisplayed(int)
-	?BlockingDialogIsDisplayed@CPhoneViewController@@QBEHXZ @ 6 NONAME ; int CPhoneViewController::BlockingDialogIsDisplayed(void) const
-	?NewL@CPhoneSingleItemFetch@@SAPAV1@AAVCEikonEnv@@AAVCPhoneViewController@@AAVCPhoneContactController@@AAVCPhoneStatusPane@@@Z @ 7 NONAME ; class CPhoneSingleItemFetch * CPhoneSingleItemFetch::NewL(class CEikonEnv &, class CPhoneViewController &, class CPhoneContactController &, class CPhoneStatusPane &)
-	?HelpContext@CPhoneViewController@@QAEABVTDesC16@@XZ @ 8 NONAME ; class TDesC16 const & CPhoneViewController::HelpContext(void)
-	?ExecuteCommandL@CPhoneViewController@@UAEXHH@Z @ 9 NONAME ; void CPhoneViewController::ExecuteCommandL(int, int)
-	?IdleWindowGroupId@CPhoneViewController@@QAEHXZ @ 10 NONAME ; int CPhoneViewController::IdleWindowGroupId(void)
-	?ExecuteCommandL@CPhoneViewController@@UAEXHHAAVTDesC16@@@Z @ 11 NONAME ; void CPhoneViewController::ExecuteCommandL(int, int, class TDesC16 &)
-	?PhoneView@CPhoneViewController@@QAEPAVCPhoneView@@XZ @ 12 NONAME ; class CPhoneView * CPhoneViewController::PhoneView(void)
-	?SetHiddenL@CPhoneViewController@@QAEXH@Z @ 13 NONAME ; void CPhoneViewController::SetHiddenL(int)
-	?HandleLayoutChange@CPhoneViewController@@QAEXVTRect@@@Z @ 14 NONAME ; void CPhoneViewController::HandleLayoutChange(class TRect)
-	?HandleCommandL@CPhoneViewController@@UAEHHPAVTPhoneCommandParam@@@Z @ 15 NONAME ; int CPhoneViewController::HandleCommandL(int, class TPhoneCommandParam *)
-	?ApplicationWindowGroupId@CPhoneViewController@@QAEHXZ @ 16 NONAME ; int CPhoneViewController::ApplicationWindowGroupId(void)
-	?NewL@CPhoneViewController@@SAPAV1@VTRect@@@Z @ 17 NONAME ; class CPhoneViewController * CPhoneViewController::NewL(class TRect)
-	?ExecuteCommand@CPhoneViewController@@UAEXH@Z @ 18 NONAME ; void CPhoneViewController::ExecuteCommand(int)
-	?ForegroundApplicationWindowGroupId@CPhoneViewController@@QAEHXZ @ 19 NONAME ; int CPhoneViewController::ForegroundApplicationWindowGroupId(void)
-	?StatusPaneDisplayed@CPhoneViewController@@QAEHXZ @ 20 NONAME ; int CPhoneViewController::StatusPaneDisplayed(void)
-	??1CPhoneViewController@@UAE@XZ @ 21 NONAME ; CPhoneViewController::~CPhoneViewController(void)
-	?ExecuteCommandL@CPhoneViewController@@UAEXH@Z @ 22 NONAME ; void CPhoneViewController::ExecuteCommandL(int)
-	?ExecuteCommandL@CPhoneViewController@@UAEXHPAVTPhoneCommandParam@@@Z @ 23 NONAME ; void CPhoneViewController::ExecuteCommandL(int, class TPhoneCommandParam *)
-	?FetchContent@CPhoneViewController@@UAEABVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const & CPhoneViewController::FetchContent(void)
-	?HandleCommandL@CPhoneViewController@@UAEHH@Z @ 25 NONAME ; int CPhoneViewController::HandleCommandL(int)
+	?DoFetchForegroundApplicationWindowGroupIdL@CPhoneViewController@@SAHAAVCEikonEnv@@@Z @ 2 NONAME ; int CPhoneViewController::DoFetchForegroundApplicationWindowGroupIdL(class CEikonEnv &)
+	?SetBlockingDialogIsDisplayed@CPhoneViewController@@UAEXH@Z @ 3 NONAME ; void CPhoneViewController::SetBlockingDialogIsDisplayed(int)
+	?BlockingDialogIsDisplayed@CPhoneViewController@@QBEHXZ @ 4 NONAME ; int CPhoneViewController::BlockingDialogIsDisplayed(void) const
+	?ButtonState@CPhoneDialerController@@UBEHW4TButtonIndex@MPhoneDialerController@@@Z @ 5 NONAME ; int CPhoneDialerController::ButtonState(enum MPhoneDialerController::TButtonIndex) const
+	?ExecuteCommandL@CPhoneViewController@@UAEXHHAAVTDesC16@@@Z @ 6 NONAME ; void CPhoneViewController::ExecuteCommandL(int, int, class TDesC16 &)
+	?ConstructL@CPhoneDialerController@@IAEXXZ @ 7 NONAME ; void CPhoneDialerController::ConstructL(void)
+	?SetHiddenL@CPhoneViewController@@QAEXH@Z @ 8 NONAME ; void CPhoneViewController::SetHiddenL(int)
+	??0CPhoneDialerController@@IAE@PAVCPhoneBubbleWrapper@@AAVCCoeEnv@@@Z @ 9 NONAME ; CPhoneDialerController::CPhoneDialerController(class CPhoneBubbleWrapper *, class CCoeEnv &)
+	?HandleLayoutChange@CPhoneViewController@@QAEXVTRect@@@Z @ 10 NONAME ; void CPhoneViewController::HandleLayoutChange(class TRect)
+	?SetNumberEntryIsEmpty@CPhoneDialerController@@UAEXH@Z @ 11 NONAME ; void CPhoneDialerController::SetNumberEntryIsEmpty(int)
+	?ApplicationWindowGroupId@CPhoneViewController@@QAEHXZ @ 12 NONAME ; int CPhoneViewController::ApplicationWindowGroupId(void)
+	?EasyDialingAllowed@CPhoneDialerController@@UBEHXZ @ 13 NONAME ; int CPhoneDialerController::EasyDialingAllowed(void) const
+	?EmergencyCallActive@CPhoneDialerController@@IBEHXZ @ 14 NONAME ; int CPhoneDialerController::EmergencyCallActive(void) const
+	?ExecuteCommand@CPhoneViewController@@UAEXH@Z @ 15 NONAME ; void CPhoneViewController::ExecuteCommand(int)
+	?ForegroundApplicationWindowGroupId@CPhoneViewController@@QAEHXZ @ 16 NONAME ; int CPhoneViewController::ForegroundApplicationWindowGroupId(void)
+	?GetButtonData@CPhoneDialerController@@UBEHW4TButtonIndex@MPhoneDialerController@@AAV?$RPointerArray@VCButtonData@MPhoneDialerController@@@@@Z @ 17 NONAME ; int CPhoneDialerController::GetButtonData(enum MPhoneDialerController::TButtonIndex, class RPointerArray<class MPhoneDialerController::CButtonData> &) const
+	??1CPhoneDialerController@@UAE@XZ @ 18 NONAME ; CPhoneDialerController::~CPhoneDialerController(void)
+	?CbaResourceId@CPhoneDialerController@@UBEHXZ @ 19 NONAME ; int CPhoneDialerController::CbaResourceId(void) const
+	?ExecuteCommand@CPhoneViewController@@UAEXHPAVTPhoneCommandParam@@@Z @ 20 NONAME ; void CPhoneViewController::ExecuteCommand(int, class TPhoneCommandParam *)
+	?ExecuteCommandL@CPhoneViewController@@UAEXHHPAVTPhoneCommandParam@@@Z @ 21 NONAME ; void CPhoneViewController::ExecuteCommandL(int, int, class TPhoneCommandParam *)
+	?NumberEntryPromptTextL@CPhoneDialerController@@UAEABVTDesC16@@XZ @ 22 NONAME ; class TDesC16 const & CPhoneDialerController::NumberEntryPromptTextL(void)
+	?ExecuteCommandL@CPhoneViewController@@UAEXHH@Z @ 23 NONAME ; void CPhoneViewController::ExecuteCommandL(int, int)
+	?HelpContext@CPhoneViewController@@QAEABVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const & CPhoneViewController::HelpContext(void)
+	?NewL@CPhoneSingleItemFetch@@SAPAV1@AAVCEikonEnv@@AAVCPhoneViewController@@AAVCPhoneContactController@@AAVCPhoneStatusPane@@@Z @ 25 NONAME ; class CPhoneSingleItemFetch * CPhoneSingleItemFetch::NewL(class CEikonEnv &, class CPhoneViewController &, class CPhoneContactController &, class CPhoneStatusPane &)
+	?IdleWindowGroupId@CPhoneViewController@@QAEHXZ @ 26 NONAME ; int CPhoneViewController::IdleWindowGroupId(void)
+	?MenuResourceId@CPhoneDialerController@@UBEHXZ @ 27 NONAME ; int CPhoneDialerController::MenuResourceId(void) const
+	?PhoneView@CPhoneViewController@@QAEPAVCPhoneView@@XZ @ 28 NONAME ; class CPhoneView * CPhoneViewController::PhoneView(void)
+	?HandleSecurityModeChanged@CPhoneViewController@@UAEXH@Z @ 29 NONAME ; void CPhoneViewController::HandleSecurityModeChanged(int)
+	?ButtonDimmed@CPhoneDialerController@@UBEHW4TButtonIndex@MPhoneDialerController@@@Z @ 30 NONAME ; int CPhoneDialerController::ButtonDimmed(enum MPhoneDialerController::TButtonIndex) const
+	?HandleCommandL@CPhoneViewController@@UAEHHPAVTPhoneCommandParam@@@Z @ 31 NONAME ; int CPhoneViewController::HandleCommandL(int, class TPhoneCommandParam *)
+	?NewL@CPhoneViewController@@SAPAV1@VTRect@@@Z @ 32 NONAME ; class CPhoneViewController * CPhoneViewController::NewL(class TRect)
+	?StatusPaneDisplayed@CPhoneViewController@@QAEHXZ @ 33 NONAME ; int CPhoneViewController::StatusPaneDisplayed(void)
+	??1CPhoneViewController@@UAE@XZ @ 34 NONAME ; CPhoneViewController::~CPhoneViewController(void)
+	?ExecuteCommandL@CPhoneViewController@@UAEXH@Z @ 35 NONAME ; void CPhoneViewController::ExecuteCommandL(int)
+	?ExecuteCommandL@CPhoneViewController@@UAEXHPAVTPhoneCommandParam@@@Z @ 36 NONAME ; void CPhoneViewController::ExecuteCommandL(int, class TPhoneCommandParam *)
+	?FetchContent@CPhoneViewController@@UAEABVTDesC16@@XZ @ 37 NONAME ; class TDesC16 const & CPhoneViewController::FetchContent(void)
+	?HandleCommandL@CPhoneViewController@@UAEHH@Z @ 38 NONAME ; int CPhoneViewController::HandleCommandL(int)
 
--- a/phoneapp/phoneuiview/eabi/phoneuiviewu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/eabi/phoneuiviewu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -16,92 +16,123 @@
 	_ZN20CPhoneViewController19StatusPaneDisplayedEv @ 15 NONAME
 	_ZN20CPhoneViewController21HandleResourceChangeLEi @ 16 NONAME
 	_ZN20CPhoneViewController24ApplicationWindowGroupIdEv @ 17 NONAME
-	_ZN20CPhoneViewController28SetBlockingDialogIsDisplayedEi @ 18 NONAME
-	_ZN20CPhoneViewController34ForegroundApplicationWindowGroupIdEv @ 19 NONAME
-	_ZN20CPhoneViewController42DoFetchForegroundApplicationWindowGroupIdLER9CEikonEnv @ 20 NONAME
-	_ZN20CPhoneViewController4NewLE5TRect @ 21 NONAME
-	_ZN20CPhoneViewController9PhoneViewEv @ 22 NONAME
-	_ZN21CPhoneSingleItemFetch4NewLER9CEikonEnvR20CPhoneViewControllerR23CPhoneContactControllerR16CPhoneStatusPane @ 23 NONAME
-	_ZNK20CPhoneViewController25BlockingDialogIsDisplayedEv @ 24 NONAME
-	_ZTI10CPhoneNote @ 25 NONAME
-	_ZTI10CPhoneView @ 26 NONAME
-	_ZTI15CPhoneTextQuery @ 27 NONAME
-	_ZTI16CPhoneDialerView @ 28 NONAME
-	_ZTI16CPhoneStatusPane @ 29 NONAME
-	_ZTI17CPhoneAudioPlayer @ 30 NONAME
-	_ZTI17CPhoneQueryDialog @ 31 NONAME
-	_ZTI17CPhoneRingingTone @ 32 NONAME
-	_ZTI17CPhoneVmbxHandler @ 33 NONAME
-	_ZTI18CPhoneProgressNote @ 34 NONAME
-	_ZTI19CPhoneBubbleMapping @ 35 NONAME
-	_ZTI19CPhoneBubbleWrapper @ 36 NONAME
-	_ZTI19CPhoneTextTitlePane @ 37 NONAME
-	_ZTI20CPhoneMenuController @ 38 NONAME
-	_ZTI20CPhoneNoteController @ 39 NONAME
-	_ZTI20CPhoneUIDisabledNote @ 40 NONAME
-	_ZTI20CPhoneViewController @ 41 NONAME
-	_ZTI21CPhoneApplicationExit @ 42 NONAME
-	_ZTI21CPhoneAudioController @ 43 NONAME
-	_ZTI21CPhoneBubbleExtension @ 44 NONAME
-	_ZTI21CPhoneDtmfSendingNote @ 45 NONAME
-	_ZTI21CPhoneIncallIndicator @ 46 NONAME
-	_ZTI21CPhoneListQueryDialog @ 47 NONAME
-	_ZTI21CPhoneQueryController @ 48 NONAME
-	_ZTI21CPhoneSingleItemFetch @ 49 NONAME
-	_ZTI23CPhoneContactController @ 50 NONAME
-	_ZTI25CPhoneBubbleExtensionData @ 51 NONAME
-	_ZTI25CPhoneDtmfNumberListQuery @ 52 NONAME
-	_ZTI25CPhoneRingingTonePlayerAO @ 53 NONAME
-	_ZTI26CPhoneKeyCaptureController @ 54 NONAME
-	_ZTI28CPhoneBubbleExtensionManager @ 55 NONAME
-	_ZTI29CPhoneCallHeaderTextAnimation @ 56 NONAME
-	_ZTIN21CPhoneApplicationExit11CElementUidE @ 57 NONAME
-	_ZTIN21CPhoneApplicationExit13CElementBasicE @ 58 NONAME
-	_ZTIN21CPhoneApplicationExit13CElementDriveE @ 59 NONAME
-	_ZTV10CPhoneNote @ 60 NONAME
-	_ZTV10CPhoneView @ 61 NONAME
-	_ZTV15CPhoneTextQuery @ 62 NONAME
-	_ZTV16CPhoneDialerView @ 63 NONAME
-	_ZTV16CPhoneStatusPane @ 64 NONAME
-	_ZTV17CPhoneAudioPlayer @ 65 NONAME
-	_ZTV17CPhoneQueryDialog @ 66 NONAME
-	_ZTV17CPhoneRingingTone @ 67 NONAME
-	_ZTV17CPhoneVmbxHandler @ 68 NONAME
-	_ZTV18CPhoneProgressNote @ 69 NONAME
-	_ZTV19CPhoneBubbleMapping @ 70 NONAME
-	_ZTV19CPhoneBubbleWrapper @ 71 NONAME
-	_ZTV19CPhoneTextTitlePane @ 72 NONAME
-	_ZTV20CPhoneMenuController @ 73 NONAME
-	_ZTV20CPhoneNoteController @ 74 NONAME
-	_ZTV20CPhoneUIDisabledNote @ 75 NONAME
-	_ZTV20CPhoneViewController @ 76 NONAME
-	_ZTV21CPhoneApplicationExit @ 77 NONAME
-	_ZTV21CPhoneAudioController @ 78 NONAME
-	_ZTV21CPhoneBubbleExtension @ 79 NONAME
-	_ZTV21CPhoneDtmfSendingNote @ 80 NONAME
-	_ZTV21CPhoneIncallIndicator @ 81 NONAME
-	_ZTV21CPhoneListQueryDialog @ 82 NONAME
-	_ZTV21CPhoneQueryController @ 83 NONAME
-	_ZTV21CPhoneSingleItemFetch @ 84 NONAME
-	_ZTV23CPhoneContactController @ 85 NONAME
-	_ZTV25CPhoneBubbleExtensionData @ 86 NONAME
-	_ZTV25CPhoneDtmfNumberListQuery @ 87 NONAME
-	_ZTV25CPhoneRingingTonePlayerAO @ 88 NONAME
-	_ZTV26CPhoneKeyCaptureController @ 89 NONAME
-	_ZTV28CPhoneBubbleExtensionManager @ 90 NONAME
-	_ZTV29CPhoneCallHeaderTextAnimation @ 91 NONAME
-	_ZTVN21CPhoneApplicationExit11CElementUidE @ 92 NONAME
-	_ZTVN21CPhoneApplicationExit13CElementBasicE @ 93 NONAME
-	_ZTVN21CPhoneApplicationExit13CElementDriveE @ 94 NONAME
-	_ZThn12_N20CPhoneViewController28SetBlockingDialogIsDisplayedEi @ 95 NONAME
-	_ZThn4_N20CPhoneViewController12FetchContentEv @ 96 NONAME
-	_ZThn4_N20CPhoneViewController14ExecuteCommandEi @ 97 NONAME
-	_ZThn4_N20CPhoneViewController14ExecuteCommandEiP18TPhoneCommandParam @ 98 NONAME
-	_ZThn4_N20CPhoneViewController14HandleCommandLEi @ 99 NONAME
-	_ZThn4_N20CPhoneViewController14HandleCommandLEiP18TPhoneCommandParam @ 100 NONAME
-	_ZThn4_N20CPhoneViewController15ExecuteCommandLEi @ 101 NONAME
-	_ZThn4_N20CPhoneViewController15ExecuteCommandLEiP18TPhoneCommandParam @ 102 NONAME
-	_ZThn4_N20CPhoneViewController15ExecuteCommandLEii @ 103 NONAME
-	_ZThn4_N20CPhoneViewController15ExecuteCommandLEiiP18TPhoneCommandParam @ 104 NONAME
-	_ZThn4_N20CPhoneViewController15ExecuteCommandLEiiR7TDesC16 @ 105 NONAME
+	_ZN20CPhoneViewController25HandleSecurityModeChangedEi @ 18 NONAME
+	_ZN20CPhoneViewController28SetBlockingDialogIsDisplayedEi @ 19 NONAME
+	_ZN20CPhoneViewController34ForegroundApplicationWindowGroupIdEv @ 20 NONAME
+	_ZN20CPhoneViewController42DoFetchForegroundApplicationWindowGroupIdLER9CEikonEnv @ 21 NONAME
+	_ZN20CPhoneViewController4NewLE5TRect @ 22 NONAME
+	_ZN20CPhoneViewController9PhoneViewEv @ 23 NONAME
+	_ZN21CPhoneSingleItemFetch4NewLER9CEikonEnvR20CPhoneViewControllerR23CPhoneContactControllerR16CPhoneStatusPane @ 24 NONAME
+	_ZN22CPhoneDialerController10ConstructLEv @ 25 NONAME
+	_ZN22CPhoneDialerController21SetNumberEntryIsEmptyEi @ 26 NONAME
+	_ZN22CPhoneDialerController22NumberEntryPromptTextLEv @ 27 NONAME
+	_ZN22CPhoneDialerControllerC1EP19CPhoneBubbleWrapperR7CCoeEnv @ 28 NONAME
+	_ZN22CPhoneDialerControllerC2EP19CPhoneBubbleWrapperR7CCoeEnv @ 29 NONAME
+	_ZN22CPhoneDialerControllerD0Ev @ 30 NONAME
+	_ZN22CPhoneDialerControllerD1Ev @ 31 NONAME
+	_ZN22CPhoneDialerControllerD2Ev @ 32 NONAME
+	_ZNK20CPhoneViewController25BlockingDialogIsDisplayedEv @ 33 NONAME
+	_ZNK22CPhoneDialerController11ButtonStateEN22MPhoneDialerController12TButtonIndexE @ 34 NONAME
+	_ZNK22CPhoneDialerController12ButtonDimmedEN22MPhoneDialerController12TButtonIndexE @ 35 NONAME
+	_ZNK22CPhoneDialerController13CbaResourceIdEv @ 36 NONAME
+	_ZNK22CPhoneDialerController13GetButtonDataEN22MPhoneDialerController12TButtonIndexER13RPointerArrayINS0_11CButtonDataEE @ 37 NONAME
+	_ZNK22CPhoneDialerController14MenuResourceIdEv @ 38 NONAME
+	_ZNK22CPhoneDialerController18EasyDialingAllowedEv @ 39 NONAME
+	_ZNK22CPhoneDialerController19EmergencyCallActiveEv @ 40 NONAME
+	_ZTI10CPhoneNote @ 41 NONAME
+	_ZTI10CPhoneView @ 42 NONAME
+	_ZTI15CPhoneTextQuery @ 43 NONAME
+	_ZTI16CPhoneDialerView @ 44 NONAME
+	_ZTI16CPhoneStatusPane @ 45 NONAME
+	_ZTI17CPhoneAudioPlayer @ 46 NONAME
+	_ZTI17CPhoneQueryDialog @ 47 NONAME
+	_ZTI17CPhoneRingingTone @ 48 NONAME
+	_ZTI17CPhoneVmbxHandler @ 49 NONAME
+	_ZTI18CPhoneProgressNote @ 50 NONAME
+	_ZTI19CPhoneBubbleMapping @ 51 NONAME
+	_ZTI19CPhoneBubbleWrapper @ 52 NONAME
+	_ZTI19CPhoneTextTitlePane @ 53 NONAME
+	_ZTI20CPhoneMenuController @ 54 NONAME
+	_ZTI20CPhoneNoteController @ 55 NONAME
+	_ZTI20CPhoneViewController @ 56 NONAME
+	_ZTI21CPhoneApplicationExit @ 57 NONAME
+	_ZTI21CPhoneAudioController @ 58 NONAME
+	_ZTI21CPhoneBubbleExtension @ 59 NONAME
+	_ZTI21CPhoneDtmfSendingNote @ 60 NONAME
+	_ZTI21CPhoneIncallIndicator @ 61 NONAME
+	_ZTI21CPhoneListQueryDialog @ 62 NONAME
+	_ZTI21CPhoneQueryController @ 63 NONAME
+	_ZTI21CPhoneSingleItemFetch @ 64 NONAME
+	_ZTI22CPhoneDialerController @ 65 NONAME
+	_ZTI23CPhoneContactController @ 66 NONAME
+	_ZTI23CPhoneRingingToneServer @ 67 NONAME
+	_ZTI25CPhoneBubbleExtensionData @ 68 NONAME
+	_ZTI25CPhoneDtmfNumberListQuery @ 69 NONAME
+	_ZTI25CPhoneRingingTonePlayerAO @ 70 NONAME
+	_ZTI26CPhoneKeyCaptureController @ 71 NONAME
+	_ZTI28CPhoneBubbleExtensionManager @ 72 NONAME
+	_ZTI28CPhoneRingingToneSrvPlayerAO @ 73 NONAME
+	_ZTI29CPhoneCallHeaderTextAnimation @ 74 NONAME
+	_ZTI30CPhoneRingingToneServerSession @ 75 NONAME
+	_ZTIN21CPhoneApplicationExit11CElementUidE @ 76 NONAME
+	_ZTIN21CPhoneApplicationExit13CElementBasicE @ 77 NONAME
+	_ZTIN21CPhoneApplicationExit13CElementDriveE @ 78 NONAME
+	_ZTV10CPhoneNote @ 79 NONAME
+	_ZTV10CPhoneView @ 80 NONAME
+	_ZTV15CPhoneTextQuery @ 81 NONAME
+	_ZTV16CPhoneDialerView @ 82 NONAME
+	_ZTV16CPhoneStatusPane @ 83 NONAME
+	_ZTV17CPhoneAudioPlayer @ 84 NONAME
+	_ZTV17CPhoneQueryDialog @ 85 NONAME
+	_ZTV17CPhoneRingingTone @ 86 NONAME
+	_ZTV17CPhoneVmbxHandler @ 87 NONAME
+	_ZTV18CPhoneProgressNote @ 88 NONAME
+	_ZTV19CPhoneBubbleMapping @ 89 NONAME
+	_ZTV19CPhoneBubbleWrapper @ 90 NONAME
+	_ZTV19CPhoneTextTitlePane @ 91 NONAME
+	_ZTV20CPhoneMenuController @ 92 NONAME
+	_ZTV20CPhoneNoteController @ 93 NONAME
+	_ZTV20CPhoneViewController @ 94 NONAME
+	_ZTV21CPhoneApplicationExit @ 95 NONAME
+	_ZTV21CPhoneAudioController @ 96 NONAME
+	_ZTV21CPhoneBubbleExtension @ 97 NONAME
+	_ZTV21CPhoneDtmfSendingNote @ 98 NONAME
+	_ZTV21CPhoneIncallIndicator @ 99 NONAME
+	_ZTV21CPhoneListQueryDialog @ 100 NONAME
+	_ZTV21CPhoneQueryController @ 101 NONAME
+	_ZTV21CPhoneSingleItemFetch @ 102 NONAME
+	_ZTV22CPhoneDialerController @ 103 NONAME
+	_ZTV23CPhoneContactController @ 104 NONAME
+	_ZTV23CPhoneRingingToneServer @ 105 NONAME
+	_ZTV25CPhoneBubbleExtensionData @ 106 NONAME
+	_ZTV25CPhoneDtmfNumberListQuery @ 107 NONAME
+	_ZTV25CPhoneRingingTonePlayerAO @ 108 NONAME
+	_ZTV26CPhoneKeyCaptureController @ 109 NONAME
+	_ZTV28CPhoneBubbleExtensionManager @ 110 NONAME
+	_ZTV28CPhoneRingingToneSrvPlayerAO @ 111 NONAME
+	_ZTV29CPhoneCallHeaderTextAnimation @ 112 NONAME
+	_ZTV30CPhoneRingingToneServerSession @ 113 NONAME
+	_ZTVN21CPhoneApplicationExit11CElementUidE @ 114 NONAME
+	_ZTVN21CPhoneApplicationExit13CElementBasicE @ 115 NONAME
+	_ZTVN21CPhoneApplicationExit13CElementDriveE @ 116 NONAME
+	_ZThn12_N20CPhoneViewController28SetBlockingDialogIsDisplayedEi @ 117 NONAME
+	_ZThn20_N20CPhoneViewController25HandleSecurityModeChangedEi @ 118 NONAME
+	_ZThn4_N20CPhoneViewController12FetchContentEv @ 119 NONAME
+	_ZThn4_N20CPhoneViewController14ExecuteCommandEi @ 120 NONAME
+	_ZThn4_N20CPhoneViewController14ExecuteCommandEiP18TPhoneCommandParam @ 121 NONAME
+	_ZThn4_N20CPhoneViewController14HandleCommandLEi @ 122 NONAME
+	_ZThn4_N20CPhoneViewController14HandleCommandLEiP18TPhoneCommandParam @ 123 NONAME
+	_ZThn4_N20CPhoneViewController15ExecuteCommandLEi @ 124 NONAME
+	_ZThn4_N20CPhoneViewController15ExecuteCommandLEiP18TPhoneCommandParam @ 125 NONAME
+	_ZThn4_N20CPhoneViewController15ExecuteCommandLEii @ 126 NONAME
+	_ZThn4_N20CPhoneViewController15ExecuteCommandLEiiP18TPhoneCommandParam @ 127 NONAME
+	_ZThn4_N20CPhoneViewController15ExecuteCommandLEiiR7TDesC16 @ 128 NONAME
+	_ZThn4_N22CPhoneDialerController21SetNumberEntryIsEmptyEi @ 129 NONAME
+	_ZThn4_N22CPhoneDialerController22NumberEntryPromptTextLEv @ 130 NONAME
+	_ZThn4_NK22CPhoneDialerController11ButtonStateEN22MPhoneDialerController12TButtonIndexE @ 131 NONAME
+	_ZThn4_NK22CPhoneDialerController12ButtonDimmedEN22MPhoneDialerController12TButtonIndexE @ 132 NONAME
+	_ZThn4_NK22CPhoneDialerController13CbaResourceIdEv @ 133 NONAME
+	_ZThn4_NK22CPhoneDialerController13GetButtonDataEN22MPhoneDialerController12TButtonIndexER13RPointerArrayINS0_11CButtonDataEE @ 134 NONAME
+	_ZThn4_NK22CPhoneDialerController14MenuResourceIdEv @ 135 NONAME
+	_ZThn4_NK22CPhoneDialerController18EasyDialingAllowedEv @ 136 NONAME
 
--- a/phoneapp/phoneuiview/group/bld.inf	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -24,7 +24,8 @@
 DEFAULT
 
 PRJ_EXPORTS
-
+../inc/mphonedialercontroller.h       |../../../inc/mphonedialercontroller.h
+../inc/cphonedialercontroller.h       |../../../inc/cphonedialercontroller.h
 
 // Stub SIS files:
 ../group/phoneuiview_stub.sis                   /epoc32/data/z/system/install/phoneuiview_stub.sis
--- a/phoneapp/phoneuiview/group/phoneuiview.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/group/phoneuiview.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -42,7 +42,6 @@
 SOURCE          cphonekeycapturecontroller.cpp
 SOURCE          cphonemenucontroller.cpp
 SOURCE          cphonenote.cpp
-SOURCE          cphoneuidisablednote.cpp
 SOURCE          cphonenotecontroller.cpp
 SOURCE          cphoneprogressnote.cpp
 SOURCE          cphonequerycontroller.cpp
@@ -65,7 +64,12 @@
 SOURCE          phonebubbleextension.cpp 
 SOURCE          phonebubbleextensiondata.cpp
 SOURCE          cphonetoolbarcontroller.cpp
-
+SOURCE          cphoneeasydialingcontroller.cpp 
+SOURCE          cphonedtmfdialercontroller.cpp 
+SOURCE          phoneringingtonesrvplayerao.cpp
+SOURCE          phoneringingtonesrv.cpp
+SOURCE          phoneringingtonesrvsession.cpp
+SOURCE          phoneringingtoneclient.cpp
 
 /* Languages */
 LANG SC
@@ -164,4 +168,6 @@
 LIBRARY         platformenv.lib // PathInfo
 
 LIBRARY         phonemediatorcenter.lib
-LIBRARY         serviceprovidersettings.lib
\ No newline at end of file
+LIBRARY         serviceprovidersettings.lib
+
+LIBRARY         musmanagerclient.lib
--- a/phoneapp/phoneuiview/inc/cphonedialercontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphonedialercontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -20,299 +20,198 @@
 #define CPHONEDIALERCONTROLLER_H
 
 #include <e32base.h>
-#include <akntoolbarobserver.h>
-#include <mnumberentry.h>
+#include "mphonedialercontroller.h"
 #include "mphonenumberentrychangedhandler.h"
 
-class CAknToolbar;
 class CPhoneBubbleWrapper;
 class CCoeEnv;
-class CPhoneMenuController;
+class MAknsSkinInstance;
 class TPhoneCommandParam;
-class CAknButton;
-class TAknsItemID;
-class MPhoneDialerController;
-class TPhoneCommandParam;
+class CPhoneEasyDialingController;
 
 /**
- *  Dialer controller, updates toolbar buttons
+ *  Dialer controller, provides toolbar button data for the normal mode dialer
  *
  *  @lib PhoneUIView.lib
  *  @since S60 v5.0
  */
-NONSHARABLE_CLASS( CPhoneDialerController ): 
-    public CBase, public MAknToolbarObserver, public MNumberEntryObserver,
-    public MPhoneNumberEntryChangedHandler
+class CPhoneDialerController : 
+    public CBase,
+    public MPhoneDialerController
     {
-public:
+public: // constructor and destructor
     /**
      * Two-phased constructor.
-     * @param aBubbleWrapper 
-     * @param aCoeEnv 
-     * @param aMenuController 
+     * @param aBubbleWrapper    Handle to bubble wrapper. Ownership not transferred.
+     *                          May be NULL, but then emergency call state can't be identified
+     * @param aCoeEnv           Handle to coeenv. Ownership not transferred.
      */
-    static CPhoneDialerController* NewL( CPhoneBubbleWrapper& aBubbleWrapper,
-                                         CCoeEnv& aCoeEnv,
-                                         CPhoneMenuController& aMenuController );
+    static CPhoneDialerController* NewL( CPhoneBubbleWrapper* aBubbleWrapper,
+                                         CCoeEnv& aCoeEnv );
     /**
      * Destructor.
      */
-    virtual ~CPhoneDialerController();
-    
-     /**
-     * Updates toolbar buttons according to numberentry state.
-     *
-     * @since S60 v5.0
-     */
-    void UpdateToolbar();
-    
-     /**
-     * Sets state of dtmf dialer visibility.
-     *
-     * @since S60 v5.0
-     * @param aVisible
-     */    
-    void SetDtmfDialerVisibleL( TBool aVisible );  
-    
-     /**
-     * Returns dtmf dialer visibility status.
-     *
-     * @since S60 v5.0
-     * @return ETrue if DTMF Dialer is visible
-     */     
-    TBool IsDTMFDialerVisible() const;
-    
-     /**
-     * Sets state of restricted dialer.
-     *
-     * @since S60 v5.0
-     * @param aRestricted
-     */      
-	void SetRestrictedDialer( TBool aRestricted );    
-	
-     /**
-     * Sets state of service code flag.
-     *
-     * @since S60 v5.0
-     * @param aCommandParam
-     */	
-	void SetServiceCodeFlagL( TPhoneCommandParam* aCommandParam );
-    
-	/**
-    * Enables toolbar
-    *
-    * @since S60 v5.0
-    */ 
-	void ShowToolbar();
-
-    /**
-    * Disables toolbar
-    *
-    * @since S60 v5.0
-    */ 
-    void HideToolbar();	
-
-    /**
-    * Sets custom dialer visible.
-    * @param aCustomController Pointer to dialer extension implementation
-    * @since S60 v5.1
-    */    
-    void ShowCustomizedDialerL( 
-            MPhoneDialerController* aCustomController );
+    IMPORT_C virtual ~CPhoneDialerController();
     
-    /**
-    * Sets custom dialer visible.
-    * @since S60 v5.1
-    */ 
-    void HideCustomizedDialer();
-	
-    /**
-    * Returns flag indicating if customized dialer is visible.
-    * @return ETrue if customized dialer visible, else EFalse
-    * @since S60 v5.1
-    */   
-    TBool IsCustomizedDialerVisible() const;
-	
-    /**
-    * Returns sotkeys resource of the customized dialer
-    * @return Customized dialer softkeys resource id
-    * @since S60 v5.1
-    */ 
-    TInt CustomizedCbaResourceId() const;
-	
-    /**
-    * Returns menu resource of the customized dialer
-    * @return Customized dialer menu resource id
-    * @since S60 v5.1
-    */ 
-    TInt CustomizedMenuResourceId() const;
-
-public:     // from MAknToolbarObserver
-    /**
-     * From base class MAknToolbarObserver
-     * Handles toolbar events for a certain toolbar item.
-     *
-     * @param aCommand The command ID of some toolbar item.
-     */ 
-    void OfferToolbarEventL( TInt aCommand );
-    
-    /**
-     * From base class MAknToolbarObserver
-     * Should be used to set the properties of some toolbar components 
-     * before it is drawn.
-     *   
-     * @param aResourceId The resource ID for particular toolbar
-     * @param aToolbar The toolbar object pointer
-     */
-    void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar );
-    
-public:     // from MNumberEntryObserver
-    /**
-     * From base class MNumberEntryObserver
-     * Indication that numberentry state changed
-     *
-     * @since S60 v5.0
-     */
-    void NumberEntryStateChanged( TBool aHidePromptText );    
-    
-public:    // from base class MPhoneNumberEntryChangedHandler
-        
-    /**
-     * From MPhoneNumberEntryChangedHandler
-     * 
-     * Handles number entry state change. 
-     * Checks has the content of the number entry been modifed.
-     * Informs the via call back functionality the party interested about 
-     * the change. (at the moment phone state machine) 
-     * 
-     * @since S60 5.0
-     */
-     void HandleNumberEntryChanged( );
-        
-     /**
-      * From MPhoneNumberEntryChangedHandler
-      * 
-      * Sets the call back function that is used to get notification when the 
-      * content of the Number Entry has changed. (Used by the the phone 
-      * statemachine.)  
-      * 
-      * @since S60 5.0
-      */
-     void SetNumberEntryChangedCallBack( TPhoneCommandParam* aCommandParam );
-      
-private:
-
-    /**
-     * Creates CAknButton with given parameters and leaves it to 
-     * CleanupStack.
-     * 
-     * @param aNormalIconId
-     * @param aNormalMaskId
-     * @param aTooltipText
-     * @param aSkinIconId
-     * @param aCommand 
-     */  
-    CAknButton* CreateButtonLC( TInt aNormalIconId,
-                                TInt aNormalMaskId,
-                                const TDesC& aTooltipText, 
-                                const TAknsItemID& aSkinIconId,
-                                TInt aCommand );
-    
-    /**
-     * Creates button set for an empty Number Entry.  
-     */
-    void CreateButtonSetNumberEntryEmpty();
-
-    /**
-     * Creates button set for Number Entry when some charaters 
-     * have been entered.
-     */
-    void CreateButtonSetNumberEntryNotEmpty();
+protected: // constructors
     
     /**
      * Constructor.
      * 
      * @param aBubbleWrapper 
      * @param aCoeEnv 
-     * @param aMenuController 
      */
-    CPhoneDialerController( CPhoneBubbleWrapper& aBubbleWrapper,
-                             CCoeEnv& aCoeEnv,
-                             CPhoneMenuController& aMenuController );    
+    IMPORT_C CPhoneDialerController( CPhoneBubbleWrapper* aBubbleWrapper,
+                                     CCoeEnv& aCoeEnv );
     /**
      * Symbian 2nd phase constructor.
      * 
      */
-    void ConstructL();
+    IMPORT_C void ConstructL();
+    
+public: // new methods
     
     /**
-     * Searches the skin id for the given icon.
+     * Sets state of restricted dialer.
+     *
+     * @since S60 v5.0
+     * @param aRestricted
+     */      
+    void SetRestrictedDialer( TBool aRestricted );    
+    
+     /**
+     * Sets state of service code flag.
+     *
+     * @since S60 v5.0
+     * @param aCommandParam
+     */
+    void SetServiceCodeFlag( TPhoneCommandParam* aCommandParam );
+
+    /**
+     * Sets handle to the Easy Dialing controller.
+     * 
+     * @since S60 v5.2
+     * @param aController   Easy Dialing controller. Ownership not transferred.
      */
-    inline TAknsItemID SkinId( TInt aIconIndex );
+    void SetEasyDialingController( CPhoneEasyDialingController* aController );
+    
+public: // From MPhoneDialerController
+
+    /**
+     * @see MPhoneDialerController
+     */
+    IMPORT_C TInt CbaResourceId() const;
+
+    /**
+     * @see MPhoneDialerController
+     */
+    IMPORT_C TInt MenuResourceId() const;
+
+    /**
+     * @see MPhoneDialerController
+     */
+    IMPORT_C const TDesC& NumberEntryPromptTextL();
+
+    /**
+     * @see MPhoneDialerController
+     */
+
+    /**
+     * @see MPhoneDialerController
+     */
+    IMPORT_C TInt GetButtonData( TButtonIndex aIndex, RPointerArray<CButtonData>& aData ) const;
     
     /**
-     * Searches the tooltip text for the button using the 
-     * the given command id.
-     * 
-     * @param aCommandId the command id
-     * @param aText     the searched tooltip text
+     * @see MPhoneDialerController
+     */
+    IMPORT_C void SetNumberEntryIsEmpty( TBool aEmpty );
+    
+    /**
+     * @see MPhoneDialerController
      */
-    void  GetTooltipTextL( TInt aCommandId, HBufC*& aText ); 
+    IMPORT_C TInt ButtonState( TButtonIndex aIndex ) const;
     
-private: // data
     /**
-     * AknToolbar. 
-     * Not own.  
+     * @see MPhoneDialerController
      */
-    CAknToolbar* iToolbar;
+    IMPORT_C TBool ButtonDimmed( TButtonIndex aIndex ) const;
     
     /**
-     * The reference to the Bubblewrapper
+     * @see MPhoneDialerController
+     */
+    IMPORT_C TBool EasyDialingAllowed() const;
+
+public: // data types
+    /** 
+     * Initialization data for one toolbar button state.
      */
-    CPhoneBubbleWrapper& iBubbleWrapper;
+    struct TLocalButtonData
+        {
+        TInt iCommandId;
+        TInt iSkinItemIdMinor;
+        TInt iBitmapIndex;
+        TInt iBitmapMaskIndex;
+        TInt iTooltipResourceId;
+        };
+    
+protected: // methods
+    
+    /**
+     * Check is there an emergency call ongoing.
+     * @return  ETrue   if there's an active emergency call.
+     *          EFalse  otherwise.
+     */
+    TBool EmergencyCallActive() const;
     
     /**
+     * Check if Easy Dialing contact listbox is in focus.
+     * @return  ETrue   if contact list is in focus
+     *          EFalse  otherwise (may be also because there's no ED
+     *                  present in the device)
+     */
+    TBool EasyDialingFocused() const;
+    
+    /**
+     * Create button data object from given source data.
+     * @param   aSourceData Defines, where the data should be loaded.
+     * @param   aSkin       Skin instance. Ownership not transferred.
+     * @param   aMifFile    Full path to the MIF file holding the fallback graphics.
+     * @return  New CButtonData instance. Ownership is transferred.
+     */
+    CButtonData* CreateButtonDataL( const TLocalButtonData& aSourceData, 
+            MAknsSkinInstance* aSkin, const TDesC& aMifFile ) const;
+    
+protected: // data
+    /**
      * CoeEnv 
      */
     CCoeEnv& iCoeEnv;
     
     /**
-     * Menucontroller
+     * Handle to the Bubblewrapper. May be NULL. Not owned.
      */
-    CPhoneMenuController& iMenuController;    
+    CPhoneBubbleWrapper* iBubbleWrapper;
     
     /**
-     * Used to check is the Dialer in DTMF mode
+     * Handle to Easy Dialing controller. May be NULL. Not owned. 
      */
-    TBool iDtmfDialerVisible;
-
+    CPhoneEasyDialingController* iEasyDialingController;
+    
     /**
      * Used to check is the Dialer in the restricted mode.
-     * 'Send' and 'Add to Contacts' buttons are dimmed.
      */
-    TBool iRestrictedDialer; 
+    TBool iRestrictedDialer;
     
     /**
-     * Used to check is the service code flag set.
-     * Tooltip text is changed between 'Send' or 'Call' 
+     * Used to check is the service code flag set, meaning that number entry
+     * contains a service code rather than phone number.
      */
     TBool iServiceCodeFlag;
     
-    /*
-     * Is used to check has the hide prompt text flag changed.
+    /**
+     * Store availability of phone number (etc) in the number entry.
      */
-    TBool iPreviousHidePromptTextStatus;
-    
-    // Pointer to dialer extension implementation
-    MPhoneDialerController* iCustomizedDialer;
-    
-    /**
-     * Is used to check should toolbar be updated. 
-     */
-    TBool iUpdateToolbar;
-
+    TBool iNumberAvailable;
     };
 
-#include    "cphonedialercontroller.inl"
-
 #endif // CPHONEDIALERCONTROLLER_H
--- a/phoneapp/phoneuiview/inc/cphonedialercontroller.inl	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
-* Copyright (c) 2008 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:  private, CPhoneDialerController
-*
-*/
-
-#ifndef CPHONEDIALERCONTROLLER_INL_
-#define CPHONEDIALERCONTROLLER_INL_
-
-#include <AknsUtils.h>
-#include <phoneui.mbg>
-
-// ---------------------------------------------------------------------------
-// SkinId
-// ---------------------------------------------------------------------------
-//    
-inline TAknsItemID CPhoneDialerController::SkinId( TInt aIconIndex )
-    {
-    TAknsItemID skinId;
-    
-    switch ( aIconIndex )
-        {
-        case EMbmPhoneuiQgn_indi_dialer_call_send:
-            skinId = KAknsIIDQgnIndiDialerCallSend;
-            break;
-        case EMbmPhoneuiQgn_indi_button_send_dtmf:
-            skinId = KAknsIIDQgnIndiButtonSendDtmf;
-            break;
-        case EMbmPhoneuiQgn_indi_dialer_contacts:
-            skinId = KAknsIIDQgnIndiDialerContacts;
-            break;
-        case EMbmPhoneuiQgn_indi_dialer_add_contacts:
-            skinId = KAknsIIDQgnIndiDialerAddContacts;
-            break;
-        case EMbmPhoneuiQgn_indi_dialer_clear:
-            skinId = KAknsIIDQgnIndiDialerClear;
-            break;                        
-        default:
-            skinId = KAknsIIDNone;        
-            break;            
-        }
-    return skinId;   
-    }
-
-#endif /*CPHONEDIALERCONTROLLER_INL_*/
--- a/phoneapp/phoneuiview/inc/cphonedialerview.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphonedialerview.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 - 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"
@@ -56,6 +56,13 @@
         */
         void HandleResourceChange( TInt aType );
 
+        /**
+        * From CCoeControl
+        * @param aVisible : ETrue if view is to be shown
+        *                   EFalse if view is to be hidden
+        */
+        void MakeVisible( TBool aVisible );
+
     public: // New functions
 
         /**
@@ -69,20 +76,6 @@
         * @return aControl The control.
         */
         CCoeControl* Control() const;
-       
-        /**
-        * Sets the security mode flag ETrue or EFalse
-        * @param aStatus ETrue for the security mode. EFalse for the 
-        * normal mode.
-        */ 
-        void SetSecurityMode ( TBool aStatus );
-        
-        /**
-        * Get state of the security mode flag
-        * @return aStatus ETrue for the security mode. EFalse for the 
-        * normal mode.
-        */         
-        TBool IsSecurityMode();
         
     public:  // Functions from base classes
         
@@ -200,9 +193,7 @@
         
         //MainPane
         TRect iMainPane;
-        
-        //Is security mode or not
-        TBool iSecurityMode;
+  
         };
 
 #endif // __CPHONEDIALERVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/cphonedtmfdialercontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* 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: Controller for DTMF mode of Dialer
+*
+*/
+
+#ifndef CPHONEDTMFDIALERCONTROLLER_H
+#define CPHONEDTMFDIALERCONTROLLER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include "cphonedialercontroller.h"
+
+// CLASS DECLARATION
+
+/**
+ *  CPhoneDtmfDialerController
+ *  
+ *  Provides data for the DTMF mode of the dialer.
+ */
+NONSHARABLE_CLASS( CPhoneDtmfDialerController ) : public CPhoneDialerController
+    {
+public: // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CPhoneDtmfDialerController();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CPhoneDtmfDialerController* NewL( 
+            CPhoneBubbleWrapper* aBubbleWrapper,
+            CCoeEnv& aCoeEnv );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CPhoneDtmfDialerController* NewLC( 
+            CPhoneBubbleWrapper* aBubbleWrapper,
+            CCoeEnv& aCoeEnv );
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CPhoneDtmfDialerController( 
+            CPhoneBubbleWrapper* aBubbleWrapper,
+            CCoeEnv& aCoeEnv );
+
+    /**
+     * Symbian default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+public: // from CPhoneDialerController
+    
+    /**
+     * @see MPhoneDialerController
+     */
+    const TDesC& NumberEntryPromptTextL();
+    
+    /**
+     * @see MPhoneDialerController
+     */
+    TInt GetButtonData( TButtonIndex aIndex, RPointerArray<CButtonData>& aData ) const;
+    
+    /**
+     * @see MPhoneDialerController
+     */
+    TInt ButtonState( TButtonIndex aIndex ) const;
+    
+    /**
+     * @see MPhoneDialerController
+     */
+    TBool ButtonDimmed( TButtonIndex aIndex ) const;
+    
+    /**
+     * @see MPhoneDialerController
+     */
+    TBool EasyDialingAllowed() const;
+    
+private: // data
+    
+    HBufC* iPromptText; // OWN
+    };
+
+#endif // CPHONEDTMFDIALERCONTROLLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/cphoneeasydialingcontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* 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: Class handles Easy dialing specific commands
+*
+*/
+
+#ifndef CPHONEEASYDIALINGCONTROLLER_H
+#define CPHONEEASYDIALINGCONTROLLER_H
+
+//INCLUDES
+#include <e32base.h>
+#include "phoneviewcommanddefinitions.h"
+
+//FORWARD
+class CDialer;
+class TPhoneCommandParam;
+class CDialingExtensionInterface;
+
+/**
+ * Class takes care of Easy dialing
+ *
+ * @lib phoneuicontrol
+ * @since S60 v9.2
+ */
+NONSHARABLE_CLASS( CPhoneEasyDialingController ) : public CBase
+    {
+    public:
+    
+        /**
+        * Creates new instance of CPhoneEasyDialingController
+        * @param aDialer: reference to dialer
+        * @return CPhoneEasyDialingController* object  
+        */
+        static CPhoneEasyDialingController* NewL(
+                CDialer& aDialer );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CPhoneEasyDialingController();
+        
+        void ExecuteCommandL(
+            TPhoneViewCommandId aCmdId,
+            TPhoneCommandParam* aCommandParam );
+
+        TPhoneViewResponseId HandleCommandL( TPhoneViewCommandId aCmdId );
+       
+        TBool InitializeEasyDialingMenuL( TPhoneCommandParam* aCommandParam );
+
+    private:
+    
+        /**
+        * C++ default constructor.
+        */
+        CPhoneEasyDialingController(CDialer& aDialer);
+        
+    private:
+        // Dialer. Not owned
+        CDialer& iDialer;
+        
+        // Easydialing in interface. Not owned.
+        CDialingExtensionInterface* iEasyDialing;
+    };
+
+#endif //CPHONEEASYDIALINGCONTROLLER_H
--- a/phoneapp/phoneuiview/inc/cphonemenucontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphonemenucontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -70,6 +70,8 @@
         
         void GetConferenceAndSingleFlag( TPhoneCommandParam* aCommandParam );
         
+        void SetConferenceAndWaitingVideoFlag( TBool aIsConfAndWaitingVideo );
+        
         void SetSoftRejectFlag( TPhoneCommandParam* aCommandParam );
         
         void GetSoftRejectFlag( TPhoneCommandParam* aCommandParam );
@@ -116,7 +118,13 @@
 		void SendAiwCommandL( TPhoneCommandParam* aCommandParam );      
  
 		void SetContextMenu( TPhoneCommandParam* aCommandParam );
+
+        void SetInvalidCsPhoneNumberFlag( TPhoneCommandParam* aCommandParam );
+	        
+        void GetInvalidCsPhoneNumberFlag( TPhoneCommandParam* aCommandParam );
 		
+		void SetSecurityMode( TBool aMode );
+
     public: //from base class 
         
          void HandlePropertyChangedL( 
@@ -162,6 +170,7 @@
         TBool iMuteFlag;
         TBool iHoldFlag;
         TBool iConferenceAndSingleFlag;
+        TBool iConferenceAndWaitingVideoFlag;
         TBool iSoftRejectFlag;
         TBool iServiceCodeFlag;
         TBool iWiredAccFlag;
@@ -181,6 +190,8 @@
         TBool iAllowDtmfOptionsFlag;
         TBool iVoipEnabledFlag;  
         TBool iHideVideoCallDTMFVisibility;
+        TBool iInvalidCsPhoneNumber;
+		TBool iSecurityMode;
         // Eikon environment delivered from CPhoneViewController
         CEikonEnv& iEikEnv;       
         // Pointer to AIW service handler. OWNED.
--- a/phoneapp/phoneuiview/inc/cphonenote.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphonenote.h	Fri Apr 23 14:59:43 2010 +0100
@@ -64,6 +64,8 @@
         
     protected:
 
+        void PreLayoutDynInitL();
+        
         TKeyResponse OfferKeyEventL( 
             const TKeyEvent& aKeyEvent,
             TEventCode aType );
--- a/phoneapp/phoneuiview/inc/cphonenotecontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphonenotecontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -30,7 +30,6 @@
 class CPhoneTimer;
 class CEikonEnv;
 class CPhoneNote;
-class CPhoneUIDisabledNote;
 
 class CPhoneNoteController : public CBase, public MPhoneTimer
     {
--- a/phoneapp/phoneuiview/inc/cphoneringingtoneplayerao.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphoneringingtoneplayerao.h	Fri Apr 23 14:59:43 2010 +0100
@@ -22,12 +22,11 @@
 // INCLUDES
 #include <e32base.h>
 #include <Profile.hrh>
-#include "mphoneaudioplayerobserver.h"
 #include "mphonevideoplayerobserver.h"
 #include "mphonecenrepobserver.h"
-#include "cphoneaudioplayer.h"
 #include "mphonetimer.h"
 #include "mphonevideoplayer.h"
+#include "phoneringingtoneclient.h"
 
 // FORWARD DECLARATIONS
 //class MPhoneRingingToneObserver;
@@ -51,7 +50,6 @@
 class CPhoneRingingTonePlayerAO :
     public CActive,
     public MPhoneCenRepObserver,
-    private MPhoneAudioPlayerObserver,
     private MPhoneTimer,
     private MPhoneVideoPlayerObserver
     {
@@ -60,19 +58,18 @@
         enum TState
             {
             EIdleState,  
-            EDeletingAudioPlayer,
             EDeletingVideoPlayer,
             EPlayingDefaultVideo
             };
 
     public:
-        
+
         /**
         * Two-phased constructor.
         * @return new instance.
         */
         static CPhoneRingingTonePlayerAO* NewL();
-        
+
         /**
         * Destructor.
         */
@@ -86,6 +83,8 @@
 
         /**
         * Play audio ring tone 
+        * @param aVolume Volume used to play the ringing tone.
+        * @param aRingingType Ringing type.
         */
         void PlayAudioRingTone( 
             TInt aVolume, 
@@ -109,7 +108,7 @@
         * @since    S60 5.0
         */
         void PlayUnsecureVoIPTone();
-        
+
         /**
         * Stops playing the ringing tone.
         * Method does not do anything if ringing tone is not playing.
@@ -121,13 +120,13 @@
         * Stream not closed ( If music player was ongoing ) 
         */
         void MuteRingingToneOnAnswer();
-          
+
         /**
         * Continues video playback with muted audio.
         * Ringing tone is stopped.
         */
         void MuteRingingTone();
-          
+
         /**
         * Sets video player.
         * @since Series 60 v3.2
@@ -135,7 +134,6 @@
         */
         void SetVideoPlayer( MPhoneVideoPlayer* aVideoPlayer );
 
-
         /**
         * Play TTS tone simultaneously with Personal or Default tones.
         * This method does not command phone to play TTS immediately. Instead 
@@ -174,15 +172,7 @@
         * @return ETrue if extended security is required.
         */
         TBool ExtendedSecurity() const;
-   
-        /**
-        * This function is called when Mediator receives response to the sent
-        * ShowMultiMediaRingingTone command.
-        * @param aStatus - Standard Symbian error code indicating the
-        *                  success of the command.
-        */
-		    void ShowMultimediaRingingToneResponseL( TInt aStatus );
-		
+
     public: // From MPhoneCenRepObserver
 
         /**
@@ -198,92 +188,36 @@
     private:
 
         /**
-        * Handle the error of audio file player.
-        */
-        virtual void HandleAudioPlayerError( 
-            TPhoneAudioPlayerErrorEvent aEvent, 
-            TInt aError, 
-            TInt aId = KPhoneAudioPlayerNotSpecified );
-
-        /**
-        * Handle audio player initialize complete.
-        */
-        virtual void HandleAudioPlayerInitComplete(
-            TInt aId = KPhoneAudioPlayerNotSpecified );
-
-        /**
-        * Handle auido file playing complete successfully.
-        */
-        virtual void HandlePlayingComplete( 
-            TInt aId = KPhoneAudioPlayerNotSpecified );
-
-        /**
         * @see MPhoneTimer
         */
         virtual void HandleTimeOutL();
 
         /**
-        * HandleVideoPlayerError
+        * This function is called for video player errors.
+        * @param aEvent The error event happend in initializing or playing.
+        * @param aError The error code return by MMF video player. 
         */
         virtual void HandleVideoPlayerError( 
             TPhoneVideoPlayerErrorEvent aEvent,
             TInt aError );
 
         /**
-        * HandleVideoPlayerInitComplete
+        * This function is called when video player initialization complete
         */
         virtual void HandleVideoPlayerInitComplete();
 
         /**
-        * HandleVideoPlayerPlayingComplete
+        * This function is called after the playing completes successfully
         */
         virtual void HandleVideoPlayerPlayingComplete();
 
-        /** 
-        * Enumerates identifiers for each player:
-        * EPlayerAudio - audio
-        * EPlayerBeepOnce - beep once
-        * EPlayerSilent - silent
-        * EPlayerDefault - default
-        * EPlayerBackup - backup
-        *
-        * EPlayerFirst and EPlayerLast are alias
-        * to other identifiers.
-        * EPlayerFirst - first player
-        * EPlayerLast - last player
-        */
-        enum TPlayerId
-            {
-            EPlayerFirst,
-            EPlayerAudio = EPlayerFirst,
-            EPlayerBeepOnce,
-            EPlayerSilent,
-            EPlayerUnsecureVoIP,
-            EPlayerDefault,
-            EPlayerBackup,
-            EPlayerTts, 
-            EPlayerLast = EPlayerTts,
-            EPlayerCount
-            };
-            
-        /**
-        * Enumerates how many times TTs is played
-        * ESaidOnce -once
-        * ESaidTwice twice 
-        */    
-        enum TTtsStatus
-            {
-            ESaidOnce,
-            ESaidTwice
-            };
-
         /**
         * C++ default constructor.
         */
         CPhoneRingingTonePlayerAO();
 
         /**
-        * By default Symbian OS constructor is private.
+        * Symbian 2nd phase constructor.
         */
         void ConstructL();
 
@@ -306,35 +240,6 @@
             TProfileRingingType aRingingType );
 
         /**
-        * Do construct tone.
-        * @param aRingingTone Ringing tone.
-        * @return The instance of the player. NULL is returned if it's failed.
-        */
-        CPhoneAudioPlayer* ConstructTonePlayer( 
-            const CPhoneRingingTone& aRingingTone,
-            TInt aId );
-
-        /**
-        * Handle audio player error.
-        * @param aDelete ETrue if deletion of the player allowed, 
-        *                EFalse otherwise.
-        * @param aSync ETrue if synchronous deletion of players is allowed,
-        *              EFalse otherwise.
-        */
-        void DoHandlePlayerError(
-            TBool aDelete,
-            TBool aSync );
-
-        /**
-        * Convert ringing type from PhoneAppEnging to the ringing type in 
-        * CPhoneAudioPlayer.
-        * @param aRingingType the ringing type form PhoneAppEngine.
-        * @return ringing type of CPhoneAudioPlayer.
-        */
-        CPhoneAudioPlayer::TRingingType ConvertRingingType(
-            TProfileRingingType aRingingType );
-
-        /**
         * Convert ringing type from PhoneAppEnging to the ringing type in 
         * MPhoneVideoPlayer.
         * @since Series 60 3.1
@@ -344,41 +249,6 @@
         MPhoneVideoPlayer::TPlayMode ConvertVideoRingingType(
             TProfileRingingType aRingingType );
 
-        /**
-        * Construct media server and backup tone player.
-        */
-        TInt ConstructPlayers();
-
-        /**
-        * Construct media server and backup tone player.
-        */
-        void ConstructPlayersL();
-
-        /**
-        * Construct sequence players.
-        * @param aPlayer player to be constructed.
-        */
-        void ConstructSequencePlayer(
-            TPlayerId aPlayer );
-
-        /**
-        * Construct sequence players.
-        * @param aPlayer player to be constructed.
-        */
-        void ConstructSequencePlayerL(
-            TPlayerId aPlayer );
-
-        /**
-        * Cleanup players.
-        */
-        void CleanupPlayers();
-
-        /**
-        * Deletes player asynchronoysly.
-        * @param aPlayer player to be deleted.
-        */
-        void DeletePlayerAsync(
-            TPlayerId aPlayer );
        /**
         * Plays default L1 or L2 video ring tone asynchronously.
         * @since Series 60 3.1
@@ -401,49 +271,7 @@
         * @see CActive::DoCancel.
         */
         void DoCancel();
-        
-        /**
-        * Wrapper of DoHandleTtsDelayTimeout, that can be used as TCallback. 
-        * Immediately passes control to DoHandleTtsDelayTimeout method.
-        * @since Series 60 3.0
-        * @param object Object to call DoHandleTtsDelayTimeout() on, . 
-        *        instance of CPhoneRingingTonePlayer.
-        * @return KErrNone.
-        */
-        static TInt HandleTtsDelayTimeout( TAny* object );
-        
-        /**
-        * It is called after TTS delay elapsed. Starts playing TTS.
-        */
-        void DoHandleTtsDelayTimeout();
-        
-        /**
-        * Checks if TTS component should be played for the current ringtone 
-        * playback and initializes the TTS playback. This method is to be 
-        * called from within PlayXXXXTone methods
-        * @since Series 60 3.0
-        * @param aRingingType ringing type
-        */
-        void AddTtsPlaybackIfNeeded( TProfileRingingType aRingingType );
-             
-        /**
-        * Returns currently active player which is used wit TTS player.
-        * @return pointer to CPhoneAudioPlayer.
-        */
-        CPhoneAudioPlayer* GetCurrentlyActiveAudioPlayerWithTTs();   
-         
-        /**
-        * TTs cases only. Calculates new volume and ramptimes
-        * for Ascending TTS ringing case and normal TTS ringing case.
-        * @param aStatus -status of TTs player.
-        */         
-        void SolveNewVolumeAndRamptime( TTtsStatus aStatus );   
-        
-        /**
-        * Retarts currently active ringingtone player.
-        */
-        void ReStartRingingTonePlayer();
-        
+
          /**
          * Checks if ringing tone file's size is larger than the size limit.
          * If size limit is exceeded, default tone is played instead.
@@ -459,13 +287,13 @@
          * Checks if ringing tone file's size is larger than the size limit.
          * @since 3.1
          * @param aFile   File to check.
-         *        aSizeLimitKB  the size limit in kB is set to this variable.
+         * @param aSizeLimitKB  the size limit in kB is set to this variable.
          * @return KErrNone        if the file can be used as a ringing tone.
          *         KErrTooBig        if the file size limit is exceeded.
          *         Other error value if error happened during size checking.
          */
         TInt CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB );
-        
+
          /**
          * Reads from central repository the file size limit of following tones:
          * -contact's personal ringing tone
@@ -477,69 +305,17 @@
          * @return leaves on error.
          */
         void GetMaxToneFileSizeL( TInt& aSizeLimitKB ) const;
-        
-        /**
-        * Returns currently active audio player.
-        * @return Currently active audio player or NULL if none active.
-        */
-        CPhoneAudioPlayer* ActiveAudioPlayer();
-        
-        /**
-        * Mutes the ringing tone.
-        */
-        void DoMuteRingingTone();
-        
 
     private:    // Data
-        
-        // Audio ring tone player. Memory allocated during construction.
-        // After constructed, no leave may be caused during audio playing
-        CPhoneAudioPlayer* iAudioPlayer;
-
-        // Audio player for beep once.
-        CPhoneAudioPlayer* iBeepOncePlayer;
-
-        // Audio player for silent tone.
-        CPhoneAudioPlayer* iSilentPlayer;
-        
-        // Audio player for unsecure VoIP tone.
-        CPhoneAudioPlayer* iUnsecureVoIPTonePlayer;
-        
-        // Default player.
-        CPhoneAudioPlayer* iDefaultPlayer;
-        
-        // Tts player.
-        CPhoneAudioPlayer* iTtsPlayer;
-
-        // Backup ringing tone. Incase all default player failed.
-        CPhoneAudioPlayer* iBackupPlayer;
-        
-		// Default player
-        CPhoneRingingTone* iDefaultRingingTone;
-        
-        // Media server.
-        CMdaServer* iMdaServer;
 
         // Indicate which tone is playing or need to be played:
         // EIdle - idle,
-        // EAudioTonePlaying - audio playing,
-        // EBeepOnce - beep once playing,
-        // ESilentTonePlaying - silent tone playing,
-        // EUnsecureVoIPTonePlaying - unsecure tone playing (VoIP),
-        // EDefaultTonePlaying - default tone playing,
-        // EBackupTonePlaying - backup tone playing,
         // EVideoTonePlaying - playing video ringing tone
         // ESilentVideoTonePlaying  - silent playing video ringing tone
         // EPersonalVideoTonePlaying - personal playing video ringing tone
         enum TTonePlayingStatus
             {
             EIdle,
-            EAudioTonePlaying,
-            EBeepOnce,
-            ESilentTonePlaying,
-            EUnsecureVoIPTonePlaying,
-            EDefaultTonePlaying,
-            EBackupTonePlaying,
             EVideoTonePlaying,
             ESilentVideoTonePlaying,
             EPersonalVideoTonePlaying
@@ -547,28 +323,12 @@
 
         // Current playing status.
         TTonePlayingStatus iTonePlayingStatus;
-        
-        // True if Tts is currently playing. Is different from 
-        // iTonePlayingStatus, because TTS is played in
-        // parallel with the other tone types
-        TBool iTtsTonePlaying;
-        
-        // Index of the TTS delay that is "executed" currently or is to be 
-        // "executed" after the current playing of the TTS tone. Is zero based
-        TInt iTtsDelayIndex;
-        
-        // True if TTS tone should be played when the next playing of the 
-        // default or personal tone is fired.
-        TBool iTtsToneToBePlayed;
 
         // Audio/Video tone, not owned
         CPhoneRingingTone* iAudioVideoRingingTone;
 
         // Volume for backup tone playing.
         TInt iVolume;
-        
-        // Volume of the text pronounced by the TTS engine
-        TInt iTtsVolume;
 
         // Ringing type for backup tone playing.
         TProfileRingingType iRingingType;
@@ -576,40 +336,26 @@
         // Timer.
         CPhoneTimer* iTimer;
 
-        // Timer, that tracks delays before playing TTS
-        CPhoneTimer* iTtsDelayTimer;
-
-        // Number of times TTS tone should be played for the CURRENT ringtone
-        // If ringing tone is to be played just once, iTtsDelayCount == 1,
-        // otherwise iTtsDelayCount == KTtsDelayCount
-        TInt iTtsDelaysCount;
-
-        // Player to be deleted asynchronously.
-        RPointerArray<CPhoneAudioPlayer> iAsyncDeletePlayers;
-
         // DRM extend security
         TBool iExtSecNeeded;
- 
+
         // Video ringing tone player
         MPhoneVideoPlayer* iVideoPlayer;
-    
+
         // State of this active object
         TState iState;
-              
-        // RingingType for TtsPlayer only.
-        TProfileRingingType iTtsRingingType;
-        
-        // Counter for TTs timeouts
-        TInt iTTsTimeOutCounter;
-        
+
         // Voice call ringing tone file size max value.
-        TInt iToneFileSizeLimitKB;             
+        TInt iToneFileSizeLimitKB;
 
         // Flag. Indicates video scaling capability of the device.
         TBool iArbitraryVideoScaling;
 
+        // Ringing tone server.
+        RPhoneRingingTonePlayer iToneServer;
+
     };
 
 #endif      // CPHONERINGINGTONEPLAYERAO_H
-            
+
 // End of File
--- a/phoneapp/phoneuiview/inc/cphonetoolbarcontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphonetoolbarcontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -72,6 +72,10 @@
 
     void SetIhfFlag( TPhoneCommandParam* aCommandParam );
     
+    void SetWiredAccFlag( TPhoneCommandParam* aCommandParam );
+    
+    void SetCallInProgressFlag( TPhoneCommandParam* aCommandParam ); 
+    
     /**
      * Dims (greys out) or undims all toolbar items.
      *
@@ -110,7 +114,15 @@
      * @param aToolbar The toolbar object pointer
      */
     void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar );
-      
+
+protected:
+    /**
+     * Constructor.
+     * 
+     * @param aCoeEnv 
+     */
+    CPhoneToolbarController( CCoeEnv& aCoeEnv );    
+    
 private:
 
     /**
@@ -131,12 +143,6 @@
     
     
     /**
-     * Constructor.
-     * 
-     * @param aCoeEnv 
-     */
-    CPhoneToolbarController( CCoeEnv& aCoeEnv );    
-    /**
      * Symbian 2nd phase constructor.
      * 
      */
@@ -169,6 +175,10 @@
     TBool iMuteFlag;
     
     TBool iIhfFlag;
+    
+    TBool iWiredAccFlag;
+    
+    TBool iCallInProgress;
 
     };
 
--- a/phoneapp/phoneuiview/inc/cphoneuidisablednote.h	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
-* Copyright (c) 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"
-* 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:  PhoneUI Note
-*
-*/
-
-/*
-*/
-
-#ifndef CPHONEUIDISABLEDNOTE_H
-#define CPHONEUIDISABLEDNOTE_H
-
-
-//  INCLUDES
-#include "tphonecmdparamnote.h"
-#include "cphonenote.h"
-
-// FORWARD DECLARATIONS
-class CAknNoteDialog;
-
-class CPhoneUIDisabledNote : public CPhoneNote
-    {
-    public:  // Constructors and destructor
-
-        /**
-         * Constructor.
-         * 
-         * @param    aSelfPtr            Pointer to self. 
-         *                               This pointer is set to NULL when the note is destroyed by the framework.
-         * @param    aCommandObserver    Observer to receive command events from the note.
-         */
-        CPhoneUIDisabledNote( CEikDialog** aSelfPtr, MEikCommandObserver& aCommandObserver );  
-        
-        /**
-        * Destructor.
-        */
-        virtual ~CPhoneUIDisabledNote();  
-
-        /**
-        * Sets the type of the note.
-        */
-        void SetNoteType( TPhoneNoteType aNoteType );
-
-        /**
-        * Gets the type of the note.
-        */
-        TPhoneNoteType NoteType();
-        
-        /**
-        * Updates softkeys to note
-        * @param    aResourceId     Resource id
-        */
-        void UpdateSoftkeysL( TInt aResourceId );
-        
-    protected:
-
-        TKeyResponse OfferKeyEventL( 
-            const TKeyEvent& aKeyEvent,
-            TEventCode aType );
-
-        TBool OkToExitL( TInt aCommand );
-
-        void HandlePointerEventL( 
-            const TPointerEvent& aPointerEvent );
-
-        void SetSizeAndPosition( const TSize& aSize );
-        
-    protected:  // Data
-        
-        //The type of note. Not necessarily set.
-        //Used in security view
-        TPhoneNoteType iNoteType;
-    };
-
-#endif // CPHONEUIDISABLEDNOTE_H   
-            
-// End of File
--- a/phoneapp/phoneuiview/inc/cphoneview.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphoneview.h	Fri Apr 23 14:59:43 2010 +0100
@@ -92,13 +92,6 @@
         void SetSecurityMode ( TBool aStatus );
         
         /**
-        * Get state of the security mode flag
-        * @return aStatus ETrue for the security mode. EFalse for the 
-        * normal mode.
-        */         
-        TBool IsSecurityMode();
-        
-        /**
         * Gets the previous app flag value.
         */ 
         TBool GetActivatePreviousApp();
--- a/phoneapp/phoneuiview/inc/cphoneviewcontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphoneviewcontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -33,6 +33,8 @@
 #include "tphonecmdparamtranseffect.h"
 
 #include "mphoneviewblockingdialogobserver.h"
+#include "mnumberentry.h"
+#include "mphonesecuritymodechangeobserver.h"
 
 // FORWARD DECLARATIONS
 class CPhoneButtonsController;
@@ -41,7 +43,6 @@
 class CPhoneDialerView;
 class TPhoneViewId;
 class TPhoneCommandParam;
-class TPhoneCmdParamBoolean;
 class CEikButtonGroupContainer;
 class CPhoneMenuController;
 class CPhoneNoteController;
@@ -76,12 +77,16 @@
 class CDialer;
 class MPhoneNumberEntryChangedHandler;
 class MPhoneViewCustomization;
+class CPhoneEasyDialingController;
+class CPhoneDtmfDialerController;
 
 class CPhoneViewController :
     public CBase,
     public MPhoneViewCommandHandle,
     public MPhoneStatusPaneObserver,
-    public MPhoneViewBlockingDialogObserver
+    public MPhoneViewBlockingDialogObserver,
+    public MNumberEntryObserver,
+	public MPhoneSecurityModeChangeObserver
     {
     public:  // Constructors and destructor
 
@@ -245,8 +250,25 @@
         */
         IMPORT_C void SetBlockingDialogIsDisplayed( TBool aBlockingDialog );
 
+        /**
+         * From base class MNumberEntryObserver
+         * Indication that numberentry state changed
+         */
+        void NumberEntryStateChanged( TBool aEntryHasText );    
+
+// From MPhoneSecurityModeChangeObserver
+
+		IMPORT_C void HandleSecurityModeChanged( TBool aIsEnabled );
+
     private:     // New functions
 
+		/**
+		 * Set security mode
+		 *
+		 * @param aMode ETrue if mode should be set enabled.
+		 */
+    	void SetSecurityMode( TBool aMode );
+    	
         /**
         * read IdleApplicationUid from PubSub
         */
@@ -257,7 +279,7 @@
         * background after being brought to the foreground using
         * BringToForeground()
         */
-        TBool NeedToSendToBackground();
+        TBool GetNeedToReturnToForegroundAppAfterCall() const;
 
         /**
         * Gets the blocking dialogs status
@@ -267,7 +289,7 @@
         /**
         * Sets the required background status of the application
         */
-        void SetNeedToSendToBackground( TPhoneCommandParam* aCommandParam );
+        void SetNeedToReturnToForegroundAppAfterCall( TPhoneCommandParam* aCommandParam );
 
         /**
         * Sends application to background.
@@ -329,6 +351,11 @@
         void ActivateAppViewConventionalL( TPhoneCommandParam* aCommandParam );
 
         /**
+        * Launches multimedia sharing (live video sharing)
+        */
+        static void LaunchMultimediaSharingL();
+
+        /**
         * Launches application.
         */
         void LaunchApplicationL();
@@ -494,16 +521,6 @@
         /**
         * Set security mode to view and statuspane
         */
-        void SetSecurityMode( TPhoneCommandParam* aCommandParam );
-
-        /**
-        * Get security mode status
-        */
-        void GetSecurityModeStatus ( TPhoneCommandParam* aCommandParam );
-
-        /**
-        * Set security mode to view and statuspane
-        */
         void SetStatusPaneVisible( TPhoneCommandParam* aCommandParam );
 
         /**
@@ -592,12 +609,6 @@
         */
         TInt FindAppByWgIDL( TInt aAppWgID );
 
-        /**
-        * Returns pointer to the control that is responsible of handling
-        * Phone Number Entry Changed events.
-        */
-        MPhoneNumberEntryChangedHandler* NumberEntryChangedHandler() const;
-
        /**
         * Returns single item fetch type
         * @return single item fetch type
@@ -605,14 +616,14 @@
         TInt SingleItemFetchType() const;
 
         /**
-         * Checks screen lock status.        
-         */        
-        TBool IsKeyLockEnabled();
+         * Checks if DTMF dialer mode is currently active        
+         */
+        TBool IsDtmfDialerActive() const;
         
         /**
-         * Unlock keys & screen.        
-         */         
-        void DisableKeyLock();
+         * Checks if custom dialer mode is currently active        
+         */
+        TBool IsCustomDialerActive() const;
         
     private:    // Data
 
@@ -634,9 +645,15 @@
         // Controls the touch buttons
         CPhoneDialerController* iDialerController;
         
+        // Controls touch dialer in DTMF mode
+        CPhoneDtmfDialerController* iDtmfDialerController;
+        
         // Controls the toolbar
         CPhoneToolbarController* iToolbarController;
 
+        // Handles easydialing commands. Owned.
+        CPhoneEasyDialingController* iEasyDialingController;
+        
         // For accessing incall indicator
         CPhoneIncallIndicator* iIncallIndicator;
 
@@ -745,6 +762,15 @@
         TInt iPrevious;
 
         TBool iPriotityChanged;
+		
+		/**
+		 * Internal flag to define if security mode is enabled.
+		 */
+        TBool iSecurityMode;
+        
+        // Boolean flag. ETrue if the application needs to return
+        // to the foreground after call ended
+        TBool iNeedToReturnToForegroundAppAfterCall;
     };
 
 #endif // CPHONEVIEWCONTROLLER_H
--- a/phoneapp/phoneuiview/inc/mphonedialercontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/mphonedialercontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -18,27 +18,58 @@
 #ifndef MPHONEDIALERCONTROLLER_H_
 #define MPHONEDIALERCONTROLLER_H_
 
-// Forward declarations
-class CAknToolbar;
+#include <e32cmn.h>
+#include <gulicon.h>
+
 
 /**
- *  Abstract custom dialer interface.
- *
+ *  Abstract dialer controller interface.
+ *  Dialer controller provides data to be shown on dialer UI
+ *  (e.g. prompt text and toolbar button contents), but is
+ *  agnostic to implementation details and layout of the
+ *  dialer UI components.
  *
  *  @lib PhoneUiView.lib
  *  @since S60 v5.0
  */
 class MPhoneDialerController
     {
-
-public:
-
+public: // data types
+    
+    /** 
+     * Indices to refer to visual button slots in the dialer toolbar. 
+     * The index order in not necessarily the same as the visual
+     * order of the buttons. The index names correspond to the button
+     * functions in the normal dialer mode.
+     * @since S60 v5.2
+     */
+    enum TButtonIndex
+        {
+        EClearButton = 0,   //< Button normally used for backspce
+        ECallButton,        //< Button normally used for "call" and "log"
+        EPhonebookButton,   //< Button normally used for "Phonebook" and "Add to Phonebook"
+        
+        ENumberOfButtons    //< Total number of buttons in the toolbar.
+        };
+    
     /**
-    * Initializes the controller. 
-    * @param    aToolbar    CAknToolbar instance.
-    * @since    S60 v5.1
-    */
-    virtual void InitializeL( CAknToolbar& aToolbar ) = 0;
+     * Struct-like class encapsulating data of one toolbar button function.
+     * @since S60 v5.2
+     */
+    class CButtonData : public CBase
+        {
+    public: // data
+        TInt iCommandId;
+        CGulIcon* iIcon; // OWN
+        HBufC* iTooltip; // OWN
+    public: // constructors & destructor
+        inline CButtonData() {}
+        inline CButtonData( TInt aCommandId, CGulIcon* aIcon, HBufC* aTooltip ) :
+            iCommandId( aCommandId ), iIcon( aIcon ), iTooltip( aTooltip ) {}
+        inline ~CButtonData() { delete iIcon; delete iTooltip; }
+        };
+    
+public:
     
     /**
     * Returns Cba resource id
@@ -60,20 +91,53 @@
     * @since S60 v5.1
     */
     virtual const TDesC& NumberEntryPromptTextL() = 0;
+
+    /**
+     * Get contents for given toolbar button. One button may have zero or more
+     * different functions. Which one is set active, depends on the return value
+     * of the member function ButtonState().
+     * @param   aIndex  Index of the button for which data is queried.
+     * @param   aData   On return, contains all the possible states for the button.
+     * @return  KErrNone if action was succesful. 
+     *          System wide error code if something went wrong.
+     * @since S60 v5.2
+     */
+    virtual TInt GetButtonData( TButtonIndex aIndex, RPointerArray<CButtonData>& aData ) const = 0;
+    
+    /**
+     * Function used to tell controller if number entry is empty or not.
+     * In many cases this has an influence on the status of some or all toolbar buttons.
+     * @param   aEmpty  ETrue if number entry is empty, EFalse othwerwise.
+     * @since S60 v5.2
+     */
+    virtual void SetNumberEntryIsEmpty( TBool aEmpty ) = 0;
     
     /**
-    * Handles the number entry empty event
-    * @param aEmpty ETrue if numberentry is empty
-    * @since S60 v5.1
-    */
-    virtual void HandleNumberEntryIsEmpty( TBool aEmpty ) = 0;
-
+     * Gets current state of the given button.
+     * @param   aIndex  Index of the button for which state is queried.
+     * @return  Index of the button state which should be active. 
+     *          KErrNotFound if the given button has no states.
+     * @since S60 v5.2
+     */
+    virtual TInt ButtonState( TButtonIndex aIndex ) const = 0;
+    
     /**
-    * Sets visibility of buttons created by the implementation
-    * @param aShow ETrue if numberentry is empty
-    * @since S60 v5.1
-    */
-    virtual void ShowButtons( TBool aShow ) = 0;
+     * Gets dimming status of the given button
+     * @param   aIndex  Index of the button for which dimming status is queried.
+     * @return  ETrue   if the given button should be dimmed.
+     *          EFalse  otherwise.
+     * @since S60 v5.2
+     */
+    virtual TBool ButtonDimmed( TButtonIndex aIndex ) const = 0;
+    
+    /**
+     * Gets value indicating whether using Easy Dialing should be allowed in
+     * the current Dialer mode.
+     * @return  ETrue   if Easy Dialing can be enabled.
+     *          EFalse  if Easy Dialing must not be enabled.
+     * @since S60 v5.2
+     */
+    virtual TBool EasyDialingAllowed() const = 0;
     };
 
 #endif /*MDIALERCONTROLLER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/mphoneringingtonesrv.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* 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"
+* 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:  Interface class for phone ringing tone server.
+*
+*/
+
+
+#ifndef __MPHONERINGINGTONESRV_H
+#define __MPHONERINGINGTONESRV_H
+
+// CLASS DECLARATION
+class MPhoneRingingToneServer
+    {
+public:
+    /**
+    * Increments sessions.
+    */
+    virtual void IncrementSessions() = 0;
+
+    /**
+    * Decrements sessions.
+    */
+    virtual void DecrementSessions() = 0;
+
+    // Ringing tone settings
+    
+    /**
+    * Sets extended security required flag.
+    * @param aNeeded Extended security required.
+    */
+    virtual void SetExtendedSecurityNeeded( TBool aNeeded ) = 0;
+    
+    /**
+    * Sets extended security required flag.
+    * @param aLimit Extended security required.
+    */
+    virtual void SetToneFileSizeLimit( TInt aLimit ) = 0;
+    
+    /**
+    * Sets ringing tone.
+    */
+    virtual void SetRingingToneL( const RMessage2& aMessage ) = 0;
+    
+    /**
+    * Sets default ringing tone.
+    * @param aMessage Message from Client.
+    */
+    virtual void SetDefaultRingingToneL( const RMessage2& aMessage ) = 0;
+
+    // Playback control
+    
+    /**
+    * Play audio ring tone. 
+    * @return True if the client message should not be completed.
+    * @param aMessage Message from Client.
+    */
+    virtual TBool PlayAudioRingTone( const RMessage2& aMessage ) = 0;
+
+    /**
+    * Play TTS tone simultaneously with Personal or Default tones.
+    * This method does not command phone to play TTS immediately. Instead 
+    * it registers a request to play TTS, when Personal or default tones 
+    * are played.
+    * @param aMessage Message from Client.
+    */
+    virtual void PlayTtsTone( const RMessage2& aMessage ) = 0;
+
+    /**
+    * Play default tone.
+    * @param aMessage Message from Client.
+    */
+    virtual void PlayDefaultTone( const RMessage2& aMessage ) = 0;
+
+    /**
+    * Play backup tone.
+    * @param aMessage Message from Client.
+    */
+    virtual void PlayBackupTone( const RMessage2& aMessage ) = 0;
+
+    /**
+    * Play silent tone. No_sound.wav will be played. If vibration alert
+    * is ON, it will vibrate.
+    */
+    virtual void PlaySilentTone() = 0;
+
+    /**
+    * Playing the Beep once.
+    * @param aMessage Message from Client.
+    */
+    virtual void BeepOnce( const RMessage2& aMessage ) = 0;
+
+    /**
+    * Play unsecure VoIP tone.
+    * Play tone if secure call fails and call is changed to unsecure call.
+    */
+    virtual void PlayUnsecureVoIPTone() = 0;
+
+    /**
+    * Mutes ringing tone.
+    */
+    virtual void MuteRingingTone() = 0;
+
+    /**
+    * Stops playing the ringing tone.
+    * Method does not do anything if ringing tone is not playing.
+    */
+    virtual void StopPlaying() = 0;
+
+    };
+
+#endif // __MPHONERINGINGTONESRV_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/phoneringingtoneclient.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,146 @@
+/*
+* 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"
+* 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:  Client interface for phone ringing tone server.
+*
+*/
+
+
+#ifndef RPHONERINGINGTONEPLAYER_H
+#define RPHONERINGINGTONEPLAYER_H
+
+// INCLUDES
+#include <Profile.hrh>
+
+// FORWARD DECLARATIONS
+class TPhoneCommandParam;
+
+// CLASS DECLARATION
+
+class RPhoneRingingTonePlayer : public RSessionBase
+    {
+public:
+    /**
+    * C++ default constructor.
+    */
+    RPhoneRingingTonePlayer();
+    
+    /**
+    * Destructor.
+    */
+    ~RPhoneRingingTonePlayer();
+
+    // Tone settings
+    
+    /**
+    * Sets extended security required flag.
+    * @param aNeeded Extended security required.
+    */
+    void SetExtendedSecurityNeeded( TBool aNeeded );
+    
+    /**
+    * Sets extended security required flag.
+    * @param aLimit Extended security required.
+    */
+    void SetToneFileSizeLimit( TInt aLimit );
+    
+    /**
+    * Sets ringing tone.
+    * @param aFilename Ringing tone.
+    */
+    void SetRingingToneL( const TDesC& aFilename );
+    
+    /**
+    * Sets default ringing tone.
+    * @param aFilename Ringing tone.
+    */
+    void SetDefaultRingingToneL( const TDesC& aFilename );
+
+    // Playback control
+    
+    /**
+    * Play audio ring tone 
+    * @param aVolume Volume used to play the ringing tone.
+    * @param aRingingType Ringing type.
+    */
+    void PlayAudioRingTone( TInt aVolume, TProfileRingingType aRingingType );
+
+    /**
+    * Play TTS tone simultaneously with Personal or Default tones.
+    * This method does not command phone to play TTS immediately. Instead 
+    * it registers a request to play TTS, when Personal or default tones 
+    * are played.
+    * @param aTextToSay Text, that should be pronounced by the Text-To-Speech 
+    * engine. This is normal descriptor, no UTF-8 and no "(tts)" prefix
+    * @param aVolume Volume for the TTS-tone, Does not effect the volume 
+    * of the normal tone, that will be played simulteneously with the TTS
+    * @param aRingingType ringing type.
+    */
+    void PlayTtsTone( const TDesC& aTextToSay, TInt aVolume, TProfileRingingType aRingingType );
+
+    /**
+    * Play default tone.
+    * @param aVolume volume used for the playing.
+    * @param aRingingType ringing type.
+    */
+    void PlayDefaultTone( TInt aVolume, TProfileRingingType aRingingType );
+
+    /**
+    * Play backup tone.
+    * @param aVolume volume used for the playing.
+    * @param aRingingType ringing type.
+    */
+    void PlayBackupTone( TInt aVolume, TProfileRingingType aRingingType );
+
+    /**
+    * Play silent tone. No_sound.wav will be played. If vibration alert
+    * is ON, it will vibrate.
+    */
+    void PlaySilentTone();
+
+    /**
+    * Playing the Beep once.
+    * @param aVolume volume used to play the ringing tone.
+    */
+    void BeepOnce( TInt aVolume );
+
+    /**
+    * Play unsecure VoIP tone.
+    * Play tone if secure call fails and call is changed to unsecure call
+    */
+    void PlayUnsecureVoIPTone();
+
+    /**
+    * Continues video playback with muted audio.
+    * Ringing tone is stopped.
+    */
+    void MuteRingingTone();
+
+    /**
+    * Stops playing the ringing tone.
+    * Method does not do anything if ringing tone is not playing.
+    */
+    void StopPlaying();
+
+
+public:
+    /**
+    * Establishes a connection with Server.
+    * @return Result code indicating the success of operation.
+    */
+    TInt Connect();
+    };
+
+#endif // CPHONERINGINGTONEPLAYERAO_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/phoneringingtonesrv.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,190 @@
+/*
+* 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"
+* 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:  Phone ringing tone server definitions.
+*
+*/
+
+
+#ifndef __PHONERINGINGTONESRV_H
+#define __PHONERINGINGTONESRV_H
+
+// INCLUDES
+#include <f32file.h>
+#include <Profile.hrh>
+#include "mphoneringingtonesrv.h"
+
+// CONSTANTS
+_LIT( KRingingToneServerName, "PhoneRingingToneSrv" );
+const TInt KRingingToneSrvVersionMajor = 1;
+const TInt KRingingToneSrvVersionMinor = 0;
+const TInt KRingingToneSrvVersionBuild = 0;
+
+// FORWARD DECLARATIONS
+class CPhoneRingingToneSrvPlayerAO;
+
+// CLASS DECLARATION
+class CPhoneRingingToneServer : public CServer2, 
+                                public MPhoneRingingToneServer
+    {
+public:
+    
+    /**
+    * Two-phased constructor.
+    * @return new instance.
+    */
+    static CPhoneRingingToneServer* NewLC();
+
+    /**
+    * Destructor.
+    */
+    ~CPhoneRingingToneServer();
+
+    /**
+    * Increments sessions.
+    */
+    void IncrementSessions();
+
+    /**
+    * Decrements sessions.
+    */
+    void DecrementSessions();
+
+    /**
+    * Thread entry function.
+    */
+    static TInt ThreadEntryFunc( TAny* aPtr );
+
+    /**
+    * From CServer, create a new session.
+    * @param aVersion It is the version of the client api.
+    * @param aMessage Connect message from Client.
+    * @return Returns a new session.
+    */          
+    CSession2* NewSessionL( const TVersion& aVersion,  const RMessage2& aMessage ) const;
+
+private:
+    /**
+    * C++ default constructor.
+    */
+    CPhoneRingingToneServer();
+
+    /**
+    * Symbian 2nd phase constructor.
+    */
+    void ConstructL();
+
+public:
+    // Ringing tone settings
+    
+    /**
+    * Sets extended security required flag.
+    * @param aNeeded Extended security required.
+    */
+    void SetExtendedSecurityNeeded( TBool aNeeded );
+    
+    /**
+    * Sets extended security required flag.
+    * @param aLimit Extended security required.
+    */
+    void SetToneFileSizeLimit( TInt aLimit );
+    
+    /**
+    * Sets ringing tone.
+    */
+    void SetRingingToneL( const RMessage2& aMessage );
+    
+    /**
+    * Sets default ringing tone.
+    * @param aMessage Message from Client.
+    */
+    void SetDefaultRingingToneL( const RMessage2& aMessage );
+
+    // Playback control
+    
+    /**
+    * Play audio ring tone. 
+    * @return True if the client message should not be completed.
+    * @param aMessage Message from Client.
+    */
+    TBool PlayAudioRingTone( const RMessage2& aMessage );
+
+    /**
+    * Play TTS tone simultaneously with Personal or Default tones.
+    * This method does not command phone to play TTS immediately. Instead 
+    * it registers a request to play TTS, when Personal or default tones 
+    * are played.
+    * @param aMessage Message from Client.
+    */
+    void PlayTtsTone( const RMessage2& aMessage );
+
+    /**
+    * Play default tone.
+    * @param aMessage Message from Client.
+    */
+    void PlayDefaultTone( const RMessage2& aMessage );
+
+    /**
+    * Play backup tone.
+    * @param aMessage Message from Client.
+    */
+    void PlayBackupTone( const RMessage2& aMessage );
+
+    /**
+    * Play silent tone. No_sound.wav will be played. If vibration alert
+    * is ON, it will vibrate.
+    */
+    void PlaySilentTone();
+
+    /**
+    * Playing the Beep once.
+    * @param aMessage Message from Client.
+    */
+    void BeepOnce( const RMessage2& aMessage );
+
+    /**
+    * Play unsecure VoIP tone.
+    * Play tone if secure call fails and call is changed to unsecure call.
+    */
+    void PlayUnsecureVoIPTone();
+
+    /**
+    * Mutes ringing tone.
+    */
+    void MuteRingingTone();
+
+    /**
+    * Stops playing the ringing tone.
+    * Method does not do anything if ringing tone is not playing.
+    */
+    void StopPlaying();
+
+private:
+
+    /**
+    * Runs server.
+    */
+    static void RunServerL();
+
+private:
+    // File server connection
+    RFs iFs;
+
+    // Number of active sessions
+    TInt iSessionCount;
+
+    // Player active object
+    CPhoneRingingToneSrvPlayerAO* iPlayer;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/phoneringingtonesrv.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* 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"
+* 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:  Phone ringing tone server enumerations.
+*
+*/
+
+
+#ifndef __PHONERINGINGTONESRV_HRH
+#define __PHONERINGINGTONESRV_HRH
+
+// ENUMERATIONS
+enum TRingingToneSrvOpcodes
+    {
+    ESetExtendedSecurityNeeded,
+    ESetToneFileSizeLimit,
+    ESetAudioRingingTone,
+    ESetDefaultRingingTone,
+
+    EPlayAudioRingTone,
+    EPlayTtsTone,
+    EPlayDefaultTone,
+    EPlayBackupTone,
+    EPlaySilentTone,
+    EBeepOnce,
+    EPlayUnsecureVoIPTone,
+
+    EMuteRingingTone,
+    EStopPlaying
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/phoneringingtonesrvplayerao.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,514 @@
+/*
+* 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Active object which implements ringing tone functionality
+*
+*/
+
+
+#ifndef __PHONERINGINGTONESRVPLAYERAO_H
+#define __PHONERINGINGTONESRVPLAYERAO_H
+
+// INCLUDES
+#include <e32base.h>
+#include <Profile.hrh>
+
+#include "mphoneaudioplayerobserver.h"
+#include "mphonetimer.h"
+#include "cphoneaudioplayer.h"
+
+// FORWARD DECLARATIONS
+class RFs;
+class CPhoneTimer;
+class CMdaServer;
+class CPhoneRingingTone;
+
+// CLASS DECLARATION
+class CPhoneRingingToneSrvPlayerAO : 
+    public CActive,
+    private MPhoneAudioPlayerObserver,
+    private MPhoneTimer
+    {
+    public:
+        // States for this active object
+        enum TState
+            {
+            EIdleState,
+            EDeletingAudioPlayer
+            };
+
+    public:
+
+        /**
+        * Two-phased constructor.
+        * @return new instance.
+        */
+        static CPhoneRingingToneSrvPlayerAO* NewL( RFs &aFs );
+
+        /**
+        * Destructor.
+        */
+        ~CPhoneRingingToneSrvPlayerAO();
+
+        /**
+        * Play audio ring tone. 
+        * @param aVolume Volume used to play the ringing tone.
+        * @param aRingingType Ringing type.
+        * @param aMessage Message from Client.
+        * @return ETrue if the client message should not be completed.
+        */
+        TBool PlayAudioRingTone( 
+            TInt aVolume, 
+            TProfileRingingType aRingingType,
+            const RMessage2& aMessage );
+
+        /**
+        * Play default tone.
+        * @param aVolume volume used for the playing.
+        * @param aRingingType ringing type.
+        */
+        void PlayDefaultTone( 
+            TInt aVolume, 
+            TProfileRingingType aRingingType );
+
+        /**
+        * Play backup tone.
+        * @param aVolume volume used for the playing.
+        * @param aRingingType ringing type.
+        */
+        void PlayBackupTone( 
+            TInt aVolume, 
+            TProfileRingingType aRingingType );
+
+        /**
+        * Playing the Beep once.
+        * @param aVolume volume used to play the ringing tone.
+        */
+        void BeepOnce( TInt aVolume );
+
+        /**
+        * Play silent tone. No_sound.wav will be played. If vibration alert
+        * is ON, it will vibrate.
+        */
+        void PlaySilentTone();
+
+        /**
+        * Play unsecure VoIP tone.
+        * Play tone if secure call fails and call is changed to unsecure call.
+        */
+        void PlayUnsecureVoIPTone();
+
+        /**
+        * Stops playing the ringing tone.
+        * Method does not do anything if ringing tone is not playing.
+        */
+        void StopPlaying();
+
+        /**
+        * Mutes ringing tone.
+        */
+        void MuteRingingTone();
+
+        /**
+        * Play TTS tone simultaneously with Personal or Default tones.
+        * This method does not command phone to play TTS immediately. Instead 
+        * it registers a request to play TTS, when Personal or default tones 
+        * are played.
+        *
+        * @since Series 60 3.0
+        * @param aTextToSay Text, that should be pronounced by the 
+        * Text-To-Speech engine. This is normal descriptor, no UTF-8 
+        * and no "(tts)" prefix
+        * @param aVolume Volume for the TTS-tone, Does not effect the volume 
+        * of the normal tone, that will be played simulteneously with the TTS
+        * @param aRingingType ringing type.
+        */
+        void PlayTtsTone(
+            const TDesC& aTextToSay,
+            TInt aVolume,
+            TProfileRingingType aRingingType );
+
+        /**
+        * Checks if extended security required.
+        * @since Series 60 3.1
+        * @return ETrue if extended security is required.
+        */
+        TBool ExtendedSecurity() const;
+
+    public:
+        /**
+        * Sets extended security required flag.
+        * @param aNeeded Extended security required.
+        */
+        void SetExtendedSecurityNeeded( TBool aNeeded );
+    
+        /**
+        * Sets extended security required flag.
+        * @param aLimit Extended security required.
+        */
+        void SetToneFileSizeLimit( TInt aLimit );
+    
+        /**
+        * Sets default ringing tone.
+        * @param aFilename Ringing tone.
+        */
+        void SetDefaultRingingToneL( const TDesC& aFilename );
+    
+        /**
+        * Sets ringing tone.
+        * @param aFilename Ringing tone.
+        */
+        void SetRingingToneL( const TDesC& aFilename );
+
+    private:
+
+        /**
+        * Handle the error of audio file player.
+        * @param aEvent The error event happend in initializing or playing.
+        * @param aError The error code return by audio server. Observer can 
+        *               handle  these two error code for recoverable 
+        *               and unrecoverable errors.
+        * @param aId Indicate which audio player is out of working.
+        */
+        virtual void HandleAudioPlayerError( 
+            TPhoneAudioPlayerErrorEvent aEvent, 
+            TInt aError, 
+            TInt aId = KPhoneAudioPlayerNotSpecified );
+
+        /**
+        * Handle audio player initialize complete.
+        * @param aId Indicate which audio player is out of working.
+        */
+        virtual void HandleAudioPlayerInitComplete(
+            TInt aId = KPhoneAudioPlayerNotSpecified );
+
+        /**
+        * Handle audio file playing complete successfully.
+        * @param aId Indicate which audio player is out of working.
+        */
+        virtual void HandlePlayingComplete( 
+            TInt aId = KPhoneAudioPlayerNotSpecified );
+
+        /**
+        * @see MPhoneTimer
+        */
+        virtual void HandleTimeOutL();
+
+        /** 
+        * Enumerates identifiers for each player:
+        * EPlayerAudio - audio
+        * EPlayerBeepOnce - beep once
+        * EPlayerSilent - silent
+        * EPlayerUnsecureVoIP - unsecure VoIP
+        * EPlayerDefault - default
+        * EPlayerBackup - backup
+        *
+        * EPlayerFirst and EPlayerLast are alias
+        * to other identifiers.
+        * EPlayerFirst - first player
+        * EPlayerLast - last player
+        */
+        enum TPlayerId
+            {
+            EPlayerFirst,
+            EPlayerAudio = EPlayerFirst,
+            EPlayerBeepOnce,
+            EPlayerSilent,
+            EPlayerUnsecureVoIP,
+            EPlayerDefault,
+            EPlayerBackup,
+            EPlayerTts, 
+            EPlayerLast = EPlayerTts,
+            EPlayerCount
+            };
+
+        /**
+        * Enumerates how many times TTs is played
+        * ESaidOnce -once
+        * ESaidTwice twice 
+        */
+        enum TTtsStatus
+            {
+            ESaidOnce,
+            ESaidTwice
+            };
+
+        /**
+        * C++ default constructor.
+        */
+        CPhoneRingingToneSrvPlayerAO( RFs& aFs );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+
+        /**
+        * Do construct tone.
+        * @param aRingingTone Ringing tone.
+        * @param aId Indicates the audio player.
+        * @return The instance of the player. NULL is returned if it's failed.
+        */
+        CPhoneAudioPlayer* ConstructTonePlayer( 
+            const CPhoneRingingTone& aRingingTone,
+            TInt aId );
+
+        /**
+        * Handle audio player error.
+        * @param aDelete ETrue if deletion of the player allowed, 
+        *                EFalse otherwise.
+        * @param aSync ETrue if synchronous deletion of players is allowed,
+        *              EFalse otherwise.
+        */
+        void DoHandlePlayerError(
+            TBool aDelete,
+            TBool aSync );
+
+        /**
+        * Convert ringing type from PhoneAppEnging to the ringing type in 
+        * CPhoneAudioPlayer.
+        * @param aRingingType the ringing type form PhoneAppEngine.
+        * @return ringing type of CPhoneAudioPlayer.
+        */
+        CPhoneAudioPlayer::TRingingType ConvertRingingType(
+            TProfileRingingType aRingingType );
+
+        /**
+        * Construct media server and backup tone player.
+        */
+        TInt ConstructPlayers();
+
+        /**
+        * Construct media server and backup tone player.
+        */
+        void ConstructPlayersL();
+
+        /**
+        * Construct sequence players.
+        * @param aPlayer player to be constructed.
+        */
+        void ConstructSequencePlayer(
+            TPlayerId aPlayer );
+
+        /**
+        * Construct sequence players.
+        * @param aPlayer player to be constructed.
+        */
+        void ConstructSequencePlayerL(
+            TPlayerId aPlayer );
+
+        /**
+        * Cleanup players.
+        */
+        void CleanupPlayers();
+
+        /**
+        * Deletes player asynchronoysly.
+        * @param aPlayer player to be deleted.
+        */
+        void DeletePlayerAsync(
+            TPlayerId aPlayer );
+
+        /**
+        * @see CActive::RunL.
+        */
+        void RunL();
+
+        /**
+        * @see CActive::DoCancel.
+        */
+        void DoCancel();
+
+        /**
+        * Wrapper of DoHandleTtsDelayTimeout, that can be used as TCallback. 
+        * Immediately passes control to DoHandleTtsDelayTimeout method.
+        * @since Series 60 3.0
+        * @param aObject Object to call DoHandleTtsDelayTimeout() on, 
+        *        instance of CPhoneRingingTonePlayer.
+        * @return KErrNone.
+        */
+        static TInt HandleTtsDelayTimeout( TAny* aObject );
+
+        /**
+        * It is called after TTS delay elapsed. Starts playing TTS.
+        */
+        void DoHandleTtsDelayTimeout();
+
+        /**
+        * Checks if TTS component should be played for the current ringtone 
+        * playback and initializes the TTS playback. This method is to be 
+        * called from within PlayXXXXTone methods
+        * @since Series 60 3.0
+        * @param aRingingType ringing type
+        */
+        void AddTtsPlaybackIfNeeded( TProfileRingingType aRingingType );
+
+        /**
+        * Returns currently active player which is used wit TTS player.
+        * @return pointer to CPhoneAudioPlayer.
+        */
+        CPhoneAudioPlayer* GetCurrentlyActiveAudioPlayerWithTTs(); 
+
+        /**
+        * TTs cases only. Calculates new volume and ramptimes
+        * for Ascending TTS ringing case and normal TTS ringing case.
+        * @param aStatus -status of TTs player.
+        */ 
+        void SolveNewVolumeAndRamptime( TTtsStatus aStatus ); 
+
+        /**
+        * Retarts currently active ringingtone player.
+        */
+        void ReStartRingingTonePlayer();
+
+         /**
+         * Checks if ringing tone file's size is larger than the size limit.
+         * If size limit is exceeded, default tone is played instead.
+         * @since 3.1
+         * @param aRingingTone  Tone to check.
+         * @return EFalse if the limit was exceeded and thus default tone played.
+         *         ETrue  if tone file's size was valid and the checked tone 
+         *                can be played.
+         */
+        TBool CheckAndHandleToneSizeLimit( CPhoneRingingTone* aRingingTone );
+
+         /**
+         * Checks if ringing tone file's size is larger than the size limit.
+         * @since 3.1
+         * @param aFile   File to check.
+         *        aSizeLimitKB  the size limit in kB is set to this variable.
+         * @return KErrNone        if the file can be used as a ringing tone.
+         *         KErrTooBig        if the file size limit is exceeded.
+         *         Other error value if error happened during size checking.
+         */
+        TInt CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB );
+
+        /**
+        * Returns currently active audio player.
+        * @return Currently active audio player or NULL if none active.
+        */
+        CPhoneAudioPlayer* ActiveAudioPlayer();
+
+    private:    // Data
+        // Handle to file server
+        RFs &iFs;
+
+        // Audio ring tone player. Memory allocated during construction.
+        // After constructed, no leave may be caused during audio playing
+        CPhoneAudioPlayer* iAudioPlayer;
+
+        // Audio player for beep once.
+        CPhoneAudioPlayer* iBeepOncePlayer;
+
+        // Audio player for silent tone.
+        CPhoneAudioPlayer* iSilentPlayer;
+
+        // Audio player for unsecure VoIP tone.
+        CPhoneAudioPlayer* iUnsecureVoIPTonePlayer;
+
+        // Default player.
+        CPhoneAudioPlayer* iDefaultPlayer;
+
+        // Tts player.
+        CPhoneAudioPlayer* iTtsPlayer;
+
+        // Backup ringing tone. Incase all default player failed.
+        CPhoneAudioPlayer* iBackupPlayer;
+
+        // Default ringing tone
+        CPhoneRingingTone* iDefaultRingingTone;
+
+        // Media server.
+        CMdaServer* iMdaServer;
+
+        // Indicate which tone is playing or need to be played:
+        // EIdle - idle,
+        // EAudioTonePlaying - audio playing,
+        // EBeepOnce - beep once playing,
+        // ESilentTonePlaying - silent tone playing,
+        // EDefaultTonePlaying - default tone playing,
+        // EBackupTonePlaying - backup tone playing,
+        enum TTonePlayingStatus
+            {
+            EIdle,
+            EAudioTonePlaying,
+            EBeepOnce,
+            ESilentTonePlaying,
+            EUnsecureVoIPTonePlaying,
+            EDefaultTonePlaying,
+            EBackupTonePlaying
+            };
+
+        // Current playing status.
+        TTonePlayingStatus iTonePlayingStatus;
+
+        // True if Tts is currently playing. Is different from 
+        // iTonePlayingStatus, because TTS is played in
+        // parallel with the other tone types
+        TBool iTtsTonePlaying;
+
+        // Index of the TTS delay that is "executed" currently or is to be 
+        // "executed" after the current playing of the TTS tone. Is zero based
+        TInt iTtsDelayIndex;
+
+        // True if TTS tone should be played when the next playing of the 
+        // default or personal tone is fired.
+        TBool iTtsToneToBePlayed;
+
+        // Normal ringing tone
+        CPhoneRingingTone* iAudioVideoRingingTone;
+
+        // Volume for backup tone playing.
+        TInt iVolume;
+
+        // Volume of the text pronounced by the TTS engine
+        TInt iTtsVolume;
+
+        // Ringing type for backup tone playing.
+        TProfileRingingType iRingingType;
+
+        // Timer.
+        CPhoneTimer* iTimer;
+
+        // Timer, that tracks delays before playing TTS
+        CPhoneTimer* iTtsDelayTimer;
+
+        // Number of times TTS tone should be played for the CURRENT ringtone
+        // If ringing tone is to be played just once, iTtsDelayCount == 1,
+        // otherwise iTtsDelayCount == KTtsDelayCount
+        TInt iTtsDelaysCount;
+
+        // Player to be deleted asynchronously.
+        RPointerArray<CPhoneAudioPlayer> iAsyncDeletePlayers;
+
+        // DRM extend security
+        TBool iExtSecNeeded;
+
+        // State of this active object
+        TState iState;
+
+        // RingingType for TtsPlayer only.
+        TProfileRingingType iTtsRingingType;
+
+        // Counter for TTs timeouts
+        TInt iTTsTimeOutCounter;
+
+        // Voice call ringing tone file size max value.
+        TInt iToneFileSizeLimitKB; 
+
+        // Client message.
+        RMessage2 iClientMessage;
+
+    };
+
+#endif //__PHONERINGINGTONESRVPLAYERAO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/phoneringingtonesrvsession.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* 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"
+* 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:  Session class for phone ringingtone server.
+*
+*/
+
+
+#ifndef __PHONERINGINGTONESRVSESSION_H
+#define __PHONERINGINGTONESRVSESSION_H
+
+// FORWARD DECLARATIONS
+class MPhoneRingingToneServer;
+
+// CLASS DECLARATION
+class CPhoneRingingToneServerSession : public CSession2
+    {
+public:
+    /**
+    * Two-phased constructor.
+    * @param aServer It is the main server object.
+    * @return new instance.
+    */
+    static CPhoneRingingToneServerSession* NewL( MPhoneRingingToneServer& aServer );
+
+    /**
+    * Destructor.
+    */
+    ~CPhoneRingingToneServerSession();
+
+protected:
+    /**
+    * C++ default constructor.
+    */
+    CPhoneRingingToneServerSession( MPhoneRingingToneServer& aServer );
+    
+    /**
+    * Symbian 2nd phase constructor.
+    */
+    void ConstructL();
+
+    /**
+    * From CSession2, it is called whenever request is processed.
+    * @param aMessage It is the request.
+    */
+    void ServiceL( const RMessage2& aMessage );
+
+private:
+    // Server.
+    MPhoneRingingToneServer& iServer;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/inc/phoneuiviewtrace.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* ============================================================================
+*  Name        : phoneuiviewtrace.h
+*  Part of     : PhoneUI / PhoneUIView
+*  Description : Macros for tracing.
+*  Version     : 
+*
+*  Copyright © 2010 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1
+*/
+
+
+#ifndef PHONEUIVIEWTRACE_H
+#define PHONEUIVIEWTRACE_H
+
+//#define __RINGINGTONE_LOGGING
+#ifdef __RINGINGTONE_LOGGING
+
+// INCLUDES
+#include <e32svr.h>
+
+// CONSTANTS
+
+const TInt KPhoneUiViewDebugBufferSize = 100;
+
+// MACROS
+
+typedef TBuf<KPhoneUiViewDebugBufferSize> TPhoneUiViewDebBuf;
+
+#define PHONEUIVIEW_PRINT(x) { _LIT( KPhoneUiViewDebugPrintPrefix, "PhoneUiView: ");\
+    TPhoneUiViewDebBuf buf( KPhoneUiViewDebugPrintPrefix);\
+    if ((_L(x).Length()) + buf.Length() <= KPhoneUiViewDebugBufferSize )\
+        buf.Append(_L(x)); RDebug::Print(buf); }
+
+#define PHONEUIVIEW_PRINTF(x,y) { _LIT( KPhoneUiViewDebugPrintPrefix, "PhoneUiView: ");\
+    TPhoneUiViewDebBuf buf( KPhoneUiViewDebugPrintPrefix);\
+    if ((_L(x).Length()) + buf.Length() <= KPhoneUiViewDebugBufferSize )\
+        buf.Append(_L(x)); RDebug::Print(buf,y);}
+
+#define PHONEUIVIEW_PRINTF2(x,y,z) { _LIT( KPhoneUiViewDebugPrintPrefix, "PhoneUiView: ");\
+    TPhoneUiViewDebBuf buf( KPhoneUiViewDebugPrintPrefix);\
+    if ((_L(x).Length()) + buf.Length() <= KPhoneUiViewDebugBufferSize )\
+        buf.Append(_L(x)); RDebug::Print(buf,y,z); }
+
+#define PHONEUIVIEW_PRINTF3(v,x,y,z) { _LIT( KPhoneUiViewDebugPrintPrefix, "PhoneUiView: ");\
+    TPhoneUiViewDebBuf buf( KPhoneUiViewDebugPrintPrefix);\
+    if ((_L(v).Length()) + buf.Length() <= KPhoneUiViewDebugBufferSize )\
+        buf.Append(_L(v)); RDebug::Print(buf,x,y,z); }
+
+#else // !_DEBUG
+
+#define PHONEUIVIEW_PRINT(x)
+#define PHONEUIVIEW_PRINTF(x,y)
+#define PHONEUIVIEW_PRINTF2(x,y,z)
+#define PHONEUIVIEW_PRINTF3(v,x,y,z)
+
+#endif      // _DEBUG
+
+#endif      // PHONEUIVIEWTRACE_H
+
+// End of File
--- a/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -137,11 +137,8 @@
     EPhoneViewSendMessage,
     EPhoneViewSetBlockingDialogStatus,
     EPhoneViewSetPhoneNumberAvailableInPhoneEngine,
-    EPhoneViewSetSecurityMode,
-    EPhoneViewGetSecurityModeStatus,
     EPhoneViewSetStatusPaneVisible, // 110
     EPhoneViewEnableKeyLock,
-    EPhoneViewEnableKeyLockWithoutNote,
     EPhoneViewLaunchFaxModem,
     EPhoneViewUpdateFSW,
     EPhoneViewIsQuery,
@@ -160,7 +157,7 @@
     EPhoneViewGetIsConferenceInSelectionMode,
     EPhoneViewIsStraightCallToVideoMailBox,
     EPhoneViewSetDtmfDialerViewVisible, // 130
-    EPhoneViewSetRetrictedDialer, 
+    EPhoneViewSetRestrictedDialer, 
     EPhoneViewIsConferenceInExpandedMode,
     EPhoneViewIsMenuBarVisible,
     EPhoneViewGetBlockingDialogStatus,
@@ -197,8 +194,6 @@
     EPhoneViewSetEikonNotifiersDisabled, 
     EPhoneViewCancelAllNotications, 
     EPhoneViewSetVideoCallDTMFVisibilityFlag,
-    EPhoneViewIsKeyLockEnabled,
-    EPhoneViewDisableKeyLock,
     EPhoneViewLoadPlugins, // 170
     EPhoneViewOpenVirtualKeyBoard,
     EPhoneViewUpdateNoteSoftkeys,
@@ -227,7 +222,18 @@
     EPhoneViewSetToolbarDimming,
 	EPhoneViewEnableToolbarButton,
 	EPhoneViewHideToolbar,
-	EPhoneViewShowToolbar,
+	EPhoneViewShowToolbar,    
+    EPhoneViewGetEasyDialingInFocusStatus,
+    EPhoneViewSetInvalidCsPhoneNumberFlag,
+    EPhoneViewGetInvalidCsPhoneNumberFlag,
+    EPhoneViewGetEasyDialingMenuId,
+    EPhoneViewGetEasyDialingCbaId,
+    EPhoneViewGetNeedToReturnToForegroundAppStatus,
+    EPhoneViewSetNeedToReturnToForegroundAppStatus,
+    EPhoneViewSetConferenceAndWaitingVideo,
+    EPhoneViewLaunchMultimediaSharing,
+    EPhoneViewGetQwertyModeObserver,
+
     EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list.
 };
 
--- a/phoneapp/phoneuiview/src/cphoneaudioplayer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphoneaudioplayer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -30,7 +30,7 @@
 #include "cphoneringingtone.h"
 #include "mphoneaudioplayerobserver.h"
 #include "phoneconstants.h"
-#include "phonelogger.h"
+#include "phoneuiviewtrace.h"
 #include "phoneui.pan"
 
 
@@ -69,7 +69,7 @@
     const TDesC& aFileName,
     CMdaServer* aMdaServer )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::ConstructL()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ConstructL() <" );
     if ( iFormat == EFormatTone )
         {
         iTonePlayer = CMdaAudioToneUtility::NewL( *this, aMdaServer );
@@ -79,9 +79,7 @@
     else
         {
         //audio sample player
-        __PHONELOG3( 
-            EBasic, 
-            EPhoneUIView, 
+        PHONEUIVIEW_PRINTF3(
             "CPhoneAudioPlayer::ConstructL - aFileName(%S), iPriority(%d), iPreference(%d)",
             &aFileName, 
             iPriority, 
@@ -92,10 +90,11 @@
             *this, 
             iPriority,
             static_cast< TMdaPriorityPreference >( iPreference ),
-            aMdaServer );            
+            aMdaServer );
         iPlayerStatus = EToneLoading;
-        
+
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ConstructL() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -106,11 +105,12 @@
     const TDesC8& aSequence,
         CMdaServer* aMdaServer )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::ConstructSeqL()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ConstructSeqL() <" );
     iTonePlayer = CMdaAudioToneUtility::NewL( *this, aMdaServer );
     iSequence = aSequence.AllocL();
     iTonePlayer->PrepareToPlayDesSequence( *iSequence );
     iPlayerStatus = EToneLoading;
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ConstructSeqL() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -122,19 +122,19 @@
     TInt aPriority,
     TUint aPreference )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::ConstructTtsL()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ConstructTtsL() <" );
     delete iTtsPlayer; // if any
     iTtsPlayer = NULL;
     iTtsPlayer = 
         CMdaAudioPlayerUtility::NewL( 
             *this, aPriority, 
             static_cast< TMdaPriorityPreference >( aPreference ) );
-    
+
     delete iTtsText;  // if any
     iTtsText = NULL;
     // UTF-8 strings can take up to 4 bytes per character
     iTtsText = HBufC8::NewL( aTtsText.Length() << KTimesToMultiply ); 
-    
+
     TPtr8 refText = iTtsText->Des(); 
     User::LeaveIfError( 
         CnvUtfConverter::ConvertFromUnicodeToUtf8( refText, aTtsText ) );
@@ -148,8 +148,9 @@
         // ReAlloc failed, set back to original.
         iTtsText = oldText;
         }
-    
+
     iTtsPlayer->OpenDesL( *iTtsText );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ConstructTtsL() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -165,7 +166,7 @@
     CMdaServer* aMdaServer,
     TBool aExtSecNeeded )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::New()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::New() <" );
     CPhoneAudioPlayer* self = NULL;
     TRAPD( err, self = CPhoneAudioPlayer::NewL( 
         aRingingTone,
@@ -179,6 +180,7 @@
         {
         return NULL;
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::New() >" );
     return self;
     }
 
@@ -195,23 +197,23 @@
     CMdaServer* aMdaServer,
     TBool aExtSecNeeded )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::NewL()" );
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneAudioPlayer::NewL - aExtSecNeeded(%d)",
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewL() <" );
+    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::NewL - aExtSecNeeded(%d)",
         aExtSecNeeded );
-    
+
     // Check the file DRM property if extend secure is needed.
     if ( aExtSecNeeded )
         {
         if ( !aRingingTone.IsFileInRom() &&
              !aRingingTone.IsFileDrmProtected() )
             {
-            __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::NewL - DRM extend security check permission denied" );
+            PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewL - DRM extend security check permission denied" );
             User::Leave( KErrPermissionDenied );
             }
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::NewL - DRM extend security check ok" );
+        PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewL - DRM extend security check ok" );
         }
-	// RNG file types have to be played with CMdaAudioToneUtility player.
-	// Otherwise use sample player
+    // RNG file types have to be played with CMdaAudioToneUtility player.
+    // Otherwise use sample player
     TAudioDataFormat format = 
     ( aRingingTone.MimeType().CompareF( KFileListRngMimeType ) == KErrNone ) 
     ? EFormatTone :EFormatSample;
@@ -223,11 +225,11 @@
             aPriority,
             aPreference,
             aId );
-    
+
     CleanupStack::PushL( self );
     self->ConstructL( aRingingTone.FileName(), aMdaServer );
     CleanupStack::Pop( self );
-
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewL() >" );
     return self;
     }
 
@@ -244,7 +246,7 @@
     CMdaServer* aMdaServer,
     TBool aExtSecNeeded )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::NewL()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewL() <" );
     CPhoneRingingTone* tone = CPhoneRingingTone::NewL( aFileName );
     CleanupStack::PushL( tone );
 
@@ -257,8 +259,8 @@
                                                          aExtSecNeeded );
 
     CleanupStack::PopAndDestroy( tone );
-    
-    return player;        
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewL() >");
+    return player;
     }
 
 // -----------------------------------------------------------------------------
@@ -273,7 +275,7 @@
     TInt aId,
     CMdaServer* aMdaServer )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::NewSeqL()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewSeqL() <" );
     CPhoneAudioPlayer* self = 
         new (ELeave) CPhoneAudioPlayer( 
             EFormatTone, 
@@ -281,11 +283,12 @@
             aPriority,
             aPreference,
             aId );
-    
+
     CleanupStack::PushL( self );
     self->ConstructSeqL( aSequence, aMdaServer  );
     CleanupStack::Pop( self );
 
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewSeqL() >" );
     return self;
     }
 
@@ -300,7 +303,7 @@
     MPhoneAudioPlayerObserver& aObserver, 
     TInt aId )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::NewTtsL()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewTtsL() <" );
     CPhoneAudioPlayer* self = 
         new (ELeave) CPhoneAudioPlayer( 
             EFormatTts, 
@@ -308,11 +311,11 @@
             aPriority,
             aPreference,
             aId );
-    
+
     CleanupStack::PushL( self );
     self->ConstructTtsL( aText, aPriority, aPreference );
     CleanupStack::Pop( self );
-
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::NewTtsL() >" );
     return self;
     }
 
@@ -322,14 +325,14 @@
 //
 CPhoneAudioPlayer::~CPhoneAudioPlayer()
     {
-    
+
     if ( iAudioOutput )
         {
-    	delete iAudioOutput;    
-        }  
-    if ( iTonePlayer )  
+        delete iAudioOutput;
+        }
+    if ( iTonePlayer )
         {
-        delete iTonePlayer;  
+        delete iTonePlayer;
         } 
     if ( i3DPlugin )
        {
@@ -338,22 +341,22 @@
         }
     // ECom cleanup
     REComSession::FinalClose();
-    if ( iSamplePlayer )    
+    if ( iSamplePlayer )
         {
         delete iSamplePlayer; 
         }
     if ( iTtsPlayer )
         {
-        delete iTtsPlayer;   
+        delete iTtsPlayer; 
         }
     if ( iSequence )
         {
         delete iSequence; 
         }
-    if ( iTtsText )  
+    if ( iTtsText )
         {
         delete iTtsText;
-        }   
+        } 
     }
 
 // -----------------------------------------------------------------------------
@@ -362,16 +365,12 @@
 //
 void CPhoneAudioPlayer::Play( TRingingType aRingType, TInt aVolume, TInt aTTsToBePlayed )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::Play()" );
-    __PHONELOG2( 
-        EBasic, 
-        EPhoneUIView, 
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::Play() <" );
+    PHONEUIVIEW_PRINTF2( 
         "CPhoneAudioPlayer::Play - iFormat(%d), iPlayerStatus(%d)",
         iFormat, 
         iPlayerStatus );
-    __PHONELOG3( 
-        EBasic, 
-        EPhoneUIView, 
+    PHONEUIVIEW_PRINTF3( 
         "CPhoneAudioPlayer::Play - aRingType(%d), aVolume(%d), aTTsToBePlayed(%d)",
         aRingType, 
         aVolume,
@@ -379,7 +378,7 @@
     iRingType = aRingType;
     iVolume = aVolume;
     iTTsToBePlayed = aTTsToBePlayed;
-    
+
     if ( iFormat == EFormatTone )
         {
         switch ( iPlayerStatus )
@@ -400,8 +399,7 @@
 
             default:
                 __ASSERT_DEBUG( EFalse, 
-
-                      Panic( EPhoneViewCaseNotHandled ) );
+                       Panic( EPhoneViewCaseNotHandled ) );
             }
         }
     else if ( iFormat == EFormatTts )
@@ -450,27 +448,25 @@
 
             default:
                 __ASSERT_DEBUG( EFalse, 
-
                         Panic( EPhoneViewCaseNotHandled ) );
             }
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::Play() >" );
     }
-    
+
 // -----------------------------------------------------------------------------
 // CPhoneAudioPlayer::ReStartPlaying
 // -----------------------------------------------------------------------------
-//    
+//
 void CPhoneAudioPlayer::ReStartPlaying()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::ReStartPlaying()" );
-    __PHONELOG3( 
-        EBasic, 
-        EPhoneUIView, 
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ReStartPlaying() <" );
+    PHONEUIVIEW_PRINTF3( 
         "CPhoneAudioPlayer::ReStartPlaying - iFormat(%d), iRingType(%d), iVolume(%d)",
         iFormat, 
         iRingType, 
         iVolume );
-        
+
     if ( iFormat == EFormatTone )
         {
         iTonePlayer->Play();
@@ -480,12 +476,13 @@
         {
         iTtsPlayer->Play();
         iPlayerStatus = ETonePlaying;
-        }        
+        }
     else
         {
         iSamplePlayer->Play();
         iPlayerStatus = ETonePlaying;
-        }    
+        }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::ReStartPlaying() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -494,9 +491,10 @@
 //
 void CPhoneAudioPlayer::StopPlaying()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::StopPlaying()" );
+   PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::StopPlaying() <" );
+
     iToBePlaying = EFalse;
-    
+
     if ( iFormat == EFormatTone )
         {
         if ( EMdaAudioToneUtilityPrepared == iTonePlayer->State() )
@@ -522,11 +520,12 @@
             }
         else
             {
-            iSamplePlayer->Stop();        
+            iSamplePlayer->Stop();
             }
         }
-    
+
     iPlayerStatus = EToneReady;
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::StopPlaying() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -537,8 +536,8 @@
     TInt aError, 
     const TTimeIntervalMicroSeconds& /*aDuration*/ )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::MapcInitComplete()" );
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneAudioPlayer::MapcInitComplete - aError(%d)",
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MapcInitComplete() <" );
+    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::MapcInitComplete - aError(%d)",
         aError );
     __ASSERT_DEBUG( ( ( iFormat == EFormatSample ) || ( iFormat == EFormatTts ) ) && 
         ( iPlayerStatus == EToneLoading ), Panic( EPhoneViewGeneralError ) );
@@ -562,6 +561,7 @@
             MPhoneAudioPlayerObserver::EAudioPlayerInitializingFailure, 
             aError, iId );
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MapcInitComplete() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -570,8 +570,8 @@
 //
 void CPhoneAudioPlayer::MapcPlayComplete( TInt aError )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::MapcPlayComplete()" );
-    __PHONELOG2( EBasic, EPhoneUIView, "CPhoneAudioPlayer::MapcPlayComplete - iFormat(%d), aError(%d)",
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MapcPlayComplete() <" );
+    PHONEUIVIEW_PRINTF2( "CPhoneAudioPlayer::MapcPlayComplete - iFormat(%d), aError(%d)",
         iFormat, aError );
     iPlayerStatus = EToneReady;
 
@@ -582,7 +582,7 @@
         {
         i3DPlugin->Stop();
         delete i3DPlugin;
-        i3DPlugin = NULL;            
+        i3DPlugin = NULL;
         }
 
     if ( aError != KErrNone )
@@ -595,6 +595,7 @@
         {
         iObserver.HandlePlayingComplete( iId );
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MapcPlayComplete() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -603,11 +604,11 @@
 //
 void CPhoneAudioPlayer::MatoPrepareComplete( TInt aError )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::MatoPrepareComplete()" );
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneAudioPlayer::MatoPrepareComplete - aError(%d)",
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MatoPrepareComplete() <" );
+    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::MatoPrepareComplete - aError(%d)",
         aError );
-        
-	__ASSERT_DEBUG( ( iFormat == EFormatTone ) && ( iPlayerStatus == EToneLoading ), 
+
+    __ASSERT_DEBUG( ( iFormat == EFormatTone ) && ( iPlayerStatus == EToneLoading ), 
         Panic( EPhoneViewGeneralError ) );
     if ( aError == KErrNone )
         {
@@ -629,6 +630,7 @@
             MPhoneAudioPlayerObserver::EAudioPlayerInitializingFailure, 
             aError, iId );
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MatoPrepareComplete() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -637,8 +639,8 @@
 //
 void CPhoneAudioPlayer::MatoPlayComplete(TInt aError)
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::MatoPlayComplete()" );
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneAudioPlayer::MatoPlayComplete - aError(%d)",
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MatoPlayComplete() <" );
+    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::MatoPlayComplete - aError(%d)",
         aError );
     if ( aError != KErrNone )
         {
@@ -650,6 +652,7 @@
         {
         iObserver.HandlePlayingComplete( iId );
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::MatoPlayComplete() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -658,12 +661,12 @@
 //
 void CPhoneAudioPlayer::DoPlay()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::DoPlay()" );
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::DoPlay() <" );
     __ASSERT_DEBUG( iPlayerStatus == ETonePlaying, 
         Panic( EPhoneViewGeneralError ) );
-        
+
     SetRingingTypeProperties();
-    
+
     TInt err(KErrNone);
     if ( iFormat == EFormatTone )
         {
@@ -672,7 +675,7 @@
     else if ( iFormat == EFormatTts )
         {
         iTtsPlayer->Play();
-        }        
+        }
     else
         {
         TRAP( err,i3DPlugin = C3DRingingToneInterface::NewL( KNullUid ) );
@@ -685,28 +688,27 @@
             {
             if ( !iAudioOutput )
                  {
-                 __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::DoPlay c aud ");
+                 PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::DoPlay c aud ");
                  TRAP (err, iAudioOutput = CAudioOutput::NewL( *iSamplePlayer ) );
                 if ( err )
                     {
-                    __PHONELOG1(EBasic, EPhoneUIView, 
-                        "P.AudPlayer.DoPlay.iAudioOutput.err ", err );
-                    }                      	        
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::DoPlay iAudioOutput.err ", err );
+                    }
                }
             if ( !err && iAudioOutput )
                  {
-                 __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::DoPlay EALL ");
+                 PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::DoPlay EALL ");
                  TRAP (err, iAudioOutput->SetAudioOutputL( CAudioOutput::EAll ) );
                  if ( err )
                      {
-                     __PHONELOG1( EBasic, EPhoneUIView, 
-                         "P.AudPlayer.DoPlay.SetAudioOutputL.err ", err );   
+                     PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::DoPlay SetAudioOutputL.err ", err ); 
                      }
 
                  }
             iSamplePlayer->Play();
             }
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::DoPlay() >" );
     }
 
 // -----------------------------------------------------------------------------
@@ -715,10 +717,10 @@
 //
 void CPhoneAudioPlayer::SetRingingTypeProperties()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::SetRingingTypeProperties()" );
-    __PHONELOG2( EBasic, EPhoneUIView, "CPhoneAudioPlayer::SetRingingTypeProperties - iFormat(%d), iRingType(%d)",
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetRingingTypeProperties() <" );
+    PHONEUIVIEW_PRINTF2( "CPhoneAudioPlayer::SetRingingTypeProperties - iFormat(%d), iRingType(%d)",
         iFormat, iRingType );
-    TInt rampTime( 0 );     
+    TInt rampTime( 0 ); 
     if ( iFormat == EFormatTone )
         {
         switch ( iRingType )
@@ -726,7 +728,7 @@
             case ETypeRinging:
                 //If we have TTS activated and ringingtype is ringing:
                 //We need to play TTS sequence again when ringingtone restarts.
-                //Thats why we need to set ringingtype to ETypeRingingOnce because  
+                //Thats why we need to set ringingtype to ETypeRingingOnce because
                 //it is the only way of knowing when ringingtone is completed. 
                 //Then we can restart it with new TTS iterations.
                 if ( iTTsToBePlayed )
@@ -736,10 +738,7 @@
                         TTimeIntervalMicroSeconds(
                         KPhoneRingingRepeatsTrailPause ) ); 
                     iTonePlayer->SetVolume( ConvertVolume( iVolume ) );
-                    __PHONELOG1( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing tone with TTS, Set volume(%d) and ring once",
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing tone with TTS, Set volume(%d) and ring once",
                         iVolume );
                     }
                 else
@@ -748,10 +747,7 @@
                         TTimeIntervalMicroSeconds( 
                          KPhoneRingingRepeatsTrailPause ) );
                     iTonePlayer->SetVolume( ConvertVolume( iVolume ) );
-                    __PHONELOG1( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing tone, Set volume(%d)",
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing tone, Set volume(%d)",
                         iVolume );
                     }
                 break;
@@ -762,10 +758,7 @@
                     TTimeIntervalMicroSeconds(
                     KPhoneRingingRepeatsTrailPause ) ); 
                 iTonePlayer->SetVolume( ConvertVolume( iVolume ) );
-                __PHONELOG1( 
-                    EBasic, 
-                    EPhoneUIView, 
-                    "CPhoneAudioPlayer::SetRingingTypeProperties - Ring once tone, set volume(%d)",
+                PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ring once tone, set volume(%d)",
                     iVolume );
                 break;
 
@@ -780,10 +773,7 @@
                     {
                     //rampTime in this case is only 3 seconds and volume is 1.
                     rampTime = KPhoneAudioAscendingRampDuration;
-                    __PHONELOG1( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending tone with TTS, Start from lowest volume, rampTime(%d)",
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending tone with TTS, Start from lowest volume, rampTime(%d)",
                         rampTime );
                     iTonePlayer->SetVolumeRamp( 
                         TTimeIntervalMicroSeconds( rampTime ) ); 
@@ -795,16 +785,13 @@
                     {
                     //rampTime: time for one step * volume level
                     rampTime = KPhoneAudioAscendingRampDuration*iVolume;
-                    __PHONELOG2( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending tone, Set volume(%d), rampTime(%d)",
+                    PHONEUIVIEW_PRINTF2( "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending tone, Set volume(%d), rampTime(%d)",
                         iVolume, rampTime );
                     iTonePlayer->SetVolumeRamp( 
                         TTimeIntervalMicroSeconds( rampTime ) );
-                        
+
                     iCurrentVolume = 1; //we start from the lowest volume
-                    iTonePlayer->SetVolume( ConvertVolume( iVolume ) );       
+                    iTonePlayer->SetVolume( ConvertVolume( iVolume ) ); 
                     }
                 break;
 
@@ -813,10 +800,7 @@
                 break;
             }
 
-        __PHONELOG3( 
-            EBasic, 
-            EPhoneUIView, 
-            "CPhoneAudioPlayer::SetRingingTypeProperties - Tone, iPriority(%d), iPreference(%d), iVolume(%d)",
+        PHONEUIVIEW_PRINTF3( "CPhoneAudioPlayer::SetRingingTypeProperties - Tone, iPriority(%d), iPreference(%d), iVolume(%d)",
             iPriority, iPreference, iVolume );
 
         //Set priority and preference
@@ -837,21 +821,15 @@
                     TTimeIntervalMicroSeconds( 
                     KPhoneRingingRepeatsTrailPause ) );
                 iTtsPlayer->SetVolume( ConvertVolume( iVolume ) );
-                __PHONELOG1( 
-                    EBasic, 
-                    EPhoneUIView, 
-                    "CPhoneAudioPlayer::SetRingingTypeProperties - TTS, Set volume(%d)",
+                PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - TTS, Set volume(%d)",
                     iVolume );
                 break;
-            
+
             default:
                 __ASSERT_DEBUG( EFalse, 
                         Panic( EPhoneViewCaseNotHandled ) );
             }
-        __PHONELOG( 
-            EBasic, 
-            EPhoneUIView, 
-            "CPhoneAudioPlayer::SetRingingTypeProperties - TTS" );
+        PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetRingingTypeProperties - TTS" );
         }
     else
         {
@@ -860,7 +838,7 @@
             case ETypeRinging:
                 //If we have TTS activated and ringingtype is ringing:
                 //We need to play TTS sequence again when ringingtone restarts.
-                //Thats why we need to set ringingtype to ETypeRingingOnce because  
+                //Thats why we need to set ringingtype to ETypeRingingOnce because
                 //it is theonly way of knowing when ringingtone is completed. 
                 //Then we can restartit with new TTS iterations.
                 if ( iTTsToBePlayed )
@@ -870,10 +848,7 @@
                         TTimeIntervalMicroSeconds(
                         KPhoneRingingRepeatsTrailPause ) ); 
                     iSamplePlayer->SetVolume( ConvertVolume( iVolume ) );
-                    __PHONELOG1( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing sample with TTS, Ring only once, Set volume(%d)",
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing sample with TTS, Ring only once, Set volume(%d)",
                         iVolume );
                     }
                 else
@@ -882,10 +857,7 @@
                         TTimeIntervalMicroSeconds( 
                         KPhoneRingingRepeatsTrailPause ) );
                     iSamplePlayer->SetVolume( ConvertVolume( iVolume ) );
-                    __PHONELOG1( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing sample, Set volume(%d)",
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ringing sample, Set volume(%d)",
                         iVolume );
                     }
                 break;
@@ -895,10 +867,7 @@
                     TTimeIntervalMicroSeconds( 
                     KPhoneRingingRepeatsTrailPause ) ); 
                 iSamplePlayer->SetVolume( ConvertVolume( iVolume ) );
-                __PHONELOG1( 
-                    EBasic, 
-                    EPhoneUIView, 
-                    "CPhoneAudioPlayer::SetRingingTypeProperties - Ring once sample, set volume(%d)",
+                PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ring once sample, set volume(%d)",
                     iVolume );
                 break;
 
@@ -913,10 +882,7 @@
                     {
                     //rampTime in this case is only 3 seconds and volume is 1.
                     rampTime = KPhoneAudioAscendingRampDuration;
-                    __PHONELOG1( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending sample with TTS, Start from lowest volume, rampTime(%d)",
+                    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending sample with TTS, Start from lowest volume, rampTime(%d)",
                         rampTime );
                     iSamplePlayer->SetVolumeRamp( 
                         TTimeIntervalMicroSeconds( rampTime ) ); 
@@ -928,14 +894,11 @@
                     {
                     //rampTime: time for one step * volume level
                     rampTime = KPhoneAudioAscendingRampDuration*iVolume;
-                    __PHONELOG2( 
-                        EBasic, 
-                        EPhoneUIView, 
-                        "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending sample, Set volume(%d), rampTime(%d)",
+                    PHONEUIVIEW_PRINTF2( "CPhoneAudioPlayer::SetRingingTypeProperties - Ascending sample, Set volume(%d), rampTime(%d)",
                         iVolume, rampTime );
                     iSamplePlayer->SetVolumeRamp( 
                         TTimeIntervalMicroSeconds( rampTime ) );
-                        
+
                     iCurrentVolume = 1; //we start from the lowest volume
                     iSamplePlayer->SetVolume( ConvertVolume( iVolume ) );
                     }
@@ -946,119 +909,116 @@
                 break;
             }
 
-        __PHONELOG( 
-            EBasic, 
-            EPhoneUIView, 
-            "CPhoneAudioPlayer::SetRingingTypeProperties - Sample" );
+        PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetRingingTypeProperties - Sample" );
         }
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetRingingTypeProperties() >" );
     }
 
 // -----------------------------------------------------------------------------
 // CPhoneAudioPlayer::SetNewVolumeAndRamptime
 // -----------------------------------------------------------------------------
-//    
+//
 void CPhoneAudioPlayer::SetNewVolumeAndRamptime( TInt aVolume, TInt aRamptime )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioPlayer::SetNewVolumeAndRamptime()" );
-   
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetNewVolumeAndRamptime() <" );
+ 
     //Check that volume is in valid range.
-   TInt volume = aVolume<1 ? 1:aVolume;
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneAudioPlayer::SetNewVolumeAndRamptime - aVolume(%d)",
+    TInt volume = aVolume<1 ? 1:aVolume;
+    PHONEUIVIEW_PRINTF( "CPhoneAudioPlayer::SetNewVolumeAndRamptime - aVolume(%d)",
         aVolume ); 
-            
+
     if ( iFormat == EFormatTone && iTonePlayer )
         {
         iTonePlayer->SetVolumeRamp(TTimeIntervalMicroSeconds( aRamptime ) );
         iTonePlayer->SetVolume( ConvertVolume( volume ) );
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::SetNewVolumeAndRamptime - Tone player" );
+        PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetNewVolumeAndRamptime - Tone player" );
         }
     else if ( iFormat == EFormatTts && iTtsPlayer )
         {
         iTtsPlayer->SetVolumeRamp(TTimeIntervalMicroSeconds( aRamptime ) );
         iTtsPlayer->SetVolume( ConvertVolume( volume ) );
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::SetNewVolumeAndRamptime - TTS player" );
+        PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetNewVolumeAndRamptime - TTS player" );
         }
     else 
         {
         iSamplePlayer->SetVolumeRamp(TTimeIntervalMicroSeconds( aRamptime ) );
         iSamplePlayer->SetVolume( ConvertVolume( volume ) );
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneAudioPlayer::SetNewVolumeAndRamptime - Sample player" );
+        PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetNewVolumeAndRamptime - Sample player" );
         }
-   
+ 
+    PHONEUIVIEW_PRINT( "CPhoneAudioPlayer::SetNewVolumeAndRamptime() >" );
     }
-   
+ 
 
 // -----------------------------------------------------------------------------
 // CPhoneAudioPlayer::ConvertVolume
 // -----------------------------------------------------------------------------
-//  
+//
 TInt CPhoneAudioPlayer::ConvertVolume( TInt aVolume )
     {
-    //_DDPRINT( 5, "P.AudPlayer.ConvertVolume.aVolume", aVolume );
+    TInt result( 0 );
 
-    TInt result( 0 );    
-    
-    if ( iFormat == EFormatTone )
+    if ( iFormat == EFormatTone && iTonePlayer )
         {
         result = iTonePlayer->MaxVolume() * aVolume / KMaxVolumeLevel;
         }
-    else if ( iFormat == EFormatTts )
+    else if ( iFormat == EFormatTts && iTtsPlayer )
         {
-        result = iTtsPlayer->MaxVolume() * aVolume / KMaxVolumeLevel;    
+        result = iTtsPlayer->MaxVolume() * aVolume / KMaxVolumeLevel;
         }
     else
         {
-        result = iSamplePlayer->MaxVolume() * aVolume / KMaxVolumeLevel;       
+        result = iSamplePlayer->MaxVolume() * aVolume / KMaxVolumeLevel; 
         }
-        
-	// if user has selected minimum volume level
-	// set HW volume 1
+
+    // if user has selected minimum volume level
+    // set HW volume 1
     if ( aVolume == KMinVolumeLevel && result == 0 )
         {
         result = 1; 
         }
-       
-    //_DDPRINT( 5, "P.AudPlayer.ConvertVolume.result", result );       
-    return result;    
+ 
+    //_DDPRINT( 5, "P.AudPlayer.ConvertVolume.result", result ); 
+    return result;
     }
 
-       
+ 
 // -----------------------------------------------------------------------------
 // CPhoneAudioPlayer::SetTTsToBePlayed
 // -----------------------------------------------------------------------------
-//  
+//
 void CPhoneAudioPlayer::SetTTsToBePlayed( TBool aTTsToBePlayed )
-	{
-	iTTsToBePlayed = aTTsToBePlayed;
-	}  
+    {
+    iTTsToBePlayed = aTTsToBePlayed;
+    }
 
 // -----------------------------------------------------------------------------
 // CPhoneAudioPlayer::MutePlaying
 // -----------------------------------------------------------------------------
-//	
+//
 void CPhoneAudioPlayer::MutePlaying()
     {
     //_DPRINT( 5, "P.Aud.Mute" );
     if ( iPlayerStatus == ETonePlaying )
         {
-        if ( iFormat == EFormatTone )
+        if ( iFormat == EFormatTone && iTonePlayer )
             {
             iTonePlayer->SetVolume(0);
             }
-        else if ( iFormat == EFormatTts )
+        else if ( iFormat == EFormatTts && iTtsPlayer )
             {
             iTtsPlayer->SetVolume(0);
             }
         else // EFormatSample
             {
-            iSamplePlayer->SetVolume(0);        
+            iSamplePlayer->SetVolume(0);
             }
         }
     else
         {
         // Mute called during EToneLoading state.
-        iToBePlaying = EFalse;    
-        }                   
+        iToBePlaying = EFalse;
+        } 
     }
-   
-//  End of File  
+ 
+//  End of File
--- a/phoneapp/phoneuiview/src/cphonebubblewrapper.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonebubblewrapper.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -895,7 +895,11 @@
     CCoeControl* control(NULL);
     if ( iUseDialer )
         {
-        control = iDialerNumberEntry->GetNumberEntry();
+        // TODO: We should try to clarify the dialer control hierarchy.
+        // Currently, we have three controls, each of which are somewhere
+        // referred as "number entry": CDialer, CDialerNumberEntry, and CAknPhoneNumberEditor.
+        // Each of these are present on the code line below.
+        control = iDialerNumberEntry->GetNumberEntry()->Parent();
         }
     else
         {
--- a/phoneapp/phoneuiview/src/cphonebuttonscontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonebuttonscontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007-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"
@@ -854,6 +854,13 @@
             maskIndex = EMbmPhoneuiQgn_indi_button_silence_mask;
             break;
             }  
+        case EPhoneInCallCmdShareLiveVideo:
+            {
+            skinId = KAknsIIDQgnIndiButtonVideoShare;
+            fileIndex = EMbmPhoneuiQgn_indi_button_video_share;
+            maskIndex = EMbmPhoneuiQgn_indi_button_video_share_mask;
+            break;
+            }            
 
         default:
             return NULL; 
@@ -901,16 +908,6 @@
             frameId = KAknsIIDQsnFrButtonNormalReject; 
             break;           
             }
-        case EPhoneInCallCmdHold:
-            {
-            frameId = KAknsIIDQsnFrButtonNormalHold; 
-            break;            
-            }
-        case EPhoneInCallCmdUnhold:
-            {
-            frameId = KAknsIIDQsnFrButtonNormalHold; 
-            break;          
-            }
         case EPhoneInCallCmdEndThisOutgoingCall: 
             {
             frameId = KAknsIIDQsnFrButtonNormalReject;
--- a/phoneapp/phoneuiview/src/cphonedialercontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonedialercontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -21,67 +21,99 @@
 #include <eikapp.h>
 #include <eikcolib.h>
 #include <gulicon.h>
-#include <akntoolbar.h>
-#include <aknbutton.h>
 #include <StringLoader.h>
+#include <AknsUtils.h>
 #include <phoneui.rsg>
+#include <phoneui.mbg>
 #include <pevirtualengine.h>
 #include <data_caging_path_literals.hrh>
 
 #include "cphonedialercontroller.h"
+#include "cphoneeasydialingcontroller.h"
 #include "cphonebubblewrapper.h"
 #include "phoneui.hrh"
-#include "phonerssbase.h"
 #include "tphonecmdparaminteger.h"
-#include "cphonemenucontroller.h"
 #include "cphonemainresourceresolver.h"
 #include "tphonecmdparamcallstatedata.h"
 #include "tphonecmdparamboolean.h"
-#include "mphonedialercontroller.h"
 
 _LIT ( KPhoneMifFileName, "phoneui.mif" );
-_LIT( KDialerToolbarButtonEmptyStr, "" );
+
 
-const TInt KNumberOfButtons = 6;
-struct SPhoneDialerToolbarButton
+/** States for Call button. */
+enum TCallButtonState
+    {
+    ECallButtonCallState = 0,
+    ECallButtonLogState,
+    ECallButtonSendState
+    };
+static const CPhoneDialerController::TLocalButtonData KCallButtonDataTable[] =
     {
-    TInt iIconIndex;
-    TInt iMaskIndex;
-    TInt iCommandId;    
+        { EPhoneNumberAcqCmdSendCommand, 
+          EAknsMinorGenericQgnIndiButtonAnswerWhite,
+          EMbmPhoneuiQgn_indi_button_answer_white, 
+          EMbmPhoneuiQgn_indi_button_answer_white_mask,
+          R_PHONEUI_DIALER_TOOLTIP_CALL
+        },
+        { EPhoneDialerCmdLog,
+          EAknsMinorGenericQgnIndiButtonLogdialerWhite,
+          EMbmPhoneuiQgn_indi_button_logdialer_white,
+          EMbmPhoneuiQgn_indi_button_logdialer_white_mask,
+          R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS
+        },
+        { EPhoneNumberAcqCmdSendCommand, 
+          EAknsMinorGenericQgnIndiButtonAnswerWhite,
+          EMbmPhoneuiQgn_indi_button_answer_white, 
+          EMbmPhoneuiQgn_indi_button_answer_white_mask,
+          R_PHONEUI_DIALER_TOOLTIP_SEND
+        }
     };
+static const TInt KCallButtonDataTableCount = 
+    sizeof( KCallButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
+
 
-const SPhoneDialerToolbarButton bArray[KNumberOfButtons] =
-        {  
-            { EMbmPhoneuiQgn_indi_dialer_call_send,
-              EMbmPhoneuiQgn_indi_dialer_call_send_mask,
-              EPhoneDialerCmdLog
-            },
-            { EMbmPhoneuiQgn_indi_dialer_call_send,
-              EMbmPhoneuiQgn_indi_dialer_call_send_mask,
-              EPhoneNumberAcqCmdSendCommand
-            },        
-            
-            { EMbmPhoneuiQgn_indi_button_send_dtmf,
-              EMbmPhoneuiQgn_indi_button_send_dtmf_mask,
-              EPhoneCmdDtmfOk
-            },               
-            { EMbmPhoneuiQgn_indi_dialer_contacts,
-              EMbmPhoneuiQgn_indi_dialer_contacts_mask,
-              EPhoneDialerCmdContacts
-            },
-            { EMbmPhoneuiQgn_indi_dialer_add_contacts,
-              EMbmPhoneuiQgn_indi_dialer_add_contacts_mask,
-              EPhoneNumberAcqCmdAddToContacts
-            },            
-            { EMbmPhoneuiQgn_indi_dialer_clear,
-              EMbmPhoneuiQgn_indi_dialer_clear_mask,
-              EPhoneDialerCmdClear
-            }
-        }; 
+/** States for Phonebook button */
+enum TPhonebookButtonState
+    {
+    EPhonebookButtonContactsState = 0,
+    EPhonebookButtonAddContactState
+    };
+static const CPhoneDialerController::TLocalButtonData KPhonebookButtonDataTable[] =
+    {
+        { EPhoneDialerCmdContacts,
+          EAknsMinorGenericQgnIndiDialerContacts,
+          EMbmPhoneuiQgn_indi_dialer_contacts,
+          EMbmPhoneuiQgn_indi_dialer_contacts_mask,
+          R_PHONEUI_DIALER_TOOLTIP_CONTACTS
+        },
+        { EPhoneNumberAcqCmdAddToContacts,
+          EAknsMinorGenericQgnIndiDialerAddContacts,      
+          EMbmPhoneuiQgn_indi_dialer_add_contacts,
+          EMbmPhoneuiQgn_indi_dialer_add_contacts_mask,
+          R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS
+        }
+    };
+static const TInt KPhonebookButtonDataTableCount = 
+    sizeof( KPhonebookButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
 
-const TInt KDialerToolbarButtonCount = 6; 
-const TInt KDialerToolbarButtonKeyRepeatDelay = 300;
-const TInt KDialerToolbarKeyRepeatInterval = 75;
+
+/** States for Clear button */
+enum TClearButtonState
+    {
+    EClearButtonClearState = 0
+    };
+static const CPhoneDialerController::TLocalButtonData KClearButtonDataTable[] =
+    {
+        { EPhoneDialerCmdClear,
+          EAknsMinorGenericQgnIndiDialerClear,
+          EMbmPhoneuiQgn_indi_dialer_clear,
+          EMbmPhoneuiQgn_indi_dialer_clear_mask,
+          R_PHONEUI_DIALER_TOOLTIP_CLEAR
+        }
+    };
+static const TInt KClearButtonDataTableCount = 
+    sizeof( KClearButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
+
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -89,14 +121,11 @@
 // Constructor
 // ---------------------------------------------------------------------------
 //
-CPhoneDialerController::CPhoneDialerController( 
-                                        CPhoneBubbleWrapper& aBubbleWrapper,
-                                        CCoeEnv& aCoeEnv,
-                                        CPhoneMenuController& aMenuController ):
-    iBubbleWrapper ( aBubbleWrapper ),
-    iCoeEnv ( aCoeEnv ),
-    iMenuController( aMenuController ),
-    iUpdateToolbar( EFalse )
+EXPORT_C CPhoneDialerController::CPhoneDialerController( 
+                                        CPhoneBubbleWrapper* aBubbleWrapper,
+                                        CCoeEnv& aCoeEnv ):
+    iCoeEnv( aCoeEnv ),
+    iBubbleWrapper( aBubbleWrapper )
     {
     }
 
@@ -104,114 +133,20 @@
 // Second phase constructor
 // ---------------------------------------------------------------------------
 //
-void CPhoneDialerController::ConstructL()
+EXPORT_C void CPhoneDialerController::ConstructL()
     {
-   
-    iBubbleWrapper.SetNumberEntryObserver( *this );
-   
-    if ( !iToolbar )
-        {
-        iToolbar = CAknToolbar::NewL( R_PHONEUI_TOOLBAR );
-        }
-  
-    CEikAppUiFactory* appUiFactory =
-        static_cast<CEikAppUiFactory*>( CEikonEnv::Static()->AppUiFactory() );  
-    appUiFactory->SetViewFixedToolbar( iToolbar );
-    
-    if( iToolbar )
-        {
-        iToolbar->SetToolbarObserver( 
-                        static_cast<MAknToolbarObserver*>( this ));  
-        iToolbar->SetWithSliding( EFalse );
-        iToolbar->SetCloseOnAllCommands( EFalse );
-        iToolbar->SetFocusing( EFalse );
-        
-        CAknButton* button( NULL );
-
-        for( TInt i = 0; i < KDialerToolbarButtonCount; i++ )
-            {
-            TAknsItemID skinId = SkinId( bArray[i].iIconIndex );
-            // Load tooltip text.
-            HBufC* tooltipText;
-            GetTooltipTextL ( bArray[i].iCommandId, tooltipText );  
-            CleanupStack::PushL( tooltipText );      
-         
-            button = CreateButtonLC(
-                bArray[i].iIconIndex, 
-                bArray[i].iMaskIndex, 
-                *tooltipText, 
-                skinId,
-                bArray[i].iCommandId );
-            // Takes ownership of the button                    
-            iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId,0 );
-           
-            CleanupStack::Pop( button );
-            CleanupStack::PopAndDestroy( tooltipText );
-            }
-       
-        // Hide 'Send dtmf' icon
-        iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse );
-        TRAP_IGNORE(iToolbar->DisableToolbarL( ETrue ));
-        }
     }
     
 // ---------------------------------------------------------------------------
-// CreateButtonL
-// ---------------------------------------------------------------------------
-//
-CAknButton* CPhoneDialerController::CreateButtonLC( 
-    TInt aNormalIconId,
-    TInt aNormalMaskId,
-    const TDesC& aTooltipText,
-    const TAknsItemID& aSkinIconId,
-    TInt aCommand )
-    {
-    TFileName mifPath( KDriveZ );
-    mifPath.Append( KDC_APP_BITMAP_DIR );
-    mifPath.Append( KPhoneMifFileName );
-
-   
-    CAknButton* button = CAknButton::NewLC( 
-        mifPath,
-        aNormalIconId,
-        aNormalMaskId,
-        -1, -1, // dimmed
-        -1, -1, // pressed
-        -1, -1, // hover
-        KDialerToolbarButtonEmptyStr(),
-        aTooltipText, // help
-        0, // flags
-        0, // state flags
-        aSkinIconId );
-                               
-    if( aCommand == EPhoneDialerCmdClear )
-        {
-        button->SetButtonFlags( KAknButtonKeyRepeat );
-        // delay 300 ms and repeat 75 ms interval   
-        button->SetKeyRepeatInterval( KDialerToolbarButtonKeyRepeatDelay,
-                                      KDialerToolbarKeyRepeatInterval );
-        }
-                                     
-    button->SetFocusing( EFalse );
-    button->SetBackground( iToolbar );
-
-    return button;
-    }
-    
-    
-// ---------------------------------------------------------------------------
 // Static constructor
 // ---------------------------------------------------------------------------
 //
 CPhoneDialerController* CPhoneDialerController::NewL( 
-                                    CPhoneBubbleWrapper& aBubbleWrapper,
-                                    CCoeEnv& aCoeEnv,
-                                    CPhoneMenuController& aMenuController  )
+                                    CPhoneBubbleWrapper* aBubbleWrapper,
+                                    CCoeEnv& aCoeEnv )
     {
-    CPhoneDialerController* self =  new (ELeave) CPhoneDialerController( 
-                                        aBubbleWrapper
-                                       , aCoeEnv
-                                       , aMenuController );
+    CPhoneDialerController* self = 
+        new (ELeave) CPhoneDialerController( aBubbleWrapper, aCoeEnv );
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -222,197 +157,11 @@
 // Destructor
 // ---------------------------------------------------------------------------
 //
-CPhoneDialerController::~CPhoneDialerController()
-    {
-    delete iToolbar;
-    }
-
-// ---------------------------------------------------------------------------
-// NumberEntryStateChanged
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::NumberEntryStateChanged( TBool aHidePromptText )
-    {
-    if( aHidePromptText != iPreviousHidePromptTextStatus )
-        {
-        iPreviousHidePromptTextStatus = aHidePromptText; 
-        iUpdateToolbar = ETrue;
-        }
-    
-    HandleNumberEntryChanged();
-    
-    }
-
-// ---------------------------------------------------------------------------
-// HandleNumberEntryChanged
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::HandleNumberEntryChanged()
-    {
-    if( iUpdateToolbar )
-        {
-        UpdateToolbar();
-        iUpdateToolbar = EFalse;        
-        }
-    
-    iBubbleWrapper.HandleNumberEntryChanged();
-    
-    } 
-
-// ---------------------------------------------------------------------------
-// HandleNumberEntryChanged
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::SetNumberEntryChangedCallBack( 
-        TPhoneCommandParam* aCommandParam )
+EXPORT_C CPhoneDialerController::~CPhoneDialerController()
     {
-    iBubbleWrapper.SetNumberEntryChangedCallBack( aCommandParam );
-    
-    }
-     
-// ---------------------------------------------------------------------------
-// CreateButtonSetNumberEntryEmpty
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::CreateButtonSetNumberEntryEmpty()
-    {
-    
-    if( iToolbar )
-        {
-        if( iDtmfDialerVisible )
-            {
-            // Dim 'Send dtmf' 
-            iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse );
-            }
-        else if ( iCustomizedDialer )
-            {
-            iCustomizedDialer->HandleNumberEntryIsEmpty( ETrue );
-            }
-        else
-            {         
-            // Show 'Logs ' and 'Contacts' items
-            iToolbar->HideItem( EPhoneDialerCmdLog, EFalse,EFalse );
-            iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse );
-            
-            if ( iRestrictedDialer )
-                {
-                // Dim 'Logs' 
-                iToolbar->SetItemDimmed( EPhoneDialerCmdLog, ETrue
-                                       , EFalse );
-                // Dim 'Contacts' 
-                iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue
-                                       , EFalse );
-                }
-                            
-            // Hide 'Send' and 'Add to contacts'        
-            iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue
-                                , EFalse );
-            iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue
-                                , EFalse );                
-            }        
-        }
     }
 
 // ---------------------------------------------------------------------------
-// CreateButtonSetNumberEntryNotEmpty
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::CreateButtonSetNumberEntryNotEmpty()
-    {
-    if( iToolbar )
-        {
-        if( iDtmfDialerVisible )
-            {
-            // Show 'Send dtmf' 
-            iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, EFalse, EFalse );
-            }           
-        else if ( iCustomizedDialer )
-            {
-            iCustomizedDialer->HandleNumberEntryIsEmpty( EFalse );
-            }
-        else
-            {
-            // Show 'Send' and 'Add to contacts'
-            iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse
-                              , EFalse );      
-            iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse
-                              , EFalse );  
-                    
-            if ( iRestrictedDialer )
-                {
-                // Dim 'Send' 
-                iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue
-                                       , EFalse );
-                // Dim 'Add to Contacts' 
-                iToolbar->SetItemDimmed( EPhoneNumberAcqCmdAddToContacts, ETrue
-                                       , EFalse );
-                }  
-                           
-            // Hide 'Logs ' and 'Contacts' 
-            iToolbar->HideItem( EPhoneDialerCmdLog, ETrue,EFalse );
-            iToolbar->HideItem( EPhoneDialerCmdContacts, ETrue, EFalse ); 
-            
-            TPhoneCmdParamCallStateData callStateData;
-            callStateData.SetCallState( EPEStateConnected );
-            iBubbleWrapper.GetCallIdByState( &callStateData );
-            TInt connected = callStateData.CallId();    
-             
-            //If there is a active emergency call, Send item must be dimmed.  
-            if ( connected == KEmergencyCallId )
-                {
-                //Dim Send
-                iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue
-                                        ,EFalse );                
-                }
-            else
-                {
-                //UnDim
-                iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, EFalse
-                                        ,EFalse );                     
-                }
-            }    
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// SetDtmfDialerVisibleL
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::SetDtmfDialerVisibleL( TBool aVisible )
-    {
-    iDtmfDialerVisible = aVisible;
-    
-    if( iDtmfDialerVisible )
-        {
-        // Load prompt resource text to DTMF dialer.
-        TInt resourceId = CPhoneMainResourceResolver::Instance()->
-                    ResolveResourceID( EPhoneDtmfDialerNumberEntryPromptText ); 
-                    
-        HBufC* loadedText = StringLoader::LoadL( resourceId
-                                               , &iCoeEnv );
-
-        iBubbleWrapper.SetNumberEntryPromptText( loadedText->Des() );
-        
-        delete loadedText;
-        }
-    else        
-        { 
-        // Clear prompt text.    
-        iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );  
-                 
-        // Hide
-        iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse );  
-           
-        // Show       
-        iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse, EFalse );
-        iToolbar->HideItem( EPhoneDialerCmdLog, EFalse, EFalse );            
-        iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse, EFalse );    
-        // Dimming 
-        iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, EFalse, EFalse );                
-        }
-    }
-    
-// ---------------------------------------------------------------------------
 // SetRestrictedDialerL
 // ---------------------------------------------------------------------------
 //
@@ -420,326 +169,296 @@
     {
     iRestrictedDialer = aRestricted;
     }
-// ---------------------------------------------------------------------------
-// UpdateToolbar
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::UpdateToolbar()
-    {
-    
-    TPhoneCmdParamInteger numberEntryCountParam;
-    iBubbleWrapper.GetNumberEntryCount( 
-                            (TPhoneCommandParam*) &numberEntryCountParam );
-    TInt neLength( numberEntryCountParam.Integer() );
-    
-    if ( neLength )
-        {
-        CreateButtonSetNumberEntryNotEmpty();
-        iToolbar->SetItemDimmed( EPhoneDialerCmdClear, EFalse, EFalse );  
-        iToolbar->DrawDeferred();     
-        
-        //Update also options menu via controller
-        iMenuController.SetNumberEntryEmptyFlag( EFalse );        
-        }
-        
-    else
-        {
-        CreateButtonSetNumberEntryEmpty();
-        iToolbar->SetItemDimmed( EPhoneDialerCmdClear, ETrue, EFalse );
-        iToolbar->DrawDeferred();
-        
-        //Update also options menu via controller
-        iMenuController.SetNumberEntryEmptyFlag( ETrue );                  
-        } 
 
-    }   
-
-// ---------------------------------------------------------------------------
-// OfferToolbarEventL
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::OfferToolbarEventL( TInt aCommand )
-    {
-    switch ( aCommand )
-        {
-        case EPhoneDialerCmdClear:
-            {
-            // Send key event.
-            TKeyEvent keyEvent;
-            keyEvent.iModifiers = 0;
-            keyEvent.iRepeats = 0;
-            keyEvent.iCode = EKeyBackspace;
-            keyEvent.iScanCode = EStdKeyBackspace;
-            iCoeEnv.SimulateKeyEventL( keyEvent, EEventKey );
-            }
-            break;   
-        default:
-            {
-            // Forward pressed toolbar button to the framework 
-            // so that we can handle it in active state            
-            static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
-               ->ProcessCommandL( aCommand );            
-            }
-            break;    
-        }
-    } 
-   
-// ---------------------------------------------------------------------------
-// DynInitToolbarL
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::DynInitToolbarL( TInt aResourceId, 
-                                              CAknToolbar* /*aToolbar*/ )
-    { 
-    if ( aResourceId == R_PHONEUI_TOOLBAR )
-        {
-        if ( !iDtmfDialerVisible )
-            {
-            UpdateToolbar();
-            }
-        else
-            {
-            // initialize toolbar for dtmf dialer
-            //
-            // Show
-            iToolbar->HideItem( EPhoneCmdDtmfOk, EFalse, EFalse );
-            iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse );     
-            
-            // Hide
-            iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue, EFalse );
-            iToolbar->HideItem( EPhoneDialerCmdLog, ETrue, EFalse );            
-            iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue
-                              , EFalse );     
-            
-            // Dimming
-            iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue, EFalse ); 
-            iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse );                   
-            }
-        }     
-    }
-// ---------------------------------------------------------------------------
-// IsDTMFDialerVisible
-// ---------------------------------------------------------------------------
-//
-TBool CPhoneDialerController::IsDTMFDialerVisible() const
-    {
-    return iDtmfDialerVisible;
-    }
-
-
-// ---------------------------------------------------------------------------
-// GetTooltipText
-//
-// Tooltip texts for toolbar buttons
-// ---------------------------------------------------------------------------
-//
-void  CPhoneDialerController::GetTooltipTextL( TInt aCommandId, HBufC*& aText ) 
-    {
-    TInt resourceId = 0;
-    switch( aCommandId )
-        {
-        case EPhoneDialerCmdLog:
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS;
-            break;              
-                  
-        case EPhoneNumberAcqCmdSendCommand:
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL;
-            break;      
-                          
-        case EPhoneCmdDtmfOk:
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND;
-            break;   
-                             
-        case EPhoneDialerCmdContacts:
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_CONTACTS;
-            break;   
-                             
-        case EPhoneNumberAcqCmdAddToContacts:
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS;
-            break;   
-                             
-        case EPhoneDialerCmdClear:
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_CLEAR;
-            break;
-        default:
-            aText = KNullDesC().Alloc();
-            break;
-        }
-        
-    if( resourceId )
-        {
-        aText = StringLoader::LoadL( resourceId, &iCoeEnv );
-        }
-        
-    }
 // ---------------------------------------------------------------------------
 // SetServiceCodeFlagL
 //
-// Change call button tooltip text between 'Send' or 'Call'
+// The flag rules wether green key is called "Send" or "Call"
 // 
 // ---------------------------------------------------------------------------
 //
-void CPhoneDialerController::SetServiceCodeFlagL( 
+void CPhoneDialerController::SetServiceCodeFlag( 
     TPhoneCommandParam* aCommandParam )
     {
-    
     // Check is the given parameter valid
     if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
-        {   
-        TInt resourceId = 0;
+        {
         TPhoneCmdParamBoolean* serviceCodeFlag = 
             static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
-        // Sanity check
-        if( serviceCodeFlag->Boolean() == iServiceCodeFlag )
-            {
-            return;
-            }
-        // Get the toolbar button control
-        CAknButton* button = static_cast<CAknButton*>
-        ( iToolbar->ControlOrNull( EPhoneNumberAcqCmdSendCommand) );
-        
-        CAknButtonState* state = button->State();                              
-        if ( serviceCodeFlag->Boolean() )
-            {
-            iServiceCodeFlag = ETrue;
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND;
-            }
-        else
-            {
-            iServiceCodeFlag = EFalse;
-            resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL;
-            }  
-                
-        if( resourceId )
-            {    
-            // Change text              
-            HBufC* tooltipText = StringLoader::LoadL( resourceId,
-                                             CCoeEnv::Static() );
-            CleanupStack::PushL( tooltipText );                                         
-            state->SetHelpTextL( *tooltipText );
-            CleanupStack::PopAndDestroy( tooltipText );   
-            }
+        iServiceCodeFlag = serviceCodeFlag->Boolean();
         }
     }
 
 // ---------------------------------------------------------------------------
-// ShowToolbar
+// SetEasyDialingController
+// ---------------------------------------------------------------------------
 //
+void CPhoneDialerController::SetEasyDialingController( 
+        CPhoneEasyDialingController* aController )
+    {
+    iEasyDialingController = aController;
+    }
+
+// ---------------------------------------------------------------------------
+// CbaResourceId
 // ---------------------------------------------------------------------------
 //
-void CPhoneDialerController::ShowToolbar()
+EXPORT_C TInt CPhoneDialerController::CbaResourceId() const
+    {
+    return KErrNotFound;
+    }
+
+// ---------------------------------------------------------------------------
+// MenuResourceId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPhoneDialerController::MenuResourceId() const
     {
-    if ( iToolbar )
-        {
-        if ( iToolbar->IsToolbarDisabled() )
-            {
-            TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
-            }
-        iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
-        iToolbar->SetToolbarVisibility( ETrue, EFalse );
-        }
+    return KErrNotFound;
+    }
+
+// ---------------------------------------------------------------------------
+// NumberEntryPromptTextL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPhoneDialerController::NumberEntryPromptTextL()
+    {
+    return KNullDesC;
     }
 
 // ---------------------------------------------------------------------------
-// HideToolbar
-//
+// GetButtonData
 // ---------------------------------------------------------------------------
 //
-void CPhoneDialerController::HideToolbar()
+EXPORT_C TInt CPhoneDialerController::GetButtonData( TButtonIndex aIndex, 
+        RPointerArray<CButtonData>& aData ) const
     {
-    if ( iToolbar )
+    TInt err = KErrNone;
+    
+    const TLocalButtonData* dataTable = NULL;
+    TInt count = 0;
+    
+    // Select correct data table
+    switch ( aIndex )
         {
-        if( iToolbar->IsShown() )
+        case ECallButton:
+            dataTable = KCallButtonDataTable;
+            count = KCallButtonDataTableCount;
+            break;
+        case EPhonebookButton:
+            dataTable = KPhonebookButtonDataTable;
+            count = KPhonebookButtonDataTableCount;
+            break;
+        case EClearButton:
+            dataTable = KClearButtonDataTable;
+            count = KClearButtonDataTableCount;
+            break;
+        default:
+            break;
+        }
+    
+    // Create data from the table
+    if ( dataTable )
+        {
+        // Construct MIF file path
+        TFileName mifPath( KDriveZ );
+        mifPath.Append( KDC_APP_BITMAP_DIR );
+        mifPath.Append( KPhoneMifFileName );
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    
+        for ( TInt i = 0 ; i < count ; ++i )
             {
-            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
+            CButtonData* btnData = NULL;
+            TRAP( err, btnData = CreateButtonDataL( dataTable[i], skin, mifPath ) );
+            if ( !err )
+                {
+                err = aData.Append( btnData );
+                }
+            if ( err )
+                {
+                // free all memory and stop here if something went wrong
+                delete btnData;
+                aData.ResetAndDestroy();
+                i = count;
+                }
             }
-        else if ( iToolbar->IsToolbarDisabled() )
-            {
-            TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
-            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
-            iToolbar->SetToolbarVisibility( ETrue, EFalse );
-            }
-        }        
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// SetNumberEntryEmptyIsEmpty
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPhoneDialerController::SetNumberEntryIsEmpty( TBool aEmpty )
+    {
+    iNumberAvailable = !aEmpty;
     }
 
 // ---------------------------------------------------------------------------
-// ShowCustomizedDialerL
-//
-// Sets custom dialer buttons visible
-// 
+// ButtonState
 // ---------------------------------------------------------------------------
 //
-void CPhoneDialerController::ShowCustomizedDialerL( 
-    MPhoneDialerController* aCustomController )
-    {  
-    if ( aCustomController )
+EXPORT_C TInt CPhoneDialerController::ButtonState( TButtonIndex aIndex ) const
+    {
+    TInt state( KErrNotFound );
+    // Figure out correct state for each key
+    switch ( aIndex )
         {
-        // Hide all buttons except clear button 
-        for ( TInt i = 0; i < KNumberOfButtons; i++ )
+        case ECallButton:
             {
-            if ( bArray[ i ].iCommandId != EPhoneDialerCmdClear )
+            if ( !iNumberAvailable )
+                {
+                // Show "Recent calls" when no number available
+                state = ECallButtonLogState;
+                }
+            else if ( iServiceCodeFlag && !EasyDialingFocused() )
                 {
-                iToolbar->HideItem( bArray[ i ].iCommandId, ETrue, EFalse );
+                // Show "Send" if service code entered and contact list
+                // is not focused.
+                state = ECallButtonSendState;
+                }
+            else
+                {
+                // Show "Call" in all other cases
+                state = ECallButtonCallState;
                 }
             }
- 
-        aCustomController->InitializeL( *iToolbar );
-        iBubbleWrapper.SetNumberEntryPromptText( 
-            aCustomController->NumberEntryPromptTextL() );
-        aCustomController->ShowButtons( ETrue );
+            break;
+        case EPhonebookButton:
+            {
+            if ( !iNumberAvailable )
+                {
+                state = EPhonebookButtonContactsState;
+                }
+            else
+                {
+                state = EPhonebookButtonAddContactState;
+                }
+            }
+            break;
+        case EClearButton:
+            {
+            state = EClearButtonClearState;
+            }
+            break;
+        default:
+            break;
         }
-    iCustomizedDialer = aCustomController;
+    return state;
     }
 
 // ---------------------------------------------------------------------------
-// HideCustomizedDialerL
-//
-// Hides custom dialer buttons 
-// 
+// ButtonDimmed
 // ---------------------------------------------------------------------------
 //
-void CPhoneDialerController::HideCustomizedDialer()
-    {  
-    iCustomizedDialer->ShowButtons( EFalse );
-    iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );              
-    iCustomizedDialer = NULL;
+EXPORT_C TBool CPhoneDialerController::ButtonDimmed( TButtonIndex aIndex ) const
+    {
+    TBool dimmed = EFalse;
+    // Figure out correct state for each key
+    switch ( aIndex )
+        {
+        case ECallButton:
+			{
+        	if ( iNumberAvailable )
+        		{
+        		// Dim send key if emergency call is active. 
+        		// Do not dim send key if emergency call is not active,
+        		// user must be able to make an emergency call whether 
+        		// security mode is enabled or disabled.
+        		dimmed = EmergencyCallActive();
+        		}
+        	else
+        		{
+        		// If there's no number available in dialer, we should dim
+        		// send key if security mode is enabled.
+        		// User cannot launch logs application.
+        		dimmed = iRestrictedDialer;
+        		}
+			}
+        	break;
+            
+        case EPhonebookButton:
+            dimmed = iRestrictedDialer;
+            break;
+        case EClearButton:
+            dimmed = !iNumberAvailable;
+            break;
+        default:
+            break;
+        }
+    return dimmed;
     }
 
 // ---------------------------------------------------------------------------
-// IsCustomizedDialerVisible
+// EasyDialingAllowed
 // ---------------------------------------------------------------------------
 //
-TBool CPhoneDialerController::IsCustomizedDialerVisible() const
+EXPORT_C TBool CPhoneDialerController::EasyDialingAllowed() const
     {
-    return ( NULL != iCustomizedDialer );
+    return !iRestrictedDialer && !EmergencyCallActive();
     }
 
 // ---------------------------------------------------------------------------
-// CustomizedCbaResourceId
+// EmergencyCallActive
 // ---------------------------------------------------------------------------
 //
-TInt CPhoneDialerController::CustomizedCbaResourceId() const
+EXPORT_C TBool CPhoneDialerController::EmergencyCallActive() const
     {
-    TInt resourceId = KErrNotFound;
-    if ( iCustomizedDialer )
+    TBool ret = EFalse;
+    if ( iBubbleWrapper )
         {
-        resourceId = iCustomizedDialer->CbaResourceId();
+        TPhoneCmdParamCallStateData callStateData;
+        callStateData.SetCallState( EPEStateConnected );
+        iBubbleWrapper->GetCallIdByState( &callStateData );
+        TInt connected = callStateData.CallId();    
+        ret = ( connected == KEmergencyCallId );
         }
-    return resourceId;
+    return ret;
     }
 
 // ---------------------------------------------------------------------------
-// CustomizedMenuResourceId
+// EasyDialingFocused
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneDialerController::EasyDialingFocused() const
+    {
+    TBool edFocused = EFalse;
+    if ( iEasyDialingController )
+        {
+        TInt commandResponse( EPhoneViewResponseFailed );
+        TRAP_IGNORE( commandResponse = iEasyDialingController->HandleCommandL(
+                EPhoneViewGetEasyDialingInFocusStatus) );
+        edFocused = ( commandResponse == EPhoneViewResponseSuccess );
+        }
+    return edFocused;
+    }
+
+// ---------------------------------------------------------------------------
+// CreateButtonDataL
 // ---------------------------------------------------------------------------
 //
-TInt CPhoneDialerController::CustomizedMenuResourceId() const
+MPhoneDialerController::CButtonData* CPhoneDialerController::CreateButtonDataL( 
+        const TLocalButtonData& aSourceData, 
+        MAknsSkinInstance* aSkin, 
+        const TDesC& aMifFile ) const
     {
-    TInt resourceId = KErrNotFound;
-    if ( iCustomizedDialer )
-        {
-        resourceId = iCustomizedDialer->MenuResourceId();  
-        }
-    return resourceId;
+    // Create tooltip text
+    HBufC* tooltip = StringLoader::LoadLC( aSourceData.iTooltipResourceId );
+    
+    // Create icon
+    TAknsItemID skinId = { EAknsMajorGeneric, aSourceData.iSkinItemIdMinor };
+    CGulIcon* icon = AknsUtils::CreateGulIconL( aSkin, skinId, aMifFile, 
+            aSourceData.iBitmapIndex, aSourceData.iBitmapMaskIndex );
+    CleanupStack::PushL( icon );
+    
+    // Create button data object
+    CButtonData* buttonData =
+        new ( ELeave ) CButtonData( aSourceData.iCommandId, icon, tooltip );
+    CleanupStack::Pop( icon );
+    CleanupStack::Pop( tooltip );
+    
+    return buttonData;
     }
 
 // END
--- a/phoneapp/phoneuiview/src/cphonedialerview.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonedialerview.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 - 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"
@@ -57,9 +57,6 @@
     EPhoneBgLayersN             = 1
     };
 
-#define LSC_VARIETY   0
-#define PRT_VARIETY   6
-
 // ================= MEMBER FUNCTIONS =======================
 
 // -----------------------------------------------------------------------------
@@ -68,8 +65,7 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CPhoneDialerView::CPhoneDialerView() :
-    iSecurityMode ( EFalse )
+CPhoneDialerView::CPhoneDialerView()
     {
     }
 
@@ -88,7 +84,7 @@
     CreateWindowL();
     DrawableWindow()->SetPointerGrab( ETrue );
 
-    SetRect( aRect );
+    SetComponentsToInheritVisibility( ETrue );
     }
 
 // -----------------------------------------------------------------------------
@@ -214,78 +210,25 @@
 // CPhoneDialerView::SetRect
 // -----------------------------------------------------------------------------
 //    
-void CPhoneDialerView::SetRect( const TRect &aRect )
+void CPhoneDialerView::SetRect( const TRect& aRect )
     {
-    __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::SetRect()");
-    if ( !AknLayoutUtils::PenEnabled() )
-        {
-        CCoeControl::SetRect( aRect );
-        }
-    else
+    CCoeControl::SetRect( aRect );
+    iControlRect = Rect();
+    // Forward size change to the control only if we are visible. Otherwise the
+    // control rect is just srored and relayed to control when we do become
+    // visible. This way we can avoid unnecessary relayout work for example when
+    // status bar size changes or screen is rotated while in-call ui is active.
+    if ( IsVisible() )
         {
-        if ( iSecurityMode )
-            {
-            // In security mode aRect is ok.
-            CCoeControl::SetRect( aRect );    
-            iControlRect = Rect();
-            }
-        else
-            {
-            TAknLayoutRect viewRect;
-            
-            TRect screenRect;
-            AknLayoutUtils::LayoutMetricsRect( 
-                AknLayoutUtils::EScreen,
-                screenRect  );    
-
-            // dialer view
-            viewRect.LayoutRect( 
-                screenRect, 
-                TAknWindowComponentLayout::Compose(
-                    AknLayoutScalable_Avkon::application_window( 0 ),
-                    AknLayoutScalable_Avkon::main_pane( 7 ) ) );
-
-            CCoeControl::SetRect( viewRect.Rect() );    
-            
-            TInt variety ( PRT_VARIETY ) ; // portrait
-            if ( Layout_Meta_Data::IsLandscapeOrientation() )
-                {
-                variety = LSC_VARIETY;
-                }
-            
-            // reduce toolbar
-            TAknLayoutRect toolbarRect;
-            toolbarRect.LayoutRect( 
-                screenRect, 
-                TAknWindowComponentLayout::Compose(
-                AknLayoutScalable_Avkon::application_window( 0 ),
-                AknLayoutScalable_Avkon::area_side_right_pane( variety ) ) );
-            
-            if ( toolbarRect.Rect().Intersects( viewRect.Rect() ) )
-                {
-                iControlRect = Rect();
-                if ( variety == PRT_VARIETY ) // portrait
-                    {
-                    iControlRect.iBr.iY -= toolbarRect.Rect().Height();
-                    }
-                else
-                    {
-                    iControlRect.iBr.iX -= toolbarRect.Rect().Width();
-                    }
-                }
-            else
-                {
-                iControlRect = Rect();    
-                }                            
-            }                
-        }        
+        UpdateControlRect();
+        }
     }
 
 // -----------------------------------------------------------------------------
 // CPhoneDialerView::Draw
 // -----------------------------------------------------------------------------
 //
-void CPhoneDialerView::Draw(  const TRect& aRect ) const
+void CPhoneDialerView::Draw( const TRect& aRect ) const
     {
     __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::Draw()");
     TRect rect = Rect();
@@ -296,8 +239,7 @@
         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
         MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
         
-        if ( iSecurityMode || 
-            !AknsDrawUtils::Background( skin, cc, this, gc, aRect ) )
+        if ( !AknsDrawUtils::Background( skin, cc, this, gc, aRect ) )
             {
             gc.SetPenStyle(CGraphicsContext::ENullPen);
             gc.SetBrushColor( AKN_LAF_COLOR( 0 ) ); // 0 for white
@@ -343,8 +285,6 @@
     iBgContext->SetLayerImage( EPhoneBgFirstLayer, KAknsIIDQsnBgScreen );
     iBgContext->SetParentPos( screen.iTl );
     iBgContext->SetLayerRect( EPhoneBgFirstLayer, screen ) ;
-
-    UpdateControlRect();
     }
 
 // -----------------------------------------------------------------------------
@@ -384,10 +324,7 @@
             }
         else
             {
-            if ( iControlRect != iControl->Rect() )
-                {
-                iControl->SetRect( iControlRect );
-                }    
+            iControl->SetRect( iControlRect );
             } 
         }
     }
@@ -408,25 +345,19 @@
     }
 
 // -----------------------------------------------------------------------------
-// CPhoneDialerView::SetSecurityMode
+// CPhoneDialerView::MakeVisible
 // -----------------------------------------------------------------------------
 //
-void CPhoneDialerView::SetSecurityMode ( TBool aStatus )
+void CPhoneDialerView::MakeVisible( TBool aVisible )
     {
-    if ( iSecurityMode != aStatus ) 
+    if ( aVisible )
         {
-        iSecurityMode = aStatus;
-        SizeChanged();    
+        // Deferred control rect size update before view becomes visible.
+        // We don't relay size changes to our control while view is invisible
+        // to avoid unnecessary layout recalculations.
+        UpdateControlRect();
         }
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhoneDialerView::IsSecurityMode
-// -----------------------------------------------------------------------------
-//
-TBool CPhoneDialerView::IsSecurityMode()    
-    {
-    return iSecurityMode;
+    CCoeControl::MakeVisible( aVisible );
     }
 
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphonedtmfdialercontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,208 @@
+/*
+* 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: Controller for DTMF mode of Dialer
+*
+*/
+
+#include <StringLoader.h>
+#include <phoneui.rsg>
+#include <phoneui.mbg>
+#include <AknsUtils.h>
+#include <data_caging_path_literals.hrh>
+#include "phoneappcommands.hrh"
+#include "cphonedtmfdialercontroller.h"
+#include "cphonemainresourceresolver.h"
+#include "phonerssbase.h"
+
+_LIT ( KPhoneMifFileName, "phoneui.mif" );
+
+const CPhoneDialerController::TLocalButtonData KSendDtmfButtonData =
+    {
+    EPhoneCmdDtmfOk,
+    EAknsMinorGenericQgnIndiButtonSendDtmf,
+    EMbmPhoneuiQgn_indi_button_send_dtmf,
+    EMbmPhoneuiQgn_indi_button_send_dtmf_mask,
+    R_PHONEUI_DIALER_TOOLTIP_SEND
+    };
+
+// ---------------------------------------------------------------------------
+// CPhoneDtmfDialerController
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfDialerController::CPhoneDtmfDialerController( 
+        CPhoneBubbleWrapper* aBubbleWrapper,
+        CCoeEnv& aCoeEnv ) : 
+    CPhoneDialerController( aBubbleWrapper, aCoeEnv )
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// ~CPhoneDtmfDialerController
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfDialerController::~CPhoneDtmfDialerController()
+    {
+    delete iPromptText;
+    }
+
+// ---------------------------------------------------------------------------
+// NewLC
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfDialerController* CPhoneDtmfDialerController::NewLC( 
+        CPhoneBubbleWrapper* aBubbleWrapper,
+        CCoeEnv& aCoeEnv )
+    {
+    CPhoneDtmfDialerController* self =
+        new (ELeave) CPhoneDtmfDialerController( aBubbleWrapper, aCoeEnv );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfDialerController* CPhoneDtmfDialerController::NewL( 
+        CPhoneBubbleWrapper* aBubbleWrapper,
+        CCoeEnv& aCoeEnv )
+    {
+    CPhoneDtmfDialerController* self = 
+        CPhoneDtmfDialerController::NewLC( aBubbleWrapper, aCoeEnv );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CPhoneDtmfDialerController::ConstructL()
+    {
+    CPhoneDialerController::ConstructL();
+    }
+
+// ---------------------------------------------------------------------------
+// NumberEntryPromptTextL
+// ---------------------------------------------------------------------------
+//
+const TDesC& CPhoneDtmfDialerController::NumberEntryPromptTextL()
+    {
+    if ( !iPromptText )
+        {
+        // Load prompt text when it's needed for the first time.
+        // It can't be loaded in constructor as resource resolver
+        // is not yet properly set up at that time.
+        TInt resourceId = 
+            CPhoneMainResourceResolver::Instance()->
+                   ResolveResourceID( EPhoneDtmfDialerNumberEntryPromptText ); 
+        iPromptText = StringLoader::LoadL( resourceId, &iCoeEnv );
+        }
+    if ( iPromptText )
+        {
+        return *iPromptText;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// GetButtonDataL
+// ---------------------------------------------------------------------------
+//
+TInt CPhoneDtmfDialerController::GetButtonData( TButtonIndex aIndex, RPointerArray<CButtonData>& aData ) const
+    {
+    TInt err = KErrNone;
+    
+    if ( aIndex == ECallButton )
+        {
+        TFileName mifPath( KDriveZ );
+        mifPath.Append( KDC_APP_BITMAP_DIR );
+        mifPath.Append( KPhoneMifFileName );
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        CButtonData* btnData = NULL;
+        TRAP( err, btnData = CreateButtonDataL( KSendDtmfButtonData, skin, mifPath ) );
+        if ( !err )
+            {
+            err = aData.Append( btnData );
+            if ( err )
+                {
+                // append failed, delete created data to avoid memory leak
+                delete btnData;
+                }
+            }
+        }
+    else if ( aIndex == EClearButton )
+        {
+        // let base class handle backspace
+        err = CPhoneDialerController::GetButtonData( aIndex, aData );
+        }
+    else
+        {
+        // leave Phonebook button empty
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// ButtonState
+// ---------------------------------------------------------------------------
+//
+TInt CPhoneDtmfDialerController::ButtonState( TButtonIndex aIndex ) const
+    {
+    TInt state = KErrNotFound;
+    // Call button has one only one state, phonebook button has no states.
+    // Clear button is handled by the base class.
+    if ( aIndex == ECallButton )
+        {
+        state = 0;
+        }
+    else if ( aIndex == EClearButton )
+        {
+        state = CPhoneDialerController::ButtonState( aIndex );
+        }
+    return state;
+    }
+
+// ---------------------------------------------------------------------------
+// GetButtonDimmed
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneDtmfDialerController::ButtonDimmed( TButtonIndex aIndex ) const
+    {
+    TBool dimmed = ETrue;
+    // Call button is dimmed while number entry is empty. Phonebook button
+    // is empty and always dimmed. Clear button is handled by the base class.
+    if ( aIndex == ECallButton )
+        {
+        dimmed = !iNumberAvailable;
+        }
+    else if ( aIndex == EClearButton )
+        {
+        dimmed = CPhoneDialerController::ButtonDimmed( EClearButton );
+        }
+    return dimmed;
+    }
+
+// ---------------------------------------------------------------------------
+// EasyDialingAllowed
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneDtmfDialerController::EasyDialingAllowed() const
+    {
+    return EFalse;
+    }
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphoneeasydialingcontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,154 @@
+/*
+* 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: Class handles Easy dialing specific commands
+*
+*/
+
+#include "cphoneeasydialingcontroller.h"
+
+#include "cdialer.h"
+#include "tphonecommandparam.h"
+#include "tphonecmdparaminteger.h"
+#include "tphonecmdparamdynmenu.h"
+#include "dialingextensioninterface.h"
+#include "easydialingcommands.hrh"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPhoneEasyDialingController::CPhoneEasyDialingController
+// ---------------------------------------------------------------------------
+//
+CPhoneEasyDialingController::CPhoneEasyDialingController(
+         CDialer& aDialer )
+   : iDialer ( aDialer )
+    {
+    // Get Easydialing interface. This can be NULL if easydialing is not
+    // present in current device configuration.
+    iEasyDialing = iDialer.GetEasyDialingInterface();
+    }
+
+ // ---------------------------------------------------------------------------
+ // CPhoneEasyDialingController::NewL
+ // ---------------------------------------------------------------------------
+ //
+CPhoneEasyDialingController* CPhoneEasyDialingController::NewL( 
+        CDialer& aDialer )
+     {
+     return new (ELeave) CPhoneEasyDialingController( aDialer );
+     }
+
+// ---------------------------------------------------------------------------
+//  CPhoneEasyDialingController::~CPhoneEasyDialingController
+// ---------------------------------------------------------------------------
+//
+CPhoneEasyDialingController::~CPhoneEasyDialingController()
+     {
+     }
+ 
+// ---------------------------------------------------------------------------
+//  CPhoneEasyDialingController::ExecuteCommandL
+// ---------------------------------------------------------------------------
+//
+void CPhoneEasyDialingController::ExecuteCommandL(
+        TPhoneViewCommandId aCmdId,
+        TPhoneCommandParam* aCommandParam )
+    {
+    if ( iEasyDialing )
+        {
+        switch ( aCmdId )
+            {
+            case EPhoneViewGetEasyDialingMenuId:
+                {
+                TPhoneCmdParamInteger* paramInt = 
+                    static_cast<TPhoneCmdParamInteger*>( aCommandParam );
+                paramInt->SetInteger( iEasyDialing->MenuResourceId() );            
+                }
+                break;
+                    
+            case EPhoneViewGetEasyDialingCbaId:
+                {
+                TPhoneCmdParamInteger* paramInt = 
+                    static_cast<TPhoneCmdParamInteger*>( aCommandParam );
+                paramInt->SetInteger( iEasyDialing->CbaResourceId() );            
+                }
+                break;
+                
+            default:
+                break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  CPhoneEasyDialingController::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+TPhoneViewResponseId CPhoneEasyDialingController::HandleCommandL(
+        TPhoneViewCommandId aCmdId )
+    {
+    TPhoneViewResponseId viewResponse = EPhoneViewResponseFailed;
+
+    switch ( aCmdId )
+        {
+        // commands defined in easydialingcommands.hrh are forwarded to
+        // easydialing plugin
+        case EEasyDialingVoiceCall:
+        case EEasyDialingVideoCall:
+        case EEasyDialingSendMessage:
+        case EEasyDialingOpenContact:
+        case EEasyDialingCallHandlingActivated:
+        case EEasyDialingEnterKeyAction:
+        case EEasyDialingOn:
+        case EEasyDialingOff:
+            {
+            if( iEasyDialing && iEasyDialing->HandleCommandL( aCmdId ) )
+                {
+                viewResponse = EPhoneViewResponseSuccess;
+                }
+            }
+            break;
+            
+        case EPhoneViewGetEasyDialingInFocusStatus:
+            {
+            if ( iEasyDialing && iEasyDialing->IsFocused() )
+                {
+                viewResponse = EPhoneViewResponseSuccess;
+                }
+            }
+            break;
+        }
+    
+    return viewResponse;
+    }
+
+// ---------------------------------------------------------------------------
+//  CPhoneEasyDialingController::InitializeEasyDialingMenuL
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneEasyDialingController::InitializeEasyDialingMenuL( 
+        TPhoneCommandParam* aCommandParam )
+    {
+    TBool retVal( EFalse );
+    if ( iEasyDialing )
+        {
+        TPhoneCmdParamDynMenu* menu = static_cast<TPhoneCmdParamDynMenu*>( aCommandParam );
+    
+       // TInt resourceId = menu->ResourceId();
+        CEikMenuPane*  menuPane = reinterpret_cast<CEikMenuPane*>( menu->DynMenu() );
+        
+        retVal = iEasyDialing->InitializeMenuPaneL( *menuPane, menu->ResourceId() );
+        }
+    return retVal;
+    }
--- a/phoneapp/phoneuiview/src/cphonemenucontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonemenucontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -227,6 +227,12 @@
         {
         switch( menuItemArray[ i ] )
             {
+            case EPhoneInCallCmdAnswer:
+                if ( iConferenceAndWaitingVideoFlag )
+                    {
+                    menuPane->DeleteMenuItem( menuItemArray[ i ] );
+                    }
+                break;
             case EPhoneInCallCmdDialer:
                 if ( !onScreenDialer )
                     {
@@ -254,6 +260,10 @@
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );
                     }
+                else if ( iInvalidCsPhoneNumber )
+                    {
+                    menuPane->DeleteMenuItem( menuItemArray[ i ] );
+                    }
                 break;
                 
             case EPhoneNumberAcqCmdVideoCall:
@@ -268,31 +278,44 @@
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );
                     }
+                else if ( iInvalidCsPhoneNumber )
+                    {
+                    menuPane->DeleteMenuItem( menuItemArray[ i ] );
+                    }
                 break;
  
             case EPhoneNumberAcqCmdSendMessage:            
-                if ( iNumberEntryEmpty )
+                if ( iNumberEntryEmpty || iInvalidCsPhoneNumber || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] ); 
                     }
-                break;                    
+                break;    
+                
+            case EPhoneInCallCmdSendToCallerMenu:
+            	{
+            	if ( iSecurityMode )
+            		{
+            		menuPane->DeleteMenuItem( menuItemArray[ i ] ); 
+            		}
+            	}
+            break;
                                 
             case EPhoneNumberAcqCmdSendCommand:
-                if ( !iServiceCodeFlag || iNumberEntryEmpty )
+                if ( !iServiceCodeFlag || iNumberEntryEmpty || iInvalidCsPhoneNumber )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );
                     }
                 break;
                 
             case EPhoneNumberAcqCmdToggleNeAlphaMode:
-                if ( iAlphaMode )
+                if ( iAlphaMode || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );
                     }
                 break;
                          
             case EPhoneNumberAcqCmdToggleNeNumericMode:
-                if ( !iAlphaMode )
+                if ( !iAlphaMode || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );
                     }
@@ -300,7 +323,7 @@
                 
                 
             case EPhoneInCallCmdGoToIdle:
-                if ( iNEVisible )
+                if ( iNEVisible || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );    
                     }
@@ -351,7 +374,7 @@
                 break;
                 
             case EPhoneCallComingCmdSoftReject:
-                if ( !iSoftRejectFlag )
+                if ( !iSoftRejectFlag || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] );
                     }
@@ -456,7 +479,7 @@
                 break;
             case EPhoneDialerCmdLog:
                 {
-                if ( onScreenDialer && !iNumberEntryEmpty  )
+                if ( ( onScreenDialer && !iNumberEntryEmpty  )  || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[i] );                    
                     }                
@@ -464,7 +487,7 @@
                 break;
             case EPhoneDialerCmdContacts:
                 {
-                if ( onScreenDialer && !iNumberEntryEmpty   )
+                if ( ( onScreenDialer && !iNumberEntryEmpty  ) || iSecurityMode ) 
                     {
                     menuPane->DeleteMenuItem( menuItemArray[i] );                    
                     }                
@@ -473,7 +496,7 @@
 
             case EPhoneNumberAcqCmdAddToContacts:
                 {
-                if ( onScreenDialer && iNumberEntryEmpty   )
+                if ( ( onScreenDialer && iNumberEntryEmpty ) || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[i] );                    
                     }                
@@ -481,7 +504,7 @@
                 break;
             case EPhoneDialerCmdSpeedDial:
                 {
-                if ( onScreenDialer && !iNumberEntryEmpty )
+                if ( ( onScreenDialer && !iNumberEntryEmpty ) || iSecurityMode )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[i] );                         
                     }
@@ -522,6 +545,26 @@
                 }
                 break;
                 
+            case EEasyDialingSettingsItemPlaceHolder:
+                {
+                if( !FeatureManager::FeatureSupported( KFeatureIdProductIncludesHomeScreenEasyDialing ) )
+                    {
+                    menuPane->DeleteMenuItem( menuItemArray[i] );
+                    }
+                }
+                break;
+			
+            case EPhoneDialerCmdHelp: // Fall through 
+            case EPhoneDialerCmdHelpDtmf: // Fall through
+            case EPhoneInCallCmdHelp:
+                {
+                if ( iSecurityMode )
+                    {
+                    menuPane->DeleteMenuItem( menuItemArray[i] );
+                    }
+                }
+			break;
+			
             default:
                 break;                                                                                                
              
@@ -664,6 +707,16 @@
     }
 
 // ---------------------------------------------------------
+// CPhoneMenuController::SetConferenceAndWaitingVideoFlag
+// ---------------------------------------------------------
+//
+void CPhoneMenuController::SetConferenceAndWaitingVideoFlag( TBool aIsConfAndWaitingVideo )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneMenuController::SetConferenceAndWaitingVideoFlag" );
+    iConferenceAndWaitingVideoFlag = aIsConfAndWaitingVideo;
+    }
+
+// ---------------------------------------------------------
 // CPhoneMenuController::SetSoftRejectFlag
 // ---------------------------------------------------------
 //
@@ -849,7 +902,8 @@
          aResourceId == R_PHONEUI_INCOMINGCALL_MENUBAR_WITH_NUMBERENTRY ||
          aResourceId == R_PHONEUI_INCOMINGVIDEOCALL_MENUBAR_WITH_NUMBERENTRY ||
          aResourceId == R_PHONEUI_WAITING_LOCK_MENUBAR ||
-         aResourceId == R_PHONEUI_TWOSINGLES_WAITING_LOCK_MENUBAR  )
+         aResourceId == R_PHONEUI_TWOSINGLES_WAITING_LOCK_MENUBAR ||
+         iSecurityMode )
         {
         iMenu->SetMenuType( CEikMenuBar::EMenuOptionsNoTaskSwapper );
         }
@@ -1037,6 +1091,16 @@
 // CPhoneMenuController::HandlePropertyChangedL
 // ---------------------------------------------------------
 //
+void CPhoneMenuController::SetSecurityMode( TBool aIsEnabled )
+	{
+	__PHONELOG1( EBasic, EPhoneUIView, "CPhoneViewController::SetSecurityMode %d ", aIsEnabled );
+	iSecurityMode = aIsEnabled;
+	}
+
+// ---------------------------------------------------------
+// CPhoneMenuController::HandlePropertyChangedL
+// ---------------------------------------------------------
+//
 void CPhoneMenuController::HandlePropertyChangedL( 
         const TUid& aCategory,
         const TUint aKey,
@@ -1058,5 +1122,52 @@
         }
     }
 
-     
+// ---------------------------------------------------------
+// CPhoneMenuController::SetInvalidCsPhoneNumberFlag
+// ---------------------------------------------------------
+//
+void CPhoneMenuController::SetInvalidCsPhoneNumberFlag( TPhoneCommandParam* aCommandParam )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneMenuController::SetInvalidCsPhoneNumberFlag()" );
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
+        {
+        TPhoneCmdParamBoolean* boolParam = 
+            static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+        
+        __PHONELOG1( 
+            EBasic, 
+            EPhonePhoneapp, 
+            "CPhoneMenuController::SetInvalidCsPhoneNumberFlag() - Boolean parameter = %d)", 
+            boolParam->Boolean() );
+        
+        iInvalidCsPhoneNumber = boolParam->Boolean();
+        }    
+    }
+
+// ---------------------------------------------------------
+// CPhoneMenuController::GetInvalidCsPhoneNumberFlag
+// ---------------------------------------------------------
+//
+void CPhoneMenuController::GetInvalidCsPhoneNumberFlag( 
+        TPhoneCommandParam* aCommandParam )
+    {
+    __LOGMETHODSTARTEND( 
+            EPhoneUIView, 
+            "CPhoneMenuController::GetInvalidCsPhoneNumberFlag()" );
+    
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
+        {
+        TPhoneCmdParamBoolean* boolParam = 
+            static_cast<TPhoneCmdParamBoolean*>( aCommandParam ); 
+        
+        __PHONELOG1( 
+            EBasic, 
+            EPhonePhoneapp, 
+            "CPhoneMenuController::GetInvalidCsPhoneNumberFlag() - Boolean return value = %d)", 
+            boolParam->Boolean() );
+
+        boolParam->SetBoolean( iInvalidCsPhoneNumber );
+        }     
+    }
+
 // End of File
--- a/phoneapp/phoneuiview/src/cphonenote.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonenote.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -21,6 +21,8 @@
 #include "phoneui.hrh"
 #include <featmgr.h>
 
+#include <eikcba.h>
+
 // ================= MEMBER FUNCTIONS =======================
 // C++ default constructor can NOT contain any code, that
 // might leave.
@@ -40,6 +42,23 @@
     }
 
 // ---------------------------------------------------------
+// CPhoneNote::PreLayoutDynInitL
+// ---------------------------------------------------------
+//
+void CPhoneNote::PreLayoutDynInitL()
+    {
+    CEikButtonGroupContainer& cba = ButtonGroupContainer();
+    CEikCba* eikCba = static_cast< CEikCba* >( cba.ButtonGroup() );
+    
+    if ( eikCba )
+        {
+        eikCba->EnableItemSpecificSoftkey( EFalse );
+        }
+    
+    CAknNoteDialog::PreLayoutDynInitL();
+    }
+
+// ---------------------------------------------------------
 // CPhoneNote::OfferKeyEventL
 // ---------------------------------------------------------
 //
--- a/phoneapp/phoneuiview/src/cphonenotecontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonenotecontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -40,7 +40,6 @@
 #include "cphonetimer.h"
 #include "cphonenote.h"
 #include "cphonedtmfsendingnote.h"
-#include "cphoneuidisablednote.h"
 
 // CONSTANTS
 const TInt KPhoneIntervalDivider = 100;
@@ -144,13 +143,6 @@
             tone = noteParam->Tone();
             break;
 
-        case EPhoneNoteUIDisabled:
-            // Use the specified values
-            resourceId = noteParam->ResourceId();
-            timeout = CAknNoteDialog::ENoTimeout;
-            tone = CAknNoteDialog::ENoTone;
-            break;
-            
         default:
             Panic( EPhoneViewCaseNotHandled );
             break;
@@ -161,10 +153,6 @@
 		{
 		iNote = new ( ELeave ) CPhoneDtmfSendingNote( reinterpret_cast<CEikDialog**>( &iNote ), *iEikEnv.EikAppUi() );						
 		}
-	else if( noteParam->Type() == EPhoneNoteUIDisabled )
-        {
-        iNote = new ( ELeave ) CPhoneUIDisabledNote( reinterpret_cast<CEikDialog**>( &iNote ), *iEikEnv.EikAppUi() );
-        }
 	else
 		{
 		iNote = new ( ELeave ) CPhoneNote( reinterpret_cast<CEikDialog**>( &iNote ), *iEikEnv.EikAppUi() );			
--- a/phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -17,8 +17,6 @@
 
 
 // INCLUDE FILES
-#include "cphoneringingtoneplayerao.h"
-
 #include <cntdef.h>
 #include <f32file.h>
 #include <featmgr.h>
@@ -33,6 +31,7 @@
 #include <DRMHelper.h>
 #include <activeidle2domainpskeys.h>
 
+#include "cphoneringingtoneplayerao.h"
 #include "phoneui.pan"
 #include "phoneui.hrh"
 #include "mphoneringingtoneobserver.h"
@@ -44,7 +43,6 @@
 #include "tphonecmdparamringtone.h"
 #include "cphonepubsubproxy.h"
 #include "cphonecenrepproxy.h"
-#include "cphonemediatorsender.h"
 
 // CONSTANTS
 
@@ -62,7 +60,7 @@
     {
     CPhoneRingingTonePlayerAO* self = 
         new ( ELeave ) CPhoneRingingTonePlayerAO();
-    
+
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -75,8 +73,7 @@
 // -----------------------------------------------------------------------------
 //
 CPhoneRingingTonePlayerAO::CPhoneRingingTonePlayerAO() :
-    CActive( CActive::EPriorityStandard ),
-    iAsyncDeletePlayers( EPlayerCount )
+    CActive( CActive::EPriorityStandard )
     {
     CActiveScheduler::Add( this );
     }
@@ -88,16 +85,12 @@
 void CPhoneRingingTonePlayerAO::ConstructL()
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructL()" );
-    
-    for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
-        {
-        User::LeaveIfError( 
-            iAsyncDeletePlayers.Append( NULL ) );
-        }
+
+    // Connect to the tone server
+    User::LeaveIfError( iToneServer.Connect() );
 
     // Construct timer.
     iTimer = CPhoneTimer::NewL();
-    iTtsDelayTimer = CPhoneTimer::NewL();
 
     // Checks if DRM extend security is needed
     TInt extSecNeeded = KErrNone;
@@ -105,36 +98,37 @@
         KCRUidMusicPlayerFeatures,
         KRequireDRMInPlayback,
         extSecNeeded );
- 
+
     iExtSecNeeded = ( ( err == KErrNone ) && extSecNeeded ) ? ETrue : EFalse;
-    
-    
+    iToneServer.SetExtendedSecurityNeeded( iExtSecNeeded );
+
     CPhoneCenRepProxy::Instance()->NotifyChangeL(
         KCRUidDRMHelperServer, 
         KDRMHelperServerNotificationPassive,
         this );
-    
 
     // Check video player configuration.
     iArbitraryVideoScaling = 
     CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported( 
             KTelephonyLVFlagArbitraryVideoScaling );
- 
+
     // Construct the default ringing tone
     TBuf<KMaxFileName> defaultTone;
-    err = CPhoneCenRepProxy::Instance()->GetString(            
+    err = CPhoneCenRepProxy::Instance()->GetString(
         KCRUidProfileEngine,
         KProEngDefaultRingingTone,
         defaultTone );
 
     if ( err == KErrNone )
         {
-        iDefaultRingingTone = CPhoneRingingTone::NewL( defaultTone );
+        iToneServer.SetDefaultRingingToneL( defaultTone );
         }
 
-    ConstructPlayers();
-    
+    // Get maximum tone file size
     GetMaxToneFileSizeL( iToneFileSizeLimitKB );
+
+    // And set the tone size limit to the tone server too
+    iToneServer.SetToneFileSizeLimit( iToneFileSizeLimitKB );
     }
 
 // -----------------------------------------------------------------------------
@@ -144,15 +138,9 @@
 CPhoneRingingTonePlayerAO::~CPhoneRingingTonePlayerAO()
     {
     Cancel();
-    
-    iAsyncDeletePlayers.ResetAndDestroy();
-    iAsyncDeletePlayers.Close();
-        
-    CleanupPlayers();
+    iToneServer.Close();
 
     delete iTimer;
-    delete iTtsDelayTimer;
-    delete iDefaultRingingTone;
     delete iAudioVideoRingingTone;
     }
 
@@ -165,16 +153,21 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayRingToneL()" );
 
-    if ( aCommandParam->ParamId() == 
-        TPhoneCommandParam::EPhoneParamIdRingTone )
+    // Check that the parameter is a ringing tone
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdRingTone )
         {
+        // Cast to get the ringing tone parameters
         TPhoneCmdParamRingTone* ringToneParam = 
             static_cast<TPhoneCmdParamRingTone*>( aCommandParam );
 
+        // Get volume and ringing tone type
         const TInt volume = ringToneParam->Volume();
         TProfileRingingType ringingType = 
             static_cast<TProfileRingingType>( ringToneParam->RingingType() );
-        
+
+        // Set ringing tone file name to server
+        iToneServer.SetRingingToneL( ringToneParam->RingTone() );
+
         if ( !iAudioVideoRingingTone )
             {
             iAudioVideoRingingTone = CPhoneRingingTone::NewL(
@@ -186,7 +179,7 @@
             iAudioVideoRingingTone->SetFileName(
                 ringToneParam->RingTone() );
             }
-        
+
         // Caller contact text and image and image has
         // higher priority than video ringing tone set for caller.
         if ( iAudioVideoRingingTone->IsVideoRingingTone() &&
@@ -199,7 +192,7 @@
             }
         else if ( iAudioVideoRingingTone->IsVideoRingingTone() &&
                 !ringToneParam->IsCallerText() )
-            {            
+            {
             // Play video ring tone
             const TBool ringToneIsPersonal = ringToneParam->Type() ==
                 EPhoneRingTonePersonal;
@@ -235,64 +228,7 @@
     TInt aVolume, 
     TProfileRingingType aRingingType )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayAudioRingTone()" );
-    __PHONELOG2( 
-        EBasic,
-        EPhoneUIView, 
-        "CPhoneRingingTonePlayerAO::PlayAudioRingTone - aVolume(%d), aRingingType(%d)",
-        aVolume,
-        aRingingType );
- 
-    if ( !iAudioVideoRingingTone ||
-         !CheckAndHandleToneSizeLimit( iAudioVideoRingingTone ) )
-        {
-        PlayDefaultTone( aVolume, aRingingType );
-        }
-    else if ( aRingingType == EProfileRingingTypeSilent )
-        {
-        PlaySilentTone();
-        }
-    else if ( aRingingType == EProfileRingingTypeBeepOnce )
-        {
-        BeepOnce( aVolume );
-        }
-    else
-        {
-        // Construct player for line 1.
-        if ( !iAudioPlayer )
-            {
-            iAudioPlayer = ConstructTonePlayer( 
-                *iAudioVideoRingingTone, 
-                EPlayerAudio );
-            if ( !iTimer->IsActive() )
-                {
-                // Start timer, since the player is constructed.
-                iTimer->After( KPhoneMaxRingingWaiting, this );
-                }
-            }
-
-        // Start playing.
-        if ( !iAudioPlayer )
-            {
-            iTimer->Cancel();
-            PlayDefaultTone( aVolume, aRingingType );
-            }
-        else
-            {
-            __PHONELOG( 
-                EBasic, 
-                EPhoneUIView, 
-                "CPhoneRingingTonePlayerAO::PlayAudioRingTone - Start playing audio" );
-            iVolume = aVolume;
-            iRingingType = aRingingType;
-            AddTtsPlaybackIfNeeded( aRingingType );
-            iTonePlayingStatus = EAudioTonePlaying;
-            iAudioPlayer->Play( 
-                ConvertRingingType( aRingingType ),
-                aVolume,
-                iTtsToneToBePlayed );
-            }
-        }
+    iToneServer.PlayAudioRingTone( aVolume, aRingingType );
     }
 
 // -----------------------------------------------------------------------------
@@ -301,25 +237,7 @@
 //
 void CPhoneRingingTonePlayerAO::BeepOnce( TInt aVolume )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::BeepOnce()" );
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::BeepOnce - aVolume(%d)",
-        aVolume );
-
-    if ( !iBeepOncePlayer )
-        {
-        ConstructSequencePlayer( EPlayerBeepOnce );
-        }
-
-    if ( iBeepOncePlayer )
-        {
-        __PHONELOG( 
-            EBasic, 
-            EPhoneUIView, 
-            "CPhoneRingingTonePlayerAO::BeepOnce - Play" );
-        iTonePlayingStatus = EBeepOnce;
-        iBeepOncePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce, 
-            aVolume, EFalse );        
-        }
+    iToneServer.BeepOnce( aVolume );
     }
 
 // -----------------------------------------------------------------------------
@@ -328,24 +246,7 @@
 //
 void CPhoneRingingTonePlayerAO::PlaySilentTone()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlaySilentTone()" );
-
-    if ( !iSilentPlayer )
-        {
-        ConstructSequencePlayer( EPlayerSilent );
-        }
-
-    __ASSERT_DEBUG( iSilentPlayer, Panic( EPhoneViewGeneralError ) );
-
-    if ( iSilentPlayer )
-        {
-        __PHONELOG( 
-            EBasic, 
-            EPhoneUIView, 
-            "CPhoneRingingTonePlayerAO::PlaySilentTone - play" );
-        iTonePlayingStatus = ESilentTonePlaying;
-        iSilentPlayer->Play( CPhoneAudioPlayer::ETypeRinging, 0, EFalse );        
-        }
+    iToneServer.PlaySilentTone();
     }
 
 // -----------------------------------------------------------------------------
@@ -354,19 +255,7 @@
 //
 void CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayUnsecureVoIPTone()" );
-    if ( !iUnsecureVoIPTonePlayer )
-        {
-        ConstructSequencePlayer( EPlayerUnsecureVoIP );
-        }
-    __ASSERT_DEBUG( iUnsecureVoIPTonePlayer, Panic( EPhoneViewGeneralError ) );
-
-    if ( iUnsecureVoIPTonePlayer )
-        {
-        iTonePlayingStatus = EUnsecureVoIPTonePlaying;
-        iUnsecureVoIPTonePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce,
-            KPhoneDefaultVolume, EFalse );
-        }
+    iToneServer.PlayUnsecureVoIPTone();
     }
 
 // -----------------------------------------------------------------------------
@@ -376,18 +265,19 @@
 void CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()" );
-    
-    if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying ||
-         iTonePlayingStatus == EPersonalVideoTonePlaying )
+
+    if ( iVideoPlayer &&
+            ( iTonePlayingStatus == EVideoTonePlaying ||
+              iTonePlayingStatus == EPersonalVideoTonePlaying ) )
         {
         // Mute the video audio
         iVideoPlayer->MuteVideoRingTone();
         iTonePlayingStatus = ESilentVideoTonePlaying;
         iVolume = 0;
         }
-    else
+    else if ( iTonePlayingStatus != ESilentVideoTonePlaying )
         {
-        DoMuteRingingTone();
+        iToneServer.MuteRingingTone();
         }
     }
 
@@ -398,16 +288,17 @@
 void CPhoneRingingTonePlayerAO::MuteRingingTone()
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingTone()" );
-    
-    if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying ||
-         iTonePlayingStatus == EPersonalVideoTonePlaying )
+
+    if ( iVideoPlayer &&
+            ( iTonePlayingStatus == EVideoTonePlaying ||
+              iTonePlayingStatus == EPersonalVideoTonePlaying ) )
         {
         // Mute the video audio
         iVideoPlayer->MuteVideoRingTone();
         iTonePlayingStatus = ESilentVideoTonePlaying;
         iVolume = 0;
         }
-    else
+    else if ( iTonePlayingStatus != ESilentVideoTonePlaying )
         {
         StopPlaying();
         }
@@ -421,104 +312,17 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::StopPlaying()" );
 
-    iTtsToneToBePlayed = EFalse;
-    iTTsTimeOutCounter = 0;
-    iTtsDelayTimer->Cancel();
-    if ( iTtsPlayer )
-        {
-        iTtsPlayer->StopPlaying();
-        delete iTtsPlayer;
-        iTtsPlayer = NULL;
-        }
-    iTimer->Cancel();
+    // Stop all playback
 
-    switch( iTonePlayingStatus )
+    iToneServer.StopPlaying();
+
+    if ( iVideoPlayer )
         {
-        case EAudioTonePlaying:
-            if( iAudioPlayer )
-                {
-                // Commented stopping out, since with this, the screen is jammed
-                // when REComSession::FinalClose() is reached in 
-                // CPhoneAudioPlayer's destructor.
-                // Audio player is stopped anyway in its destructor.
-                // Fixes EKKI-7WYG2G and JKAN-7XNGQU.
-                // iAudioPlayer->StopPlaying();                
-                delete iAudioPlayer;
-                iAudioPlayer = NULL;
-                }
-            break;
-        case EDefaultTonePlaying:
-            if ( iDefaultPlayer )
-                {
-                iDefaultPlayer->StopPlaying();
-                delete iDefaultPlayer;
-                iDefaultPlayer = NULL;
-                }
-            break;
-        case EBeepOnce:
-            if( iBeepOncePlayer )
-                {
-                iBeepOncePlayer->StopPlaying();
-                delete iBeepOncePlayer;
-                iBeepOncePlayer = NULL;
-                }
-            break;
-        case EBackupTonePlaying:
-            if( iBackupPlayer )
-                {
-                iBackupPlayer->StopPlaying();
-                }
-            break;
-        case ESilentTonePlaying:
-            if( iSilentPlayer )
-                {
-                iSilentPlayer->StopPlaying();
-                delete iSilentPlayer;
-                iSilentPlayer = NULL;
-                }
-            break;
-        case EUnsecureVoIPTonePlaying:
-            if( iUnsecureVoIPTonePlayer )
-                {
-                iUnsecureVoIPTonePlayer->StopPlaying();
-                delete iUnsecureVoIPTonePlayer;
-                iUnsecureVoIPTonePlayer = NULL;
-                }
-            break;
-        case EVideoTonePlaying: // video ringing tone
-        case EPersonalVideoTonePlaying:
-        case ESilentVideoTonePlaying:
-            if ( iBeepOncePlayer != NULL )
-                {
-                iBeepOncePlayer->StopPlaying();
-                delete iBeepOncePlayer;
-                iBeepOncePlayer = NULL;                    
-                }
-                
-            if ( iSilentPlayer != NULL )
-                {
-                iSilentPlayer->StopPlaying();
-                delete iSilentPlayer;
-                iSilentPlayer = NULL;                    
-                }    
-            if ( iVideoPlayer )
-                {
-                iVideoPlayer->StopVideoRingTone();
-                }
-            if ( iAudioVideoRingingTone )
-                {
-                delete iAudioVideoRingingTone;
-                iAudioVideoRingingTone = NULL;    
-                }
-            break;
-        case EIdle:
-            // Do nothing here.
-            return;
-        default:
-            Panic( EPhoneViewCaseNotHandled );
-            break;
+        iVideoPlayer->StopVideoRingTone();
         }
 
+    iTimer->Cancel();
+
     iTonePlayingStatus = EIdle;
     }
 
@@ -531,275 +335,7 @@
     TInt aVolume,
     TProfileRingingType aRingingType )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayTtsTone()" );
-    __PHONELOG2( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayTtsTone - aVolume(%d), aRingingType(%d)",
-        aVolume, aRingingType );
-
-    if ( iTtsPlayer )
-        {
-        delete iTtsPlayer;
-        iTtsPlayer = NULL;
-        }
-
-    //Set ringingtype for Tts.
-    iTtsRingingType = aRingingType;
-    iTtsVolume = aVolume;
-
-    // TTS should be a bit louder, than main component.
-    // No need to check for overflows, they are handled in SET_PHONE_VOLUME macro.
-    
-    TPtrC ttsHeader( KPhoneTtsHeader );
-    HBufC* preparedString = 
-        HBufC::New( aTextToSay.Length() + ttsHeader.Length() );
-
-    if ( preparedString )
-        {
-        TPtr pPreparedString = preparedString->Des();
-        pPreparedString.Append( ttsHeader );
-        pPreparedString.Append( aTextToSay );
-           
-        __PHONELOG1( 
-            EBasic, 
-            EPhoneUIView, 
-            "CPhoneRingingTonePlayerAO::PlayTtsTone - about to say %S",
-            &pPreparedString );
-
-        TRAPD( 
-            error, 
-            iTtsPlayer = CPhoneAudioPlayer::NewTtsL( 
-               *preparedString, 
-               KAudioPriorityPhoneCall, 
-               KAudioPrefTextToSpeechCallHardCoded,
-               *this, 
-               EPlayerTts ) );
-        if( error == KErrNone ) 
-            {
-            // To be played when default or personal tone will be played
-            iTtsToneToBePlayed = ETrue;
-            }
-        __PHONELOG2(
-            EBasic,
-            EPhoneUIView,
-            "CPhoneRingingTonePlayerAO::PlayTtsTone - error(%d), iTtsPhoneToBePlayed(%d)",
-            error, 
-            iTtsToneToBePlayed );
-
-        delete preparedString;  
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::HandleAudioPlayerError
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::HandleAudioPlayerError( 
-    TPhoneAudioPlayerErrorEvent /*aEvent*/, 
-    TInt aError, 
-    TInt /*aId*/ )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleAudioPlayerError()" );
-    // This is called from CPhoneAudioPlayer - we do not 
-    // want to delete instances from which this method
-    // is called.
-    
-     __PHONELOG1( EBasic, 
-                 EPhoneUIView, 
-                 "CPhoneRingingTonePlayerAO::HandleAudioPlayerError - error (%d)",
-                 aError ); 
-
-    const TBool deleteAll = ( aError == KErrServerTerminated );
-
-    if ( deleteAll )
-        {
-        // KErrServerTerminated is considered as fatal error. So we
-        // need to delete everything.
-
-        for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
-            {
-            DeletePlayerAsync( static_cast< TPlayerId >( i ) );
-            }
-
-        // Now all member audio players point to NULL, except
-        // those players in iAsyncDeletePlayers. Recreate 
-        // players.
-
-        ConstructPlayers(); // Ignore error code.
-        }
-
-    iTimer->Cancel();
-    DoHandlePlayerError( !deleteAll, EFalse );
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::HandleAudioPlayerInitComplete
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::HandleAudioPlayerInitComplete( TInt aId )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleAudioPlayerInitComplete()" );
-    // This is called from CPhoneAudioPlayer - we do not 
-    // want to delete instances from which this method
-    // is called. 
-
-    if ( iTonePlayingStatus == EAudioTonePlaying && aId == EPlayerAudio ||
-        iTonePlayingStatus == EDefaultTonePlaying && aId == EPlayerDefault )
-        {
-        iTimer->Cancel();
-        }
-   
-    if( iTtsToneToBePlayed && ( aId != EPlayerTts ) )  
-        {
-        // Start TTS timer just before "normal ringtone component" starts 
-        // playing, i.e. after init completed.
-        if ( iTtsDelayIndex < iTtsDelaysCount )  
-            {
-            if ( !iTtsDelayTimer->IsActive() )
-                {
-                // There are TTS iterations to be played yet.
-                iTtsDelayTimer->After( 
-                    KPhoneTtsDelays[iTtsDelayIndex], 
-                    TCallBack( HandleTtsDelayTimeout, this ) );
-                }
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::HandlePlayingComplete
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::HandlePlayingComplete( TInt aId )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete()" );
-    // This is called from CPhoneAudioPlayer - we do not 
-    // want to delete instances from which this method
-    // is called. 
-
-    __PHONELOG2(
-        EBasic, 
-        EPhoneUIView,
-        "CPhoneRingingTonePlayerAO::HandlePlayingComplete - aId(%d), iRingingType(%d)",
-        aId,
-        iRingingType );
-    __PHONELOG2(
-        EBasic, 
-        EPhoneUIView,
-        "CPhoneRingingTonePlayerAO::HandlePlayingComplete - iTtsToneToBePlayed(%d), iTtsDelayIndex(%d)",
-        iTtsToneToBePlayed,
-        iTtsDelayIndex );
-
-    if ( aId == EPlayerTts ) 
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - resuming after TTS" );
-
-        // TTS playing complete, normal tone player should volume up.
-        if ( ( iTtsToneToBePlayed ) && ( ++iTtsDelayIndex < iTtsDelaysCount ) )  
-            {
-            __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - resuming after TTS first time" );
-            //Callers name is said once. increase tone player volume.    
-            SolveNewVolumeAndRamptime( ESaidOnce );
-            
-            if ( !iTtsDelayTimer->IsActive() )
-                {
-                // There are TTS iterations to be played yet.
-                iTtsDelayTimer->After( KPhoneTtsDelays[iTtsDelayIndex], 
-                    TCallBack( HandleTtsDelayTimeout,this ) );
-                }
-            }
-        else
-            {
-            __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - resuming after TTS second time" );
-            SolveNewVolumeAndRamptime( ESaidTwice );
-            }
-        
-        // No further processing. All TTS player-related events are not 
-        // "real" ringtone playing completions.
-        return;
-        }
-    //Case: RingintonePlayer has completed playing with following set: ring once and
-    // TTS is activated   
-    else if ( iRingingType == EProfileRingingTypeRingingOnce && 
-        iTtsToneToBePlayed )   
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - ring once and TTS" );
-         if ( iTtsDelayIndex < iTtsDelaysCount )
-            {
-            ReStartRingingTonePlayer();
-            //Do not destroy player yet. Return.
-            return;            
-            }
-        }
-    //Case: RingintonePlayer has completed playing with following set: ringing 
-    //and TTS is activated. We need  to restart ringintoneplayer and new TTS
-    //iterations are required.
-    else if ( iRingingType == EProfileRingingTypeRinging && iTtsToneToBePlayed )
-        {  
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - ringing and TTS" );
-        if ( iTtsDelayIndex == iTtsDelaysCount )
-            {
-            //Case: Ringingtype is EProfileRingingTypeRinging. New TTS
-            //iterations are required.    
-            __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - need to restart TTS sequence" );
-            //TTS has completed its iterations,set index to zero. 
-            iTtsDelayIndex = 0;
-            if ( !iTtsDelayTimer->IsActive() )
-                {
-                //Restart TTS sequence
-                iTtsDelayTimer->After( 
-                    KPhoneTtsDelays[iTtsDelayIndex], 
-                    TCallBack( HandleTtsDelayTimeout, this ) ); 
-                }
-            }
-        
-        ReStartRingingTonePlayer();
-        //Do not destroy player yet. Return
-        return;  
-        }
-
-    __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::HandlePlayingComplete - delete player - iTonePlayingStatus(%d)",
-        iTonePlayingStatus );    
-    switch( iTonePlayingStatus )
-        {
-        case EAudioTonePlaying:
-            DeletePlayerAsync( EPlayerAudio );
-            iAudioPlayer = NULL;
-            break;
-            
-        case EDefaultTonePlaying:
-            DeletePlayerAsync( EPlayerDefault );
-            iDefaultPlayer = NULL;
-            break;
-            
-        case ESilentTonePlaying:
-            DeletePlayerAsync( EPlayerSilent );
-            iSilentPlayer = NULL;
-            break;
-
-        case EUnsecureVoIPTonePlaying:
-            DeletePlayerAsync( EPlayerUnsecureVoIP );
-            iUnsecureVoIPTonePlayer = NULL;
-            break;
-
-        case EBeepOnce:
-            DeletePlayerAsync( EPlayerBeepOnce );
-            iBeepOncePlayer = NULL;
-            break;
-            
-        case EVideoTonePlaying:
-        case EPersonalVideoTonePlaying:
-            DeletePlayerAsync( EPlayerBeepOnce );
-            iBeepOncePlayer = NULL;
-            return; // beep once + video
-            
-        case EBackupTonePlaying:
-            break;
-            
-        default:
-            Panic( EPhoneViewCaseNotHandled );
-            break;
-        }
-
-    iTonePlayingStatus = EIdle;
+    iToneServer.PlayTtsTone( aTextToSay, aVolume, aRingingType );
     }
 
 // -----------------------------------------------------------------------------
@@ -812,76 +348,11 @@
 
     // Guarding timer for startup has expired
     if ( iTonePlayingStatus == EVideoTonePlaying ||
-       iTonePlayingStatus == ESilentVideoTonePlaying ||   
-       iTonePlayingStatus == EPersonalVideoTonePlaying )
-      {
-        iVideoPlayer->CancelVideoRingTone(); // close video ringtone display
-       PlayDefaultTone( iVolume, iRingingType );
-      }
-    else
-      {
-      // Start new audio player synchronously.
-      DoHandlePlayerError( ETrue, ETrue );
-      }			
-		
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::DoHandlePlayerError
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::DoHandlePlayerError(
-    TBool aDelete,
-    TBool aSync )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandlePlayerError()" );
-    switch ( iTonePlayingStatus )
+         iTonePlayingStatus == ESilentVideoTonePlaying || 
+         iTonePlayingStatus == EPersonalVideoTonePlaying )
         {
-        case EAudioTonePlaying:
-            if ( aDelete )
-                {
-                if ( aSync )
-                    {
-                    delete iAudioPlayer;
-                    }
-                else
-                    {
-                    DeletePlayerAsync( EPlayerAudio );
-                    }
-
-                iAudioPlayer = NULL;
-                }
-
-#ifdef __WINS__
-            PlayAudioRingTone( iVolume, iRingingType );
-            iTonePlayingStatus = EDefaultTonePlaying;
-#else
-            PlayDefaultTone( iVolume, iRingingType );
-#endif
-            break;
-        case EDefaultTonePlaying:
-            if ( aDelete )
-                {
-                if ( aSync )
-                    {
-                    delete iDefaultPlayer;
-                    }
-                else
-                    {
-                    DeletePlayerAsync( EPlayerDefault );
-                    }
-
-                iDefaultPlayer = NULL;
-                }
-
-            PlayBackupTone( iVolume, iRingingType );
-            break;
-        case ESilentTonePlaying:
-        case EBeepOnce:
-        case EBackupTonePlaying:
-            break;
-        default:
-            break;
+        iVideoPlayer->CancelVideoRingTone(); // close video ringtone display
+        PlayDefaultTone( iVolume, iRingingType );
         }
     }
 
@@ -893,50 +364,7 @@
     TInt aVolume, 
     TProfileRingingType aRingingType )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone()" );
-
-    if( aRingingType == EProfileRingingTypeSilent ||
-        aRingingType == EProfileRingingTypeBeepOnce )
-        {
-        return;
-        }
-        
-    if ( !iDefaultRingingTone )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone - default tone does not exist, play backup..." );
-        PlayBackupTone( aVolume, aRingingType );
-        return;    
-        }
-
-    // Construct player.
-    if ( !iDefaultPlayer )
-        {
-        iDefaultPlayer = ConstructTonePlayer( 
-            *iDefaultRingingTone, 
-            EPlayerDefault );
-        if ( !iTimer->IsActive() )
-            {
-            iTimer->After( KPhoneMaxRingingWaiting, this );
-            }
-        }
-
-    // Start playing.
-    if ( !iDefaultPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone - player not constructed, play backup..." );
-        iTimer->Cancel();
-        PlayBackupTone( aVolume, aRingingType );
-        }
-    else
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultTone - play" );
-        iVolume = aVolume;
-        iRingingType = aRingingType;
-        iTonePlayingStatus = EDefaultTonePlaying;
-        iDefaultPlayer->Play( 
-            ConvertRingingType( aRingingType ), aVolume, iTtsToneToBePlayed );
-        }
-
+    iToneServer.PlayDefaultTone( aVolume, aRingingType );
     }
 
 // -----------------------------------------------------------------------------
@@ -947,84 +375,9 @@
     TInt aVolume, 
     TProfileRingingType aRingingType )
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayBackupTone()" );
-    __ASSERT_DEBUG( iBackupPlayer, Panic( EPhoneViewGeneralError ) );
-
-    if ( !iBackupPlayer )
-        {
-        ConstructPlayers();
-        }
-
-    if ( iBackupPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayBackupTone - play" );
-        iTonePlayingStatus = EBackupTonePlaying;
-
-        // Cease playing text-to-speech, if necessary
-        iTtsToneToBePlayed = EFalse;
-        iTTsTimeOutCounter = 0;
-        iTtsDelayTimer->Cancel();
-        if ( iTtsPlayer )
-            {
-            iTtsPlayer->StopPlaying();
-            delete iTtsPlayer;
-            iTtsPlayer = NULL;
-            }
-
-        iBackupPlayer->Play( 
-            ConvertRingingType( aRingingType ), aVolume, EFalse );        
-        }
+    iToneServer.PlayBackupTone( aVolume, aRingingType );
     }
 
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ConstructTonePlayer
-// -----------------------------------------------------------------------------
-//
-CPhoneAudioPlayer* CPhoneRingingTonePlayerAO::ConstructTonePlayer( 
-    const CPhoneRingingTone& aRingingTone,
-    TInt aId )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructTonePlayer()" );
-    return CPhoneAudioPlayer::New(
-        aRingingTone, 
-        KAudioPriorityPhoneCall, 
-        KAudioPrefIncomingCall,
-        *this, 
-        aId,
-        iMdaServer,
-        aId == EPlayerDefault ? EFalse : iExtSecNeeded );
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ConvertRingingType
-// -----------------------------------------------------------------------------
-//
-CPhoneAudioPlayer::TRingingType CPhoneRingingTonePlayerAO::ConvertRingingType(
-    TProfileRingingType aRingingType )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConvertRingingType()" );
-
-    CPhoneAudioPlayer::TRingingType ringingType = 
-        CPhoneAudioPlayer::ETypeRinging;
-    switch ( aRingingType )
-        {
-        case EProfileRingingTypeRinging:
-            ringingType = CPhoneAudioPlayer::ETypeRinging;
-            break;
-
-        case EProfileRingingTypeAscending:
-            ringingType = CPhoneAudioPlayer::ETypeAscending;
-            break;
-
-        case EProfileRingingTypeRingingOnce:
-            ringingType = CPhoneAudioPlayer::ETypeRingingOnce;
-            break;
-
-        default:
-            break;
-        }
-    return ringingType;
-    }
 
 // -----------------------------------------------------------------------------
 // CPhoneRingingTonePlayerAO::ConvertVideoRingingType
@@ -1034,7 +387,7 @@
     TProfileRingingType aRingingType )
     {
     MPhoneVideoPlayer::TPlayMode playMode;
-        
+
     switch ( aRingingType )
         {
         case EProfileRingingTypeAscending:
@@ -1048,223 +401,10 @@
             playMode = MPhoneVideoPlayer::EPlayInLoop;
             break;
         }
-    
+
     return playMode;
     }
 
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ConstructPlayers
-// -----------------------------------------------------------------------------
-//
-TInt CPhoneRingingTonePlayerAO::ConstructPlayers()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructPlayers()" );
-    TRAPD( err, ConstructPlayersL() );
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ConstructPlayersL
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::ConstructPlayersL()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructPlayersL()" );
-
-    // Construct players.
-    if ( !iMdaServer )
-        {
-        iMdaServer = CMdaServer::NewL();
-        }
-
-    // Construct Backup player.
-    if ( !iBackupPlayer )
-        {
-        TFileName defaultSoundFile( KDriveZ );
-        defaultSoundFile.Append( KPhoneDefaultSoundFile );
-        iBackupPlayer = CPhoneAudioPlayer::NewL( 
-            defaultSoundFile,
-            KAudioPriorityPhoneCall,
-            KAudioPrefIncomingCall,
-            *this,
-            EPlayerBackup,
-            iMdaServer 
-            );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ConstructSequencePlayer
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::ConstructSequencePlayer( TPlayerId aId )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructSequencePlayer()" );
-
-    // Construct players.
-    TRAPD( err, ConstructSequencePlayerL( aId ) );
-    if ( err )
-        {
-        __PHONELOG1( EBasic, EPhoneUIView, 
-        "CPhoneRingingTonePlayerAO::ConstructSequencePlayer - err(%d)", err );    
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ConstructSequencePlayerL
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::ConstructSequencePlayerL( TPlayerId aId )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ConstructSequencePlayerL()" );
-    // Construct beep once player
-    if ( aId == EPlayerBeepOnce )
-        {
-#ifdef __WINS__    
-        TParse* fp = new (ELeave) TParse();
-        fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
-        TFileName fileName( fp->FullName() );
-        delete fp;
-
-        iBeepOncePlayer = CPhoneAudioPlayer::NewL(
-            fileName, 
-            KAudioPriorityPhoneCall,
-            KAudioPrefIncomingCall,
-            *this, 
-            EPlayerBeepOnce );
-#else
-        iBeepOncePlayer = CPhoneAudioPlayer::NewSeqL(
-            KPhoneBeepSequence(),
-            KAudioPriorityPhoneCall,
-            KAudioPrefIncomingCall,
-            *this, 
-            EPlayerBeepOnce );
-#endif // __WINS__
-        }
-
-    // Construct Silent Player.
-    else if ( aId == EPlayerSilent )
-        {
-#ifdef __WINS__
-        TParse* fp = new (ELeave) TParse();
-        fp->Set( KPhoneSilentSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
-        TFileName fileName( fp->FullName() );
-        delete fp;
-
-        iSilentPlayer = CPhoneAudioPlayer::NewL( 
-            fileName, 
-            KAudioPriorityPhoneCall,
-            KAudioPrefIncomingCall,
-            *this, 
-            EPlayerSilent );
-#else
-        iSilentPlayer = CPhoneAudioPlayer::NewSeqL(
-            KPhoneNoSoundSequence(),
-            KAudioPriorityPhoneCall,
-            KAudioPrefIncomingCall,
-            *this,
-            EPlayerSilent );
-#endif // __WINS__
-        }        
-    
-    else if ( aId == EPlayerUnsecureVoIP )
-        {
-#ifdef __WINS__
-        TParse* fp = new (ELeave) TParse();
-        fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL ); 
-        TFileName fileName( fp->FullName() );
-        delete fp;
-
-        iUnsecureVoIPTonePlayer = CPhoneAudioPlayer::NewL( 
-            fileName, 
-            KAudioPrioritySpecialInformationTone,
-            KAudioPrefSpecialInformation,
-            *this, 
-            EPlayerUnsecureVoIP );
-#else
-        iUnsecureVoIPTonePlayer = CPhoneAudioPlayer::NewSeqL(
-            KPhoneUnsecureVoIPCall(),
-            KAudioPrioritySpecialInformationTone,
-            KAudioPrefSpecialInformation,
-            *this,
-            EPlayerUnsecureVoIP );
-#endif // __WINS__
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::CleanupPlayers
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::CleanupPlayers()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CleanupPlayers()" );
-
-    delete iAudioPlayer;
-    iAudioPlayer = NULL;
-
-    delete iDefaultPlayer;
-    iDefaultPlayer = NULL;
-
-    delete iBeepOncePlayer;
-    iBeepOncePlayer = NULL;
-
-    delete iSilentPlayer;
-    iSilentPlayer = NULL;
-    
-    delete iUnsecureVoIPTonePlayer;
-    iUnsecureVoIPTonePlayer = NULL;
-
-    delete iBackupPlayer;
-    iBackupPlayer = NULL;
-      
-    delete iMdaServer;
-    iMdaServer = NULL;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::DeletePlayerAsync
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::DeletePlayerAsync( TPlayerId aPlayer )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DeletePlayerAsync()" );
-    __ASSERT_DEBUG( aPlayer >= EPlayerFirst && aPlayer < iAsyncDeletePlayers.Count(),
-        Panic( EPhoneViewInvariant ) );
-        
-    // Player is not deleted here, but in RunL.
-    Cancel();
-
-    if ( iAsyncDeletePlayers[ aPlayer ] ) 
-        {
-        delete iAsyncDeletePlayers[ aPlayer ];
-        iAsyncDeletePlayers[ aPlayer ] = NULL;
-        }
-
-    CPhoneAudioPlayer** players[] =
-        {
-        &iAudioPlayer,
-        &iBeepOncePlayer,
-        &iSilentPlayer,
-        &iUnsecureVoIPTonePlayer,
-        &iDefaultPlayer,
-        &iBackupPlayer,
-        &iTtsPlayer
-        };
-
-    __ASSERT_DEBUG( iAsyncDeletePlayers.Count() > aPlayer, Panic( EPhoneUtilsIndexOutOfBounds ) );
-    iAsyncDeletePlayers[ aPlayer ] = 
-        *(players[ aPlayer ]);
-    *(players[ aPlayer ]) = NULL;
-
-    iState = EDeletingAudioPlayer;
-
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, KErrNone );
-    SetActive();
-    }
-
 // -----------------------------------------------------------------------------
 // CPhoneRingingTonePlayerAO::RunL
 // -----------------------------------------------------------------------------
@@ -1275,27 +415,17 @@
 
     switch ( iState )
         {
-        case EDeletingAudioPlayer:
-            {
-            for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
-                {
-                delete iAsyncDeletePlayers[ i ];
-                iAsyncDeletePlayers[ i ] = NULL;
-                }
-            }
-            break;
-
-      case EPlayingDefaultVideo:
+        case EPlayingDefaultVideo:
             {
             PlayAudioRingTone( iVolume, iRingingType );
             }
             break;
 
-        case EIdleState:  
+        case EIdleState:
         default:
             break;
         } // switch iState
-    
+
     iState = EIdleState;
     }
 
@@ -1308,98 +438,6 @@
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoCancel()" );
     // Request is completed immediately before SetActive.
     }
-    
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::HandleTtsDelayTimeout
-// -----------------------------------------------------------------------------
-//
-TInt CPhoneRingingTonePlayerAO::HandleTtsDelayTimeout( TAny* object )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleTtsDelayTimeout()" );
-    static_cast<CPhoneRingingTonePlayerAO*>( object )->
-        DoHandleTtsDelayTimeout();
-    return KErrNone;
-    }
-        
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout()" );
-    __PHONELOG2( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - iTtsRingingType(%d), iTTsTimeOutCounter(%d)",
-        iTtsRingingType, iTTsTimeOutCounter );
-
-    CPhoneAudioPlayer* currPlayer = NULL;
-    currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();        
-    
-    if ( !currPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - null current player" );
-        return;
-        }
-    TInt volume( 0 );
-     //Ascending case. TTs player needs to be ascending.
-    if ( iTtsRingingType == EProfileRingingTypeAscending )
-        {
-        //Volume needs to be different in different ascending steps
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - play ascending" ); 
-        if ( !iTTsTimeOutCounter )
-            {
-            //We are saying callers name for the first time in ascending mode.
-            //Say callers name by volume level KTtsVolumeMin.             
-            volume = KTtsVolumeMin;
-                
-            iTtsPlayer->Play(
-                ConvertRingingType( EProfileRingingTypeRingingOnce ),
-                volume,
-                iTtsToneToBePlayed );
-            }
-        else
-            {
-            //Checks the case that ringingtone is very quiet. Then do not play
-            //TTS too loud
-            volume = iTtsVolume < KTtsVolumeMin ? KTtsVolumeMin : KTtsVolumeAscendingRepeat;     
-                           
-            //We are saying callers name for the second time in ascending mode.
-            //Say callers name by volume level KTtsVolumeAscendingRepeat and decrease current players volume
-            //to KPlayerVolumeAscendingRepeat. RampTime is zero
-            currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, 0 );
-            iTtsPlayer->Play(
-                ConvertRingingType( EProfileRingingTypeRingingOnce ),
-                volume,
-                iTtsToneToBePlayed );
-            }
-       
-        }
-    else //Normal ringing case.
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::DoHandleTtsDelayTimeout - play normal" ); 
-        currPlayer->SetNewVolumeAndRamptime( iTtsVolume-5, 0 );                       
-        iTtsPlayer->Play(
-            ConvertRingingType( EProfileRingingTypeRingingOnce ),
-            iTtsVolume,
-            iTtsToneToBePlayed );
-        }
-      
-     iTTsTimeOutCounter++;
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::AddTtsPlaybackIfNeeded
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::AddTtsPlaybackIfNeeded( 
-        TProfileRingingType /*aRingingType*/ )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::AddTtsPlaybackIfNeeded()" );
-    if ( iTtsToneToBePlayed )   
-        {
-        iTtsDelayIndex = 0;
-        iTtsDelaysCount = KPhoneTtsDelaysCount;
-        }
-    }
 
 // -----------------------------------------------------------------------------
 // CPhoneRingingTonePlayerAO::SetVideoPlayer
@@ -1408,7 +446,7 @@
 void CPhoneRingingTonePlayerAO::SetVideoPlayer( 
     MPhoneVideoPlayer* aVideoPlayer )
     {
-    iVideoPlayer = aVideoPlayer;    
+    iVideoPlayer = aVideoPlayer;
     }
 
 // -----------------------------------------------------------------------------
@@ -1422,13 +460,13 @@
     TBool aPersonalTone )
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayVideoRingingTone()" );
-    
+
     __ASSERT_DEBUG( iVideoPlayer, Panic( EPhoneViewGeneralError ) );
-    
+
     iVolume = aVolume;
     iRingingType = aRingingType;
     TBool startTimer( ETrue );
-    
+
      // Extended security check
     if ( ExtendedSecurity() )
         {
@@ -1443,8 +481,8 @@
             }
         __PHONELOG( EBasic, 
                     EPhoneUIView, 
-                    "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - ExtSecChk ok" );            
-            }
+                    "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - ExtSecChk ok" );
+        }
  
     __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayVideoRingingTone - play" );
     switch( aRingingType )
@@ -1456,11 +494,11 @@
                 0,
                 iArbitraryVideoScaling,
                 this );
-            PlaySilentTone(); // To start vibra, video may fail.
+            iToneServer.PlaySilentTone(); // To start vibra, video may fail.
             iVolume = 0; // for repeat
             startTimer = EFalse; // no need for fallback
             break;
-        
+
         case EProfileRingingTypeBeepOnce:
             iVideoPlayer->PlayVideoRingTone( 
                 aRingingTone.FileName(),
@@ -1479,7 +517,7 @@
                 iVolume,
                 iArbitraryVideoScaling,
                 this );
-            break;                
+            break;
         }
 
     if ( aPersonalTone )
@@ -1496,7 +534,7 @@
         // Start timer to guard video opening
         iTimer->After( KPhoneMaxRingingWaiting, this );
         }
-    
+
     }
 
 // -----------------------------------------------------------------------------
@@ -1514,9 +552,9 @@
         __PHONELOG1( EBasic, 
                      EPhoneUIView, 
                      "CPhoneRingingTonePlayerAO::HandleVideoPlayerError - error (%d)",
-                     aError );        
+                     aError );
         }
-  
+
     // cancel guarding timer
     iTimer->Cancel();
 
@@ -1529,7 +567,7 @@
         if ( iAudioVideoRingingTone &&
              !iAudioVideoRingingTone->IsVideoRingingTone() )
             {
-            PlayAudioRingTone( iVolume, iRingingType );
+            iToneServer.PlayAudioRingTone( iVolume, iRingingType );
             }
         else // audio/video tone is video
             {
@@ -1551,10 +589,10 @@
 void CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete()
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleVideoPlayerInitComplete()" );
-    
+
     // cancel guarding timer
     iTimer->Cancel();
-    
+
     }
 
 // -----------------------------------------------------------------------------
@@ -1572,8 +610,8 @@
 //
 void CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()
     {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()" );    
-     
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::PlayDefaultVideoAsync()" );
+
     Cancel();
 
     iState = EPlayingDefaultVideo; 
@@ -1586,129 +624,13 @@
 // -----------------------------------------------------------------------------
 // CPhoneRingingTonePlayerAO::ExtendedSecurity
 // -----------------------------------------------------------------------------
-//    
+//
 TBool CPhoneRingingTonePlayerAO::ExtendedSecurity() const
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ExtendedSecurity()" );
-    return iExtSecNeeded;        
+    return iExtSecNeeded;
     }
 
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime( TTtsStatus aStatus )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime()" );
-
-    CPhoneAudioPlayer* currPlayer = NULL;
-    currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();
-    if ( !currPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - null current player" );
-        return;
-        }
-    TInt ramptime( 0 );
-    //Here is handled the cases when Callers name is said. Sequence is:
-    //3 sec. tone + name + 4 sec. tone + name +the tone until the end. 
-    switch ( aStatus )
-        {
-        case ESaidOnce:
-            if ( iTtsRingingType == EProfileRingingTypeAscending )
-                {
-                //The ramptime could be ( 4 )* KPhoneTtsAscendingStep but now
-                //we are setting this to 0 because when Say callers name is said
-                //for first time: play ringing tone on level 3 for four secs.
-                ramptime = 0;
-                __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said once ascending - ramptime(%d)",
-                    ramptime ); 
-                currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, ramptime );
-                }
-            else
-                {
-                 //Normal ringingtone case. Adjust volume back to profile level. 
-                __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said once normal - ramptime(%d)",
-                    ramptime ); 
-                currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 );    
-                }
-             break;
-        
-        case ESaidTwice:
-            if ( iTtsRingingType == EProfileRingingTypeAscending )
-                {
-                TInt vol = iTtsVolume;
-                if ( vol > KPlayerVolumeAscendingRepeat )
-                    {
-                    vol = vol - KTtsVolumeAscendingDecrease;
-                    }
-                          
-                //TTS playing complete for second time. increase tone player volume.
-                ramptime = ( vol )*KPhoneTtsAscendingStep;
-                __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said twice ascending - ramptime(%d)",
-                    ramptime ); 
-                currPlayer->SetNewVolumeAndRamptime( iTtsVolume, ramptime );
-                }
-            else
-                {
-                 //Normal ringingtone case. Adjust volume back to profile level. 
-                __PHONELOG1( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::SolveNewVolumeAndRamptime - said twice normal - ramptime(%d)",
-                    ramptime ); 
-                currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 );
-                }
-            break;
-        
-        default:
-            break;
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs
-// -----------------------------------------------------------------------------
-//    
-CPhoneAudioPlayer* 
-CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs()
-    {    
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs()" );
-
-    if( iAudioPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - audio player" ); 
-        return iAudioPlayer;         
-        }
-    else if ( iDefaultPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - default player" ); 
-        return iDefaultPlayer;     
-        }
-    else if( iBackupPlayer )
-        {
-        __PHONELOG( EBasic, EPhoneUIView, "CPhoneRingingTonePlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - backup player" ); 
-        return iBackupPlayer;
-        }
-    else
-        {
-        return NULL;
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ReStartRingingTonePlayer
-// -----------------------------------------------------------------------------
-//      
-void CPhoneRingingTonePlayerAO::ReStartRingingTonePlayer()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ReStartRingingTonePlayer()" );
-
-    //First get currently active player which plays among TTS player.
-    CPhoneAudioPlayer* currPlayer = NULL;
-    currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();   
-    if ( currPlayer )
-        {
-        currPlayer->ReStartPlaying();
-        }      
-    }
 
 // -----------------------------------------------------------------------------
 // CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit
@@ -1718,9 +640,9 @@
      CPhoneRingingTone* aRingingTone )
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit()" );
-    
+
     TBool bValidSize = ETrue;
- 
+
     // If user has somehow managed to get a too large file as ringing tone,
     // play default tone instead.
     if ( iToneFileSizeLimitKB )
@@ -1728,14 +650,14 @@
         if ( CheckToneFileSize( aRingingTone->FileName(), iToneFileSizeLimitKB) != KErrNone )
             {
             bValidSize = EFalse;
-            }            
+            }
         }
     __PHONELOG1( 
         EBasic,
         EPhoneUIView, 
         "CPhoneRingingTonePlayerAO::CheckAndHandleToneSizeLimit - bValidSize(%d)",
         bValidSize);
-        
+
     return bValidSize;
     }
 
@@ -1746,29 +668,29 @@
 TInt CPhoneRingingTonePlayerAO::CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB )
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::CheckToneFileSize()" );
-    
+
     // Get file size
     TInt size = 0;
     TInt error = KErrNone;
-    RFs& fs = CCoeEnv::Static()->FsSession();       
+    RFs& fs = CCoeEnv::Static()->FsSession();
     TEntry entry;
     if (KErrNone == fs.Entry( aFile, entry ))
-		{
-		size = entry.iSize;
-		}    
-        
+        {
+        size = entry.iSize;
+        }
+
     // Check
     aSizeLimitKB *= Kkilo;
     if ( aSizeLimitKB  &&  size > aSizeLimitKB )
         {
         error = KErrTooBig;
         }
-    
+
     __PHONELOG1( 
         EBasic,
         EPhoneUIView, 
         "CPhoneRingingTonePlayerAO::CheckToneFileSize - size (%d)",
-        size );    
+        size );
     return error;
     }
 
@@ -1780,132 +702,29 @@
 void CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL( TInt& aMaxSizeKB ) const
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL()" );
-    
+
     const TInt error = CPhoneCenRepProxy::Instance()->GetInt( 
             KCRUidProfileEngine,
             KProEngRingingToneMaxSize,
             aMaxSizeKB );
-   
-   	if ( error != KErrNone )
-    	{
+
+    if ( error != KErrNone )
+        {
         aMaxSizeKB = 0;
-    	}
-	if ( aMaxSizeKB < 0 )
-	    {
-	     aMaxSizeKB = 0;
-	    }
-  
+        }
+    if ( aMaxSizeKB < 0 )
+        {
+        aMaxSizeKB = 0;
+        }
+
     __PHONELOG2( 
         EBasic,
         EPhoneUIView, 
         "CPhoneRingingTonePlayerAO::GetMaxToneFileSizeL - error (%d), aMaxSizeKB(%d)",
         error,
-        aMaxSizeKB );	    
+        aMaxSizeKB );
     }
 
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::ActiveAudioPlayer
-// -----------------------------------------------------------------------------
-//
-CPhoneAudioPlayer* CPhoneRingingTonePlayerAO::ActiveAudioPlayer()
-	{
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::ActiveAudioPlayer()" );
-
-    switch( iTonePlayingStatus )
-        {
-        case EAudioTonePlaying:
-            if( iAudioPlayer != NULL )
-                {
-				return iAudioPlayer;
-                }
-            break;
-            
-        case EDefaultTonePlaying:
-            if ( iDefaultPlayer != NULL )
-                {
-				return iDefaultPlayer;
-                }
-            break;
-            
-        case EBeepOnce:
-            if( iBeepOncePlayer != NULL )
-                {
-				return iBeepOncePlayer;
-                }
-            break;
-            
-        case EBackupTonePlaying:
-            if( iBackupPlayer != NULL )
-                {
-                return iBackupPlayer;
-                }
-            break;
-            
-        case ESilentTonePlaying:
-            if( iSilentPlayer != NULL )
-                {
-                return iSilentPlayer;
-                }
-            break;
-            
-        case EUnsecureVoIPTonePlaying:
-            if( iUnsecureVoIPTonePlayer != NULL )
-                {
-                return iUnsecureVoIPTonePlayer;
-                }
-            break;
-            
-        case EVideoTonePlaying: // video ringing tone
-        case EPersonalVideoTonePlaying:
-        case ESilentVideoTonePlaying:
-            if ( iBeepOncePlayer != NULL )
-                {
-                return iBeepOncePlayer;                    
-                }    
-            else if ( iSilentPlayer != NULL )
-                {
-                return iSilentPlayer;                    
-                }    
-            break;
-            
-        default:
-            break;
-        }
-
-	return NULL;		
-	}
-
-// -----------------------------------------------------------------------------
-// CPhoneRingingTonePlayerAO::DoMuteRingingTone
-// -----------------------------------------------------------------------------
-//
-void CPhoneRingingTonePlayerAO::DoMuteRingingTone()
-	{
-    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::DoMuteRingingTone()" );
-	
-	switch( iTonePlayingStatus )
-		{
-        case EVideoTonePlaying: // video ringing tone, fall through
-        case EPersonalVideoTonePlaying: // fall through
-        case ESilentVideoTonePlaying:
-            if ( iVideoPlayer != NULL )
-	            {
-                iVideoPlayer->MuteVideoRingTone();
-                return;	            	
-	            }
-	        break;
-	        
-	    default:
-	    	break;
-		}
-	
-	CPhoneAudioPlayer* activePlayer = ActiveAudioPlayer();
-	if( activePlayer != NULL )
-		{
-		activePlayer->MutePlaying();
-		}
-	}
-
 // -----------------------------------------------------------
 // CPhoneRingingTonePlayerAO::HandleCenRepChangeL
 // -----------------------------------------------------------
@@ -1915,20 +734,20 @@
     const TUint /*aId*/ )
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::HandleCenRepChangeL()");
-    
+
     if ( aUid == KCRUidDRMHelperServer )
         {
         TBuf<256> tempBuf16( KNullDesC );
-        
+
         User::LeaveIfError( CPhoneCenRepProxy::Instance()->GetString(
             KCRUidDRMHelperServer,
             KDRMHelperServerNotificationPassive,
-            tempBuf16 ) );         
-       
+            tempBuf16 ) );
+
         const TBool idleIsTopApp = CPhonePubSubProxy::Instance()->Value(
             KPSUidAiInformation, KActiveIdleState ) == EPSAiForeground;
-       
-        // Quick validity check and    
+
+        // Quick validity check and
         // The first Tuint8 is the times the content has been informed.
         // Note should not shown until Idle.
         if ( idleIsTopApp && tempBuf16.Length() >= KPhoneMinDRMTextLength )
@@ -1936,28 +755,28 @@
             TBuf8<256> tempBuf8;
             TPtrC8 ptr((TUint8*)tempBuf16.Ptr(), tempBuf16.Size());
             HBufC8* buf8 = HBufC8::NewLC( 256 );
-            buf8->Des().Copy(ptr);  
-    	    // Extract URI etc. 
-    	    // buf8 format:
-    	    //<TUint8 aTimes><TUint8 aExpirationMark>
-    	    //<TUint8 aPermissionType>
-    	    //<TUint8 aAutomatedContentType><TDesC8 aContentID>
-     	    TInt8 count = (TInt8)(*(buf8->Ptr())); 
-    	    TChar mark = (TChar)(*(buf8->Ptr()+1));
-    	    TInt8 permtype = (TChar)(*(buf8->Ptr()+2));
-    	    TInt8 automcontenttype = (TChar)(*(buf8->Ptr()+3)); 
-    	    TBuf8<256> curi = buf8->Right( buf8->Length()-4);
-    		
-    		if (curi.Ptr()[curi.Size()-1] == 0)
-    		    {
-    		    // The last character in the descriptor is 0, which means
-    		    // that the original 16-bit desc was padded so
-    		    // remove the last char...
-    		    curi.SetLength(curi.Size()-1);
-    		    }
-    		        
-            // Create DRM helper.     
-            CDRMHelper* drmHelper = CDRMHelper::NewLC();            
+            buf8->Des().Copy(ptr);
+            // Extract URI etc. 
+            // buf8 format:
+            //<TUint8 aTimes><TUint8 aExpirationMark>
+            //<TUint8 aPermissionType>
+            //<TUint8 aAutomatedContentType><TDesC8 aContentID>
+            TInt8 count = (TInt8)(*(buf8->Ptr())); 
+            TChar mark = (TChar)(*(buf8->Ptr()+1));
+            TInt8 permtype = (TChar)(*(buf8->Ptr()+2));
+            TInt8 automcontenttype = (TChar)(*(buf8->Ptr()+3)); 
+            TBuf8<256> curi = buf8->Right( buf8->Length()-4);
+
+            if ( curi.Ptr()[curi.Size()-1] == 0 )
+                {
+                // The last character in the descriptor is 0, which means
+                // that the original 16-bit desc was padded so
+                // remove the last char...
+                curi.SetLength(curi.Size()-1);
+                }
+
+            // Create DRM helper. 
+            CDRMHelper* drmHelper = CDRMHelper::NewLC();
             // Show notification.
             drmHelper->SetAutomatedType( (CDRMHelper::TDRMHelperAutomatedType)automcontenttype );
             TInt error = drmHelper->CheckRightsAmountL( curi );
@@ -1965,11 +784,11 @@
             __PHONELOG1( EBasic, EPhoneUIView, 
                 "CPhoneRingingTonePlayerAO::HandleCenRepChangeL > CheckRightsAmountL, error: %d"
                 , error );
-                           
+
             CleanupStack::PopAndDestroy( drmHelper ); 
             CleanupStack::PopAndDestroy( buf8 ); 
             } 
         }
     }
-    
-//  End of File  
+
+//  End of File
--- a/phoneapp/phoneuiview/src/cphonestatuspane.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonestatuspane.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -45,7 +45,7 @@
 #include "tphonecmdparambitmap.h"
 #include "phonelogger.h"
 
-#include <stringloader.h>
+#include <StringLoader.h>
 
 // CONSTANTS
 
--- a/phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -30,12 +30,13 @@
 #include <phoneappcommands.hrh>
 #include <phoneui.mbg>
 
+#include "tphonecmdparamincallindicatordata.h"
 #include "cphonetoolbarcontroller.h"
-#include "PhoneUI.hrh"
-#include "PhoneRssBase.h"
-#include "TPhoneCmdParamInteger.h"
-#include "TPhoneCmdParamBoolean.h"
-#include "PhoneLogger.h"
+#include "phoneui.hrh"
+#include "phonerssbase.h"
+#include "tphonecmdparaminteger.h"
+#include "tphonecmdparamboolean.h"
+#include "phonelogger.h"
 
 
 _LIT ( KPhoneMifFileName, "phoneui.mif" );
@@ -303,6 +304,8 @@
         }
     return skinId;        
     }
+
+// ---------------------------------------------------------------------------
 // ShowToolbar
 //
 // ---------------------------------------------------------------------------
@@ -310,6 +313,7 @@
 void CPhoneToolbarController::ShowToolbar()
     {
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::ShowToolbar()" );
+
     if ( iToolbar )
         {
         if ( iToolbar->IsToolbarDisabled() )
@@ -317,7 +321,6 @@
             TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
             }
         UpdateToolbar();
-        iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
         iToolbar->SetToolbarVisibility( ETrue, EFalse );
         }
     }
@@ -332,17 +335,12 @@
     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::HideToolbar()" );
     if ( iToolbar )
         {
-        if( iToolbar->IsShown() )
-            {
-            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
-            }
-        else if ( iToolbar->IsToolbarDisabled() )
+        if ( iToolbar->IsToolbarDisabled() )
             {
             TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
-            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
-            iToolbar->SetToolbarVisibility( ETrue, EFalse );
             }
-        }        
+        iToolbar->SetToolbarVisibility( EFalse, EFalse );
+        }
     }
 
 // ---------------------------------------------------------
@@ -382,6 +380,61 @@
     }
 
 // ---------------------------------------------------------
+// CPhoneMenuController::SetWiredAccFlag
+// ---------------------------------------------------------
+//
+void CPhoneToolbarController::SetWiredAccFlag( TPhoneCommandParam* aCommandParam )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneMenuController::SetWiredAccAvailableFlag()" );
+    // Check is the given parameter valid
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
+        {
+        TPhoneCmdParamBoolean* accFlag = 
+            static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+
+        iWiredAccFlag = accFlag->Boolean();        
+        if ( iCallInProgress ) 
+            {
+            SetToolbarButtonDimmed( EPhoneInCallCmdActivateIhf, iWiredAccFlag );
+            UpdateToolbar(); 
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CPhoneToolbarController::SetCallInProgressFlag
+// ---------------------------------------------------------
+// 
+void CPhoneToolbarController::SetCallInProgressFlag( TPhoneCommandParam* aCommandParam )
+    {
+    TPhoneCmdParamIncallIndicatorData* param =
+        static_cast<TPhoneCmdParamIncallIndicatorData*>( aCommandParam );
+    
+    TInt callState = param->CallState();  
+
+    __PHONELOG1( EBasic, EPhoneUIView,
+      "CPhoneToolbarController::SetCallInProgressFlag - Current CallState = (%d)",
+      callState );
+    
+    switch ( callState )
+        {
+        case EPSCTsyCallStateUninitialized:
+        case EPSCTsyCallStateNone:
+            {
+            // No active call in progress.
+            iCallInProgress = EFalse;
+            break;
+            }                 
+        default:
+            {
+            // Active call in progress.
+            iCallInProgress = ETrue;
+            break;
+            } 
+        }
+    }
+
+// ---------------------------------------------------------
 // CPhoneToolbarController::DimToolbar
 // ---------------------------------------------------------
 //
@@ -393,8 +446,12 @@
     iToolbar->SetItemDimmed( EPhoneInCallCmdMute, aDimmed, ETrue );
     iToolbar->SetItemDimmed( EPhoneInCallCmdUnmute, aDimmed, ETrue );
     iToolbar->SetItemDimmed( EPhoneInCallCmdActivatEPhonebook, aDimmed, ETrue );
-    iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, aDimmed, ETrue );
-    iToolbar->SetItemDimmed( EPhoneInCallCmdHandset, aDimmed, ETrue );        
+    iToolbar->SetItemDimmed( EPhoneInCallCmdHandset, aDimmed, ETrue );  
+    // Don't dim/undim iHF when complete toolbar dimming is changed. 
+    if ( !iWiredAccFlag )
+        {
+        iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, aDimmed, ETrue );
+        }
     }
 
 // ---------------------------------------------------------
--- a/phoneapp/phoneuiview/src/cphoneuidisablednote.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/*
-* Copyright (c) 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"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CPhoneUIDisabledNote class.
-*
-*/
-
-
-// INCLUDE FILES
-#include "cphoneuidisablednote.h"
-#include "aknnotedialog.h"
-#include "phoneui.hrh"
-#include <featmgr.h>
-#include <aknnotedialog.h>
-#include <eikdialg.h>
-#include <aknnotecontrol.h>
-
-
-// ================= MEMBER FUNCTIONS =======================
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-CPhoneUIDisabledNote::CPhoneUIDisabledNote( CEikDialog** aSelfPtr, MEikCommandObserver& aCommandObserver )
-    : CPhoneNote( aSelfPtr, aCommandObserver ) 
-    {
-    }
-
-// ---------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------
-// 
-CPhoneUIDisabledNote::~CPhoneUIDisabledNote()
-    {
-    }
-
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::OfferKeyEventL
-// ---------------------------------------------------------
-//
-TKeyResponse CPhoneUIDisabledNote::OfferKeyEventL( 
-    const TKeyEvent& aKeyEvent,
-    TEventCode /*aType*/ )
-    {
-    // Let key events be handled by the application
-	return EKeyWasNotConsumed;
-    }
-
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::OkToExitL
-// ---------------------------------------------------------
-//
-TBool CPhoneUIDisabledNote::OkToExitL( TInt aCommand )
-    {
-    // Let the command observer process the command
-    iCommandObserver.ProcessCommandL( aCommand );
-
-    return EFalse; // so that the dialog will not disappear
-    }
-    
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::SetNoteType
-// ---------------------------------------------------------
-//
-void CPhoneUIDisabledNote::SetNoteType( TPhoneNoteType aNoteType )
-    {
-    iNoteType = aNoteType;
-    }
-
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::NoteType
-// ---------------------------------------------------------
-//
-TPhoneNoteType CPhoneUIDisabledNote::NoteType()
-    {
-    return iNoteType;
-    }
-
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::HandlePointerEventL
-// ---------------------------------------------------------
-//
-void CPhoneUIDisabledNote::HandlePointerEventL( 
-    const TPointerEvent& /* aPointerEvent */ )
-    {
-    }
-
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::UpdateSoftkeysL
-// ---------------------------------------------------------
-//
-void CPhoneUIDisabledNote::UpdateSoftkeysL( TInt aResourceId )
-    {
-    CEikButtonGroupContainer& buttonGroup = ButtonGroupContainer();
-    buttonGroup.SetCommandSetL( aResourceId );
-    
-    buttonGroup.DrawDeferred();
-    }
-
-// ---------------------------------------------------------
-// CPhoneUIDisabledNote::SetSizeAndPosition
-// ---------------------------------------------------------
-//
-void CPhoneUIDisabledNote::SetSizeAndPosition( const TSize& aSize )
-    {
-    CAknNoteDialog::SetSizeAndPosition( aSize );
-    
-	// Override the original layout position to prevent note to hide the call bubble
-	// Will be changed when layout is available	
-    TRect clientRect = CEikonEnv::Static()->EikAppUi()->ClientRect();
-    TRect noteRect;
-    TInt leftMargin = (TInt) ( (clientRect.Width() - aSize.iWidth) / 2);    // Set note to center
-
-    noteRect.SetRect( leftMargin,                // iTl.iX
-            clientRect.iBr.iY - aSize.iHeight,   // iTl.iY
-            leftMargin + aSize.iWidth,           // iBr.iX
-            clientRect.iBr.iY );                 // iBr.iY
-    
-    SetRect( noteRect );
-    }
-
-// End of File
--- a/phoneapp/phoneuiview/src/cphoneview.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphoneview.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -49,7 +49,7 @@
 #include <layoutmetadata.cdl.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
-#include <aknstatuspaneutils.h>
+#include <AknStatuspaneUtils.h>
 
 enum TPhoneBgLayers
     {
@@ -66,11 +66,7 @@
 // -----------------------------------------------------------------------------
 //
 CPhoneView::CPhoneView( CEikButtonGroupContainer& aCba ) :
-    iSecurityMode ( EFalse ),
-    iActivatePreviousApp( EFalse ),
-    iPhoneAppViewToDialer( EFalse ),
-    iCba ( aCba ),
-    iDialerActivation( EFalse )
+    iCba ( aCba )
     {
     }
 
@@ -151,7 +147,7 @@
                 if ( iSecurityMode )
                     {
                     static_cast<MEikCommandObserver*>( iEikonEnv->EikAppUi() )
-                    ->ProcessCommandL( EPhoneNumberAcqSecurityDialer );
+						->ProcessCommandL( EPhoneViewOpenNumberEntry );
                     return;
                     }
                  else
@@ -313,8 +309,7 @@
         }
     else
         {
-        if ( Layout_Meta_Data::IsLandscapeOrientation() ||
-             iSecurityMode )
+        if ( Layout_Meta_Data::IsLandscapeOrientation() )
             {
             // In landscape and in security mode aRect is ok.
             CCoeControl::SetRect( aRect );    
@@ -371,8 +366,7 @@
         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
         MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
         
-        if ( iSecurityMode || 
-            !AknsDrawUtils::Background( skin, cc, this, gc, aRect ) )
+        if ( !AknsDrawUtils::Background( skin, cc, this, gc, aRect ) )
             {
             gc.SetPenStyle(CGraphicsContext::ENullPen);
             gc.SetBrushColor( AKN_LAF_COLOR( 0 ) ); // 0 for white
@@ -502,23 +496,10 @@
 //
 void CPhoneView::SetSecurityMode ( TBool aStatus )
     {
-    if ( iSecurityMode != aStatus ) 
-        {
-        iSecurityMode = aStatus;
-        SizeChanged();    
-        }
+    iSecurityMode = aStatus;
     }
     
 // -----------------------------------------------------------------------------
-// CPhoneView::IsSecurityMode
-// -----------------------------------------------------------------------------
-//
-TBool CPhoneView::IsSecurityMode()    
-    {
-    return iSecurityMode;
-    }
-
-// -----------------------------------------------------------------------------
 // CPhoneView::GetActivatePreviousApp
 // -----------------------------------------------------------------------------
 //
--- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005 - 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"
@@ -23,6 +23,8 @@
 #include "cphonetoolbarcontroller.h"
 #include "cphonebuttonscontroller.h"
 #include "cphonedialercontroller.h"
+#include "cphoneeasydialingcontroller.h"
+#include "cphonedtmfdialercontroller.h"
 #include "cphonemenucontroller.h"
 #include "cphonenotecontroller.h"
 #include "cphonequerycontroller.h"
@@ -71,6 +73,7 @@
 #include "tphonecmdparampointer.h"
 #include "dialer.hrh"
 #include "phoneui.hrh"
+#include "musmanager.h"
 #include <apgtask.h>
 #include <apgwgnam.h>
 #include <apacmdln.h>
@@ -106,7 +109,7 @@
 #include <cphcntcontactid.h>
 #include <AknUtils.h>
 #include <AknSgcc.h>
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
 #include <UikonInternalPSKeys.h>
 #include <startupdomainpskeys.h>
 #include <utf.h>
@@ -128,11 +131,14 @@
 #include <gfxtranseffect/gfxtranseffect.h>
 #include <akntranseffect.h>
 
-#include <GSLauncher.h> // Call Settings launch.
+#include <gslauncher.h> // Call Settings launch.
+
+#include <dialingextensioninterface.h>
+#include <easydialingcommands.hrh>
 
 // Kastor effect IDs, aknskincontent/101f84b9.sel
-const TInt KTouchDialerOpenEffect  = 1505;
-const TInt KTouchDialerCloseEffect = 1506;
+const TInt KTouchDialerOpenEffect  = 3;
+const TInt KTouchDialerCloseEffect = 5;
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -144,7 +150,7 @@
 //
 CPhoneViewController::CPhoneViewController() :
     iEikEnv( *CEikonEnv::Static() ),
-    iNeedToSendToBackground( EFalse ),
+    iNeedToReturnToForegroundAppAfterCall( EFalse ),
     iHelpCommand( KINCAL_HLP_CALL_HANDLING ),
     iBlockingDialogIsDisplayed( EFalse ),
     iIdleUid( KErrNotFound ),
@@ -209,32 +215,40 @@
         iEikEnv.WsSession(),
         iEikEnv.WsSession().FindWindowGroupIdentifier( 0, KPhoneEikonServer ) );
 
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    
     if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
         {
         iButtonsController = CPhoneButtonsController::NewL( iBubbleWrapper->TouchPane() );
+        iToolbarController = CPhoneToolbarController::NewL( *coeEnv );
         }
 
     if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) )
         {
+        iDialerActive = EFalse;
+        // Create dialer controller
+        iDialerController = CPhoneDialerController::NewL( iBubbleWrapper,
+                                                          *coeEnv );
         // Create dialer view
         iDialerView = CPhoneDialerView::NewL( aRect );
         iDialerView->DrawableWindow()->SetOrdinalPosition( -1 );
         iDialerView->MakeVisible( EFalse );
         // Create dialer
-        iDialer = CDialer::NewL( *iDialerView, aRect );
+        iDialer = CDialer::NewL( *iDialerView, aRect, iDialerController );
         // Set NE for bubbleWrapper
         iBubbleWrapper->SetNumberEntry( iDialer->NumberEntry() );
-        CCoeEnv* coeEnv = static_cast<CCoeControl*>(iDialer)->ControlEnv();
-        iDialerController = CPhoneDialerController::NewL( *iBubbleWrapper,
-                                                            *coeEnv,
-                                                            *iMenuController );
+        iBubbleWrapper->SetNumberEntryObserver( *this );
+        // Finalise dialer view
+        iDialerView->SetControl( iDialer );
+        iDialerView->ActivateL();
         
-        iToolbarController = CPhoneToolbarController::NewL( *coeEnv  );
-                                                           
-      
-		iDialerView->SetControl( iDialer );
-		iDialerView->ActivateL();
-		iDialerActive = EFalse;
+        // Create controller for Easy Dialing
+        iEasyDialingController = CPhoneEasyDialingController::NewL( *iDialer );
+        iDialerController->SetEasyDialingController( iEasyDialingController );
+        
+        // Create controller for DTMF mode of the dialer
+        iDtmfDialerController = CPhoneDtmfDialerController::NewL( iBubbleWrapper, 
+                                                                  *coeEnv );
         }
 
     User::LeaveIfError( iKeyLock.Connect() );
@@ -298,6 +312,10 @@
             }
         delete iDialerView;
         }
+		
+	delete iEasyDialingController;
+	delete iDtmfDialerController;
+		
     delete iDialer;
     if ( iSingleItemFetch )
         {
@@ -482,10 +500,6 @@
             iKeyLock.EnableKeyLock();
             break;
 
-        case EPhoneViewEnableKeyLockWithoutNote:
-            iKeyLock.EnableWithoutNote();
-            break;
-            
         case EPhoneViewDisableKeyLockWithoutNote:
             iKeyLock.DisableWithoutNote();
             break;
@@ -542,7 +556,7 @@
             {
             if ( iDialer )
                 {
-                iDialerController->UpdateToolbar();
+                iDialer->UpdateToolbar();
                 }
             }
             break;
@@ -615,9 +629,9 @@
             }
             break;  
 
-        case EPhoneViewDisableKeyLock:
+        case EPhoneViewLaunchMultimediaSharing:
             {
-            DisableKeyLock();
+            LaunchMultimediaSharingL();
             }
             break;
 
@@ -745,8 +759,13 @@
             break;
 
         case EPhoneViewMenuPane:
-            iMenuController->SetReplaceFlag( IsReplaceAllowed() );
-            iMenuController->DynInitMenuPaneL( aCommandParam );
+            // First offer initialization to easydialing, and if no
+            // initialization done, give it to the menu controller.
+            if ( !iEasyDialingController->InitializeEasyDialingMenuL( aCommandParam ) )
+                {
+                iMenuController->SetReplaceFlag( IsReplaceAllowed() );
+                iMenuController->DynInitMenuPaneL( aCommandParam );
+                }
             break;
 
         case EPhoneViewMenuBar:
@@ -814,8 +833,8 @@
             }
             break;
 
-        case EPhoneViewSetNeedToSendToBackgroundStatus:
-            SetNeedToSendToBackground( aCommandParam );
+        case EPhoneViewSetNeedToReturnToForegroundAppStatus:
+            SetNeedToReturnToForegroundAppAfterCall( aCommandParam );
             break;
 
        case EPhoneViewSetBlockingDialogStatus:
@@ -858,6 +877,7 @@
             iMenuController->CloseMenuBar();
             iIncallIndicator->Update( aCommandParam );
             iMenuController->SetCallInProgressFlag( aCommandParam );
+            iToolbarController->SetCallInProgressFlag( aCommandParam );            
             break;
 
         case EPhoneViewStartCapturingKey:
@@ -918,7 +938,7 @@
 
             if ( iDialer )
                 {
-                iDialerController->SetServiceCodeFlagL( aCommandParam );
+                iDialerController->SetServiceCodeFlag( aCommandParam );
                 }
             break;
 
@@ -961,14 +981,6 @@
             iStatusPane->SetTitlePanePictureL( aCommandParam );
             break;
 
-       case EPhoneViewSetSecurityMode:
-            SetSecurityMode( aCommandParam );
-            break;
-
-       case EPhoneViewGetSecurityModeStatus:
-            GetSecurityModeStatus( aCommandParam );
-            break;
-
        case EPhoneViewSetStatusPaneVisible:
             SetStatusPaneVisible( aCommandParam );
             break;
@@ -1057,24 +1069,19 @@
                 {
                 TPhoneCmdParamBoolean* booleanParam =
                     static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
-                iDialerController->SetDtmfDialerVisibleL(
-                                                booleanParam->Boolean() );
+                if ( booleanParam->Boolean() )
+                    {
+                    iDialer->SetControllerL( iDtmfDialerController );
+                    }
+                else
+                    {
+                    iDialer->SetControllerL( iDialerController );
+                    }
                  }
             break;
             }
 
-        case EPhoneViewSetRetrictedDialer:
-            {
-            if ( iDialer )
-                {
-                TPhoneCmdParamBoolean* booleanParam =
-                    static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
-                iDialerController->SetRestrictedDialer(
-                                                booleanParam->Boolean() );
-                }
-            break;
-            }
-        case EPhoneViewSetDtmfOptionsFlag:
+         case EPhoneViewSetDtmfOptionsFlag:
             {
             TPhoneCmdParamBoolean*  booleanParam =
                 static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
@@ -1106,10 +1113,12 @@
 
         case EPhoneViewShowCustomizedDialer:
             {
-            TPhoneCmdParamCustomDialer* customDialerParam =
-                static_cast<TPhoneCmdParamCustomDialer*>( aCommandParam );
-            iDialerController->ShowCustomizedDialerL(
-                                      customDialerParam->DialerController() );
+            if ( iDialer )
+                {
+                TPhoneCmdParamCustomDialer* customDialerParam =
+                    static_cast<TPhoneCmdParamCustomDialer*>( aCommandParam );
+                iDialer->SetControllerL( customDialerParam->DialerController() );
+                }
             }
             break;
         case EPhoneViewGetNumberFromEntry:
@@ -1148,7 +1157,28 @@
             iToolbarController->DimToolbar( booleanParam->Boolean());
             break;
             }
-
+            
+        case EPhoneViewSetInvalidCsPhoneNumberFlag:
+            iMenuController->SetInvalidCsPhoneNumberFlag( aCommandParam );
+            break;
+                
+        case EPhoneViewGetInvalidCsPhoneNumberFlag:
+            iMenuController->GetInvalidCsPhoneNumberFlag( aCommandParam );
+            break;
+
+        case EPhoneViewGetEasyDialingMenuId:
+        case EPhoneViewGetEasyDialingCbaId:
+                {
+                iEasyDialingController->ExecuteCommandL( aCmdId, aCommandParam );
+                }
+            break;
+        case EPhoneViewSetConferenceAndWaitingVideo:
+            {
+            TPhoneCmdParamBoolean*  booleanParam =
+                            static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+            iMenuController->SetConferenceAndWaitingVideoFlag( booleanParam->Boolean() );
+			}
+            break;
         default:
             __PHONELOG( EBasic, EPhonePhoneapp,
              "CPhoneViewController::ExecuteCommandL -> UnKnownMessage !!! " );
@@ -1372,14 +1402,24 @@
                     static_cast<TPhoneCmdParamTransEffect*>( aCommandParam )->Type();
                 TBool isForeground = iAppui->IsForeground();
 
-                if ( isForeground && // newer run effect if not at front
+                // Check whether the idle is on foreground
+                TBool idleInFore = ForegroundApplicationWindowGroupId() ==  IdleWindowGroupId() ?
+                        ETrue : EFalse;
+                
+                if ( ( isForeground && // Newer run effect if not at front
                      ( ( type == EPhoneTransEffectDialerCreate && !iDialerActive ) ||
                        ( type == EPhoneTransEffectDialerOpen && !iDialerActive &&
-                         iBubbleWrapper->IsNumberEntryUsed() ) ||
+                         iBubbleWrapper->IsNumberEntryUsed() )) ||
                        ( type == EPhoneTransEffectDialerClose && iDialerActive ) ) )
                     {
                     HandleTransitionEffect( type );
                     }
+                // In case transition is from idle to dialer show transition effects as well.                 
+                 else if ( idleInFore && !iDialerActive &&
+                          type == EPhoneTransEffectDialerOpen )
+                    {
+                    HandleTransitionEffect( type );
+                    }
                 }
             break;
             }
@@ -1408,14 +1448,14 @@
 
         case EPhoneViewSetNumberEntryObserver:
             {
-            NumberEntryChangedHandler()->SetNumberEntryChangedCallBack(
-                                                aCommandParam );
+            iBubbleWrapper->SetNumberEntryChangedCallBack( aCommandParam );
             break;
             }
         case EPhoneViewGetSingleItemFetchType:
+            {
             static_cast<TPhoneCmdParamInteger*>( aCommandParam )->SetInteger( SingleItemFetchType() );
             break;
-
+            }
         case EPhoneViewSetPhoneCustomization:
             {
             TPhoneCmdParamPointer* pointerParam =
@@ -1447,9 +1487,18 @@
             break;
 			
         case EPhoneViewEnableToolbarButton:
+            {
             TPhoneCmdParamInteger*  integerParam =
                 static_cast<TPhoneCmdParamInteger*>( aCommandParam );
             iToolbarController->SetToolbarButtonDimmed( integerParam->Integer(), EFalse );
+            }
+            break;
+            
+        case EPhoneViewGetQwertyModeObserver:
+            {
+            TPhoneCmdParamPointer* ptrParam = static_cast<TPhoneCmdParamPointer*>( aCommandParam );
+            ptrParam->SetPointer( static_cast<TAny*>( iDialer ) );
+            }
             break;
 
         default:
@@ -1493,14 +1542,33 @@
                 }
              break;
 
-        case EPhoneViewIsNumberEntryNumericMode:
+         case EPhoneViewGetEasyDialingInFocusStatus:
+         case EEasyDialingVoiceCall:
+         case EEasyDialingVideoCall:
+         case EEasyDialingSendMessage:
+         case EEasyDialingOpenContact:
+         case EEasyDialingCallHandlingActivated:
+         case EEasyDialingEnterKeyAction:
+         case EEasyDialingOn:
+         case EEasyDialingOff:
+             if ( iDialer )
+                 {
+                 viewResponse = iEasyDialingController->HandleCommandL( aCmdId );
+                 }
+             else
+                 {
+                 viewResponse = EPhoneViewResponseFailed;
+                 }
+             break;
+
+         case EPhoneViewIsNumberEntryNumericMode:
             viewResponse = iBubbleWrapper->IsNENumericMode() ?
                 EPhoneViewResponseSuccess :
                 EPhoneViewResponseFailed;
             break;
 
-        case EPhoneViewGetNeedToSendToBackgroundStatus:
-            viewResponse = NeedToSendToBackground() ?
+        case EPhoneViewGetNeedToReturnToForegroundAppStatus:
+            viewResponse = GetNeedToReturnToForegroundAppAfterCall() ?
                 EPhoneViewResponseSuccess :
                 EPhoneViewResponseFailed;
             break;
@@ -1541,12 +1609,6 @@
           }
           break;
 
-        case EPhoneViewIsKeyLockEnabled:
-            viewResponse = IsKeyLockEnabled() ?
-                EPhoneViewResponseSuccess :
-                EPhoneViewResponseFailed;
-            break;          
-
     // Dialer specific commands start
 
     // Dialer handles these commands.
@@ -1579,9 +1641,9 @@
         case EPhoneViewIsDTMFEditorVisible:
             if ( iDialer )
                 {
-                viewResponse = iDialerController->IsDTMFDialerVisible() ?
+                viewResponse = ( IsDtmfDialerActive() ?
                     EPhoneViewResponseSuccess :
-                    EPhoneViewResponseFailed;
+                    EPhoneViewResponseFailed );
                 }
             else // non-touch.
                 {
@@ -1615,8 +1677,19 @@
                     }
                 // Set Number Entry CBA
                 TPhoneCmdParamInteger integerParam;
-                integerParam.SetInteger( CPhoneMainResourceResolver::Instance()->
-                    ResolveResourceID( EPhoneNumberAcqCBA ) );
+                if ( iSecurityMode )
+                	{
+                    iNoteController->DestroyNote();
+                    integerParam.SetInteger(
+                    CPhoneMainResourceResolver::Instance()->
+                              		ResolveResourceID( EPhoneEmergencyModeNoteCBA ) );
+                              	}
+                              else
+                              	{
+                              	integerParam.SetInteger(
+                              		CPhoneMainResourceResolver::Instance()->
+                              		ResolveResourceID( EPhoneNumberAcqCBA ) );
+                              	}
                 ExecuteCommandL( EPhoneViewUpdateCba, &integerParam );
                 // Set flag to false because dialler is set to open status.
                 iPhoneView->SetPhoneAppViewToDialer( EFalse );
@@ -1631,13 +1704,13 @@
                     RemovePhoneDialogsL();
                     }
                 // Remove DTMF dialer when exist
-                if ( iDialerController->IsDTMFDialerVisible() )
+                if ( IsDtmfDialerActive() )
                     {
                     static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
                     ->ProcessCommandL( EPhoneDtmfDialerExit );
                     }
                 else if ( iCustomization && 
-                          iDialerController->IsCustomizedDialerVisible() )
+                          IsCustomDialerActive() )
                     {
                     iCustomization->HandleCommandL( 
                        *this, EPhoneViewOpenCallHandling, NULL );
@@ -1663,7 +1736,7 @@
             // If dialer was not active and needtosendback is false
             // then check if dialer view is to be opened.
             if ( !iDialerActive &&
-                 !iNeedToSendToBackground &&
+                 !iNeedToReturnToForegroundAppAfterCall &&
                  iPhoneView->PhoneAppViewToDialer() )
                 {
                 SetControltoDialerL();
@@ -1683,7 +1756,7 @@
 
         case EPhoneIsCustomizedDialerVisible:
             {
-            viewResponse = iDialerController->IsCustomizedDialerVisible() ?
+            viewResponse = IsCustomDialerActive() ?
                 EPhoneViewResponseSuccess :
                 EPhoneViewResponseFailed;
             }
@@ -1691,8 +1764,11 @@
 
         case EPhoneViewHideCustomizedDialer:
             {
-            iDialerController->HideCustomizedDialer();
-            viewResponse = EPhoneViewResponseSuccess;
+            if ( iDialer )
+                {
+                iDialer->SetControllerL( iDialerController );
+                viewResponse = EPhoneViewResponseSuccess;
+                }
             }
             break;
         case EPhoneViewShowToolbar:
@@ -1820,7 +1896,7 @@
                 }
             else
                 {
-                TBool status;
+                TBool status( EFalse );
                 TRAP( err, status = GetNumberFromSpeedDialLocationL( aCommandParam ))
                 if ( err )
                     {
@@ -1841,19 +1917,19 @@
 
         case EPhoneViewGetCustomizedDialerMenuResourceId:
             {
-            TInt resId = iDialerController->CustomizedMenuResourceId();
+            TInt resId = iDialer->Controller()->MenuResourceId(); // easydialing change
             static_cast<TPhoneCmdParamInteger*>( aCommandParam )->SetInteger( resId );
             viewResponse = EPhoneViewResponseSuccess;
             }
             break;
         case EPhoneViewGetCustomizedDialerCbaResourceId:
             {
-            TInt resId = iDialerController->CustomizedCbaResourceId();
+            TInt resId = iDialer->Controller()->CbaResourceId(); // easydialing change
             static_cast<TPhoneCmdParamInteger*>( aCommandParam )->SetInteger( resId );
             viewResponse = EPhoneViewResponseSuccess;
             }
             break;
-
+            
         default:
             if ( iCustomization )
                 {
@@ -2029,18 +2105,13 @@
                         "CPhoneViewController::HandleResourceChangeL()" )
     // Notify the bubble that there has been a resource change
     iBubbleWrapper->Control()->HandleResourceChange( aType );
-
+    
     // Notify dialer and switch statuspane layout.
     if ( iDialer )
         {
         if ( aType == KEikDynamicLayoutVariantSwitch )
             {
             SwitchLayoutToFlatStatusPaneL( iDialerActive );
-            
-            if ( !iDialerActive && Layout_Meta_Data::IsLandscapeOrientation() )
-                {        
-                iDialerController->HideToolbar(); 
-                }
             }
         static_cast<CCoeControl*>(iDialer)->HandleResourceChange( aType );
         }
@@ -2064,10 +2135,10 @@
     __PHONELOG( EBasic, EPhoneUIView,"CPhoneViewController::HandleLayoutChange()" )
     iPhoneView->SetRect( aRect );
     if ( iDialerView )
-	    {
-		iDialerView->SetRect( aRect );
-		iStatusPane->UpdateTitlePane();
-	    }
+        {
+        iDialerView->SetRect( aRect );
+        iStatusPane->UpdateTitlePane();
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -2080,6 +2151,28 @@
     }
 
 // ---------------------------------------------------------------------------
+// CPhoneViewController::HandleSecurityModeChanged
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPhoneViewController::HandleSecurityModeChanged( TBool aIsEnabled )
+	{
+	 __PHONELOG1( EBasic, EPhoneUIView,
+            "CPhoneViewController::SetSecurityMode Mode = (%d)", aIsEnabled );
+    iToolbarController->DimToolbar( aIsEnabled );			
+	iPhoneView->SetSecurityMode( aIsEnabled );
+	iMenuController->SetSecurityMode( aIsEnabled );
+	if ( iDialer )
+		{
+		iDialerController->SetRestrictedDialer( aIsEnabled );
+		if ( iSecurityMode != aIsEnabled )
+			{
+			iDialer->RelayoutAndDraw();
+			}
+		}
+	iSecurityMode = aIsEnabled;
+	}
+
+// ---------------------------------------------------------------------------
 // CPhoneViewController::IdleAppUid
 // ---------------------------------------------------------------------------
 //
@@ -2112,6 +2205,17 @@
     }
 
 // ---------------------------------------------------------------------------
+// CPhoneViewController::NumberEntryStateChanged
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::NumberEntryStateChanged( TBool aEntryHasText )
+    {
+    iMenuController->SetNumberEntryEmptyFlag( !aEntryHasText );
+    iBubbleWrapper->HandleNumberEntryChanged();
+    ExecuteCommandL( EPhoneViewUpdateToolbar );
+    }
+
+// ---------------------------------------------------------------------------
 // CPhoneViewController::GetBlockingDialogIsDisplayed
 // ---------------------------------------------------------------------------
 //
@@ -2126,45 +2230,7 @@
         }
     }
 
-// ---------------------------------------------------------------------------
-// CPhoneViewController::GetSecurityModeStatus
-// ---------------------------------------------------------------------------
-//
-void CPhoneViewController::GetSecurityModeStatus(
-    TPhoneCommandParam* aCommandParam )
-    {
-    if( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
-        {
-        TPhoneCmdParamBoolean* booleanValue =
-            static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
-        booleanValue->SetBoolean( iPhoneView->IsSecurityMode() );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CPhoneViewController::SetNeedToSendToBackground
-// ---------------------------------------------------------------------------
-//
-void CPhoneViewController::SetNeedToSendToBackground(
-    TPhoneCommandParam* aCommandParam )
-    {
-    TPhoneCmdParamBoolean* booleanParam = static_cast<TPhoneCmdParamBoolean*>(
-        aCommandParam );
-
-    iNeedToSendToBackground = booleanParam->Boolean();
-    __PHONELOG1( EBasic, EPhoneUIView,
-        "CPhoneViewController::SetNeedToSendToBackground(%d)",
-        iNeedToSendToBackground );
-    }
-
-// ---------------------------------------------------------------------------
-// CPhoneViewController::NeedToSendToBackground
-// ---------------------------------------------------------------------------
-//
-TBool CPhoneViewController::NeedToSendToBackground()
-    {
-    return iNeedToSendToBackground;
-    }
+
 
 // ---------------------------------------------------------------------------
 // CPhoneViewController::SendToBackgroundL
@@ -2218,7 +2284,7 @@
         }
 
     // Clear the send to background flag
-    iNeedToSendToBackground = EFalse;
+    iNeedToReturnToForegroundAppAfterCall = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -2510,6 +2576,17 @@
     }
 
 // ---------------------------------------------------------------------------
+// CPhoneViewController::LaunchMultimediaSharingL (static)
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::LaunchMultimediaSharingL()
+    {
+    CMusManager* manager = CMusManager::NewLC();
+    manager->StartApplicationL( MultimediaSharing::EMusLiveVideo );
+    CleanupStack::PopAndDestroy( manager );
+    }
+
+// ---------------------------------------------------------------------------
 // CPhoneViewController::LaunchApplicationL
 // ---------------------------------------------------------------------------
 //
@@ -2596,7 +2673,9 @@
     TInt resourceId = cbaResource->Integer();
 
     iCba->SetCommandSetL( resourceId );
+    
     iCba->DrawDeferred();
+    
     }
 
 // ---------------------------------------------------------------------------
@@ -2662,30 +2741,6 @@
         booleanParam->Boolean() );
     }
 
-// ---------------------------------------------------------
-// CPhoneViewController::IsKeyLockEnabled
-// ---------------------------------------------------------
-//
-TBool CPhoneViewController::IsKeyLockEnabled()
-    {
-    TBool keylock;
-    keylock = iKeyLock.IsKeyLockEnabled();
-    __PHONELOG1( EBasic, EPhoneUIView,
-        "CPhoneViewController::IsKeyLockEnabled(%d)", keylock );
-    return keylock;
-    }
-
-// ---------------------------------------------------------
-// CPhoneViewController::DisableKeyLock
-// ---------------------------------------------------------
-//
-void CPhoneViewController::DisableKeyLock()
-    {
-    __PHONELOG( EBasic, EPhoneUIView,
-        "CPhoneViewController::DisableKeyLock()");
-    return iKeyLock.DisableWithoutNote();
-    }
-
 // CPhoneViewController::CancelAllNotications
 // ---------------------------------------------------------------------------
 //
@@ -2945,15 +3000,13 @@
     // Indicate that the contact operation is blocking key
     // events from the Phone
     iBlockingDialogIsDisplayed = ETrue;
-    TBool numberAssigned;
-    TRAPD( err,
-        numberAssigned = AssignSpeedDialLocationL(
-        locationParam->Integer()))
+    TBool numberAssigned = EFalse;
+    TRAP_IGNORE( numberAssigned = AssignSpeedDialLocationL(locationParam->Integer()) );
 
     // Reset the flag
     iBlockingDialogIsDisplayed = EFalse;
 
-    return err ? EFalse : numberAssigned;
+    return numberAssigned;
     }
 
 // ---------------------------------------------------------------------------
@@ -3174,7 +3227,7 @@
 
     // Wired options
     iMenuController->SetWiredAccFlag( &wiredParam );
-
+    iToolbarController->SetWiredAccFlag( &wiredParam );
     iMenuController->SetIhfFlag( &ihfParam );
     iToolbarController->SetIhfFlag( &ihfParam );
 
@@ -3216,6 +3269,7 @@
 
     // Wired options
     iMenuController->SetWiredAccAvailableFlag( &wiredAvailableParam );
+    iToolbarController->SetWiredAccFlag( &wiredAvailableParam );
 
     // btaa menu options
     iMenuController->SetBTAccAvailableFlag( &btAvailableParam );
@@ -3415,21 +3469,6 @@
     CleanupStack::PopAndDestroy( phoneNumber );
     }
 
-// ---------------------------------------------------------------------------
-// CPhoneViewController::SetSecurityMode
-// ---------------------------------------------------------------------------
-//
-void CPhoneViewController::SetSecurityMode(
-                                        TPhoneCommandParam* aCommandParam )
-    {
-    __LOGMETHODSTARTEND(EPhoneUIView,
-        "CPhoneViewController::SetSecurityMode()" );
-    TPhoneCmdParamBoolean* booleanParam = static_cast<TPhoneCmdParamBoolean*>(
-        aCommandParam );
-    iPhoneView->SetSecurityMode( booleanParam->Boolean() );
-    iStatusPane->StatusPane().MakeVisible( !booleanParam->Boolean() );
-    }
-
 // -----------------------------------------------------------
 // CPhoneViewController::SetStatusPaneVisible
 // -----------------------------------------------------------
@@ -3616,9 +3655,7 @@
              currentLayout == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL )
             {
             SwapEmptyIndicatorPaneInSecureStateL( EFalse );
-
-            iStatusPane->NaviPane().Pop();
-
+            
             if ( !Layout_Meta_Data::IsLandscapeOrientation() )
                 {
                 iStatusPane->StatusPane().SwitchLayoutL
@@ -3646,11 +3683,7 @@
     {
     __LOGMETHODSTARTEND(EPhoneUIView,
         "CPhoneViewController::SwapEmptyIndicatorPaneInSecureStateL()" );
-
-    TPhoneCmdParamBoolean security;
-    GetSecurityModeStatus( &security );
-
-    if ( security.Boolean() )
+    if ( iSecurityMode )
         {
         if ( aSwapEmpty )
             {
@@ -3734,24 +3767,36 @@
         {
         iDialerActive = ETrue;
 
+        // Hide in-call view toolbar
+        iToolbarController->HideToolbar();
+
+        // Ensure that toolbar and menu commands are up-to-date 
+        TBuf<1> temp; // we are only interested if the text is empty or not
+        iDialer->GetTextFromNumberEntry( temp );
+        NumberEntryStateChanged( temp.Length() > 0 );
+        
         // Make dialer view top most
         iDialerView->DrawableWindow()->SetOrdinalPosition(
             iPhoneView->DrawableWindow()->OrdinalPosition() );
-        iDialerView->MakeVisible( ETrue );
-        iDialerView->DrawNow();
 
         SwitchLayoutToFlatStatusPaneL( ETrue );
 
         iPhoneView->DrawableWindow()->SetOrdinalPosition( -1 );
         iPhoneView->MakeVisible( EFalse );
 
-        iToolbarController->HideToolbar();
-        iDialerController->ShowToolbar();
-
         // Update control stack
         iAppui->AddToStackL( iDialerView );
-		iAppui->RemoveFromStack( iPhoneView );
-		}
+        iAppui->RemoveFromStack( iPhoneView );
+
+        // Don't make dialer view visible before status pane is updated.
+        // This prevents unnecessary resizings.
+        iDialerView->MakeVisible( ETrue );
+        // Number entry is emptied when dialer is hidden but drawing doesn't
+        // succeed at that point as dialer is hidden first. So must draw
+        // dialer as soon as it becomes visible to prevent the flashing of
+        // number entry (DrawDeferred() isn't fast enough here).
+        iDialerView->DrawNow();
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -3763,34 +3808,35 @@
     __PHONELOG1( EBasic, EPhoneUIView,
         "CPhoneViewController::SetControltoCallHandlingL iDialerActive (%d)", iDialerActive );
 
+    // Do not show toolbar if emergency call is active
+    if ( !iIncallIndicator->IsEmergencyCall() )
+        {
+        iToolbarController->ShowToolbar();
+        }
     if ( iDialerActive )
         {
         iDialerActive = EFalse;
-
+        // Hide dialer view. Do this before resizing status pane to prevent unnecessary
+        // resizing of dialer components. Hiding dialer view already before showing
+        // phone view might cause screen flickering but tests have proven it doesn't happen.
+        iDialerView->MakeVisible( EFalse );
+        
         SwitchLayoutToFlatStatusPaneL( EFalse );
 
-		// Make call handling view top most
-		iPhoneView->DrawableWindow()->SetOrdinalPosition(
+        // Make call handling view top most
+        iPhoneView->DrawableWindow()->SetOrdinalPosition(
             iDialerView->DrawableWindow()->OrdinalPosition() );
         iPhoneView->MakeVisible( ETrue );
         iPhoneView->DrawNow();
 
-		iDialerView->DrawableWindow()->SetOrdinalPosition( -1 );
-        iDialerView->MakeVisible( EFalse );
-
-        iDialerController->HideToolbar();
+        iDialerView->DrawableWindow()->SetOrdinalPosition( -1 );
 
         // Update control stack
-		iAppui->AddToStackL( iPhoneView );
-		iAppui->RemoveFromStack( iDialerView );
-		}
-    
-    // If securitymode or emergency call not show toolbar
-	if ( !iPhoneView->IsSecurityMode() && 
-	     !iIncallIndicator->IsEmergencyCall() )
-		{
-    	iToolbarController->ShowToolbar();
-		}
+        iAppui->AddToStackL( iPhoneView );
+        iAppui->RemoveFromStack( iDialerView );
+        
+        iEasyDialingController->HandleCommandL( EEasyDialingCallHandlingActivated );
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -3897,16 +3943,57 @@
     }
 
 // ---------------------------------------------------------------------------
-// CPhoneViewController::NumberEntryChangedHandler
+// CPhoneViewController::IsDtmfDialerActive
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneViewController::IsDtmfDialerActive() const
+    {
+    TBool ret = 
+            ( iDialer && iDtmfDialerController && 
+              iDialer->Controller() == iDtmfDialerController );
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneViewController::IsCustomDialerActive
 // ---------------------------------------------------------------------------
 //
-MPhoneNumberEntryChangedHandler* CPhoneViewController::NumberEntryChangedHandler() const
+TBool CPhoneViewController::IsCustomDialerActive() const
     {
-    if( iDialerController )
-        return iDialerController;
-    else
-        return iBubbleWrapper;
-
+    TBool ret = EFalse;
+    if ( iDialer )
+        {
+        MPhoneDialerController* curController = iDialer->Controller();
+        ret = ( curController && 
+                curController != iDialerController && 
+                curController != iDtmfDialerController );
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneViewController::SetNeedToReturnToForegroundAppAfterCall
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::SetNeedToReturnToForegroundAppAfterCall(
+    TPhoneCommandParam* aCommandParam )
+    {
+    TPhoneCmdParamBoolean* booleanParam = static_cast<TPhoneCmdParamBoolean*>(
+        aCommandParam );
+
+    iNeedToReturnToForegroundAppAfterCall = booleanParam->Boolean();
+    __PHONELOG1( EBasic, EPhoneUIView,
+        "CPhoneViewController::SetNeedToReturnToForegroundAppAfterCall(%d)",
+        iNeedToReturnToForegroundAppAfterCall );
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneViewController::GetNeedToReturnToForegroundAppAfterCall
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneViewController::GetNeedToReturnToForegroundAppAfterCall() const
+    {
+    return iNeedToReturnToForegroundAppAfterCall;
     }
 
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/phoneringingtoneclient.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2002-2005,2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Client interface of the phone ringing tone server.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32std.h>
+#include <e32svr.h>
+
+#include "phoneringingtoneclient.h"
+#include "phoneringingtonesrv.h"
+#include "phoneringingtonesrv.hrh"
+#include "phoneuiviewtrace.h"
+
+// LOCAL FUNCTION PROTOTYPES
+static TInt StartServer();
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::RPhoneRingingTonePlayer
+// -----------------------------------------------------------------------------
+//
+RPhoneRingingTonePlayer::RPhoneRingingTonePlayer() : RSessionBase()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::~RPhoneRingingTonePlayer
+// -----------------------------------------------------------------------------
+//
+RPhoneRingingTonePlayer::~RPhoneRingingTonePlayer()
+    {
+    Close();
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::Connect
+// -----------------------------------------------------------------------------
+//
+TInt RPhoneRingingTonePlayer::Connect()
+    {
+    PHONEUIVIEW_PRINT("RPhoneRingingTonePlayer::Connect <");
+    TInt retries = 3;
+    TInt err = KErrNone;
+
+    while(retries--)
+        {
+        err = CreateSession( KRingingToneServerName, 
+            TVersion( KRingingToneSrvVersionMajor,KRingingToneSrvVersionMinor,KRingingToneSrvVersionBuild ) );
+
+        PHONEUIVIEW_PRINTF("RPhoneRingingTonePlayer::Connect: CreateSession err %d", err);
+        if ( ( err != KErrNotFound ) && ( err != KErrServerTerminated ) )
+            {
+            break;
+            }
+
+        err = StartServer();
+
+        PHONEUIVIEW_PRINTF("RPhoneRingingTonePlayer::Connect: StartServer err %d", err);
+        if ( ( err != KErrNone ) && ( err != KErrAlreadyExists ) )
+            {
+            break;
+            }
+        }
+
+    PHONEUIVIEW_PRINTF("RPhoneRingingTonePlayer::Connect, ret %d >", err);
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// StartServer
+// -----------------------------------------------------------------------------
+//
+TInt StartServer()
+{
+    PHONEUIVIEW_PRINT("RPhoneRingingTonePlayer - StartServer <");
+
+    // Form thread name
+    TTime time;
+    time.UniversalTime();
+
+    TFullName threadName;
+    threadName.Format( _L("PhoneRingingToneThread%Ld"), time.Int64() );
+
+    // Create thread
+    RThread thread;
+    TInt err = thread.Create( threadName, CPhoneRingingToneServer::ThreadEntryFunc, 0x8000, NULL, NULL );
+    if ( err != KErrNone )
+        {
+        return err;
+        }
+
+    PHONEUIVIEW_PRINT("RPhoneRingingTonePlayer - StartServer: thread created");
+
+    // Bump thread priority
+    thread.SetPriority( EPriorityAbsoluteHigh );
+
+    // Rendezvous with the thread
+    TRequestStatus status;
+    thread.Rendezvous( status );
+    if ( status != KRequestPending )
+        {
+        thread.Kill( 0 );
+        }
+    else
+        {
+        thread.Resume();
+        }
+
+    PHONEUIVIEW_PRINT("RPhoneRingingTonePlayer - StartServer: waiting for rendezvous");
+
+    // Wait for thread start or death
+    User::WaitForRequest( status );
+    thread.Close();
+
+    PHONEUIVIEW_PRINTF("RPhoneRingingTonePlayer - StartServer: rendezvous: %d", status.Int());
+
+    PHONEUIVIEW_PRINT("RPhoneRingingTonePlayer - StartServer >");
+    return status.Int();
+}
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::SetExtendedSecurityNeeded
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::SetExtendedSecurityNeeded( TBool aNeeded )
+    {
+    SendReceive( ESetExtendedSecurityNeeded, TIpcArgs( aNeeded ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::SetToneFileSizeLimit
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::SetToneFileSizeLimit( TInt aLimit )
+    {
+    SendReceive( ESetToneFileSizeLimit, TIpcArgs( aLimit ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::SetRingingToneL
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::SetRingingToneL( const TDesC& aFilename )
+    {
+    User::LeaveIfError( SendReceive( ESetAudioRingingTone, TIpcArgs( &aFilename ) ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::SetDefaultRingingToneL
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::SetDefaultRingingToneL( const TDesC& aFilename )
+    {
+    User::LeaveIfError( SendReceive( ESetDefaultRingingTone, TIpcArgs( &aFilename ) ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::PlayAudioRingTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::PlayAudioRingTone( TInt aVolume, TProfileRingingType aRingingType )
+    {
+    SendReceive( EPlayAudioRingTone, TIpcArgs( aVolume, aRingingType ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::PlayTtsTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::PlayTtsTone( const TDesC& aTextToSay, TInt aVolume, TProfileRingingType aRingingType )
+    {
+    SendReceive( EPlayTtsTone, TIpcArgs( &aTextToSay, aVolume, aRingingType ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::PlayDefaultTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::PlayDefaultTone( TInt aVolume, TProfileRingingType aRingingType )
+    {
+    SendReceive( EPlayDefaultTone, TIpcArgs( aVolume, aRingingType ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::PlayBackupTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::PlayBackupTone( TInt aVolume, TProfileRingingType aRingingType )
+    {
+    SendReceive( EPlayBackupTone, TIpcArgs( aVolume, aRingingType ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::PlaySilentTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::PlaySilentTone()
+    {
+    SendReceive( EPlaySilentTone );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::BeepOnce
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::BeepOnce( TInt aVolume )
+    {
+    SendReceive( EBeepOnce, TIpcArgs( aVolume ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::PlayUnsecureVoIPTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::PlayUnsecureVoIPTone()
+    {
+    SendReceive( EPlayUnsecureVoIPTone );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::MuteRingingTone
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::MuteRingingTone()
+    {
+    SendReceive( EMuteRingingTone );
+    }
+
+// -----------------------------------------------------------------------------
+// RPhoneRingingTonePlayer::StopPlaying
+// -----------------------------------------------------------------------------
+//
+void RPhoneRingingTonePlayer::StopPlaying()
+    {
+    SendReceive( EStopPlaying );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/phoneringingtonesrv.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,384 @@
+/*
+* Copyright (c) 2002-2005,2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Ringing tone server.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+
+#include "phoneringingtonesrv.h"
+#include "phoneringingtonesrvsession.h"
+#include "phoneringingtonesrvplayerao.h"
+#include "phoneuiviewtrace.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::CPhoneRingingToneServer
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServer::CPhoneRingingToneServer()
+    : CServer2( EPriorityHigh )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::~CPhoneRingingToneServer
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServer::~CPhoneRingingToneServer()
+    {
+    delete iPlayer; 
+    iPlayer = 0;
+    iFs.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::NewLC
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServer* CPhoneRingingToneServer::NewLC()
+    {
+    CPhoneRingingToneServer* self = new (ELeave) CPhoneRingingToneServer;
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::ConstructL()
+    {
+    User::LeaveIfError( iFs.Connect() );
+
+    // Allocate player
+    iPlayer = CPhoneRingingToneSrvPlayerAO::NewL( iFs );
+
+    // Try to start the server
+    StartL( KRingingToneServerName );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::NewSessionL
+// -----------------------------------------------------------------------------
+//
+CSession2* CPhoneRingingToneServer::NewSessionL( const TVersion& /*aVersion*/,  const RMessage2& /*aMessage*/ ) const
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServerSession::NewSessionL" );
+
+    return CPhoneRingingToneServerSession::NewL( *const_cast<CPhoneRingingToneServer*>(this) );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::IncrementSessions
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::IncrementSessions()
+    {
+    iSessionCount++;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::DecrementSessions
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::DecrementSessions()
+    {
+    if ( --iSessionCount <= 0 )
+        {
+        CActiveScheduler::Stop();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::ThreadEntryFunc
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingToneServer::ThreadEntryFunc( TAny* /*aPtr*/ )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::ThreadEntryFunc <" );
+    // Allocate cleanup stack, active scheduler and server
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    CActiveScheduler* scheduler = new CActiveScheduler;
+
+    // Check that all allocations were ok
+    if ( !cleanup || !scheduler )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::ThreadEntryFunc: OOM" );
+        // Out of memory
+        delete scheduler;
+        delete cleanup;
+
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::ThreadEntryFunc >" );
+        return KErrNoMemory;
+        }
+
+    // Install active scheduler
+    CActiveScheduler::Install( scheduler );
+
+    // Run the server
+    TRAPD( err, CPhoneRingingToneServer::RunServerL() );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::ThreadEntryFunc: RunServerL err %d", err );
+
+    // Uninstall active scheduler
+    CActiveScheduler::Install( NULL );
+
+    // Cleanup
+    delete scheduler;
+    delete cleanup;
+
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::RunServerL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::RunServerL()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::RunServerL <" );
+
+    // Allocate server
+    CPhoneRingingToneServer* server = CPhoneRingingToneServer::NewLC();
+
+    // Notify that we're running
+    RThread::Rendezvous( KErrNone );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::RunServerL: server is running!" );
+
+    // Start active scheduler
+    CActiveScheduler::Start();
+
+    CleanupStack::PopAndDestroy(); // server
+
+    // Won't stop until all sessions to the server are closed (last one calls CActiveScheduler::Stop)
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::RunServerL >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetExtendedSecurityNeeded
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetExtendedSecurityNeeded( TBool aNeeded )
+    {
+    iPlayer->SetExtendedSecurityNeeded( aNeeded );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetToneFileSizeLimit
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetToneFileSizeLimit( TInt aLimit )
+    {
+    iPlayer->SetToneFileSizeLimit( aLimit );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetRingingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetRingingToneL( const RMessage2& aMessage )
+    {
+    // Read filename from the message
+    TFileName filename;
+    TInt len = aMessage.GetDesLength( 0 );
+
+    aMessage.ReadL( 0, filename );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::SetRingingToneL: %S", &filename );
+
+    // Give the ringing tone to the player
+    iPlayer->SetRingingToneL( filename );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetDefaultRingingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetDefaultRingingToneL( const RMessage2& aMessage )
+    {
+    // Read filename from the message
+    TFileName filename;
+    TInt len = aMessage.GetDesLength( 0 );
+
+    aMessage.ReadL( 0, filename );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::SetDefaultRingingToneL: %S", &filename );
+
+    // Give the default tone to the player
+    iPlayer->SetDefaultRingingToneL( filename );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayAudioRingTone
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingToneServer::PlayAudioRingTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayAudioRingTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int0();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int1();
+
+    PHONEUIVIEW_PRINTF2(
+            "CPhoneRingingToneServer::PlayAudioRingTone: volume=%d, ringingType=%d", 
+            volume, ringingType);
+
+    TBool ret = iPlayer->PlayAudioRingTone( volume, ringingType, aMessage );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayAudioRingTone >" );
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayTtsTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayTtsTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int1();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int2();
+
+    TInt ttsLen = aMessage.GetDesLength( 0 );
+    HBufC* textToSay = HBufC::New( ttsLen );
+    if ( !textToSay )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone: OOM!" );
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone >" );
+        return;
+        }
+
+    TPtr ptr( textToSay->Des() );
+
+    TInt err = aMessage.Read( 0, ptr );
+    if ( err != KErrNone )
+        {
+        PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::PlayTtsTone: read err %d", err );
+        delete textToSay;
+        return;
+        }
+
+    PHONEUIVIEW_PRINTF3(
+            "CPhoneRingingToneServer::PlayTtsTone: text=%S, volume=%d, ringingType=%d", 
+            &(*textToSay), volume, ringingType );
+
+    iPlayer->PlayTtsTone( *textToSay, volume, ringingType );
+
+    // Cleanup
+    delete textToSay;
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayDefaultTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayDefaultTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayDefaultTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int0();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int1();
+
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneServer::PlayDefaultTone: volume=%d, ringingType=%d", 
+        volume, ringingType );
+
+    iPlayer->PlayDefaultTone( volume, ringingType );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayDefaultTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayBackupTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayBackupTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayBackupTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int0();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int1();
+
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneServer::PlayBackupTone: volume=%d, ringingType=%d", 
+        volume, ringingType );
+
+    iPlayer->PlayBackupTone( volume, ringingType );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayBackupTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlaySilentTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlaySilentTone()
+    {
+    iPlayer->PlaySilentTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::BeepOnce
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::BeepOnce( const RMessage2& aMessage )
+    {
+    iPlayer->BeepOnce( aMessage.Int0() );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayUnsecureVoIPTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayUnsecureVoIPTone()
+    {
+    iPlayer->PlayUnsecureVoIPTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::MuteRingingTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::MuteRingingTone()
+    {
+    iPlayer->MuteRingingTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::StopPlaying
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::StopPlaying()
+    {
+    iPlayer->StopPlaying();
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/phoneringingtonesrvplayerao.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,1564 @@
+/*
+* Copyright (c) 2002-2005,2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Active object of the ringing tone player.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <f32file.h>
+#include <utility.h>
+#include <AudioPreference.h>
+
+#include "phoneui.pan"
+#include "cphoneringingtone.h"
+#include "cphoneaudioplayer.h"
+#include "cphonetimer.h"
+#include "phoneringingtonesrvplayerao.h"
+#include "phoneringingtonesrv.h"
+#include "phoneconstants.h"
+#include "phoneuiviewtrace.h"
+
+#ifdef __WINS__
+#include <data_caging_path_literals.hrh>
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::NewL
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneSrvPlayerAO* CPhoneRingingToneSrvPlayerAO::NewL( RFs& aFs )
+    {
+    CPhoneRingingToneSrvPlayerAO* self =
+        new ( ELeave ) CPhoneRingingToneSrvPlayerAO( aFs );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::CPhoneRingingToneSrvPlayerAO
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneSrvPlayerAO::CPhoneRingingToneSrvPlayerAO( RFs &aFs ) :
+    CActive( CActive::EPriorityStandard ),
+    iFs( aFs ),
+    iAsyncDeletePlayers( EPlayerCount )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::ConstructL()
+    {
+    for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
+        {
+        User::LeaveIfError(
+            iAsyncDeletePlayers.Append( NULL ) );
+        }
+
+    // Construct timer.
+    iTimer = CPhoneTimer::NewL();
+    iTtsDelayTimer = CPhoneTimer::NewL();
+
+    ConstructPlayers();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::~CPhoneRingingToneSrvPlayerAO
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneSrvPlayerAO::~CPhoneRingingToneSrvPlayerAO()
+    {
+    Cancel();
+
+    iAsyncDeletePlayers.ResetAndDestroy();
+    iAsyncDeletePlayers.Close();
+
+    CleanupPlayers();
+
+    delete iTimer;
+    delete iTtsDelayTimer;
+    delete iDefaultRingingTone;
+    delete iAudioVideoRingingTone;
+
+    if ( iClientMessage.Handle() )
+        {
+        iClientMessage.Complete( KErrNone );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::PlayAudioRingTone
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingToneSrvPlayerAO::PlayAudioRingTone(
+    TInt aVolume,
+    TProfileRingingType aRingingType,
+    const RMessage2& aMessage )
+    {
+
+    TBool messageSaved = EFalse;
+    iTimer->Cancel();
+
+    // Release any old client (shouldn't happen)
+    if ( iClientMessage.Handle() )
+        {
+        iClientMessage.Complete( KErrNone );
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayAudioRingTone <" );
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneSrvPlayerAO::PlayAudioRingTone - aVolume(%d), aRingingType(%d)",
+        aVolume,
+        aRingingType );
+
+    if ( !iAudioVideoRingingTone ||
+         !CheckAndHandleToneSizeLimit( iAudioVideoRingingTone ) )
+        {
+        PlayDefaultTone( aVolume, aRingingType );
+        }
+    else if ( aRingingType == EProfileRingingTypeSilent )
+        {
+        PlaySilentTone();
+        }
+    else if ( aRingingType == EProfileRingingTypeBeepOnce )
+        {
+        BeepOnce( aVolume );
+        }
+    else
+        {
+        // Construct player for line 1.
+        if ( !iAudioPlayer )
+            {
+            iAudioPlayer = ConstructTonePlayer(
+                *iAudioVideoRingingTone,
+                EPlayerAudio );
+
+            if ( !iTimer->IsActive() )
+                {
+                PHONEUIVIEW_PRINT( "RING TONE FAILSAFE TIMER START!!" );
+                // Start timer, since the player is constructed.
+                iTimer->After( KPhoneMaxRingingWaiting, this );
+                }
+            }
+
+        // Start playing.
+        if ( !iAudioPlayer )
+            {
+            iTimer->Cancel();
+            PlayDefaultTone( aVolume, aRingingType );
+            }
+        else
+            {
+            PHONEUIVIEW_PRINT(
+                "CPhoneRingingToneSrvPlayerAO::PlayAudioRingTone - Start playing audio" );
+            iVolume = aVolume;
+            iRingingType = aRingingType;
+            AddTtsPlaybackIfNeeded( aRingingType );
+            iTonePlayingStatus = EAudioTonePlaying;
+
+            // Save the client message which will be completed after init/error/timeout
+            iClientMessage = aMessage;
+            messageSaved = ETrue;
+
+            iAudioPlayer->Play(
+                ConvertRingingType( aRingingType ),
+                aVolume,
+                iTtsToneToBePlayed );
+            }
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayAudioRingTone >" );
+
+    return messageSaved;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::BeepOnce
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::BeepOnce( TInt aVolume )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::BeepOnce <" );
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::BeepOnce - aVolume(%d)", aVolume );
+
+    if ( !iBeepOncePlayer )
+        {
+        ConstructSequencePlayer( EPlayerBeepOnce );
+        }
+
+    if ( iBeepOncePlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::BeepOnce - Play" );
+        iTonePlayingStatus = EBeepOnce;
+        iBeepOncePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce,
+            aVolume, EFalse );
+        }
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::BeepOnce >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO,::PlaySilentTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::PlaySilentTone()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlaySilentTone <" );
+
+    if ( !iSilentPlayer )
+        {
+        ConstructSequencePlayer( EPlayerSilent );
+        }
+
+    __ASSERT_DEBUG( iSilentPlayer, Panic( EPhoneViewGeneralError ) );
+
+    if ( iSilentPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlaySilentTone - play" );
+        iTonePlayingStatus = ESilentTonePlaying;
+        iSilentPlayer->Play( CPhoneAudioPlayer::ETypeRinging, 0, EFalse );
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlaySilentTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::PlayUnsecureVoIPTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::PlayUnsecureVoIPTone()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayUnsecureVoIPTone <" );
+    if ( !iUnsecureVoIPTonePlayer )
+        {
+        ConstructSequencePlayer( EPlayerUnsecureVoIP );
+        }
+    __ASSERT_DEBUG( iUnsecureVoIPTonePlayer, Panic( EPhoneViewGeneralError ) );
+
+    if ( iUnsecureVoIPTonePlayer )
+        {
+        iTonePlayingStatus = EUnsecureVoIPTonePlaying;
+        iUnsecureVoIPTonePlayer->Play( CPhoneAudioPlayer::ETypeRingingOnce,
+            KPhoneDefaultVolume, EFalse );
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayUnsecureVoIPTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::MuteRingingTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::MuteRingingTone()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::MuteRingingTone <" );
+
+    CPhoneAudioPlayer* activePlayer = ActiveAudioPlayer();
+    if ( activePlayer )
+        {
+        activePlayer->MutePlaying();
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::MuteRingingTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::StopPlaying
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::StopPlaying()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::StopPlaying <" );
+
+    // Complete waiting client just in case
+    if ( iClientMessage.Handle() )
+        {
+        iClientMessage.Complete( KErrNone );
+        }
+
+    iTtsToneToBePlayed = EFalse;
+    iTTsTimeOutCounter = 0;
+    iTtsDelayTimer->Cancel();
+    if ( iTtsPlayer )
+        {
+        iTtsPlayer->StopPlaying();
+        delete iTtsPlayer;
+        iTtsPlayer = NULL;
+        }
+    iTimer->Cancel();
+
+    switch( iTonePlayingStatus )
+        {
+        case EAudioTonePlaying:
+            if ( iAudioPlayer )
+                {
+                // Commented stopping out, since with this, the screen is jammed
+                // when REComSession::FinalClose() is reached in
+                // CPhoneAudioPlayer's destructor.
+                // Audio player is stopped anyway in its destructor.
+                // Fixes EKKI-7WYG2G and JKAN-7XNGQU.
+                // iAudioPlayer->StopPlaying();
+                delete iAudioPlayer;
+                iAudioPlayer = NULL;
+                }
+            break;
+        case EDefaultTonePlaying:
+            if ( iDefaultPlayer )
+                {
+                iDefaultPlayer->StopPlaying();
+                delete iDefaultPlayer;
+                iDefaultPlayer = NULL;
+                }
+            break;
+        case EBeepOnce:
+            if ( iBeepOncePlayer )
+                {
+                iBeepOncePlayer->StopPlaying();
+                delete iBeepOncePlayer;
+                iBeepOncePlayer = NULL;
+                }
+            break;
+        case EBackupTonePlaying:
+            if ( iBackupPlayer )
+                {
+                iBackupPlayer->StopPlaying();
+                }
+            break;
+        case ESilentTonePlaying:
+            if ( iSilentPlayer )
+                {
+                iSilentPlayer->StopPlaying();
+                delete iSilentPlayer;
+                iSilentPlayer = NULL;
+                }
+            break;
+        case EUnsecureVoIPTonePlaying:
+            if ( iUnsecureVoIPTonePlayer )
+                {
+                iUnsecureVoIPTonePlayer->StopPlaying();
+                delete iUnsecureVoIPTonePlayer;
+                iUnsecureVoIPTonePlayer = NULL;
+                }
+            break;
+        case EIdle:
+            break;
+        default:
+            Panic( EPhoneViewCaseNotHandled );
+            break;
+        }
+
+    iTonePlayingStatus = EIdle;
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::StopPlaying >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::PlayTtsTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::PlayTtsTone(
+    const TDesC& aTextToSay,
+    TInt aVolume,
+    TProfileRingingType aRingingType )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayTtsTone <" );
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneSrvPlayerAO::PlayTtsTone - aVolume(%d), aRingingType(%d)",
+        aVolume, aRingingType );
+
+    if ( iTtsPlayer )
+        {
+        delete iTtsPlayer;
+        iTtsPlayer = NULL;
+        }
+
+    //Set ringingtype for Tts.
+    iTtsRingingType = aRingingType;
+    iTtsVolume = aVolume;
+
+    // TTS should be a bit louder, than main component.
+    // No need to check for overflows, they are handled in SET_PHONE_VOLUME macro.
+
+    TPtrC ttsHeader( KPhoneTtsHeader );
+    HBufC* preparedString =
+        HBufC::New( aTextToSay.Length() + ttsHeader.Length() );
+
+    if ( !preparedString )
+        {
+        PHONEUIVIEW_PRINTF3(
+            "CPhoneRingingToneSrvPlayerAO::PlayTtsTone: Couldn't allocate buf %d + %d = %d",
+            aTextToSay.Length(), ttsHeader.Length(), aTextToSay.Length()+ttsHeader.Length() );
+        }
+    else
+        {
+        TPtr pPreparedString = preparedString->Des();
+        pPreparedString.Append( ttsHeader );
+        pPreparedString.Append( aTextToSay );
+
+        PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::PlayTtsTone - about to say %S",
+            &pPreparedString );
+
+        TRAPD(
+            error,
+            iTtsPlayer = CPhoneAudioPlayer::NewTtsL(
+               *preparedString,
+               KAudioPriorityPhoneCall,
+               KAudioPrefTextToSpeechCallHardCoded,
+               *this,
+               EPlayerTts ) );
+        if ( error == KErrNone )
+            {
+            // To be played when default or personal tone will be played
+            iTtsToneToBePlayed = ETrue;
+            }
+        PHONEUIVIEW_PRINTF2(
+            "CPhoneRingingToneSrvPlayerAO::PlayTtsTone - error(%d), iTtsPhoneToBePlayed(%d)",
+            error,
+            iTtsToneToBePlayed );
+
+        delete preparedString;
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayTtsTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerError
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerError(
+    TPhoneAudioPlayerErrorEvent /*aEvent*/,
+    TInt aError,
+    TInt /*aId*/ )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerError <" );
+    // This is called from CPhoneAudioPlayer - we do not
+    // want to delete instances from which this method
+    // is called.
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerError: error = %d", aError );
+
+    const TBool deleteAll = ( aError == KErrServerTerminated );
+
+    if ( deleteAll )
+        {
+        // KErrServerTerminated is considered as fatal error. So we
+        // need to delete everything.
+
+        for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
+            {
+            DeletePlayerAsync( static_cast< TPlayerId >( i ) );
+            }
+
+        // Now all member audio players point to NULL, except
+        // those players in iAsyncDeletePlayers. Recreate
+        // players.
+
+        ConstructPlayers(); // Ignore error code.
+        }
+
+    iTimer->Cancel();
+    DoHandlePlayerError( !deleteAll, EFalse );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerInitComplete
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerInitComplete( TInt aId )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerInitComplete <" );
+
+    // This is called from CPhoneAudioPlayer - we do not
+    // want to delete instances from which this method
+    // is called.
+
+    // Complete waiting client
+    if ( iClientMessage.Handle() )
+        {
+        iClientMessage.Complete( KErrNone );
+        }
+
+    if ( iTonePlayingStatus == EAudioTonePlaying && aId == EPlayerAudio ||
+         iTonePlayingStatus == EDefaultTonePlaying && aId == EPlayerDefault )
+        {
+        PHONEUIVIEW_PRINT( "RING TONE FAILSAFE TIMER STOP!!" );
+        iTimer->Cancel();
+        }
+
+    if ( iTtsToneToBePlayed && ( aId != EPlayerTts ) )
+        {
+        // Start TTS timer just before "normal ringtone component" starts
+        // playing, i.e. after init completed.
+        if ( iTtsDelayIndex < iTtsDelaysCount )
+            {
+            if ( !iTtsDelayTimer->IsActive() )
+                {
+                // There are TTS iterations to be played yet.
+                iTtsDelayTimer->After(
+                    KPhoneTtsDelays[iTtsDelayIndex],
+                    TCallBack( HandleTtsDelayTimeout, this ) );
+                }
+            }
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleAudioPlayerInitComplete >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete( TInt aId )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete <" );
+    // This is called from CPhoneAudioPlayer - we do not
+    // want to delete instances from which this method
+    // is called.
+
+    // Complete waiting client (shouldn't reach this far, but who knows)
+    if ( iClientMessage.Handle() )
+        {
+        iClientMessage.Complete( KErrNone );
+        }
+
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - aId(%d), iRingingType(%d)",
+        aId,
+        iRingingType );
+
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - iTtsToneToBePlayed(%d), iTtsDelayIndex(%d)",
+        iTtsToneToBePlayed,
+        iTtsDelayIndex );
+
+    if ( aId == EPlayerTts )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - resuming after TTS" );
+
+        // TTS playing complete, normal tone player should volume up.
+        if ( ( iTtsToneToBePlayed ) && ( ++iTtsDelayIndex < iTtsDelaysCount ) )
+            {
+            PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - resuming after TTS first time" );
+
+            //Callers name is said once. increase tone player volume.
+            SolveNewVolumeAndRamptime( ESaidOnce );
+
+            if ( !iTtsDelayTimer->IsActive() )
+                {
+                // There are TTS iterations to be played yet.
+                iTtsDelayTimer->After( KPhoneTtsDelays[iTtsDelayIndex],
+                    TCallBack( HandleTtsDelayTimeout,this ) );
+                }
+            }
+        else
+            {
+            PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - resuming after TTS second time" );
+            SolveNewVolumeAndRamptime( ESaidTwice );
+            }
+
+        // No further processing. All TTS player-related events are not
+        // "real" ringtone playing completions.
+        return;
+        }
+
+    //Case: RingintonePlayer has completed playing with following set: ring once and
+    // TTS is activated
+    else if ( iRingingType == EProfileRingingTypeRingingOnce &&
+        iTtsToneToBePlayed )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - ring once and TTS" );
+         if ( iTtsDelayIndex < iTtsDelaysCount )
+            {
+            ReStartRingingTonePlayer();
+            //Do not destroy player yet. Return.
+            return;
+            }
+        }
+    //Case: RingintonePlayer has completed playing with following set: ringing
+    //and TTS is activated. We need  to restart ringintoneplayer and new TTS
+    //iterations are required.
+    else if ( iRingingType == EProfileRingingTypeRinging && iTtsToneToBePlayed )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - ringing and TTS" );
+        if ( iTtsDelayIndex == iTtsDelaysCount )
+            {
+            //Case: Ringingtype is EProfileRingingTypeRinging. New TTS
+            //iterations are required.
+            PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - need to restart TTS sequence" );
+            //TTS has completed its iterations,set index to zero.
+            iTtsDelayIndex = 0;
+            if ( !iTtsDelayTimer->IsActive() )
+                {
+                //Restart TTS sequence
+                iTtsDelayTimer->After(
+                    KPhoneTtsDelays[iTtsDelayIndex],
+                    TCallBack( HandleTtsDelayTimeout, this ) );
+                }
+            }
+
+        ReStartRingingTonePlayer();
+        //Do not destroy player yet. Return
+        return;
+        }
+
+    PHONEUIVIEW_PRINTF(
+        "CPhoneRingingToneSrvPlayerAO::HandlePlayingComplete - delete player - iTonePlayingStatus(%d)",
+        iTonePlayingStatus );
+    switch( iTonePlayingStatus )
+        {
+        case EAudioTonePlaying:
+            DeletePlayerAsync( EPlayerAudio );
+            iAudioPlayer = NULL;
+            break;
+
+        case EDefaultTonePlaying:
+            DeletePlayerAsync( EPlayerDefault );
+            iDefaultPlayer = NULL;
+            break;
+
+        case ESilentTonePlaying:
+            DeletePlayerAsync( EPlayerSilent );
+            iSilentPlayer = NULL;
+            break;
+
+        case EUnsecureVoIPTonePlaying:
+            DeletePlayerAsync( EPlayerUnsecureVoIP );
+            iUnsecureVoIPTonePlayer = NULL;
+            break;
+        case EBeepOnce:
+            DeletePlayerAsync( EPlayerBeepOnce );
+            iBeepOncePlayer = NULL;
+            break;
+
+        case EBackupTonePlaying:
+            break;
+
+        default:
+            Panic( EPhoneViewCaseNotHandled );
+            break;
+        }
+
+    iTonePlayingStatus = EIdle;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::HandleTimeOutL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::HandleTimeOutL()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleTimeOutL <" );
+
+
+    // Guarding timer for startup has expired
+
+
+    PHONEUIVIEW_PRINT( "RING TONE FAILSAFE TIMER TRIGGERED!!" );
+
+    // Start new audio player synchronously.
+    DoHandlePlayerError( ETrue, ETrue );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleTimeOutL >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::DoHandlePlayerError
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::DoHandlePlayerError(
+    TBool aDelete,
+    TBool aSync )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoHandlePlayerError <" );
+
+    PHONEUIVIEW_PRINTF(
+        "CPhoneRingingToneSrvPlayerAO::DoHandlePlayerError: iTonePlayingStatus = %d",
+        iTonePlayingStatus );
+
+    // Complete waiting client
+    if ( iClientMessage.Handle() )
+        {
+        iClientMessage.Complete( KErrNone );
+        }
+
+    switch ( iTonePlayingStatus )
+        {
+        case EAudioTonePlaying:
+            if ( aDelete )
+                {
+                if ( aSync )
+                    {
+                    delete iAudioPlayer;
+                    }
+                else
+                    {
+                    DeletePlayerAsync( EPlayerAudio );
+                    }
+
+                iAudioPlayer = NULL;
+                }
+
+#ifdef __WINS__
+            PlayAudioRingTone( iVolume, iRingingType, iClientMessage );
+            iTonePlayingStatus = EDefaultTonePlaying;
+#else
+            PlayDefaultTone( iVolume, iRingingType );
+#endif
+            break;
+        case EDefaultTonePlaying:
+            if ( aDelete )
+                {
+                if ( aSync )
+                    {
+                    delete iDefaultPlayer;
+                    }
+                else
+                    {
+                    DeletePlayerAsync( EPlayerDefault );
+                    }
+
+                iDefaultPlayer = NULL;
+                }
+
+            PlayBackupTone( iVolume, iRingingType );
+            break;
+        case ESilentTonePlaying:
+        case EBeepOnce:
+        case EBackupTonePlaying:
+            break;
+        default:
+            break;
+        }
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoHandlePlayerError >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::PlayDefaultTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::PlayDefaultTone(
+    TInt aVolume,
+    TProfileRingingType aRingingType )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayDefaultTone()" );
+
+    if( aRingingType == EProfileRingingTypeSilent ||
+        aRingingType == EProfileRingingTypeBeepOnce )
+        {
+        return;
+        }
+
+    if ( !iDefaultRingingTone )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayDefaultTone - default tone does not exist, play backup..." );
+        PlayBackupTone( aVolume, aRingingType );
+        return;
+        }
+
+    // Construct player.
+    if ( !iDefaultPlayer )
+        {
+        iDefaultPlayer = ConstructTonePlayer(
+            *iDefaultRingingTone,
+            EPlayerDefault );
+        if ( !iTimer->IsActive() )
+            {
+            PHONEUIVIEW_PRINT( "RING TONE FAILSAFE TIMER START!!" );
+            iTimer->After( KPhoneMaxRingingWaiting, this );
+            }
+        }
+
+    // Start playing.
+    if ( !iDefaultPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayDefaultTone - player not constructed, play backup..." );
+        iTimer->Cancel();
+        PlayBackupTone( aVolume, aRingingType );
+        }
+    else
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayDefaultTone - play" );
+        iVolume = aVolume;
+        iRingingType = aRingingType;
+        iTonePlayingStatus = EDefaultTonePlaying;
+        iDefaultPlayer->Play(
+            ConvertRingingType( aRingingType ), aVolume, iTtsToneToBePlayed );
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::PlayBackupTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::PlayBackupTone(
+    TInt aVolume,
+    TProfileRingingType aRingingType )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayBackupTone()" );
+    __ASSERT_DEBUG( iBackupPlayer, Panic( EPhoneViewGeneralError ) );
+
+    if ( !iBackupPlayer )
+        {
+        ConstructPlayers();
+        }
+
+    if ( iBackupPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::PlayBackupTone - play" );
+        iTonePlayingStatus = EBackupTonePlaying;
+
+        // Cease playing text-to-speech, if necessary
+        iTtsToneToBePlayed = EFalse;
+        iTTsTimeOutCounter = 0;
+        iTtsDelayTimer->Cancel();
+        if ( iTtsPlayer )
+            {
+            iTtsPlayer->StopPlaying();
+            delete iTtsPlayer;
+            iTtsPlayer = NULL;
+            }
+
+        iBackupPlayer->Play(
+            ConvertRingingType( aRingingType ), aVolume, EFalse );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConstructTonePlayer
+// -----------------------------------------------------------------------------
+//
+CPhoneAudioPlayer* CPhoneRingingToneSrvPlayerAO::ConstructTonePlayer(
+    const CPhoneRingingTone& aRingingTone,
+    TInt aId )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructTonePlayer" );
+    return CPhoneAudioPlayer::New(
+        aRingingTone,
+        KAudioPriorityPhoneCall,
+        KAudioPrefIncomingCall,
+        *this,
+        aId,
+        iMdaServer,
+        aId == EPlayerDefault ? EFalse : iExtSecNeeded );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConvertRingingType
+// -----------------------------------------------------------------------------
+//
+CPhoneAudioPlayer::TRingingType CPhoneRingingToneSrvPlayerAO::ConvertRingingType(
+    TProfileRingingType aRingingType )
+    {
+    CPhoneAudioPlayer::TRingingType ringingType = 
+        CPhoneAudioPlayer::ETypeRinging;
+    switch ( aRingingType )
+        {
+        case EProfileRingingTypeRinging:
+            ringingType = CPhoneAudioPlayer::ETypeRinging;
+            break;
+
+        case EProfileRingingTypeAscending:
+            ringingType = CPhoneAudioPlayer::ETypeAscending;
+            break;
+
+        case EProfileRingingTypeRingingOnce:
+            ringingType = CPhoneAudioPlayer::ETypeRingingOnce;
+            break;
+
+        default:
+            break;
+        }
+    return ringingType;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConstructPlayers
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingToneSrvPlayerAO::ConstructPlayers()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructPlayers <" );
+    TRAPD( err, ConstructPlayersL() );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::ConstructPlayers: err = %d", err );
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructPlayers >" );
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConstructPlayersL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::ConstructPlayersL()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructPlayersL <" );
+    if ( !iMdaServer )
+        {
+        iMdaServer = CMdaServer::NewL();
+        }
+
+    // Construct Backup player.
+    if ( !iBackupPlayer )
+        {
+        TFileName defaultSoundFile( KDriveZ );
+        defaultSoundFile.Append( KPhoneDefaultSoundFile );
+
+        PHONEUIVIEW_PRINTF(
+            "CPhoneRingingToneSrvPlayerAO::ConstructPlayersL: construct backup player, path = %S",
+            &defaultSoundFile );
+        iBackupPlayer = CPhoneAudioPlayer::NewL(
+            defaultSoundFile,
+            KAudioPriorityPhoneCall,
+            KAudioPrefIncomingCall,
+            *this,
+            EPlayerBackup,
+            iMdaServer
+            );
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructPlayersL >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayer
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayer( TPlayerId aId )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayer" );
+
+    // Construct players.
+    TRAPD( err, ConstructSequencePlayerL( aId ) );
+    if ( err )
+        {
+        PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayer - err(%d)", err );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayerL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayerL( TPlayerId aId )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayerL <" );
+
+    // Construct beep once player
+    if ( aId == EPlayerBeepOnce )
+        {
+#ifdef __WINS__
+        TParse* fp = new (ELeave) TParse();
+        fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL );
+        TFileName fileName( fp->FullName() );
+        delete fp;
+
+        iBeepOncePlayer = CPhoneAudioPlayer::NewL(
+            fileName,
+            KAudioPriorityPhoneCall,
+            KAudioPrefIncomingCall,
+            *this,
+            EPlayerBeepOnce );
+#else
+        iBeepOncePlayer = CPhoneAudioPlayer::NewSeqL(
+            KPhoneBeepSequence(),
+            KAudioPriorityPhoneCall,
+            KAudioPrefIncomingCall,
+            *this,
+            EPlayerBeepOnce );
+#endif // __WINS__
+        }
+
+    // Construct Silent Player.
+    else if ( aId == EPlayerSilent )
+        {
+#ifdef __WINS__
+        TParse* fp = new (ELeave) TParse();
+        fp->Set( KPhoneSilentSoundFile, &KDC_RESOURCE_FILES_DIR, NULL );
+        TFileName fileName( fp->FullName() );
+        delete fp;
+
+        iSilentPlayer = CPhoneAudioPlayer::NewL(
+            fileName,
+            KAudioPriorityPhoneCall,
+            KAudioPrefIncomingCall,
+            *this,
+            EPlayerSilent );
+#else
+        iSilentPlayer = CPhoneAudioPlayer::NewSeqL(
+            KPhoneNoSoundSequence(),
+            KAudioPriorityPhoneCall,
+            KAudioPrefIncomingCall,
+            *this,
+            EPlayerSilent );
+#endif // __WINS__
+        }
+    // Construct unsecure VoIP tone player.
+    else if ( aId == EPlayerUnsecureVoIP )
+        {
+#ifdef __WINS__
+        TParse* fp = new (ELeave) TParse();
+        fp->Set( KPhoneBeepOnceSoundFile, &KDC_RESOURCE_FILES_DIR, NULL );
+        TFileName fileName( fp->FullName() );
+        delete fp;
+
+        iUnsecureVoIPTonePlayer = CPhoneAudioPlayer::NewL(
+            fileName,
+            KAudioPrioritySpecialInformationTone,
+            KAudioPrefSpecialInformation,
+            *this,
+            EPlayerUnsecureVoIP );
+#else
+        iUnsecureVoIPTonePlayer = CPhoneAudioPlayer::NewSeqL(
+            KPhoneUnsecureVoIPCall(),
+            KAudioPrioritySpecialInformationTone,
+            KAudioPrefSpecialInformation,
+            *this,
+            EPlayerUnsecureVoIP );
+#endif // __WINS__
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ConstructSequencePlayerL >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::CleanupPlayers
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::CleanupPlayers()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::CleanupPlayers <" );
+
+    delete iAudioPlayer;
+    iAudioPlayer = NULL;
+
+    delete iDefaultPlayer;
+    iDefaultPlayer = NULL;
+
+    delete iBeepOncePlayer;
+    iBeepOncePlayer = NULL;
+
+    delete iSilentPlayer;
+    iSilentPlayer = NULL;
+
+    delete iUnsecureVoIPTonePlayer;
+    iUnsecureVoIPTonePlayer = NULL;
+
+    delete iBackupPlayer;
+    iBackupPlayer = NULL;
+
+    delete iMdaServer;
+    iMdaServer = NULL;
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::CleanupPlayers >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::DeletePlayerAsync
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::DeletePlayerAsync( TPlayerId aPlayer )
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::DeletePlayerAsync(%d) <", aPlayer );
+
+    __ASSERT_DEBUG( aPlayer >= EPlayerFirst && aPlayer < iAsyncDeletePlayers.Count(),
+        Panic( EPhoneViewInvariant ) );
+
+    // Player is not deleted here, but in RunL.
+    Cancel();
+
+    if ( iAsyncDeletePlayers[ aPlayer ] )
+        {
+        delete iAsyncDeletePlayers[ aPlayer ];
+        iAsyncDeletePlayers[ aPlayer ] = NULL;
+        }
+
+    CPhoneAudioPlayer** players[] =
+        {
+        &iAudioPlayer,
+        &iBeepOncePlayer,
+        &iSilentPlayer,
+        &iUnsecureVoIPTonePlayer,
+        &iDefaultPlayer,
+        &iBackupPlayer,
+        &iTtsPlayer
+        };
+
+    __ASSERT_DEBUG( iAsyncDeletePlayers.Count() > aPlayer, Panic( EPhoneUtilsIndexOutOfBounds ) );
+
+    iAsyncDeletePlayers[ aPlayer ] = *(players[ aPlayer ]);
+    *(players[ aPlayer ]) = NULL;
+
+    iState = EDeletingAudioPlayer;
+
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+    SetActive();
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::DeletePlayerAsync(%d) >", aPlayer );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::RunL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::RunL()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::RunL <" );
+
+    switch ( iState )
+        {
+        case EDeletingAudioPlayer:
+            {
+            for ( TInt i = EPlayerFirst; i <= EPlayerLast; i++ )
+                {
+                delete iAsyncDeletePlayers[ i ];
+                iAsyncDeletePlayers[ i ] = NULL;
+                }
+            }
+            break;
+
+        case EIdleState:
+        default:
+            break;
+        } // switch iState
+
+    iState = EIdleState;
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::RunL >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::DoCancel()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoCancel" );
+    // Request is completed immediately before SetActive.
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::HandleTtsDelayTimeout
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingToneSrvPlayerAO::HandleTtsDelayTimeout( TAny* aObject )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleTtsDelayTimeout <" );
+    static_cast<CPhoneRingingToneSrvPlayerAO*>( aObject )->
+        DoHandleTtsDelayTimeout();
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::HandleTtsDelayTimeout >" );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout()" );
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout - iTtsRingingType(%d), iTTsTimeOutCounter(%d)",
+        iTtsRingingType, iTTsTimeOutCounter );
+
+    CPhoneAudioPlayer* currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();
+
+    if ( !currPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout - null current player" );
+        return;
+        }
+    TInt volume( 0 );
+     //Ascending case. TTs player needs to be ascending.
+    if ( iTtsRingingType == EProfileRingingTypeAscending )
+        {
+        //Volume needs to be different in different ascending steps
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout - play ascending" );
+        if ( !iTTsTimeOutCounter )
+            {
+            //We are saying callers name for the first time in ascending mode.
+            //Say callers name by volume level KTtsVolumeMin.
+            volume = KTtsVolumeMin;
+
+            iTtsPlayer->Play(
+                ConvertRingingType( EProfileRingingTypeRingingOnce ),
+                volume,
+                iTtsToneToBePlayed );
+            }
+        else
+            {
+            //Checks the case that ringingtone is very quiet. Then do not play
+            //TTS too loud
+            volume = iTtsVolume < KTtsVolumeMin ? KTtsVolumeMin : KTtsVolumeAscendingRepeat;
+
+            //We are saying callers name for the second time in ascending mode.
+            //Say callers name by volume level KTtsVolumeAscendingRepeat and decrease current players volume
+            //to KPlayerVolumeAscendingRepeat. RampTime is zero
+            currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, 0 );
+            iTtsPlayer->Play(
+                ConvertRingingType( EProfileRingingTypeRingingOnce ),
+                volume,
+                iTtsToneToBePlayed );
+            }
+
+        }
+    else //Normal ringing case.
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::DoHandleTtsDelayTimeout - play normal" );
+        currPlayer->SetNewVolumeAndRamptime( iTtsVolume-5, 0 );
+        iTtsPlayer->Play(
+            ConvertRingingType( EProfileRingingTypeRingingOnce ),
+            iTtsVolume,
+            iTtsToneToBePlayed );
+        }
+
+     iTTsTimeOutCounter++;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::AddTtsPlaybackIfNeeded
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::AddTtsPlaybackIfNeeded(
+        TProfileRingingType /*aRingingType*/ )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::AddTtsPlaybackIfNeeded" );
+    if ( iTtsToneToBePlayed )
+        {
+        iTtsDelayIndex = 0;
+        iTtsDelaysCount = KPhoneTtsDelaysCount;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ExtendedSecurity
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingToneSrvPlayerAO::ExtendedSecurity() const
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::ExtendedSecurity: %d", iExtSecNeeded );
+    return iExtSecNeeded;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime( TTtsStatus aStatus )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime <" );
+
+    CPhoneAudioPlayer* currPlayer = NULL;
+    currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();
+    if ( !currPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime - null current player" );
+        return;
+        }
+    TInt ramptime( 0 );
+    //Here is handled the cases when Callers name is said. Sequence is:
+    //3 sec. tone + name + 4 sec. tone + name +the tone until the end.
+    switch ( aStatus )
+        {
+        case ESaidOnce:
+            if ( iTtsRingingType == EProfileRingingTypeAscending )
+                {
+                //The ramptime could be ( 4 )* KPhoneTtsAscendingStep but now
+                //we are setting this to 0 because when Say callers name is said
+                //for first time: play ringing tone on level 3 for four secs.
+                ramptime = 0;
+                PHONEUIVIEW_PRINTF(
+                    "CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime - said once ascending - ramptime(%d)",
+                    ramptime );
+                currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, ramptime );
+                }
+            else
+                {
+                 //Normal ringingtone case. Adjust volume back to profile level.
+                PHONEUIVIEW_PRINTF(
+                    "CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime - said once normal - ramptime(%d)",
+                    ramptime );
+                currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 );
+                }
+             break;
+
+        case ESaidTwice:
+            if ( iTtsRingingType == EProfileRingingTypeAscending )
+                {
+                TInt vol = iTtsVolume;
+                if ( vol > KPlayerVolumeAscendingRepeat )
+                    {
+                    vol = vol - KTtsVolumeAscendingDecrease;
+                    }
+
+                //TTS playing complete for second time. increase tone player volume.
+                ramptime = ( vol )*KPhoneTtsAscendingStep;
+                PHONEUIVIEW_PRINTF(
+                    "CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime - said twice ascending - ramptime(%d)",
+                    ramptime );
+                currPlayer->SetNewVolumeAndRamptime( iTtsVolume, ramptime );
+                }
+            else
+                {
+                 //Normal ringingtone case. Adjust volume back to profile level.
+                PHONEUIVIEW_PRINTF(
+                    "CPhoneRingingToneSrvPlayerAO::SolveNewVolumeAndRamptime - said twice normal - ramptime(%d)",
+                    ramptime );
+                currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 );
+                }
+            break;
+
+        default:
+            break;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::GetCurrentlyActiveAudioPlayerWithTTs
+// -----------------------------------------------------------------------------
+//
+CPhoneAudioPlayer*
+CPhoneRingingToneSrvPlayerAO::GetCurrentlyActiveAudioPlayerWithTTs()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::GetCurrentlyActiveAudioPlayerWithTTs" );
+
+    if( iAudioPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - audio player" );
+        return iAudioPlayer;
+        }
+    else if ( iDefaultPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - default player" );
+        return iDefaultPlayer;
+        }
+    else if( iBackupPlayer )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::GetCurrentlyActiveAudioPlayerWithTTs - backup player" );
+        return iBackupPlayer;
+        }
+    else
+        {
+        return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ReStartRingingTonePlayer
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::ReStartRingingTonePlayer()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ReStartRingingTonePlayer <" );
+
+    //First get currently active player which plays among TTS player.
+    CPhoneAudioPlayer* currPlayer = NULL;
+    currPlayer = GetCurrentlyActiveAudioPlayerWithTTs();
+    if ( currPlayer )
+        {
+        currPlayer->ReStartPlaying();
+        }
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ReStartRingingTonePlayer >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::CheckAndHandleToneSizeLimit
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingToneSrvPlayerAO::CheckAndHandleToneSizeLimit(
+     CPhoneRingingTone* aRingingTone )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::CheckAndHandleToneSizeLimit" );
+    TBool bValidSize = ETrue;
+
+    // If user has somehow managed to get a too large file as ringing tone,
+    // play default tone instead.
+    if ( iToneFileSizeLimitKB )
+        {
+        if ( CheckToneFileSize( aRingingTone->FileName(), iToneFileSizeLimitKB) != KErrNone )
+            {
+            bValidSize = EFalse;
+            }
+        }
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::CheckAndHandleToneSizeLimit - bValidSize(%d)", bValidSize );
+    return bValidSize;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::CheckToneFileSize
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingToneSrvPlayerAO::CheckToneFileSize( const TDesC& aFile, TInt aSizeLimitKB )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::CheckToneFileSize" );
+
+    // Get file size
+    TInt size = 0;
+    TInt error = KErrNone;
+
+    TEntry entry;
+    if ( KErrNone == iFs.Entry( aFile, entry ))
+        {
+        size = entry.iSize;
+        }
+
+    // Check
+    aSizeLimitKB *= Kkilo;
+    if ( aSizeLimitKB && size > aSizeLimitKB )
+        {
+        error = KErrTooBig;
+        }
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::CheckToneFileSize: size = %d", size );
+    return error;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::ActiveAudioPlayer
+// -----------------------------------------------------------------------------
+//
+CPhoneAudioPlayer* CPhoneRingingToneSrvPlayerAO::ActiveAudioPlayer()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneSrvPlayerAO::ActiveAudioPlayer" );
+
+    switch( iTonePlayingStatus )
+        {
+        case EAudioTonePlaying:
+            if ( iAudioPlayer )
+                {
+                return iAudioPlayer;
+                }
+            break;
+
+        case EDefaultTonePlaying:
+            if ( iDefaultPlayer )
+                {
+                return iDefaultPlayer;
+                }
+            break;
+
+        case EBeepOnce:
+            if ( iBeepOncePlayer )
+                {
+                return iBeepOncePlayer;
+                }
+            break;
+
+        case EBackupTonePlaying:
+            if ( iBackupPlayer )
+                {
+                return iBackupPlayer;
+                }
+            break;
+
+        case ESilentTonePlaying:
+            if ( iSilentPlayer )
+                {
+                return iSilentPlayer;
+                }
+            break;
+
+        case EUnsecureVoIPTonePlaying:
+            if ( iUnsecureVoIPTonePlayer )
+                {
+                return iUnsecureVoIPTonePlayer;
+                }
+            break;
+
+        default:
+            break;
+        }
+
+    return NULL;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::SetExtendedSecurityNeeded
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::SetExtendedSecurityNeeded( TBool aNeeded )
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::SetExtendedSecurityNeeded: %d", aNeeded );
+
+    iExtSecNeeded = aNeeded;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::SetToneFileSizeLimit
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::SetToneFileSizeLimit( TInt aLimit )
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::SetToneFileSizeLimit: %d", aLimit );
+
+    iToneFileSizeLimitKB = aLimit;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::SetRingingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::SetRingingToneL( const TDesC& aFilename )
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::SetRingingToneL: %S", &aFilename );
+
+    if ( !iAudioVideoRingingTone )
+        {
+        iAudioVideoRingingTone = CPhoneRingingTone::NewL( aFilename );
+        }
+    else if ( iAudioVideoRingingTone->FileName().Compare( aFilename ) )
+        {
+        iAudioVideoRingingTone->SetFileName( aFilename );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneSrvPlayerAO::SetDefaultRingingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneSrvPlayerAO::SetDefaultRingingToneL( const TDesC& aFilename )
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneSrvPlayerAO::SetDefaultRingingToneL: %S", &aFilename );
+
+    if ( !iDefaultRingingTone )
+        {
+        iDefaultRingingTone = CPhoneRingingTone::NewL( aFilename );
+        }
+    else if ( iDefaultRingingTone->FileName().Compare( aFilename ) )
+        {
+        iDefaultRingingTone->SetFileName( aFilename );
+        }
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/phoneringingtonesrvsession.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002-2005,2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Phone ringing tone server session.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+
+#include "mphoneringingtonesrv.h"
+#include "phoneringingtonesrv.hrh"
+#include "phoneringingtonesrvsession.h"
+#include "phoneuiviewtrace.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServerSession::CPhoneRingingToneServerSession
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServerSession::CPhoneRingingToneServerSession( MPhoneRingingToneServer& aServer )
+    : iServer( aServer )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServerSession::~CPhoneRingingToneServerSession
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServerSession::~CPhoneRingingToneServerSession()
+    {
+    iServer.DecrementSessions();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServerSession::NewL
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServerSession* CPhoneRingingToneServerSession::NewL( MPhoneRingingToneServer& aServer )
+    {
+    CPhoneRingingToneServerSession* self = new (ELeave) CPhoneRingingToneServerSession( aServer );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServerSession::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServerSession::ConstructL()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServerSession::ConstructL" );
+    iServer.IncrementSessions();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServerSession::ServiceL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServerSession::ServiceL( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServerSession::ServiceL: func=%d", aMessage.Function() );
+
+    TBool noComplete = EFalse;
+
+    switch ( aMessage.Function() )
+        {
+        case ESetExtendedSecurityNeeded:
+            iServer.SetExtendedSecurityNeeded( aMessage.Int0() );
+            break;
+        case ESetToneFileSizeLimit:
+            iServer.SetToneFileSizeLimit( aMessage.Int0() );
+            break;
+        case ESetAudioRingingTone:
+            iServer.SetRingingToneL( aMessage );
+            break;
+        case ESetDefaultRingingTone:
+            iServer.SetDefaultRingingToneL( aMessage );
+            break;
+
+        // Playback control
+        case EPlayAudioRingTone:
+            noComplete = iServer.PlayAudioRingTone( aMessage );
+            break;
+        case EPlayTtsTone:
+            iServer.PlayTtsTone( aMessage );
+            break;
+        case EPlayDefaultTone:
+            iServer.PlayDefaultTone( aMessage );
+            break;
+        case EPlayBackupTone:
+            iServer.PlayBackupTone( aMessage );
+            break;
+        case EPlaySilentTone:
+            iServer.PlaySilentTone();
+            break;
+        case EBeepOnce:
+            iServer.BeepOnce( aMessage );
+            break;
+        case EPlayUnsecureVoIPTone:
+            iServer.PlayUnsecureVoIPTone();
+            break;
+
+        case EMuteRingingTone:
+            iServer.MuteRingingTone();
+            break;
+        case EStopPlaying:
+            iServer.StopPlaying();
+            break;
+        default:
+            break;
+        }
+
+    if ( !noComplete )
+        {
+        aMessage.Complete( KErrNone );
+        }
+    }
--- a/phoneapp/phoneuivoipextension/group/phoneuivoipextension.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/group/phoneuivoipextension.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -108,4 +108,7 @@
 LIBRARY         serviceselector.lib
 LIBRARY         vccuipropertyhandler.lib //For VCC Usage
 LIBRARY         ws32.lib
+LIBRARY         centralrepository.lib
+LIBRARY         phoneuiview.lib
+LIBRARY         aknskins.lib
 
--- a/phoneapp/phoneuivoipextension/inc/cphonecustomizationvoip.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/inc/cphonecustomizationvoip.h	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 #define C_CPHONECUSTOMIZATIONVOIP_H
 
 // INCLUDES
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h> 
 #include <telmenuextension.h>
 #include <spdefinitions.h>
 #include "mphonecustomization.h"
@@ -207,6 +207,11 @@
         void GetVoipServiceNameL( TServiceId aServiceId, TDes& aServiceName ) const;
     	
         /**
+         * EasyDialing enabled check
+         */
+        TBool EasyDialingEnabled();
+
+        /**
     	* Modifies menu when there is active call.
     	* @param aResourceId Menu resource id.
     	* @param aMenuPane Menu pane
--- a/phoneapp/phoneuivoipextension/inc/cphonetransferdialercontroller.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/inc/cphonetransferdialercontroller.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008, 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"
@@ -23,7 +23,7 @@
 
 // INCLUDES
 #include <aknbutton.h>
-#include "mphonedialercontroller.h"
+#include "cphonedialercontroller.h"
 
 // FORWARD DECLARATIONS
 class CAknToolbar; 
@@ -31,8 +31,7 @@
 /**
 *  VoIP unattended transfer dialer customization
 */
-NONSHARABLE_CLASS( CPhoneTransferDialerController ): public CBase,
-                                       public MPhoneDialerController
+NONSHARABLE_CLASS( CPhoneTransferDialerController ): public CPhoneDialerController
     {
     public:      
 
@@ -45,14 +44,6 @@
 
     public: // From MDialerController
     
-        
-        /**
-        * Initializes the controller. 
-        * @param    aToolbar    CAknToolbar instance.
-        * @since    S60 v5.1
-        */ 
-        void InitializeL( CAknToolbar& aToolbar );
-        
         /**
         * Returns Cba resource id
         * @return Resource Id of the softkeys
@@ -75,35 +66,28 @@
         const TDesC& NumberEntryPromptTextL();
         
         /**
-        * Handles the number entry empty event
-        * @param aEmpty ETrue if numberentry is empty
-        * @since S60 v5.1
-        */
-        void HandleNumberEntryIsEmpty( TBool aEmpty );
+         * @see MPhoneDialerController
+         */
+        TInt GetButtonData( TButtonIndex aIndex, RPointerArray<CButtonData>& aData ) const;
         
         /**
-        * Sets visibility of buttons created by the implementation
-        * @param aShow ETrue if numberentry is empty
-        * @since S60 v5.1
-        */
-        void ShowButtons( TBool aShow );
+         * @see MPhoneDialerController
+         */
+        TInt ButtonState( TButtonIndex aIndex ) const;
+        
+        /**
+         * @see MPhoneDialerController
+         */
+        TBool ButtonDimmed( TButtonIndex aIndex ) const;
+        
+        /**
+         * @see MPhoneDialerController
+         */
+        TBool EasyDialingAllowed() const;
         
     private:
     
         /**
-         * Creates instance of CAKnButton
-         * @param aNormalIconId Button normal icon id
-         * @param aNormalMaskId Mask id
-         * @param aTooltipText Reference to tooltip text
-         * @param aSkinIconId Skin icon id
-         * @return Pointer to created button instance
-         */
-        CAknButton* CreateButtonLC( TInt aNormalIconId,
-                                    TInt aNormalMaskId,
-                                    const TDesC& aTooltipText, 
-                                    const TAknsItemID& aSkinIconId ) const; 
-        
-        /**
          * Returns tool tip for specific command
          * @param aCommandId Command id which the tooltip text 
          * is needed
@@ -113,6 +97,10 @@
         
         TAknsItemID SkinId( TInt aIconIndex ) const;
 
+        CButtonData* CreateButtonDataL(
+                TInt aCommandId,
+                TInt aNormalIconId,
+                TInt aNormalMaskId ) const;
     protected:
 
         /**
@@ -122,17 +110,8 @@
             
     private: // Data
     
-        // Pointer to CAknToolbar, Not own
-        CAknToolbar* iToolbar;
-        
-        // ETrue if number entry input field is empty
-        TBool iNumberEntryIsEmpty;
-        
         // Number entry prompt text ("Address:")
         HBufC* iNumberEntryPromptText;
-        
-        // ETrue if initialized 
-        TBool iIsInitialized;
       
     };
 
--- a/phoneapp/phoneuivoipextension/inc/cphoneunattendedtransfercmdhandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/inc/cphoneunattendedtransfercmdhandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -64,6 +64,12 @@
      * @param   aCommand    VoIP command identifier.
      */
     void HandleCommandL( TInt aCommand );
+   
+    /**
+     * Shows call back query in case when transfered call is
+     * not connected
+     */
+    void LaunchCallBackQueryL();
     
 private:
 
--- a/phoneapp/phoneuivoipextension/inc/cphonevcchandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/inc/cphonevcchandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -68,7 +68,12 @@
             RArray<CTelMenuExtension::TCallInfo>& aArray, 
             TInt aResourceId,
             CEikMenuPane& aMenuPane );
-         
+       
+        /**
+        * CancelHandoverNoteTimer if running
+        */ 
+        void CancelHandoverNoteTimerL();
+        
     protected:
 
         CPhoneVccHandler( 
@@ -85,11 +90,6 @@
         void StartHandoverNoteTimerL();
        
         /**
-        * CancelHandoverNoteTimer if running
-        */ 
-        void CancelHandoverNoteTimerL();
-        
-        /**
         * Callback function for launching Handover wait note
         * This is called when HO note timer timeout is
         * reached
@@ -108,7 +108,7 @@
         */
         void HandoverInProgressNoteL( TInt aCommand );
 
-		// From MVccPsPropertyListenerObserver        
+// From MVccPsPropertyListenerObserver        
         /**
         *  Gets called when PS key is changed
         * @param aKeyId 
@@ -157,8 +157,14 @@
         // Handover not allowed if multicall
         TBool iNoHoIfMultiCall;
         
-        // Listens for the hand-over commands
-        CVccUiPsPropertyListener* iPropListener; 
+        // Listens for the hand-over status commands
+        CVccUiPsPropertyListener* iPropListener;
+        
+        // Listens for the hand-over request commands
+        CVccUiPsPropertyListener* iPropListenerReq;
+         
+        // Status of Handover failure
+        TBool iHOFailure;
         };
 
 #endif // C_CPHONEVCCHANDLER_H
--- a/phoneapp/phoneuivoipextension/src/cphonecustomizationvoip.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphonecustomizationvoip.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -28,6 +28,8 @@
 #include <phoneuivoip.rsg>
 #include <StringLoader.h>
 #include <featmgr.h>
+#include <centralrepository.h>
+#include <easydialingcrkeys.h>
 
 #include "cphonecustomizationvoip.h"
 #include "tphonecmdparaminteger.h"
@@ -207,7 +209,7 @@
             {
             case EPhoneDialerCmdTouchInput:
                 {
-                if ( !AllowAlphaNumericMode() )
+                if ( !VoIPSupportedL() )
                     {
                     menuPane->DeleteMenuItem( menuItemArray[ i ] ); 
                     }
@@ -232,7 +234,7 @@
             case EPhoneInCallCmdNewCall:
                 {
                 if ( !FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) &&
-                     AllowAlphaNumericMode() &&
+                     VoIPSupportedL() &&
                      R_PHONEUI_NEW_CALL_MENU_VOIP != aResourceId )
                     {
                         
@@ -388,6 +390,8 @@
         case EPhoneCmdTransferDialerExit:
         case EPhoneCmdTransferDialerSearch:
         case EPhoneCmdTransferDialerContactFetch:
+        case EPhoneCmdUnattendedTransferCallBackOk:
+        case EPhoneCmdUnattendedTransferCallBackCancel:
             // intended fall-through
             iTransferCmdHandler->HandleCommandL( aCommand );
             handled = ETrue;
@@ -457,6 +461,11 @@
     
     TBool alphaModeSupported( EFalse );
     TRAP_IGNORE( alphaModeSupported = VoIPSupportedL() );
+
+    if ( !alphaModeSupported )
+        {
+        alphaModeSupported = EasyDialingEnabled();
+        }
     
     return alphaModeSupported;
     }
@@ -599,6 +608,11 @@
             SendGlobalErrorNoteL( EPhoneRemoteForwarding );
             break; 
             }
+        case MEngineMonitor::EPEMessageTransferCallBackRequest:
+            {
+            iTransferCmdHandler->LaunchCallBackQueryL();
+            break;
+            }
         default:
             handled = EFalse;
             break;
@@ -680,6 +694,30 @@
     return voipSupported;   
     }
 
+// -----------------------------------------------------------
+// CPhoneCustomizationVoip::EasyDialingEnabled
+// -----------------------------------------------------------
+//
+TBool CPhoneCustomizationVoip::EasyDialingEnabled()
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
+            "CPhoneCustomizationVoip::EasyDialingEnabled" );
+
+    TBool easyDialingEnabled( EFalse );
+    if ( FeatureManager::FeatureSupported( KFeatureIdProductIncludesHomeScreenEasyDialing ) )
+        {
+        TInt easyDialingSetting;
+        TInt err = CPhoneCenRepProxy::Instance()->GetInt(
+                KCRUidEasyDialSettings,
+                KEasyDialing,
+                easyDialingSetting);
+        if ( !err && easyDialingSetting )
+            {
+            easyDialingEnabled = ETrue;
+            }
+        }
+    return easyDialingEnabled;
+    }
 
 // -----------------------------------------------------------
 // CPhoneCustomizationVoip::ModifyInCallMenuL
@@ -776,11 +814,12 @@
 
     HBufC* phoneNumber = PhoneNumberFromEntryLC();
 
+    TInt index(KErrNotFound);
+
     if ( aResourceId == R_PHONEUI_NUMBERACQ_OPTIONS_CALL_MENU )
         {
         if ( !CPhoneKeys::Validate( phoneNumber->Des() ) )
-            {
-            TInt index(KErrNotFound);
+            {        
             if ( aMenuPane.MenuItemExists( EPhoneNumberAcqCmdCall, index ) )
                 {
                 aMenuPane.DeleteMenuItem( EPhoneNumberAcqCmdCall );
@@ -794,12 +833,12 @@
         
         aMenuPane.AddMenuItemL( voipMenuItem->iData );
         }
-    else if ( iStateMachine.PhoneEngineInfo()->PhoneNumberIsServiceCode() )
+    else if ( !aMenuPane.MenuItemExists( EPhoneNumberAcqCmdCall, index ) )
         {
-        // When user writes string recognized as service code (eg.*#31# -> clir off)
-        // call menu is not visible. Internet call must still be possible so 
-        // internet call option is added here to the menu.
-        
+        // Call menu is removed if user inserts anything that is not
+        // a valid cs number, so must add Internet call option here where
+        // we know that voip is however supported.
+    
         // If number entry is empty don't add internet call option 
         if ( phoneNumber->Length() )
             {
@@ -1089,7 +1128,16 @@
         if( array[i].iCallState == CTelMenuExtension::EOutgoing ||
             array[i].iCallState == CTelMenuExtension::EActive ||
             array[i].iCallState == CTelMenuExtension::EOnHold )
-            {
+            {              
+            if( aFeature == EFeatureTransfer &&
+                array[i].iCallState == CTelMenuExtension::EOutgoing &&
+                array[i].iCallType == CTelMenuExtension::EPsVoice  )
+                {
+                // If there is outgoing VoIP call then transfer is not supported
+                supported = EFalse;
+                break;
+                }
+            
             if( firstCallType == CTelMenuExtension::EUninitialized )
                 {
                 // Memorize first found call type
@@ -1380,7 +1428,7 @@
         "CPhoneCustomizationVoip::AddHandoverMenuItemIfNeededL" );
     
     // Menu items to be added
-    if ( iVccHandler && AllowAlphaNumericMode() &&
+    if ( iVccHandler && VoIPSupportedL() &&
         ( aResourceId == R_PHONEUI_CALLHANDLING_INCALL_OPTIONS_MENU ||
           aResourceId == R_PHONEUI_CALLWAITING_OPTIONS_MENU ||
           aResourceId == R_PHONEUI_ACTIVEANDHELDCALL_OPTIONS_MENU ||
--- a/phoneapp/phoneuivoipextension/src/cphoneresourceresolvervoip.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphoneresourceresolvervoip.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -219,7 +219,7 @@
             retVal = R_PHONE_VOIP_QUERY_ACC_ID_HEADER;
             break;
         case EPhoneVoIPTransferAddress:
-            retVal = R_VOIP_TRANSFER_ADDRESS;
+            retVal = R_VOIP_DIALER_UNATT_TRANSFER_INPUT_FIELD_TEXT;           
             break;
         case EPhoneVoIPTransferDialerNumberEntryEmptyMenubar:
             retVal = R_PHONEUIDIALER_NUMBERENTRY_EMPTY_TRANSFER_MENUBAR;
@@ -279,8 +279,7 @@
             retVal = R_PHONEUI_VOIP_QUERY_HEADER_MOVED_PERMANENTLY;
             break;
         case EPhoneVoIPMovedPermanentlySoftkeys:
-            //retVal = R_PHONE_VOIP_SOFTKEYS_OK_END_CALL;
-            retVal = R_AVKON_SOFTKEYS_OK_CANCEL;
+            retVal = R_AVKON_SOFTKEYS_OK_ENDCALL;
             break;
         case EPhoneVoIPMultipleChoicesListQuery:
             retVal = R_PHONE_VOIP_MULTIPLE_CHOICES_LIST_QUERY;
@@ -300,6 +299,12 @@
         case EPhoneVoIPDefectiveSettings:
             retVal = R_PHONE_VOIP_CREATING_CONN_FAILED_PERMANENTLY;
 			break;
+        case EPhoneVoIPTransferCallBackHeader:
+            retVal = R_VOIP_TRANSFER_CALL_BACK_HEADER;
+            break;
+        case EPhoneVoIPTransferCallBackText:
+            retVal = R_VOIP_TRANSFER_CALL_BACK;
+            break;
 		default:
             retVal = CPhoneResourceResolverGSM::ResolveResourceID( aResource );
             break;
--- a/phoneapp/phoneuivoipextension/src/cphonestateidlevoip.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphonestateidlevoip.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -151,7 +151,7 @@
     
     HBufC* phoneNumber = PhoneNumberFromEntryLC();
      
-    if ( !IsSimOk() || IsEmergencyNumber( *phoneNumber ) )
+    if ( !IsSimOk() || IsEmergencyNumber( *phoneNumber ) || IsDialingExtensionInFocusL() )
         {
         CPhoneIdle::HandleSendCommandL();         
         }  
--- a/phoneapp/phoneuivoipextension/src/cphonestatesinglevoip.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphonestatesinglevoip.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -40,6 +40,9 @@
 #include "cphonestateutilsvoip.h"
 #include "cphonestatemachinevoip.h"
 
+#include "easydialingcommands.hrh"
+
+
 // ================= MEMBER FUNCTIONS =======================
 
 // C++ default constructor can NOT contain any code, that
@@ -137,7 +140,15 @@
         	break;
      	
         case EPhoneNumberAcqCmdSendCommand:
-            StartCallingL();
+            // If easydialing has focus, call should be initiated to focused contact.
+            if ( IsDialingExtensionInFocusL() )
+                {
+                commandStatus = CPhoneSingleCall::HandleCommandL( aCommand );
+                }
+            else
+                {
+                StartCallingL();
+                }
             break;
          
         case EPhoneCmdAcceptUnattendedTransfer:
@@ -177,11 +188,19 @@
                  
             if( IsNumberEntryVisibleL() && neLength )
                 {
-                if ( IsOnScreenDialerSupported() &&  
-                     ( IsDTMFEditorVisibleL() ||
-                       IsCustomizedDialerVisibleL() ) )
+                if ( IsOnScreenDialerSupported() )
                     {
-                    return;
+                    if ( IsDTMFEditorVisibleL() || 
+                         IsCustomizedDialerVisibleL() )
+                        {
+                        return;
+                        }
+                    // If easydialing has focus, call should be initiated to focused contact.
+                    else if ( IsDialingExtensionInFocusL() )
+                        {
+                        CPhoneSingleCall::HandleKeyMessageL( aMessage, aKeyCode );
+                        return;
+                        }
                     }
                     
                 StartCallingL();
@@ -361,15 +380,21 @@
         MPEEngineInfo* info = iStateMachine->PhoneEngineInfo();
         const TPEPhoneNumber& transferTarget = 
             info->UnattendedTransferTarget( CallId() );
- 
+        info->SetIsTransferDial( ETrue );
         TUint32 serviceId = iStateMachine->PhoneEngineInfo()->
             ServiceId( CallId() );
         StateUtils().SelectServiceAndDialL( transferTarget, serviceId );
+        
+        // Store transferor address to phoneengine, this is used for
+        // calling back if transfer call fails for some reason
+        info->SetCallBackAddress( info->RemotePhoneNumber( CallId() ) );
         }
     else
         {
         iStateMachine->SendPhoneEngineMessage( 
             MPEPhoneModel::EPEMessageRejectUnattendedTransfer );
+        iStateMachine->PhoneEngineInfo()->SetCallBackAddress(
+            KNullDesC() );
         }
     }
 
--- a/phoneapp/phoneuivoipextension/src/cphonetransferdialercontroller.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphonetransferdialercontroller.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008, 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"
@@ -19,8 +19,8 @@
 // INCLUDES
 #include <e32base.h>
 
-#include <akntoolbar.h>
 #include <AknsItemID.h>
+#include <AknsUtils.h>
 #include <StringLoader.h>
 
 #include <phoneui.mbg>
@@ -69,6 +69,7 @@
 // might leave.
 //  
 CPhoneTransferDialerController::CPhoneTransferDialerController()
+    : CPhoneDialerController( NULL, *CCoeEnv::Static() )
     {
     }
 
@@ -98,49 +99,6 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneTransferDialerController::Initialize
-// -----------------------------------------------------------
-//
-void CPhoneTransferDialerController::InitializeL( CAknToolbar& aToolbar )
-    {  
-    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
-        "CPhoneTransferDialerController::InitializeL()"); 
-    
-    if ( !iIsInitialized )
-        {    
-        __PHONELOG1( 
-                EAll, 
-                PhoneUIVoIPExtension, 
-                "Toolbar control count:=%d", 
-                aToolbar.CountComponentControls());
-        iToolbar = &aToolbar;
-        // Create transfer specific buttons and add them to the 
-        // toolbar starting from index 0
-        CAknButton* button( NULL );
-    
-        for( TInt i = 0; i < KButtonCount; i++ )
-            {
-            TAknsItemID skinId = SkinId( bArray[i].iIconIndex );
-            // Load tooltip text.
-            HBufC* tooltipText = GetTooltipTextL( bArray[i].iCommandId );  
-            CleanupStack::PushL( tooltipText );
-            button = CreateButtonLC(
-                    bArray[i].iIconIndex, 
-                    bArray[i].iMaskIndex, 
-                    *tooltipText, 
-                    skinId );
-            // Toolbar takes ownership of the button                    
-            iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId, 0, i );
-            CleanupStack::Pop( button );
-            CleanupStack::PopAndDestroy( tooltipText );
-            }      
-        iIsInitialized = ETrue;
-        }
-   
-    iNumberEntryIsEmpty = ETrue;
-    }
-
-// -----------------------------------------------------------
 // CPhoneTransferDialerController::CbaResourceId
 // -----------------------------------------------------------
 //
@@ -155,7 +113,7 @@
 //
 TInt CPhoneTransferDialerController::MenuResourceId() const
     {
-    if ( iNumberEntryIsEmpty )
+    if ( !iNumberAvailable )
         {
         return EPhoneVoIPTransferDialerNumberEntryEmptyMenubar;
         }
@@ -177,84 +135,138 @@
         {
         iNumberEntryPromptText = StringLoader::LoadL( 
             CPhoneMainResourceResolver::Instance()->
-            ResolveResourceID( EPhoneVoIPTransferAddress ) );
+            ResolveResourceID( EPhoneVoIPTransferAddress ), &iCoeEnv );
         }  
     
     return *iNumberEntryPromptText;
     }
 
-// -----------------------------------------------------------
-// CPhoneTransferDialerController::HandleNumberEntryIsEmpty
-// -----------------------------------------------------------
+// ---------------------------------------------------------------------------
+// GetButtonData
+// ---------------------------------------------------------------------------
 //
-void CPhoneTransferDialerController::HandleNumberEntryIsEmpty( TBool aIsEmpty )
+TInt CPhoneTransferDialerController::GetButtonData( TButtonIndex aIndex, RPointerArray<CButtonData>& aData ) const
     {
-    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
-        "CPhoneTransferDialerController::HandleNumberEntryIsEmpty()");
-    __ASSERT_DEBUG( iToolbar, Panic( EPhoneCtrlInvariant ) );
-    iToolbar->SetItemDimmed( EPhoneCmdTransferDialerOk, aIsEmpty, EFalse );
-    iToolbar->SetItemDimmed( EPhoneCmdTransferDialerSearch, !aIsEmpty, EFalse );
-    iToolbar->SetItemDimmed( EPhoneDialerCmdClear, aIsEmpty, EFalse );
-    iNumberEntryIsEmpty = aIsEmpty;
+    TInt err = KErrNone;
+    
+    TInt arrayIdx = KErrNotFound;
+    if ( aIndex == ECallButton )
+        {
+        arrayIdx = 0;
+        }
+    else if ( aIndex == EPhonebookButton )
+        {
+        arrayIdx = 1;
+        }
+    
+    if ( arrayIdx >= 0 )
+        {
+        const TPhoneDialerToolbarButton& arrItem = bArray[ arrayIdx ];
+        CButtonData* btn = NULL;
+        TRAP( err, btn = CreateButtonDataL( arrItem.iCommandId, 
+                                            arrItem.iIconIndex, 
+                                            arrItem.iMaskIndex ) );
+        if ( !err )
+            {
+            err = aData.Append( btn );
+            if ( err )
+                {
+                delete btn;
+                }
+            }
+        }
+    else
+        {
+        // Trust base class on other buttons (i.e. the clear button)
+        err = CPhoneDialerController::GetButtonData( aIndex, aData );
+        }
+    
+    return err;
     }
 
-// -----------------------------------------------------------
-// CPhoneTransferDialerController::ShowButtons
-// -----------------------------------------------------------
+// ---------------------------------------------------------------------------
+// ButtonState
+// ---------------------------------------------------------------------------
 //
-void CPhoneTransferDialerController::ShowButtons( TBool aShow )
+TInt CPhoneTransferDialerController::ButtonState( TButtonIndex aIndex ) const
     {
-    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
-        "CPhoneTransferDialerController::ShowButtons()");
-    __ASSERT_DEBUG( iToolbar, Panic( EPhoneCtrlInvariant ) );
-    for( TInt i = 0; i < KButtonCount; i++ )
+    // Out button have only one state. Trust base class on clear button
+    if ( aIndex == ECallButton || aIndex == EPhonebookButton )
         {
-        iToolbar->HideItem( bArray[ i ].iCommandId, !aShow, EFalse );
-        }    
-    
-    if ( aShow )
+        return 0;
+        }
+    else
         {
-        iToolbar->SetItemDimmed( EPhoneCmdTransferDialerOk, ETrue, EFalse ); 
-        iToolbar->SetItemDimmed( EPhoneCmdTransferDialerSearch, EFalse, EFalse ); 
-        iToolbar->SetItemDimmed( EPhoneDialerCmdClear, ETrue, EFalse ); 
+        return CPhoneDialerController::ButtonState( aIndex );
         }
-    
-    iToolbar->DrawDeferred();
     }
 
 // ---------------------------------------------------------------------------
-// PhoneTransferDialerController::CreateButtonLC
+// ButtonDimmed
 // ---------------------------------------------------------------------------
 //
-CAknButton* CPhoneTransferDialerController::CreateButtonLC( 
-    TInt aNormalIconId,
-    TInt aNormalMaskId,
-    const TDesC& aTooltipText,
-    const TAknsItemID& aSkinIconId ) const
-    {   
+TBool CPhoneTransferDialerController::ButtonDimmed( TButtonIndex aIndex ) const
+    {
+    TBool dimmed = EFalse;
+    
+    // Ok is dimmed when there's no number. Search is dimmed when there is
+    // a number. Trust base class on clear button.
+    if ( aIndex == ECallButton )
+        {
+        dimmed = !iNumberAvailable;
+        }
+    else if ( aIndex == EPhonebookButton )
+        {
+        dimmed = iNumberAvailable;
+        }
+    else
+        {
+        dimmed = CPhoneDialerController::ButtonDimmed( aIndex );
+        }
+    return dimmed;
+    }
+
+// ---------------------------------------------------------------------------
+// EasyDialingAllowed
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneTransferDialerController::EasyDialingAllowed() const
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// PhoneTransferDialerController::CreateButtonDataL
+// ---------------------------------------------------------------------------
+//
+MPhoneDialerController::CButtonData* CPhoneTransferDialerController::CreateButtonDataL(
+        TInt aCommandId,
+        TInt aNormalIconId,
+        TInt aNormalMaskId ) const
+    {
     __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
-        "CPhoneTransferDialerController::CreateButtonLC()");
+            "CPhoneTransferDialerController::CreateButtonDataL()");
+    
+    // Load tooltip text.
+    HBufC* tooltipText = GetTooltipTextL( aCommandId );
+    CleanupStack::PushL( tooltipText );
+    
+    // Load icon
     TFileName mifPath( KDriveZ );
     mifPath.Append( KDC_APP_BITMAP_DIR );
     mifPath.Append( KPhoneMifFileName );
-
-    CAknButton* button = CAknButton::NewLC( 
-        mifPath,
-        aNormalIconId,
-        aNormalMaskId,
-        -1, -1, // dimmed
-        -1, -1, // pressed
-        -1, -1, // hover
-        KNullDesC,
-        aTooltipText, // help
-        0, // flags
-        0, // state flags
-        aSkinIconId );
-                                                                 
-    button->SetFocusing( EFalse );
-    button->SetBackground( iToolbar );
-
-    return button;
+    
+    TAknsItemID skinId = SkinId( aNormalIconId );
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    CGulIcon* icon = AknsUtils::CreateGulIconL( skin, skinId, mifPath, 
+                aNormalIconId, aNormalMaskId );
+    CleanupStack::PushL( icon );
+    
+    CButtonData* btnData = new (ELeave) CButtonData( aCommandId, icon, tooltipText );
+    CleanupStack::Pop( icon );
+    CleanupStack::Pop( tooltipText );
+    
+    return btnData;
     }
 
 // ---------------------------------------------------------------------------
@@ -278,13 +290,16 @@
             resourceId = R_VOIP_DIALER_TOOLTIP_SEARCH;
             break;                      
        default:
-           tooltip = KNullDesC().Alloc();
            break;
        }
            
     if ( resourceId )
         {
-        tooltip = StringLoader::LoadL( resourceId, CCoeEnv::Static() );
+        tooltip = StringLoader::LoadL( resourceId, &iCoeEnv );
+        }
+    else
+        {
+        tooltip = KNullDesC().AllocL();
         }
     return tooltip;
     }
--- a/phoneapp/phoneuivoipextension/src/cphoneunattendedtransfercmdhandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphoneunattendedtransfercmdhandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -17,6 +17,8 @@
 
 #include <featmgr.h>
 #include <mpeengineinfo.h>
+#include <StringLoader.h>
+
 #include "cphoneunattendedtransfercmdhandler.h"
 
 #include "cphonelogger.h"
@@ -32,6 +34,9 @@
 #include "tphonecmdparamquery.h"
 #include "tphonecmdparamglobalnote.h"
 #include "cphonemainresourceresolver.h"
+#include "cphonestatemachinevoip.h"
+#include "cphonestateutilsvoip.h"
+
 
 
 // ======== MEMBER FUNCTIONS ========
@@ -147,7 +152,23 @@
                 }
             }
             break;
-        
+        case EPhoneCmdUnattendedTransferCallBackOk:
+            {
+            MPEEngineInfo* info = iStateMachine.PhoneEngineInfo();
+            const TDesC& callBackToAddr = info->CallBackAddress();
+            // Service id used for last call is used to call back
+            TUint32 serviceId = info->ServiceIdCommand();
+            static_cast<CPhoneStateMachineVoIP&>( 
+                iStateMachine ).StateUtils().SelectServiceAndDialL( 
+                    callBackToAddr, serviceId );
+            }
+            break;
+        case EPhoneCmdUnattendedTransferCallBackCancel:
+            {
+            MPEEngineInfo* info = iStateMachine.PhoneEngineInfo();
+            info->SetCallBackAddress( KNullDesC );
+            }
+            break;
         default:
             __PHONELOG( EOnlyFatal, PhoneUIVoIPExtension, 
                 "CPhoneUnattendedTransferCmdHandler::HandleCommandL, DEFAULT" );    
@@ -322,3 +343,48 @@
     iViewCommandHandle.ExecuteCommandL( 
         EPhoneViewShowGlobalNote, &globalNoteParam );
     }
+
+// ---------------------------------------------------------------------------
+// CPhoneUnattendedTransferCmdHandler::LaunchCallBackQuery
+// ---------------------------------------------------------------------------
+//
+void CPhoneUnattendedTransferCmdHandler::LaunchCallBackQueryL()
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+          "CPhoneUnattendedTransferCmdHandler::LaunchCallBackQueryL() ")
+    MPEEngineInfo* info = iStateMachine.PhoneEngineInfo();
+    const TDesC& callBackToAddr = info->CallBackAddress();
+    // We cannot do call back if original call had private address
+    if ( callBackToAddr.Compare( KNullDesC ) == 0 )
+        {
+        return;
+        }
+          
+    TPhoneCmdParamQuery queryParam;
+    queryParam.SetQueryType( EPhoneGlobalMsgQuery );
+    
+    HBufC* msgHeader = 
+      StringLoader::LoadLC( CPhoneMainResourceResolver::Instance()->
+          ResolveResourceID( EPhoneVoIPTransferCallBackHeader ) );
+    queryParam.SetQueryPrompt( *msgHeader );
+         
+    HBufC* queryText = 
+      StringLoader::LoadLC( CPhoneMainResourceResolver::Instance()->
+          ResolveResourceID( 
+                  EPhoneVoIPTransferCallBackText ), callBackToAddr );
+    
+    queryParam.SetDataText( &queryText->Des() );
+    
+    queryParam.SetDefaultCba( R_AVKON_SOFTKEYS_OK_CANCEL );
+    
+    // configure custom command mappings for user responses
+    queryParam.SetCbaCommandMapping( 
+      EAknSoftkeyOk, EPhoneCmdUnattendedTransferCallBackOk );
+    queryParam.SetCbaCommandMapping( 
+      EAknSoftkeyCancel, EPhoneCmdUnattendedTransferCallBackCancel );
+    
+    iViewCommandHandle.ExecuteCommandL( EPhoneViewShowQuery, &queryParam );
+    
+    CleanupStack::PopAndDestroy( queryText );
+    CleanupStack::PopAndDestroy( msgHeader );
+    }
--- a/phoneapp/phoneuivoipextension/src/cphonevcchandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/src/cphonevcchandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -56,7 +56,8 @@
     MPhoneStateMachine& aStateMachine,
     MPhoneViewCommandHandle& aViewCommandHandle ) : 
     iStateMachine( aStateMachine ),
-    iViewCommandHandle( aViewCommandHandle ), iVccHoReady( ETrue )
+    iViewCommandHandle( aViewCommandHandle ), iVccHoReady( ETrue ),
+    iHOFailure ( EFalse )
     {
     }
 
@@ -68,6 +69,7 @@
 CPhoneVccHandler::~CPhoneVccHandler()
     {
     delete iPropListener;
+    delete iPropListenerReq;
     TRAPD( err, CancelHandoverNoteTimerL() );
     if ( err != KErrNone )
         {
@@ -85,7 +87,12 @@
     {
     iPropListener = CVccUiPsPropertyListener::NewL( KVccPropKeyHoStatus );
     iPropListener->AddObserverL( *this );
- 	iPropListener->Start();
+    iPropListener->Start();
+
+    iPropListenerReq = CVccUiPsPropertyListener::NewL( KVccPropKeyHoRequest );
+    iPropListenerReq->AddObserverL( *this );
+    iPropListenerReq->Start();
+ 	
     }
 
 // -----------------------------------------------------------
@@ -274,7 +281,15 @@
         
     if ( iVccHoReady && !iHandoverNoteTimer )
         {
-        iViewCommandHandle.ExecuteCommandL( EPhoneViewRemoveGlobalNote );            
+        iViewCommandHandle.ExecuteCommandL( EPhoneViewRemoveGlobalNote );
+        if ( iHOFailure )
+            {
+            iHOFailure = EFalse;
+            CPhoneState* phoneState = 
+            static_cast< CPhoneState* >( iStateMachine.State() ); 
+            phoneState->SendGlobalInfoNoteL( EPhoneVoIPHandoverFail );
+            
+            }
         } 
     }
     
@@ -284,10 +299,16 @@
 //
 void CPhoneVccHandler::HandoverInProgressNoteL( TInt aCommand )
     {
-     TPhoneCmdParamGlobalNote globalNoteParam;  
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+            "CPhoneVccHandler::HandoverInProgressNoteL()");
+    
+    TPhoneCmdParamGlobalNote globalNoteParam;  
           
-// Check notification tone user setting
-     TInt tone = GetHoNotifToneModeL();
+    // Check notification tone user setting
+    TInt tone = GetHoNotifToneModeL();
+    
+    __PHONELOG1( EBasic, EPhoneControl,
+                "CPhoneVccHandler::HandoverInProgressNoteL - tone: %d", tone );
     
       if ( tone == 1 )
            {
@@ -324,6 +345,41 @@
     __PHONELOG1( EBasic, EPhoneControl,
             "CPhoneVccHandler::VccPropertyChangedL - key: %d", aValue );
 
+    if( aKeyId == KVccPropKeyHoRequest )
+        {
+        switch( aValue )
+            {
+            case  EVccAutomaticStartPsToCsHoRequest:
+                {
+                __PHONELOG( EBasic, PhoneUIVoIPExtension,
+                    "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccAutomaticStartPsToCsHoRequest" );
+                // Do not show if already started since the wait note is 
+                // already visible
+                if ( iVccHoReady && !iHandoverNoteTimer )
+                    {
+                    iVccHoReady = EFalse;
+                    HandoverInProgressNoteL( EPhoneVoIPWaitHandoverFromWlan );
+                    }
+                }
+                break;
+            case EVccAutomaticStartCsToPsHoRequest:
+                {
+                __PHONELOG( EBasic, PhoneUIVoIPExtension,
+                    "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccAutomaticStartCsToPsHoRequest" );
+                // Do not show if already started since the wait note is 
+                // already visible
+                if ( iVccHoReady && !iHandoverNoteTimer )
+                    {
+                    iVccHoReady = EFalse;
+                    HandoverInProgressNoteL( EPhoneVoIPWaitHandoverFromGsm );
+                    }
+                }                
+                break;
+            default:
+                // none
+                break;
+            }
+        }
     
     if( aKeyId == KVccPropKeyHoStatus )
   		{
@@ -338,11 +394,12 @@
                 if( !iVccHoReady )
                     {
                     iVccHoReady = ETrue;
-                    CPhoneState* phoneState = 
-                               static_cast< CPhoneState* >( iStateMachine.State() ); 
-                    CancelHandoverNoteTimerL();
-                    phoneState->SendGlobalInfoNoteL( EPhoneVoIPHandoverFail );
-                    }
+                    iHOFailure = ETrue;
+                    if ( !iHandoverNoteTimer )
+                        {
+                        RemoveHandoverNoteL();
+                        }
+                     }
                  }
                 break;
             case EVccCsToPsHoSuccessful:
@@ -358,9 +415,9 @@
                 {
                 __PHONELOG( EBasic, PhoneUIVoIPExtension,
                     "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- CsToPsHoStarted" );
-                // Do not show if manually started since the wait note is 
+                // Do not show if already started since the wait note is 
                 // already visible
-                if ( iVccHoReady )
+                if ( iVccHoReady && !iHandoverNoteTimer )
                     {
                     iVccHoReady = EFalse;
                     HandoverInProgressNoteL( EPhoneVoIPWaitHandoverFromGsm );
@@ -371,9 +428,9 @@
                 {
                 __PHONELOG( EBasic, PhoneUIVoIPExtension,
                     "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- PsToCsHoStarted" );
-                // Do not show if manually started since the wait note is 
+                // Do not show if already started since the wait note is 
                 // already visible
-                if ( iVccHoReady )
+                if ( iVccHoReady && !iHandoverNoteTimer )
                     {
                     iVccHoReady = EFalse;
                     HandoverInProgressNoteL( EPhoneVoIPWaitHandoverFromWlan);
@@ -401,6 +458,14 @@
                 iVccHoAllowedToWlan = ETrue;
                 iNoHoIfMultiCall = EFalse;
                 iVccUnavailable = EFalse;
+                if( !iVccHoReady )
+                    {
+                    iVccHoReady = ETrue;
+                    if ( !iHandoverNoteTimer )
+                        {
+                        RemoveHandoverNoteL();
+                        }
+                     }
                 break;
                 }
             case EVccCsToPsNotAllowed:
@@ -470,6 +535,9 @@
 //
 TInt CPhoneVccHandler::GetHoNotifToneModeL()
     {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+            "CPhoneVccHandler::GetHoNotifToneModeL() ");
+    
     // Find out VCC service id
      CSPProperty* property = CSPProperty::NewLC();
     
@@ -484,6 +552,9 @@
     TInt voipId;
     TInt error = property->GetValue( voipId );
     
+    __PHONELOG1( EBasic, EPhoneControl,
+        "CPhoneVccHandler::GetHoNotifToneModeL - voipId: %d", voipId ); 
+    
     // Find and get the HO notification tone property
     TInt tone = 0;
     RBuf value;
--- a/phoneapp/phoneuivoipextension/srcdata/phoneuivoip.rss	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/phoneuivoipextension/srcdata/phoneuivoip.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -853,7 +853,7 @@
         MENU_ITEM 
             {
             command = EPhoneCmdTransferDialerOk; 
-            txt = text_softkey_accept;
+            txt = qtn_dialer_options_send_uatransfer_req;
             }, 
         MENU_ITEM 
             {
@@ -909,7 +909,7 @@
 //
 RESOURCE TBUF r_voip_dialer_tooltip_accept
     {
-    buf = text_softkey_accept;
+    buf = qtn_dialer_options_send_uatransfer_req;
     } 
 
 // -----------------------------------------------------------------------------
@@ -1368,6 +1368,17 @@
 
 //-----------------------------------------------------------------------------
 //
+//    r_voip_dialer_unatt_transfer_input_field_text "Address:"
+//
+// -----------------------------------------------------------------------------
+// 
+RESOURCE TBUF r_voip_dialer_unatt_transfer_input_field_text
+    {
+    buf = qtn_dialer_unatt_transfer_input_field_text;
+    }
+
+//-----------------------------------------------------------------------------
+//
 //    r_phoneui_numberacq_options_menu_item_xsp
 //    "%U call"
 //   
@@ -1380,6 +1391,28 @@
     {
     buf = qtn_call_sub_voip_with_name;
     }
+
+//-----------------------------------------------------------------------------
+//
+//    r_voip_transfer_call_back "Call back to\n%U"
+//
+// -----------------------------------------------------------------------------
+// 
+RESOURCE TBUF r_voip_transfer_call_back
+    {
+    buf = qtn_voip_transfer_call_back;
+    }
+
+//-----------------------------------------------------------------------------
+//
+//    r_voip_transfer_call_back_header "Call back request:"
+//
+// -----------------------------------------------------------------------------
+// 
+RESOURCE TBUF r_voip_transfer_call_back_header
+    {
+    buf = qtn_voip_transfer_call_back_header;
+    }
     
 // End of File
 
--- a/phoneapp/silenceactionplugin/data/silence.rul	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneapp/silenceactionplugin/data/silence.rul	Fri Apr 23 14:59:43 2010 +0100
@@ -1,133 +1,45 @@
 <script xmlns="http://www.nokia.com/ns/cep/script/1.0/"
 xmlns:cep="http://www.nokia.com/ns/cep/1.0/">
-    <!-- Must have sensor interaction active -->
+
+    <!-- Check if we have incoming call and we receive display down orientation event -->
     <if>
-        <equals>
-            <contextRef source='Sensor' type='Setting.Active'/>
-            <string>Off</string>
-        </equals>
-        <actions>
-        </actions>
-    </if>
-    <!-- Check if we have incoming call and we receive a double tap event -->
-    <elseIf>
         <and>
-            <!-- Must have a ringin call and receive new double tap event or orientation event from sensor -->
+            <!-- Must have a ringin call and receive orientation event from sensor -->
             <equals>
                 <contextRef source='Call' type='State'/>
                 <string>Ringing</string>
             </equals>
-            <or>
-                <and>
-                    <!-- Check that double tap interaction is set -->
-                    <equals>
-                        <contextRef source='Sensor' type='Setting.TappingInteraction.SilenceCalls'/>
-                        <string>On</string>
-                    </equals>
-                    <contextUpdated>
-                        <contextRef source='Sensor' type='Event.DoubleTap'/>
-        	          </contextUpdated>
-                </and>
-    	          <and>
-                    <!-- Check that turning interaction is set -->
-                    <equals>
-                        <contextRef source='Sensor' type='Setting.TurningInteraction.SilenceCalls'/>
-                        <string>On</string>
-                    </equals>
-                    <!-- ...and previous orientation is not 'Undefined' ... -->
-                    <notEqual>
-                        <contextRef source='Sensor' type='Event.Orientation.Previous'/>
-                        <string>Undefined</string>
-                    </notEqual>
-		                <contextChanged>
-		                    <contextRef source='Sensor' type='Event.Orientation'/>
-		    	    	    </contextChanged>
-    	        	    <equals>
-                        <contextRef source='Sensor' type='Event.Orientation'/>
-                    	  <string>DisplayDownwards</string>
-    	              </equals>
-    	          </and>
-            </or>
+            <equals>
+                <contextRef source='Sensor' type='Setting.Active'/>
+                <string>On</string>
+            </equals>
+            <!-- Check that turning interaction is set -->
+            <equals>
+                <contextRef source='Sensor' type='Setting.TurningInteraction.SilenceCalls'/>
+                <string>On</string>
+            </equals>
+            <!-- ...and previous orientation is not 'Undefined' ... -->
+            <notEqual>
+                <contextRef source='Sensor' type='Event.Orientation.Previous'/>
+                <string>Undefined</string>
+            </notEqual>
+            <contextChanged>
+                <contextRef source='Sensor' type='Event.Orientation'/>
+            </contextChanged>
+            <equals>
+                <contextRef source='Sensor' type='Event.Orientation'/>
+                <string>DisplayDownwards</string>
+            </equals>
         </and>
         <actions>
+            <!-- DEBUG -->
+            <!-- <publishContext><contextRef source="Test" type="Log" value="silence.rul - 01 silence call only"/></publishContext> -->
+
             <!-- Silence ringing tone -->
             <Phone Command='Silence'/>
             <!-- Vibra feedback -->
             <Vibra Mode='Start' Delay='0' Repeats='2' RepeatInterval='200' Duration='50' Intensity='50'/>
         </actions>
-    </elseIf>
-    <!-- Check if we just have incoming call -->
-    <elseIf>
-        <and>
-            <!-- Check that the feature has not yet been enabled -->
-            <notEqual>
-                <contextRef source='Sensor' type='Event.AutoRotateAndDoubleTap'/>
-                <string>Enabled</string>
-            </notEqual>
-            <equals>
-                <contextRef source='Call' type='State'/>
-                <string>Ringing</string>
-            </equals>
-        </and>
-        <actions>
-            <!-- Activate double tap events from sensor -->
-            <publishContext>
-                <contextRef source='Sensor'
-                    type='Event'
-                    value='DoubleTap.Activate'/>
-            </publishContext>
-            <!-- Activate orientation events from sensor -->
-            <publishContext>
-                <contextRef source='Sensor'
-                    type='Event'
-                    value='Orientation.Activate'/>
-            </publishContext>
-            
-            <!-- Mark feature as 'Enabled' -->
-            <publishContext>
-                <contextRef source="Sensor" type="Event.AutoRotateAndDoubleTap" value="Enabled"/>
-            </publishContext>
-        
-        </actions>
-    </elseIf>
-    <!-- If we have call in 'Connected' or 'Disconnected' state -->
-    <elseIf>
-        <!-- Check that the feature has not already been disabled -->
-        <and>
-            <notEqual>
-                <contextRef source='Sensor' type='Event.AutoRotateAndDoubleTap'/>
-                <string>Disabled</string>
-            </notEqual>
-            <or>
-                <equals>
-                    <contextRef source='Call' type='State'/>
-                    <string>Connected</string>
-                </equals>
-                <equals>
-                    <contextRef source='Call' type='State'/>
-                    <string>Disconnected</string>
-                </equals>
-            </or>
-        </and>
-        <actions>
-            <!-- Deactivate double tap events from sensor -->
-            <publishContext>
-                <contextRef source='Sensor'
-                    type='Event'
-                    value='DoubleTap.Deactivate'/>
-            </publishContext>
-            <!-- Deactivate orientation events from sensor -->
-            <publishContext>
-                <contextRef source='Sensor'
-                    type='Event'
-                    value='Orientation.Deactivate'/>
-            </publishContext>
-            
-            <!-- Mark feature as 'Disabled' -->
-            <publishContext>
-                <contextRef source="Sensor" type="Event.AutoRotateAndDoubleTap" value="Disabled"/>
-            </publishContext>
-        
-        </actions>
-    </elseIf>
+    </if>
+
 </script>
\ No newline at end of file
--- a/phoneengine/PhoneCntFinder/ContactService/inc/CPhCntContact.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/CPhCntContact.h	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 #define CPHCNTCONTACT_H
 
 #include <e32base.h>
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 #include "tphcntnumber.h"
 
 class MPhCntContactFields;
@@ -333,4 +333,4 @@
     CCntRawPhoneNumberExtractor* iNumberExtractor;
     };
 
-#endif // CPHCNTCONTACT_H
\ No newline at end of file
+#endif // CPHCNTCONTACT_H
--- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselection.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselection.h	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 #define CPHCNTCONTACTDATASELECTION_H
 
 #include <e32base.h>
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 
 NONSHARABLE_CLASS( CPhCntSelectedData ) : public CBase
     {
--- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselectionimpl.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselectionimpl.h	Fri Apr 23 14:59:43 2010 +0100
@@ -25,7 +25,7 @@
 #include "tphcntcontactlinkresult.h"
 #include "mphcntaiwservice.h"
 #include "MPhCntContactFetchObserver.h"
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 
 class MPhCntServiceRequestParamFactory;
 class MPhCntServiceRequestParam;
--- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactfieldsresolver.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactfieldsresolver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 #include <e32base.h>
 
 #include "tphcntcontactfield.h"
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 #include "mphcntcontactfields.h"
 
 class MVPbkContactLink;
--- a/phoneengine/PhoneCntFinder/ContactService/inc/mphcntcontactfields.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/mphcntcontactfields.h	Fri Apr 23 14:59:43 2010 +0100
@@ -19,7 +19,7 @@
 #define MPHCNTCONTACTFIELDS_H
 
 #include <e32std.h>
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 #include "tphcntnumber.h"
 
 class MVPbkContactLinkArray;
--- a/phoneengine/PhoneCntFinder/ContactService/inc/tphcntcontactfield.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/tphcntcontactfield.h	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 
 #include <e32base.h>
 #include <TVPbkFieldVersitProperty.h>
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 #include "tphcntnumber.h"
 
 class MPhCntContactManager;
--- a/phoneengine/PhoneCntFinder/ContactService/inc/tphcntnumber.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/tphcntnumber.h	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 
 #include <e32std.h>
 
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 
 /**
  *  Represents phone number.
--- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -82,8 +82,8 @@
 	
 	
 	iCriteriaArray.AppendL( assignCriteria  );
+	CleanupStack::Pop( assignCriteria );
 	iAiwService->AttachL( iCriteriaArray ); 
-	CleanupStack::Pop( assignCriteria );
 	}
 
         
--- a/phoneengine/PhoneCntFinder/ContactService/src/cphcntmatchervoipimpl.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntmatchervoipimpl.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -27,7 +27,7 @@
 #include "cphcntmatchcontact.h"
 #include "cphcntvoipcontactmatchstrategy.h"
 #include "tphcntvoipmatchArray.h"
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 #include "CPhCntContact.h"
 #include "cphcntvpbkcontactid.h"
 #include "cphcntfetchcontact.h"
--- a/phoneengine/PhoneCntFinder/Group/bld.inf	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/Group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -23,12 +23,12 @@
 PRJ_EXPORTS
 ../inc/CPhoneCntFactory.h                   |../../../inc/cphonecntfactory.h
 ../inc/CPhoneCntSaveAddToName.h             |../../../inc/cphonecntsaveaddtoname.h
-../inc/MPhCntMatch.h                        |../../../inc/mphcntmatch.h
+../inc/mphcntmatch.h                        |../../../inc/mphcntmatch.h
 ../inc/CPhCntMatcher.h                      |../../../inc/cphcntmatcher.h
 ../inc/cphcntcontactid.h                    |../../../inc/cphcntcontactid.h
 
 ../inc/Misc/CPhCntSingleItemFetch.h         |../../../inc/cphcntsingleitemfetch.h
-../inc/Misc/CPhCntThumbnailLoader.h         |../../../inc/cphcntthumbnailloader.h
+../inc/Misc/cphcntthumbnailloader.h         |../../../inc/cphcntthumbnailloader.h
 ../inc/Misc/MPhCntThumbnailLoaderObserver.h |../../../inc/mphcntthumbnailloaderobserver.h
 ../inc/Misc/CPhCntSpeedDialMonitor.h        |../../../inc/cphcntspeeddialmonitor.h
 ../inc/Misc/CPhCntRfsHandler.h              |../../../inc/cphcntrfshandler.h
--- a/phoneengine/PhoneCntFinder/inc/CPhCntMatch.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/inc/CPhCntMatch.h	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 #define CPHCNTMATCH_H
 
 //  INCLUDES
-#include "MPhCntMatch.h"
+#include "mphcntmatch.h"
 
 // FORWARD DECLARATIONS
 class CPhCntMatchItem;
--- a/phoneengine/PhoneCntFinder/inc/CPhCntMatchItem.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/inc/CPhCntMatchItem.h	Fri Apr 23 14:59:43 2010 +0100
@@ -24,7 +24,7 @@
 #include <CNTDEF.H>     // TContactItemId
 
 #include "CPhCntMatcher.h" // TFieldId
-#include "MPhCntMatch.h" // TPhCCliType
+#include "mphcntmatch.h" // TPhCCliType
 
 // CONSTANTS
 
--- a/phoneengine/PhoneCntFinder/inc/Misc/CPhCntThumbnailLoaderImpl.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/inc/Misc/CPhCntThumbnailLoaderImpl.h	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 #define CPHCNTTHUMBNAILLOADERIMPL_H
 
 // INCLUDES
-#include    "CPhCntThumbnailLoader.h"
+#include    "cphcntthumbnailloader.h"
 #include    "mphcntthumbnailloader.h"
 
 // FORWARD DECLARATIONS
--- a/phoneengine/PhoneCntFinder/inc/Misc/MPhCntThumbnailLoaderObserver.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/inc/Misc/MPhCntThumbnailLoaderObserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include    <e32base.h>
-#include    "CPhCntThumbnailLoader.h"
+#include    "cphcntthumbnailloader.h"
 
 // FORWARD DECLARATIONS
 class CFbsBitmap;
--- a/phoneengine/PhoneCntFinder/src/CPhoneCntFactoryImpl.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/PhoneCntFinder/src/CPhoneCntFactoryImpl.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -45,7 +45,7 @@
 #include    "cphcntstoreloaderimpl.h"
 
 #include    <coemain.h>     // CONE
-#include    <SecUi.h>       // For TSecUi
+#include    <secui.h>       // For TSecUi
 #include    <featmgr.h>     // Feature Manager
 #include    <talogger.h>
 
--- a/phoneengine/audiohandling/data/defaultbeep.rss	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/audiohandling/data/defaultbeep.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2006-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"
@@ -231,6 +231,33 @@
 	// 11 = OPCODE_END
 	}
 
+RESOURCE VAR_ARRAY r_net_call_waiting_alternative_tone
+        {
+        sequence={0,17,10,83,20,64,10,83,20,64,125,64,125,64,100,83,20,64,10,83,20,11};
+        // 0  = OPCODE_SEQUENCE_START
+	// 17 = OPCODE_DURATION_UNIT
+	// 10 = duration unit => tone duration is 10ms * tone_tick
+	// 83-64=19=AUD_TONE_NETWORK_DUAL_FREQ_2 = 440Hz
+	// 20 = tone_tick = 200ms
+	// 64-64 = 0 = AUD_TONE_FREQ_OFF         = 0Hz
+	// 10 = tone_tick = 100ms
+	// 83-64=19=AUD_TONE_NETWORK_DUAL_FREQ_2 = 440Hz
+	// 20 = tone_tick = 200ms
+	// 64-64 = 0 = AUD_TONE_FREQ_OFF         = 0Hz
+	// 125 = tone_tick = 1250ms
+	// 64-64 = 0 = AUD_TONE_FREQ_OFF         = 0Hz
+	// 125 = tone_tick = 1250ms
+	// 64-64 = 0 = AUD_TONE_FREQ_OFF         = 0Hz
+	// 100 = tone_tick = 1000ms
+	// 83-64=19=AUD_TONE_NETWORK_DUAL_FREQ_2 = 440Hz
+	// 20 = tone_tick = 200ms
+	// 64-64 = 0 = AUD_TONE_FREQ_OFF         = 0Hz
+	// 10 = tone_tick = 100ms
+	// 83-64=19=AUD_TONE_NETWORK_DUAL_FREQ_2 = 440Hz
+	// 20 = tone_tick = 200ms
+	// 11 = OPCODE_END
+        }
+
 RESOURCE VAR_ARRAY r_data_call_tone
 	{
 	sequence={0,17,6,2,252,10,8,5,8,84,3,89,3,6,10,247,64,50,7,11};
--- a/phoneengine/audiohandling/group/audiohandling.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/audiohandling/group/audiohandling.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2004-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"
@@ -62,5 +62,6 @@
 LIBRARY         flogger.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mmfdevsound.lib
+LIBRARY         featmgr.lib
 
 LANG            SC
\ No newline at end of file
--- a/phoneengine/audiohandling/src/cpeaudioinbandtoneplayer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/audiohandling/src/cpeaudioinbandtoneplayer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -27,6 +27,7 @@
 #include    <barsread.h>
 #include    <data_caging_path_literals.hrh> 
 #include    <defaultbeep.rsg>           
+#include    <featmgr.h>
 #include    <pepanic.pan>
 #include    <talogger.h>    
 
@@ -147,7 +148,18 @@
     HBufC8* resourceSpecial = resourceFile.AllocReadL( R_NET_SPECIAL_INFORMATION );
     HBufC8* resourceRadioPath = resourceFile.AllocReadL( R_NET_RADIO_NOT_AVAILABLE );
     HBufC8* resourceRingGoing = resourceFile.AllocReadL( R_NET_RING_GOING );
-    HBufC8* resourceCallWaiting = resourceFile.AllocReadL( R_NET_CALL_WAITING );
+    
+    HBufC8* resourceCallWaiting;
+    
+    if ( FeatureManager::FeatureSupported( KFeatureIdFfAlternativeCallWaitingTone ) )
+        {
+        resourceCallWaiting = resourceFile.AllocReadL( R_NET_CALL_WAITING_ALTERNATIVE_TONE );
+        }
+    else
+        {
+        resourceCallWaiting = resourceFile.AllocReadL( R_NET_CALL_WAITING );
+        }  
+        
     HBufC8* dataCallTone = resourceFile.AllocReadL( R_DATA_CALL_TONE );
     HBufC8* noSoundSequence = resourceFile.AllocReadL( R_NO_SOUND_SEQUENCE );
     HBufC8* beepSequence = resourceFile.AllocReadL( R_BEEP_SEQUENCE );
--- a/phoneengine/callhandling/bwins/callhandlingu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/callhandling/bwins/callhandlingu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -76,4 +76,5 @@
 	?ForwardCallToAddress@CPECallHandling@@UAEHH@Z @ 75 NONAME ; int CPECallHandling::ForwardCallToAddress(int)
 	??1CPEDtmfHandling@@UAE@XZ @ 76 NONAME ; CPEDtmfHandling::~CPEDtmfHandling(void)
 	?CallCapsChanged@CPEConferenceCall@@UAEXW4TCCEConferenceCallCaps@MCCEConferenceCallObserver@@@Z @ 77 NONAME ; void CPEConferenceCall::CallCapsChanged(enum MCCEConferenceCallObserver::TCCEConferenceCallCaps)
+	?ReleaseConference@CPECallHandling@@UAEHXZ @ 78 NONAME ; int CPECallHandling::ReleaseConference(void)
 
--- a/phoneengine/callhandling/eabi/callhandlingu.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/callhandling/eabi/callhandlingu.def	Fri Apr 23 14:59:43 2010 +0100
@@ -165,4 +165,6 @@
 	_ZThn8_NK15CPECallHandling16GetCallIdByStateEj @ 164 NONAME
 	_ZThn8_NK15CPECallHandling28GetCallTerminatedDiagnosticsER4TBufILi128EE @ 165 NONAME
 	_ZThn8_NK15CPECallHandling9CallOwnerEv @ 166 NONAME
+	_ZN15CPECallHandling17ReleaseConferenceEv @ 167 NONAME
+	_ZThn8_N15CPECallHandling17ReleaseConferenceEv @ 168 NONAME
 
--- a/phoneengine/callhandling/inc/cpecallhandling.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/callhandling/inc/cpecallhandling.h	Fri Apr 23 14:59:43 2010 +0100
@@ -432,6 +432,13 @@
         * @return Error (KErrNone is success).
         */
         IMPORT_C TInt ForwardCallToAddress( TInt aIndex );
+        
+        /**
+        * Makes HangUp requests for conference call. 
+        * @return Error (ECCPErrorNotFound if there is not a conference call 
+        * 
+        */
+        IMPORT_C TInt ReleaseConference();
 
     public: // From MPECallHandling - DTMF related
         /**
@@ -655,8 +662,9 @@
          * different from dialled number.
          * @param aCallid.
          * @param aCall reference to call object
+         * @return Updating Colp number was necessary.
          */
-        void SetColpNumber( TInt aCallId, const MCCECall& aCall ) const;
+        TBool UpdateColpNumber( TInt aCallId, const MCCECall& aCall ) const;
 
     protected:
         // Phone model instance which owns this object.
--- a/phoneengine/callhandling/inc/mpecallhandling.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/callhandling/inc/mpecallhandling.h	Fri Apr 23 14:59:43 2010 +0100
@@ -317,6 +317,14 @@
         * @return Error (KErrNone is success).
         */ 
         virtual TInt ForwardCallToAddress( TInt aIndex ) = 0;
+				        
+        /**
+        * Put all the calls to idle and make an request to 
+        * end the connection 
+        * @return KErrNotFound if there is not a call 
+        *         KErrNone if there is one call at least
+        */
+        virtual TInt ReleaseConference() = 0;
         
     public: // DTMF related
         /**
--- a/phoneengine/callhandling/src/cpecallhandling.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/callhandling/src/cpecallhandling.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -443,20 +443,20 @@
             {
             TEFLOGSTRING( KTAMESINT, "CALL CPECallHandling::SendMessage -> EPEMessageRemotePartyInfoChanged");
             // HO cases call type can changes
-            CPESingleCall* connectedCall;
-            connectedCall = iCallArrayOwner->CallPointerByState( EPEStateConnected );
-            
-            if( connectedCall )
-                {
-                MCCECall& call = connectedCall->Call();
-                CCPCall::TCallType callType = call.Parameters().CallType();
-                
+            CPESingleCall* call;
+            call = static_cast<CPESingleCall*>( iCallArrayOwner->CallByCallId( aCallId ) );
+                                 
+            MCCECall& connectedCall = call->Call();
+            CCPCall::TCallType callType = connectedCall.Parameters().CallType();
+ 
+            if ( EPEStateConnected == call->GetCallState() )
+                {                
                 if ( callType == CCPCall::ECallTypePS ) 
                     {
                     TEFLOGSTRING( KTAMESINT, 
                         "CALL CPECallHandling::SendMessage -> EPEMessageRemotePartyInfoChanged->update call type to PS");
                     iModel.DataStore()->SetCallType( EPECallTypeVoIP, aCallId ); 
-                    iModel.DataStore()->SetServiceIdCommand( connectedCall->Call().Parameters().ServiceId() );
+                    iModel.DataStore()->SetServiceIdCommand( call->Call().Parameters().ServiceId() );
                     iCallOpenParams->SetCallType( CCPCall::ECallTypePS); 
                     }
                 else if ( callType == CCPCall::ECallTypeCSVoice )
@@ -465,14 +465,18 @@
                         "CALL CPECallHandling::SendMessage -> EPEMessageRemotePartyInfoChanged->update call type to CS");
                     iCallOpenParams->SetCallType( CCPCall::ECallTypeCSVoice );
                     iModel.DataStore()->SetServiceIdCommand( 1 );
-                    iModel.DataStore()->SetCallType( EPECallTypeCSVoice, aCallId );  
-                    SetColpNumber( aCallId, call );
+                    iModel.DataStore()->SetCallType( EPECallTypeCSVoice, aCallId ); 
+                    
+                    if ( UpdateColpNumber( aCallId, connectedCall ))
+                        {
+                        iModel.SendMessage( MEngineMonitor::EPEMessageColpNumberAvailable, aCallId );
+                        }
                     }
-                
-                iModel.DataStore()->SetRemotePartyName( call.RemotePartyName(), aCallId );                
-                iModel.DataStore()->SetRemotePhoneNumber( call.RemoteParty(), aCallId );
-                iModel.DataStore()->SetCallIndex(call.CallIndex(), aCallId );
                 }
+            // CNAP informations must be in incoming call
+            iModel.DataStore()->SetRemotePartyName( connectedCall.RemotePartyName(), aCallId );                
+            iModel.DataStore()->SetRemotePhoneNumber( connectedCall.RemoteParty().Left( KPEPhoneNumberMaxLength ), aCallId );
+            iModel.DataStore()->SetCallIndex( connectedCall.CallIndex(), aCallId );            
             break;
             }
                    
@@ -484,7 +488,7 @@
                 {
                 MCCECall& call = callData->Call();
                 iModel.DataStore()->SetRemotePartyName( call.RemotePartyName(), aCallId );
-                iModel.DataStore()->SetRemotePhoneNumber( call.RemoteParty(), aCallId );
+                iModel.DataStore()->SetRemotePhoneNumber( call.RemoteParty().Left( KPEPhoneNumberMaxLength ), aCallId );
                 iModel.DataStore()->SetCallIndex(call.CallIndex(), aCallId );
                 }
             break;
@@ -833,10 +837,7 @@
 
     else if ( CallIdCheck::IsConference( aCallId ) )
         {
-        if( iConferenceCall )
-            {
-            errorCode = iConferenceCall->HangUp();
-            }
+        errorCode = ReleaseConference();
         }
     return errorCode;
     }
@@ -855,12 +856,7 @@
     
     RejectCall(); // Rejects ringing call if one exists.
 
-    if ( iConferenceCall )
-        {
-        TEFLOGSTRING( KTAMESOUT, 
-            "CALL CPECallHandling::TerminateAllConnections: Hanging Up conference call" );
-        iConferenceCall->HangUp();
-        }
+    ReleaseConference(); // Release conference call if exists
             
     // Hangup normal Voice Calls
     for( TInt callId = 0; callId < KPEMaximumNumberOfVoiceCalls; callId++ )
@@ -1916,6 +1912,7 @@
     SendMessage( MEngineMonitor::EPEMessageInitiatedEmergencyCall );
     TEFLOGSTRING( KTAINT, "CALL CPECallHandling::DialEmergencyCall start emergency dialing" );
     CPESingleCall* callData = iCallArrayOwner->GetCallObject( KPEEmergencyCallId );
+    // coverity[dereference]
     callData->DialEmergency( aEmergencyNumber );   
     }
 
@@ -2379,13 +2376,19 @@
     else
         {
         CPESingleCall* callData = iCallArrayOwner->CallPointerByState( EPEStateHeld );
-        // Check that no actice and held call, if waiting call gets idle
-        CPESingleCall* connectedCallData = iCallArrayOwner->CallPointerByState( EPEStateConnected );
-        if( callData && ( iModel.DataStore()->ResumeHeldCall( callData->GetCallId() ) )
-                    && !connectedCallData )
+        if ( callData )
             {
-            TEFLOGSTRING( KTAINT, "CALL CPECallHandling::HandleAutoResume single" );
-            callData->Resume();
+            // Checks to be done in case waiting call gets idle state:
+            // Check that no active and held calls case
+            // Check that no dialling/connecting and held calls case
+            if ( iModel.DataStore()->ResumeHeldCall( callData->GetCallId() ) &&
+                 !IsCallInState( EPEStateConnected ) &&
+                 !IsCallInState( EPEStateConnecting ) &&
+                 !IsCallInState( EPEStateDialing ) )
+                {
+                TEFLOGSTRING( KTAINT, "CALL CPECallHandling::HandleAutoResume single" );
+                callData->Resume();
+                }
             }
         }
     }
@@ -2433,39 +2436,67 @@
     }
 
 // -----------------------------------------------------------------------------
-// CPECallHandling::SetColpNumber
+// CPECallHandling::UpdateColpNumber
 // -----------------------------------------------------------------------------
 //
-void CPECallHandling::SetColpNumber( TInt aCallId, const MCCECall& aCall ) const
+TBool CPECallHandling::UpdateColpNumber( TInt aCallId, const MCCECall& aCall ) const
     {
-    TEFLOGSTRING( KTAINT, "CALL CPECallHandling::SetColpNumber" );
+    TEFLOGSTRING( KTAINT, "CALL CPECallHandling::UpdateColpNumber" );
     
+    TBool updateDone( EFalse );
     TInt errorCode( KErrNone );
     TInt value( KPEMatchDefault );
-    TPEMatcher matcher;    
+    TPEMatcher matcher;       
+    TPEPhoneNumber remoteNumber;
+    
+    MPEDataStore* dataStore = iModel.DataStore();
     
-    const TPEPhoneNumber& origRemoteNumber = iModel.DataStore()->RemotePhoneNumber( aCallId );    
-    const TPEPhoneNumber& remoteNumber = aCall.RemoteParty();
+    if ( dataStore->RemoteColpNumber( aCallId ).Length() )
+        {
+        remoteNumber = dataStore->RemoteColpNumber( aCallId );
+        }
+    else
+        {
+        remoteNumber = dataStore->RemotePhoneNumber( aCallId );
+        }    
+        
+    const TPEPhoneNumber& updatedNumber = aCall.RemoteParty();
     
     errorCode = iRepository->Get( KTelMatchDigits, value );
-
     if ( !errorCode == KErrNone )
         {
         TEFLOGSTRING( KTAOBJECT, "Reading KTelMatchDigits failed, use default value for matching");
-        }    
+        } 
     
     //check if remote number is different from dialled number
-    if ( !matcher.numbersMatch( origRemoteNumber, remoteNumber, value ) )
+    if ( !matcher.numbersMatch( remoteNumber, updatedNumber, value ) )
         {
         //set COLP number        
-        iModel.DataStore()->SetRemoteColpNumber( remoteNumber, aCallId );
+        dataStore->SetRemoteColpNumber( updatedNumber, aCallId );
         
         TEFLOGSTRING3( KTAMESINT, 
-                "CPECallHandling::SetColpNumber, colp number: '%S', call id: %d", 
-                &remoteNumber, aCallId );
-        }        
+                "CPECallHandling::UpdateColpNumber, colp number: '%S', call id: %d", 
+                &updatedNumber, aCallId );
+        updateDone = ETrue;
+        }  
+    
+    return updateDone;
     }
         
-
+// -----------------------------------------------------------------------------
+// CPECallHandling::ReleaseConference
+// Release conference call
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CPECallHandling::ReleaseConference()
+    {
+    TInt errorCode( ECCPErrorNotFound );
+    
+    if ( iConferenceCall )
+        {            
+        errorCode = iConferenceCall->HangUp();
+        }
+    return errorCode;
+    }
 
 //  End of File 
--- a/phoneengine/engineinfo/inc/cpecallinfo.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/engineinfo/inc/cpecallinfo.h	Fri Apr 23 14:59:43 2010 +0100
@@ -465,6 +465,16 @@
      */
     TPECallOrigin CallOrigin() const;
     
+    /**
+     * Sets transfer call back flag.
+     */
+    void SetDoCallBackRequest( TBool aDoCallBack );
+    
+    /**
+     * Returns transfer call back flag.
+     */
+    TBool DoCallBackRequest() const;
+
 private:
     
     /**
@@ -634,6 +644,11 @@
      * Origin of the call. 
      */
     TPECallOrigin iCallOrigin;
+    
+    /**
+     * Flag which indicates if call back request is needed
+     */
+    TBool iDoCallBackRequest;
     };
 
 #endif // C_CPECALLINFO_H
--- a/phoneengine/engineinfo/inc/cpeengineinfoimpl.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/engineinfo/inc/cpeengineinfoimpl.h	Fri Apr 23 14:59:43 2010 +0100
@@ -53,6 +53,7 @@
 	TPEPhoneNumber iSwitchToNumber;         // Dialed Phonenumber, set by client
 	TPEPhoneNumber iTransferToAddress;      // Unattended transfer target address	
     TInt iForwardToAddressIndex;            // Array index for a address to be forwarded
+    TBool iTransferDial;                    // Flag which indicates utransfer dial
     };
 
 NONSHARABLE_STRUCT( TPEBasicInfo )                         // Contains information of the phone related variables 
@@ -90,6 +91,7 @@
     TBool iSecureSpecified;                 // Secure specified status
 	TName iDataPortName;                    // the name of data port currently on-loan
     TBool iSwitchToOngoing;                 // Switch to operation status
+    TPEPhoneNumber iCallBackAddress;        // Address of the transfer originator used for calling back
     };
 
 NONSHARABLE_STRUCT( TPEConferenceCallInfo ) // Contains conference call related variables 
@@ -621,6 +623,30 @@
 		 * @param aCallState state to be checked.
          */
           TBool CheckIfCallStateExists( const TPEState& aCallState );
+          
+          /**
+          * From base class MPEEngineInfo
+          * @see MPEEngineInfo::SetTransferDial          
+          */
+          void SetIsTransferDial( TBool aTransferDial );
+          
+          /**
+          * From base class MPEEngineInfo
+          * @see MPEEngineInfo::IsTransferDial         
+          */
+          TBool IsTransferDial() const;
+          
+          /**
+          * From base class MPEEngineInfo
+          * @see MPEEngineInfo::SetCallBackAddress   
+          */
+          void SetCallBackAddress( const TDesC& aAddress );
+          
+          /**
+          * From base class MPEEngineInfo
+          * @see MPEEngineInfo::CallBackAddress
+          */
+          const TDesC& CallBackAddress() const;
 
     // Functions from MPEDataStore (reading values)
     public:
@@ -925,6 +951,12 @@
          * @see MPEDataStore::CallIndex
          */
         TInt CallIndex( TInt aCallId ) const;
+        
+        /**
+         * From base class MPEDataStore
+         * @see MPEDataStore::DoCallBackRequest     
+         */
+        TBool DoCallBackRequest( TInt aCallId ) const;
 
     // Functions from MPEDataStore (setting values)
     public:
@@ -1529,6 +1561,12 @@
          * @see MPEDataStore::SetCallOrigin          
          */
         void SetCallOrigin( TPECallOrigin aOrigin, TInt aCallId );
+        
+        /**
+         * From base class MPEDataStore
+         * @see MPEDataStore::SetDoCallBackRequest        
+         */
+        void SetDoCallBackRequest( TBool aDoCallBack, TInt aCallId );
                 
     private:
           /**
--- a/phoneengine/engineinfo/inc/mpedatastore.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/engineinfo/inc/mpedatastore.h	Fri Apr 23 14:59:43 2010 +0100
@@ -816,6 +816,18 @@
          * @param aOrigin indicates if the call is phone, client or SAT originated
          */
         virtual void SetCallOrigin( TPECallOrigin aOrigin, TInt aCallId ) = 0;
+        
+        /**
+         * Sets flag indicating whether this is unattended transfer dial
+         * @param aTransferDial ETrue if voip unattended transfer dial was initiated
+         */
+        virtual void SetDoCallBackRequest( TBool aDoCallBack, TInt aCallId ) = 0;
+                
+        /**
+         * Returns flag indicating whether call back request is needed
+         * @param aCallId  
+         */
+        virtual TBool DoCallBackRequest( TInt aCallId ) const = 0;
 
     };
 
--- a/phoneengine/engineinfo/inc/mpeengineinfo.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/engineinfo/inc/mpeengineinfo.h	Fri Apr 23 14:59:43 2010 +0100
@@ -698,6 +698,28 @@
          */
         virtual TPECallOrigin CallOrigin( const TInt aCallId ) const = 0;
         
+        /**
+         * Sets flag indicating unattended transfer dial
+         * @param aTransferDial ETrue if voip unattended transfer dial was initiated
+         */
+        virtual void SetIsTransferDial( TBool aTransferDial ) = 0;
+        
+        /**
+         * Returns flag indicating unattended transfer dial
+         */
+        virtual TBool IsTransferDial() const = 0;
+           
+        /**
+         * Sets unattended transfer call back address
+         * @param aAddress Unattended transfer call back address
+         */
+        virtual void SetCallBackAddress( const TDesC& aAddress ) = 0;
+        
+        /**
+         * Returns unattended transfer call back address
+         */
+        virtual const TDesC& CallBackAddress() const = 0;
+        
     }; // MPEEngineInfo
     
 #endif      //MPEENGINEINFO_H
--- a/phoneengine/engineinfo/src/cpecallinfo.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/engineinfo/src/cpecallinfo.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -106,6 +106,7 @@
     iDtmfPostFix = KNullDesC;
     iForwardAddressChoices = NULL;
     iCallIndex = KPEInvalidCallIndex;
+    iDoCallBackRequest = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -649,6 +650,24 @@
     {
     return iCallOrigin;
     }
+
+// ---------------------------------------------------------------------------
+// Sets flag indicating if unattended transfer call back request is needed
+// ---------------------------------------------------------------------------
+//
+void CPECallInfo::SetDoCallBackRequest( TBool aDoCallBack )
+    {
+    iDoCallBackRequest = aDoCallBack;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets flag indicating if unattended transfer call back request is needed 
+// ---------------------------------------------------------------------------
+//
+TBool CPECallInfo::DoCallBackRequest() const
+    {
+    return iDoCallBackRequest;
+    }
     
    
 // End of File
--- a/phoneengine/engineinfo/src/cpeengineinfoimpl.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/engineinfo/src/cpeengineinfoimpl.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -44,6 +44,12 @@
     iCallCommandInfo.iDtmfString = KNullDesC;
     iCallCommandInfo.iCallType = EPECallTypeUninitialized;
     iCallCommandInfo.iServiceId = 0;
+    iCallCommandInfo.iIdRestrict = RMobileCall::EIdRestrictDefault;
+    iCallCommandInfo.iEmergencyNumber = KNullDesC;     
+    iCallCommandInfo.iTransferToAddress = KNullDesC;
+    iCallCommandInfo.iForwardToAddressIndex = ECCPErrorNotFound;
+    iCallCommandInfo.iTransferDial = EFalse;
+    
     iBasicInfo.iAudioOutputPreference = EPSAudioPrivate;
     iBasicInfo.iALSLine = CCCECallParameters::ECCELineTypePrimary;
     iBasicInfo.iALSLineSupport = EFalse;
@@ -69,14 +75,7 @@
     iBasicInfo.iTwoDigitSupportStatus = EFalse;
     iBasicInfo.iLifeTimeData.iHours = 0;
     iBasicInfo.iLifeTimeData.iMinutes = 0;
-
     iBasicInfo.iNetworkRegistrationStatus = ENWStatusRegistrationUnknown;
-
-    iCallCommandInfo.iIdRestrict = RMobileCall::EIdRestrictDefault;
-    iCallCommandInfo.iEmergencyNumber = KNullDesC;
-    
-    iCallCommandInfo.iTransferToAddress = KNullDesC;
-    iCallCommandInfo.iForwardToAddressIndex = ECCPErrorNotFound;
     iBasicInfo.iActiveForward.iActiveType = RMobilePhone::ECFUnconditionalActive;
     iBasicInfo.iActiveForward.iServiceGroup =  RMobilePhone::EServiceUnspecified;
     iBasicInfo.iBarringInfo.iGroupCount = KPENumberInitValue;
@@ -98,6 +97,7 @@
     iBasicInfo.iSecureSpecified = ETrue; 
     iBasicInfo.iDataPortName = KNullDesC;
     iBasicInfo.iSwitchToOngoing = EFalse;
+    iBasicInfo.iCallBackAddress = KNullDesC;
     iConferenceCallInfo.iConferenceCallState = EPEStateConferenceIdle;
     }
 
@@ -663,6 +663,70 @@
 	{
 	return iCallCommandInfo.iCallOrigin;
 	}
+
+// -----------------------------------------------------------------------------
+// CPEEngineInfoImpl::SetTransferDial
+// Sets flag indicating unattended transfer dial
+// -----------------------------------------------------------------------------
+//
+void CPEEngineInfoImpl::SetIsTransferDial( TBool aTransferDial )
+    {
+    iCallCommandInfo.iTransferDial = aTransferDial;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEEngineInfoImpl::IsTransferDial
+// Gets flag indicating unattended transfer dial
+// -----------------------------------------------------------------------------
+//
+TBool CPEEngineInfoImpl::IsTransferDial() const
+    {
+    return iCallCommandInfo.iTransferDial;
+    }
+        
+// -----------------------------------------------------------------------------
+// CPEEngineInfoImpl::SetDoCallBackRequest
+// Sets flag indicating if unattended transfer call back request is needed
+// -----------------------------------------------------------------------------
+//
+void CPEEngineInfoImpl::SetDoCallBackRequest( TBool aDoCallBack, TInt aCallId )
+    {
+    __ASSERT_DEBUG( iCurrentCalls.Count() > aCallId, Panic( EPEPanicCallIndexOutOfRange ) );
+    iCurrentCalls[ aCallId ]->SetDoCallBackRequest( aDoCallBack );
+    }
+
+// -----------------------------------------------------------------------------
+// CPEEngineInfoImpl::DoCallBackRequest
+// Gets flag indicating if unattended transfer call back request is needed
+// -----------------------------------------------------------------------------
+//
+TBool CPEEngineInfoImpl::DoCallBackRequest( TInt aCallId) const
+    {
+    __ASSERT_DEBUG( iCurrentCalls.Count() > aCallId, Panic( EPEPanicCallIndexOutOfRange ) );
+    return iCurrentCalls[ aCallId ]->DoCallBackRequest();            
+    }
+
+// -----------------------------------------------------------------------------
+// CPEEngineInfoImpl::SetCallBackAddress
+// Sets address used for calling back to transfer originator
+// in case when transfer call has been failed
+// -----------------------------------------------------------------------------
+//
+void CPEEngineInfoImpl::SetCallBackAddress( const TDesC& aAddress )
+    {
+    iBasicInfo.iCallBackAddress = aAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEEngineInfoImpl::CallBackAddress
+// Gets address used for calling back to transfer originator
+// in case when transfer call has been failed
+// -----------------------------------------------------------------------------
+//
+const TDesC& CPEEngineInfoImpl::CallBackAddress() const
+    {
+    return iBasicInfo.iCallBackAddress;
+    }
         	
 // CPEEngineInfoImpl::ProfileId
 // Gets the profile id from the TPEBasicInfo structure.
--- a/phoneengine/loghandling/inc/cpelogevent.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/loghandling/inc/cpelogevent.h	Fri Apr 23 14:59:43 2010 +0100
@@ -103,7 +103,7 @@
 
         /**
         * Update log info for the log event
-        * @param TPELogInfo& alogInfo, log information
+        * @param CPELogInfo& alogInfo, log information
         * @return None.
         */
         void UpdateLogInfoL( const CPELogInfo& aLogInfo );
@@ -237,6 +237,13 @@
          */
         void SetRemoteContact( CLogEvent& aEvent, const CPELogInfo& aLogInfo );
         
+        /**
+         * Removes from event data the given tag and data attached to it.
+         * @since    S60 v5.1
+         * @param    aTag          Tag to be removed
+         */
+        void RemoveTagFromDataFieldL( const TDesC8& aTag );
+        
     private:    // Data
         // Owner of the object.
         CPELogHandling& iOwner;
--- a/phoneengine/loghandling/inc/cpeloghandling.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/loghandling/inc/cpeloghandling.h	Fri Apr 23 14:59:43 2010 +0100
@@ -254,6 +254,15 @@
         CPELogExtensionWrapper* CreateExtensionWrapperLC( 
             const TUid& aPluginUid ) const;
         
+        /**
+         * Checks if string is valid number for CS call.
+         * @since   S60 v5.1
+         * @param   aString A string to be checked.
+         * @return  ETrue if valid phone number.
+         */
+        TBool IsValidPhoneNumber( 
+            const TDesC& aString ) const;
+        
     private: // data 
         // Reference to MPEPhoneModelInternal, also object owner
         MPEPhoneModelInternal&  iModel;
--- a/phoneengine/loghandling/src/cpelogevent.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/loghandling/src/cpelogevent.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -673,6 +673,16 @@
     if ( KNullDesC() != aLogInfo.PhoneNumber() )
         {
         aEvent.SetNumber( aLogInfo.PhoneNumber() );
+       
+        if ( CPELogInfo::EPEVoIPEvent == aLogInfo.EventType() )
+            {
+            TRAPD( error, RemoveTagFromDataFieldL( KLogsDataFldTag_URL ) );
+            if( error )
+                {
+                TEFLOGSTRING2( KTAERROR, 
+                    "LOG CPELogEvent::SetRemoteContact()>RemoveTagFromDataFieldL(), error=%d", error )
+                }
+            }
         }
     
     if ( KNullDesC() != aLogInfo.VoipAddress() )
@@ -681,8 +691,40 @@
         if ( error )
             {
             TEFLOGSTRING2( KTAERROR, 
-                "LOG CPELogEvent::SetLogEvent()>SetDataFieldL(), error=%d", error )
+                "LOG CPELogEvent::SetRemoteContact()>SetDataFieldL(), error=%d", error )
             }
+        aEvent.SetNumber( KNullDesC() );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPELogEvent::RemoveTagFromDataFieldL
+// -----------------------------------------------------------------------------
+//
+void CPELogEvent::RemoveTagFromDataFieldL( const TDesC8& aTag )
+    {
+    __ASSERT_ALWAYS( aTag.Length() != 0 ,
+        User::Leave( KErrArgument ) );
+
+    TInt index = iEvent->Data().Find( aTag );
+    if ( KErrNotFound != index  )
+        {
+        HBufC8* eventData = iEvent->Data().AllocLC();
+        TPtrC8 urlData = eventData->Mid( index );
+        TInt otherTag = urlData.Find( KLogsDataFldNameDelimiter );
+       
+        const TInt dlLen = KLogsDataFldNameDelimiter().Length();
+        if ( KErrNotFound == otherTag )
+            {
+            eventData->Des().Delete( index - dlLen, urlData.Length() + dlLen );
+            }
+        else
+            {
+            eventData->Des().Delete( index - dlLen, otherTag );
+            }
+        iEvent->SetDataL( *eventData );
+
+        CleanupStack::PopAndDestroy( eventData );
         }
     }
 
--- a/phoneengine/loghandling/src/cpeloghandling.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/loghandling/src/cpeloghandling.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -394,13 +394,16 @@
     
     if ( EPECallTypeVoIP == iDataStore.CallType( aCallId ) )
         {
-        // voip address field must be used for voip calls
-        aLogInfo.SetVoipAddress( aLogInfo.PhoneNumber() );
-        aLogInfo.SetPhoneNumber( KNullDesC() );
+        if ( EFalse == IsValidPhoneNumber( aLogInfo.PhoneNumber() ) )
+            {
+            // voip address field must be used for voip calls if
+            // string is not valid for CS call.
+            aLogInfo.SetVoipAddress( aLogInfo.PhoneNumber() );
+            aLogInfo.SetPhoneNumber( KNullDesC() );
+            }
         }
     }
 
-
 // -----------------------------------------------------------------------------
 // CPELogHandling::SaveCallInfoL
 // Update log external data.
@@ -841,4 +844,23 @@
     return CPELogExtensionWrapper::NewLC( aPluginUid );
     }
 
+// -----------------------------------------------------------------------------
+// CPELogHandling::IsValidPhoneNumber
+// -----------------------------------------------------------------------------
+//
+TBool CPELogHandling::IsValidPhoneNumber( 
+        const TDesC& aString ) const
+    {
+    _LIT( KAllowedCharsInPhoneNumber, "0123456789*+pw#PW" );
+    
+    TLex input( aString );
+    TPtrC validChars( KAllowedCharsInPhoneNumber );
+    while ( validChars.Locate( input.Peek() ) != KErrNotFound )
+        {
+        input.Inc();
+        }
+    
+    return ( !input.Remainder().Length() );
+    }
+
 // End of File
Binary file phoneengine/phonemodel/conf/s60telephony.confml has changed
Binary file phoneengine/phonemodel/conf/s60telephony_102828F8.crml has changed
--- a/phoneengine/phonemodel/inc/cpemessagehandler.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/inc/cpemessagehandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -167,7 +167,13 @@
         * @return Return possible error code.
         */
         TInt HandleReleaseCall( TPEHangUpOptions aAutoResumeOption = ETPEHangUpDefault );
-
+        
+		/**
+        * Handles release message from application 
+        * @return Return possible error code.
+        */
+        TInt HandleReleaseConference();
+        
         /**
         * Handles send dtmf message from phone application 
         * @return possible error code from the CallHandling subsystem.
@@ -566,11 +572,6 @@
         TInt HandleReplaceActive();
         
         /**
-        * Check if phone is locked, if locked leave with ECCPErrorAuthenticationFailed error.
-        */
-        void CheckIfPhoneIsLockedL();
-        
-        /**
          * Handles unattended transfer request response.
          * @param    aAcceptRequest     ETrue to accept, EFalse to reject request.
          */
--- a/phoneengine/phonemodel/inc/pevirtualengine.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/inc/pevirtualengine.h	Fri Apr 23 14:59:43 2010 +0100
@@ -421,6 +421,7 @@
         EPEMessageMovedPermanently,        
         EPEMessageMultipleChoices,     
         EPEMessageColpNumberAvailable,
+        EPEMessageTransferCallBackRequest,
 
         // Contact messages                   3000 - 3999
         EPEMessageThumbnailLoadingCompleted  = 3000,
--- a/phoneengine/phonemodel/inc/telephonyvariant.hrh	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/inc/telephonyvariant.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -90,11 +90,6 @@
 #define KTelephonyLVFlagAdvancedENCheck 0x00000200
 
 /**
-* KTelephonyLVFlagDisableCallControlHardKeysWhileLocked 
-*/
-#define KTelephonyLVFlagDisableCallControlHardKeysWhileLocked 0x00000400 
-
-/**
 * KTelephonyLVFlagUssdTone defines if the USSD tone play functionality is 
 * enabled.
 * When the flag is set, tone is played when USSD message is received. 
@@ -112,11 +107,6 @@
 #define KTelephonyLVFlagArbitraryVideoScaling 0x00001000
 
 /**
-* KTelephonyLVFlagAllowUnlockOnIncoming 
-*/
-#define KTelephonyLVFlagAllowUnlockOnIncoming 0x00002000 
-
-/**
 * KTelephonyLVFlagMannerMode defines if the manner mode is enabled.
 * When the flag is set, long press on hash key toggles silent on/off
 * @since Series 60 2.8
--- a/phoneengine/phonemodel/src/cpeclientcommandhandlermonitor.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpeclientcommandhandlermonitor.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -442,10 +442,10 @@
     TEFLOGSTRING2( KTAINT, "CPEClientCommandHandlerMonitor::HangUp aState=%d", aState); 
     TInt ret( ECCPErrorNotFound ); 
   
-    TPEState conferenceState = iCallHandling.GetCallState( KPEConferenceCallID ); 
+    TPEState conferenceState = iModel.DataStore()->ConferenceCallState();
     if ( conferenceState == aState ) 
         { 
-        ret = iCallHandling.HangUp( KPEConferenceCallID, ETPEHangUpDefault ); 
+        ret = iCallHandling.ReleaseConference(); 
         } 
     else 
         { 
--- a/phoneengine/phonemodel/src/cpeexternaldatahandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpeexternaldatahandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -26,7 +26,7 @@
 #include <ctsydomainpskeys.h>
 #include <mpedatastore.h>
 #include <pepanic.pan>
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
 #include <talogger.h>
 #include <telephonyvariant.hrh>
 #include <telinternalcrkeys.h>
--- a/phoneengine/phonemodel/src/cpemessagehandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpemessagehandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -76,9 +76,9 @@
 // None.
 
 // CONSTANTS
-// Prefix change off. See SettingsInternalCRKeys.h
+// Prefix change off. See settingsinternalcrkeys.h
 const TInt KPEPrefixChangeOff = 0;
-// Prefix change on. See SettingsInternalCRKeys.h
+// Prefix change on. See settingsinternalcrkeys.h
 const TInt KPEPrefixChangeOn = 1;
 // International prefix
 _LIT( KPEIntPrefix, "+" );
@@ -403,6 +403,19 @@
     }
 
 // -----------------------------------------------------------------------------
+// CPEMessageHandler::HandleReleaseConference
+// Handles release message from phone application
+// Method calls HangUp method from the CallHandling subsystem.
+// -----------------------------------------------------------------------------
+//
+TInt CPEMessageHandler::HandleReleaseConference()
+    {
+    
+    return iCallHandling.ReleaseConference(); 
+ 
+    }
+
+// -----------------------------------------------------------------------------
 // CPEMessageHandler::HandleSendDtmf
 // Handles send dtmf message from phone application
 // Method fetches dtmf string from the CPEEngineInfo class and then
@@ -1730,13 +1743,17 @@
                     errorCode = HandleSendDtmf();
                     }
                 }
-
+            // Reset unattended transfer callback flag
+            iDataStore.SetDoCallBackRequest( EFalse, aCallId );
+            
             iDataStore.SetErrorCode( errorCode );
-            }
-        }
+            }  
+		}
     // For Sat call ( normal or emergency )    
     iClientServices->CallRequestMonitor()->SendRespond( ECCPErrorNone );
     
+    
+    
     // Reset Phonenumber from engine info, this is necessary so that call number
     // logging works OK (see CPEMessageHandler::SetPhoneNumberForCallLogging).  
     iDataStore.SetPhoneNumber( KNullDesC() );
@@ -2173,6 +2190,11 @@
             numberOfCalls );
         }
     
+    if ( iDataStore.DoCallBackRequest( aCallId ) )
+        {
+        iModel.SendMessage( MEngineMonitor::EPEMessageTransferCallBackRequest, aCallId );
+        }
+    
     iDataStore.ResetCallInfo( aCallId );    
     
     //publish remote party info to Mediator after call info has been cleared.
@@ -2838,26 +2860,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CPEMessageHandler::CheckIfPhoneIsLockedL
-// -----------------------------------------------------------------------------
-//
-void CPEMessageHandler::CheckIfPhoneIsLockedL()
-    {
-    // Check if phone is locked
-    TInt  keyLockStatus( EAutolockStatusUninitialized );
-    TInt err = RProperty::Get( KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, keyLockStatus );
-    const TBool phoneIsLocked = ( keyLockStatus > EAutolockOff );
-
-    if ( phoneIsLocked && err == KErrNone )
-        {
-        // New call is not possible if device lock is on 
-        TEFLOGSTRING2( KTAERROR,
-            "PE CPEMessageHandler::CheckIfPhoneIsLockedL, keyLockStatus : %d", keyLockStatus );
-        User::Leave( ECCPErrorAuthenticationFailed );
-        }
-    }
-
-// -----------------------------------------------------------------------------
 // CPEMessageHandler::IsActiveVideo
 // Checks if there are any connected video calls
 // -----------------------------------------------------------------------------
@@ -2893,11 +2895,7 @@
 void CPEMessageHandler::HandleRemotePartyInfoChanged( const TInt aCallId )
     {        
     UpdateRemotePartyInfo(); 
-    
-    if ( iDataStore.RemoteColpNumber( aCallId ).Length() )
-        {
-        iModel.SendMessage( MEngineMonitor::EPEMessageColpNumberAvailable );
-        }
+        
     }
 
 
--- a/phoneengine/phonemodel/src/cpeparserphonenumberhandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpeparserphonenumberhandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -69,9 +69,6 @@
         &aNumber, 
         &aDtmfPostfix );
     
-    // Check if phone is locked
-    iOwner.CheckIfPhoneIsLockedL();
-    
     if ( aNumber.Length() == 0 )
         {
         User::Leave( ECCPErrorInvalidPhoneNumber );
--- a/phoneengine/phonemodel/src/cpeparsersimcontrolhandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpeparsersimcontrolhandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -22,8 +22,8 @@
 #include <mpecontacthandling.h>
 #include <mpedatastore.h>
 #include <pepanic.pan>
-#include <SecUi.h>
-#include <SecUiManualSecuritySettings.h>
+#include <secui.h>
+#include <secuimanualsecuritysettings.h>
 #include <talogger.h>
 
 
--- a/phoneengine/phonemodel/src/cpeparservoipnumberhandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpeparservoipnumberhandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -98,9 +98,6 @@
           &aDtmfPostfix );
 
     TPEPhoneNumber phoneNumber;
-    
-    // Check if phone is locked
-    iOwner.CheckIfPhoneIsLockedL();
   
     if ( aNumber.Length() == 0 )
         {
@@ -178,6 +175,12 @@
     // DialCall method will set call origin as unknow
     TInt errorCode = iCallHandling.DialCall( phoneNumber, callId );
     
+    if ( iDataStore.IsTransferDial() )
+        {
+        iDataStore.SetDoCallBackRequest( ETrue, callId );   
+        iDataStore.SetIsTransferDial( EFalse );
+        }
+    
     // Set dtmf string to dataStore
     iDataStore.SetDtmfPostFix( iDtmfString, callId );
     
--- a/phoneengine/phonemodel/src/cpepcnparserprocedurehandler.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpepcnparserprocedurehandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -20,8 +20,8 @@
 #include "cpepcnparserprocedurehandler.h"
 #include "mpephonemodelinternal.h"
 #include <mpedatastore.h>
-#include <SecUi.h>
-#include <SecUiManualSecuritySettings.h>
+#include <secui.h>
+#include <secuimanualsecuritysettings.h>
 #include <talogger.h>
 
 
--- a/phoneengine/phonemodel/src/cpephonemodel.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/phonemodel/src/cpephonemodel.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -478,8 +478,12 @@
         case MEngineMonitor::EPEMessageRemotePartyInfoChanged:
             return MESSAGE("EPEMessageRemotePartyInfoChanged");
         case MEngineMonitor::EPEMessageConnectingWithInband:
-            return MESSAGE("EPEMessageConnectingWithInband");
-
+            return MESSAGE("EPEMessageConnectingWithInband");            
+        case MEngineMonitor::EPEMessageColpNumberAvailable:
+            return MESSAGE("EPEMessageColpNumberAvailable");
+        case MEngineMonitor::EPEMessageTransferCallBackRequest:
+            return MESSAGE("EPEMessageTransferCallBackRequest");
+      
         // Contact messages                   3000 - 3999
         case MEngineMonitor::EPEMessageThumbnailLoadingCompleted:
             return MESSAGE("EPEMessageThumbnailLoadingCompleted");
@@ -716,8 +720,10 @@
             errorCode = iMessageHandler->HandleReleaseAll( );            
             break;
         case MPEPhoneModel::EPEMessageRelease:     //Make HangUp request
+            errorCode = iMessageHandler->HandleReleaseCall( );
+            break;
         case CPEPhoneModelIF::EPEMessageHangUpConference:
-            errorCode = iMessageHandler->HandleReleaseCall( );            
+            errorCode = iMessageHandler->HandleReleaseConference();
             break;
         case MPEPhoneModel::EPEMessageAnswer:                        //Make Answer request
             errorCode = iMessageHandler->HandleAnswerCall( EFalse );
@@ -1221,24 +1227,46 @@
     TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::DelayMessageSending" );
         
     TBool sendingDelayed( EFalse );
-    
-    if ( MEngineMonitor::EPEMessageInitiatedEmergencyCall == aMessage )
+        
+    switch ( aMessage )
         {
-        iEngineInfo->SetIsSwitchToOperationOngoing( EFalse );
-        if ( iCallStackCutter )
+        case MEngineMonitor::EPEMessageInitiatedEmergencyCall:
             {
-            delete iCallStackCutter;
-            iCallStackCutter = NULL;
+            iEngineInfo->SetIsSwitchToOperationOngoing( EFalse );  
+            sendingDelayed = ETrue;            
+            }
+            break;
+        case MEngineMonitor::EPEMessageColpNumberAvailable:
+            {              
+            sendingDelayed = ETrue;            
+            }
+            break;
+        case MEngineMonitor::EPEMessageTransferCallBackRequest:
+            {
+            sendingDelayed = ETrue;
             }
-        TRAPD( err, iCallStackCutter = CIdle::NewL( CActive::EPriorityHigh ) );
-        if ( !err )
-            {
-            iCallBackMessage = aMessage; 
-            iCallBackCallId  = aCallId;
-            iCallStackCutter->Start( TCallBack( CallBackMessageSend , this ) );
-            }
-        sendingDelayed = ETrue;        
+            break;
+        default:
+            // Other messages cause no action.
+            break;
         }
+    
+        if ( sendingDelayed )
+            {        
+            if ( iCallStackCutter )
+                {
+                delete iCallStackCutter;
+                iCallStackCutter = NULL;
+                }
+            TRAPD( err, iCallStackCutter = CIdle::NewL( CActive::EPriorityHigh ) );
+            if ( !err )
+                {
+                iCallBackMessage = aMessage; 
+                iCallBackCallId  = aCallId;
+                iCallStackCutter->Start( TCallBack( CallBackMessageSend , this ) );
+                }
+            }                
+        
     return sendingDelayed;
     }
 
--- a/phoneengine/servicehandling/src/cpeservicehandling.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneengine/servicehandling/src/cpeservicehandling.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -130,6 +130,9 @@
 	                  "PE CPEServiceHandling::EnableServiceL, Error: %d"
 	                  , error );
 	         SendErrorMessage( error );
+	       
+             iCurrentServiceId = KErrNotFound;
+             service->RemoveObserver( *this );	
 	         }
 	    }
 	
--- a/phonesettings/pslncallimageplugin/Data/PslnCallImagePluginRsc.rss	Mon Apr 19 16:39:38 2010 +0300
+++ b/phonesettings/pslncallimageplugin/Data/PslnCallImagePluginRsc.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -102,11 +102,13 @@
             {
             command = EPslnCmdAppActivate;
             txt = qtn_skins_option_activate;
+            flags = EEikMenuItemAction;
             },
         MENU_ITEM 
             {
             command = EPslnCmdAppDownload;
             txt = qtn_options_change;
+            flags = EEikMenuItemAction;
             },
 #ifdef __SERIES60_HELP
         MENU_ITEM 
--- a/phonesettings/pslncallimageplugin/src/PslnCallImagePlugin.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phonesettings/pslncallimageplugin/src/PslnCallImagePlugin.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -41,13 +41,13 @@
 // Psln Framework specific.
 #include <pslnfwviewuids.h>
 #include <psln.hrh>
-#include <pslncommon.rsg>
+#include <PslnCommon.rsg>
 
 // General services
 #include <MGFetch.h>
 
 // Resources
-#include <psln.rsg>
+#include <Psln.rsg>
 
 // Logging
 #include "PslnCallImagePluginLogger.h"
--- a/phonesettings/pslncallimageplugin/src/PslnCallImagePluginDRM.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phonesettings/pslncallimageplugin/src/PslnCallImagePluginDRM.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -22,7 +22,7 @@
 #include    <DRMHelper.h>
 #include    <coemain.h>
 #include    <aknnotewrappers.h>
-#include    <psln.rsg>
+#include    <Psln.rsg>
 #include    <drmutility.h>
 
 // Logging
--- a/phoneuis/BubbleManager/Inc/BMTouchPaneButton.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Inc/BMTouchPaneButton.h	Fri Apr 23 14:59:43 2010 +0100
@@ -182,6 +182,11 @@
          */
         void GetTextColors( TRgb& aPenColor ) const; 
         
+        /**
+         * Selects the correct text color.
+         */
+        void SelectTextColor(); 
+        
     private: // data
         /**
          * Array of the button commands.
--- a/phoneuis/BubbleManager/Src/BMBubbleManager.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleManager.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -340,9 +340,6 @@
     
     if ( iConfigFlags & EBMTouchCallhandling )
         {
-        MBubbleTouchPaneInterface* touchPaneIf =
-            static_cast<MBubbleTouchPaneInterface*> (iTouchPane);             
-        
         if ( iTouchPane->IsVisible() )
             {
             TInt variety = 0;
@@ -992,7 +989,7 @@
     TBool calledBegin = (TBool) CAknTransitionUtils::GetData( ( TInt ) this );
     // Only draw parent control if no number entry exists, the number entry is
     // used or if begin has not been called.
-    if ( !iNumberEntry || iNumberEntry->IsUsed() || !calledBegin )
+    if ( iNumberEntry->IsUsed() || !calledBegin )
         {
         // Do redraw. Do not use DrawDeferred() here!
         iParentControl->DrawNow();
@@ -3521,6 +3518,8 @@
     {
     __ASSERT_ALWAYS( ( iConfigFlags & EBMCallObjectDisplay ), 
                        Panic( EBMPanicFeatureNotSupported ) );
+    StartChanges();
+    iMainPaneControl->Reset();
     if ( aPreload )
         {
         iCallObjectManager->LoadCallThemeImage( 
@@ -3531,6 +3530,7 @@
         {
         iCallObjectManager->ReleaseCallThemeImage();
         }        
+    EndChanges();
     }
 
 // ---------------------------------------------------------------------------
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottom.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottom.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -370,15 +370,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-                
-                
+                          
             break;
             }
         default:
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImCnap.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImCnap.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -256,14 +256,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble ); 
-                               
+                                     
             break;
             }
         default:
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImage.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImage.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -247,14 +247,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-                               
+                                          
             break;
             }
         case CBubbleManager::ENone:
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRiCnap.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRiCnap.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -370,14 +370,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-                
+                          
             break;
             }
             
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRight.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRight.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -362,14 +362,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-				              
+            				              
             break;
             }
         case CBubbleManager::ENone:
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookFiveLined.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookFiveLined.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -166,7 +166,7 @@
 TInt CBubbleOutlookFiveLined::CountComponentControls() const
     {
     TInt amount = 0;
-
+    
     if ( iNumberType ) 
         {
         amount++;
@@ -238,9 +238,8 @@
 //
 CCoeControl* CBubbleOutlookFiveLined::ComponentControl(TInt aIndex) const
     {
-  
     TInt amount = -1;
-
+    // coverity[var_compare_op]
     if ( iNumberType )
         {
         amount++;
@@ -248,6 +247,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iNumberType->Control();
         }
 
@@ -328,6 +328,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iSmallCallIndication->Control();
         }
 
@@ -358,6 +359,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iBigCallIndicator->Control();
         }
 
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -385,14 +385,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-            
+                      
             if ( iHeader->CallObjectImage() )
                 {
                 BubbleUtils::PrepareCallObjectImageL(
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddleCnap.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddleCnap.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -338,14 +338,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-                
+                           
             if ( iHeader->CallObjectImage() )
                 {
                 BubbleUtils::PrepareCallObjectImageL(
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookNE.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookNE.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -41,7 +41,7 @@
 
 //for resources
 #include    <barsread.h>
-#include    <Bubblemanager.rsg>
+#include    <BubbleManager.rsg>
 
 // CONSTANTS
 const TUint8 KBubbleNE1LongLineFormat = 0;
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookOneLined.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookOneLined.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -198,6 +198,7 @@
 CCoeControl* CBubbleOutlookOneLined::ComponentControl( TInt aIndex ) const
     {
     TInt amount = -1;
+    // coverity[var_compare_op]
     if ( iSmallCallIndication )
         {
         amount++;
@@ -205,6 +206,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iSmallCallIndication->Control();
         }
 
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookThreeLined.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookThreeLined.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -216,7 +216,7 @@
 TInt CBubbleOutlookThreeLined::CountComponentControls() const
     {
     TInt amount = 0;
-    
+
     if ( iNumberType ) 
         {
         amount++;
@@ -285,7 +285,7 @@
     {
   
     TInt amount = -1;
-    
+    // coverity[var_compare_op]
     if ( iNumberType )
         {
         amount++;
@@ -293,6 +293,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iNumberType->Control();
         }
 
@@ -353,6 +354,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iSmallCallIndication->Control();
         }
 
@@ -383,6 +385,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iBrandImage->Control();
         }
     
@@ -393,6 +396,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iBigCallIndicator->Control();
         }
 
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookTopLeft.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookTopLeft.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -243,21 +243,18 @@
             BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, 
                                                        outerRect, 
                                                        innerRect);
-            TAknsItemID coMaskFrameId;
+													   
             if ( callState == CBubbleManager::EOnHold )
                 {
                 iFrameId = KAknsIIDQsnFrCall2Bubble;
-                coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask;
                 }
             else if ( callState == CBubbleManager::EDisconnected )
                 {
                 iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn;
-                coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask;
                 }
             else
                 {
                 iFrameId = KAknsIIDQsnFrCall2BubbleFirst;
-                coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask;
                 }                
             
             iOuterRect = outerRect;
@@ -298,14 +295,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-                
+                       
             break;
             }
         case CBubbleManager::ENone:
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookTopRight.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookTopRight.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -240,21 +240,18 @@
             BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, 
                                                        outerRect, 
                                                        innerRect);
-            TAknsItemID coMaskFrameId;
+
             if ( callState == CBubbleManager::EOnHold )
                 {
                 iFrameId = KAknsIIDQsnFrCall2Bubble;
-                coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask;
                 }
             else if ( callState == CBubbleManager::EDisconnected )
                 {
                 iFrameId = KAknsIIDQsnFrCall2BubbleSecondDisconn;
-                coMaskFrameId = KAknsIIDQsnFrCall2BubbleSecondCoMask;
                 }
             else
                 {
                 iFrameId = KAknsIIDQsnFrCall2BubbleSecond;
-                coMaskFrameId = KAknsIIDQsnFrCall2BubbleSecondCoMask;
                 }                
             
             iOuterRect = outerRect;
@@ -296,14 +293,7 @@
                 outerRect,
                 innerRect,
                 iBubble );
-            
-            // Add transparency
-            BubbleUtils::AddTransparencyToBubbleImageL( 
-                coMaskFrameId,
-                outerRect,
-                innerRect,
-                iBubble );
-                
+                          
             break;
             }
         case CBubbleManager::ENone:
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookTwoLined.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookTwoLined.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -275,7 +275,7 @@
     {
   
     TInt amount = -1;
-    
+    // coverity[var_compare_op]
     if ( iNumberType )
         {
         amount++;
@@ -283,6 +283,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iNumberType->Control();
         }
 
@@ -293,6 +294,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iSmallCallIndication->Control();
         }
 
@@ -363,6 +365,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iBrandImage->Control();
         }
 
@@ -373,6 +376,7 @@
 
     if ( aIndex == amount )
         {
+        // coverity[var_deref_model]
         return iBigCallIndicator->Control();
         }
     
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookVideo.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookVideo.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -32,7 +32,7 @@
 #include    <eikenv.h>
 #include    <AknsUtils.h>
 #include    <AknsDrawUtils.h>
-#include    <AknLayout2ScalableDef.h>
+#include    <aknlayout2scalabledef.h>
 #include    <layoutmetadata.cdl.h>
 
 
--- a/phoneuis/BubbleManager/Src/BMBubbleOutlookVideoCnap.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookVideoCnap.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -32,7 +32,7 @@
 #include    <eikenv.h>
 #include    <AknsUtils.h>
 #include    <AknsDrawUtils.h>
-#include    <AknLayout2ScalableDef.h>
+#include    <aknlayout2scalabledef.h>
 #include    <layoutmetadata.cdl.h>
 
 
--- a/phoneuis/BubbleManager/Src/BMTouchPaneButton.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMTouchPaneButton.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -16,16 +16,17 @@
 */
 
 #include <AknBidiTextUtils.h>
-#include <aknsdrawutils.h>
+#include <AknsDrawUtils.h>
 #include <aknlayoutscalable_avkon.cdl.h>
 #include <gulicon.h>
 #include <barsread.h> 
 #include <AknsFrameBackgroundControlContext.h>
-#include <aknsconstants.h>
+#include <AknsConstants.h>
+#include <phoneappcommands.hrh>
 
-#include "bmtouchpanebutton.h"
+#include "BMTouchPaneButton.h"
 #include "BMTouchPaneInterface.h"
-#include "bmpanic.h"
+#include "BMPanic.h"
 
 
 const TInt KBubbleButtonText = 255;
@@ -97,9 +98,7 @@
     
     CAknButton::ConstructFromResourceL( aReader );
     
-    // function button text color
-    SetTextColorIds( KAknsIIDQsnTextColors, 
-                              EAknsCIQsnTextColorsCG65 );
+    SelectTextColor();
     
     // Customize icons
     if ( iIconProvider )
@@ -377,10 +376,6 @@
        {
        return KAknsIIDQsnFrButtonPressedReject;
        }
-   else if( frameId == KAknsIIDQsnFrButtonNormalHold )
-       {
-       return KAknsIIDQsnFrButtonPressedHold;   
-       }
    else
        {
        return KAknsIIDQsnFrButtonPressed;
@@ -401,12 +396,30 @@
        {
        return KAknsIIDQsnFrButtonInactiveReject;
        }
-   else if( frameId == KAknsIIDQsnFrButtonNormalHold )
-       {
-       return KAknsIIDQsnFrButtonInactiveHold;
-       }
    else
        {
        return KAknsIIDQsnFrButtonInactive;
        }
    }
+
+// -----------------------------------------------------------------------------
+// Selects the correct text color.
+// -----------------------------------------------------------------------------
+//
+void CBubbleTouchPaneButton::SelectTextColor() 
+    { 
+    TAknsQsnTextColorsIndex textColorIndex( EAknsCIQsnTextColorsCG65 );
+    TInt command = CommandId( EFalse );
+
+    if ( command == EPhoneCallComingCmdAnswer )
+        {
+        textColorIndex = EAknsCIQsnTextColorsCG82;
+        }
+    else if ( command == EPhoneCallComingCmdReject )
+        {
+        textColorIndex = EAknsCIQsnTextColorsCG83;
+        }
+
+    // function button text color
+    SetTextColorIds( KAknsIIDQsnTextColors, textColorIndex );
+    }
--- a/phoneuis/BubbleManager/Src/BMUtils.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/Src/BMUtils.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -36,7 +36,7 @@
 #include    <AknBidiTextUtils.h>
 #include    <featmgr.h>
 #include    <aknlayoutscalable_apps.cdl.h>
-#include    <AknLayout2ScalableDef.h>
+#include    <aknlayout2scalabledef.h>
 #include    <applayout.cdl.h>
 #include    <layoutmetadata.cdl.h>
 
@@ -1489,10 +1489,15 @@
     CFbsBitGc* transparencyCtx;
     User::LeaveIfError( transparencyDev->CreateContext( transparencyCtx ) );
     CleanupStack::PushL( transparencyCtx );
-    transparencyCtx->SetBrushColor( KRgbDarkGray );
-    transparencyCtx->SetBrushStyle( CGraphicsContext::ESolidBrush );
-    transparencyCtx->DrawRect( rect );
-
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    AknsDrawUtils::DrawFrame( skin,
+                              *transparencyCtx,
+                              aOuterRect,
+                              aInnerRect,
+                              aFrameID,
+                              KAknsIIDDefault,
+                              KAknsDrawParamDefault );
+    
     CleanupStack::PopAndDestroy( 2, transparencyDev );
             
     // create solid black mask
--- a/phoneuis/BubbleManager/laf/BMLayout.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 #include <aknenv.h>
 #include <applayout.cdl.h>
 #include <AknUtils.h>
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
 
--- a/phoneuis/BubbleManager/laf/BMLayout.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout.h	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <calslbs.h>
 #include <bldvariant.hrh> 
-#include <AknLayoutDef.h>
+#include <aknlayoutdef.h>
 
 /**
 * Layout coordinates from Application LAF
--- a/phoneuis/BubbleManager/laf/BMLayout2.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout2.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 #include <aknenv.h>
 #include <applayout.cdl.h>
 #include <AknUtils.h>
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
 
--- a/phoneuis/BubbleManager/laf/BMLayout2.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout2.h	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <calslbs.h>
 #include <bldvariant.hrh> 
-#include <AknLayoutDef.h>
+#include <aknlayoutdef.h>
 
 /**
 * Layout coordinates from Application LAF
--- a/phoneuis/BubbleManager/laf/BMLayout3.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout3.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -22,7 +22,7 @@
 #include <aknenv.h>
 #include <applayout.cdl.h>
 #include <AknUtils.h>
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
 
--- a/phoneuis/BubbleManager/laf/BMLayout3.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout3.h	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <calslbs.h>
 #include <bldvariant.hrh> 
-#include <AknLayoutDef.h>
+#include <aknlayoutdef.h>
 
 /**
 * Call3 (video cli) layout coordinates from Application LAF 
--- a/phoneuis/BubbleManager/laf/BMLayout4.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout4.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 #include <aknenv.h>
 #include <applayout.cdl.h>
 #include <AknUtils.h>
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
 
--- a/phoneuis/BubbleManager/laf/BMLayout4.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout4.h	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <calslbs.h>
 #include <bldvariant.hrh> 
-#include <AknLayoutDef.h>
+#include <aknlayoutdef.h>
 
 /**
 * Layout coordinates from Application LAF
--- a/phoneuis/BubbleManager/laf/BMLayout6.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/BubbleManager/laf/BMLayout6.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 #include "BMBubbleManager.h"
 #include <aknenv.h>
 #include <applayout.cdl.h>
-#include <aknutils.h>
+#include <AknUtils.h>
 #include <aknlayout2scalabledef.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
--- a/phoneuis/ConnectUtil/inc/CCoUtlActive.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/ConnectUtil/inc/CCoUtlActive.h	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 #define CCOUTLACTIVE_H
 
 //  INCLUDES
-#include    <CCoUtlInterface.h>
+#include    <ccoutlinterface.h>
 #include    <etel.h>
 #include    <etelmm.h>
 #include    <etelpckt.h>
--- a/phoneuis/ConnectUtil/inc/CCoUtlImplementation.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/ConnectUtil/inc/CCoUtlImplementation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -21,7 +21,7 @@
 #define CCOUTLIMPLEMENTATION_H
 
 //  INCLUDES
-#include    <CCoUtlInterface.h>
+#include    <ccoutlinterface.h>
 #include    <ConeResLoader.h>
 
 // FORWARD DECLARATION
--- a/phoneuis/ConnectUtil/inc/CCoUtlInterface.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/ConnectUtil/inc/CCoUtlInterface.h	Fri Apr 23 14:59:43 2010 +0100
@@ -86,7 +86,7 @@
 
     };
 
-#include    <CCoUtlInterface.inl>
+#include    <ccoutlinterface.inl>
 
 #endif      // CCOUTLINTERFACE_H
             
--- a/phoneuis/ConnectUtil/inc/CCoUtlInterface.inl	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/ConnectUtil/inc/CCoUtlInterface.inl	Fri Apr 23 14:59:43 2010 +0100
@@ -19,7 +19,7 @@
 
 // INCLUDE FILES
 #include    <ecom/ecom.h>
-#include    <CoUtlInterface.hrh>
+#include    <coutlinterface.hrh>
 
 // CONSTANTS
 _LIT8( KCoUtlResolverData, "default" );
--- a/phoneuis/ConnectUtil/src/CCoUtlActive.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/ConnectUtil/src/CCoUtlActive.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -25,7 +25,7 @@
 #include    <AknGlobalConfirmationQuery.h>
 #include    <AknUtils.h>
 #include    <StringLoader.h>
-#include    <ConnectUtilRsc.rsg>
+#include    <connectutilrsc.rsg>
 #include    <avkon.hrh>
 #include    <e32property.h>
 #include    <PSVariables.h>
--- a/phoneuis/ConnectUtil/src/CoUtlMain.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/ConnectUtil/src/CoUtlMain.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -20,7 +20,7 @@
 // INCLUDE FILES
 #include    <ecom.h>
 #include    <implementationproxy.h>
-#include    <CoUtlInterface.hrh>
+#include    <coutlinterface.hrh>
 #include    "CCoUtlImplementation.h"
 
 // CONSTANTS
--- a/phoneuis/Ussd/group/ussd.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/Ussd/group/ussd.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -62,13 +62,14 @@
 LIBRARY    hlplch.lib // for "Help" options menu 
 LIBRARY    FeatMgr.lib
 LIBRARY    CdlEngine.lib
-LIBRARY    charconv.lib            // for detecting unicode chars
+LIBRARY    charconv.lib // for detecting unicode chars
 LIBRARY    CommonEngine.lib
-
 LIBRARY     AknLayout2Scalable.lib
 LIBRARY    AknSkins.lib
 LIBRARY    etext.lib
 LIBRARY    CentralRepository.lib
+LIBRARY    peninputclient.lib
+LIBRARY    flogger.lib
 
 // ============================================================================
 // AIF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/Ussd/inc/UssdLogger.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Logger headerfile for CbsServer
+*
+*/
+
+#ifndef USSDLOGGER_H
+#define USSDLOGGER_H
+
+/* 
+-----------------------------------------------------------------------------
+    LOGGIN MODE SELECTION
+-----------------------------------------------------------------------------
+*/
+#ifndef _DEBUG
+    // UREL BUILD:
+    #define USSDUI_LOGGING_METHOD 0   // No logging in UREL builds
+#else
+    // UDEB BUILD:
+    // 0 = No logging, 
+    // 1 = Flogger, 
+    // 2 = RDebug
+    #define USSDUI_LOGGING_METHOD 2   
+#endif //_DEBUG
+
+/* 
+-----------------------------------------------------------------------------
+    FILE LOGGING SETTINGS
+-----------------------------------------------------------------------------
+*/
+#if USSDUI_LOGGING_METHOD == 1      // Flogger
+    #include <flogger.h>
+    _LIT(KCbsLogFolder, "ussdui");
+    _LIT(KCbsLogFile, "ussdui.txt");
+
+#elif USSDUI_LOGGING_METHOD == 2    // RDebug
+
+    #include <e32svr.h>
+
+#endif //USSDUI_LOGGING_METHOD
+
+/*
+-----------------------------------------------------------------------------
+    IMPLEMENTATION OF THE LOGGING MACROs
+    USE THESE MACROS IN YOUR CODE
+----------------------------------------------------------------------------
+*/
+
+
+#if USSDUI_LOGGING_METHOD == 1      // Flogger
+
+#define _LOGTEXT(AAA) /*lint -save -e960 */ { RFileLogger::Write(KCbsLogFolder(),KCbsLogFile(),EFileLoggingModeAppend,AAA); } /*lint -restore */
+#define _LOGSTRING(AAA) /*lint -save -e960 */ { _LIT(tempLogDes,AAA); RFileLogger::Write(KCbsLogFolder(),KCbsLogFile(),EFileLoggingModeAppend,tempLogDes()); } /*lint -restore */
+#define _LOGSTRING2(AAA,BBB) /*lint -save -e960 -e437 */ { _LIT(tempLogDes,AAA); RFileLogger::WriteFormat(KCbsLogFolder(),KCbsLogFile(),EFileLoggingModeAppend,TRefByValue<const TDesC>(tempLogDes()),BBB); } /*lint -restore */
+#define _LOGSTRING3(AAA,BBB,CCC) /*lint -save -e960 */ { _LIT(tempLogDes,AAA); RFileLogger::WriteFormat(KCbsLogFolder(),KCbsLogFile(),EFileLoggingModeAppend,TRefByValue<const TDesC>(tempLogDes()),BBB,CCC); } /*lint -restore */
+
+#elif USSDUI_LOGGING_METHOD == 2    // RDebug
+
+#define _LOGTEXT(AAA)              RDebug::Print(AAA);
+#define _LOGSTRING(AAA)            RDebug::Print(_L(AAA));
+#define _LOGSTRING2(AAA,BBB)       RDebug::Print(_L(AAA),BBB);
+#define _LOGSTRING3(AAA,BBB,CCC)   RDebug::Print(_L(AAA),BBB,CCC);
+
+#else    // USSDUI_LOGGING_METHOD == 0 or invalid
+
+// Example: _LOGTEXT(own_desc);
+#define _LOGTEXT(AAA)              
+// Example: _LOGSTRING("Test");
+#define _LOGSTRING(AAA)            
+// Example: _LOGSTRING("Test %i", aValue);
+#define _LOGSTRING2(AAA,BBB)       
+// Example: _LOGSTRING("Test %i %i", aValue1, aValue2);
+#define _LOGSTRING3(AAA,BBB,CCC)   
+
+#endif // USSDUI_LOGGING_METHOD
+
+#endif // USSDLOGGER_H
+            
+// End of File
--- a/phoneuis/Ussd/inc/UssdNaviPane.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/Ussd/inc/UssdNaviPane.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 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"
@@ -22,6 +22,7 @@
 
 // INCLUDES
 #include <coecntrl.h>
+#include <peninputclient.h>
     
 
 // FORWARD DECLARATIONS
@@ -132,7 +133,8 @@
         // The navipane control container.
         CAknNavigationControlContainer*     iNaviPane;
         
-        
+        // Client for accessing pen editor (virtual keyboard)
+        RPeninputServer iPeninputServer;
 
     };
 
--- a/phoneuis/Ussd/src/UssdAppUi.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/Ussd/src/UssdAppUi.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,24 +15,22 @@
 *
 */
 
-
 // INCLUDE FILES
-#include "UssdAppUi.h"
-#include "UssdContainer.h"
-#include "UssdComms.h"
 #include <ussd.rsg>
 #include <avkon.rsg>
-#include "ussd.hrh"
 #include <eikmenub.h>
 #include <eikedwin.h>
 #include <avkon.hrh>
 #include <bldvariant.hrh>
 #include <featmgr.h>
-
 #include <AknDef.h>
 #include <hlplch.h>   // For HlpLauncher
 
-
+#include "UssdAppUi.h"
+#include "UssdContainer.h"
+#include "UssdComms.h"
+#include "ussd.hrh"
+#include "UssdLogger.h"
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
@@ -41,11 +39,12 @@
 // -----------------------------------------------------------------------------
 void CUssdAppUi::ConstructL()
     {
+    _LOGSTRING( "CUssdAppUi::ConstructL =>" )
     // Sets up TLS, must be done before FeatureManager is used in USSD.
     FeatureManager::InitializeLibL();
 
     BaseConstructL(
-        EAknEnableSkin | EAknEnableMSK
+        EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible
         );
 
     // Softkeys at start:
@@ -66,9 +65,9 @@
     iAppContainer->ConstructL( ClientRect() );
     AddToStackL( iAppContainer );
     iIsAddedToStack = ETrue;
+    _LOGSTRING( "CUssdAppUi::ConstructL <=" )
     }
 
-
 // -----------------------------------------------------------------------------
 // CUssdAppUi::~CUssdAppUi
 // Destructor
@@ -76,28 +75,29 @@
 // -----------------------------------------------------------------------------
 CUssdAppUi::~CUssdAppUi()
     {
+    _LOGSTRING( "CUssdAppUi::~CUssdAppUi =>" )
     if ( iIsAddedToStack )
         {
         RemoveFromStack( iAppContainer );
         }
 
     delete iAppContainer;
-    iAppContainer = NULL;
 
     delete iComms;
-    iComms = NULL;
 
     // Frees the TLS! Must be done after FeatureManager is used.
     FeatureManager::UnInitializeLib();
+    _LOGSTRING( "CUssdAppUi::~CUssdAppUi <=" )
     }
 
-
 // -----------------------------------------------------------------------------
 // CUssdAppUi::HandleCommandL
 // Handle commands from the user.
 // -----------------------------------------------------------------------------
 void CUssdAppUi::HandleCommandL( TInt aCommand )
     {
+    _LOGSTRING2( "CUssdAppUi::HandleCommandL =>, aCommand=%d", 
+    aCommand )
     switch ( aCommand )
         {
         case EAknCmdExit:
@@ -145,9 +145,9 @@
         default:
             break;
         }
+    _LOGSTRING( "CUssdAppUi::HandleCommandL <=" )
     }
 
-
 // -----------------------------------------------------------------------------
 // CUssdAppUi::HandleResourceChangeL
 // -----------------------------------------------------------------------------
@@ -167,6 +167,8 @@
 // -----------------------------------------------------------------------------
 void CUssdAppUi::HandleForegroundEventL( TBool aForeground )
     {
+    _LOGSTRING2( "CUssdAppUi::HandleForegroundEventL =>, aForeground=%d",
+    aForeground )
     if ( iComms )
         {
         if ( aForeground )
@@ -202,9 +204,9 @@
         }
     
     CAknAppUi::HandleForegroundEventL( aForeground );
+    _LOGSTRING( "CUssdAppUi::HandleForegroundEventL <=" )
     }
 
-
 // -----------------------------------------------------------------------------
 // CUssdAppUi::DynInitMenuPaneL
 // Set's Send option visible.
@@ -236,7 +238,6 @@
     // If help not defined, do nothing
     }
 
-
 // -----------------------------------------------------------------------------
 // CUssdAppUi::SetSofkeySendVisibleL
 // Sets Send softkey (in)visible.
--- a/phoneuis/Ussd/src/UssdContainer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/Ussd/src/UssdContainer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -18,26 +18,15 @@
 
 
 // INCLUDE FILES
-#include    "UssdComms.h"
-#include    "UssdNaviPane.h"
-#include    "UssdAppUi.h"
-#include    "UssdContainer.h"
-#include    "UssdEditorLines.h"
+
 #include    <ussd.rsg>
-#include    "UssdLayout.h"
 #include    <aknkeys.h>
-#include    "ussd.hrh"
 #include    <eikedwin.h>
 #include    <bldvariant.hrh>
 #include    <featmgr.h>
-
 #include    <centralrepository.h>
 #include    <telinternalcrkeys.h>
-#include    "telephonyvariant.hrh"
-
 #include <csxhelp/ussd.hlp.hrh>  // for help context
-#include    "UssdApp.h" // for applicationUID
-#include    <AknUtils.h>
 
 // For skinning.
 #include    <AknsBasicBackgroundControlContext.h>
@@ -45,7 +34,16 @@
 #include    <AknsUtils.h>
 #include    <txtglobl.h>
 
-
+#include    "telephonyvariant.hrh"
+#include    "UssdComms.h"
+#include    "UssdNaviPane.h"
+#include    "UssdAppUi.h"
+#include    "UssdContainer.h"
+#include    "UssdEditorLines.h"
+#include    "UssdLayout.h"
+#include    "ussd.hrh"
+#include    "UssdApp.h" // for applicationUID
+#include    "UssdLogger.h"
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -67,6 +65,7 @@
 //
 void CUssdContainer::ConstructL( const TRect& aRect )
     {
+    _LOGSTRING( "CUssdContainer::ConstructL =>" )
     CreateWindowL();
 
     // Create background control context for skins.
@@ -100,12 +99,14 @@
     ActivateL();
 
     iEditor->SetFocus( ETrue );
+    _LOGSTRING( "CUssdContainer::ConstructL <=" )
     }
 
 
 // Destructor
 CUssdContainer::~CUssdContainer()
     {
+    _LOGSTRING( "CUssdContainer::~CUssdContainer =>" ) 
     delete iLines;
 
     AknsUtils::DeregisterControlPosition( iEditor );
@@ -113,6 +114,7 @@
     delete iNaviPaneHandler;
 
     delete iBgContext; // For skinning, can be deleted, NULL if not exist.
+    _LOGSTRING( "CUssdContainer::~CUssdContainer <=" )
     }
 
 // -----------------------------------------------------------------------------
@@ -288,6 +290,9 @@
 TKeyResponse CUssdContainer::OfferKeyEventL(
     const TKeyEvent& aKeyEvent, TEventCode aType )
     {
+    _LOGSTRING3(
+    "CUssdContainer::OfferKeyEventL =>,TKeyEvent::iCode=%d,TEventCode=%d",
+    aKeyEvent.iCode, aType )
     TKeyResponse response = EKeyWasNotConsumed;
 
     // Special key handling comes first.
@@ -335,7 +340,8 @@
             iAppUi.Cba()->SetCommandSetL( R_USSD_SOFTKEYS_OPTIONS_EXIT_OPTIONS );
             iAppUi.Cba()->DrawNow();
         }
-
+    _LOGSTRING2(
+    "CUssdContainer::OfferKeyEventL <=, response=%d", response )
     return response;
     }
 
@@ -444,12 +450,8 @@
     newEditor->SetAknEditorInputMode( EAknEditorNumericInputMode );
     newEditor->SetAknEditorNumericKeymap( EAknEditorStandardNumberModeKeymap );
 
-    TInt editorFlags = EAknEditorFlagNoT9 | EAknEditorFlagEnableScrollBars;
-
-    if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
-        {
-        editorFlags |= EAknEditorFlagLatinInputModesOnly;
-        }
+    TInt editorFlags = EAknEditorFlagNoT9 | EAknEditorFlagEnableScrollBars | 
+        EAknEditorFlagLatinInputModesOnly;
 
      if( FeatureManager::FeatureSupported( KFeatureIdPenSupport ) )
         {
@@ -482,6 +484,7 @@
 // ---------------------------------------------------------
 void CUssdContainer::UpdateNavipaneMsgLengthL()
     {
+    _LOGSTRING( "CUssdContainer::UpdateNavipaneMsgLengthL =>" )
 
     if ( iNaviPaneHandler )
         {
@@ -507,7 +510,7 @@
         iEditor->SetMaxLength( maxLen );
 
         }
-
+    _LOGSTRING( "CUssdContainer::UpdateNavipaneMsgLengthL <=" )
     }
 
 // End of File
--- a/phoneuis/Ussd/src/UssdEditorLines.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/Ussd/src/UssdEditorLines.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -53,7 +53,10 @@
     // transparency to display the editor window content as background 
     // for this line-window.
     EnableWindowTransparency();
-      
+
+    // enabled drag event to editor for highlighting the text.
+    EnableDragEvents();
+
     // Create region buffer.
     iRegBuf = new ( ELeave ) RRegionBuf< KUssdMaxNumberOfEditorLines >;
 
@@ -119,10 +122,10 @@
 // 
 // -----------------------------------------------------------------------------
 //
-void CUssdEditorLines::Draw( const TRect& aRect ) const
+void CUssdEditorLines::Draw( const TRect& /*aRect*/ ) const
     {
     // Take the colour from some ramdom line.
-    // Here it is takem from the first line.
+    // Here it is taken from the first line.
 
     TRgb lineColour( KRgbWhite );
 
--- a/phoneuis/Ussd/src/UssdNaviPane.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/Ussd/src/UssdNaviPane.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005 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"
@@ -24,9 +24,9 @@
 #include    <AknIndicatorContainer.h>
 #include    <aknnavilabel.h>
 #include    "UssdComms.h" 
-
 #include    "UssdAppUi.h"
 #include    "UssdNaviPane.h"
+#include    "UssdLogger.h"
  
 #include <AknUtils.h>
 // CONSTANTS
@@ -82,9 +82,11 @@
 //
 void CUssdNaviPane::ConstructL()
     {
+    _LOGSTRING( "CUssdNaviPane::ConstructL =>" )
     
     CreateExtraNaviLabelL();
 
+    User::LeaveIfError( iPeninputServer.Connect() );
     iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
 
     iCharacterSetConverter->PrepareToConvertToOrFromL(
@@ -93,7 +95,7 @@
 
     iCharacterSetConverter->SetDowngradeForExoticLineTerminatingCharacters(
         CCnvCharacterSetConverter::EDowngradeExoticLineTerminatingCharactersToJustLineFeed );
-
+    _LOGSTRING( "CUssdNaviPane::ConstructL <=" )
     }
 
 // -----------------------------------------------------------------------------
@@ -104,6 +106,8 @@
 //
 CUssdNaviPane::~CUssdNaviPane()
     {
+    _LOGSTRING( "CUssdNaviPane::~CUssdNaviPane =>" )
+    iPeninputServer.Close();
     
     if ( iNaviPane && iNaviDecorator )
         {
@@ -117,7 +121,7 @@
     iCharacterSetConverter = NULL;
 
     iNaviLabel = NULL;
-
+    _LOGSTRING( "CUssdNaviPane::~CUssdNaviPane <=" )
     }
   
 // ----------------------------------------------------
@@ -150,6 +154,8 @@
 TInt CUssdNaviPane::UpdateMsgLengthL( const TDesC& aInputString, 
                                              CCoeControl* aControl )
     {
+    _LOGSTRING2( "CUssdNaviPane::UpdateMsgLengthL =>, aInputString=%S",
+    &aInputString )
     TInt maxLen(0);
     const TInt txtLen = aInputString.Length();
  
@@ -196,7 +202,12 @@
         }
     
     iNaviLabel->SetTextL( *digitBuffer );
+    _LOGSTRING(
+    "CUssdNaviPane::UpdateMsgLengthL iPeninputServer.UpdateAppInfo" )
+    iPeninputServer.UpdateAppInfo( *digitBuffer, EAppIndicatorMsg );
     CleanupStack::PopAndDestroy( digitBuffer );
+    _LOGSTRING2( "CUssdNaviPane::UpdateMsgLengthL <=, maxLen=%d",
+    maxLen )
     
     return maxLen;
     }
@@ -210,6 +221,9 @@
 //
 TBool CUssdNaviPane::NeedsToBeSentAsUnicodeL( const TDesC& aInputString ) const
     {
+    _LOGSTRING2(
+    "CUssdNaviPane::NeedsToBeSentAsUnicodeL =>, aInputString=%S",
+    &aInputString )
     
     TBool needsToBeSentAsUnicode = EFalse;
       
@@ -255,6 +269,9 @@
         remainderOfInputString.Set( 
             remainderOfInputString.Right( returnValue ) );
         }
+    _LOGSTRING2(
+    "CUssdNaviPane::NeedsToBeSentAsUnicodeL <=, needsToBeSentAsUnicode=%d",
+    needsToBeSentAsUnicode )
     return needsToBeSentAsUnicode;
     }
 
--- a/phoneuis/dialer/bwins/dialeru.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/bwins/dialeru.def	Fri Apr 23 14:59:43 2010 +0100
@@ -1,8 +1,15 @@
 EXPORTS
-	??1CDialer@@UAE@XZ @ 1 NONAME ; CDialer::~CDialer(void)
-	??1CVideoDTMFDialer@@UAE@XZ @ 2 NONAME ; CVideoDTMFDialer::~CVideoDTMFDialer(void)
-	?NewL@CDialer@@SAPAV1@ABVCCoeControl@@ABVTRect@@@Z @ 3 NONAME ; class CDialer * CDialer::NewL(class CCoeControl const &, class TRect const &)
-	?NewL@CVideoDTMFDialer@@SAPAV1@ABVCCoeControl@@AAV2@ABVTRect@@@Z @ 4 NONAME ; class CVideoDTMFDialer * CVideoDTMFDialer::NewL(class CCoeControl const &, class CCoeControl &, class TRect const &)
-	?NumberEntry@CDialer@@QAEPAVMNumberEntry@@XZ @ 5 NONAME ; class MNumberEntry * CDialer::NumberEntry(void)
-	?SetNumberEntryObserver@CDialer@@UAEXAAVMNumberEntryObserver@@@Z @ 6 NONAME ; void CDialer::SetNumberEntryObserver(class MNumberEntryObserver &)
+	?Controller@CDialer@@QAEPAVMPhoneDialerController@@XZ @ 1 NONAME ; class MPhoneDialerController * CDialer::Controller(void)
+	?NumberEntry@CDialer@@QAEPAVMNumberEntry@@XZ @ 2 NONAME ; class MNumberEntry * CDialer::NumberEntry(void)
+	?NewL@CVideoDTMFDialer@@SAPAV1@ABVCCoeControl@@AAV2@ABVTRect@@@Z @ 3 NONAME ; class CVideoDTMFDialer * CVideoDTMFDialer::NewL(class CCoeControl const &, class CCoeControl &, class TRect const &)
+	?UpdateToolbar@CDialer@@QAEXXZ @ 4 NONAME ; void CDialer::UpdateToolbar(void)
+	?SetNumberEntryObserver@CDialer@@UAEXAAVMNumberEntryObserver@@@Z @ 5 NONAME ; void CDialer::SetNumberEntryObserver(class MNumberEntryObserver &)
+	?NewL@CDialer@@SAPAV1@ABVCCoeControl@@ABVTRect@@PAVMPhoneDialerController@@@Z @ 6 NONAME ; class CDialer * CDialer::NewL(class CCoeControl const &, class TRect const &, class MPhoneDialerController *)
+	??1CDialer@@UAE@XZ @ 7 NONAME ; CDialer::~CDialer(void)
+	?GetEasyDialingInterface@CDialer@@QBEPAVCDialingExtensionInterface@@XZ @ 8 NONAME ; class CDialingExtensionInterface * CDialer::GetEasyDialingInterface(void) const
+	?SetControllerL@CDialer@@QAEXPAVMPhoneDialerController@@@Z @ 9 NONAME ; void CDialer::SetControllerL(class MPhoneDialerController *)
+	?RelayoutAndDraw@CDialer@@QAEXXZ @ 10 NONAME ; void CDialer::RelayoutAndDraw(void)
+	??1CVideoDTMFDialer@@UAE@XZ @ 11 NONAME ; CVideoDTMFDialer::~CVideoDTMFDialer(void)
+	?HandleKeyboardLayoutChange@CDialer@@UAEXXZ @ 12 NONAME ; void CDialer::HandleKeyboardLayoutChange(void)
+	?HandleQwertyModeChange@CDialer@@UAEXH@Z @ 13 NONAME ; void CDialer::HandleQwertyModeChange(int)
 
--- a/phoneuis/dialer/data/dialer.pkg	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/data/dialer.pkg	Fri Apr 23 14:59:43 2010 +0100
@@ -28,3 +28,16 @@
 ;Files to install
 "\epoc32\release\armv5\urel\dialer.dll"-"z:\sys\bin\dialer.dll"
 "\epoc32\data\z\resource\dialer.rsc"-"z:\resource\dialer.rsc"
+"\epoc32\data\z\resource\dialerkeypad.rsc"-"z:\resource\dialerkeypad.rsc"
+"\epoc32\data\z\resource\dialerkeypad_cyrillic.rsc"-"z:\resource\dialerkeypad_cyrillic.rsc"
+"\epoc32\data\z\resource\dialerkeypad_greek.rsc"-"z:\resource\dialerkeypad_greek.rsc"
+"\epoc32\data\z\resource\dialerkeypad_hebrew.rsc"-"z:\resource\dialerkeypad_hebrew.rsc"
+"\epoc32\data\z\resource\dialerkeypad_arabic.rsc"-"z:\resource\dialerkeypad_arabic.rsc"
+"\epoc32\data\z\resource\dialerkeypad_farsi.rsc"-"z:\resource\dialerkeypad_farsi.rsc"
+"\epoc32\data\z\resource\dialerkeypad_urdu.rsc"-"z:\resource\dialerkeypad_urdu.rsc"
+"\epoc32\data\z\resource\dialerkeypad_thai.rsc"-"z:\resource\dialerkeypad_thai.rsc"
+"\epoc32\data\z\resource\dialerkeypad_devanagari.rsc"-"z:\resource\dialerkeypad_devanagari.rsc"
+"\epoc32\data\z\resource\dialerkeypad_chn_pinyin.rsc"-"z:\resource\dialerkeypad_chn_pinyin.rsc"
+"\epoc32\data\z\resource\dialerkeypad_chn_stroke.rsc"-"z:\resource\dialerkeypad_chn_stroke.rsc"
+"\epoc32\data\z\resource\dialerkeypad_chn_zhuyin.rsc"-"z:\resource\dialerkeypad_chn_zhuyin.rsc"
+
--- a/phoneuis/dialer/data/dialer.rss	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/data/dialer.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -32,8 +32,6 @@
 #include <avkon.loc>
 #include <data_caging_paths_strings.hrh>
 
-
-
 // CONSTANTS 
 
 // RESOURCE DEFINITIONS 
@@ -100,6 +98,5 @@
         };
      }
 
-
 // End of File
 
--- a/phoneuis/dialer/data/dialer_stub.pkg	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/data/dialer_stub.pkg	Fri Apr 23 14:59:43 2010 +0100
@@ -27,4 +27,17 @@
 
 ;Files to install
 ""-"z:\sys\bin\dialer.dll"
-""-"z:\resource\dialer.rsc"
+""-"z:\resource\dialer.r*"
+""-"z:\resource\dialerkeypad.rsc"
+""-"z:\resource\dialerkeypad_cyrillic.rsc"
+""-"z:\resource\dialerkeypad_greek.rsc"
+""-"z:\resource\dialerkeypad_hebrew.rsc"
+""-"z:\resource\dialerkeypad_arabic.rsc"
+""-"z:\resource\dialerkeypad_farsi.rsc"
+""-"z:\resource\dialerkeypad_urdu.rsc"
+""-"z:\resource\dialerkeypad_thai.rsc"
+""-"z:\resource\dialerkeypad_devanagari.rsc"
+""-"z:\resource\dialerkeypad_chn_pinyin.rsc"
+""-"z:\resource\dialerkeypad_chn_stroke.rsc"
+""-"z:\resource\dialerkeypad_chn_zhuyin.rsc"
+
Binary file phoneuis/dialer/data/dialer_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad.rh	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* 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: Resource prototypes for dialer keypad labels
+*
+*/
+#ifndef DIALERKEYPAD_RH
+#define DIALERKEYPAD_RH
+
+// system includes
+
+// constants
+#define DEFAULT_KEY_1_TEXT ""
+#define DEFAULT_KEY_2_TEXT "abc"
+#define DEFAULT_KEY_3_TEXT "def"
+#define DEFAULT_KEY_4_TEXT "ghi"
+#define DEFAULT_KEY_5_TEXT "jkl"
+#define DEFAULT_KEY_6_TEXT "mno"
+#define DEFAULT_KEY_7_TEXT "pqrs"
+#define DEFAULT_KEY_8_TEXT "tuv"
+#define DEFAULT_KEY_9_TEXT "wxyz"
+#define DEFAULT_KEY_0_TEXT <0xf812>
+#define DEFAULT_KEY_ASTERISK_TEXT ""
+#define DEFAULT_KEY_HASH_TEXT ""
+
+STRUCT DIALER_KEY
+    {
+    LTEXT firstRow = "";
+    LTEXT secondRow = "";
+    }
+
+STRUCT DIALER_KEYPAD
+    {
+    STRUCT keys[];
+    }
+
+
+#endif // DIALERKEYPAD_RH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This is the default latin variant of the file.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_arabic.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Arabic
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = <0x062A><0x200c><0x0628>;
+            secondRow = <0x062B><0x200c><0x0629>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = <0x0621><0x200c><0x0627>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = <0x0634><0x200c><0x0633>;
+            secondRow =  <0x0636><0x200c><0x0635>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = <0x0630><0x200c><0x062F>;
+            secondRow = <0x0632><0x200c><0x0631>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = <0x062E><0x200c><0x062D><0x200c><0x062C>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = <0x0647><0x200c><0x0646>;
+            secondRow = <0x064A><0x200c><0x0648>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = <0x0643><0x200c><0x0642><0x200c><0x0641>;
+            secondRow = <0x0645><0x200c><0x0644><0x200c>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = <0x0638><0x200c><0x0637>;
+            secondRow = <0x063A><0x200c><0x0639>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_chn_pinyin.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Dialer virtual keypad button text labels.
+*               This is the Chinese Pinyin variant of the file.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_chn_stroke.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Dialer virtual keypad button text labels.
+*               This is the Chinese Stroke variant of the file.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = <0x4e00>;
+            secondRow = " "; // to force two line layout
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = <0x4e28>;
+            secondRow = DEFAULT_KEY_2_TEXT;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = <0x4e3f>;
+            secondRow = DEFAULT_KEY_3_TEXT;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = <0x4e36>;
+            secondRow = DEFAULT_KEY_4_TEXT;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = <0x4e5b>;
+            secondRow = DEFAULT_KEY_5_TEXT;
+            },
+        DIALER_KEY // 6
+            {
+            secondRow = DEFAULT_KEY_6_TEXT;
+            },
+        DIALER_KEY // 7
+            {
+            secondRow = DEFAULT_KEY_7_TEXT;
+            },
+        DIALER_KEY // 8
+            {
+            secondRow = DEFAULT_KEY_8_TEXT;
+            },
+        DIALER_KEY // 9
+            {
+            secondRow = DEFAULT_KEY_9_TEXT;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_chn_zhuyin.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Dialer virtual keypad button text labels.
+*               This is the Chinese Zhuyin variant of the file.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = <0x3105><0x3106>;
+            secondRow = <0x3107><0x3108>;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = <0x3109><0x310a>;
+            secondRow = <0x310b><0x310c>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = <0x310d><0x310e><0x310f>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = <0x3110><0x3111><0x3112>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = <0x3113><0x3114>;
+            secondRow = <0x3115><0x3116>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = <0x3117><0x3118><0x3119>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = <0x311a><0x311b>;
+            secondRow = <0x311c><0x311d>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = <0x311e><0x311f>;
+            secondRow = <0x3120><0x3121>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = <0x3122><0x3123>;
+            secondRow = <0x3124><0x3125><0x3126>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = <0x3127><0x3128><0x3129>;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_cyrillic.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Cyrillic
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            secondRow = <0x0430><0x0431><0x0432><0x0433>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            secondRow = <0x0434><0x0435><0x0436><0x0437>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            secondRow = <0x0438><0x0439><0x043A><0x043B>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            secondRow = <0x043C><0x043D><0x043E><0x043F>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            secondRow = <0x0440><0x0441><0x0442><0x0443>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            secondRow = <0x0444><0x0445><0x0446><0x0447>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            secondRow = <0x0448><0x0449><0x044A><0x044B>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            secondRow = <0x044C><0x044D><0x044E><0x044F>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_devanagari.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Devanagari
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            secondRow = <0x0905><0x002D><0x090A>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            secondRow = <0x090F><0x002D><0x0914>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            secondRow = <0x0915><0x002D><0x0919>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            secondRow = <0x091A><0x002D><0x091E>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            secondRow = <0x091F><0x002D><0x0923>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            secondRow = <0x0924><0x002D><0x0928>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            secondRow = <0x092A><0x002D><0x092E>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            secondRow = <0x092F><0x002D><0x0939>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_farsi.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Farsi
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = <0x067E><0x200c><0x0628>;
+            secondRow = <0x062B><0x200c><0x062A>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = <0x0624><0x200c><0x0622><0x200c><0x0627>;
+            secondRow = <0x0621><0x200c><0x0626>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = <0x0634><0x200c><0x0633>;
+            secondRow = <0x0636><0x200c><0x0635>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = <0x0631><0x200c><0x0630><0x200c><0x062F>;
+            secondRow = <0x0698><0x200c><0x0632>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = <0x0686><0x200c><0x062C>;
+            secondRow = <0x062E><0x200c><0x062D>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = <0x0648><0x200c><0x0646>;
+            secondRow = <0x06CC><0x200c><0x0647>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = <0x06A9><0x200c><0x0642><0x200c><0x0641>;
+            secondRow = <0x0645><0x200c><0x0644><0x200c><0x06AF>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = <0x0638><0x200c><0x0637>;
+            secondRow = <0x063A><0x200c><0x0639>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_greek.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Greek
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            secondRow = <0x03B1><0x03B2><0x03B3>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            secondRow = <0x03B4><0x03B5><0x03B6>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            secondRow = <0x03B7><0x03B8><0x03B9>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            secondRow = <0x03BA><0x03BB><0x03BC>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            secondRow = <0x03BD><0x03BE><0x03BF>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            secondRow = <0x03C0><0x03C1><0x03C3><0x03C2>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            secondRow = <0x03C4><0x03C5><0x03C6>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            secondRow = <0x03C7><0x03C8><0x03C9>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_hebrew.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Hebrew
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            secondRow = <0x05D5><0x05D4><0x05D3>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            secondRow = <0x05D2><0x05D1><0x05D0>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            secondRow =  <0x05E0><0x05DE>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            secondRow = <0x05DC><0x05DB><0x05D9>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            secondRow = <0x05D8><0x05D7><0x05D6>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            secondRow = <0x05EA><0x05E9><0x05E8>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            secondRow = <0x05E7><0x05E6>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            secondRow = <0x05E4><0x05E2><0x05E1>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_thai.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Thai
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            secondRow = <0x0E01><0x002D><0x0E05>;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = DEFAULT_KEY_2_TEXT;
+            secondRow = <0x0E06><0x002D><0x0E09>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = DEFAULT_KEY_3_TEXT;
+            secondRow = <0x0E0A><0x002D><0x0E0D>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = DEFAULT_KEY_4_TEXT;
+            secondRow = <0x0E0E><0x002D><0x0E13>; 
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = DEFAULT_KEY_5_TEXT;
+            secondRow = <0x0E14><0x002D><0x0E18>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = DEFAULT_KEY_6_TEXT;
+            secondRow = <0x0E19><0x002D><0x0E1D>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = DEFAULT_KEY_7_TEXT;
+            secondRow = <0x0E1E><0x002D><0x0E22>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = DEFAULT_KEY_8_TEXT;
+            secondRow = <0x0E23><0x002D><0x0E29>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = DEFAULT_KEY_9_TEXT;
+            secondRow = <0x0E2A><0x002D><0x0E2E>; 
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/data/dialerkeypad_urdu.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* 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:  Dialer virtual keypad button text labels.
+*               This variant is for languages written with Urdu
+*               alphabets.
+*
+*/
+
+// NOTE: It's mandatory that all variated keypad resources have
+// the same resouce identifier and same structure. Same interface
+// is used for all of them!
+
+//  RESOURCE IDENTIFIER
+NAME DIKP
+
+#include <eikon.rh>
+#include <eikon.hrh>
+
+#include "dialerkeypad.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DIALER_KEYPAD r_dialer_keypad
+    {
+    keys = 
+        {
+        DIALER_KEY // 1
+            {
+            firstRow = DEFAULT_KEY_1_TEXT;
+            },
+        DIALER_KEY // 2
+            {
+            firstRow = <0x062A><0x200c><0x067E><0x200c><0x0628>;
+            secondRow = <0x062B><0x200c><0x0679>;
+            },
+        DIALER_KEY // 3
+            {
+            firstRow = <0x0621><0x200c><0x0622><0x200c><0x0627>;
+            },
+        DIALER_KEY // 4
+            {
+            firstRow = <0x0634><0x200c><0x0633>;
+            secondRow = <0x0636><0x200c><0x0635>;
+            },
+        DIALER_KEY // 5
+            {
+            firstRow = <0x0631><0x200c><0x0630><0x200c><0x0688><0x200c><0x062F>;
+            secondRow = <0x0698><0x200c><0x0632><0x200c><0x0691>;
+            },
+        DIALER_KEY // 6
+            {
+            firstRow = <0x0686><0x200c><0x062C>;
+            secondRow = <0x062E><0x200c><0x062D>;
+            },
+        DIALER_KEY // 7
+            {
+            firstRow = <0x06BE><0x200c><0x0648><0x200c><0x0646>;
+            secondRow = <0x06D2><0x200c><0x06CC>;
+            },
+        DIALER_KEY // 8
+            {
+            firstRow = <0x06A9><0x200c><0x0642><0x200c><0x0641>;
+            secondRow = <0x0645><0x200c><0x0644><0x200c><0x06AF>;
+            },
+        DIALER_KEY // 9
+            {
+            firstRow = <0x0638><0x200c><0x0637>;
+            secondRow = <0x063A><0x200c><0x0639>;
+            },
+        DIALER_KEY // *
+            {
+            firstRow = DEFAULT_KEY_ASTERISK_TEXT;
+            },
+        DIALER_KEY // 0
+            {
+            firstRow = DEFAULT_KEY_0_TEXT;
+            },
+        DIALER_KEY // #
+            {
+            firstRow = DEFAULT_KEY_HASH_TEXT;
+            }
+        };
+    }
+
+// End Of File
--- a/phoneuis/dialer/eabi/dialeru.def	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/eabi/dialeru.def	Fri Apr 23 14:59:43 2010 +0100
@@ -3,11 +3,20 @@
 	_ZN16CVideoDTMFDialerD0Ev @ 2 NONAME
 	_ZN16CVideoDTMFDialerD1Ev @ 3 NONAME
 	_ZN16CVideoDTMFDialerD2Ev @ 4 NONAME
-	_ZN7CDialer11NumberEntryEv @ 5 NONAME
-	_ZN7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 6 NONAME
-	_ZN7CDialer4NewLERK11CCoeControlRK5TRect @ 7 NONAME
-	_ZN7CDialerD0Ev @ 8 NONAME
-	_ZN7CDialerD1Ev @ 9 NONAME
-	_ZN7CDialerD2Ev @ 10 NONAME
-	_ZThn52_N7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 11 NONAME ; #<thunk>#
+	_ZN7CDialer10ControllerEv @ 5 NONAME
+	_ZN7CDialer11NumberEntryEv @ 6 NONAME
+	_ZN7CDialer13UpdateToolbarEv @ 7 NONAME
+	_ZN7CDialer14SetControllerLEP22MPhoneDialerController @ 8 NONAME
+	_ZN7CDialer15RelayoutAndDrawEv @ 9 NONAME
+	_ZN7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 10 NONAME
+	_ZN7CDialer4NewLERK11CCoeControlRK5TRectP22MPhoneDialerController @ 11 NONAME
+	_ZN7CDialerD0Ev @ 12 NONAME
+	_ZN7CDialerD1Ev @ 13 NONAME
+	_ZN7CDialerD2Ev @ 14 NONAME
+	_ZNK7CDialer23GetEasyDialingInterfaceEv @ 15 NONAME
+	_ZThn52_N7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 16 NONAME
+	_ZN7CDialer22HandleQwertyModeChangeEi @ 17 NONAME
+	_ZN7CDialer26HandleKeyboardLayoutChangeEv @ 18 NONAME
+	_ZThn64_N7CDialer22HandleQwertyModeChangeEi @ 19 NONAME
+	_ZThn64_N7CDialer26HandleKeyboardLayoutChangeEv @ 20 NONAME
 
--- a/phoneuis/dialer/group/bld.inf	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -30,6 +30,8 @@
 
 ../rom/dialer.iby           CORE_APP_LAYER_IBY_EXPORT_PATH(dialer.iby)
 
+../rom/dialer_variant.iby   CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(dialer_variant.iby)
+
 PRJ_EXTENSIONS
 START EXTENSION s60/mifconv
   OPTION TARGETFILE dialer.mif
--- a/phoneuis/dialer/group/dialer.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/group/dialer.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -39,15 +39,23 @@
 SOURCE  cdialer.cpp
 SOURCE  cdialercontainerbase.cpp
 SOURCE  cdialerkeypadcontainer.cpp
+SOURCE  cdialerkeypadbutton.cpp
 SOURCE  cdialernumberentry.cpp
 SOURCE  cdialervideocontainer.cpp
 SOURCE  cvideodtmfdialer.cpp
+SOURCE  cdialingextensionobserver.cpp 
+SOURCE  cdialertoolbarcontainer.cpp
+SOURCE  cdialerkeypadlabelmanager.cpp
+SOURCE  cdialercenrepwrapper.cpp
 
 USERINCLUDE ../inc 
 USERINCLUDE ../data 
+USERINCLUDE ../../../phoneapp/phoneuiutils/inc 
 
 APP_LAYER_SYSTEMINCLUDE
 
+SYSTEMINCLUDE ../../../inc
+
 LIBRARY euser.lib eikcore.lib estor.lib etext.lib 
 LIBRARY cone.lib ws32.lib bmpanim.lib 
 LIBRARY eikcoctl.lib fbscli.lib bafl.lib 
@@ -60,5 +68,61 @@
 LIBRARY efsrv.lib
 LIBRARY aknlayout2.lib touchfeedback.lib
 
+LIBRARY ecom.lib
+LIBRARY CommonEngine.lib
+LIBRARY PtiEngine.lib
+LIBRARY centralrepository.lib
+LIBRARY cenrepnotifhandler.lib 
+LIBRARY serviceprovidersettings.lib
 
+// Keypad resources. Header is generated only for the
+// default variant, all the variants use the same header.
+START RESOURCE ../data/dialerkeypad.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+HEADER
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_cyrillic.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_greek.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_hebrew.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_arabic.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_farsi.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_urdu.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_thai.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_devanagari.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_chn_pinyin.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_chn_zhuyin.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
+
+START RESOURCE ../data/dialerkeypad_chn_stroke.rss
+TARGETPATH   RESOURCE_FILES_DIR 
+END  // RESOURCE
 // End of File
--- a/phoneuis/dialer/group/dialerstub.mmp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/group/dialerstub.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -67,5 +67,6 @@
 LIBRARY bitgdi.lib
 LIBRARY egul.lib
 LIBRARY efsrv.lib
+LIBRARY ecom.lib
 
 // End of File
--- a/phoneuis/dialer/group/iconlist.txt	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/group/iconlist.txt	Fri Apr 23 14:59:43 2010 +0100
@@ -1,12 +1,2 @@
--c8,8  qgn_indi_dialer_eight
--c8,8  qgn_indi_dialer_five
--c8,8  qgn_indi_dialer_four
--c8,8  qgn_indi_dialer_hash
--c8,8  qgn_indi_dialer_nine
--c8,8  qgn_indi_dialer_one
--c8,8  qgn_indi_dialer_prefix
--c8,8  qgn_indi_dialer_seven
--c8,8  qgn_indi_dialer_six
--c8,8  qgn_indi_dialer_three
--c8,8  qgn_indi_dialer_two
--c8,8  qgn_indi_dialer_zero
\ No newline at end of file
+-c8,8  qgn_indi_dialer_voicemail
+-c8,8  qgn_indi_dialer_internet
--- a/phoneuis/dialer/inc/cdialer.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/cdialer.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -25,6 +25,7 @@
 #include <coemain.h>
 
 #include "mnumberentry.h"
+#include "mphoneqwertymodeobserver.h"
 
 // CONSTANTS
 
@@ -37,6 +38,10 @@
 class CEikonEnv;
 class CAknEdwinState;
 class MNumberEntryObserver;
+class CDialingExtensionInterface;
+class CDialingExtensionObserver;
+class CDialerToolbarContainer;
+class MPhoneDialerController;
 
 // CLASS DECLARATION
 
@@ -114,7 +119,11 @@
     delete dialer;
 *
 */
-NONSHARABLE_CLASS(CDialer) : public CCoeControl, public MNumberEntry
+NONSHARABLE_CLASS(CDialer) : 
+	public CCoeControl, 
+	public MNumberEntry, 
+	public MCoeControlObserver,
+	public MPhoneQwertyModeObserver
     {
     public:  // Constructors and destructor
 
@@ -122,10 +131,12 @@
         * Two phase constructor
         * @param aContainer Parent container
         * @param aRect Area to use for dialer
+        * @param aController Dialer controller providing state data for dialer
         * @return New instance of Dialer
         */
         IMPORT_C static CDialer* NewL( const CCoeControl& aContainer,
-                                       const TRect& aRect );
+                                       const TRect& aRect,
+                                       MPhoneDialerController* aController );
 
         /**
         * Destructor.
@@ -144,7 +155,45 @@
         * Set number entry observer.
         */
         IMPORT_C void SetNumberEntryObserver( MNumberEntryObserver& aObserver );
+
+        /**
+        * Sets controller of the dialer. Controller is responsible of providing
+        * toolbar functions, text prompt, etc, as appropriate for the curret dialer state.
+        */
+        IMPORT_C void SetControllerL( MPhoneDialerController* aController );
+
+        /**
+        * Gets current controller of the dialer.
+        */
+        IMPORT_C MPhoneDialerController* Controller();
         
+        /**
+         * Returns pointer to easydialing interface. This can be NULL if
+         * easydialing is not present in device, so value must be checked
+         * before using the interface.
+         * 
+         * @return  Pointer to easydialing interface
+         */
+        IMPORT_C CDialingExtensionInterface* GetEasyDialingInterface() const;
+        
+        /**
+         * Toolbar of the easydialing layout is owned by the Dialer.
+         * Calling this methods updates status of its buttons.
+         */
+        IMPORT_C void UpdateToolbar();
+        
+        /**
+         * Updates number entry editor to correct state. State depends on
+         * qwerty availability and easydialing and voip settings. 
+         */
+        void UpdateNumberEntryConfiguration();
+        
+		
+		/**
+		 * Relayout and draw control. Also updates toolbar.
+		 */
+		IMPORT_C void RelayoutAndDraw();
+
     public: // from MNumberEntry 
 
         /**
@@ -179,9 +228,9 @@
         
         /**
         * Get Number Entry Text.
-        * @param aDesC The text.
+        * @param aDes The text.
         */
-        void GetTextFromNumberEntry( TDes& aDesC );
+        void GetTextFromNumberEntry( TDes& aDes );
         
         /**
         * Removes NE and empties the buffer.
@@ -223,6 +272,21 @@
         */             
         void EnableTactileFeedback( const TBool aEnable );
 
+        /**
+        * Handle Qwerty mode change.
+        * @param aMode 0 = off, 1 = on
+        */
+        IMPORT_C void HandleQwertyModeChange( TInt aMode );
+
+        /**
+        * @see MIdleQwertyModeObserver.
+        */
+        IMPORT_C void HandleKeyboardLayoutChange();
+
+    private: // Functions from MCoeControlObserver
+        
+        void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+        
     private:  // Functions from CCoeControl
         
         /**
@@ -287,9 +351,11 @@
         * 2nd phase constructor.
         * @param aContainer Parent container
         * @param aRect Area to use for dialer
+        * @param aController Dialer controller providing state data for dialer 
         */
-        void ConstructL( const CCoeControl& aContainer , 
-            const TRect& aRect );
+        void ConstructL( const CCoeControl& aContainer, 
+            const TRect& aRect,
+            MPhoneDialerController* aController );
         
         /**
         * Load resource file.
@@ -311,14 +377,42 @@
          * Returns edwin state
          * @return Pointer to CAknEdwinState
          */
-        CAknEdwinState* EdwinState();
+        CAknEdwinState* EdwinState() const;
         
+        /** Editor types. */
+        enum TEditorType
+            {
+            ENumericEditor,
+            EAlphanumericEditor,
+            EVirtualKeyboardEditor
+            };
+                
         /**
          * Updates editor flags for virtual
          * keyboard.
          */
-        void UpdateVkbEditorFlagsL();
+        void UpdateEdwinState( TEditorType aType );
 
+        /**
+         * Loads easydialing plugin. If loading fails (for instance when
+         * easydialing feature flag is not enabled in the device),
+         * iEasyDialer will be NULL after this function returns.
+         */
+        void LoadEasyDialingPlugin();
+        
+        /**
+         * Checks if Easy dialing is available, allowed, and currently enabled.
+         * 
+         * @return  ETrue if Easy Dialing is enabked 
+         */
+        TBool EasyDialingEnabled() const;
+        
+        /**
+         * Layout number entry component. The used layout depends on
+         * the availability and state of Easy dialing. 
+         */
+        void LayoutNumberEntry( const TRect& aParent, TInt aVariety );
+        
     private:    // Data
           
         // Keypad container  - owned
@@ -327,21 +421,44 @@
         // Number entry container - owned
         CDialerNumberEntry* iNumberEntry;
         
-        // Parent container
-        const CCoeControl* iParentControl;
-        
         // Is Number entry (e.g. dialer) being used at the moment
         TBool iIsUsed;
         
-        // Reference to CEikonEnv
-        CEikonEnv& iEikEnv;
-        
         // Resource 
         TInt iResourceOffset;
         
         // Is virtual key board open
         TBool iVirtualKeyBoardOpen;
 
+        /**
+         * Easydialing plugin. This can be NULL if easydialing feature flag
+         * is not enabled in the device.
+         * Own.
+         */
+        CDialingExtensionInterface* iEasyDialer;
+        
+        /**
+         * Observer for Easydialing.
+         * Own.
+         */
+        CDialingExtensionObserver* iDialingExtensionObserver;
+        
+        /**
+         * Toolbar used in Easy dialing layout.
+         * Own.
+         */
+        CDialerToolbarContainer* iToolbar;
+        
+        /**
+         * Controller rules the mode of the Dialer (e.g. normal, DTMF, restricted...)
+         * Not owned.
+         */
+        MPhoneDialerController* iController;
+        
+        /*
+         * Is qwerty mode on.
+         */
+        TBool iQwertyMode;
     };
 
 #endif      // CDIALER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/inc/cdialercenrepwrapper.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Wrapper class for Central Repository handling.
+*               Using this helper class is most helpful when one class needs
+*               to observe state changes in several repositories.
+*/
+
+#ifndef DIALERCENREPWRAPPER_H
+#define DIALERCENREPWRAPPER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <cenrepnotifyhandler.h>
+
+// CALLBACK INTERFACE
+NONSHARABLE_CLASS( MDialerCenRepObserver )
+    {
+public:
+    virtual void HandleRepositoryChange( TUid aRepository, TUint32 aKey ) = 0;
+    };
+
+// FORWARD DECLARATIONS
+class CRepository;
+
+// CLASS DECLARATION
+
+/**
+ *  CDialerCenRepWrapper
+ * 
+ */
+NONSHARABLE_CLASS( CDialerCenRepWrapper ): 
+    public CBase, public MCenRepNotifyHandlerCallback
+    {
+public: // constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CDialerCenRepWrapper();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CDialerCenRepWrapper* NewL( 
+            MDialerCenRepObserver& aObserver, TUid aRepository );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CDialerCenRepWrapper* NewLC( 
+            MDialerCenRepObserver& aObserver, TUid aRepository );
+
+private: // consturctors
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CDialerCenRepWrapper( 
+            MDialerCenRepObserver& aObserver, TUid aRepository );
+
+    /**
+     * Symbian default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+public: // from MCenRepNotifyHandlerCallback
+    
+    /**
+     * @see MCenRepNotifyHandlerCallback
+     */
+    void HandleNotifyGeneric( TUint32 aId );
+    
+public: // new methods
+    
+    /**
+     * Get integer value from the repository.
+     * @see CRepository::Get
+     */
+    TInt Get( TUint32 aKey, TInt& aValue );
+    
+    // Getters for other data types may be added here if needed
+
+private: // data
+
+    /** Observer is notified on repository changes */
+    MDialerCenRepObserver& iObserver;
+
+    /** UID of the repository */
+    TUid iRepositoryId;
+
+    /** Repository handle. Owned. */
+    CRepository* iRepository;
+
+    /** Helper for reacting to repository changes. */
+    CCenRepNotifyHandler* iCenRepNotifyHandler;
+    };
+
+#endif // DIALERCENREPWRAPPER_H
--- a/phoneuis/dialer/inc/cdialerkeypadbutton.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/cdialerkeypadbutton.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008, 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"
@@ -21,6 +21,9 @@
 
 #include <e32base.h>
 #include <aknbutton.h>
+#include "dialercommon.h"
+
+const TMifDialer KDialerNoIcon = EMbmDialerLastElement;
 
 // CLASS DECLARATION
 
@@ -30,39 +33,204 @@
 *  @lib dialer.lib
 *  @since S60 v5.0
 */
-NONSHARABLE_CLASS( CDialerKeyPadButton ) : public CBase
+NONSHARABLE_CLASS( CDialerKeyPadButton ) : public CAknButton
     {
+    public: // Enumerations
+
+        enum TDialerKeyPadButtonEvent
+            {
+            /* Reported to the observer when pointer is dragged outside
+             * the button's area.
+             */
+            EEventDraggingOutsideButton = 200
+            };
+        
     public:
     
-        CDialerKeyPadButton();
-
+        /**
+         * @param   aNumberLabel            The number (etc) of the key.
+         *                                  Reference must remain valid until reset with SetNumLabel
+         * @parem   aPrimaryAlphaLabel      The first row of alphabets of the key.
+         *                                  Reference must remain valid until reset with SetPrimaryAlphaLabel
+         * @param   aSecondaryAlphaLabel    The second row of alphabets of the key.
+         *                                  Reference must remain valid until reset with SetSecondaryAlphaLabel
+         * @param   aScanCode               The button scanCode. 
+         * @param   aKeyCode                The button keyCode.
+         * @param   aButtonIconId           The icon for the normal state.
+         * @param   aButtonIconMaskId       The icon mask for the normal state.
+         * @param   aFlags                  CAknButton flags
+         */
+        static CDialerKeyPadButton* NewLC( const TDesC& aNumberLabel,
+                                           const TDesC& aPrimaryAlphaLabel,
+                                           const TDesC& aSecondaryAlphaLabel,
+                                           TInt aScanCode, 
+                                           TInt aKeyCode,
+                                           TMifDialer aButtonIconId, 
+                                           TMifDialer aButtonIconMaskId,
+                                           TInt aFlags );  
+        
+        /**
+         * Destructor
+         */
         ~CDialerKeyPadButton();
-    
+        
     public:
-        CCoeControl* Control() const { return iButton; };
+
+        /**
+         * Scan code associated with the key.
+         */
         TInt ScanCode() const;
+        
+        /**
+         * Key code associated with the key
+         */
         TInt KeyCode() const;
-        void CreateButtonL( const TInt aScanCode,
-                            const TInt aKeyCode, 
-                            const TMifDialer aButtonIcon, 
-                            const TMifDialer aButtonIconMask );
-        void SetIconSize( TSize& aSize );                    
-        void HandleResourceChange( TInt aType );
-        void MapDialerIconToSkinIcon( const TInt aDialerIcon, 
-                                      TAknsItemID& aItemId ) const;  
+        
+        /**
+         * Set layout variety to be used
+         */
+        void SetVariety( TInt aVariety );
+        
+        /**
+         * Set operation mode of the keypad. Operation mode has rules,
+         * which labels are shown and how they are laid out.
+         */
+        void SetOperationMode( TDialerOperationMode aMode );
+        
+        /**
+         * Set number label for the key.
+         * @param   aLabel  Reference to new label text. The reference must remain
+         *                  valid until reset or this button is deleted.
+         */
+        void SetNumLabel( const TDesC& aLabel );
+
+        /**
+         * Set first row alphabet label.
+         * @param   aLabel  Reference to new label text. The reference must remain
+         *                  valid until reset or this button is deleted.
+         */
+        void SetPrimaryAlphaLabel( const TDesC& aLabel );
+        
+        /**
+         * Set second row alphabet label for the key.
+         * @param   aLabel  Reference to new label text. The reference must remain
+         *                  valid until reset or this button is deleted.
+         */
+        void SetSecondaryAlphaLabel( const TDesC& aLabel );
+        
+        /**
+         * Enable or disable audio feedback for this button.
+         * @param   aEnable ETrue if audio feedback should be enabled.
+         *                  EFalse otherwise.
+         */
         void EnableAudioFeedback( const TBool aEnable );
 
+    public: //from CAknButton
+        
+        /**
+         * @see CAknButton
+         */
+        void HandleResourceChange( TInt aType );
+
+    protected: // from CAknButton
+        
+        /**
+         * @see CAknButton
+         */
+        void Draw(const TRect& aRect) const;
+        
+        /**
+         * @see CAknButton
+         */
+        void SizeChanged();
+        
+        /**
+         * @see CAknButton
+         */
+        void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+        
     private:
+
         void UpdateIconL();
+        void DrawIconAndText( CWindowGc& aGc ) const;
+        void GetTextColors( TRgb& aPenColor, TRgb& aBrushColor ) const; 
+        void MapDialerIconToSkinIcon( TInt aDialerIcon, 
+                                      TAknsItemID& aItemId ) const; 
+        void SetIconLayout( const TRect& aRect );
+        
+    private: // constructors    
+        
+        /**
+         * C++ constructor
+         * 
+         * @param aNumberLabel          The number (etc) of the key.
+         * @param aPrimaryAlphaLabel    The first row of alphabets of the key.
+         * @param aSecondaryAlphaLabel  The second row of alphabets of the key.
+         * @param aScanCode             The button scanCode. 
+         * @param aKeyCode              The button keyCode.
+         * @param aButtonIconId         The icon for the normal state.
+         * @param aButtonIconMaskId     The mask icon for the normal state.
+         * @param   aFlags              CAknButton flags
+         */ 
+        CDialerKeyPadButton( const TDesC& aNumberLabel,
+                             const TDesC& aPrimaryAlphaLabel,
+                             const TDesC& aSecondaryAlphaLabel,
+                             TInt aScanCode, 
+                             TInt aKeyCode,
+                             TMifDialer aButtonIconId, 
+                             TMifDialer aButtonIconMaskId,
+                             TInt aFlags );
+        
+        /**
+         * Symbian 2nd phase constructor.
+         *
+         * @param aFlags Flags of the button.
+         */
+        void ConstructL( TInt aFlags );
         
     private: // data
-    
-        CAknButton*  iButton;
-        
+
+        /** Scan code of the key */
         TInt iScanCode;
+        
+        /** Key code of the key */
         TInt iKeyCode;
-        TMifDialer iButtonIcon;
-        TMifDialer iButtonIconMask;
+        
+        /** ID of the icon bitmap */
+        TMifDialer iButtonIconId;
+        
+        /** ID of the icon mask */
+        TMifDialer iButtonIconMaskId;
+        
+        /** Layout variety to use */
+        TInt iVariety;
+        
+        /** Operation mode of the keypad */
+        TDialerOperationMode iOperationMode;
+        
+        /** Layout for number */
+        TAknLayoutText iNumberLayout;
+        
+        /** Layout for primary row of alphabets */
+        TAknLayoutText iPrimaryAlphaLayout;
+        
+        /** Layout for secondar row of alphabets */
+        TAknLayoutText iSecondaryAlphaLayout;
+        
+        /** Label containing the number or hash or asterisk */
+        TPtrC iNumberLabel;
+        
+        /** Label containing first row of alphabets */
+        TPtrC iPrimaryAlphaLabel;  
+        
+        /** Label containing second row of alphabets */
+        TPtrC iSecondaryAlphaLabel;
+        
+        /** Rect inside the button where icon is drawn (if available) */
+        TRect iIconRect;
+        
+        /** Own variable for counting drag events, cannot use the one in base class */
+        TInt iDragEventCounter;
     };
 
 #endif // C_CDIALERKEYPADBUTTON_H
--- a/phoneuis/dialer/inc/cdialerkeypadcontainer.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/cdialerkeypadcontainer.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -26,12 +26,14 @@
 #include    <coemain.h>
 
 #include    "cdialercontainerbase.h"
+#include    "cdialerkeypadlabelmanager.h"
 
 // CONSTANTS
 
 // FORWARD DECLARATIONS
 class CDialerKeyPadButton;
 
+
 // CLASS DECLARATION
  
 /**
@@ -41,7 +43,8 @@
 *  @since S60 v5.0
 */
 NONSHARABLE_CLASS(CDialerKeyPadContainer) : public CDialerContainerBase, 
-                                            public MCoeForegroundObserver
+                                            public MCoeForegroundObserver,
+                                            public MDialerKeyPadLabelManagerCallback
     {
     public:  // Constructors and destructor
         
@@ -69,6 +72,19 @@
         
         void EnableTactileFeedback( const TBool aEnable );
         
+        // moved from private to public
+        /**
+        * @see CCoeControl
+        */        
+        void MakeVisible( TBool aVisible );
+        
+        /**
+         * Sets the operation mode. New mode takes effect once the
+         * size of the component is reset.
+         * @param   aOperatingMode  New operation mode.
+         */
+        void SetOperationMode( TDialerOperationMode aOperatingMode );
+        
     private:  // Functions from base classes
         
         /**
@@ -92,11 +108,6 @@
         void HandleResourceChange( TInt aType );   
         
         /**
-        * @see CCoeControl
-        */        
-        void MakeVisible( TBool aVisible );     
-        
-        /**
         * @see MCoeControlObserver
         */        
         void HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType );      
@@ -111,6 +122,10 @@
         */         
         void HandleLosingForeground();      
         
+        /**
+         * @see MDialerKeyPadLabelManagerCallback
+         */
+        void KeyLabelsChanged();
         
     private: // From CDialerContainerBase
     
@@ -140,6 +155,11 @@
         void SetPhoneLayout();
 
         /**
+         * Set layout in Easy Dialing mode
+         */
+        void SetEasyDialingLayout();
+        
+        /**
         * Set layout in Video DTMF mode
         */
         void SetVideoLayout();
@@ -149,7 +169,6 @@
         */
         void CreateButtonsL();
         
-        
     private:    // Data
     
         TDialerOperationMode iOperatingMode;
@@ -158,22 +177,29 @@
          * Keypad buttons.
          * Owned.
          */
-        RPointerArray<CDialerKeyPadButton> iButtons;  
+        RPointerArray<CDialerKeyPadButton> iButtons;
         
         /**
-         * Number of buttons.
+         * True, when EEventStateChanged event reported. 
          */
-        TInt iButtonCount;
-         
-        /**
-         * True, when EEventStateChanged event reported. 
-         */        
         TBool iButtonPressedDown;
         
         /**
          * Stores last pointer event. 
-         */        
+         */
         TPointerEvent iPointerEvent;
+        
+        /**
+         * Helper to manage keypad button labels
+         */
+        CDialerKeyPadLabelManager* iKeyLabelManager;
+        
+        /**
+         * True if key up event has been simulated in order to cancel
+         * long tap action due to dragging pointer outside of
+         * pressed button.
+         */
+        TBool iKeyUpSimulatedDueToDragging;
     };
 
 #endif      // CDIALERKEYPADCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/inc/cdialerkeypadlabelmanager.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* 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:  Helper class to handle virtual keypad text labels
+*
+*/
+
+#ifndef CDIALERKEYPADLABELMANAGER_H
+#define CDIALERKEYPADLABELMANAGER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <badesca.h>
+#include "cdialercenrepwrapper.h"
+
+
+// FORWARD DECLARATIONS
+class CCoeEnv;
+class CPtiEngine;
+class CEnvironmentChangeNotifier;
+
+
+// CALLBACK INTERFACE
+NONSHARABLE_CLASS( MDialerKeyPadLabelManagerCallback )
+    {
+public:
+    /**
+     * This event is given when change in system settings has
+     * caused key label texts to change. All the TPtrC descriptors
+     * previously returned by CDialerKeyPadLabelManager become
+     * dangling references when this happens and they must not
+     * be used after this method is called. 
+     */
+    virtual void KeyLabelsChanged() = 0;
+    };
+
+
+// CLASS DECLARATION
+
+/**
+ *  CDialerKeyPadLabelManager
+ * 
+ */
+NONSHARABLE_CLASS( CDialerKeyPadLabelManager ) : public CBase, public MDialerCenRepObserver
+    {
+public: // Constructors and destructor
+    
+    /**
+     * Destructor.
+     */
+    ~CDialerKeyPadLabelManager();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CDialerKeyPadLabelManager* NewL( CCoeEnv& aCoeEnv, 
+            MDialerKeyPadLabelManagerCallback& aObserver );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CDialerKeyPadLabelManager* NewLC( CCoeEnv& aCoeEnv, 
+            MDialerKeyPadLabelManagerCallback& aObserver );
+
+private: // consturctors
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CDialerKeyPadLabelManager( CCoeEnv& aCoeEnv, 
+            MDialerKeyPadLabelManagerCallback& aObserver );
+
+    /**
+     * Symbian default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+public: // methods
+    
+    /**
+     * Get number label for the button.
+     * @return   Reference to the number text in current global number mode. 
+     *           The reference is valid until this label manager is deleted or 
+     *           global number mode is changed. Callback KeyLabelsChanged()
+     *           is given to observer in the latter case.
+     */        
+    TPtrC ButtonNumLabel( TInt aIndex ) const;
+    
+    /**
+     * Get first row alphabet label for the button
+     * @return  Reference to descriptor containing text for the first
+     *          row of alphabets to be shown on the key. The reference is
+     *          valid until this label manager is deleted or input language
+     *          is changed. Callback KeyLabelsChanged()
+     *          is given to observer in the latter case.        
+     */        
+    TPtrC ButtonFirstAlphaLabel( TInt aIndex ) const;
+    
+    /**
+     * Get second row alphabet label for the button
+     * @return  Reference to descriptor containing text for the first
+     *          row of alphabets to be shown on the key. The reference is
+     *          valid until this label manager is deleted or input language
+     *          is changed. Callback KeyLabelsChanged()
+     *           is given to observer in the latter case.
+     */        
+    TPtrC ButtonSecondAlphaLabel( TInt aIndex ) const;
+
+public: // from MDialerCenRepObserver
+    
+    /**
+     * Handle change in one of the observed repositories.
+     */
+    void HandleRepositoryChange( TUid aRepository, TUint32 aId );
+    
+private: // methods
+    
+    /**
+     * Handle environment change event. We are interested about digit
+     * type changes in locale data.
+     */
+    void HandleEnvChange();
+    
+    /**
+     * Static wrapper for HandleEnvChange() function to be passed in TCallBack object.
+     */
+    static TInt EnvChangeCallback( TAny* aSelfPtr );
+    
+    /**
+     * Update button text labels to match current input and UI language.
+     */
+    void UpdateTextLabelsL();
+    
+    /**
+     * Update button number labels to use current global number mode.
+     */
+    void UpdateNumLabelsL();
+    
+    /**
+     * Get the full path of the keypad resource file to be used in current situation.
+     * @param   aFileName   On return, contains the file name. Caller is responsible
+     *                      of supplying large enough buffer. Maximum path length
+     *                      in Symbian is 256 characters.
+     */
+    void GetResourceFileNameL( TDes& aFileName );
+    
+    /**
+     * Returns code of the script to be used in current situation.
+     * It depends on the current input language, current UI language, and all
+     * available input languages on the device.
+     */
+    TInt LabelScriptToUseL() const;
+    
+    /**
+     * Returns code of the Chinese script to be used in key labels.
+     * This depends on the currently active Chinese adaptive search mode.
+     * This should be used only when current input language is Chinese.
+     */
+    TInt ChineseScriptToUseL() const;
+    
+private: // data
+    
+    /** Control environment to use for resource management */
+    CCoeEnv& iCoeEnv;
+    
+    /** Observer is notified when keypad labels are changed */
+    MDialerKeyPadLabelManagerCallback& iObserver;
+    
+    /** PtiEngine instance is needed to find out available input languages */
+    CPtiEngine* iPtiEngine;
+    
+    /** AknFep repository stores the current input language */
+    CDialerCenRepWrapper* iAknFepRepository;
+    
+    /** Avkon repository stores the current Chinese matching mode */
+    CDialerCenRepWrapper* iAvkonRepository;
+    
+    /** Helper to observe locale changes. Locale data contains digit type used for number labels. */
+    CEnvironmentChangeNotifier* iEnvChangeNotifier;
+    
+    /** 
+     * Array of number labels. Indexing matches that of the 
+     * CDialerKeypadContainer::iButtons array. Owned. 
+     */
+    CDesCArray* iKeypadNumLabelArray;
+    
+    /** 
+     * Array of first row alphabet labels. Indexing matches that of the 
+     * CDialerKeypadContainer::iButtons array. Owned. 
+     */
+    CDesCArray* iKeypadFirstLabelArray;
+    
+    /** 
+     * Array of second row alphabet labels. Indexing matches that of the 
+     * CDialerKeypadContainer::iButtons array. Owned. 
+     */
+    CDesCArray* iKeypadSecondLabelArray;
+    
+    /** 
+     * Offset value of currently loaded keypad resource. 
+     * 0 if there's no loaded resource. 
+     */
+    TInt iResourceOffset;
+    
+    /** Script ID of the current keypad labels */
+    TInt iLabelScriptInUse;
+    
+    /** Digit type currently used for keypad number labels */
+    TDigitType iDigitTypeInUse;
+    };
+
+#endif // CDIALERKEYPADLABELMANAGER_H
+
--- a/phoneuis/dialer/inc/cdialernumberentry.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/cdialernumberentry.h	Fri Apr 23 14:59:43 2010 +0100
@@ -28,6 +28,7 @@
 #include <AknPhoneNumberEditor.h>
 
 #include "cdialercontainerbase.h"
+#include "dialer.hrh"
 
 // CONSTANTS
 
@@ -37,7 +38,7 @@
 class CAknsFrameBackgroundControlContext;
 class MNumberEntryObserver;
 class CEikLabel;
-
+class CDialingExtensionInterface;
 
 // Number entry varietys
 enum TDialerNEVariety
@@ -111,10 +112,16 @@
         void SetTextToNumberEntry( const TDesC& aDesC );
 
         /**
+        * Returns TPtrC pointed to editor text.
+        * @return   Pointer to editor text.
+        */
+        TPtrC Text() const;
+        
+        /**
         * Get tect from number entry.
-        * @param aDesc Text is returned here.
+        * @param aDes Text is returned here.
         */
-        void GetTextFromNumberEntry( TDes& aDesC );
+        void GetTextFromNumberEntry( TDes& aDes );
 
         /**
         * Reset editor to default values.
@@ -143,7 +150,13 @@
         * Clear editor flags to default values.
         */
         void ClearEditorFlags();
+
+        void SetEasyDialingPlugin( CDialingExtensionInterface* iEasyDialer );
         
+        void SetOperationMode( TDialerOperationMode aMode );
+        
+        TBool Validate( const TDesC& aString );
+
     private:  // Functions from MCoeControlObserver
         /**
         * @see MCoeControlObserver
@@ -178,12 +191,22 @@
         */
         void HandleResourceChange( TInt aType );        
 
+        /**
+        * @see CCoeControl
+        */
+        void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
     public:        
         /**
         * @see CCoeControl
         */
         void SetFocus( TBool aFocus, 
                        TDrawNow aDrawNow=ENoDrawNow );
+					   
+		/**
+        * @see CCoeControl
+        */			   
+        void MakeVisible( TBool aVisible );
    
     private: // From CDialerContainerBase
 
@@ -271,7 +294,7 @@
         CAknPhoneNumberEditor* iEditor;
         
         //Prompt text label for number entry.
-        CEikLabel* iLabel;        
+        CEikLabel* iLabel;
         
         // NE Font.
         CFbsFont* iNEFont;
@@ -286,9 +309,19 @@
         
         TRect iInnerRect;
         
-        MNumberEntryObserver* iObserver;    
+        MNumberEntryObserver* iObserver;
+        
+        TBool iNumberContents;
         
-        TBool iNumberContents;  
+        TBuf<KDialerPhoneNumberEntryBufferSize> iPreviousNumberEntryContent;
+
+        // NOT OWN
+        CDialingExtensionInterface* iEasyDialer;
+        
+        TDialerOperationMode iOperationMode;
+        
+        // NOT OWNED.
+        CEikAppUi* iAppUi;
     };
 
 #endif      // CDIALERNUMBERENTRY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/inc/cdialertoolbarcontainer.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* 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:  CDialerToolbarContainer replaces the standard S60 toolbar
+*               in the Dialer layout in the Easy dialing mode. It's 
+*               responsible of the toolbar layout and logic, but not of the 
+*               contents which are provided by an instance of 
+*               MPhoneDialerController.
+*
+*/
+
+#ifndef CDIALERTOOLBAR_H_
+#define CDIALERTOOLBAR_H_
+
+// INCLUDES
+#include <mphonedialercontroller.h>
+#include "cdialercontainerbase.h"
+
+// FORWARD DECLARATIONS
+class CAknButton;
+
+
+// CLASS DECLARATION
+NONSHARABLE_CLASS(CDialerToolbarContainer) : 
+    public CDialerContainerBase, 
+    private MCoeForegroundObserver
+    {
+public: // constructor and destructor
+    static CDialerToolbarContainer* NewL( 
+            CCoeControl& aParent, 
+            MPhoneDialerController* aContentProvider );
+    virtual ~CDialerToolbarContainer();
+
+private: // constructors
+    CDialerToolbarContainer( 
+            CCoeControl& aParent,
+            MPhoneDialerController* aContentProvider );
+    void ConstructL();
+
+public: // new methods
+    /**
+     * Set provider of toolbar button functions
+     */
+    void SetContentProviderL( MPhoneDialerController* aProvider );
+    
+    /**
+     * Update states of all toolbar buttons.
+     */
+    void UpdateButtonStates();
+
+protected: // from CDialerContainerBase
+    virtual void SetVariety();
+    virtual void SetLayout();
+    
+protected: // from CCoeControl
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl( TInt aIndex ) const;
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+private: // from MCoeControlObserver
+    /**
+     * Callback for handling button presses.
+     */
+    void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+private: // from MCoeForegroundObserver
+    void HandleGainingForeground();
+    void HandleLosingForeground();
+    
+private: // new methods
+    
+    /**
+     * Create toolbar button instances and fill them with states
+     * according the data given by the content provider.
+     */
+    void CreateButtonsL();
+    
+    /**
+     * Delete all buttons and free the memory reserved for button data.
+     */
+    void DeleteButtons();
+    
+    /**
+     * Create and add new button state.
+     */
+    void AddButtonStateL( TInt aButtonIndex, MPhoneDialerController::CButtonData& aButtonData );
+    
+    /**
+     * Get command ID for the given button in it's current state.
+     */
+    TInt ButtonCommand( const CAknButton& aButton ) const;
+    
+    /**
+     * Set layout for one button.
+     * @param   aButtonIdx  Index of the button to be laid out.
+     * @param   aPos        Position (top-left corned) where button is to be placed.
+     * @return  Position of the next button.
+     */
+    TPoint LayoutButton( TInt aButtonIdx, TPoint aPos );
+    
+private: // data
+    
+    /** Provides toolbar button data. Not owned. */
+    MPhoneDialerController* iContentProvider;
+    
+    /** Button objects. Owned. */
+    RPointerArray< CAknButton > iButtons;
+    
+    /** 
+     * Maps buttons states to command IDs. 
+     * First index is the button index, second index is the state index.
+     */
+    RArray< RArray<TInt> > iButtonCommands;
+        
+    /** The last received pointer event. */
+    TPointerEvent iLatestPointerEvent;
+    };
+
+#endif /* CDIALERTOOLBAR_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/inc/cdialingextensionobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2007 - 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CDialingExtensionObserver provides an observer class for 
+*               dialingextension plug-in.
+*
+*/
+
+#ifndef CDIALINGEXTENSIONOBSERVER_H
+#define CDIALINGEXTENSIONOBSERVER_H
+
+#include <dialingextensioninterface.h>
+
+class CDialingExtensionInterface;
+class CDialerNumberEntry;
+class CDialer;
+
+
+NONSHARABLE_CLASS( CDialingExtensionObserver ) : public CBase, public MDialingExtensionObserver
+    {
+public:
+    
+    /**
+    * Two phase constructor
+    * @param aDialingExtension  Dialer extension. Does not take ownership.
+    * @param aNumberEditor      Number editor. Does not take ownership.
+    * @param aDialer            Dialer. Does not take ownership.
+    * @return New instance
+    */
+    static CDialingExtensionObserver* NewL( 
+            CDialingExtensionInterface* aDialingExtension, 
+            CDialerNumberEntry* aNumberEntry,
+            CDialer* aDialer );
+    
+    /**
+     * Destructor
+     */
+    ~CDialingExtensionObserver();
+    
+    /**
+    * MDialingExtensionObserver function.
+    */
+    void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent );
+    
+private:
+    
+    
+    /**
+    * Cconstructor
+    * @param aDialingExtension  Dialer extension. Does not take ownership.
+    * @param aNumberEditor      Number editor. Does not take ownership.
+    * @param aDialer            Dialer. Does not take ownership.
+    */
+    CDialingExtensionObserver( 
+            CDialingExtensionInterface* aDialingExtension, 
+            CDialerNumberEntry* aNumberEntry,
+            CDialer* aDialer );
+    
+    void UpdateCba();
+    
+    void SearchL();
+    
+private:
+    
+    // Not owned.
+    CDialingExtensionInterface* iDialingExtension;
+    
+    // Not owned.
+    CDialerNumberEntry* iNumberEntry;
+    
+    // Not owned.
+    CDialer* iDialer;
+    
+    // Not owned.
+    CEikonEnv* iEikonEnvironment;    
+    };
+
+#endif // CDIALINGEXTENSIONOBSERVER_H
+
--- a/phoneuis/dialer/inc/dialer.hrh	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/dialer.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -101,7 +101,8 @@
     {
     EModeDialer, // Phone Dialer
     EModeVoiceDTMF, // Phone DTMF string query 
-    EModeVideoDTMF // Video telephony DTMF send
+    EModeVideoDTMF, // Video telephony DTMF send
+    EModeEasyDialing // Easy dialing mode
     };
 
 enum TVideoVariety 
--- a/phoneuis/dialer/inc/dialercommon.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/dialercommon.h	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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,6 +35,28 @@
 // ROM drive.
 _LIT( KDriveZ, "z:" );
 
+// Application name literal for panic macro
+_LIT( KModuleName, "Dialer" );
+
+// Panic macro
+inline void DialerPanic( TInt aReason )
+    {
+    User::Panic( KModuleName, aReason );
+    }
+
+// Panic codes
+enum TDialerPanicCode 
+    {
+    EDialerPanicDrawingError = 100,
+    EDialerPanicNoApplicationInstance,
+    EDialerPanicUnknownScript,
+    EDialerPanicChineseScriptError,
+    EDialerPanicLabelNotFound,
+    EDialerPanicToolbarButtonNotFound,
+    EDialerPanicNullController,
+    EDialerPanicEventFromUnknownControl
+    };
+
 #endif // DIALERCOMMON_H
 
 // End of file
--- a/phoneuis/dialer/inc/mnumberentry.h	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/inc/mnumberentry.h	Fri Apr 23 14:59:43 2010 +0100
@@ -29,6 +29,7 @@
 
 // FORWARD DECLARATIONS
 class CCoeControl;
+class CEikMenuPane; // easydialing
 
 // CLASS DECLARATION
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/rom/dialer_variant.iby	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* 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: Image description file for variable resouces of Dialer
+*
+*/
+
+
+#ifndef DIALER_VARIANT_IBY
+#define DIALER_VARIANT_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+// NOTE: It's necessary to include keypad resources only to those scripts
+// which are present in the device. However, including them all doens't hurt
+// either and each resource file is quite small.
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad.rsc            RESOURCE_FILES_DIR\dialerkeypad.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_cyrillic.rsc   RESOURCE_FILES_DIR\dialerkeypad_cyrillic.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_greek.rsc      RESOURCE_FILES_DIR\dialerkeypad_greek.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_hebrew.rsc     RESOURCE_FILES_DIR\dialerkeypad_hebrew.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_arabic.rsc     RESOURCE_FILES_DIR\dialerkeypad_arabic.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_farsi.rsc      RESOURCE_FILES_DIR\dialerkeypad_farsi.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_urdu.rsc       RESOURCE_FILES_DIR\dialerkeypad_urdu.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_thai.rsc       RESOURCE_FILES_DIR\dialerkeypad_thai.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_devanagari.rsc RESOURCE_FILES_DIR\dialerkeypad_devanagari.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_chn_pinyin.rsc RESOURCE_FILES_DIR\dialerkeypad_chn_pinyin.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_chn_stroke.rsc RESOURCE_FILES_DIR\dialerkeypad_chn_stroke.rsc
+data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_chn_zhuyin.rsc RESOURCE_FILES_DIR\dialerkeypad_chn_zhuyin.rsc
+
+#endif // DIALER_VARIANT_IBY
--- a/phoneuis/dialer/src/cdialer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/src/cdialer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -31,20 +31,27 @@
 #include <data_caging_path_literals.hrh>    // for KDC_APP_RESOURCE_DIR
 #include <bautils.h>                        // for BaflUtils
 #include <aknedsts.h>
+#include <spsettings.h>
+#include <dialingextensioninterface.h>
+#include <easydialingcommands.hrh>
+#include <dialer.rsg>
 
 #include "cdialer.h"
 #include "dialercommon.h"
-#include <dialer.rsg>
 #include "dialer.hrh"
 #include "cdialerkeypadcontainer.h"
 #include "cdialernumberentry.h"
 #include "dialertrace.h"
 #include "mnumberentry.h"
+#include "cdialingextensionobserver.h"
+#include "cdialertoolbarcontainer.h"
 
 /// ROM drive.
 _LIT( KDialerResourceFile, "dialer.rsc" );
-// number entry, keypad area
-const TInt KContainedControlsInTelephonyMode = 2;  
+
+// number entry, keypad area, easydialing, toolbar
+const TInt KContainedControlsInTelephonyMode = 4;
+
 
 // ========================= MEMBER FUNCTIONS ================================
 
@@ -55,16 +62,22 @@
 // ---------------------------------------------------------------------------
 //
 EXPORT_C CDialer* CDialer::NewL( const CCoeControl& aContainer, 
-                                 const TRect& aRect )
+                                 const TRect& aRect,
+                                 MPhoneDialerController* aController )
     {
-    CDialer* self = new( ELeave )CDialer ( );    
+    CDialer* self = new( ELeave )CDialer();
     CleanupStack::PushL( self );
-    self->ConstructL( aContainer , aRect );
-    CleanupStack::Pop();    // self
+    self->ConstructL( aContainer, aRect, aController );
+    CleanupStack::Pop( self );
     return self;
     }
 
+// -----------------------------------------------------------------------------
+// CDialer::~CDialer
+//
 // Destructor
+// -----------------------------------------------------------------------------
+//
 EXPORT_C CDialer::~CDialer()
     {
     DIALER_PRINT("CDialer::~CDialer<"); 
@@ -73,6 +86,10 @@
     delete iKeypadArea;
     delete iNumberEntry;
 
+    delete iEasyDialer;
+    delete iDialingExtensionObserver;
+    delete iToolbar;
+
     UnLoadResources();
     DIALER_PRINT("CDialer::~CDialer>"); 
     }
@@ -85,7 +102,8 @@
 //
 void CDialer::ConstructL( 
     const CCoeControl& aContainer, 
-    const TRect& aRect )
+    const TRect& aRect,
+    MPhoneDialerController* aController )
     {    
     DIALER_PRINT("CDialer::ConstructL<");	
     LoadResourceL();    
@@ -93,25 +111,41 @@
     // set window
     SetContainerWindowL( aContainer );
     SetParent( const_cast<CCoeControl*>(&aContainer) );
-    iParentControl = &aContainer;
 
     iNumberEntry = CDialerNumberEntry::NewL( *this );    
 
-    iKeypadArea = CDialerKeyPadContainer::NewL( *this,  EModeDialer );    
+    iController = aController;
+    
+    iKeypadArea = CDialerKeyPadContainer::NewL( *this, EModeEasyDialing );    
     
+    iToolbar = CDialerToolbarContainer::NewL( *this, iController );
+
+    // try to create easydialing plugin. If plugin is not present, iEasydialer gets value NULL.
+    LoadEasyDialingPlugin();
+
+    iNumberEntry->SetEasyDialingPlugin( iEasyDialer );
+    iNumberEntry->SetObserver( this );
+    iNumberEntry->SetNumberEntryPromptTextL( iController->NumberEntryPromptTextL() );
+
+    UpdateToolbar();
+
     SetRect( aRect );
     
-    SetComponentsToInheritVisibility( ETrue );
-    
+    SetComponentsToInheritVisibility( EFalse );
+
     ActivateL();
     DIALER_PRINT("CDialer::ConstructL>");
     }
 
-// Constructor
-CDialer::CDialer( ) :
-    iEikEnv( *CEikonEnv::Static() )
+// -----------------------------------------------------------------------------
+// CDialer::CDialer
+//
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+CDialer::CDialer()
     {
-    // Empty    
+    // Empty
     }
 
 // -----------------------------------------------------------------------------
@@ -127,8 +161,6 @@
 
 // -----------------------------------------------------------------------------
 // CDialer::SetNumberEntryObserver
-//
-// 
 // -----------------------------------------------------------------------------
 //
 EXPORT_C void CDialer::SetNumberEntryObserver( MNumberEntryObserver& aObserver ) 
@@ -136,6 +168,101 @@
     iNumberEntry->SetNumberEntryObserver( aObserver );  
     }
 
+// -----------------------------------------------------------------------------
+// CDialer::SetControllerL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::SetControllerL( MPhoneDialerController* aController )
+    {
+    DIALER_PRINTF( "CDialer::SetControllerL, aController = %x", aController );
+    __ASSERT_DEBUG( aController, DialerPanic(EDialerPanicNullController) );
+    if ( aController && iController != aController )
+        {
+        iController = aController;
+        iToolbar->SetContentProviderL( iController );
+        iNumberEntry->SetNumberEntryPromptTextL( iController->NumberEntryPromptTextL() );
+        SizeChanged();
+        UpdateToolbar();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::Controller
+// ---------------------------------------------------------------------------
+//
+EXPORT_C MPhoneDialerController* CDialer::Controller()
+    {
+    return iController;
+    }
+            
+// ---------------------------------------------------------------------------
+// CDialer::GetEasyDialingInterface
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDialingExtensionInterface* CDialer::GetEasyDialingInterface() const
+    {
+    DIALER_PRINT("CDialer::GetEasyDialingInterface");
+    return iEasyDialer;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::UpdateToolbar
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::UpdateToolbar()
+    {
+    if ( iToolbar && iNumberEntry && iController )
+        {
+        TBool numAvailable = ( iNumberEntry->TextLength() > 0 );
+        iController->SetNumberEntryIsEmpty( !numAvailable );
+        iToolbar->UpdateButtonStates();
+        iToolbar->DrawDeferred();
+        iKeypadArea->DrawDeferred(); // needed to remove drawing problem from leftmost button column
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::UpdateNumberEntryConfiguration
+// ---------------------------------------------------------------------------
+//
+void CDialer::UpdateNumberEntryConfiguration()
+    {
+    TEditorType editorType = ENumericEditor;
+    if ( iQwertyMode && iController->EasyDialingAllowed() )
+        {
+        TBool voipSupported( EFalse );
+        CSPSettings* serviceProviderSettings = NULL;
+        TRAPD( err, serviceProviderSettings = CSPSettings::NewL() );
+        if ( !err )
+            {
+            voipSupported = serviceProviderSettings->IsFeatureSupported( 
+                ESupportInternetCallFeature );            
+            delete serviceProviderSettings;
+            }
+
+        if ( EasyDialingEnabled() || voipSupported )
+            {
+            editorType = EAlphanumericEditor;
+            }
+        }
+    
+    UpdateEdwinState( editorType );
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::RelayoutAndDraw
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::RelayoutAndDraw()
+	{
+	if ( iIsUsed )
+		{
+		SetSize( Size() );
+		DrawDeferred();
+		UpdateToolbar();
+		}
+	}
+
 // Methods from MNumberEntry
 
 // ---------------------------------------------------------------------------
@@ -149,6 +276,8 @@
     DIALER_PRINT("CDialer::CreateNumberEntry<");
     
     iIsUsed = ETrue;    
+
+    UpdateNumberEntryConfiguration();
     
     DIALER_PRINT("CDialer::CreateNumberEntry>");        
     }
@@ -158,7 +287,7 @@
 //  
 // ---------------------------------------------------------------------------
 //
-CCoeControl* CDialer::GetNumberEntry( ) const
+CCoeControl* CDialer::GetNumberEntry() const
     {
     CCoeControl* control( NULL );
     control = iNumberEntry->GetNumberEntry();
@@ -170,7 +299,7 @@
 //  
 // ---------------------------------------------------------------------------
 //
-TBool CDialer::IsNumberEntryUsed( ) const
+TBool CDialer::IsNumberEntryUsed() const
     {
     return iIsUsed;
     }
@@ -199,9 +328,9 @@
 //  
 // ---------------------------------------------------------------------------
 //
-void CDialer::GetTextFromNumberEntry( TDes& aDesC )
+void CDialer::GetTextFromNumberEntry( TDes& aDes )
     {
-    iNumberEntry->GetTextFromNumberEntry( aDesC );
+    iNumberEntry->GetTextFromNumberEntry( aDes );
     }
     
 // ---------------------------------------------------------------------------
@@ -209,10 +338,18 @@
 //  
 // ---------------------------------------------------------------------------
 //
-void CDialer::RemoveNumberEntry( )
+void CDialer::RemoveNumberEntry()
     {
     ResetEditorToDefaultValues();
     iIsUsed = EFalse;
+
+    // easydialer change begins
+    if (iEasyDialer)
+        {
+        TRAP_IGNORE( iEasyDialer->HandleCommandL( EEasyDialingClosePopup ) );
+        iEasyDialer->Reset();
+        }
+    // easydialer change ends
     }
     
 // ---------------------------------------------------------------------------
@@ -223,7 +360,7 @@
 TInt CDialer::ChangeEditorMode( TBool aDefaultMode )
     {
     TInt ret( KErrNotSupported );
-    ret = iNumberEntry->ChangeEditorMode( aDefaultMode );        
+    ret = iNumberEntry->ChangeEditorMode( aDefaultMode );
     return ret;
     }
     
@@ -235,7 +372,7 @@
 void CDialer::OpenVkbL()
     {
     iVirtualKeyBoardOpen = ETrue;
-    UpdateVkbEditorFlagsL();
+    UpdateEdwinState( EVirtualKeyboardEditor );
     
     iNumberEntry->HandleCommandL( EDialerCmdTouchInput );
     }
@@ -247,7 +384,8 @@
 //
 TInt CDialer::GetEditorMode() const
     {
-    return iVirtualKeyBoardOpen ? EAknEditorTextInputMode : 
+    TBool vkbOpen = EdwinState()->Flags() & EAknEditorFlagTouchInputModeOpened;
+    return ( iQwertyMode || vkbOpen ) ? EAknEditorTextInputMode : 
                                   EAknEditorNumericInputMode;
     }
     
@@ -281,6 +419,48 @@
     iKeypadArea->EnableTactileFeedback( aEnable );
     }
 
+// ---------------------------------------------------------
+// CDialer::HandleQwertyModeChange
+// ---------------------------------------------------------
+//
+EXPORT_C void CDialer::HandleQwertyModeChange( TInt aMode )
+    {
+    iQwertyMode = aMode;
+    UpdateNumberEntryConfiguration();
+    }
+
+// ---------------------------------------------------------
+// CDialer::HandleKeyboardLayoutChange
+// ---------------------------------------------------------
+// 
+EXPORT_C void CDialer::HandleKeyboardLayoutChange()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::HandleControlEventL
+// ---------------------------------------------------------------------------
+//
+void CDialer::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
+    {
+    switch ( aEventType )
+        {
+        case MCoeControlObserver::EEventRequestFocus:
+            if ( aControl == iNumberEntry )
+                {
+                if ( iEasyDialer )
+                    {
+                    iEasyDialer->SetFocus( EFalse );
+                    }
+                iNumberEntry->SetFocus( ETrue );
+                }
+            break;
+            
+        default:
+            break;
+        }
+    }
+
 // Functions from CCoeControl
 
 // ---------------------------------------------------------------------------
@@ -293,7 +473,7 @@
 void CDialer::SizeChanged()
     {
     AknsUtils::RegisterControlPosition( this );
-    TRect parentRect(Rect()); 
+    TRect parentRect( Rect() );
        
     // Method is called before containers are created.
     if ( !iKeypadArea )
@@ -301,19 +481,32 @@
         return;
         }
         
-    TDialerVariety variety( EDialerVarietyLandscape );
-    if (  !Layout_Meta_Data::IsLandscapeOrientation() )
-        {
-        variety = EDialerVarietyPortrait;
-        }            
-    // number entry
-    AknLayoutUtils::LayoutControl(
-        iNumberEntry, parentRect, 
-        AknLayoutScalable_Apps::dialer2_ne_pane( variety ).LayoutLine() );
-    // keypad area.
+    TDialerVariety variety = ( Layout_Meta_Data::IsLandscapeOrientation() ?
+        EDialerVarietyLandscape : EDialerVarietyPortrait );
+    
+    // keypad area
+    TDialerOperationMode keypadOpMode = 
+            ( EasyDialingEnabled() ? EModeEasyDialing : EModeDialer );
+    iKeypadArea->SetOperationMode( keypadOpMode );
     AknLayoutUtils::LayoutControl(
         iKeypadArea, parentRect, 
-        AknLayoutScalable_Apps::grid_dialer2_keypad_pane( variety ).LayoutLine() );
+        AknLayoutScalable_Apps::dia3_keypad_num_pane( variety ).LayoutLine() );
+
+    // toolbar
+    AknLayoutUtils::LayoutControl(
+        iToolbar, parentRect, 
+        AknLayoutScalable_Apps::dia3_keypad_fun_pane( variety ).LayoutLine() );
+
+    // easy dial contacts list
+    if ( iEasyDialer )
+        {
+        AknLayoutUtils::LayoutControl(
+            iEasyDialer, parentRect, 
+            AknLayoutScalable_Apps::dia3_listscroll_pane( variety ).LayoutLine() );
+        }
+
+    // number entry
+    LayoutNumberEntry( parentRect, variety );   
     }
 
 // ---------------------------------------------------------------------------
@@ -333,8 +526,12 @@
 //
 TInt CDialer::CountComponentControls() const
     {
-    TInt count(0);
-    count = KContainedControlsInTelephonyMode;
+    TInt count( KContainedControlsInTelephonyMode );
+    
+    if ( !iEasyDialer )
+        {
+        count--;
+        }
     return count;
     }
     
@@ -347,7 +544,7 @@
 CCoeControl* CDialer::ComponentControl( TInt aIndex ) const
     {
     CCoeControl* currentControl(NULL);
-    currentControl = ComponentControlForDialerMode( aIndex);
+    currentControl = ComponentControlForDialerMode( aIndex );
     return currentControl;
     } 
 
@@ -365,7 +562,17 @@
 //
 void CDialer::FocusChanged(TDrawNow aDrawNow)
     {
-    iNumberEntry->SetFocus( IsFocused(), aDrawNow );    
+    if ( iEasyDialer )
+        {           
+        // Number entry is set to focus if dialer is in focus and easydialing plugin
+        // is not in focus.
+        TBool numberEntryFocus = IsFocused() && !iEasyDialer->IsFocused();
+        iNumberEntry->SetFocus( numberEntryFocus, aDrawNow );
+        }
+    else
+        {
+        iNumberEntry->SetFocus( IsFocused(), aDrawNow );    
+        }
     }
     
 // ---------------------------------------------------------------------------
@@ -373,9 +580,32 @@
 // ---------------------------------------------------------------------------
 //
 void CDialer::MakeVisible( TBool aVisible )
-	{
-	CCoeControl::MakeVisible( aVisible );
-	}
+    {
+    CCoeControl::MakeVisible( aVisible );
+
+    // Component control do not inherit visibility automatically as we
+    // want to control their visibility separately.
+    if ( iNumberEntry )
+        {
+        iNumberEntry->MakeVisible( aVisible );
+        }
+
+    if ( iKeypadArea )
+        {
+        iKeypadArea->MakeVisible( aVisible );
+        }
+
+    if ( iEasyDialer )
+        {
+        TBool edVisible = 
+            ( aVisible && EasyDialingEnabled() );
+        iEasyDialer->MakeVisible( edVisible );
+        }
+    if ( iToolbar )
+        {
+        iToolbar->MakeVisible( aVisible );
+        }
+    }
 
 // ---------------------------------------------------------------------------
 // CDialer::PrepareForFocusGainL
@@ -389,9 +619,7 @@
         // Clear editor flags and report
         // edwin state changed.
         iVirtualKeyBoardOpen = EFalse;
-        iNumberEntry->ClearEditorFlags();
-        EdwinState()->ReportAknEdStateEventL(
-                MAknEdStateObserver::EAknEdwinStateEventStateUpdate );
+        UpdateNumberEntryConfiguration();
         }
     }
 
@@ -433,9 +661,9 @@
     path.Append( KDC_RESOURCE_FILES_DIR );
     path.Append( KDialerResourceFile );
     
-    RFs &fsSession= iEikEnv.FsSession();
+    RFs& fsSession= ControlEnv()->FsSession();
     BaflUtils::NearestLanguageFile( fsSession, path ); 
-    iResourceOffset = iEikEnv.AddResourceFileL( path );
+    iResourceOffset = ControlEnv()->AddResourceFileL( path );
     }
 
 // -----------------------------------------------------------------------------
@@ -447,7 +675,7 @@
     {
     if ( iResourceOffset > 0 )
         {
-        iEikEnv.DeleteResourceFile( iResourceOffset );
+        ControlEnv()->DeleteResourceFile( iResourceOffset );
         iResourceOffset = 0;
         }
     }
@@ -471,6 +699,14 @@
         case 1:
             currentControl = iKeypadArea;
             break;
+            
+        case 2:
+            currentControl = iToolbar;
+            break;
+        case 3:
+            currentControl = iEasyDialer;
+            break;
+            
         default:
             {
             __ASSERT_DEBUG( EFalse, _L("CDialer::ComponentControl no such component defined"));
@@ -487,7 +723,7 @@
 //  
 // ---------------------------------------------------------------------------
 //
-CAknEdwinState* CDialer::EdwinState()
+CAknEdwinState* CDialer::EdwinState() const
     {
     MCoeFepAwareTextEditor_Extension1* extension = 
         static_cast<MCoeFepAwareTextEditor_Extension1*>
@@ -497,31 +733,141 @@
     } 
 
 // ---------------------------------------------------------------------------
-// CDialer::UpdateVkbEditorFlagsL
+// CDialer::UpdateEdwinState
 //  
 // ---------------------------------------------------------------------------
 //
-void CDialer::UpdateVkbEditorFlagsL()
+void CDialer::UpdateEdwinState( TEditorType aType )
     {
     CAknEdwinState* edwinState = EdwinState();
-    // Set flags, input mode, SCT, permitted modes,
-    // keymapping and menu for alphanumeric virtual
-    // keyboard.
-    edwinState->SetCurrentInputMode( EAknEditorTextInputMode );
-    edwinState->SetSpecialCharacterTableResourceId( 
-        R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG );    
-    edwinState->SetFlags( EAknEditorFlagNoT9 |
-                          EAknEditorFlagLatinInputModesOnly | 
-                          EAknEditorFlagNoEditIndicators );            
-    edwinState->SetPermittedInputModes( 
-                          EAknEditorNumericInputMode |
-                          EAknEditorTextInputMode );    
-    edwinState->SetNumericKeymap( EAknEditorAlphanumericNumberModeKeymap );    
-    edwinState->SetMenu();
+    
+    switch ( aType )
+        {
+        case ENumericEditor:
+            {
+            iNumberEntry->ClearEditorFlags();
+            }
+            break;
+        
+        case EAlphanumericEditor:
+        case EVirtualKeyboardEditor:
+            // intended fall-through
+            {
+            TBool vkbOpen = edwinState->Flags() & EAknEditorFlagTouchInputModeOpened;
+            TInt flags = EAknEditorFlagNoT9 | 
+                         EAknEditorFlagLatinInputModesOnly |
+                         EAknEditorFlagSelectionVisible;
+            edwinState->SetDefaultInputMode( EAknEditorTextInputMode );
+            edwinState->SetCurrentInputMode( EAknEditorTextInputMode );
+            
+            if ( EVirtualKeyboardEditor == aType || vkbOpen )
+                {
+                // Indicators would be shown after closing VKB unless disabled
+                // here.
+                flags = ( flags |= EAknEditorFlagNoEditIndicators );
+                }
+            else
+                {
+                iVirtualKeyBoardOpen = EFalse;
+                }
+            
+            edwinState->SetFlags( flags );
+            edwinState->SetPermittedInputModes( 
+                EAknEditorNumericInputMode | EAknEditorTextInputMode );
+            edwinState->SetPermittedCases( 
+                EAknEditorUpperCase | EAknEditorLowerCase );
+            edwinState->SetDefaultCase( EAknEditorLowerCase );
+            edwinState->SetCurrentCase( EAknEditorLowerCase );
+            edwinState->SetSpecialCharacterTableResourceId( 
+                R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG );
+            edwinState->SetNumericKeymap( 
+                EAknEditorAlphanumericNumberModeKeymap );
+            edwinState->SetMenu();
+            }
+            break;
+        
+        default:
+            DIALER_PRINT( "CDialer::ConfigureEditorSettings, DEFAULT" )
+            ASSERT( EFalse );
+        }
+    
+    TRAPD( result, edwinState->ReportAknEdStateEventL(
+        MAknEdStateObserver::EAknEdwinStateEventStateUpdate ) );
     
-    // Report state updated
-    edwinState->ReportAknEdStateEventL(
-                    MAknEdStateObserver::EAknEdwinStateEventStateUpdate );
+    if ( KErrNone != result )
+        {
+        DIALER_PRINTF( "CDialer::ConfigureEditorSettings, RESULT: %d", result )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::LoadEasyDialingPlugin
+// ---------------------------------------------------------------------------
+//
+void CDialer::LoadEasyDialingPlugin()
+    {
+    DIALER_PRINT( "CDialer::LoadEasyDialingPlugin" )
+    TRAPD( error, 
+        {
+        iEasyDialer = CDialingExtensionInterface::NewL();
+        iEasyDialer->InitializeL( *this );
+        
+        iDialingExtensionObserver = CDialingExtensionObserver::NewL( iEasyDialer, iNumberEntry, this );
+        iEasyDialer->AddObserverL( iDialingExtensionObserver );
+        } );
+
+    if ( error )
+        {
+        DIALER_PRINT( "CDialer::LoadEasyDialingPlugin, load failed" )
+                
+        delete iEasyDialer;        
+        iEasyDialer = NULL;
+        
+        delete iDialingExtensionObserver;
+        iDialingExtensionObserver = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::EasyDialingEnabled
+// ---------------------------------------------------------------------------
+//
+TBool CDialer::EasyDialingEnabled() const
+    {
+    TBool easyDialEnabled = ( iEasyDialer &&
+                              iEasyDialer->IsEnabled() &&
+                              iController &&
+                              iController->EasyDialingAllowed() );
+    return easyDialEnabled;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::LayoutNumberEntry
+// ---------------------------------------------------------------------------
+//
+void CDialer::LayoutNumberEntry( const TRect& aParent, TInt aVariety )
+    {
+    // Use larger number entry if Easy dialing is not currently enabled.
+    if ( EasyDialingEnabled() )
+        {
+        iNumberEntry->SetOperationMode( EModeEasyDialing );
+        AknLayoutUtils::LayoutControl(
+            iNumberEntry, aParent, 
+            AknLayoutScalable_Apps::dia3_numentry_pane( aVariety ).LayoutLine() );
+        }
+    else
+        {
+        iNumberEntry->SetOperationMode( EModeDialer );
+        TAknLayoutRect neLayoutRect;
+        neLayoutRect.LayoutRect( aParent, AknLayoutScalable_Apps::dia3_numentry_pane( aVariety ) );
+        TAknLayoutRect edLayoutRect;
+        edLayoutRect.LayoutRect( aParent, AknLayoutScalable_Apps::dia3_listscroll_pane( aVariety ) );
+
+        // create rect which is union of layout rects for ED and NE
+        TRect neRect( edLayoutRect.Rect().iTl, neLayoutRect.Rect().iBr );
+
+        iNumberEntry->SetRect( neRect );
+        }
     }
 
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/src/cdialercenrepwrapper.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Wrapper class for Central Repository handling.
+*               Using this helper class is most helpful when one class needs
+*               to observe state changes in several repositories.
+*/
+
+#include <centralrepository.h>
+#include "cdialercenrepwrapper.h"
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::CDialerCenRepWrapper
+//
+// ---------------------------------------------------------------------------
+//
+CDialerCenRepWrapper::CDialerCenRepWrapper( 
+        MDialerCenRepObserver& aObserver, TUid aRepository ) :
+    iObserver( aObserver ), iRepositoryId( aRepository )
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::~CDialerCenRepWrapper
+//
+// ---------------------------------------------------------------------------
+//
+CDialerCenRepWrapper::~CDialerCenRepWrapper()
+    {
+    if ( iCenRepNotifyHandler )
+        {
+        iCenRepNotifyHandler->StopListening();
+        delete iCenRepNotifyHandler;
+        }
+    delete iRepository;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::NewLC
+//
+// ---------------------------------------------------------------------------
+//
+CDialerCenRepWrapper* CDialerCenRepWrapper::NewLC( 
+        MDialerCenRepObserver& aObserver, TUid aRepository )
+    {
+    CDialerCenRepWrapper* self = 
+            new (ELeave) CDialerCenRepWrapper( aObserver, aRepository );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CDialerCenRepWrapper* CDialerCenRepWrapper::NewL( 
+        MDialerCenRepObserver& aObserver, TUid aRepository )
+    {
+    CDialerCenRepWrapper* self = 
+            CDialerCenRepWrapper::NewLC( aObserver, aRepository );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerCenRepWrapper::ConstructL()
+    {
+    iRepository = CRepository::NewL( iRepositoryId );
+    iCenRepNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository );
+    iCenRepNotifyHandler->StartListeningL();
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::HandleNotifyGeneric
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerCenRepWrapper::HandleNotifyGeneric( TUint32 aId )
+    {
+    iObserver.HandleRepositoryChange( iRepositoryId, aId );
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerCenRepWrapper::Get
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDialerCenRepWrapper::Get( TUint32 aKey, TInt& aValue )
+    {
+    return iRepository->Get( aKey, aValue );
+    }
+
+// end of file
+
--- a/phoneuis/dialer/src/cdialercontainerbase.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/src/cdialercontainerbase.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -23,7 +23,7 @@
 #include <aknbutton.h>
 #include <AknsUtils.h>
 #include <AknsDrawUtils.h>
-#include <AknLayout2Def.h>
+#include <aknlayout2def.h>
 #include <AknsSkinInstance.h>
 #include <AknsControlContext.h>
 #include <aknlayoutscalable_apps.cdl.h>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/src/cdialerkeypadbutton.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,537 @@
+/*
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* 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:  Shows number keypad and generates keypress event when 
+*                 buttons are pressed.
+*
+*/
+
+
+// INCLUDE FILES
+#include <gulicon.h>
+#include <AknUtils.h>
+#include <aknbutton.h>
+#include <AknControl.h>
+#include <AknsUtils.h>
+#include <AknsSkinInstance.h>
+#include <AknsDrawUtils.h>
+#include <data_caging_path_literals.hrh> // for KDC_APP_RESOURCE_DIR
+#include <touchfeedback.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsFrameBackgroundControlContext.h>
+
+#include "dialercommon.h"
+#include "dialertrace.h"
+#include "cdialerkeypadbutton.h"
+
+_LIT( KDialerMifFileName, "dialer.mif" );
+
+// Keypad icon size relative to height of button.
+static const TInt KIconSizePercent = 40;
+
+// Keypad icon size used when key has already two lines
+// of text, and the icon needs to be squeezed into smaller space.
+static const TInt KSmallIconSizePercent = 30;
+
+// Horizontal icon margin relative to button width. 
+static const TInt KIconMarginXPercent = 10;
+
+// Vertical icon margin relative to button height. 
+static const TInt KIconMarginYPercent = 5;
+
+static const TInt KCent = 100;
+
+// Copied from CAknButton
+const TInt KDragEventSensitivity = 1;
+
+// ---------------------------------------------------------------------------
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+CDialerKeyPadButton::CDialerKeyPadButton( const TDesC& aNumberLabel,
+                                          const TDesC& aPrimaryAlphaLabel,
+                                          const TDesC& aSecondaryAlphaLabel,
+                                          TInt aScanCode, 
+                                          TInt aKeyCode,
+                                          TMifDialer aButtonIconId, 
+                                          TMifDialer aButtonIconMaskId,
+                                          TInt aFlags ):
+        CAknButton( aFlags ), 
+        iScanCode( aScanCode ), 
+        iKeyCode( aKeyCode ),
+        iButtonIconId( aButtonIconId ),
+        iButtonIconMaskId( aButtonIconMaskId ),
+        iNumberLabel( aNumberLabel ),
+        iPrimaryAlphaLabel( aPrimaryAlphaLabel ),
+        iSecondaryAlphaLabel( aSecondaryAlphaLabel )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CDialerKeyPadButton::NewLC
+// Two-phased constructor.
+// Constructs dialer button.
+// -----------------------------------------------------------------------------
+//
+
+CDialerKeyPadButton* CDialerKeyPadButton::NewLC( const TDesC& aNumberLabel,
+                                                 const TDesC& aPrimaryAlphaLabel,
+                                                 const TDesC& aSecondaryAlphaLabel,
+                                                 TInt aScanCode, 
+                                                 TInt aKeyCode,
+                                                 TMifDialer aButtonIconId, 
+                                                 TMifDialer aButtonIconMaskId,
+                                                 TInt aFlags )
+    {
+    CDialerKeyPadButton* self = new (ELeave) CDialerKeyPadButton( aNumberLabel, 
+                                                                  aPrimaryAlphaLabel, 
+                                                                  aSecondaryAlphaLabel, 
+                                                                  aScanCode, 
+                                                                  aKeyCode,
+                                                                  aButtonIconId,
+                                                                  aButtonIconMaskId,
+                                                                  aFlags );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFlags );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CDialerKeyPadButton::ConstructL
+// Symbian 2nd phase constructor for dialer button.
+// -----------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::ConstructL( TInt aFlags )
+    {
+    CAknButton::ConstructL( NULL, NULL, NULL, NULL, KNullDesC, KNullDesC, aFlags );
+    UpdateIconL();
+    
+    // button text color
+    SetTextColorIds( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG65 );
+    SetIconScaleMode( EAspectRatioPreserved );
+    SetMargins( TMargins8(0,0,0,0) );
+    AknsUtils::RegisterControlPosition( this );
+    }
+	
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CDialerKeyPadButton::~CDialerKeyPadButton()
+    {
+    AknsUtils::DeregisterControlPosition( this );
+    
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if ( feedback )
+        {
+        feedback->RemoveFeedbackForControl( this );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Draw dialer button,  text and icon.
+// ---------------------------------------------------------------------------
+// 
+void CDialerKeyPadButton::Draw( const TRect& aRect ) const
+    {
+    TAknLayoutRect centerLayout;
+    centerLayout.LayoutRect( aRect,
+        AknLayoutScalable_Avkon::toolbar_button_pane_g1().LayoutLine() );
+    TRect innerRect = centerLayout.Rect();
+
+    CWindowGc& gc = SystemGc();
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+    TAknsItemID frameId = KAknsIIDQsnFrButtonNormal;
+
+    if ( iButtonPressed )
+        {
+        frameId = KAknsIIDQsnFrButtonPressed;
+        }
+    else if ( IsDimmed() )
+        {
+        frameId = KAknsIIDQsnFrButtonInactive;
+        }
+        
+    iBgContext->SetFrame( frameId );
+    iBgContext->SetCenter( KAknsIIDQsnFrButtonCenterNormal );
+    iBgContext->SetFrameRects( aRect, innerRect );
+
+    TBool bgDrawn = AknsDrawUtils::Background( skin, 
+                                    iBgContext, 
+                                    NULL, 
+                                    gc, 
+                                    aRect, 
+                                    KAknsDrawParamNoClearUnderImage );
+                                    
+    __ASSERT_DEBUG( bgDrawn, DialerPanic( EDialerPanicDrawingError ) );
+                                    
+    DrawIconAndText( gc );
+    }
+
+// -----------------------------------------------------------------------------
+// Respond to changes in the button size
+// -----------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::SizeChanged()
+    {
+    CAknButton::SizeChanged();
+    AknsUtils::RegisterControlPosition( this );
+    
+    TRect buttonRect = Rect();
+    TAknLayoutRect iconLayout;
+    const CGulIcon* icon = GetCurrentIcon();
+
+    if ( iOperationMode == EModeEasyDialing )
+        {
+        // Number layout
+        TAknTextComponentLayout numLayout = 
+            AknLayoutScalable_Apps::cell_dia3_key_num_pane_t1( iVariety );
+        // Center the number label if key doens't contain any alphabets or icon.
+        if ( !icon && !iPrimaryAlphaLabel.Length() && !iSecondaryAlphaLabel.Length() )
+            {
+            // eliminate margins, alignment takes care of correct position
+            numLayout.Setl( 0 );
+            numLayout.Setr( 0 );
+            numLayout.SetJ( 1 ); // ID for center alignment
+            }
+        iNumberLayout.LayoutText( buttonRect, numLayout );
+
+        // Alphabet layout is different if two rows of alphabets are given
+        if ( iSecondaryAlphaLabel.Length() )
+            {
+            iPrimaryAlphaLayout.LayoutText( buttonRect, 
+                AknLayoutScalable_Apps::cell_dia3_key_num_pane_t3( iVariety ) );
+            iSecondaryAlphaLayout.LayoutText( buttonRect, 
+                AknLayoutScalable_Apps::cell_dia3_key_num_pane_t4( iVariety ) );
+            }
+        else
+            {
+            iPrimaryAlphaLayout.LayoutText( buttonRect, 
+                AknLayoutScalable_Apps::cell_dia3_key_num_pane_t2( iVariety ) );
+            }   
+        }
+    else if ( iOperationMode == EModeDialer )
+        {
+        // Number layout
+        // Center number labels as only numbers are shown
+        TAknTextComponentLayout numLayout = 
+            AknLayoutScalable_Apps::cell_dia3_key_num_pane_t1( iVariety );
+        // eliminate margins, alignment takes care of correct position
+        numLayout.Setl( 0 );
+        numLayout.Setr( 0 );
+        numLayout.SetJ( 1 ); // ID for center alignment
+        iNumberLayout.LayoutText( buttonRect, numLayout );
+        }
+    else // video mode layout
+        {
+        // Number layout
+        iNumberLayout.LayoutText( buttonRect, 
+            AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_t1() );
+        }
+
+    SetIconLayout( buttonRect );
+    }
+
+// ---------------------------------------------------------------------------
+// Pointer event handling. Implemented here just to detect when touch is 
+// dragged outside pressed button as no appropriate control event is sent 
+// by CAknButton when this happens.
+// ---------------------------------------------------------------------------
+// 
+void CDialerKeyPadButton::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {   
+    // Do the check before forwarding events to base class as it will update
+    // iButtonPressed member variable used here. 
+    // Own drag event counter has to be used.
+    // Logic here to determine whether pointer is dragged outside button is 
+    // the same as used in CAknButton.
+    
+    if ( State() && IsVisible() )
+        {
+        if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+            {
+            iDragEventCounter = 0;
+            }
+         else if ( aPointerEvent.iType == TPointerEvent::EDrag )
+            {
+            iDragEventCounter++;
+            if ( iDragEventCounter >= KDragEventSensitivity  )
+                {
+                iDragEventCounter = 0;
+                
+                TBool buttonEvent( Rect().Contains( aPointerEvent.iPosition ) );
+                
+                // Pointer is dragged outside the pressed button area
+                if ( !buttonEvent && iButtonPressed && Observer() )
+                    {
+                    Observer()->HandleControlEventL( this,
+                            static_cast<MCoeControlObserver::TCoeEvent>( 
+                            CDialerKeyPadButton::EEventDraggingOutsideButton ) );
+                    }
+                }
+            }
+        }
+
+    CAknButton::HandlePointerEventL( aPointerEvent );
+    }
+
+// -----------------------------------------------------------------------------
+// Gets the correct text color.
+// -----------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::GetTextColors( TRgb& aPenColor, TRgb& aBrushColor ) const 
+   { 
+   aBrushColor = iEikonEnv->ControlColor( EColorControlBackground, *this ); 
+   
+   if ( iButtonPressed )
+       {
+       aPenColor = iEikonEnv->ControlColor( EColorButtonTextPressed, *this );
+       }
+   else
+       {
+       aPenColor = iEikonEnv->ControlColor( EColorButtonText, *this );
+       }
+   }
+
+// --------------------------------------------------------------------------
+// Draw text and icon according to the layout.
+// --------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::DrawIconAndText( CWindowGc& aGc ) const
+    {
+    TRect parentRect( Rect() );
+    TAknLayoutText buttonText;
+    TAknLayoutRect layoutRect;
+    
+    TRgb penColor;
+    TRgb brushColor;
+    GetTextColors( penColor, brushColor );
+    
+    // Don't ues logical-to-visual conversion, strings in our keypad resources are already
+    // in visual order.
+    TBool logToVisConv = EFalse;
+    
+    iNumberLayout.DrawText( aGc, iNumberLabel, logToVisConv, penColor );
+
+    // Draw also alphabet label(s) in Easy Dialing mode
+    if ( iOperationMode == EModeEasyDialing )
+        {
+        if ( iPrimaryAlphaLabel.Length() )
+            {
+            iPrimaryAlphaLayout.DrawText( aGc, iPrimaryAlphaLabel, logToVisConv, penColor );
+            }
+        if ( iSecondaryAlphaLabel.Length() )
+            {
+            iSecondaryAlphaLayout.DrawText( aGc, iSecondaryAlphaLabel, logToVisConv, penColor );
+            }
+        }
+    
+    const CGulIcon* icon = GetCurrentIcon();
+    if ( icon )
+        {
+        CFbsBitmap* buttonBmp = icon->Bitmap();
+        CFbsBitmap* buttonMask = icon->Mask();
+   
+        if ( buttonBmp && buttonMask )
+            {
+            aGc.BitBltMasked( iIconRect.iTl, buttonBmp,
+                    iIconRect.Size(), buttonMask, ETrue );
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// Set layout data for text.
+// --------------------------------------------------------------------------
+void CDialerKeyPadButton::SetVariety( TInt aVariety )
+    {
+    iVariety = aVariety;
+    }
+
+// --------------------------------------------------------------------------
+// Set layout data for text.
+// --------------------------------------------------------------------------
+void CDialerKeyPadButton::SetOperationMode( TDialerOperationMode aMode ) 
+    {
+    iOperationMode = aMode;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//    
+void CDialerKeyPadButton::SetNumLabel( const TDesC& aLabel )
+    {
+    iNumberLabel.Set( aLabel );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//    
+void CDialerKeyPadButton::SetPrimaryAlphaLabel( const TDesC& aLabel )
+    {
+    iPrimaryAlphaLabel.Set( aLabel );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//    
+void CDialerKeyPadButton::SetSecondaryAlphaLabel( const TDesC& aLabel )
+    {
+    iSecondaryAlphaLabel.Set( aLabel );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//    
+TInt CDialerKeyPadButton::ScanCode() const
+    {
+    return iScanCode;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//    
+TInt CDialerKeyPadButton::KeyCode() const
+    {
+    return iKeyCode;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::MapDialerIconToSkinIcon( 
+        TInt aDialerIcon, TAknsItemID& aItemId ) const
+    {    
+     switch ( aDialerIcon )
+        {       
+        case EMbmDialerQgn_indi_dialer_voicemail:
+            aItemId = KAknsIIDQgnIndiDialerVoicemail;
+            break; 
+        default:
+            break;
+        }
+    }   
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::SetIconLayout( const TRect& aRect )
+    {
+    // Calculate icon size and placement.
+    TInt iconSize = aRect.Height() * KIconSizePercent / KCent;
+    TInt xMargin = aRect.Width() * KIconMarginXPercent / KCent;
+    TInt yMargin = aRect.Height() * KIconMarginYPercent / KCent;
+    
+    // Adapt icon size and vertical margin. If the button has 
+    // already two lines of text, use smaller icon size
+    if ( iOperationMode == EModeEasyDialing && iSecondaryAlphaLabel.Length() )
+        {
+        iconSize = aRect.Height() * KSmallIconSizePercent / KCent;
+        yMargin = 0;
+        }
+    
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        iIconRect.SetRect( aRect.iTl.iX + xMargin,
+                aRect.iTl.iY + yMargin, 
+                aRect.iTl.iX + xMargin + iconSize, 
+                aRect.iTl.iY + iconSize + yMargin );
+        }
+    else 
+        {
+        iIconRect.SetRect( aRect.iBr.iX - iconSize - xMargin,
+                aRect.iTl.iY + yMargin, 
+                aRect.iBr.iX - xMargin, 
+                aRect.iTl.iY + iconSize + yMargin );
+        }
+    SetIconSize( iIconRect.Size() );
+    }
+
+// ---------------------------------------------------------------------------
+// Update icon when skin is changed
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::UpdateIconL()
+    {
+    if ( KDialerNoIcon != iButtonIconId )
+        {
+        TFileName mifPath( KDriveZ );
+        mifPath.Append( KDC_APP_BITMAP_DIR );
+        mifPath.Append( KDialerMifFileName );
+        
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        CFbsBitmap* bitmap (NULL);
+        CFbsBitmap* mask (NULL);
+            
+        // Get icon id.
+        TAknsItemID skinItemId( KAknsIIDNone );  
+        MapDialerIconToSkinIcon( iButtonIconId, skinItemId );
+        
+        AknsUtils::CreateColorIconLC( 
+                skin, 
+                skinItemId,
+                KAknsIIDQsnIconColors, 
+                EAknsCIQsnIconColorsCG30,
+                bitmap, 
+                mask, 
+                mifPath, 
+                iButtonIconId, 
+                iButtonIconMaskId,
+                KRgbBlack
+                );
+        
+        CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+        CleanupStack::Pop( 2 );
+        
+        State()->SetIcon( icon ); // icon ownership transfered
+        }
+    }  
+
+// ---------------------------------------------------------------------------
+// 
+// Enable or disable audio but keep vibra feedback 
+// ---------------------------------------------------------------------------
+//   
+void CDialerKeyPadButton::EnableAudioFeedback( const TBool aEnable )
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if ( feedback )
+        {
+        feedback->EnableFeedbackForControl( this, ETrue, aEnable );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadButton::HandleResourceChange( TInt aType )
+    {
+   CAknButton::HandleResourceChange( aType );
+   
+    if ( KAknsMessageSkinChange == aType )
+        {
+        TRAP_IGNORE( UpdateIconL() );
+        }    
+    }
+
+// End of File
--- a/phoneuis/dialer/src/cdialerkeypadcontainer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/src/cdialerkeypadcontainer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -21,322 +21,71 @@
 #include <e32event.h>
 #include <gulicon.h>
 #include <eikapp.h>
-#include <AknUtils.h>
 #include <aknbutton.h>
 #include <AknControl.h>
 #include <AknsUtils.h>
 #include <AknsSkinInstance.h>
 #include <AknsDrawUtils.h>
 #include <AknsConstants.h>
-#include <AknLayout2Def.h>
+#include <aknlayout2def.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
 #include <data_caging_path_literals.hrh> // for KDC_APP_RESOURCE_DIR
 #include <touchfeedback.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <AknsFrameBackgroundControlContext.h>
 
 #include "cdialerkeypadcontainer.h"
 #include "dialercommon.h"
 #include "dialertrace.h"
 
 #include "cdialerkeypadbutton.h"
-_LIT( KDialerMifFileName, "dialer.mif" );
 
 // Number of buttons in this container
 const TInt KNumberOfButtons = 12; 
 
-// Keypad button images
-const TMifDialer KKeyPadButtons[] =
+struct TDialerButton
+    {
+    TMifDialer iBitmap;
+    TMifDialer iBitmapMask;
+    TInt iScanCode;
+    TInt iKeyCode;
+    };  
+
+const TDialerButton KKeyPadButtons[ KNumberOfButtons ] =
+
     {
-    EMbmDialerQgn_indi_dialer_one,
-    EMbmDialerQgn_indi_dialer_two,
-    EMbmDialerQgn_indi_dialer_three,
-    EMbmDialerQgn_indi_dialer_four,
-    EMbmDialerQgn_indi_dialer_five,
-    EMbmDialerQgn_indi_dialer_six,
-    EMbmDialerQgn_indi_dialer_seven,
-    EMbmDialerQgn_indi_dialer_eight,
-    EMbmDialerQgn_indi_dialer_nine,
-    EMbmDialerQgn_indi_dialer_prefix,
-    EMbmDialerQgn_indi_dialer_zero,
-    EMbmDialerQgn_indi_dialer_hash
-    };
-
-// Keypad button image masks
-const TMifDialer KKeyPadButtonsMasks[] =
-    {
-    EMbmDialerQgn_indi_dialer_one_mask,
-    EMbmDialerQgn_indi_dialer_two_mask,
-    EMbmDialerQgn_indi_dialer_three_mask,
-    EMbmDialerQgn_indi_dialer_four_mask,
-    EMbmDialerQgn_indi_dialer_five_mask,
-    EMbmDialerQgn_indi_dialer_six_mask,
-    EMbmDialerQgn_indi_dialer_seven_mask,
-    EMbmDialerQgn_indi_dialer_eight_mask,
-    EMbmDialerQgn_indi_dialer_nine_mask,
-    EMbmDialerQgn_indi_dialer_prefix_mask,
-    EMbmDialerQgn_indi_dialer_zero_mask,
-    EMbmDialerQgn_indi_dialer_hash_mask
+        { EMbmDialerQgn_indi_dialer_voicemail,
+          EMbmDialerQgn_indi_dialer_voicemail_mask, 
+          '1',
+          '1'
+        },
+        { KDialerNoIcon, KDialerNoIcon, 
+          '2', '2' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          '3', '3' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          '4', '4' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          '5', '5' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          '6', '6' },
+        { KDialerNoIcon, KDialerNoIcon, 
+          '7', '7' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          '8', '8' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          '9', '9' },
+        { KDialerNoIcon, KDialerNoIcon,  
+          EStdKeyNkpAsterisk, '*'  },
+        { EMbmDialerQgn_indi_dialer_internet, 
+          EMbmDialerQgn_indi_dialer_internet_mask,  
+          '0', '0' },
+        { KDialerNoIcon, KDialerNoIcon,      
+          EStdKeyHash, '#' }
     };
 
-// Match keypresses to keyevents send to the phone
-//
-const TInt TDialerButtonToKeypadMap[12][2] = 
-        {  
-            { 49, // ScanCode
-              49  // KeyCode
-            },
-            { 50,
-              50
-            },
-            { 51,
-              51
-            },
-            { 52,
-              52
-            },    
-            { 53,
-              53
-            },
-            { 54,
-              54
-            },
-            { 55,
-              55
-            },
-            { 56,
-              56
-            },
-            { 57,
-              57
-            },                        
-            { EStdKeyNkpAsterisk,
-              42
-            },
-            { '0',
-              '0'
-            }, 
-            { EStdKeyHash,
-              35
-            }                                                                                                       
-        };   
 
-// Class declaration for CDialerKeyPadButton separated to cdialerkeypadbutton.h.
-
-// ---------------------------------------------------------------------------
-// C++ default constructor
-// ---------------------------------------------------------------------------
-//
-CDialerKeyPadButton::CDialerKeyPadButton()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CDialerKeyPadButton::~CDialerKeyPadButton()
-    {
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if ( feedback )
-        {
-        feedback->RemoveFeedbackForControl( iButton );
-        }
-    delete iButton;   
-    }
-        
-// ---------------------------------------------------------------------------
-// Creates number keypad button
-// ---------------------------------------------------------------------------
-//
-void CDialerKeyPadButton::CreateButtonL( const TInt aScanCode, 
-                                         const TInt aKeyCode,
-                                         const TMifDialer aButtonIcon, 
-                                         const TMifDialer aButtonIconMask )
-    {
-    iScanCode = aScanCode;
-    iKeyCode  = aKeyCode;
-    iButtonIcon = aButtonIcon;
-    iButtonIconMask = aButtonIconMask;
-    
-    TFileName mifPath( KDriveZ );
-    mifPath.Append( KDC_APP_BITMAP_DIR );
-    mifPath.Append( KDialerMifFileName );
-
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    CFbsBitmap* bitmap (NULL);
-    CFbsBitmap* mask (NULL);
-
-    // Get icon ids.
-    TAknsItemID skinItemId( KAknsIIDNone );  
-    
-    // Create button image.
-    MapDialerIconToSkinIcon( aButtonIcon ,skinItemId );
-    AknsUtils::CreateColorIconLC( 
-        skin, 
-        skinItemId,
-        KAknsIIDQsnIconColors, 
-        EAknsCIQsnIconColorsCG30,
-        bitmap, 
-        mask, 
-        mifPath, 
-        aButtonIcon, 
-        aButtonIconMask,
-        KRgbBlack
-        );
-
-    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
-    CleanupStack::Pop( 2 );
-    CleanupStack::PushL( icon );
-    iButton = CAknButton::NewL(
-        icon , // ownership taken
-        NULL, NULL, NULL, _L(""), _L(""), 0, 0 );
-    iButton->SetButtonFlags( KAknButtonReportOnLongPress|
-                            KAknButtonReportOnKeyDown  |
-                            KAknButtonRequestExitOnButtonUpEvent );
-    iButton->SetIconScaleMode( EAspectRatioPreserved );
-    iButton->SetMargins( TMargins8(0,0,0,0) );    
-    CleanupStack::Pop( icon ); 
-    }
-    
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//    
-TInt CDialerKeyPadButton::ScanCode() const
-    {
-    return iScanCode;
-    }
-    
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//    
-TInt CDialerKeyPadButton::KeyCode() const
-    {
-    return iKeyCode;
-    }    
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CDialerKeyPadButton::MapDialerIconToSkinIcon( const TInt aDialerIcon, 
-                                         TAknsItemID& aItemId ) const
-    {    
-    switch ( aDialerIcon )
-        {
-        case EMbmDialerQgn_indi_dialer_one:
-            aItemId = KAknsIIDQgnIndiDialerOne;
-            break;
-        case EMbmDialerQgn_indi_dialer_two:
-            aItemId = KAknsIIDQgnIndiDialerTwo;
-            break;
-        case EMbmDialerQgn_indi_dialer_three:
-            aItemId = KAknsIIDQgnIndiDialerThree;
-            break;
-        case EMbmDialerQgn_indi_dialer_four:
-            aItemId = KAknsIIDQgnIndiDialerFour;
-            break;
-        case EMbmDialerQgn_indi_dialer_five:
-            aItemId = KAknsIIDQgnIndiDialerFive;
-            break;
-        case EMbmDialerQgn_indi_dialer_six:
-            aItemId = KAknsIIDQgnIndiDialerSix;
-            break;
-        case EMbmDialerQgn_indi_dialer_seven:
-            aItemId = KAknsIIDQgnIndiDialerSeven;
-            break;    
-        case EMbmDialerQgn_indi_dialer_eight:
-            aItemId = KAknsIIDQgnIndiDialerEight;
-            break;
-        case EMbmDialerQgn_indi_dialer_nine:
-            aItemId = KAknsIIDQgnIndiDialerNine;
-            break;
-        case EMbmDialerQgn_indi_dialer_zero:
-            aItemId = KAknsIIDQgnIndiDialerZero;
-            break;
-        case EMbmDialerQgn_indi_dialer_prefix:
-            aItemId = KAknsIIDQgnIndiDialerPrefix;
-            break;
-        case EMbmDialerQgn_indi_dialer_hash:
-            aItemId = KAknsIIDQgnIndiDialerHash;
-            break;                        
-        default:
-            break;
-        }
-    }   
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//   
-void CDialerKeyPadButton::SetIconSize( TSize& aSize )
-    {
-    iButton->SetIconSize( aSize );
-    }  
-    
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//   
-void CDialerKeyPadButton::UpdateIconL()
-    {
-    TFileName mifPath( KDriveZ );
-    mifPath.Append( KDC_APP_BITMAP_DIR );
-    mifPath.Append( KDialerMifFileName );
-    
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    CFbsBitmap* bitmap (NULL);
-    CFbsBitmap* mask (NULL);
-        
-    // Get icon id.
-    TAknsItemID skinItemId( KAknsIIDNone );  
-    MapDialerIconToSkinIcon( iButtonIcon, skinItemId );
-    
-    AknsUtils::CreateColorIconLC( 
-            skin, 
-            skinItemId,
-            KAknsIIDQsnIconColors, 
-            EAknsCIQsnIconColorsCG30,
-            bitmap, 
-            mask, 
-            mifPath, 
-            iButtonIcon, 
-            iButtonIconMask,
-            KRgbBlack
-            );
-    
-    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
-    CleanupStack::Pop( 2 );
-    
-    iButton->State()->SetIcon( icon ); // icon ownership transfered
-    
-    }  
-
-// ---------------------------------------------------------------------------
-// 
-// Enable or disable audio but keep vibra feedback 
-// ---------------------------------------------------------------------------
-//   
-void CDialerKeyPadButton::EnableAudioFeedback( const TBool aEnable )
-    {
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if ( feedback )
-        {
-        feedback->EnableFeedbackForControl( iButton, ETrue, aEnable );
-        }
-    }
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CDialerKeyPadButton::HandleResourceChange( TInt aType )
-    {
-    if ( aType == KAknsMessageSkinChange )
-        {
-        TRAP_IGNORE( UpdateIconL() );
-        iButton->HandleResourceChange( aType );
-        }    
-    }
 
 // ========================= MEMBER FUNCTIONS ================================
 
@@ -366,9 +115,9 @@
     {    
     DIALER_PRINT("KeyPadContainer::ConstructL<");
     BaseConstructL();
+    iKeyLabelManager = CDialerKeyPadLabelManager::NewL( *iCoeEnv, *this );
     CreateButtonsL();
-    CCoeEnv* env = CCoeEnv::Static();
-    env->AddForegroundObserverL( *this );
+    iCoeEnv->AddForegroundObserverL( *this );
     DIALER_PRINT("KeyPadContainer::ConstructL>");
     }
 
@@ -378,23 +127,16 @@
     TDialerOperationMode aOperatingMode )
     : CDialerContainerBase ( 
         const_cast<CCoeControl&>(aContainer) ),
-      iOperatingMode( aOperatingMode ),
-      iButtonCount( KNumberOfButtons )
+      iOperatingMode( aOperatingMode )
     {
     }
     
 // Destructor
 CDialerKeyPadContainer::~CDialerKeyPadContainer()
     {
-    for ( TInt i = 0; i < iButtonCount; i++ )
-        {
-        AknsUtils::DeregisterControlPosition( 
-                   ((CDialerKeyPadButton*)iButtons[i])->Control());   
-        delete iButtons[i];
-        }
-    iButtons.Close();
-    CCoeEnv* env = CCoeEnv::Static();
-    env->RemoveForegroundObserver( *this );
+    iButtons.ResetAndDestroy();
+    iCoeEnv->RemoveForegroundObserver( *this );
+    delete iKeyLabelManager;
     }
 
 // ---------------------------------------------------------------------------
@@ -417,7 +159,7 @@
     __ASSERT_DEBUG( aIndex < KNumberOfButtons, 
     _L("CDialerKeyPadContainer::ComponentControl, index out of range."));
     
-    return ((CDialerKeyPadButton*)iButtons[aIndex])->Control();
+    return iButtons[aIndex];
     }
     
 // ---------------------------------------------------------------------------
@@ -434,7 +176,8 @@
 
     if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) 
         {
-        iPointerEvent = aPointerEvent;    
+        iPointerEvent = aPointerEvent; 
+        iKeyUpSimulatedDueToDragging = EFalse;
         }
     DIALER_PRINT("KeyPadContainer::HandlePointerEventL>");     
     }
@@ -465,9 +208,12 @@
 //
 void CDialerKeyPadContainer::SetLayout()
     {
-    if ( iOperatingMode == EModeDialer )
+    if ( iOperatingMode == EModeDialer ||
+         iOperatingMode == EModeEasyDialing )
         {
-        SetPhoneLayout();
+        // Same renewed layout is used regardless of the status
+        // of Easy Dialing
+        SetEasyDialingLayout();
         }
     else
         {
@@ -497,20 +243,9 @@
     
     TRect parentRect( Rect() );
 
-    // Icon size - all in same size
-    TAknLayoutRect functionGraphics;  
-             
-    functionGraphics.LayoutRect( 
-        parentRect,
-        TAknWindowComponentLayout::Compose(
-            AknLayoutScalable_Apps::cell_dialer2_keypad_pane( iVariety ),
-            AknLayoutScalable_Apps::cell_dialer2_keypad_pane_g1( 
-                                                        iVariety ) ) );
-    TSize iconSize = functionGraphics.Rect().Size();
-    
     // Layout buttons
     TAknLayoutScalableParameterLimits limits = 
-    AknLayoutScalable_Apps::cell_dialer2_keypad_pane_ParamLimits( iVariety );
+        AknLayoutScalable_Apps::cell_dialer2_keypad_pane_ParamLimits( iVariety );
     
     TInt i = 0;
     for ( TInt row = limits.FirstRow(); row <= limits.LastRow(); row++ )
@@ -518,22 +253,63 @@
         for ( TInt col = limits.FirstColumn(); 
               col <= limits.LastColumn(); col++ )
             {
-            // Layout button
-            AknLayoutUtils::LayoutControl(
-                ((CDialerKeyPadButton*)iButtons[i])->Control(), parentRect, 
-                TAknWindowComponentLayout::Compose( 
-                    AknLayoutScalable_Apps::cell_dialer2_keypad_pane( iVariety,
-                                                col, row ), 
-                    AknLayoutScalable_Apps::bg_button_pane_pane_cp04( 
-                                                iVariety ) ) );
-            
-            // Set icon size
-            ((CDialerKeyPadButton*)iButtons[i++])->SetIconSize( iconSize );
+            iButtons[i]->SetVariety( iVariety );
+            iButtons[i]->SetOperationMode( iOperatingMode );
+    
+            AknLayoutUtils::LayoutControl( iButtons[i], parentRect, TAknWindowComponentLayout::Compose( 
+                    AknLayoutScalable_Apps::cell_dialer2_keypad_pane( iVariety, col, row ), 
+                    AknLayoutScalable_Apps::bg_button_pane_pane_cp04( iVariety ) ) );
+            i++;
             }
         }
     }
 
 // ---------------------------------------------------------------------------
+// CDialerKeyPadContainer::SetEasyDialingLayout
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadContainer::SetEasyDialingLayout()
+    {
+    TRect parentRect( Rect() );
+    
+    // Layout buttons
+    TAknLayoutScalableParameterLimits limits = 
+        AknLayoutScalable_Apps::cell_dialer2_keypad_pane_ParamLimits( iVariety );
+    
+    // Rectangle of the first button
+    TAknLayoutRect buttonLayoutRect;
+    buttonLayoutRect.LayoutRect( parentRect, 
+            AknLayoutScalable_Apps::cell_dia3_key_num_pane( iVariety ) );
+    TRect firstButtonRect = buttonLayoutRect.Rect();
+    // Move the first button rect to top-left-corner of the keypad area, 
+    // the default place is wrong in mirrored layout.
+    firstButtonRect.SetRect( parentRect.iTl, firstButtonRect.Size() );
+    
+    TInt colCount = limits.LastColumn() - limits.FirstColumn() + 1;
+
+    for ( TInt row = limits.FirstRow() ; row <= limits.LastRow() ; row++ )
+        {
+        for ( TInt col = limits.FirstColumn() ; col <= limits.LastColumn() ; col++ )
+            {
+            // Calculate corresponding index in iButtons array
+            TInt idx = col + row * colCount;
+            
+            // Set mode and variety so that correct button internal layout will be used
+            iButtons[idx]->SetVariety( iVariety );
+            iButtons[idx]->SetOperationMode( iOperatingMode );
+            
+            // Layout button
+            TRect buttonRect = firstButtonRect;
+            buttonRect.Move( col * buttonRect.Width(), row * buttonRect.Height() );
+            buttonRect.Shrink( 1, 1 ); // to create small gap between buttons
+            iButtons[idx]->SetRect( buttonRect );
+            }
+        }
+    
+    }
+
+// ---------------------------------------------------------------------------
 // CDialerKeyPadContainer::SetVideoLayout
 //
 // ---------------------------------------------------------------------------
@@ -542,21 +318,8 @@
     {
     TRect parentRect( Rect() );
     
-    // Icon size - all in same size
-    TAknLayoutRect functionGraphics;  
-             
-    functionGraphics.LayoutRect( 
-        parentRect,
-        TAknWindowComponentLayout::Compose(
-            AknLayoutScalable_Apps::cell_video_dialer_keypad_pane( iVariety, 
-                                        0, 0 ),
-            AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_g1( 
-                                        iVariety ) ) );
-    TSize iconSize = functionGraphics.Rect().Size();
-    
     TAknLayoutScalableParameterLimits limits = 
-        AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_ParamLimits( 
-                                        iVariety ) ;
+        AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_ParamLimits( iVariety ) ;
     
     TInt i = 0;
     for ( TInt row = limits.FirstRow(); row <= limits.LastRow(); row++ )
@@ -565,17 +328,17 @@
               col <= limits.LastColumn(); 
               col++ )
             {
+            iButtons[i]->SetVariety( iVariety );
+            iButtons[i]->SetOperationMode( iOperatingMode );
+        
             // Layout button
             AknLayoutUtils::LayoutControl(
-                ((CDialerKeyPadButton*)iButtons[i])->Control(), parentRect, 
+                iButtons[i], parentRect, 
                 TAknWindowComponentLayout::Compose( 
                     AknLayoutScalable_Apps::cell_video_dialer_keypad_pane( 
-                        iVariety, col, row ), 
-                    AknLayoutScalable_Apps::bg_button_pane_cp08( 
-                                        iVariety ) ) );
-            
-            // Set icon size
-            iButtons[i++]->SetIconSize( iconSize );
+                        iVariety, col, row ),             
+                    AknLayoutScalable_Apps::bg_button_pane_cp08( iVariety ) ) );
+            i++;
             }
         }
     }
@@ -590,24 +353,36 @@
     {
     DIALER_PRINT("KeyPadContainer::CreateButtonsL<");
     
-    for ( TInt i=0; i < KNumberOfButtons; i++ )
+    TInt flags ( KAknButtonReportOnKeyDown  |
+                 KAknButtonRequestExitOnButtonUpEvent );
+    
+    for ( TInt i = 0; i < KNumberOfButtons; i++ )
         {
-        CDialerKeyPadButton* button = new (ELeave) CDialerKeyPadButton();
-        CleanupStack::PushL( button );
-        button->CreateButtonL( TDialerButtonToKeypadMap[i][0],
-                               TDialerButtonToKeypadMap[i][1],         
-                               KKeyPadButtons[i],
-                               KKeyPadButtonsMasks[i] );
+        const TPtrC numLabel = iKeyLabelManager->ButtonNumLabel( i );
+
+        const TPtrC alphaLabel = iKeyLabelManager->ButtonFirstAlphaLabel( i );
+
+        const TPtrC secondAlphaLabel = iKeyLabelManager->ButtonSecondAlphaLabel( i );
+        
+        CDialerKeyPadButton* button = CDialerKeyPadButton::NewLC( 
+            numLabel,
+            alphaLabel,
+            secondAlphaLabel,
+            KKeyPadButtons[i].iScanCode,
+            KKeyPadButtons[i].iKeyCode,
+            KKeyPadButtons[i].iBitmap,
+            KKeyPadButtons[i].iBitmapMask,
+            flags );
+        iButtons.AppendL( button );
         CleanupStack::Pop( button );
-        iButtons.Append( button );                      
-        button->Control()->SetMopParent( this );
-        button->Control()->SetParent( this );    
-        button->Control()->SetContainerWindowL( *this );
-        button->Control()->SetObserver( this );    
-        button->Control()->ActivateL();
-        AknsUtils::RegisterControlPosition( button->Control() );   
+        
+        button->SetMopParent( this );
+        button->SetParent( this );
+        button->SetContainerWindowL( *this );
+        button->SetObserver( this );
+        button->ActivateL();
         }     
-    DIALER_PRINT("KeyPadContainer::CreateButtonsL>");        
+    DIALER_PRINT("KeyPadContainer::CreateButtonsL>");
     }
 
 // ---------------------------------------------------------------------------
@@ -625,9 +400,10 @@
     DIALER_PRINTF("KeyPadContainer::HandleControlEventL.EventType=",
                  (TInt)aEventType);
     
-   if ( aEventType == EEventStateChanged   || 
-        aEventType == EEventRequestCancel ||
-        aEventType == EEventRequestExit)
+    if ( aEventType == EEventStateChanged   || 
+         aEventType == EEventRequestCancel ||
+         aEventType == EEventRequestExit ||
+         aEventType == CDialerKeyPadButton::EEventDraggingOutsideButton )
         
         {
         // Find tapped control 
@@ -635,20 +411,25 @@
         CDialerKeyPadButton* tappedButton = NULL;
         for ( TInt i=0; i < iButtons.Count(); i++ )
             {
-            if ( iButtons[i]->Control() == aControl )
+            if ( iButtons[i] == aControl )
                 {
                 tappedButton = iButtons[i];
                 break;
                 }    
             }
-            
+        
+        if ( !tappedButton )
+            {
+            __ASSERT_DEBUG( EFalse, DialerPanic( EDialerPanicEventFromUnknownControl ) );
+            return;
+            }
+        
         // Send key event to phone.
         TKeyEvent keyEvent;
         keyEvent.iScanCode = tappedButton->ScanCode();
-        keyEvent.iCode = tappedButton->KeyCode();
-        keyEvent.iModifiers = 0;
-        keyEvent.iRepeats = 0;  
-             
+        keyEvent.iModifiers = ( EModifierNumLock | EModifierKeypad ); // Mark that this event is dialer simulated
+        keyEvent.iRepeats = 0;
+        
         switch ( aEventType )
             {
             case EEventRequestExit:
@@ -656,18 +437,23 @@
                 {
                 DIALER_PRINT("HandleControlEventL.EEventRequestExit");
                 iButtonPressedDown = EFalse;
-                keyEvent.iCode = 0;
-                ControlEnv()->SimulateKeyEventL( keyEvent, EEventKeyUp );
+                if ( !iKeyUpSimulatedDueToDragging )
+                    {
+                    keyEvent.iCode = 0;
+                    ControlEnv()->SimulateKeyEventL( keyEvent, EEventKeyUp );
+                    }
+                iKeyUpSimulatedDueToDragging = EFalse;
                 }
                 break;
+                
             case EEventStateChanged:
                 {    
                 DIALER_PRINT("HandleControlEventL.EEventStateChanged");
                 iButtonPressedDown = ETrue;
-
+                keyEvent.iCode = tappedButton->KeyCode();
                 iParentControl.PrepareForFocusGainL();
 
-                ControlEnv()->SimulateKeyEventL( keyEvent, EEventKeyDown );    
+                ControlEnv()->SimulateKeyEventL( keyEvent, EEventKeyDown );
 
                 if( iButtonPressedDown )
                     {
@@ -676,13 +462,29 @@
                     }
                 }
                 break;
+            
+            case CDialerKeyPadButton::EEventDraggingOutsideButton:
+                {
+                DIALER_PRINT("HandleControlEventL.EEventDraggingOutsideButton");
+                // User hasn't released touch yet but in order to cancel
+                // long press action handled and initiated by parent control, 
+                // we must send key up event now.
+                if ( !iKeyUpSimulatedDueToDragging )
+                    {
+                    keyEvent.iCode = 0;
+                    ControlEnv()->SimulateKeyEventL( keyEvent, EEventKeyUp );
+                    iKeyUpSimulatedDueToDragging = ETrue;
+                    }
+                }
+                break;
+                
             default:
             break;
             }
         }
-    DIALER_PRINT("KeyPadContainer::HandleControlEventL>");        
+    DIALER_PRINT("KeyPadContainer::HandleControlEventL>");
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialerKeyPadContainer::HandleResourceChange
 //
@@ -696,8 +498,7 @@
         {    
         for ( TInt i=0; i < iButtons.Count(); i++ )
             {
-            (( CDialerKeyPadButton* )iButtons[i])->HandleResourceChange( 
-                                                                    aType );
+            iButtons[i]->HandleResourceChange( aType );
             }
         }
     }
@@ -705,7 +506,7 @@
 // ---------------------------------------------------------------------------
 // CDialerKeyPadContainer::MakeVisible
 //
-// Called when dialer control come visible or unvisible
+// Called when dialer control becomes visible or invisible
 //
 // ---------------------------------------------------------------------------
 //
@@ -714,15 +515,30 @@
     // This is needed when dialer control disappeares during keypress. 
     // Last pressed pointer event must be forwarted to framework 
     // as pointer up event. Thus button is set to unpressed state etc. 
+    // This code calls HandlePointerEventL of the parent class instead of this.
+    // If we call this classes HandlePointerEventL, this classes 
+    // grab status is not cleared, and later coming EButton1Up events may end
+    // up erroneously to this class, although intended elsewhere.
     // 
-    if ( !aVisible && iButtonPressedDown )
+    if ( !aVisible && iButtonPressedDown && Parent() )
         {    
         iPointerEvent.iType = TPointerEvent::EButton1Up;
-        TRAP_IGNORE( HandlePointerEventL( iPointerEvent ) );
+        TRAP_IGNORE( Parent()->HandlePointerEventL( iPointerEvent ) );
         }    
     CCoeControl::MakeVisible( aVisible );        
     }
 
+// ---------------------------------------------------------------------------
+// CDialerKeyPadContainer::SetOperationMode
+//
+// Set new operation mode for the keypad
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadContainer::SetOperationMode( TDialerOperationMode aOperatingMode )
+    {
+    iOperatingMode = aOperatingMode;
+    }
 
 // ---------------------------------------------------------------------------
 // CDialerKeyPadContainer::HandleGainingForeground
@@ -746,15 +562,43 @@
     // This is needed when dialer control disappeares during keypress. 
     // Last pressed pointer event must be forwarted to framework 
     // as pointer up event. Thus button is set to unpressed state etc. 
+    // This code calls HandlePointerEventL of the parent class instead of this.
+    // If we call this classes HandlePointerEventL, this classes 
+    // grab status is not cleared, and later coming EButton1Up events may end
+    // up erroneously to this class, although intended elsewhere.
     // 
-    if ( iButtonPressedDown )
+    if ( iButtonPressedDown && Parent() )
         {    
         iPointerEvent.iType = TPointerEvent::EButton1Up;
-        TRAP_IGNORE( HandlePointerEventL( iPointerEvent ) );
+        TRAP_IGNORE( Parent()->HandlePointerEventL( iPointerEvent ) );
         }    
     }
 
 // ---------------------------------------------------------------------------
+// CDialerKeyPadContainer::KeyLabelsChanged
+//
+// Reset button labels and update the layout
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadContainer::KeyLabelsChanged()
+    {
+    for ( TInt i = 0 ; i < iButtons.Count() ; i++ )
+        {
+        const TPtrC numLabel = iKeyLabelManager->ButtonNumLabel( i );
+        const TPtrC alphaLabel = iKeyLabelManager->ButtonFirstAlphaLabel( i );
+        const TPtrC secondAlphaLabel = iKeyLabelManager->ButtonSecondAlphaLabel( i );
+        
+        iButtons[i]->SetNumLabel( numLabel );
+        iButtons[i]->SetPrimaryAlphaLabel( alphaLabel );
+        iButtons[i]->SetSecondaryAlphaLabel( secondAlphaLabel );
+        
+        // reset layout
+        iButtons[i]->SetSize( iButtons[i]->Size() );
+        }
+    DrawDeferred();
+    }
+
+// ---------------------------------------------------------------------------
 // CDialerKeyPadContainer::EnableTactileFeedback
 //
 //
@@ -764,7 +608,7 @@
     {
     for ( TInt i=0; i < iButtons.Count(); i++ )
         {
-        (( CDialerKeyPadButton* )iButtons[i])->EnableAudioFeedback( aEnable );
+        iButtons[i]->EnableAudioFeedback( aEnable );
         }
 
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/src/cdialerkeypadlabelmanager.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,659 @@
+/*
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* 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:  Helper class to handle virtual keypad text labels
+*
+*/
+
+#include <AknUtils.h>
+#include <bautils.h>
+#include <barsread.h>
+#include <avkon.rsg>
+#include <dialer.rsg>
+#include <dialerkeypad.rsg>
+#include <e32const.h>
+#include <e32lang.h>
+#include <PtiEngine.h>
+#include <AknFepInternalCRKeys.h>
+#include <AvkonInternalCRKeys.h>
+#include <bacntf.h> 
+
+#include "cdialerkeypadlabelmanager.h"
+#include "dialercommon.h"
+
+// CONSTANTS
+const TInt KKeyCount( 12 );
+
+_LIT( KDialerButton1NumLabel, "1" );
+_LIT( KDialerButton2NumLabel, "2" );
+_LIT( KDialerButton3NumLabel, "3" );
+_LIT( KDialerButton4NumLabel, "4" );
+_LIT( KDialerButton5NumLabel, "5" );
+_LIT( KDialerButton6NumLabel, "6" );
+_LIT( KDialerButton7NumLabel, "7" );
+_LIT( KDialerButton8NumLabel, "8" );
+_LIT( KDialerButton9NumLabel, "9" );
+_LIT( KDialerButton10NumLabel, "*+" );
+_LIT( KDialerButton11NumLabel, "0" );
+_LIT( KDialerButton12NumLabel, "#" );
+
+_LIT( KDialerKeypadResourceFile, "z:\\resource\\dialerkeypad" );
+_LIT( KDialerKeypadResourceFileExt, ".rsc" );
+_LIT( KDialerKeypadVariantExtSeparator, "_" );
+
+_LIT( KScriptLatin, "latin" );
+_LIT( KScriptCyrillic, "cyrillic" );
+_LIT( KScriptGreek, "greek" );
+_LIT( KScriptHebrew, "hebrew" );
+_LIT( KScriptArabic, "arabic" );
+_LIT( KScriptFarsi, "farsi" );
+_LIT( KScriptUrdu, "urdu" );
+_LIT( KScriptThai, "thai" );
+_LIT( KScriptDevanagari, "devanagari" );
+_LIT( KScriptChnPinyin, "chn_pinyin" );
+_LIT( KScriptChnZhuyin, "chn_zhuyin" );
+_LIT( KScriptChnStroke, "chn_stroke" );
+_LIT( KScriptChnCangjie, "chn_cangjie" );
+
+enum TScript
+    {
+    EScriptLatin = 0,
+    EScriptCyrillic,
+    EScriptGreek,
+    EScriptHebrew,
+    EScriptArabic,
+    EScriptFarsi,
+    EScriptUrdu,
+    EScriptThai,
+    EScriptDevanagari,
+    EScriptChinese, // generic value for all Chinese input modes
+    EScriptChnPinyin,
+    EScriptChnZhuyin,
+    EScriptChnStroke,
+    EScriptChnCangjie
+    };
+
+struct TLanguageScriptMapping
+    {
+    TLanguage iLang;
+    TScript iScript;
+    };
+
+// Following table maps non-Latin languages to corresponding scripts.
+// Rest of the languages are asumed to use Latin script.
+// The data of the table has been extracted from the header 
+// \sf\mw\inputmethods\textinput\peninputgenericitut\inc\peninputgenericitutdata.h
+const TLanguageScriptMapping KScriptMap[] =
+    {
+        {ELangRussian, EScriptCyrillic},
+        {ELangBulgarian, EScriptCyrillic},
+        {ELangUkrainian, EScriptCyrillic},
+        
+        {ELangGreek, EScriptGreek},
+        {ELangCyprusGreek, EScriptGreek},
+        
+        {ELangHebrew, EScriptHebrew},
+        
+        {ELangArabic, EScriptArabic},
+        
+        {ELangFarsi, EScriptFarsi},
+        
+        {ELangUrdu, EScriptUrdu},
+        
+        {ELangThai, EScriptThai},
+        
+        {ELangHindi, EScriptDevanagari},
+        {ELangMarathi, EScriptDevanagari},
+        
+        {ELangTaiwanChinese, EScriptChinese},
+        {ELangHongKongChinese, EScriptChinese},
+        {ELangPrcChinese, EScriptChinese}
+    };
+const TInt KScriptMapCount = sizeof( KScriptMap ) / sizeof( TLanguageScriptMapping );
+
+// Values for Chinese adaptive search modes, as documented in AvkonInternalCRKeys.h
+enum TChinesePrcMode
+    {
+    EChnPrcPinyin = 0,
+    EChnPrcStroke = 1
+    };
+enum TChineseTwMode
+    {
+    EChnTwZhuyin = 0,
+    EChnTwStroke = 1
+    };
+enum TChineseHkMode
+    {
+    EChnHkStroke = 0,
+    EChnHkCangjie = 1
+    };
+
+
+// LOCAL FUNCTION DECLARATIONS
+static TScript ScriptForLang( TLanguage aLang );
+static const TDesC& ScriptName( TScript aScriptCode );
+static TBool ScriptCanSubstituteLatin( TScript aScript );
+
+
+// MEMBER FUNCTION DEFINITIONS
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::CDialerKeyPadLabelManager
+//
+// ---------------------------------------------------------------------------
+//
+CDialerKeyPadLabelManager::CDialerKeyPadLabelManager( CCoeEnv& aCoeEnv, 
+        MDialerKeyPadLabelManagerCallback& aObserver )
+    : iCoeEnv( aCoeEnv ), iObserver( aObserver )
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::~CDialerKeyPadLabelManager
+//
+// ---------------------------------------------------------------------------
+//
+CDialerKeyPadLabelManager::~CDialerKeyPadLabelManager()
+    {
+    delete iPtiEngine;
+    
+    delete iAknFepRepository;
+    delete iAvkonRepository;
+    
+    if ( iEnvChangeNotifier )
+        {
+        iEnvChangeNotifier->Cancel();
+        delete iEnvChangeNotifier;
+        }
+    
+    delete iKeypadNumLabelArray;
+    delete iKeypadFirstLabelArray;
+    delete iKeypadSecondLabelArray;
+    
+    if ( iResourceOffset )
+        {
+        iCoeEnv.DeleteResourceFile( iResourceOffset );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::NewLC
+//
+// ---------------------------------------------------------------------------
+//
+CDialerKeyPadLabelManager* CDialerKeyPadLabelManager::NewLC( CCoeEnv& aCoeEnv, 
+        MDialerKeyPadLabelManagerCallback& aObserver )
+    {
+    CDialerKeyPadLabelManager* self =
+            new (ELeave) CDialerKeyPadLabelManager( aCoeEnv, aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CDialerKeyPadLabelManager* CDialerKeyPadLabelManager::NewL( CCoeEnv& aCoeEnv, 
+        MDialerKeyPadLabelManagerCallback& aObserver )
+    {
+    CDialerKeyPadLabelManager* self = 
+            CDialerKeyPadLabelManager::NewLC( aCoeEnv, aObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadLabelManager::ConstructL()
+    {
+    iPtiEngine = CPtiEngine::NewL();
+    
+    iAknFepRepository = CDialerCenRepWrapper::NewL( *this, KCRUidAknFep );
+    iAvkonRepository = CDialerCenRepWrapper::NewL( *this, KCRUidAvkon );
+    
+    TCallBack envChangeCallback( EnvChangeCallback, this );
+    iEnvChangeNotifier = CEnvironmentChangeNotifier::NewL( 
+            CActive::EPriorityStandard, envChangeCallback );
+    iEnvChangeNotifier->Start();
+    
+    iKeypadNumLabelArray = new ( ELeave ) CDesCArrayFlat( KKeyCount );
+    iKeypadFirstLabelArray = new ( ELeave ) CDesCArrayFlat( KKeyCount );
+    iKeypadSecondLabelArray = new ( ELeave ) CDesCArrayFlat( KKeyCount );
+    
+    UpdateNumLabelsL();
+    UpdateTextLabelsL();
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::ButtonNumLabel
+//
+// ---------------------------------------------------------------------------
+//
+TPtrC CDialerKeyPadLabelManager::ButtonNumLabel( TInt aIndex ) const
+    {
+    __ASSERT_DEBUG( aIndex < iKeypadNumLabelArray->Count(), DialerPanic(EDialerPanicLabelNotFound) );
+
+    TPtrC label( KNullDesC );
+    if ( aIndex < iKeypadNumLabelArray->Count() )
+        {
+        label.Set( (*iKeypadNumLabelArray)[ aIndex ] );
+        }
+    return label;
+    }   
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::ButtonFirstAlphaLabel
+//
+// ---------------------------------------------------------------------------
+//
+TPtrC CDialerKeyPadLabelManager::ButtonFirstAlphaLabel( TInt aIndex ) const
+    {
+    __ASSERT_DEBUG( aIndex < iKeypadFirstLabelArray->Count(), DialerPanic(EDialerPanicLabelNotFound) );
+
+    TPtrC label( KNullDesC );
+    if ( aIndex < iKeypadFirstLabelArray->Count() )
+        {
+        label.Set( (*iKeypadFirstLabelArray)[ aIndex ] );
+        }
+    return label;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::ButtonSecondAlphaLabel
+//
+// ---------------------------------------------------------------------------
+//
+TPtrC CDialerKeyPadLabelManager::ButtonSecondAlphaLabel( TInt aIndex ) const
+    {
+    __ASSERT_DEBUG( aIndex < iKeypadSecondLabelArray->Count(), DialerPanic(EDialerPanicLabelNotFound) );
+
+    TPtrC label( KNullDesC );
+    if ( aIndex < iKeypadSecondLabelArray->Count() )
+        {
+        label.Set( (*iKeypadSecondLabelArray)[ aIndex ] );
+        }
+    return label;
+    }   
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::UpdateTextLabelsL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadLabelManager::HandleRepositoryChange( 
+        TUid aRepository, TUint32 aId )
+    {
+    if ( (aRepository == KCRUidAknFep && aId == KAknFepInputTxtLang) ||
+         (aRepository == KCRUidAvkon && aId == KAknAdaptiveSearchChinesePRC) ||
+         (aRepository == KCRUidAvkon && aId == KAknAdaptiveSearchChineseTW) ||
+         (aRepository == KCRUidAvkon && aId == KAknAdaptiveSearchChineseHongkong) )
+        {
+        // Check if alpabet labels need to be changed
+        TInt scriptToUse( EScriptLatin );
+        TRAP_IGNORE( scriptToUse = LabelScriptToUseL() );
+        if ( iLabelScriptInUse != scriptToUse )
+            {
+            TRAP_IGNORE( UpdateTextLabelsL() );
+            iObserver.KeyLabelsChanged();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::HandleEnvChange
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadLabelManager::HandleEnvChange()
+    {
+    if ( iEnvChangeNotifier->Change() & EChangesLocale )
+        {
+        TLocale locale;
+        if ( locale.DigitType() != iDigitTypeInUse )
+            {
+            TRAP_IGNORE( UpdateNumLabelsL() );
+            iObserver.KeyLabelsChanged();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::EnvChangeCallback
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDialerKeyPadLabelManager::EnvChangeCallback( TAny* aSelfPtr )
+    {
+    CDialerKeyPadLabelManager* self =
+            static_cast< CDialerKeyPadLabelManager* >( aSelfPtr );
+    self->HandleEnvChange();
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::UpdateTextLabelsL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadLabelManager::UpdateTextLabelsL()
+    {
+    iKeypadFirstLabelArray->Reset();
+    iKeypadSecondLabelArray->Reset();
+    
+    // Load the correct keypad resource file
+    TFileName resourceName;
+    GetResourceFileNameL( resourceName );
+    iResourceOffset = iCoeEnv.AddResourceFileL( resourceName );
+
+    // Read keypad labels from the resource
+    TResourceReader reader;
+    iCoeEnv.CreateResourceReaderLC( reader, R_DIALER_KEYPAD );
+    
+    TInt16 count = reader.ReadInt16();
+
+    for ( TInt i = 0 ; i < count ; ++i )
+        {
+        TPtrC firstRow = reader.ReadTPtrC();
+        iKeypadFirstLabelArray->AppendL( firstRow );
+        TPtrC secondRow = reader.ReadTPtrC();
+        iKeypadSecondLabelArray->AppendL( secondRow );
+        }
+
+    CleanupStack::PopAndDestroy(); // reader
+    
+    // Free resource as it's not usually needed anymore. Ensure that destructor 
+    // won't free it again.
+    iCoeEnv.DeleteResourceFile( iResourceOffset );
+    iResourceOffset = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::UpdateNumLabelsL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadLabelManager::UpdateNumLabelsL()
+    {
+    // Save digit type used. This is to allow us update number labels
+    // only when digit type is changed and not on all locale changes.
+    TLocale locale;
+    iDigitTypeInUse = locale.DigitType();
+    
+    iKeypadNumLabelArray->Reset();
+    
+    // Fill number labels array
+    iKeypadNumLabelArray->AppendL( KDialerButton1NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton2NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton3NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton4NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton5NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton6NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton7NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton8NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton9NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton10NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton11NumLabel );
+    iKeypadNumLabelArray->AppendL( KDialerButton12NumLabel );
+    
+    // Convert num labels to current global number mode
+    for ( TInt i = 0 ; i < iKeypadNumLabelArray->Count() ; ++i )
+        {
+        // A bit of magic is needed to get a modifiable pointer
+        // descriptor which points to string within the array.
+        TPtrC roPtr = (*iKeypadNumLabelArray)[i];
+        TPtr ptr( const_cast<TUint16*>( roPtr.Ptr() ), roPtr.Length(), roPtr.Length() );
+        
+        AknTextUtils::LanguageSpecificNumberConversion( ptr );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::GetResourceFileNameL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerKeyPadLabelManager::GetResourceFileNameL( TDes& aFileName )
+    {
+    TFileName resName;
+
+    iLabelScriptInUse = LabelScriptToUseL();
+    // Try to get variated resource name if necessary
+    if ( iLabelScriptInUse != EScriptLatin )
+        {
+        const TDesC& scriptName = ScriptName( static_cast<TScript>(iLabelScriptInUse) );
+        resName.Copy( KDialerKeypadResourceFile );
+        resName.Append( KDialerKeypadVariantExtSeparator );
+        resName.Append( scriptName );
+        resName.Append( KDialerKeypadResourceFileExt );
+        
+        BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), resName );
+        if ( !BaflUtils::FileExists( iCoeEnv.FsSession(), resName ) )
+            {
+            // resource not found, fall back to Latin
+            iLabelScriptInUse = EScriptLatin;
+            }
+        }
+    
+    // Get the default resource name if Latin script was selected or
+    // resource file for the selected script was not found.
+    if ( iLabelScriptInUse == EScriptLatin )
+        {
+        resName.Copy( KDialerKeypadResourceFile );
+        resName.Append( KDialerKeypadResourceFileExt );
+        BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), resName );
+        }
+    
+    aFileName.Copy( resName );
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::LabelScriptToUseL
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDialerKeyPadLabelManager::LabelScriptToUseL() const
+    {
+    TInt lang( ELangEnglish );
+    
+    // Get current input language
+    TInt err = iAknFepRepository->Get( KAknFepInputTxtLang, lang );
+    __ASSERT_DEBUG( !err, DialerPanic(err) );
+            
+    TInt script = ScriptForLang( static_cast<TLanguage>(lang) );
+    
+    // Distinct logic is used to select labels when current input language
+    // is any version of Chinese. PCS uses different algorith for Chinese.
+    if ( script == EScriptChinese )
+        {
+        script = ChineseScriptToUseL();
+        }
+    // If current input language is written in Latin script, then we check
+    // if some other script of the device could also be shown on the labels.
+    // Most variated labels include Latin characters as well.
+    else if ( script == EScriptLatin )
+        {
+        RArray<TInt> availableLanguages;
+        CleanupClosePushL( availableLanguages );
+        iPtiEngine->GetAvailableLanguagesL( availableLanguages );
+        
+        // Scirpt of the current UI language is preferred option for 
+        // alternative script. Ensure it's considered first.
+        TLanguage uiLang = User::Language();
+        TInt pos = availableLanguages.Find( uiLang );
+        if ( pos != KErrNotFound )
+            {
+            availableLanguages.Remove( pos );
+            availableLanguages.InsertL( uiLang, 0 );
+            }
+        
+        TInt langCount = availableLanguages.Count();
+        for ( TInt i = 0 ; i < langCount ; ++i )
+            {
+            TLanguage altLang = static_cast<TLanguage>( availableLanguages[i] );
+            TScript altScript = ScriptForLang( altLang );
+            if ( altScript != EScriptLatin && ScriptCanSubstituteLatin(altScript) )
+                {
+                // Suitable alternative script found. Use its labels
+                // instead of showing only Latin alphabets.
+                script = altScript;
+                i = langCount; // to break out
+                }
+            }
+        
+        CleanupStack::PopAndDestroy( &availableLanguages );
+        }
+    
+    return script;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerKeyPadLabelManager::ChineseScriptToUseL
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDialerKeyPadLabelManager::ChineseScriptToUseL() const
+    {
+    TInt script( EScriptLatin );
+    
+    TInt lang( ELangPrcChinese );
+    TInt chnSearchMode( 0 );
+    
+    TInt err = iAknFepRepository->Get( KAknFepInputTxtLang, lang );
+    __ASSERT_DEBUG( !err, DialerPanic(EDialerPanicChineseScriptError) );
+    
+    switch ( lang )
+        {
+        case ELangPrcChinese:
+            {
+            err = iAvkonRepository->Get( KAknAdaptiveSearchChinesePRC, chnSearchMode );
+            script = ( chnSearchMode == EChnPrcPinyin ? EScriptChnPinyin : EScriptChnStroke );
+            }
+            break;
+        case ELangTaiwanChinese:
+            {
+            err = iAvkonRepository->Get( KAknAdaptiveSearchChineseTW, chnSearchMode );
+            script = ( chnSearchMode == EChnTwZhuyin ? EScriptChnZhuyin : EScriptChnStroke );
+            }
+            break;
+        case ELangHongKongChinese:
+            {
+            err = iAvkonRepository->Get( KAknAdaptiveSearchChineseHongkong, chnSearchMode );
+            script = ( chnSearchMode == EChnHkStroke ? EScriptChnStroke : EScriptChnCangjie );
+            }
+            break;
+        default:
+            {
+            err = KErrUnknown;
+            }
+            break;
+        }
+    __ASSERT_DEBUG( !err, DialerPanic(EDialerPanicChineseScriptError) );
+    
+    return script;
+    }
+
+
+// LOCAL FUNCTION DEFINITIONS
+
+// ---------------------------------------------------------------------------
+// ScriptForLang
+//
+// ---------------------------------------------------------------------------
+//
+static TScript ScriptForLang( TLanguage aLang )
+    {
+    TScript script( EScriptLatin );
+    for ( TInt i = 0 ; i < KScriptMapCount ; ++i )
+        {
+        if ( aLang == KScriptMap[i].iLang )
+            {
+            script = KScriptMap[i].iScript;
+            i = KScriptMapCount; // to break out
+            }
+        }
+    return script;
+    }
+
+// ---------------------------------------------------------------------------
+// ScriptName
+//
+// ---------------------------------------------------------------------------
+//
+static const TDesC& ScriptName( TScript aScriptCode )
+    {
+    // Convert script ID to script name
+    switch ( aScriptCode )
+        {
+        case EScriptLatin:
+            return KScriptLatin;
+        case EScriptCyrillic:
+            return KScriptCyrillic;
+        case EScriptGreek:
+            return KScriptGreek;
+        case EScriptHebrew:
+            return KScriptHebrew;
+        case EScriptArabic:
+            return KScriptArabic;
+        case EScriptFarsi:
+            return KScriptFarsi;
+        case EScriptUrdu:
+            return KScriptUrdu;
+        case EScriptThai:
+            return KScriptThai;
+        case EScriptDevanagari:
+            return KScriptDevanagari;
+        case EScriptChnPinyin:
+            return KScriptChnPinyin;
+        case EScriptChnZhuyin:
+            return KScriptChnZhuyin;
+        case EScriptChnStroke:
+            return KScriptChnStroke;
+        case EScriptChnCangjie:
+            return KScriptChnCangjie;
+        default:
+            __ASSERT_DEBUG( EFalse, DialerPanic(EDialerPanicUnknownScript) );
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// ScriptCanSubstituteLatin
+// Return ETrue if labels of given script can be used instead of Latin labels
+// when current input language is written with Latin script. This requires
+// that the labels include also Latin characters and that labels don't contain
+// any characters which would only make sense in some specific input mode.
+// ---------------------------------------------------------------------------
+//
+static TBool ScriptCanSubstituteLatin( TScript aScript )
+    {
+    // It would be better to figure this out from the resources but that would
+    // require opening and parsing several resource files.
+    return !( aScript == EScriptArabic || 
+              aScript == EScriptUrdu || 
+              aScript == EScriptFarsi ||
+              aScript == EScriptChinese ||
+              aScript == EScriptChnPinyin ||
+              aScript == EScriptChnZhuyin ||
+              aScript == EScriptChnStroke ||
+              aScript == EScriptChnCangjie );
+    }
+
+// end of file
+
--- a/phoneuis/dialer/src/cdialernumberentry.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/src/cdialernumberentry.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -31,9 +31,9 @@
 #include <AknsDrawUtils.h>
 #include <applayout.cdl.h>
 #include <AknLayoutFont.h>
-#include <AknLayout2Def.h>
+#include <aknlayout2def.h>
 #include <AknPhoneNumberEditor.h>
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <AknsBasicBackgroundControlContext.h>
 #include <AknsFrameBackgroundControlContext.h>
 #include <aknlayoutscalable_apps.cdl.h>
@@ -44,10 +44,13 @@
 #include "dialertrace.h"
 #include "dialer.hrh"
 #include "mnumberentry.h"
-
+#include    <dialingextensioninterface.h>
+#include    <phoneappcommands.hrh>
 
 const TInt KNumberEntryControlCount = 2; //  = number entry, label
 
+_LIT( KPhoneValidChars, "0123456789*#+pwPW" );
+
 // ========================= MEMBER FUNCTIONS ================================
 
 // ---------------------------------------------------------------------------
@@ -76,7 +79,7 @@
 //
 void CDialerNumberEntry::ConstructL()
     {   
-   	DIALER_PRINT("numberentry::ConstructL<");  
+    DIALER_PRINT("numberentry::ConstructL<");  
     BaseConstructL();
  
     // Create number entry editor    
@@ -89,14 +92,14 @@
     ConstructEditorFromResourceL( reader );
     
     iFrameContext = CAknsFrameBackgroundControlContext::NewL(
-            KAknsIIDNone, TRect(0,0,4,4), TRect(1,1,3,3), EFalse );    
+            KAknsIIDNone, TRect(0,0,4,4), TRect(1,1,3,3), EFalse );
             
-    iFrameContext->SetFrame( KAknsIIDQsnFrCall2Rect );      
+    iFrameContext->SetFrame( KAknsIIDQsnFrCall2Rect );
     
     iFrameContext->SetParentContext( 
-        AknsDrawUtils::ControlContextOfParent(this) );           
+        AknsDrawUtils::ControlContextOfParent(this) );
                 
-    CleanupStack::PopAndDestroy();    // reader    
+    CleanupStack::PopAndDestroy();    // reader
     iEditor->SetObserver( this );
     
     iLabel = new( ELeave ) CEikLabel;
@@ -104,8 +107,11 @@
     iLabel->SetParent( this );
     iLabel->SetMopParent( this ); 
     iLabel->SetTextL( KNullDesC );
-    iLabel->MakeVisible( EFalse );    
+    iLabel->MakeVisible( EFalse );
     CheckLabelSkinningColor();
+    
+    iAppUi = iEikonEnv->EikAppUi();
+    __ASSERT_ALWAYS( iAppUi, DialerPanic( EDialerPanicNoApplicationInstance ) );
      
     ActivateL();
     DIALER_PRINT("numberentry::ConstructL>");
@@ -128,7 +134,6 @@
     delete iEditor;
     delete iFrameContext;
     delete iLabel;
-    
     }
 
 
@@ -146,11 +151,11 @@
 // CDialerNumberEntry::SetFocus
 // ---------------------------------------------------------------------------
 //
-void CDialerNumberEntry::SetFocus( TBool aFocus, 
-                                            TDrawNow /*aDrawNow*/ )
+void CDialerNumberEntry::SetFocus( TBool aFocus, TDrawNow aDrawNow )
     {
     DIALER_PRINT("numberentry::SetFocus<");
     
+    CCoeControl::SetFocus( aFocus, aDrawNow );
     iEditor->SetFocus( aFocus );
      
     DIALER_PRINT("numberentry::SetFocus>");    
@@ -209,8 +214,14 @@
 void CDialerNumberEntry::SetTextToNumberEntry( const TDesC& aDesC )
     {
     DIALER_PRINT("numberentry::SetTextToNumberEntry<");
-        	
-    iEditor->SetText( aDesC );   
+    
+    iEditor->SetText( aDesC );
+    
+    if ( iEasyDialer && iOperationMode == EModeEasyDialing )
+        {
+        TRAP_IGNORE( iEasyDialer->SetInputL( aDesC ) );
+        }
+    
     iEditor->DrawNow();
     
     DIALER_PRINT("numberentry::SetTextToNumberEntry>");
@@ -220,9 +231,18 @@
 // CDialerNumberEntry::GetTextFromNumberEntry
 // ---------------------------------------------------------------------------
 //
-void CDialerNumberEntry::GetTextFromNumberEntry( TDes& aDesC )
+void CDialerNumberEntry::GetTextFromNumberEntry( TDes& aDes )
     {
-    iEditor->GetText( aDesC );
+    iEditor->GetText( aDes );
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerNumberEntry::Text
+// ---------------------------------------------------------------------------
+//
+TPtrC CDialerNumberEntry::Text() const
+    {
+    return iEditor->Text();
     }
 
 // ---------------------------------------------------------------------------
@@ -263,7 +283,7 @@
 TBool CDialerNumberEntry::HandleCommandL( TDialerCommandId aCommand)
     {
     DIALER_PRINTF("numberentry::HandleCommandL<:", aCommand); 
-    	
+    
     TBool handled( ETrue );
     switch ( aCommand )
         {
@@ -278,7 +298,7 @@
             }
             break;
         }
-        
+    
     DIALER_PRINT("numberentry::HandleCommandL>");         
     return handled;
     }
@@ -301,16 +321,16 @@
     {
     DIALER_PRINT("numberentry::HandleControlEventL<"); 
     
-    TInt format( KDialerNELayoutLargeFont );
     if ( aControl == iEditor && aEventType == EEventStateChanged )
         {
         HandleEditorFormatting();
-        InformNumberEntryState();        
-        iEditor->DrawDeferred();
+        
+        InformNumberEntryState();
         
+        iEditor->DrawDeferred();
         }
-        
-    DIALER_PRINT("numberentry::HandleControlEventL>");                
+    
+    DIALER_PRINT("numberentry::HandleControlEventL>");
     }
 
 // ---------------------------------------------------------------------------
@@ -320,8 +340,22 @@
 TKeyResponse CDialerNumberEntry::OfferKeyEventL( 
                                             const TKeyEvent& aKeyEvent, 
                                             TEventCode aType )
-    {   
-    return iEditor->OfferKeyEventL( aKeyEvent, aType );
+    {       
+    TKeyResponse handled = EKeyWasNotConsumed;
+        
+    // First, offer keyevent to easy dialer.
+    if (iEasyDialer)
+        {
+        handled = iEasyDialer->OfferKeyEventL(aKeyEvent, aType);
+        }
+        
+    // Then to number entry editor. 
+    if (handled == EKeyWasNotConsumed)
+        {
+        handled = iEditor->OfferKeyEventL(aKeyEvent, aType);
+        }
+        
+    return handled;
     }
     
 // ---------------------------------------------------------------------------
@@ -398,14 +432,15 @@
     AknsUtils::RegisterControlPosition( this );
 
     TDialerVariety variety( EDialerVarietyLandscape );
-    if (  !Layout_Meta_Data::IsLandscapeOrientation() )
+    if ( !Layout_Meta_Data::IsLandscapeOrientation() )
         {
         variety = EDialerVarietyPortrait;
         }      
         
     TRect parentRect( Rect() );
-    TAknTextComponentLayout neLayout = 
-                        AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety ); 
+    TAknTextComponentLayout neLayout = ( iOperationMode == EModeEasyDialing ?
+        AknLayoutScalable_Apps::dia3_numentry_pane_t1( variety ) :
+        AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety ) );
 
     AknLayoutUtils::LayoutControl(
         iEditor, parentRect, 
@@ -418,13 +453,13 @@
         neLayout.H()
         );
 
-    UpdateNumberEntryFormats(); 
-      
     RectFrameInnerOuterRects(
-           Rect(),
+           parentRect,
            iOuterRect,
            iInnerRect );
 
+    UpdateNumberEntryFormats();
+      
     iFrameContext->SetFrameRects( iOuterRect, iInnerRect );
                 
     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
@@ -438,15 +473,13 @@
     // Portrait variety is temporarily used also in landscape.
     // Landscape layout data is now unavailable. 
     TAknTextComponentLayout labelLayout = 
-                        AknLayoutScalable_Apps::dialer2_ne_pane_t2( 
-                                                    EDialerVarietyPortrait );
+        AknLayoutScalable_Apps::dialer2_ne_pane_t2( EDialerVarietyPortrait );
     // Temporary solution 
-    labelLayout.Setl(neLayout.l());
+    labelLayout.Setl( neLayout.l() );
     AknLayoutUtils::LayoutLabel( iLabel, parentRect, labelLayout );
     
     HandleEditorFormatting();
     iEditor->DrawDeferred();
-    
     }
 
 // ---------------------------------------------------------------------------
@@ -461,14 +494,14 @@
     HBufC* truncation = aReader.ReadHBufCL();
     CleanupStack::PushL( truncation );
     TInt formatCount = aReader.ReadInt16();
-    iEditor->ConstructL( maxChars, maxLines, formatCount, *truncation );  
-    CleanupStack::PopAndDestroy( truncation );       
+    iEditor->ConstructL( maxChars, maxLines, formatCount, *truncation );
+    CleanupStack::PopAndDestroy( truncation );
     iFormatCount = formatCount;
 
     for ( TInt ii = 0; ii < iFormatCount; ii++ )
         {
         CAknPhoneNumberEditor::TFormat format( aReader );
-	    CalculateLayout( format, ii );
+        CalculateLayout( format, ii );
         iEditor->AddFormat( format );
         }
 
@@ -487,7 +520,7 @@
     for ( TInt ii = 0; ii < iFormatCount; ii++ )
         {
         CAknPhoneNumberEditor::TFormat format( iEditor->Format( ii ) );
-		CalculateLayout( format, ii );
+        CalculateLayout( format, ii );
         iEditor->Format( ii ) = format;
         }
 
@@ -502,111 +535,62 @@
 void CDialerNumberEntry::CalculateLayout( 
         CAknPhoneNumberEditor::TFormat& aFormat, TInt aNEVariety )
     {
-    TAknLayoutText textsLargeFontLine1Text;
-    TAknLayoutText textsLargeFontLine2Text;
-    TAknLayoutText textsLargeFontLine3Text;
-    
-    TAknLayoutText textsSmallFontLine1Text;
-    TAknLayoutText textsSmallFontLine2Text;
-    TAknLayoutText textsSmallFontLine3Text;    		
-      
-    const CAknLayoutFont* layoutFont;
-	
-	switch ( aNEVariety )
-		{
-		case KDialerNELayoutLargeFont:
-			{
-			TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 2 : 0;
-			
-            TAknLayoutScalableParameterLimits limits = 
-                AknLayoutScalable_Apps::dialer2_ne_pane_t1_ParamLimits( 
-                                                         variety );                
-            //Line 1
-            textsLargeFontLine1Text.LayoutText( Rect(), 
-                 AknLayoutScalable_Apps::dialer2_ne_pane_t1( 
-                                                         variety, 0, 0 ) );  
-            //Line 2     
-            textsLargeFontLine2Text.LayoutText( Rect(), 
-                 AknLayoutScalable_Apps::dialer2_ne_pane_t1( 
-                                                         variety, 
-                                                         0, 
-                                                         1 ) );
-            //Last row
-            textsLargeFontLine3Text.LayoutText( Rect(), 
-                AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety,
-                                                            0, 
-                                                            limits.LastRow() ) );
+    TAknLayoutText textsLine1Text;
+    TAknLayoutText textsLine2Text;
+
+    if ( iOperationMode == EModeEasyDialing )
+        {
+        TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+        textsLine1Text.LayoutText( Rect(), AknLayoutScalable_Apps::dia3_numentry_pane_t1(variety) );        
+        textsLine2Text = textsLine1Text;
+        }
+    else
+        {
+        TInt variety = 0;
+        if ( aNEVariety == KDialerNELayoutLargeFont )
+            {
+            variety = Layout_Meta_Data::IsLandscapeOrientation() ? 2 : 0;
+            }
+        else
+            {
+            variety = Layout_Meta_Data::IsLandscapeOrientation() ? 3 : 1;
+            }
 
-            //Need to add one row because zero is the first line                
-            aFormat.iNumLines =  limits.LastRow()+1;
-                            	
-        	//take font from line 1    
-            aFormat.iFont = textsLargeFontLine1Text.Font();
-            layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( aFormat.iFont);
-            aFormat.iBottomBaselineOffset = 
-                                         layoutFont->BaselineToTextPaneBottom();
-            //outer rect from last line
-            aFormat.iOuterRect = textsLargeFontLine3Text.TextRect();
-            // have to add extra gap
-            aFormat.iOuterRect.iTl.iY -= aFormat.iBottomBaselineOffset; 
-         
-            //calculate baselineSeparation from the difference of the second 
-            //line and the first line bottom right Y coordinates            
-            TInt baselineSeparation = textsLargeFontLine2Text.TextRect().iBr.iY 
-                - textsLargeFontLine1Text.TextRect().iBr.iY;
-            
-            aFormat.iOuterRect.iTl.iY -= ( (aFormat.iNumLines - 1) 
-                                            * baselineSeparation );
-            aFormat.iBaselineSeparation = baselineSeparation;  									
-			}
-			break;
-		case KDialerNELayoutSmallFont:
-			{
-			TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 3 : 1;
-			
-            TAknLayoutScalableParameterLimits limits = 
-                AknLayoutScalable_Apps::dialer2_ne_pane_t1_ParamLimits( 
-                                                                variety );                   
-            //Line 1
-            textsSmallFontLine1Text.LayoutText( Rect(), 
-                 AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety,0,0 ) );  
-            //Line 2     
-            textsSmallFontLine2Text.LayoutText( Rect(), 
-                 AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety,0,1 ) );
-            //Last row
-            textsSmallFontLine3Text.LayoutText( Rect(), 
-                 AknLayoutScalable_Apps::dialer2_ne_pane_t1( 
-                                                         variety,
-                                                         0, 
-                                                         limits.LastRow() ) ); 
-            
-            //Need to add one row because zero is the first line
-            aFormat.iNumLines =  limits.LastRow()+1;
-                                                                   
-        	 //take font from line 1     
-            aFormat.iFont = textsSmallFontLine1Text.Font();
-            layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( 
-                                                           aFormat.iFont);
-            aFormat.iBottomBaselineOffset = 
-                                        layoutFont->BaselineToTextPaneBottom();
-            //outer rect from line 3
-            aFormat.iOuterRect = textsSmallFontLine3Text.TextRect();
-            // have to add extra gap
-            aFormat.iOuterRect.iTl.iY -= aFormat.iBottomBaselineOffset; 
-            
-            //calculate baselineSeparation from the difference of the second 
-            //line and the first line bottom right Y coordinates
-            TInt baselineSeparation = textsSmallFontLine2Text.TextRect().iBr.iY 
-                - textsSmallFontLine1Text.TextRect().iBr.iY;
-            
-            aFormat.iOuterRect.iTl.iY -= ( (aFormat.iNumLines - 1) 
-                                            * baselineSeparation );
-            aFormat.iBaselineSeparation = baselineSeparation; 					
-			} 
-			break;
-	 	default:
-	 		break;
-		} 				
+        //Line 1
+        textsLine1Text.LayoutText( Rect(), 
+            AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety, 0, 0 ) );  
+        //Line 2     
+        textsLine2Text.LayoutText( Rect(), 
+            AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety, 0, 1 ) );
+        }
+    
+    //take font from line 1
+    aFormat.iFont = textsLine1Text.Font();
+    const CAknLayoutFont* layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( aFormat.iFont );
+    aFormat.iBottomBaselineOffset = layoutFont->BaselineToTextPaneBottom();
+
+    // Calculate baselineSeparation from the difference of the second 
+    // line and the first line bottom right Y coordinates.
+    TInt baselineSeparation = 
+        textsLine2Text.TextRect().iBr.iY - textsLine1Text.TextRect().iBr.iY;
+    aFormat.iBaselineSeparation = baselineSeparation;
+
+    // Outer rect of the text editor is the inner rect of the whole text box
+    aFormat.iOuterRect = iInnerRect;
+    
+    aFormat.iNumLines = 1;
+    
+    // If multiline layout is to be used, the exact number of lines is calculated 
+    // based on available area and the row height (i.e. baselineSeparation)
+    if ( baselineSeparation > 0 && baselineSeparation < iInnerRect.Height() )
+        {
+        aFormat.iNumLines = ( iInnerRect.Height() / baselineSeparation );
+
+        // Center editor vertically to the available area.
+        TInt editorHeight = aFormat.iNumLines * baselineSeparation;
+        TInt deltaHeight = ( iInnerRect.Height() - editorHeight ) / 2;
+        aFormat.iOuterRect.Shrink( 0, deltaHeight );
+        }
 	}
 
 // ---------------------------------------------------------------------------
@@ -622,6 +606,39 @@
         CheckLabelSkinningColor(); 
         }
     }
+
+// ---------------------------------------------------------------------------
+// CDialerNumberEntry::HandlePointerEventL  
+// ---------------------------------------------------------------------------
+//
+void CDialerNumberEntry::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {
+    // Normal pointer event handling and delegation to editor component 
+    // happens only if we are already in focus. Otherwise we just take the
+    // focus. This is to prevent accidental cursor movements as putting the
+    // cursor back to the end of the text is difficult for right-aligned
+    // text.
+    if ( iEditor->IsFocused() )
+        {
+        // If user hits the margin area between this control and the actual editor
+        // control, then the event position is moved to be inside the editor region.
+        // This makes it easier to move cursor with finger touch, especially in
+        // both ends of the number field.
+        TPoint eventPos( aPointerEvent.iPosition );
+        TRect editorRect( iEditor->Rect() );
+        editorRect.Shrink( 1, 1 ); // take rect which is fully inside the editor rect
+        eventPos.iX = Min( eventPos.iX, editorRect.iBr.iX );
+        eventPos.iX = Max( eventPos.iX, editorRect.iTl.iX );
+        eventPos.iY = Min( eventPos.iY, editorRect.iBr.iY );
+        eventPos.iY = Max( eventPos.iY, editorRect.iTl.iY );
+    
+        TPointerEvent modEvent( aPointerEvent );
+        modEvent.iPosition = eventPos;
+        
+        CCoeControl::HandlePointerEventL( modEvent );
+        }
+    }
+
 // ---------------------------------------------------------------------------
 // CDialerNumberEntry::HandleEditorFormatting  
 // ---------------------------------------------------------------------------
@@ -638,8 +655,8 @@
     if ( iEditor->CurrentFormatIndex() != format )
         {
         iEditor->DrawDeferred();
-        iEditor->SetFormat( format );              
-        iFrameContext->SetRect( Rect() );                
+        iEditor->SetFormat( format );
+        iFrameContext->SetRect( Rect() );
         }
     
     }
@@ -651,7 +668,7 @@
 void CDialerNumberEntry::StartVirtualKeyBoard( )
     {
     // To change focus to VKB, if not called VKB will not come visible
-    CEikonEnv::Static()->SyncNotifyFocusObserversOfChangeInFocus();
+    iEikonEnv->SyncNotifyFocusObserversOfChangeInFocus();
     iEditor->OpenVKB();
     }
   
@@ -679,41 +696,57 @@
                                               TRect& aOuterRect,
                                               TRect& aInnerRect )
     {
-    if ( Layout_Meta_Data::IsMirrored() )
+    if ( iOperationMode == EModeEasyDialing )
         {
-        TAknLayoutRect frameTopRight;        
-        frameTopRight.LayoutRect( 
-         aFrameRect, 
-         AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g3().LayoutLine() );                
-                
-        TAknLayoutRect frameBottomLeft;        
-        frameBottomLeft.LayoutRect( 
-         aFrameRect, 
-         AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g4().LayoutLine() );                        
-
-        aOuterRect = TRect( frameTopRight.Rect().iTl, 
-                            frameBottomLeft.Rect().iBr );
-                
-        aInnerRect = TRect( frameTopRight.Rect().iBr, 
-                            frameBottomLeft.Rect().iTl );    
+        aOuterRect = Rect();
+        TAknLayoutRect innerRectLayout;
+        innerRectLayout.LayoutRect( aOuterRect, AknLayoutScalable_Apps::bg_dia3_numentry_pane_g1() );
+        aInnerRect = innerRectLayout.Rect();
+        
+        // Add a bit of margin to left and right ends of the entry field if layout
+        // doens't define enough. This is to enhance the touch usability.
+        static const TInt KMinMargin( 10 );
+        aInnerRect.iTl.iX = Max( aInnerRect.iTl.iX, aOuterRect.iTl.iX + KMinMargin );
+        aInnerRect.iBr.iX = Min( aInnerRect.iBr.iX, aOuterRect.iBr.iX - KMinMargin );
         }
     else
         {
-        TAknLayoutRect frameTopLeft;        
-        frameTopLeft.LayoutRect( 
-         aFrameRect, 
-         AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g2().LayoutLine() );
-
-        TAknLayoutRect frameBottomRight;        
-        frameBottomRight.LayoutRect( 
-         aFrameRect, 
-         AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g5().LayoutLine() );
-        
-        aOuterRect = TRect( frameTopLeft.Rect().iTl, 
-                            frameBottomRight.Rect().iBr );
-        aInnerRect = TRect( frameTopLeft.Rect().iBr, 
-                            frameBottomRight.Rect().iTl );    
-        }                    
+        if ( Layout_Meta_Data::IsMirrored() )
+            {
+            TAknLayoutRect frameTopRight;
+            frameTopRight.LayoutRect( 
+             aFrameRect, 
+             AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g3().LayoutLine() );
+                    
+            TAknLayoutRect frameBottomLeft;
+            frameBottomLeft.LayoutRect( 
+             aFrameRect, 
+             AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g4().LayoutLine() );
+    
+            aOuterRect = TRect( frameTopRight.Rect().iTl, 
+                                frameBottomLeft.Rect().iBr );
+                    
+            aInnerRect = TRect( frameTopRight.Rect().iBr, 
+                                frameBottomLeft.Rect().iTl );
+            }
+        else
+            {
+            TAknLayoutRect frameTopLeft;
+            frameTopLeft.LayoutRect( 
+                aFrameRect, 
+                AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g2().LayoutLine() );
+    
+            TAknLayoutRect frameBottomRight;
+            frameBottomRight.LayoutRect( 
+                aFrameRect, 
+                AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g5().LayoutLine() );
+            
+            aOuterRect = TRect( frameTopLeft.Rect().iTl, 
+                                frameBottomRight.Rect().iBr );
+            aInnerRect = TRect( frameTopLeft.Rect().iBr, 
+                                frameBottomRight.Rect().iTl );
+            }
+        }
     }    
     
 // -----------------------------------------------------------------------------
@@ -741,11 +774,28 @@
         iNumberContents = EFalse;
         } 
 
-    if( iObserver )
+    if ( iPreviousNumberEntryContent.Compare( iEditor->Text() ) != 0 )
         {
-        iObserver->NumberEntryStateChanged( iNumberContents );
+        iPreviousNumberEntryContent.Zero();
+        iEditor->GetText( iPreviousNumberEntryContent );
+
+        // The following stores the information of validity of the number for normal calls.
+        // This information is needed so that we don't show call items for invalid numbers.
+        TBool validPhoneNumber = Validate( iEditor->Text() );
+        TInt commandId = validPhoneNumber ? EPhoneDialerValidNumber : EPhoneDialerInvalidNumber;
+        
+        TRAP_IGNORE( iAppUi->HandleCommandL( commandId ) );
+    
+        if ( iEasyDialer && iOperationMode == EModeEasyDialing )
+            {
+            TRAP_IGNORE( iEasyDialer->SetInputL( iEditor->Text() ) );
+            }
+
+        if ( iObserver )
+            {
+            iObserver->NumberEntryStateChanged( iNumberContents );
+            }
         }
-    
     }
     
 // -----------------------------------------------------------------------------
@@ -770,5 +820,54 @@
         TRAP_IGNORE( iLabel->OverrideColorL( EColorLabelText, skinColor ) );
         }   
     }
+
+// -----------------------------------------------------------------------------
+// CDialerNumberEntry::MakeVisible( TBool aVisible )
+// -----------------------------------------------------------------------------
+//	
+void CDialerNumberEntry::MakeVisible( TBool aVisible )
+	{
+	CCoeControl::MakeVisible( aVisible );
+	iEditor->MakeVisible( aVisible );
+	}
+
+// -----------------------------------------------------------------------------
+// CDialerNumberEntry::SetEasyDialingPlugin
+// -----------------------------------------------------------------------------
+//
+void CDialerNumberEntry::SetEasyDialingPlugin(CDialingExtensionInterface* aEasyDialer)
+    {
+    DIALER_PRINT("numberentry::SetEasyDialingPlugin");
+    iEasyDialer = aEasyDialer;
+    }
+
+// -----------------------------------------------------------------------------
+// CDialerNumberEntry::SetOperationMode
+// -----------------------------------------------------------------------------
+//
+void CDialerNumberEntry::SetOperationMode( TDialerOperationMode aMode )
+    {
+    iOperationMode = aMode;
+    }
+
+// -----------------------------------------------------------------------------
+// CDialerNumberEntry::Validate
+//
+// Copied from cphonekeys.
+// -----------------------------------------------------------------------------
+//
+TBool CDialerNumberEntry::Validate( const TDesC& aString )
+    {
+    DIALER_PRINT("numberentry::Validate");
+    TLex input( aString );
+    TPtrC valid( KPhoneValidChars );
+
+    while ( valid.Locate( input.Peek() ) != KErrNotFound )
+        {
+        input.Inc();
+        }
     
+    return !input.Remainder().Length();
+    }
+
 // End of File
--- a/phoneuis/dialer/src/cdialerstub.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/src/cdialerstub.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007 - 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"
@@ -30,16 +30,22 @@
 // ---------------------------------------------------------------------------
 //
 EXPORT_C CDialer* CDialer::NewL( const CCoeControl& aContainer, 
-                                 const TRect& aRect )
+                                 const TRect& aRect, 
+                                 MPhoneDialerController* aController )
     {
     CDialer* self = new( ELeave )CDialer ( );    
     CleanupStack::PushL( self );
-    self->ConstructL( aContainer , aRect );
+    self->ConstructL( aContainer , aRect, aController );
     CleanupStack::Pop();    // self
     return self;
     }
 
+// ---------------------------------------------------------------------------
+// CDialer::~CDialer
+//
 // Destructor
+// ---------------------------------------------------------------------------
+//
 EXPORT_C CDialer::~CDialer()
     {
     // Empty
@@ -53,20 +59,24 @@
 //
 void CDialer::ConstructL( 
     const CCoeControl& aContainer, 
-    const TRect& aRect )
-    {    
+    const TRect& aRect,
+    MPhoneDialerController* /*aController*/ )
+    {
     // set window
     SetContainerWindowL( aContainer );
     SetParent( const_cast<CCoeControl*>(&aContainer) );
-    iParentControl = &aContainer;
     SetRect( aRect );
     }
 
-// Constructor
-CDialer::CDialer( ) :
-    iEikEnv( *CEikonEnv::Static() )
+// ---------------------------------------------------------------------------
+// CDialer::CDialer
+//
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+CDialer::CDialer()
     {
-    // Empty    
+    // Empty
     }
 
 // -----------------------------------------------------------------------------
@@ -90,7 +100,51 @@
     // Empty
     }
 
+// -----------------------------------------------------------------------------
+// CDialer::SetControllerL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::SetControllerL( MPhoneDialerController* /*aController*/ ) 
+    {
+    // Empty
+    }
 
+// ---------------------------------------------------------------------------
+// CDialer::Controller
+// ---------------------------------------------------------------------------
+//
+EXPORT_C MPhoneDialerController* CDialer::Controller()
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CDialer::GetEasyDialingInterface
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CDialingExtensionInterface* CDialer::GetEasyDialingInterface() const
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::UpdateToolbar
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::UpdateToolbar()
+    {
+    // empty
+    }
+	
+// ---------------------------------------------------------------------------
+// CDialer::RelayoutAndDraw
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::RelayoutAndDraw()
+	{
+	// Empty
+	}
+	
 // Methods from MNumberEntry
 
 // ---------------------------------------------------------------------------
@@ -104,8 +158,7 @@
     {
     // Empty
     }
-    
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::GetNumberEntry
 //  
@@ -115,7 +168,7 @@
     {
     return NULL;
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::IsNumberEntryUsed
 //  
@@ -125,7 +178,7 @@
     {
     return EFalse;
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::SetNumberEntryVisible
 //  
@@ -136,7 +189,6 @@
     // Empty
     }
 
-    
 // ---------------------------------------------------------------------------
 // CDialer::SetTextToNumberEntry
 //  
@@ -146,7 +198,7 @@
     {
     // Empty
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::GetTextFromNumberEntry
 //  
@@ -156,7 +208,7 @@
     {
     aDesC = KNullDesC();
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::RemoveNumberEntry
 //  
@@ -166,7 +218,7 @@
     {
     iIsUsed = EFalse;    
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::ChangeEditorMode
 //  
@@ -176,17 +228,17 @@
     {
     return KErrNotSupported;
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::OpenVKBL
-//  
+// 
 // ---------------------------------------------------------------------------
 //
 void CDialer::OpenVkbL()
     {
     // Empty
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::GetEditorMode
 //  
@@ -196,7 +248,7 @@
     {
     return KErrNotSupported;
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::ResetEditorToDefaultValues
 //  
@@ -206,7 +258,7 @@
     {
     // Empty
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::SetNumberEntryPromptText
 //  
@@ -215,7 +267,7 @@
 void CDialer::SetNumberEntryPromptText( const TDesC& /*aPromptText*/ ) 
     {
     // Empty
-    }    
+    }
 
 // ---------------------------------------------------------------------------
 // CDialer::EnableTactileFeedback
@@ -226,6 +278,35 @@
     {
     // Empty
     }
+
+// ---------------------------------------------------------
+// CDialer::HandleQwertyModeChange
+// ---------------------------------------------------------
+//
+EXPORT_C void CDialer::HandleQwertyModeChange( TInt /*aMode*/ )
+    {
+    // Empty
+    }
+
+// ---------------------------------------------------------
+// CDialer::HandleKeyboardLayoutChange
+// ---------------------------------------------------------
+// 
+EXPORT_C void CDialer::HandleKeyboardLayoutChange()
+    {
+    // Empty
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::HandleControlEventL
+// ---------------------------------------------------------------------------
+//
+void CDialer::HandleControlEventL( CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/ )
+    {
+    // Empty
+    }
+
+
 // Functions from CCoeControl
 
 // ---------------------------------------------------------------------------
@@ -260,7 +341,6 @@
     return 0;
     }
 
-
 // ---------------------------------------------------------------------------
 // CDialer::ComponentControl(TInt aIndex) const
 //
@@ -317,14 +397,14 @@
     // Calling base class implementation
     CCoeControl::HandlePointerEventL(aPointerEvent);    
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::MakeVisible
 // ---------------------------------------------------------------------------
 //
 void CDialer::MakeVisible( TBool /*aVisible*/ )
-	{
-	}    
+    {
+    }
 
 // Private methods
 
@@ -348,7 +428,7 @@
     {
     // Empty
     }
-    
+
 // ---------------------------------------------------------------------------
 // CDialer::ComponentControlForDialerMode
 // 
@@ -368,17 +448,17 @@
 //  
 // ---------------------------------------------------------------------------
 //
-CAknEdwinState* CDialer::EdwinState()
+CAknEdwinState* CDialer::EdwinState() const
     {
     return NULL;
-    } 
+    }
 
 // ---------------------------------------------------------------------------
-// CDialer::UpdateVkbEditorFlagsL
+// CDialer::UpdateEdwinState
 //  
 // ---------------------------------------------------------------------------
 //
-void CDialer::UpdateVkbEditorFlagsL()
+void CDialer::UpdateEdwinState( TEditorType /* aType */ )
     {
     // Empty
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/src/cdialertoolbarcontainer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,462 @@
+/*
+* Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* 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:  CDialerToolbarContainer replaces the standard S60 toolbar
+*               in the Dialer layout in the Easy dialing mode. It's 
+*               responsible of the toolbar layout and logic, but not of the 
+*               contents which are provided by an instance of 
+*               MPhoneDialerController.
+*
+*/
+
+#include <aknbutton.h>
+#include <aknappui.h>
+#include <AknsUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <phoneui.rsg>
+#include <phoneappcommands.hrh>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+
+#include "dialercommon.h"
+#include "cdialertoolbarcontainer.h"
+
+
+// CONSTANTS
+const TInt KDialerToolbarButtonKeyRepeatDelay = 300;
+const TInt KDialerToolbarKeyRepeatInterval = 75;
+
+
+
+// CLASS DEFINITION
+
+// ---------------------------------------------------------------------------
+// NewL
+//
+// ---------------------------------------------------------------------------
+//
+CDialerToolbarContainer* CDialerToolbarContainer::NewL( CCoeControl& aParent,
+        MPhoneDialerController* aContentProvider )
+    {
+    CDialerToolbarContainer* self = 
+            new (ELeave) CDialerToolbarContainer( aParent, aContentProvider );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDialerToolbarContainer
+//
+// ---------------------------------------------------------------------------
+//
+CDialerToolbarContainer::CDialerToolbarContainer( CCoeControl& aParent,
+        MPhoneDialerController* aContentProvider ) : 
+    CDialerContainerBase( aParent ), 
+    iContentProvider( aContentProvider )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ~CDialerToolbarContainer
+//
+// ---------------------------------------------------------------------------
+//
+CDialerToolbarContainer::~CDialerToolbarContainer()
+    {
+    iCoeEnv->RemoveForegroundObserver( *this );
+    DeleteButtons();
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::ConstructL()
+    {
+    BaseConstructL();
+    
+    CreateButtonsL();
+
+    iCoeEnv->AddForegroundObserverL( *this );
+    }
+
+// ---------------------------------------------------------------------------
+// SetContentProviderL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::SetContentProviderL( MPhoneDialerController* aProvider )
+    {
+    if ( iContentProvider != aProvider )
+        {
+        iContentProvider = aProvider;
+        
+        // Recreate buttons to reset available button states
+        DeleteButtons();
+        CreateButtonsL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// UpdateButtonStates
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::UpdateButtonStates()
+    {
+    // safety check
+    if ( iButtons.Count() < MPhoneDialerController::ENumberOfButtons ||
+         !iContentProvider )
+        {
+        return;
+        }
+    
+    for ( TInt i = 0 ; i < MPhoneDialerController::ENumberOfButtons ; ++i )
+        {
+        MPhoneDialerController::TButtonIndex idx =
+            static_cast< MPhoneDialerController::TButtonIndex >( i );
+        TInt state = iContentProvider->ButtonState( idx );
+        TBool dimmed = iContentProvider->ButtonDimmed( idx );
+        if ( state >= 0 )
+            {
+            iButtons[i]->SetCurrentState( state, EFalse );
+            }
+        iButtons[i]->SetDimmed( dimmed );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetVariety
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::SetVariety()
+    {
+    iVariety = ( Layout_Meta_Data::IsLandscapeOrientation() ?
+        EDialerVarietyLandscape : EDialerVarietyPortrait );
+    }
+
+// ---------------------------------------------------------------------------
+// SetLayout
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::SetLayout()
+    {
+    if ( iButtons.Count() < MPhoneDialerController::ENumberOfButtons )
+        {
+        return;
+        }
+    
+    // Position for the first button
+    TPoint buttonPos = Rect().iTl;
+    
+    if ( iVariety == EDialerVarietyPortrait )
+        {
+        // In portrait, buttons are laid out from top to bottom
+        for ( TInt i = 0 ; i < iButtons.Count() ; ++i )
+            {
+            buttonPos = LayoutButton( i, buttonPos );
+            }
+        }
+    else
+        {
+        // In landscape, buttons are laid out from right to left.
+        // This is achieved by looping button array backwards and laying
+        // those out from left to right.
+        for ( TInt i = iButtons.Count()-1 ; i >= 0  ; --i )
+            {
+            buttonPos = LayoutButton( i, buttonPos );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CountComponentControls
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDialerToolbarContainer::CountComponentControls() const
+    {
+    return iButtons.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// ComponentControl
+//
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CDialerToolbarContainer::ComponentControl( TInt aIndex ) const
+    {
+    CCoeControl* control = NULL;
+    if ( aIndex >= 0 && aIndex < iButtons.Count() )
+        {
+        control = iButtons[ aIndex ];
+        }
+    return control;
+    }
+
+// ---------------------------------------------------------------------------
+// HandleControlEventL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
+    {
+    if ( aEventType == MCoeControlObserver::EEventStateChanged )
+        {
+        // Handle button press. 
+
+        // Multistate buttons change state automatically when pressed. 
+        // Revert this change as we do not want to use states
+        // for "toggle button" type of functionality but to give one button
+        // different functions depending on the situation.
+        // Must initiate button redraw so that the state change done here 
+        // is drawn too; the automatically changed state is drawn within 
+        // AknButton just before EEventStateChanged is reported 
+        // (in emulator button icon flashing can be seen).
+        UpdateButtonStates();
+        aControl->DrawNow();
+
+        // Handle the command attached to the button
+        CAknButton* button = static_cast<CAknButton*>( aControl );
+        TInt commandId = ButtonCommand( *button );
+        
+        if ( commandId == EPhoneDialerCmdClear )
+            {
+            // simulate backspace
+            TKeyEvent keyEvent;
+            keyEvent.iModifiers = 0;
+            keyEvent.iRepeats = 0;
+            keyEvent.iCode = EKeyBackspace;
+            keyEvent.iScanCode = EStdKeyBackspace;
+            iCoeEnv->SimulateKeyEventL( keyEvent, EEventKey );
+            }
+        else
+            {
+            // Forward pressed toolbar button to the framework 
+            // so that we can handle it in active state
+            CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv->AppUi() );
+            appUi->ProcessCommandL( commandId );  
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// HandlePointerEventL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {
+    iLatestPointerEvent = aPointerEvent;
+    CCoeControl::HandlePointerEventL( aPointerEvent );
+    }
+
+// ---------------------------------------------------------------------------
+// HandleGainingForeground
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::HandleGainingForeground()
+    {
+    // no implementation needed
+    }
+
+// ---------------------------------------------------------------------------
+// HandleLosingForeground
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::HandleLosingForeground()
+    {
+    // This is needed when dialer control disappeares during keypress. 
+    // Last pressed pointer event must be forwarted to framework 
+    // as pointer up event. Thus button is set to unpressed state etc.
+    // This code calls HandlePointerEventL of the parent class instead of this.
+    // If we call this classes HandlePointerEventL, this classes 
+    // grab status is not cleared, and later coming EButton1Up events may end
+    // up erroneously to this class, although intended elsewhere.
+    // 
+    if ( iLatestPointerEvent.iType != TPointerEvent::EButton1Up && Parent() )
+        {    
+        iLatestPointerEvent.iType = TPointerEvent::EButton1Up;
+        TRAP_IGNORE( Parent()->HandlePointerEventL( iLatestPointerEvent ) );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CreateButtonsL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::CreateButtonsL()
+    {
+    // Create the avkon button objects
+    for ( TInt i = 0 ; i < MPhoneDialerController::ENumberOfButtons ; ++i )
+        {
+        CAknButton* button = CAknButton::NewLC();
+        button->SetContainerWindowL( *this ); // this sets also parent and mopParent
+        button->SetObserver( this );
+        button->SetIconScaleMode( EAspectRatioPreserved );
+        AknsUtils::RegisterControlPosition( button );
+        button->ActivateL();
+        iButtons.AppendL( button );
+        CleanupStack::Pop( button );
+        iButtonCommands.AppendL( RArray<TInt>() );
+        }
+
+    // Backspace button has auto-repeat feature
+    iButtons[MPhoneDialerController::EClearButton]->SetButtonFlags( KAknButtonKeyRepeat );
+    iButtons[MPhoneDialerController::EClearButton]->SetKeyRepeatInterval( 
+        KDialerToolbarButtonKeyRepeatDelay, KDialerToolbarKeyRepeatInterval );
+    
+    // Call button doesn't use default button background but a green one 
+    // (same as used by in-call view for answer button)
+    iButtons[MPhoneDialerController::ECallButton]->SetFrameAndCenterIds( 
+            KAknsIIDQsnFrButtonNormalAnswer, KAknsIIDQsnFrButtonNormalAnswerCenter,
+            KAknsIIDQsnFrButtonPressedAnswer, KAknsIIDQsnFrButtonPressedAnswerCenter, 
+            KAknsIIDQsnFrButtonInactiveAnswer, KAknsIIDQsnFrButtonInactiveAnswerCenter, 
+            KAknsIIDQsnFrButtonPressedAnswer, KAknsIIDQsnFrButtonPressedAnswerCenter, 
+            KAknsIIDQsnFrButtonInactiveAnswer, KAknsIIDQsnFrButtonInactiveAnswerCenter
+            );
+        
+    // Add button states
+    if ( iContentProvider )
+        {
+        for ( TInt i = 0 ; i < MPhoneDialerController::ENumberOfButtons ; ++i )
+            {
+            MPhoneDialerController::TButtonIndex btnIdx =
+                static_cast< MPhoneDialerController::TButtonIndex >( i );
+            RPointerArray< MPhoneDialerController::CButtonData > states;
+            CleanupClosePushL( states );
+            iContentProvider->GetButtonData( btnIdx, states );
+            for ( TInt j = 0 ; j < states.Count() ; ++j )
+                {
+                TRAP_IGNORE( AddButtonStateL( i, *states[j] ) );
+                delete states[j];
+                states[j] = NULL;
+                }
+            CleanupStack::PopAndDestroy( &states );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// DeleteButtons
+// Reset internal arrays holding the button data
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::DeleteButtons()
+    {
+    for ( TInt i = 0 ; i < iButtons.Count() ; ++i )
+        {
+        AknsUtils::DeregisterControlPosition( iButtons[i] );
+        }
+    iButtons.ResetAndDestroy();
+    
+    for ( TInt i = 0 ; i < iButtonCommands.Count() ; ++i )
+        {
+        iButtonCommands[i].Reset();
+        }
+    iButtonCommands.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// AddButtonStateL
+//
+// ---------------------------------------------------------------------------
+//
+void CDialerToolbarContainer::AddButtonStateL( TInt aButtonIndex, 
+        MPhoneDialerController::CButtonData& aButtonData )
+    {
+    iButtons[ aButtonIndex ]->AddStateL(
+            aButtonData.iIcon,      //CGulIcon* aIcon, 
+            NULL,                   //CGulIcon* aDimmedIcon, 
+            NULL,                   //CGulIcon* aPressedIcon,
+            NULL,                   //CGulIcon* aHoverIcon,
+            KNullDesC,              //const TDesC& aText, 
+            *aButtonData.iTooltip,  //const TDesC& aHelpText, 
+            0 );                    //const TInt aStateFlags
+    aButtonData.iIcon = NULL; // ownership transferred
+    iButtonCommands[ aButtonIndex ].AppendL( aButtonData.iCommandId );
+    }
+
+// ---------------------------------------------------------------------------
+// ButtonCommand
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDialerToolbarContainer::ButtonCommand( const CAknButton& aButton ) const
+    {
+    TInt commandId = KErrNotFound;
+    
+    // Find out index of the button in iButtons array
+    TInt btnIndex = iButtons.Find( &aButton );
+    __ASSERT_DEBUG( btnIndex >= 0, DialerPanic( EDialerPanicToolbarButtonNotFound ) );
+    
+    // Find the corresponding command from command array
+    TInt btnStateIdx = aButton.StateIndex();
+    if ( btnIndex < iButtonCommands.Count() &&
+         btnStateIdx < iButtonCommands[btnIndex].Count() )
+        {
+        commandId = iButtonCommands[btnIndex][btnStateIdx];
+        }
+    
+    __ASSERT_DEBUG( commandId != KErrNotFound, DialerPanic( EDialerPanicToolbarButtonNotFound ) );
+    return commandId;
+    }
+
+// ---------------------------------------------------------------------------
+// LayoutButton
+// Set layout for one button.
+// ---------------------------------------------------------------------------
+//
+TPoint CDialerToolbarContainer::LayoutButton( TInt aButtonIdx, TPoint aPos )
+    {
+    TRect parentRect = Rect();
+
+    TAknWindowComponentLayout buttonLayout = 
+        ( aButtonIdx == MPhoneDialerController::ECallButton ? 
+          AknLayoutScalable_Apps::cell_dia3_key1_fun_pane( iVariety ) :
+          AknLayoutScalable_Apps::cell_dia3_key0_fun_pane( iVariety ) );
+        
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( parentRect, buttonLayout );
+    TRect outerRect = layoutRect.Rect();
+    outerRect.SetRect( aPos, outerRect.Size() );
+
+    TRect innerRect = outerRect;
+    innerRect.Shrink( 1, 1 );
+    iButtons[ aButtonIdx ]->SetRect( innerRect );
+    AknsUtils::RegisterControlPosition( iButtons[ aButtonIdx ] );
+    
+    // Calculate position for the next button
+    TPoint nextPos = aPos;
+    if ( iVariety == EDialerVarietyPortrait )
+        {
+        nextPos.iY += outerRect.Height();
+        }
+    else
+        {
+        nextPos.iX += outerRect.Width();
+        }
+    
+    return nextPos;
+    }
+
+// end of file
--- a/phoneuis/dialer/src/cdialervideocontainer.cpp	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/dialer/src/cdialervideocontainer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -27,9 +27,9 @@
 #include <AknUtils.h>
 #include <AknsDrawUtils.h>
 #include <AknLayoutFont.h>
-#include <AknLayout2Def.h>
+#include <aknlayout2def.h>
 #include <layoutmetadata.cdl.h>
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <AknsBasicBackgroundControlContext.h>
 #include <AknsFrameBackgroundControlContext.h>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/src/cdialingextensionobserver.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2007 - 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Observer for dialingextension plug-in.
+*
+*/
+
+// INCLUDE FILES
+#include <eikenv.h>
+#include <eikappui.h>
+#include <phoneappcommands.hrh>
+
+// USER INCLUDE FILES
+#include "cdialingextensionobserver.h"
+#include "cdialernumberentry.h"
+#include "cdialer.h"
+
+
+// ---------------------------------------------------------------------------
+//  CDialingExtensionObserver::CDialingExtensionObserver
+//  
+// 
+// ---------------------------------------------------------------------------
+//    
+CDialingExtensionObserver* CDialingExtensionObserver::NewL( 
+        CDialingExtensionInterface* aDialingExtension, 
+        CDialerNumberEntry* aNumberEntry,
+        CDialer* aDialer )
+    {
+    CDialingExtensionObserver* self = new (ELeave) CDialingExtensionObserver( 
+            aDialingExtension, aNumberEntry, aDialer );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//  CDialingExtensionObserver::~CDialingExtensionObserver
+//  
+// 
+// ---------------------------------------------------------------------------
+//
+CDialingExtensionObserver::~CDialingExtensionObserver()
+    {
+    // no owned data => no implementation needed
+    }
+
+// ---------------------------------------------------------------------------
+//  CDialingExtensionObserver::HandleDialingExtensionEvent
+//  
+// 
+// ---------------------------------------------------------------------------
+//    
+void CDialingExtensionObserver::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent )
+    {
+    switch ( aEvent )
+        {
+        case MDialingExtensionObserver::EFocusChanged:
+            {
+            // The basic idea of EFocusChanged event handling:
+            // - If dialing extension gets in focus, focus is taken from number entry editor.
+            // - If dialing extension gives up focus, focus is given to number entry editor.
+            
+            if ( iDialingExtension->IsFocused() && iNumberEntry->IsFocused() )
+                {
+                iNumberEntry->SetFocus(EFalse);
+                UpdateCba();
+                iDialer->UpdateToolbar();
+                }
+            else if ( !iDialingExtension->IsFocused() && !iNumberEntry->IsFocused() && iDialer->IsFocused() )
+                {
+                // Number entry editor is set focused only if the parent control is in focus.
+                // If number entry editor was focused but parent was not, this may show as a
+                // a blinking cursor in an inappropriate place.
+                iNumberEntry->SetFocus(ETrue);
+                UpdateCba();
+                iDialer->UpdateToolbar();
+                }
+            
+            iNumberEntry->DrawDeferred();
+            }
+            break;
+
+        case MDialingExtensionObserver::ECCALauncherExit:
+        case MDialingExtensionObserver::ECommunicationCancelled:
+        case MDialingExtensionObserver::ECommunicationStarted:
+            {
+            // No actions. We should stay in dialer, and not go to idle.
+            }
+            break;
+        
+        case MDialingExtensionObserver::EEasyDialingEnabled:
+            {
+            // order dialer to refresh its layout
+            iDialer->UpdateNumberEntryConfiguration();
+            iDialer->SetSize( iDialer->Size() );
+            if (iDialingExtension && iNumberEntry)
+                {
+                // get matches for the current input
+                TRAP_IGNORE( SearchL() );
+                }
+            iDialer->DrawDeferred();
+            }
+            break;
+
+        case MDialingExtensionObserver::EEasyDialingDisabled:
+            {
+            // order parent to refresh its layout
+            iDialer->UpdateNumberEntryConfiguration();
+            iDialer->SetSize( iDialer->Size() );
+            iDialer->DrawDeferred();
+            }
+            break;
+            
+        default:
+            break;
+        }    
+    }
+
+
+// ---------------------------------------------------------------------------
+//  CDialingExtensionObserver::CDialingExtensionObserver
+//  
+// 
+// ---------------------------------------------------------------------------
+//    
+CDialingExtensionObserver::CDialingExtensionObserver( 
+        CDialingExtensionInterface* aDialingExtension, 
+        CDialerNumberEntry* aNumberEntry,
+        CDialer* aDialer ) :
+iDialingExtension( aDialingExtension ), 
+iNumberEntry( aNumberEntry ), 
+iDialer( aDialer ),
+iEikonEnvironment( NULL )
+    {
+    }
+        
+        
+// ---------------------------------------------------------------------------
+//  CDialingExtensionObserver::CDialingExtensionObserver
+//  
+// 
+// ---------------------------------------------------------------------------
+//    
+void CDialingExtensionObserver::UpdateCba()
+    {
+    if ( !iEikonEnvironment )
+        {
+        iEikonEnvironment = CEikonEnv::Static();
+        }
+    
+    if( iEikonEnvironment && iEikonEnvironment->EikAppUi() )
+        {
+        TRAP_IGNORE( iEikonEnvironment->EikAppUi()->HandleCommandL( EPhoneCmdUpdateCba ));
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+//  CDialingExtensionObserver::SearchL
+//  
+// 
+// ---------------------------------------------------------------------------
+//    
+void CDialingExtensionObserver::SearchL()
+    {
+    TPtrC searchString = iNumberEntry->Text();
+    if ( searchString.Length() )
+        {
+        iDialingExtension->SetInputL( searchString );
+        }
+    }
+
+// end of file
Binary file phoneuis/easydialing/cenrep/200212A0.txt has changed
Binary file phoneuis/easydialing/conf/easydialing.confml has changed
Binary file phoneuis/easydialing/conf/easydialing_200212A0.crml has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/data/200212A0.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing ECom registry info.
+*
+*/
+
+//  INCLUDES
+
+#include <registryinfov2.rh>
+#include "ExtrStandbyScrConst.h"
+#include "easydialingconstants.hrh"
+
+RESOURCE REGISTRY_INFO theInfo
+    {
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+    dll_uid = EASYDIALING_PLUGIN_DLL_UID;
+
+    interfaces = 
+        {
+        INTERFACE_INFO
+            {
+            interface_uid = EASYDIALING_PLUGIN_IF_UID;
+            implementations = 
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = EASYDIALING_PLUGIN_ECOM_IMPL_UID;
+                    version_no         = 1;
+                    display_name       = "Easy dialing";
+                    default_data       = "";
+                    opaque_data        = "";
+                    rom_only           = 0;
+                    }
+                };
+            }
+        };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/data/easydialing_stub.pkg	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,23 @@
+; easydialing_stub.pkg
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"Easy dialing plug-in"},(0x200212A0),1,0,0, TYPE=SA
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+""-"z:\sys\bin\easydialingplugin.dll"
+""-"z:\resource\plugins\easydialingplugin.r*"
+""-"z:\resource\easydialingpluginresources.r*"
+""-"z:\resource\apps\easydialing.mif"
+
+""-"z:\sys\bin\edcontactor.dll"
+""-"z:\resource\edcontactor.r*"
+
+""-"z:\system\data\10202BE9\200212A0.txt"
\ No newline at end of file
Binary file phoneuis/easydialing/data/easydialing_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/data/easydialingpluginresources.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing resources.
+*
+*/
+
+//  RESOURCE IDENTIFIER
+
+NAME EDPL
+
+
+//  INCLUDES
+
+#include <eikon.rh>
+#include <avkon.rh>
+
+#include <avkon.loc>
+#include <numberentry.loc>
+#include <callui.loc>
+#include "easydialing.loc"
+
+#include <phoneappcommands.hrh>
+#include "easydialingcommands.hrh"
+
+
+//  CONSTANTS  
+
+//  MACROS  
+
+//  RESOURCE DEFINITIONS 
+
+// ---------------------------------------------------------
+//   
+//    Define the resource file signature 
+//    This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE RSS_SIGNATURE { }
+
+// ---------------------------------------------------------
+//   
+//    r_easydialing_cba
+//    Contains softkey definitions for easy dialing.
+//
+// ---------------------------------------------------------
+//
+RESOURCE CBA r_easydialing_cba
+    {
+    buttons =
+        {
+        CBA_BUTTON
+            {
+            id = EPhoneCmdOptions;
+            txt = text_softkey_option;
+            },      
+        CBA_BUTTON
+            {
+            id = EPhoneCmdBack;
+            txt = text_softkey_exit;
+            },
+        CBA_BUTTON
+            {
+            id = EAknSoftkeyOpen;
+            txt = text_softkey_open;
+            }
+        };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_easydialing_menubar
+//   Menubar for easy dialing when action menu is closed.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_easydialing_menubar
+    {
+    titles =
+        {
+        MENU_TITLE { menu_pane = r_easydialing_menu; }
+        };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_easydialing_menu
+//   Menu pane
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_easydialing_menu
+    {
+    items =
+        {
+        MENU_ITEM
+                {
+                command = EEasyDialingOpenContact;
+                txt = qtn_options_open;
+                },
+        MENU_ITEM
+                {
+                command = EEasyDialingVoiceCall;
+                cascade = r_easydialing_options_call_menu;
+                txt = text_number_call;
+                },
+        MENU_ITEM
+                {
+                command = EEasyDialingSendMessage;
+                txt = qtn_nren_send_message;
+                },
+        MENU_ITEM
+                {
+                txt = qtn_easydial_option_submenu_title;
+                cascade = r_easydialing_options_on_off_cascade_menu;
+                },
+        MENU_ITEM 
+                {
+                command = EPhoneDialerCmdHelp; 
+                txt = qtn_options_help;
+                },
+        MENU_ITEM 
+                {
+                command = EPhoneCmdBack; 
+                txt = qtn_options_exit;
+                }
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//    r_easydialing_options_call_menu
+//    Number Acquisition view options call menu pane.
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_easydialing_options_call_menu
+    {
+    items=
+        {
+        MENU_ITEM
+            {
+            command = EEasyDialingVoiceCall; 
+            txt =   qtn_call_sub_voice;
+            },
+        MENU_ITEM
+            {
+            command = EEasyDialingVideoCall; 
+            txt =  qtn_call_sub_video;
+            }
+        };
+    }
+
+//----------------------------------------------------------------------------
+// r_easydialing_options_on_off_menu_item
+//
+// Menu item for setting Easy dialing on/off.
+// ---------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_easydialing_options_on_off_menu_item
+   {
+   items =
+       {
+       MENU_ITEM 
+           {
+           txt = qtn_easydial_option_submenu_title;
+           cascade = r_easydialing_options_on_off_cascade_menu;
+           }
+       };
+   }
+
+//----------------------------------------------------------------------------
+// r_easydialing_options_on_off_cascade_menu
+//
+// Submenu for setting Easy dialing on/off.
+// ---------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_easydialing_options_on_off_cascade_menu
+   {
+   items =
+       {
+       MENU_ITEM 
+           {
+           command  = EEasyDialingOn;
+           txt      = qtn_easy_dialing_on;
+           flags    = EEikMenuItemRadioStart;
+           },
+       MENU_ITEM 
+           { 
+           command  = EEasyDialingOff;
+           txt      = qtn_easy_dialing_off;
+           flags    = EEikMenuItemRadioEnd;
+           }
+       };
+   }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/bwins/edcontactoru.def	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,6 @@
+EXPORTS
+	?ExecuteServiceL@CEDContactorService@@QAEXABVTCSParameter@1@@Z @ 1 NONAME ; void CEDContactorService::ExecuteServiceL(class CEDContactorService::TCSParameter const &)
+	?IsBusy@CEDContactorService@@QBEHXZ @ 2 NONAME ; int CEDContactorService::IsBusy(void) const
+	?NewL@CEDContactorService@@SAPAV1@PAVMEDContactorObserver@@@Z @ 3 NONAME ; class CEDContactorService * CEDContactorService::NewL(class MEDContactorObserver *)
+	?CancelService@CEDContactorService@@QAEXXZ @ 4 NONAME ; void CEDContactorService::CancelService(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/data/edcontactor.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Resource file for CCA Contactor Service
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME    EDCO // 4 letter ID
+
+//  INCLUDES
+#include <bldvariant.hrh>
+#include <data_caging_paths_strings.hrh>
+#include <eikon.rh>
+#include <avkon.rh>
+
+
+#include <AiwCommon.rh>
+#include <AiwGenericParam.hrh>
+
+//  RESOURCE DEFINITIONS 
+
+// ---------------------------------------------------------------------------
+// RSS_SIGNATURE
+// ---------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE {}
+
+// --------------------------------------------------------------------------
+// AIW_INTEREST
+// Contact selection interest.
+// --------------------------------------------------------------------------
+//
+RESOURCE AIW_INTEREST r_edcontactorservice_contact_selection_interest
+    {
+    items=
+        {
+        AIW_CRITERIA_ITEM
+            {
+            id = KAiwCmdSelect;  // serviceCmd used here also as ID
+            serviceCmd   = KAiwCmdSelect;
+            contentType  = EGenericParamContactLinkArrayStr;
+            serviceClass = KAiwClassBase;
+            maxProviders = 1;
+            }
+        };
+    }
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/eabi/edcontactoru.def	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN19CEDContactorService15ExecuteServiceLERKNS_12TCSParameterE @ 1 NONAME
+	_ZN19CEDContactorService4NewLEP20MEDContactorObserver @ 2 NONAME
+	_ZNK19CEDContactorService6IsBusyEv @ 3 NONAME
+	_ZN19CEDContactorService13CancelServiceEv @ 4 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Easy dialing contactor module bld.inf.
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+edcontactor.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/group/edcontactor.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Easy dialing contactor module project file.
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+
+TARGET                  edcontactor.dll
+TARGETTYPE              dll
+UID                     0x1000008d 0x200212A3
+VENDORID                VID_DEFAULT
+CAPABILITY              CAP_CLIENT_DLL NetworkServices NetworkControl
+
+USERINCLUDE             ../inc
+USERINCLUDE             ../../inc
+
+SOURCEPATH              ../src
+SOURCE 					edcontactorservice.cpp
+SOURCE					edcontactorserviceoperator.cpp
+SOURCE                  edcontactorpopuphandler.cpp
+
+SOURCE                  edcontactor.cpp
+SOURCE                  edcontactoroperation.cpp
+SOURCE                  edcontactorcalloperation.cpp
+SOURCE                  edcontactorunieditoroperation.cpp
+SOURCE                  edcontactoremailoperation.cpp
+SOURCE                  edcontactorimoperation.cpp
+SOURCE                  edcontactorvoipoperation.cpp
+SOURCE                  edphonecall.cpp
+SOURCE                  edcontactorvideocalloperation.cpp
+SOURCE                  edmsgeditors.cpp
+
+// resources
+START RESOURCE      ../data/edcontactor.rss 
+HEADER
+TARGETPATH          RESOURCE_FILES_DIR
+LANGUAGE_IDS
+END
+
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE         /epoc32/include/ecom
+
+LIBRARY               cone.lib
+LIBRARY               ws32.lib
+LIBRARY               euser.lib
+LIBRARY               efsrv.lib
+LIBRARY               bafl.lib
+LIBRARY               aiwdialdata.lib //AIW
+LIBRARY               commonengine.lib
+LIBRARY               servicehandler.lib //AIW
+LIBRARY               sendui.lib
+LIBRARY               ecom.lib 
+LIBRARY               serviceprovidersettings.lib
+LIBRARY               apgrfx.lib
+LIBRARY		      avkon.lib
+LIBRARY		      eikcore.lib
+DEBUGLIBRARY          flogger.lib
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactor.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class for launching the different communication methods
+*
+*/
+
+
+#ifndef EDCONTACTORSERVICE_H
+#define EDCONTACTORSERVICE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <VPbkFieldTypeSelectorFactory.h>
+// CLASS DECLARATION
+
+/**
+ * Class for launching communication methods
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactor) : CBase
+    {
+public:
+    /**
+     * Starts a communication method.
+     * 
+     * @param aCommMethod The communication method.
+     * @param aParam Parameter for the communication, for example phone number or e-mail address.
+     * @param aName Name of the contact which the parameter is from, for example for the sms/mms editor's to-field (optional)
+     * @param aForcedService Should the service be forced or not, relevant in voice call set-up.
+     * @param aServiceID The service ID for the VoIP call comm method, has no effect and can be left out for other comm methods
+     */
+    static void ExecuteServiceL(VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommMethod, const TDesC& aParam, 
+            const TDesC& aName = KNullDesC, TBool aForcedService = EFalse, TUint32 aServiceId = 0);
+
+    };
+
+#endif // EDCONTACTORSERVICE_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorcalloperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the call operation
+*
+*/
+
+
+#ifndef EDCONTACTORCALLOPERATION_H
+#define EDCONTACTORCALLOPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// CLASS DECLARATION
+class CEDContactorOperation;
+
+/**
+ * Class implementing the call operation
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorCallOperation) : public CEDContactorOperation
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEDContactorCallOperation();
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The phone number to call.
+     * @param aForcedCallType Should (voice) call be initiated as forced cs call or not.
+     */
+    static CEDContactorCallOperation* NewL(const TDesC& aParam, TBool aForcedCallType);
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The phone number to call.
+     * @param aForcedCallType Should (voice) call be initiated as forced cs call or not.
+     */
+    static CEDContactorCallOperation* NewLC(const TDesC& aParam, TBool aForcedCallType);
+    
+    /**
+     * Executes the operation (makes the call)
+     */
+    virtual void ExecuteLD();
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam The phone number to call.
+     * @param aForcedCallType Should (voice) call be initiated as forced cs call or not.
+     */
+    CEDContactorCallOperation(const TDesC& aParam, TBool aForcedCallType);
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+    
+private:
+    
+    /** Perform voice call as forced cs call or not.*/
+    TBool iForcedCallType;
+    };
+
+#endif // EDCONTACTORCALLOPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactoremailoperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the email operation
+*
+*/
+
+
+#ifndef EDCONTACTOREMAILOPERATION_H
+#define EDCONTACTOREMAILOPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// CLASS DECLARATION
+class CEDContactorOperation;
+
+/**
+ * Class implementing the email operation
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorEmailOperation) : public CEDContactorOperation
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEDContactorEmailOperation();
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The address to send email to.
+     * @param aName The name of the contact, to be shown in the "to" field
+     */
+    static CEDContactorEmailOperation* NewL(const TDesC& aParam, const TDesC& aName);
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The address to send email to.
+     * @param aName The name of the contact, to be shown in the "to" field
+     */
+    static CEDContactorEmailOperation* NewLC(const TDesC& aParam, const TDesC& aName);
+    
+    /**
+     * Executes the operation (starts the email editor)
+     */
+    virtual void ExecuteLD();
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam The address to send email to.
+     * @param aName The name of the contact, to be shown in the "to" field
+     */
+    CEDContactorEmailOperation(const TDesC& aParam, const TDesC& aName);
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+    };
+
+#endif // EDCONTACTOREMAILOPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorheaders.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ccacontactor's headers
+*
+*/
+
+
+#ifndef __EDCONTACTORHEADERS_H__
+#define __EDCONTACTORHEADERS_H__
+
+
+// Constants
+#include <e32cons.h>
+_LIT( KColon, ":" );
+
+// system
+#include <e32base.h>
+#include <bautils.h>
+#include <coeutils.h>
+#include <coemain.h>
+#include <apgcli.h> 
+#include <apgtask.h>
+#include <eikenv.h>
+
+//Phbk 
+#include <VPbkFieldTypeSelectorFactory.h>
+
+// AIW
+#include <AiwCommon.h>
+#include <AiwServiceHandler.h>
+#include <AiwGenericParam.h>
+#include <AiwContactSelectionDataTypes.h>
+#include <AiwVariant.h>
+#include <AiwGenericParam.hrh>
+#include <aiwdialdataext.h>
+
+
+//SPSettings
+#include <spsettings.h>
+#include <spproperty.h>
+
+//Sendui
+#include <SenduiMtmUids.h>
+#include <sendui.h>
+#include <CMessageData.h>
+#include <commonphoneparser.h>
+#include <CSendingServiceInfo.h>
+
+//IM plugin
+#include <cmscontactorimpluginbase.h>
+
+//own
+#include "edcontactor.h"
+#include "edcontactoroperation.h"
+#include "edcontactorcalloperation.h"
+#include "edcontactorvideocalloperation.h"
+#include "edcontactorunieditoroperation.h"
+#include "edcontactoremailoperation.h"
+#include "edcontactorvoipoperation.h"
+#include "edcontactorimoperation.h"
+#include "edmsgeditors.h"
+#include "edphonecall.h"
+
+#endif // __EDCONTACTORHEADERS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorimoperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the instant messaging operation
+*
+*/
+
+
+#ifndef EDCONTACTORIMOPERATION_H
+#define EDCONTACTORIMOPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+class CCmsContactorImPluginBase;
+class CSPSettings;
+class CEDContactorOperation;
+
+/**
+ * Class implementing the instant messaging operation
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorIMOperation) : public CEDContactorOperation
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEDContactorIMOperation();
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The IM "address" to send the message to
+     */
+    static CEDContactorIMOperation* NewL(const TDesC& aParam);
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The IM "address" to send the message to
+     */
+    static CEDContactorIMOperation* NewLC(const TDesC& aParam);
+    
+    /**
+     * Executes the operation (opens the message editor)
+     */
+    virtual void ExecuteLD();
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam The IM "address" to send the message to
+     */
+    CEDContactorIMOperation(const TDesC& aParam);
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+    
+private:
+    /**
+     * Resolve IM Launcher ECom UID
+     * 
+     * @since S60 v5.0     
+     * @param aServiceId service id 
+     * @return ECom UID
+     */ 
+    TUid ResolveEcomUidL( const TDesC& aServiceId );     
+    
+    /**
+     * Resolve IM Launcher ECom UID
+     * 
+     * @since S60 v5.0     
+     * @param aServiceId service id 
+     * @return Ecom UId in interegr
+     */ 
+    TInt DoResolveEcomUidL( const TDesC& aServiceId );     
+                    
+    /**
+     * Load the ECom plugin
+     * 
+     * @since S60 v5.0       
+     * @param aUidImp implementation UID
+     * @param aXspId service provider id
+     */
+    void LoadEcomL( TUid aUidImp, const TDesC& aXspId );
+    
+    /**
+     * Extracts service part from XspId
+     * 
+     * @since S60 v5.0       
+     * @param aXspId service provider id   
+     * @return service part (uri scheme part)
+     */
+    TPtrC ExtractService( const TDesC& aXspId );
+private:
+    
+    /**
+     * Im Plugin. 
+     * OWN
+     */
+    CCmsContactorImPluginBase* iPlugin;        
+
+    /**
+     * Service Provider Settings
+     * OWN
+     */
+    CSPSettings* iSPSettings;
+
+    };
+
+#endif // EDCONTACTORIMOPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactoroperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Base class for communication method launching operations
+*
+*/
+
+
+#ifndef EDCONTACTOROPERATION_H
+#define EDCONTACTOROPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+ * Base class for communication method launching operations
+ */
+NONSHARABLE_CLASS(CEDContactorOperation) : public CBase
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    virtual ~CEDContactorOperation();
+    
+    /**
+     * Executes the operation
+     */
+    virtual void ExecuteLD()=0;
+
+protected:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam Communication parameter, for example phone number or e-mail address
+     * @param aName Name of the contact to which the communication is started (optional)
+     */
+    CEDContactorOperation(const TDesC& aParam, const TDesC& aName = KNullDesC);
+    
+protected:
+
+    const TDesC& iParam;
+    
+    const TDesC& iName;
+
+    };
+
+#endif // EDCONTACTOROPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorpopuphandler.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class for handling popup query.
+*
+*/
+
+
+#ifndef EDCONTACTORPOPUPHANDLER_H
+#define EDCONTACTORPOPUPHANDLER_H
+
+#include <e32base.h>
+
+//FORWARD DECLERATIONS
+class CAiwServiceHandler;
+class CCoeEnv;
+
+/**
+ *  CEDContactorPopupHandler
+ *  Handling launch of popup query.
+ *
+ *  @code
+ *
+ *  @endcode
+ *
+ *  @lib ccacontactorservice
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorPopupHandler) :
+    public CBase,
+    public MAiwNotifyCallback
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CEDContactorPopupHandler* NewL();
+
+    /**
+     * Destructor.
+     */
+    virtual ~CEDContactorPopupHandler();
+
+    /**
+     * Launch popup.
+     *
+     * Leaves KErrNotFound if field data not found,
+     *        KErrCancel if popup canceled
+     *        KErrAbort if red key pressed
+     *        KErrGeneral if error occurred
+     *
+     * @since S60 5.0
+     * @param aCommAddressSelectType: Select Type.
+     * @param aUseDefaults: Is default functionality enabled.
+     */
+    TDesC& LaunchPopupL(
+        const TDesC8& aContactLinkArray,
+        TAiwCommAddressSelectType aCommAddressSelectType,
+        TBool aUseDefaults);
+
+    void ClosePopupL();
+    
+private:
+
+    // from base class MAiwNotifyCallback
+    TInt HandleNotifyL(TInt aCmdId, TInt aEventId,
+        CAiwGenericParamList& aEventParamList,
+        const CAiwGenericParamList& aInParamList);
+
+private:
+    /**
+     * Constructor.
+     */
+    CEDContactorPopupHandler();
+    void ConstructL();
+
+private: //new methods
+    void PrepareResourcesL();
+    void ReadFieldDataL(CAiwGenericParamList& aEventParamList);
+    void AsyncStop();
+
+private:
+    // data
+
+    /**
+     * Pointer to AIW service handler
+     * Own.
+     */
+    CAiwServiceHandler* iServiceHandler;
+
+    /**
+     * Pointer to scheduler wait.
+     * Own.
+     */
+    CActiveSchedulerWait* iSchedulerWait;
+
+    /**
+     * Environment.
+     * Not Own.
+     */
+    CCoeEnv& iCoeEnv;
+
+    /**
+     * Offset of loaded resource file.
+     * Own.
+     */
+    TInt iResourceOffset;
+
+    /**
+     * Result string from the AIW service.
+     * Own.
+     */
+    HBufC* iQueryResults;
+
+    /**
+     * For error handling.
+     * Own.
+     */
+    TInt iError;
+    
+    };
+
+#endif // EDCONTACTORPOPUPHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorservice.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,189 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a class for starting services
+*
+*/
+
+#ifndef __EDCONTACTORSERVICE_H__
+#define __EDCONTACTORSERVICE_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <f32file.h>
+#include <VPbkFieldTypeSelectorFactory.h>
+
+//FORWARD DECLARATIONS
+
+class CEDContactorServiceOperator;
+class MEDContactorObserver;
+
+
+/**
+ *  CEDContactorService
+ *
+ *  Class for starting services of CCA contactor service.
+ *  @code
+ *      HBufC* fullName = GetFullNameLC();
+ *      CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewLC();
+ *      linkArray->AppendL(iContactLink);
+ *      HBufC8* streamedArray = linkArray->PackLC();
+ *
+ *      //Set control flags.
+ *      TUint flags;
+ *      flags |= CEDContactorService::TCSParameter::EEnableDefaults;
+ *
+ *      CEDContactorService::TCSParameter params(VPbkFieldTypeSelectorFactory::EVoiceCallSelector, *streamedArray, flags, *fullName);
+ *      CEDContactorService::ExecuteServiceL(params);
+ *
+ *      CleanupStack::PopAndDestroy(3); //linkArray, streamedArray, fullName
+ *
+ *  @endcode
+ *
+ *  @lib CEDContactorService
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorService) : public CBase
+    {
+public:
+
+    /**
+     * Parameter class for the service.
+     *
+     * @since S60 v5.0
+     */
+    class TCSParameter
+        {
+        public:
+
+        /** Flags for controlling CCA Contactor Service */
+        enum TControlFlags
+            {
+            /**
+             * Enable defaults. If this is set, AIW popup query will automatically search possible
+             * default settings and if found one, it doesn't show selection query at all.
+             */
+            EEnableDefaults  = 0x0001,
+            
+            /**
+             * Execute service as forced. If this is set, then voice call will be
+             * executed as forced cs voice call. Doesn't affect other services currently.
+             */
+            EForcedService = 0x0002
+            };
+
+        /*
+         * Constructor
+         */
+        inline TCSParameter(
+                VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommTypeSelector,
+                TDesC8& aContactLinkArray, TUint aControlFlag, TDesC& aFullName) :
+                iCommTypeSelector(aCommTypeSelector),
+                iContactLinkArray(aContactLinkArray),
+                iControlFlag(aControlFlag),
+                iFullName(aFullName)
+            {
+            };
+
+         /*
+         * Enumeration for inticating which communication method is wanted to use.
+         */
+        VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector iCommTypeSelector;
+
+        /*
+         * Streamed contact link array of contact who will be communicated at.
+         */
+        TDesC8& iContactLinkArray;
+
+        /**
+         * Flag for controlling behaviour of service. Currently only set of default 
+         * and forced service supported.
+         */
+        TUint iControlFlag;
+
+        /*
+         * Some communication methods requires contacts name order to use services.
+         * (for example mms/sms editor)
+         */
+        TDesC& iFullName;
+        };
+
+    /**
+     *
+     */
+    IMPORT_C static CEDContactorService* NewL( MEDContactorObserver* aObserver );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CEDContactorService();
+
+    /**
+     * Start communication service.
+     *
+     * If the contactlink contains a multiple contact fields for selected communication
+     * method, the executed service will launch Phbk AIW selection popup. User have to select
+     * wanted field to be used for communication.
+     * The communication method is defined by TVPbkCommTypeSelector.
+     * After selection, communication is automatically started by the service.
+     *
+     * @see TVPbkCommTypeSelector from VPbkFieldTypeSelectorFactory.h.
+     * Leaves KErrArgument if given parameter doesn't have valid values.
+     *
+     * @since S60 5.0
+     * @param aParameter: The Launch Parameter.
+     */
+    IMPORT_C void ExecuteServiceL(const TCSParameter& aParameter);
+
+    /**
+     * Cancels an ongoing service execution.
+     */
+    IMPORT_C void CancelService();
+    
+    /**
+     * Is contactor service busy.
+     */
+    IMPORT_C TBool IsBusy() const;
+
+private:
+    /**
+     * Constructor.
+     */
+    CEDContactorService( MEDContactorObserver* aObserver );
+
+    /**
+     *
+     */
+    void ConstructL();
+
+private:
+    // data
+
+    /**
+     *
+     */
+    CEDContactorServiceOperator* iOperator;
+    
+    /**
+     * ETrue, if command is being handled at the moment
+     */
+    TBool iCommandIsBeingHandled;
+    
+    TInt iResourceFileOffset;
+    
+    MEDContactorObserver* iObserver;
+    };
+
+#endif      //__EDCONTACTORSERVICE_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorserviceheaders.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ccacontactorservice's headers
+*
+*/
+
+
+#ifndef __EDCONTACTORSERVICEHEADERS_H__
+#define __EDCONTACTORSERVICEHEADERS_H__
+
+// Constants
+#include <e32cons.h>
+#define KEDContactorServiceLoggerFile CCA_L("ccacontactorservice.txt")
+_LIT( KEDContactorServiceResourceFileName, "\\resource\\ccacontactorservicersc.rsc" );
+_LIT( KColon, ":" );
+
+
+// system
+#include <e32base.h>
+#include <bautils.h>
+#include <coeutils.h>
+#include <coemain.h>
+
+//Phbk 
+#include <VPbkFieldTypeSelectorFactory.h>
+
+// AIW
+#include <AiwCommon.h>
+#include <AiwServiceHandler.h>
+#include <AiwGenericParam.h>
+#include <AiwContactSelectionDataTypes.h>
+
+//SPSettings
+#include <spsettings.h>
+#include <spproperty.h>
+
+//own
+#include "edcontactorservice.h"
+#include "edcontactorserviceoperator.h"
+#include "medcontactorobserver.h"
+#include "edcontactorpopuphandler.h"
+#include <edcontactor.rsg>
+
+#include "edcontactor.h"
+
+#include "easydialinglogger.h"
+
+#endif // __EDCONTACTORSERVICEHEADERS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorserviceoperator.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class for handling service logic.
+*
+*/
+
+
+#ifndef EDCONTACTORSERVICEHANDLER_H
+#define EDCONTACTORSERVICEHANDLER_H
+
+#include <e32std.h>
+#include <e32base.h>
+
+//FORWARD DECLERATIONS
+class CEDContactorPopupHandler;
+
+/**
+ *  CEDContactorServiceOperator
+ *  Handling logic of service.
+ *
+ *  @code
+ *
+ *  @endcode
+ *
+ *  @lib ccacontactorservice
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorServiceOperator) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CEDContactorServiceOperator* NewLC( MEDContactorObserver* aObserver );
+
+    static CEDContactorServiceOperator* NewL( MEDContactorObserver* aObserver );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CEDContactorServiceOperator();
+
+public:
+    //new methods
+
+    /**
+     * Start service.
+     * All leaves are trapped.
+     *
+     * @since S60 5.0
+     */
+    void Execute(const CEDContactorService::TCSParameter& aParameter);
+    
+    /**
+     * Cancel an ongoing operation.
+     */
+    void Cancel();
+
+private:
+    /**
+     * Constructor.
+     */
+    CEDContactorServiceOperator( MEDContactorObserver* aObserver );
+
+    void ConstructL();
+
+private: //new methods
+    /**
+     * Helper class for handling special cases.
+     * Currently VOIP ServiceID implemented.
+     *
+     * @param aFieldData: Selected field.
+     * @since S60 5.0
+     */
+    void ResolveSpecialCasesL(const TDesC& aFieldData);
+
+    /**
+     * Helper class for searching ServiceID
+     *
+     * @param aFieldData: Selected field.
+     * @return ServiceId
+     * @since S60 5.0
+     */
+    TUint32 ResolveServiceIdL(const TDesC& aFieldData);
+
+    /**
+     * Helper class for parsing xSP identification.
+     *
+     * @param aFieldData: Selected field.
+     * @param aXSPId: Found xSP ID.
+     * @return boolean if xSP is found.
+     * @since S60 5.0
+     */
+    TBool ExtractServiceL(const TDesC& aFieldData, TPtrC& aXSPId);
+
+    /**
+     * Helper class for searching ServiceId from spsettings
+     *
+     * @param aFieldData: Selected field.
+     * @return ServiceId
+     * @since S60 5.0
+     */
+    TUint32 SearchServiceIdL(const TDesC& aFieldData);
+
+    /**
+     * Helper class for checking if MSISDN addressing is supported.
+     *
+     * @return ServiceId
+     * @since S60 5.0
+     */
+    TUint32 ResolveMSISDNAddressingSupportedL();
+
+    /**
+     * Helper class for starting communication method.
+     *
+     * @param aFieldData: Selected field.
+     * @since S60 5.0
+     */
+    void LaunchCommunicationMethodL(const TDesC& aFieldData);
+
+    /**
+     * Helper class for mapping AIW enum & selector factory enums together.
+     *
+     * @param aCommTypeSelector: Selector factory enum.
+     * @return AIW communication enum.
+     * @since S60 5.0
+     */
+    TAiwCommAddressSelectType CommunicationEnumMapper(
+        VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommTypeSelector);
+
+
+private:
+    // data
+
+    /**
+     * Pointer to popup handler class
+     * Own.
+     */
+    CEDContactorPopupHandler* iPopupHandler;
+
+    /**
+     * Reference to the launch parameter.
+     * Not own.
+     */
+    const CEDContactorService::TCSParameter* iParameter;
+
+    /**
+     * ServiceId for VOIP service.
+     * Own.
+     */
+    TUint32 iServiceId;
+    
+    /**
+     * Observer for contactor events.
+     * Not owned.
+     */
+    MEDContactorObserver* iObserver;
+    };
+
+#endif // EDCONTACTORSERVICEHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorunieditoroperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the unieditor operation (SMS/MMS)
+*
+*/
+
+
+#ifndef EDCONTACTORUNIEDITOROPERATION_H
+#define EDCONTACTORUNIEDITOROPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// CLASS DECLARATION
+class CEDContactorOperation;
+
+/**
+ * Class implementing the unieditor operation (SMS/MMS)
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib ccappcommlauncherplugin.dll
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorUniEditorOperation) : public CEDContactorOperation
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEDContactorUniEditorOperation();
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The phone number to send the message to
+     * @param aName The name of the contact, to be shown in the "to" field
+     */
+    static CEDContactorUniEditorOperation* NewL(const TDesC& aParam, const TDesC& aName);
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The phone number to send the message to
+     * @param aName The name of the contact, to be shown in the "to" field
+     */
+    static CEDContactorUniEditorOperation* NewLC(const TDesC& aParam, const TDesC& aName);
+    
+    /**
+     * Executes the operation (starts editor for sending the message)
+     */
+    virtual void ExecuteLD();
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam The phone number to send the message to
+     * @param aName The name of the contact, to be shown in the "to" field
+     */
+    CEDContactorUniEditorOperation(const TDesC& aParam, const TDesC& aName);
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+    };
+
+#endif // EDCONTACTORUNIEDITOROPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorvideocalloperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the video call operation
+*
+*/
+
+
+#ifndef EDCONTACTORVIDEOCALLOPERATION_H
+#define EDCONTACTORVIDEOCALLOPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// CLASS DECLARATION
+class CEDContactorOperation;
+
+/**
+ * Class implementing the video call operation
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorVideocallOperation) : public CEDContactorOperation
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEDContactorVideocallOperation();
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The phone number to video call
+     */
+    static CEDContactorVideocallOperation* NewL(const TDesC& aParam);
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The phone number to video call
+     */
+    static CEDContactorVideocallOperation* NewLC(const TDesC& aParam);
+    
+    /**
+     * Executes the operation (makes the video call)
+     */
+    virtual void ExecuteLD();
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam The phone number to video call
+     */
+    CEDContactorVideocallOperation(const TDesC& aParam);
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+    };
+
+#endif // EDCONTACTORVIDEOCALLOPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edcontactorvoipoperation.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the voip operation
+*
+*/
+
+
+#ifndef EDCONTACTORVOIPOPERATION_H
+#define EDCONTACTORVOIPOPERATION_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// CLASS DECLARATION
+class CEDContactorOperation;
+
+/**
+ * Class implementing the voip operation
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDContactorVOIPOperation) : public CEDContactorOperation
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEDContactorVOIPOperation();
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The address to make the voip call to
+     * @param aServiceID The voip service ID
+     */
+    static CEDContactorVOIPOperation* NewL(const TDesC& aParam, TUint32 aServiceID);
+
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aParam The address to make the voip call to
+     * @param aServiceID The voip service ID
+     */
+    static CEDContactorVOIPOperation* NewLC(const TDesC& aParam, TUint32 aServiceID);
+    
+    /**
+     * Executes the operation (launches the voip call)
+     */
+    virtual void ExecuteLD();
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     * 
+     * @param aParam The address to make the voip call to
+     * @param aServiceID The voip service ID
+     */
+    CEDContactorVOIPOperation(const TDesC& aParam, TUint32 aServiceID);
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+    
+    /**
+     * The voip service id
+     */
+    TUint32 iServiceId;
+
+    };
+
+#endif // EDCONTACTORVOIPOPERATION_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edmsgeditors.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Launching Editors. 
+*
+*/
+
+
+#ifndef __EDMSGEDITORS_H__
+#define __EDMSGEDITORS_H__
+
+#include <e32base.h>                             
+
+/**
+ * Helper class for launching message editors
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CEDMsgEditors) : public CBase
+	{
+public:
+
+	/**
+	 * Launch a msg editor.
+	 *
+	 * @param TUid Service uid (MTM) 
+	 * @param TDesC& Address where to send the msg
+	 * @param TDesC& Alias name for msg editor
+	 *
+	 * @return void 
+	 */
+	static void ExecuteL( const TUid aServiceUid, const TDesC& aAddress,
+			const TDesC& aName);
+
+	};
+
+#endif // __EDMSGEDITORS_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/edphonecall.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Launching Calls. 
+*
+*/
+
+
+#ifndef __EDPHONECALL_H__
+#define __EDPHONECALL_H__
+
+#include <e32base.h>                             
+
+// CLASS DECLARATION
+class CAiwDialDataExt;
+
+
+/**
+ * Helper class for launching calls (voice, voip & video)
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib
+ *  @since S60 v5.0
+ */
+class CEDPhoneCall : public CBase
+	{
+public:
+    
+    /**
+     * Type of call
+     */
+    enum TEDPhoneCallType { ECCACallTypeVoice, ECCACallTypeVoIP, ECCACallTypeVideo };
+
+	/**
+	 * Establish a call by using a phone number (or voip address)
+	 *
+	 * @param TDesC8& Phone number
+	 * @param aCallType Is this a cellular Voice, VoIP, or Video call
+	 * @param aForceCallType Whether to execute call type as forced one. 
+     *                       Currently only voice call type can be variated with this.
+	 *
+	 * @return void 
+	 */
+	static void ExecuteL( const TDesC& aPhoneNumber, TEDPhoneCallType aCallType, 
+	        TBool aForcedCallType, 
+	        TUint32 aServiceId = 0);
+
+private:
+
+	/**
+	 * Establish a call by using a phone number
+	 *
+	 * @param TDesC8& Phone number
+	 * @param TBool Is this a VoIP call
+	 *
+	 * @return void 
+	 */
+	static void DoAIWCallL( CAiwDialDataExt& aDialData);
+	};
+
+#endif // __EDPHONECALL_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/inc/medcontactorobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class implementing the abstract contactor observer class.
+*
+*/
+
+#ifndef MEDCONTACTOROBSERVER_H_
+#define MEDCONTACTOROBSERVER_H_
+
+/**
+ * MEDContactorObserver
+ * 
+ * Observer class for contactor module.
+ * 
+ * 
+ * 
+ */
+
+class MEDContactorObserver 
+    {
+    
+public:
+    
+    /*
+     * Enum for communication events.
+     */
+    typedef enum TEvent_enum
+        {
+        /*
+         * ECommunicationStarted
+         * Used when communication was normally started.
+         */
+        ECommunicationStarted = 1,
+        
+        /*
+         * ECommunicationCancelled
+         * Used when
+         * 1. User cancelled communication when choosing phone number, email, etc.
+         * 2. When there was no appropriate field in the contact.
+         */
+        ECommunicationCancelled
+        
+        } TEvent;
+    
+    virtual void InformContactorEvent( TEvent aEvent ) = 0;
+    };
+
+
+
+#endif /* MEDCONTACTOROBSERVER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactor.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the ccacontactor
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// EDContactor::ExecuteServiceL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactor::ExecuteServiceL(VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommMethod, const TDesC& aParam, const TDesC& aName, 
+        TBool aForcedService, TUint32 aServiceId)
+    {
+    CEDContactorOperation* operation = 0;
+    
+    switch (aCommMethod)
+        {
+        case VPbkFieldTypeSelectorFactory::EVoiceCallSelector:
+            operation = CEDContactorCallOperation::NewL(aParam, aForcedService);
+            break;
+            
+        case VPbkFieldTypeSelectorFactory::EVideoCallSelector:
+            operation = CEDContactorVideocallOperation::NewL(aParam);
+            break;
+        case VPbkFieldTypeSelectorFactory::EUniEditorSelector:
+            operation = CEDContactorUniEditorOperation::NewL(aParam, aName);
+            break;
+        case VPbkFieldTypeSelectorFactory::EEmailEditorSelector:
+            operation = CEDContactorEmailOperation::NewL(aParam, aName);
+            break;
+        case VPbkFieldTypeSelectorFactory::EVOIPCallSelector:
+            operation = CEDContactorVOIPOperation::NewL(aParam, aServiceId);
+            break;
+        case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector:
+            operation = CEDContactorIMOperation::NewL(aParam);
+            break;
+        
+        }
+    if (operation)
+        {
+        operation->ExecuteLD();
+        operation = NULL;
+        }
+    }
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorcalloperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the call operation
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorCallOperation::CEDContactorCallOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorCallOperation::CEDContactorCallOperation(const TDesC& aParam, 
+        TBool aForcedCallType) : CEDContactorOperation(aParam), 
+        iForcedCallType( aForcedCallType )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorCallOperation::~CEDContactorCallOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorCallOperation::~CEDContactorCallOperation()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorCallOperation::NewLC()
+// -----------------------------------------------------------------------------
+//
+CEDContactorCallOperation* CEDContactorCallOperation::NewLC(const TDesC& aParam,
+        TBool aForcedCallType )
+    {
+    CEDContactorCallOperation* self = 
+        new (ELeave)CEDContactorCallOperation(aParam, aForcedCallType);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorCallOperation::NewL()
+// -----------------------------------------------------------------------------
+//
+CEDContactorCallOperation* CEDContactorCallOperation::NewL(const TDesC& aParam,
+        TBool aForcedCallType)
+    {
+    CEDContactorCallOperation* self =
+        CEDContactorCallOperation::NewLC(aParam,aForcedCallType);
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorCallOperation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorCallOperation::ConstructL()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorCallOperation::ExecuteLD()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorCallOperation::ExecuteLD()
+    {
+    CleanupStack::PushL(this);
+    CEDPhoneCall::ExecuteL(iParam, CEDPhoneCall::ECCACallTypeVoice, iForcedCallType );
+    CleanupStack::PopAndDestroy(this);
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactoremailoperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the email operation
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorEmailOperation::CEDContactorEmailOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorEmailOperation::CEDContactorEmailOperation(const TDesC& aParam, const TDesC& aName) : 
+    CEDContactorOperation(aParam, aName)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorEmailOperation::~CEDContactorEmailOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorEmailOperation::~CEDContactorEmailOperation()
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorEmailOperation::NewLC()
+// -----------------------------------------------------------------------------
+//
+CEDContactorEmailOperation* CEDContactorEmailOperation::NewLC(const TDesC& aParam, const TDesC& aName)
+    {
+    CEDContactorEmailOperation* self = new (ELeave)CEDContactorEmailOperation(aParam, aName);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorEmailOperation::NewL()
+// -----------------------------------------------------------------------------
+//
+CEDContactorEmailOperation* CEDContactorEmailOperation::NewL(const TDesC& aParam, const TDesC& aName)
+    {
+    CEDContactorEmailOperation* self=CEDContactorEmailOperation::NewLC(aParam, aName);
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorEmailOperation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorEmailOperation::ConstructL()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorEmailOperation::ExecuteLD()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorEmailOperation::ExecuteLD()
+    {
+    CleanupStack::PushL(this);
+    CEDMsgEditors::ExecuteL(KSenduiMtmSmtpUid, iParam,
+                iName);
+    CleanupStack::PopAndDestroy(this);
+    }
+// Enf of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorimoperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the im operation
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "edcontactorheaders.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorIMOperation::CEDContactorIMOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorIMOperation::CEDContactorIMOperation(const TDesC& aParam) : CEDContactorOperation(aParam)
+    {
+    iPlugin = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorIMOperation::~CEDContactorIMOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorIMOperation::~CEDContactorIMOperation()
+    {
+    delete iPlugin;
+    iPlugin = NULL;
+    REComSession::FinalClose();   
+    delete iSPSettings;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorIMOperation::NewLC()
+// -----------------------------------------------------------------------------
+//
+CEDContactorIMOperation* CEDContactorIMOperation::NewLC(const TDesC& aParam)
+    {
+    CEDContactorIMOperation* self = new (ELeave)CEDContactorIMOperation(aParam);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorIMOperation::NewL()
+// -----------------------------------------------------------------------------
+//
+CEDContactorIMOperation* CEDContactorIMOperation::NewL(const TDesC& aParam)
+    {
+    CEDContactorIMOperation* self=CEDContactorIMOperation::NewLC(aParam);
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorIMOperation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorIMOperation::ConstructL()
+    {
+    iSPSettings = CSPSettings::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorIMOperation::ExecuteLD()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorIMOperation::ExecuteLD()
+    {
+    CleanupStack::PushL(this);
+    TPtrC aXspId = iParam;
+
+    TUid dllUid = ResolveEcomUidL( ExtractService(aXspId)  );    
+    LoadEcomL( dllUid, aXspId );
+    CleanupStack::PopAndDestroy(this);
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorIMOperation::ResolveEcomUidL
+// --------------------------------------------------------------------------
+//
+TUid CEDContactorIMOperation::ResolveEcomUidL( const TDesC& aServiceId )
+    {    
+    // Resolve ECom UID from SP settings
+    TInt launchId = KErrNotFound;  
+               
+    launchId = DoResolveEcomUidL( aServiceId ); 
+    TUid launchUid = {launchId };    
+    return launchUid;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorIMOperation::DoResolveEcomUidL
+// --------------------------------------------------------------------------
+//
+TInt CEDContactorIMOperation::DoResolveEcomUidL( const TDesC& aServiceId )
+    {    
+    // Resolve ECom UID from SP settings
+    TInt err = KErrNone;
+    TInt launchId = KErrNotFound;  
+    CDesCArrayFlat* nameArray = NULL;      
+    
+    RIdArray ids;
+    CleanupClosePushL( ids );
+    
+    nameArray = new (ELeave) CDesCArrayFlat(2);
+    CleanupStack::PushL( nameArray );    
+    
+    err = iSPSettings->FindServiceIdsL( ids );  
+    User::LeaveIfError( err );     
+    err = iSPSettings->FindServiceNamesL( ids, *nameArray );  
+    User::LeaveIfError( err );     
+    
+    TInt count = nameArray->MdcaCount();
+    for ( TInt i(0); i < count; i++)
+        {
+        // search the mathching service name
+        TPtrC p = nameArray->MdcaPoint( i );
+        if (!p.CompareF( aServiceId ))
+            {
+            // We have found the service, now get the plugin id
+            CSPProperty* IMLaunchIdProperty = CSPProperty::NewLC();
+            err = iSPSettings->FindPropertyL( ids[i], ESubPropertyIMLaunchUid, *IMLaunchIdProperty );
+            User::LeaveIfError( err );               
+            err = IMLaunchIdProperty->GetValue( launchId );
+            User::LeaveIfError( err ); 
+            CleanupStack::PopAndDestroy( IMLaunchIdProperty );            
+            break;
+            }
+        }    
+    CleanupStack::PopAndDestroy( nameArray );
+    CleanupStack::PopAndDestroy( ); // >>> ids
+    
+    return launchId; 
+    }
+    
+// --------------------------------------------------------------------------
+// CEDContactorIMOperation::LoadEcomL
+// --------------------------------------------------------------------------
+//
+void CEDContactorIMOperation::LoadEcomL( TUid aUidImp, const TDesC& aXspId  )
+    {         
+    TUid destructorId;
+
+    TAny* volatile implementation =
+        REComSession::CreateImplementationL( aUidImp,
+                                             destructorId );
+                                             
+    iPlugin = reinterpret_cast< CCmsContactorImPluginBase* >( implementation );    
+    iPlugin->SetDestructorId( destructorId );    
+    iPlugin->ExecuteL( aXspId );    
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorIMOperation::ExtractService
+// --------------------------------------------------------------------------
+//
+TPtrC CEDContactorIMOperation::ExtractService( const TDesC& aXspId )
+    {         
+    TInt pos = aXspId.Find(KColon);
+    if ( pos >= 0)
+        {
+        // ok input
+        return aXspId.Left(pos);
+        }
+    else
+        {
+        // return something in illegal input case
+        return TPtrC(KNullDesC);
+        }
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactoroperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the base class of contactor operations
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorOperation::CEDContactorOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorOperation::CEDContactorOperation(const TDesC& aParam, const TDesC& aName) : iParam(aParam), iName(aName)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorOperation::~CEDContactorOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorOperation::~CEDContactorOperation()
+    {
+    // No implementation required
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorpopuphandler.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,296 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class for handling popup query.
+*
+*/
+
+
+#include <e32std.h>
+#include <s32mem.h>
+#include <aknappui.h>
+#include <coemain.h> 
+#include <phoneappcommands.hrh>
+
+#include "edcontactorserviceheaders.h"
+
+#include <edcontactor.rsg>
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::NewL
+// --------------------------------------------------------------------------
+//
+CEDContactorPopupHandler* CEDContactorPopupHandler::NewL()
+    {
+    CEDContactorPopupHandler* self = new (ELeave) CEDContactorPopupHandler();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::~CEDContactorPopupHandler
+// --------------------------------------------------------------------------
+//
+CEDContactorPopupHandler::~CEDContactorPopupHandler()
+    {
+    LOGSTRING("CEDContactorPopupHandler::~CEDContactorPopupHandler");
+    delete iServiceHandler;
+    delete iSchedulerWait;
+    iCoeEnv.DeleteResourceFile (iResourceOffset);
+    delete iQueryResults;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::LaunchPopupL
+// --------------------------------------------------------------------------
+//
+TDesC& CEDContactorPopupHandler::LaunchPopupL(
+    const TDesC8& aContactLinkArray,
+    TAiwCommAddressSelectType aCommAddressSelectType,
+    TBool aUseDefaults )
+    {
+    LOGSTRING("CEDContactorPopupHandler::LaunchPopupL");
+
+    __ASSERT_ALWAYS (NULL != &aContactLinkArray, User::Leave (KErrArgument));
+    __ASSERT_ALWAYS (0 < aContactLinkArray.Size(), User::Leave (KErrArgument));
+
+    TUint fetchFlags = 0;
+
+    // Stop scheduler just in case this is called while operation is still ongoing.
+    AsyncStop();
+    
+    // Set service data
+    TAiwSingleItemSelectionDataV3 data;
+
+    if (!aUseDefaults)
+        {
+        fetchFlags |= ::EDoNotUseDefaultField;
+        }
+
+    data.SetFlags(fetchFlags);
+    data.SetCommAddressSelectType(aCommAddressSelectType);
+    CAiwGenericParamList& inParamList = iServiceHandler->InParamListL();
+    inParamList.AppendL(TAiwGenericParam(EGenericParamContactSelectionData,
+        TAiwVariant(TAiwSingleItemSelectionDataV3Pckg(data))));
+
+    // Set contactlink
+    inParamList.AppendL(TAiwGenericParam(EGenericParamContactLinkArray,
+        TAiwVariant(aContactLinkArray)));
+
+    iServiceHandler->ExecuteServiceCmdL(KAiwCmdSelect, inParamList,
+        iServiceHandler->OutParamListL(), 0, this);
+
+    // Waiting for popup selection.
+    // Make this whole operation look synchronous
+    CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv.AppUi() );
+    appUi->HandleCommandL( EPhoneCmdBlockingDialogLaunched );
+    iSchedulerWait->Start();
+    appUi->HandleCommandL( EPhoneCmdBlockingDialogClosed );
+    
+    User::LeaveIfError(iError);
+
+    LOGSTRING("CEDContactorPopupHandler::LaunchPopupL: Done.");
+
+    return *iQueryResults;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::ClosePopupL
+// --------------------------------------------------------------------------
+//
+void CEDContactorPopupHandler::ClosePopupL()
+    {
+    if ( iSchedulerWait->IsStarted() )
+        {
+        iServiceHandler->ExecuteServiceCmdL( KAiwCmdSelect, 
+                iServiceHandler->InParamListL(),
+                iServiceHandler->OutParamListL(), 
+                KAiwOptCancel, 
+                this );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::HandleNotifyL
+// --------------------------------------------------------------------------
+//
+TInt CEDContactorPopupHandler::HandleNotifyL(TInt aCmdId, TInt aEventId,
+        CAiwGenericParamList& aEventParamList,
+        const CAiwGenericParamList& /*aInParamList*/)
+    {
+    LOGSTRING("CEDContactorPopupHandler::HandleNotifyL");
+    TInt returnValue = KErrNone;
+
+    if (aCmdId == KAiwCmdSelect)
+        {
+        switch(aEventId)
+            {
+            case KAiwEventCompleted:
+                {
+                LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: KAiwEventCompleted");
+                // Selection done.
+                // Read and store results
+                TRAP(iError, ReadFieldDataL(aEventParamList));
+                }
+                break;
+
+            case KAiwEventCanceled:
+                LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: KAiwEventCanceled");
+                // Selection canceled.
+                iError = KErrCancel;
+                break;
+
+            case KAiwEventError:
+            case KAiwEventStopped:
+                LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: KAiwEventError or KAiwEventStopped");
+                // Error occurred.
+                iError = KErrGeneral;
+                break;
+
+            case KAiwEventQueryExit:
+                iError = KErrAbort;
+                returnValue = EFalse; // Telephony must not be allowed to be closed down
+                break;
+
+            default:
+                LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: Unknown");
+                iError = KErrGeneral;
+                break;
+            }
+        // Stop scheduler if service execution has finished.
+        if ( aEventId != KAiwEventQueryExit )
+            {
+            AsyncStop();
+            }
+        }
+
+    LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: Done.");
+    return returnValue;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::CEDContactorPopupHandler
+// --------------------------------------------------------------------------
+//
+CEDContactorPopupHandler::CEDContactorPopupHandler() :
+    iCoeEnv(*CCoeEnv::Static()),
+    iError(KErrNone)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::ConstructL
+// --------------------------------------------------------------------------
+//
+void CEDContactorPopupHandler::ConstructL()
+    {
+    LOGSTRING("CEDContactorPopupHandler::ConstructL");
+
+    PrepareResourcesL();
+
+    iServiceHandler = CAiwServiceHandler::NewL();
+    iServiceHandler->AttachL(R_EDCONTACTORSERVICE_CONTACT_SELECTION_INTEREST);
+
+    iSchedulerWait = new (ELeave) CActiveSchedulerWait();
+
+    LOGSTRING("CEDContactorPopupHandler::ConstructL: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::PrepareResourcesL
+// --------------------------------------------------------------------------
+//
+void CEDContactorPopupHandler::PrepareResourcesL()
+    {
+    LOGSTRING("CEDContactorPopupHandler::PrepareResourcesL");
+
+    // preparing resources for use
+    TFileName fileName;
+    fileName.Append (KEDContactorServiceResourceFileName);
+
+    BaflUtils::NearestLanguageFile (iCoeEnv.FsSession (), fileName);
+    if (ConeUtils::FileExists (fileName))
+        {
+        iResourceOffset = iCoeEnv.AddResourceFileL (fileName);
+        }
+    else // not found from user drive, leave badly.
+        {
+        LOGSTRING("CEDContactorPopupHandler::PrepareResourcesL: Resource file not exists.");
+        User::Leave (KErrGeneral);
+        }
+
+    LOGSTRING("CEDContactorPopupHandler::PrepareResourcesL: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::ReadFieldDataL
+// --------------------------------------------------------------------------
+//
+void CEDContactorPopupHandler::ReadFieldDataL(
+    CAiwGenericParamList& aEventParamList)
+    {
+    LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL");
+
+    if (iQueryResults)
+        {
+        delete iQueryResults;
+        iQueryResults = NULL;
+        }
+
+    TInt index = 1; // Get field data from index 1
+    const TAiwGenericParam* param =
+         aEventParamList.FindFirst(index, EGenericParamContactFieldData);
+    if (KErrNotFound != index)
+        {
+        TInt length = param->Value().AsDes().Length();
+        iQueryResults = HBufC::NewL(length);
+        iQueryResults->Des().Append(param->Value().AsDes());
+
+        // Data must be found!
+        if (0 >= iQueryResults->Length())
+            {
+            LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL: Failed to get field data!");
+            User::Leave(KErrGeneral);
+            }
+        }
+    else
+        {
+        LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL: Not found!");
+        User::Leave(KErrNotFound);
+        }
+
+    LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorPopupHandler::AsyncStop
+// --------------------------------------------------------------------------
+//
+void CEDContactorPopupHandler::AsyncStop()
+    {
+    LOGSTRING("CEDContactorPopupHandler::AsyncStop");
+
+    if(iSchedulerWait->IsStarted())
+        {
+        iSchedulerWait->AsyncStop();
+        }
+
+    LOGSTRING("CEDContactorPopupHandler::AsyncStop: Done.");
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorservice.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a class for starting services
+*
+*/
+
+#include <e32std.h>
+
+#include "edcontactorserviceheaders.h"
+
+_LIT(KContactorResourceFile, "\\resource\\edcontactor.rsc");
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CEDContactorService::ExecuteServiceL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CEDContactorService* CEDContactorService::NewL( MEDContactorObserver* aObserver )
+    {
+    CEDContactorService* self = new (ELeave) CEDContactorService(aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// Destructor
+// --------------------------------------------------------------------------
+//
+CEDContactorService::~CEDContactorService()
+    {
+    delete iOperator;
+    
+    CCoeEnv* coe = CCoeEnv::Static();
+    if( coe )
+        {
+        coe->DeleteResourceFile( iResourceFileOffset );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// Constructor
+// --------------------------------------------------------------------------
+//
+CEDContactorService::CEDContactorService( MEDContactorObserver* aObserver ) :
+iObserver(aObserver)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorService::ConstructL
+// --------------------------------------------------------------------------
+//
+void CEDContactorService::ConstructL()
+    {
+    CCoeEnv* coe = CCoeEnv::Static();    
+    if( coe )
+        {
+        TFileName dllFileName;
+        Dll::FileName( dllFileName );
+        
+        TParse parse;
+        User::LeaveIfError(parse.Set(KContactorResourceFile, &dllFileName, NULL));
+        TFileName resourceFileName(parse.FullName());
+         
+        iResourceFileOffset = coe->AddResourceFileL( resourceFileName );
+        }
+    
+    iOperator = CEDContactorServiceOperator::NewL( iObserver );
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorService::ExecuteServiceL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CEDContactorService::ExecuteServiceL(
+    const TCSParameter& aParameter)
+    {
+    LOGSTRING("CEDContactorService::ExecuteServiceL(): enter");
+
+    iCommandIsBeingHandled = ETrue;
+
+    // All leaves are trapped in op class.
+    iOperator->Execute(aParameter);
+
+    iCommandIsBeingHandled = EFalse;
+
+    LOGSTRING("CEDContactorService::ExecuteServiceL(): exit");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorService::CancelService
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CEDContactorService::CancelService()
+    {
+    if ( iOperator )
+        {
+        iOperator->Cancel();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorService::IsBusy
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CEDContactorService::IsBusy() const
+    {
+    return iCommandIsBeingHandled;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorserviceoperator.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,493 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class for handling service logic.
+*
+*/
+
+#include <e32std.h>
+#include <s32mem.h>
+
+#include "edcontactorserviceheaders.h"
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::NewLC
+// --------------------------------------------------------------------------
+//
+CEDContactorServiceOperator* CEDContactorServiceOperator::NewLC( MEDContactorObserver* aObserver )
+    {
+    CEDContactorServiceOperator* self = new (ELeave) CEDContactorServiceOperator(aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::NewL
+// --------------------------------------------------------------------------
+//
+CEDContactorServiceOperator* CEDContactorServiceOperator::NewL( MEDContactorObserver* aObserver )
+    {
+    CEDContactorServiceOperator* self = CEDContactorServiceOperator::NewLC(aObserver);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::~CEDContactorServiceOperator
+// --------------------------------------------------------------------------
+//
+CEDContactorServiceOperator::~CEDContactorServiceOperator()
+    {
+    LOGSTRING("CEDContactorServiceOperator::~CEDContactorServiceOperator");
+
+    delete iPopupHandler;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::Execute
+// --------------------------------------------------------------------------
+//
+void CEDContactorServiceOperator::Execute(
+    const CEDContactorService::TCSParameter& aParameter)
+    {
+    LOGSTRING("CEDContactorServiceOperator::Execute");
+
+    iParameter = &aParameter;
+
+    /**
+     * LOGIC:
+     * 1. Launch AIW popup
+     * 2. Special cases: Find out serviceid for voip
+     * 3. Launch communication service
+     *
+     * All actions are trapped here.
+     */
+    TDesC* result = NULL;
+    TBool useDefaults = EFalse;
+
+    // Check default control flag
+    if (CEDContactorService::TCSParameter::EEnableDefaults &
+        iParameter->iControlFlag)
+        {
+        useDefaults = ETrue;
+        }
+
+    // Launch popup
+    TRAPD(err, result = &iPopupHandler->LaunchPopupL(
+        iParameter->iContactLinkArray,
+        CommunicationEnumMapper(iParameter->iCommTypeSelector),
+        useDefaults));
+
+    if (KErrNone != err)
+        {
+        LOGSTRING1("CEDContactorServiceOperator::ExecuteL: LaunchPopupL: Leaves %d.", err);
+        
+        if (iObserver)
+            {
+            iObserver->InformContactorEvent(MEDContactorObserver::ECommunicationCancelled);
+            }       
+        return;
+        }
+
+    // Resolve special cases
+    TRAP(err, ResolveSpecialCasesL(*result));
+
+    if (KErrNone != err)
+        {
+        LOGSTRING1("CEDContactorServiceOperator::ExecuteL: ResolveSpecialCasesL: Leaves %d.", err);
+        
+        if (iObserver)
+            {
+            iObserver->InformContactorEvent(MEDContactorObserver::ECommunicationCancelled);
+            }       
+        return;
+        }
+
+    // Launch communication service
+    TRAP(err, LaunchCommunicationMethodL(*result));
+
+    if (KErrNone != err)
+        {
+        LOGSTRING1("CEDContactorServiceOperator::ExecuteL: LaunchCommunicationMethodL: Leaves %d.", err);
+        
+        if (iObserver)
+            {
+            iObserver->InformContactorEvent(MEDContactorObserver::ECommunicationCancelled);
+            }       
+        return;
+        }
+    LOGSTRING("CEDContactorServiceOperator::Execute: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::Cancel
+// --------------------------------------------------------------------------
+//
+void CEDContactorServiceOperator::Cancel()
+    {
+    if ( iPopupHandler )
+        {
+        TRAP_IGNORE( iPopupHandler->ClosePopupL() );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::CEDContactorServiceOperator
+// --------------------------------------------------------------------------
+//
+CEDContactorServiceOperator::CEDContactorServiceOperator( MEDContactorObserver* aObserver ):
+    iServiceId((TUint32)KErrNotFound),
+    iObserver(aObserver)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::ConstructL
+// --------------------------------------------------------------------------
+//
+void CEDContactorServiceOperator::ConstructL()
+    {
+    LOGSTRING("CEDContactorServiceOperator::ConstructL");
+
+    iPopupHandler = CEDContactorPopupHandler::NewL();
+
+    LOGSTRING("CEDContactorServiceOperator::ConstructL: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::ResolveSpecialCasesL
+// --------------------------------------------------------------------------
+//
+void CEDContactorServiceOperator::ResolveSpecialCasesL(const TDesC& aFieldData)
+    {
+    LOGSTRING("CEDContactorServiceOperator::ResolveSpecialCasesL");
+
+    /*
+     * Currently only VOIP ServiceId is needed to find out.
+     */
+    switch(iParameter->iCommTypeSelector)
+        {
+        case VPbkFieldTypeSelectorFactory::EVOIPCallSelector:
+            iServiceId = ResolveServiceIdL(aFieldData);
+            break;
+        }
+
+    LOGSTRING("CEDContactorServiceOperator::ResolveSpecialCasesL: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::ResolveServiceIdL
+// --------------------------------------------------------------------------
+//
+TUint32 CEDContactorServiceOperator::ResolveServiceIdL(const TDesC& aFieldData)
+    {
+    LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL");
+
+    __ASSERT_ALWAYS (NULL != &aFieldData, User::Leave (KErrArgument));
+    __ASSERT_ALWAYS (0 < aFieldData.Size(), User::Leave (KErrArgument));
+
+    TUint32 ret = (TUint32)KErrNotFound;
+
+    //LOGIC:
+    /*
+     * 1. Find out is there xSP prefix ( voip address for some specific service provider )
+     * 2. If there is, search service id
+     * 3. If not, find out how many services support msisdn
+     * 4. If only one, find use that service id
+     * 5. If more than one, do not use service id. User will be prompt which service to use.
+     */
+
+    TPtrC result;
+
+    // 1. Find out is there xSP prefix
+    if (ExtractServiceL(aFieldData, result))
+        {
+        LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ExtractServiceL found.");
+
+        // 2. If there is, search service id
+        ret = SearchServiceIdL(result);
+        }
+    else
+        {
+        LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ExtractServiceL not found.");
+
+        // 3. If not, find out how many services support msisdn ( normal phone number )
+        ret = ResolveMSISDNAddressingSupportedL();
+        if ((TUint32)KErrNotFound != ret)
+            {
+            // 4. If only one, find use that service id
+            // Currently no implementation.
+            LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ResolveMSISDNAddressingSupportedL only one service.");
+
+            }
+        else
+            {
+            // 5. If more than one or none found, do not use service id.
+            // User will be asked to choose among services when call is initiated.
+            // Currently no implementation. 
+            LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ResolveMSISDNAddressingSupportedL more than one service.");
+            }
+        }
+
+    LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: Done.");
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::ExtractServiceL
+// --------------------------------------------------------------------------
+//
+TBool CEDContactorServiceOperator::ExtractServiceL(
+    const TDesC& aFieldData, TPtrC& aXSPId)
+    {
+    LOGSTRING("CEDContactorServiceOperator::ExtractServiceL");
+
+    TBool found = EFalse;
+
+    TInt pos = aFieldData.Find(KColon);
+    if (pos >= 0)
+        {
+        // ok input
+        aXSPId.Set(aFieldData.Left(pos));
+        found = ETrue;
+        }
+
+    LOGSTRING("CEDContactorServiceOperator::ExtractServiceL: Done.");
+
+    return found;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::SearchServiceIdL
+// --------------------------------------------------------------------------
+//
+TUint32 CEDContactorServiceOperator::SearchServiceIdL(const TDesC& aFieldData)
+    {
+    LOGSTRING("CEDContactorServiceOperator::SearchServiceIdL");
+
+    TUint32 ret = (TUint32)KErrNotFound;
+    TInt err = KErrNone;
+    CDesCArrayFlat* nameArray = NULL;
+
+    RIdArray ids;
+    CleanupClosePushL(ids);
+
+    nameArray = new (ELeave) CDesCArrayFlat(2);
+    CleanupStack::PushL(nameArray);
+
+    CSPSettings* settings = CSPSettings::NewLC();
+
+    err = settings->FindServiceIdsL(ids);
+    User::LeaveIfError(err);
+    err = settings->FindServiceNamesL(ids, *nameArray);
+    User::LeaveIfError(err);
+
+    TInt count = nameArray->MdcaCount();
+    for (TInt i(0); i < count; i++)
+        {
+        // search the mathching service name
+        TPtrC p = nameArray->MdcaPoint(i);
+        if (!p.CompareF(aFieldData))
+            {
+            // Service found
+            ret = ids[i];
+
+            LOGSTRING("CEDContactorServiceOperator::SearchServiceIdL: Service found.");
+            break;
+            }
+        }
+    CleanupStack::PopAndDestroy( settings ); 
+    CleanupStack::PopAndDestroy( nameArray ); 
+    CleanupStack::PopAndDestroy( &ids ); 
+
+    LOGSTRING("CEDContactorServiceOperator::SearchServiceIdL: Done.");
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL
+// --------------------------------------------------------------------------
+//
+TUint32 CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL()
+    {
+    LOGSTRING("CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL");
+
+    /*
+     * LOGIC:
+     * -Find out services that support calling normal mobile/telephone numbers
+     * -If only 1 service, return the serviceid
+     * -If services are more than 1, then do not use serviceid.
+     */
+
+    TInt err = KErrNone;
+    TInt foundNo = 0;
+    TUint32 ret = (TUint32)KErrNotFound;
+
+    RIdArray ids;
+    CleanupClosePushL(ids);
+
+    CSPSettings* settings = CSPSettings::NewLC();
+
+    err = settings->FindServiceIdsL(ids);
+    User::LeaveIfError(err);
+    
+    CSPProperty* property = CSPProperty::NewLC();
+
+    TInt count = ids.Count();
+    for (TInt i(0); i < count; i++)
+        {
+        // Find out property
+        err = settings->FindPropertyL(ids[i],
+            EPropertyServiceAttributeMask, *property);
+
+        // If service have property
+        if (KErrNone == err)
+            {
+            // read the value of mask property
+            TInt mask = 0;
+            err = property->GetValue(mask);
+            if (KErrNone == err)
+                {
+                if ((mask & ESupportsMSISDNAddressing) &&
+                    (mask & ESupportsInternetCall))
+                    {
+                    // Found one.
+                    ret = ids[i];
+                    foundNo++;
+
+                    }// if mask
+                }// if err
+            }// if err
+
+        }// for
+
+    // If more than 1 service, do not use serviceid
+
+    if (1 < foundNo)
+    {
+        ret = (TUint32)KErrNotFound;
+    }
+
+    CleanupStack::PopAndDestroy( property );
+    CleanupStack::PopAndDestroy( settings );
+    CleanupStack::PopAndDestroy( &ids );
+
+    LOGSTRING("CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL: Done.");
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::LaunchCommunicationMethodL
+// --------------------------------------------------------------------------
+//
+void CEDContactorServiceOperator::LaunchCommunicationMethodL(
+    const TDesC& aFieldData)
+    {
+    LOGSTRING("CEDContactorServiceOperator::LaunchCommunicationMethodL");
+
+    __ASSERT_ALWAYS (NULL != &iParameter->iFullName, User::Leave (KErrArgument));
+    __ASSERT_ALWAYS (0 < iParameter->iFullName.Size(), User::Leave (KErrArgument));
+
+
+    TBool forcedService( EFalse );
+    
+    // Check forced service flag
+    if (CEDContactorService::TCSParameter::EForcedService &
+        iParameter->iControlFlag)
+        {
+        forcedService = ETrue;
+        }
+    
+    // If serviceid found, use it.
+    if ((TUint32)KErrNotFound != iServiceId)
+        {
+        LOGSTRING("CEDContactorServiceOperator::ExecuteL: ExecuteServiceL with serviceid");
+        CEDContactor::ExecuteServiceL(
+            iParameter->iCommTypeSelector,
+            aFieldData,
+            iParameter->iFullName,
+            forcedService,
+            iServiceId);
+        }
+    else
+        {
+        LOGSTRING("CEDContactorServiceOperator::ExecuteL: ExecuteServiceL without serviceid");
+        CEDContactor::ExecuteServiceL(
+            iParameter->iCommTypeSelector,
+            aFieldData,
+            iParameter->iFullName,
+            forcedService);
+        }
+
+    LOGSTRING("CEDContactorServiceOperator::LaunchCommunicationMethodL: Done.");
+    }
+
+// --------------------------------------------------------------------------
+// CEDContactorServiceOperator::CommunicationEnumMapper
+// --------------------------------------------------------------------------
+//
+TAiwCommAddressSelectType CEDContactorServiceOperator::CommunicationEnumMapper(
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommTypeSelector)
+    {
+    LOGSTRING("CEDContactorServiceOperator::CommunicationEnumMapper");
+
+    TAiwCommAddressSelectType type;
+
+    switch(aCommTypeSelector)
+        {
+        case VPbkFieldTypeSelectorFactory::EEmptySelector:
+            type = EAiwCommEmpty;
+            break;
+
+        case VPbkFieldTypeSelectorFactory::EVoiceCallSelector:
+            type = EAiwCommVoiceCall;
+            break;
+
+        case VPbkFieldTypeSelectorFactory::EUniEditorSelector:
+            type = EAiwCommUniEditor;
+            break;
+
+        case VPbkFieldTypeSelectorFactory::EEmailEditorSelector:
+            type = EAiwCommEmailEditor;
+            break;
+
+        case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector:
+            type = EAiwCommInstantMessaging;
+            break;
+
+        case VPbkFieldTypeSelectorFactory::EVOIPCallSelector:
+            type = EAiwCommVOIPCall;
+            break;
+
+        case VPbkFieldTypeSelectorFactory::EVideoCallSelector:
+            type = EAiwCommVideoCall;
+            break;
+
+        default:
+            LOGSTRING("CEDContactorServiceOperator::CommunicationEnumMapper: default -> Empty mapped.");
+            type = EAiwCommEmpty;
+            break;
+        }
+
+    LOGSTRING("CEDContactorServiceOperator::CommunicationEnumMapper: Done.");
+
+    return type;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorunieditoroperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of unieditor (SMS/MMS) operation
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorUniEditorOperation::CEDContactorUniEditorOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorUniEditorOperation::CEDContactorUniEditorOperation(const TDesC& aParam, const TDesC& aName) : 
+    CEDContactorOperation(aParam, aName)
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorUniEditorOperation::~CEDContactorUniEditorOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorUniEditorOperation::~CEDContactorUniEditorOperation()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorUniEditorOperation::NewLC()
+// -----------------------------------------------------------------------------
+//
+CEDContactorUniEditorOperation* CEDContactorUniEditorOperation::NewLC(const TDesC& aParam, const TDesC& aName)
+    {
+    CEDContactorUniEditorOperation* self = new (ELeave)CEDContactorUniEditorOperation(aParam, aName);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorUniEditorOperation::NewL()
+// -----------------------------------------------------------------------------
+//
+CEDContactorUniEditorOperation* CEDContactorUniEditorOperation::NewL(const TDesC& aParam, const TDesC& aName)
+    {
+    CEDContactorUniEditorOperation* self =
+            CEDContactorUniEditorOperation::NewLC( aParam, aName );
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorUniEditorOperation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorUniEditorOperation::ConstructL()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorUniEditorOperation::ExecuteLD()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorUniEditorOperation::ExecuteLD()
+    {
+    CleanupStack::PushL(this);
+    CEDMsgEditors::ExecuteL( KSenduiMtmUniMessageUid, iParam, iName );
+    CleanupStack::PopAndDestroy(this);
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorvideocalloperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the video call operation
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorVideocallOperation::CEDContactorVideocallOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVideocallOperation::CEDContactorVideocallOperation(const TDesC& aParam) : CEDContactorOperation(aParam)
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVideocallOperation::~CEDContactorVideocallOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVideocallOperation::~CEDContactorVideocallOperation()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVideocallOperation::NewLC()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVideocallOperation* CEDContactorVideocallOperation::NewLC(const TDesC& aParam)
+    {
+    CEDContactorVideocallOperation* self = new (ELeave)CEDContactorVideocallOperation(aParam);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVideocallOperation::NewL()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVideocallOperation* CEDContactorVideocallOperation::NewL(const TDesC& aParam)
+    {
+    CEDContactorVideocallOperation* self=
+            CEDContactorVideocallOperation::NewLC(aParam);
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVideocallOperation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorVideocallOperation::ConstructL()
+    {
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVideocallOperation::ExecuteLD()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorVideocallOperation::ExecuteLD()
+    {
+    CleanupStack::PushL(this);
+    CEDPhoneCall::ExecuteL(iParam, CEDPhoneCall::ECCACallTypeVideo, ETrue );
+    CleanupStack::PopAndDestroy(this);
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edcontactorvoipoperation.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of the voip operation
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEDContactorVOIPOperation::CEDContactorVOIPOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVOIPOperation::CEDContactorVOIPOperation(const TDesC& aParam, TUint32 aServiceId) : CEDContactorOperation(aParam), iServiceId(aServiceId)
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVOIPOperation::~CEDContactorVOIPOperation()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVOIPOperation::~CEDContactorVOIPOperation()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVOIPOperation::NewLC()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVOIPOperation* CEDContactorVOIPOperation::NewLC(const TDesC& aParam, TUint32 aServiceId)
+    {
+    CEDContactorVOIPOperation* self = new (ELeave)CEDContactorVOIPOperation(aParam, aServiceId);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVOIPOperation::NewL()
+// -----------------------------------------------------------------------------
+//
+CEDContactorVOIPOperation* CEDContactorVOIPOperation::NewL(const TDesC& aParam, TUint32 aServiceId)
+    {
+    CEDContactorVOIPOperation* self=CEDContactorVOIPOperation::NewLC(aParam, aServiceId);
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVOIPOperation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorVOIPOperation::ConstructL()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CEDContactorVOIPOperation::ExecuteLD()
+// -----------------------------------------------------------------------------
+//
+void CEDContactorVOIPOperation::ExecuteLD()
+    {
+    CleanupStack::PushL(this);
+    CEDPhoneCall::ExecuteL(iParam, CEDPhoneCall::ECCACallTypeVoIP, EFalse,
+                           iServiceId);
+    CleanupStack::PopAndDestroy(this);
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edmsgeditors.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Launching Editors.
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+#include <SendUiConsts.h>
+
+#ifndef KSenduiMtmOnlineAlbumUidValue
+#define KSenduiMtmOnlineAlbumUidValue       0x200009D5
+#endif
+
+/// Unnamed namespace for local definitions
+namespace
+	{
+
+#ifdef _DEBUG
+	enum TPanicCode
+		{
+		EPanicPreCond_ExecuteL = 1
+		};
+
+	void Panic(TPanicCode aReason)
+		{
+		_LIT(KPanicText, "CCmsMsgEditors");
+		User::Panic (KPanicText, aReason);
+		}
+#endif // _DEBUG
+
+
+	} /// namespace
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CEDMsgEditors::ExecuteL
+// ---------------------------------------------------------
+void CEDMsgEditors::ExecuteL( const TUid aServiceUid,
+		const TDesC& aAddress, const TDesC& aName )
+	{
+    __ASSERT_DEBUG (NULL != &aAddress && 0 < aAddress.Size() &&
+                        NULL != &aName && 0 < aName.Size() && 
+                        NULL != &aServiceUid, Panic (EPanicPreCond_ExecuteL));
+
+	//ParsePhoneNumber may only short length of phonenumber, 
+	//so it's safe to use same lenght as given number and do the copy.
+	HBufC* numBuf = aAddress.AllocLC();
+	TPtr numDesc( numBuf->Des() );
+
+	//Unieditor could also use email adresses. If parser returns EFalse, do not care. 
+	if ( KSenduiMtmUniMessageUid == aServiceUid)
+		{
+		CommonPhoneParser::ParsePhoneNumber( numDesc,
+				CommonPhoneParser::EPhoneClientNumber );
+		}
+
+	CSendUi* sendui = CSendUi::NewLC ();
+	CMessageData* msgdata = CMessageData::NewLC ();
+	msgdata->AppendToAddressL( *numBuf, aName);
+	
+	if (KSenduiMtmSmtpUid == aServiceUid)
+	    {
+	    const TUid KMfEUidValue = { 0x1020695B }; //Where is this defined?
+	    TBool mailAvailabe = EFalse;
+	    TBool mfeAvailable = EFalse;
+	    TUid selectedServiceID = KNullUid;
+	    RPointerArray<CSendingServiceInfo> availableServices;
+	    sendui->AvailableServicesL(availableServices, KGenericMtmPlugin);
+	    for (TInt i=0; i < availableServices.Count(); i++)
+	        {
+	        if (!(availableServices[i]->ServiceFeatures() & CSendingServiceInfo::EServiceInValid))
+	            {
+    	        if (availableServices[i]->ServiceId() == KSenduiMtmSmtpUid)
+    	            {
+                    mailAvailabe = ETrue;
+    	            }
+    	        else if (availableServices[i]->ServiceId() ==  KMfEUidValue)
+    	            {
+    	            selectedServiceID = availableServices[i]->ServiceId();
+    	            mfeAvailable = ETrue;
+    	            }
+	            }
+	        }
+	    availableServices.ResetAndDestroy();
+	    	    
+	    if (mailAvailabe && mfeAvailable)
+	        {
+    	    CArrayFixFlat<TUid>* servicesToDim = new (ELeave) CArrayFixFlat<TUid>(1);
+    	    CleanupStack::PushL(servicesToDim);
+    	    
+    	    servicesToDim->AppendL(KSenduiTechnologySmsUid);
+    	    servicesToDim->AppendL(KSenduiTechnologyMmsUid);
+    	    //servicesToDim->AppendL(KSenduiTechnologyMailUid); Email is not to be dimmed
+    	    servicesToDim->AppendL(KSenduiTechnologyUniEditorUid);
+    	    servicesToDim->AppendL(KSenduiTechnologyIrUid);
+    	    servicesToDim->AppendL(KSenduiTechnologyBtUid);
+    	    servicesToDim->AppendL(KSenduiTechnologyIMUid);	    
+    	    servicesToDim->AppendL(KMmsDirectUpload);
+    	    servicesToDim->AppendL(KMmsIndirectUpload);
+    	    servicesToDim->AppendL(KMmsUploadService1Id);
+    	    servicesToDim->AppendL(KMmsUploadService2Id);
+    	    servicesToDim->AppendL(KMmsUploadService3Id);
+    	    servicesToDim->AppendL(KMmsUploadService4Id);
+    	    const TUid KShareOnline = { KSenduiMtmOnlineAlbumUidValue }; // From SendUiInternalConsts.h
+    	    servicesToDim->AppendL(KShareOnline);
+    	    
+    	    sendui->ShowQueryAndSendL(msgdata, KCapabilitiesForAllServices, servicesToDim);
+    	    servicesToDim->Reset();
+    	    CleanupStack::PopAndDestroy(servicesToDim);
+	        }
+	    else if (mfeAvailable)
+	        {
+	        sendui->CreateAndSendMessageL(selectedServiceID, msgdata, KNullUid, EFalse);
+	        }
+	    else
+	        {
+	        sendui->CreateAndSendMessageL(aServiceUid, msgdata, KNullUid, EFalse);
+	        }
+	    }
+	else
+	    {
+	    sendui->CreateAndSendMessageL(aServiceUid, msgdata, KNullUid, EFalse);
+	    }
+
+	CleanupStack::PopAndDestroy( 3, numBuf ); //msgdata, sendui
+
+	return;
+	}
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edphonecall.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Launching Call.
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+_LIT8( KAiwContentTypeAll, "*" );
+
+/// Unnamed namespace for local definitions
+namespace
+	{
+
+#ifdef _DEBUG
+	enum TPanicCode
+		{
+		EPanicPreCond_ExecuteL = 1,
+		EPanicPreCond_ExecuteL2
+		};
+
+	void Panic(TPanicCode aReason)
+		{
+		_LIT(KPanicText, "CCmsPhoneCall");
+		User::Panic (KPanicText, aReason);
+		}
+#endif // _DEBUG
+
+
+	} /// namespace
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CEDPhoneCall::ExecuteL
+// ---------------------------------------------------------
+void CEDPhoneCall::ExecuteL( const TDesC& aPhoneNumber, TEDPhoneCallType aCallType,
+        TBool aForcedCallType, TUint32 aServiceId )
+	{   
+    __ASSERT_DEBUG( NULL != &aPhoneNumber && 0 < aPhoneNumber.Size(), Panic(EPanicPreCond_ExecuteL) );
+
+#ifdef _DEBUG
+	HBufC8* buf = HBufC8::NewLC( aPhoneNumber.Length() );
+	buf->Des().Copy( aPhoneNumber );
+	TPtrC8 numberDesc( buf->Des() );
+	CleanupStack::PopAndDestroy( buf );
+#endif
+
+	//aPhoneNumber will be an xsp id of format "ServiceName:UserId"
+	//here we need to truncate the servicename and pass only the UserId
+	
+    //Find if aPhoneNumber of type "ServiceName:UserId"
+	//if true, then remove the service part
+    TPtrC phoneNum( aPhoneNumber );
+    TInt phoneNumberStart = phoneNum.Locate(':');
+    
+    if ( KErrNotFound != phoneNumberStart )
+        {
+        phoneNumberStart++; //To get rid of ':'
+        phoneNum.Set( phoneNum.Mid( phoneNumberStart ) );
+        }
+    
+    HBufC* numBuf = phoneNum.AllocLC();
+    TPtr numDesc( numBuf->Des() );
+	CommonPhoneParser::ParsePhoneNumber( numDesc,
+			CommonPhoneParser::EPhoneClientNumber ); 
+
+	CAiwDialDataExt* dialDataExt = CAiwDialDataExt::NewLC();
+	dialDataExt->SetPhoneNumberL( *numBuf );
+	switch (aCallType)
+	    {
+	    case ECCACallTypeVoice:
+	        if ( aForcedCallType )
+	            {
+	            // Use this with Action menu's Voice call icon
+	            dialDataExt->SetCallType( CAiwDialData::EAIWForcedCS );
+	            }
+	        else
+	            {
+	            // To be on the safe side, use this with Send key and big Call icon
+	            dialDataExt->SetCallType( CAiwDialData::EAIWVoice );
+	            }
+	        break;
+	    case ECCACallTypeVoIP:
+	        dialDataExt->SetServiceId( aServiceId );
+	        dialDataExt->SetCallType( CAiwDialData::EAIWVoiP );
+	        break;
+	    case ECCACallTypeVideo:
+	        dialDataExt->SetCallType( CAiwDialData::EAIWForcedVideo );
+	        break;
+	    default:
+	        dialDataExt->SetCallType( CAiwDialData::EAIWForcedCS );
+	        break;
+	    }
+
+	dialDataExt->SetWindowGroup( CCoeEnv::Static()->RootWin().Identifier() );
+
+	DoAIWCallL( *dialDataExt );
+
+	CleanupStack::PopAndDestroy( dialDataExt );
+	CleanupStack::PopAndDestroy( numBuf );
+	}
+
+// ---------------------------------------------------------
+// CEDPhoneCall::DoAIWCallL
+// ---------------------------------------------------------
+void CEDPhoneCall::DoAIWCallL( CAiwDialDataExt& aDialData )
+	{
+	RCriteriaArray interest;
+	CleanupClosePushL( interest );
+	CAiwCriteriaItem* criteria = CAiwCriteriaItem::NewLC( KAiwCmdCall,
+			KAiwCmdCall, KAiwContentTypeAll );
+	criteria->SetServiceClass( TUid::Uid(KAiwClassBase) );
+	User::LeaveIfError( interest.Append( criteria ) );
+
+	CAiwServiceHandler* serviceHandler = CAiwServiceHandler::NewLC();
+	serviceHandler->AttachL( interest );
+
+	CAiwGenericParamList& paramList = serviceHandler->InParamListL();
+	aDialData.FillInParamListL( paramList );
+
+	serviceHandler->ExecuteServiceCmdL( KAiwCmdCall, paramList,
+			serviceHandler->OutParamListL(), 0, NULL );
+	serviceHandler->DetachL( interest );
+
+	CleanupStack::PopAndDestroy( serviceHandler );
+	CleanupStack::PopAndDestroy( criteria );
+	CleanupStack::PopAndDestroy( &interest );
+	}
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Build info file
+*
+*/
+
+#include <platform_paths.hrh>
+
+#include "../edcontactor/group/bld.inf"
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/easydialingplugin.iby             CORE_APP_LAYER_IBY_EXPORT_PATH(easydialingplugin.iby)
+../rom/easydialingpluginresources.iby    LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(easydialingpluginresources.iby)
+
+
+../conf/easydialing.confml               APP_LAYER_CONFML(easydialing.confml)
+../conf/easydialing_200212A0.crml        APP_LAYER_CRML(easydialing_200212A0.crml)
+../cenrep/200212A0.txt                   /epoc32/data/z/private/10202be9/200212A0.txt
+../cenrep/200212A0.txt                   /epoc32/release/winscw/udeb/z/private/10202be9/200212A0.txt
+
+../inc/dialingextensioninterface.h       |../../../inc/dialingextensioninterface.h
+../inc/easydialingcommands.hrh           |../../../inc/easydialingcommands.hrh
+../inc/easydialingcrkeys.h               APP_LAYER_PLATFORM_EXPORT_PATH(easydialingcrkeys.h)
+
+../loc/easydialing.loc                   APP_LAYER_LOC_EXPORT_PATH(easydialing.loc)
+
+../data/easydialing_stub.sis              /epoc32/data/z/system/install/easydialing_stub.sis
+
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+  OPTION TARGETFILE easydialing.mif
+  OPTION HEADERFILE easydialing.mbg
+  OPTION SOURCEFILE iconlist.txt		  
+END
+
+PRJ_MMPFILES
+easydialingplugin.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/group/easydialingplugin.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project config file
+*
+*/
+
+#include <platform_paths.hrh>
+#include "data_caging_paths.hrh"
+#include "../inc/easydialingconstants.hrh"
+
+TARGET          easydialingplugin.dll
+CAPABILITY      CAP_ECOM_PLUGIN
+
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x200212A0 // EASYDIALING_PLUGIN_DLL_UID (Uncommented because of OST)
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          dllmain.cpp
+SOURCE          easydialingplugin.cpp
+SOURCE          easydialinglistbox.cpp
+SOURCE          easydialinglistboxdata.cpp
+SOURCE          easydialinglistboxitemdrawer.cpp
+SOURCE          easydialinglistboxview.cpp
+SOURCE	        easydialingcenreplistener.cpp
+SOURCE          easydialingcontactdata.cpp
+SOURCE          easydialingcontactdatamanager.cpp
+SOURCE          easydialingutils.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../edcontactor/inc
+USERINCLUDE     ../traces
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE    /epoc32/include/internal
+SYSTEMINCLUDE    /epoc32/include/ecom
+
+SOURCEPATH      ../data
+
+START RESOURCE 200212A0.rss
+    LANG    SC
+    TARGET  easydialingplugin.rsc
+END
+
+START RESOURCE easydialingpluginresources.rss
+    HEADER
+    TARGETPATH  /resource
+    TARGET      easydialingpluginresources.rsc
+	LANGUAGE_IDS
+END
+
+
+// Symbian framework libraries
+
+LIBRARY euser.lib
+LIBRARY ECom.lib
+LIBRARY cone.lib
+LIBRARY avkon.lib
+LIBRARY eikcore.lib
+LIBRARY eikctl.lib
+LIBRARY eikcoctl.lib
+LIBRARY bafl.lib
+LIBRARY gdi.lib 
+LIBRARY egul.lib
+LIBRARY	efsrv.lib
+LIBRARY	ws32.lib
+LIBRARY fbscli.lib
+LIBRARY bitgdi.lib
+LIBRARY	etext.lib
+
+// Avkon, Avkon skin and Avkon layout libraries.
+LIBRARY aknicon.lib
+LIBRARY aknlistloadertfx.lib
+LIBRARY aknskins.lib 
+LIBRARY aknskinsrv.lib 
+LIBRARY aknswallpaperutils.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY cdlengine.lib
+LIBRARY aknlayout2.lib
+
+// Transition effects
+LIBRARY gfxtrans.lib
+
+// AIW library
+LIBRARY servicehandler.lib
+
+// Predictive search libraries
+LIBRARY PcsUtils.lib
+LIBRARY PsServerClientAPI.lib
+
+// Virtual phonebook library
+LIBRARY VPbkEng.lib
+
+// Phonebook engine
+LIBRARY	pbkeng.lib
+
+// ECE Communication launcher library
+LIBRARY ccaclient.lib
+
+// Central repository
+LIBRARY centralrepository.lib   
+LIBRARY commonengine.lib
+LIBRARY cenrepnotifhandler.lib 
+
+// CPbk2ImageManager
+LIBRARY pbk2presentation.lib
+
+// bitmap handling
+LIBRARY bitmaptransforms.lib
+
+// Easy dialing own contactor module.
+LIBRARY edcontactor.lib
+
+// Service provider settings api
+LIBRARY serviceprovidersettings.lib
+
+// CMS library used for getting information about contacts.
+//LIBRARY 		  cmsclient.lib
+
+// Libraries used for R&D purposes only
+DEBUGLIBRARY flogger.lib
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/group/iconlist.txt	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,3 @@
+-c8,8 qgn_indi_org_arrow_right.svg
+-c8,8 qgn_indi_org_arrow_left.svg
+-c8,8 qgn_indi_org_arrow_down.svg
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/dialingextensioninterface.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,227 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Ecom interface header
+*
+*/
+
+#ifndef __CDIALEREXTENSIONINTERFACE_H
+#define __CDIALEREXTENSIONINTERFACE_H
+
+#include <ecom/ecom.h>
+#include <coecntrl.h>
+#include <eikmenup.h>
+
+
+/** UID of dialing extension ECom interface. */
+const TUid KEasyDialingPluginInterfaceUID = { 0x200212A1 };
+
+/** UID of easy dialing plugin. */
+const TUid KEasyDialingPluginImplementationUID = { 0x200212A0 };
+
+/**
+ * Observer class for easy dialing.
+ */
+class MDialingExtensionObserver
+    {
+public:
+    
+    /**
+     * Identifiers for easy dialing events.
+     */
+    typedef enum TEvent_enum
+        {
+        
+        /** Contact search has completed. */
+        ESearchComplete = 1,
+        
+        /** Easy dialing has gained or given up the focus. */
+        EFocusChanged,
+        
+        /** Easy dialing has started communication launcher (a.k.a. contact view) */
+        ECCALauncherStarted,
+        
+        /** Communication launcher a.k.a. contact view has been close. */
+        ECCALauncherExit,
+        
+        /** Easy dialing feature has been switched on. */
+        EEasyDialingEnabled,
+        
+        /** Easy dialing feature has been switched off. */
+        EEasyDialingDisabled,
+        
+        /** User has started communication (SMS, IM, E-mail ...). Not used for phone calls. */
+        ECommunicationStarted,
+        
+        /** User has cancelled communication once started. */
+        ECommunicationCancelled
+       
+        } TEvent;
+
+
+    /**
+     * Handles event from easy dialing plugin.
+     * 
+     * @param aEvent    Event id.
+     * 
+     */
+    virtual void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ) = 0;
+    };
+
+
+
+
+/**
+ * Easy dialing plugin class.
+ */
+
+class CDialingExtensionInterface : public CCoeControl
+    {
+public:
+    
+    /**
+     * Creates an instance of plugin.
+     */
+    static CDialingExtensionInterface* NewL();
+
+
+    /**
+     * Destructor.
+     */
+    virtual ~CDialingExtensionInterface();
+    
+    
+    /**
+     * Does the rest of the initialization of the plugin.
+     * Must be called after NewL before using any other 
+     * functions of the plugin.
+     * 
+     * @param aParent   Parent container of the plugin.
+     */
+    virtual void InitializeL( CCoeControl& aParent ) = 0;
+    
+
+    /**
+     * Resets the previous search results. 
+     */
+    virtual void Reset() = 0;
+    
+        
+    /**
+     * Adds an observer to the plugin.
+     * 
+     * @param aObserver Observer to be added.
+     */
+    virtual void AddObserverL( MDialingExtensionObserver* aObserver ) = 0;
+   
+    
+    /**
+     * Removes an observer from the plugin.
+     * 
+     * @param aObserver Observer to be removed.
+     */
+    virtual void RemoveObserver( MDialingExtensionObserver* aObserver ) = 0;
+
+    
+    /**
+     * Sets input string (search string) to plugin.
+     * 
+     * @param aDesC Input string descriptor.
+     */
+    virtual void SetInputL( const TDesC& aDesC ) = 0;
+
+
+    /**
+     * Gets the resource id of plugin's control button area resource.
+     * 
+     * @return  Resource id.
+     */
+    virtual TInt CbaResourceId( ) = 0;
+    
+    
+    /**
+     * Gets the resource id of plugin's menu bar resource.
+     * 
+     * @return  Resource id.
+     */
+    virtual TInt MenuResourceId() = 0;
+    
+    
+    /**
+     * Gets the resource id of plugin's menu bar resource.
+     * 
+     * @param   aMenuPane   Menu pane
+     * @param   aMenuResourceId Menu bar resource id.
+     * @return  Resource id.
+     */
+    virtual TBool InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId ) = 0;
+
+    
+    /**
+     * Handle a command. Supported command IDs are defined in header
+     * easydialingcommands.hrh.
+     * 
+     * @param   aCommand   Command id.
+     * @return  ETrue if command was handled, EFalse otherwise.
+     */
+    virtual TBool HandleCommandL( TInt aCommand ) = 0;
+
+    
+    /**
+     * Tells if extension is currently enabled from settings.
+     * @return  ETrue if extension is enabled, EFalse otherwise.
+     */
+    virtual TBool IsEnabled() const = 0;
+    
+private: // data
+
+    /** ECom instance identifier key. */
+    TUid iDestructorIDKey;
+    };
+
+
+
+// INLINE FUNCTIONS
+
+// -----------------------------------------------------------------------------
+// CDialingExtensionInterface::NewL
+//
+// -----------------------------------------------------------------------------
+//
+inline CDialingExtensionInterface* CDialingExtensionInterface::NewL()
+    {
+    // TEComResolverParams resolverParams; // data passed to the plugin
+    // resolverParams.SetDataType();    // no data yet
+
+    TAny* ptr = REComSession::CreateImplementationL( KEasyDialingPluginImplementationUID,
+                                                     _FOFF( CDialingExtensionInterface, iDestructorIDKey )
+                                                     // resolverParams 
+                                                    );
+
+    return STATIC_CAST( CDialingExtensionInterface*, ptr );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDialingExtensionInterface::~CDialingExtensionInterface()
+//
+// -----------------------------------------------------------------------------
+//
+inline CDialingExtensionInterface::~CDialingExtensionInterface()
+    {
+    REComSession::DestroyedImplementation( iDestructorIDKey );
+    }
+    
+#endif //__CDIALEREXTENSIONINTERFACE_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcenreplistener.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Grid for easy dialing action menu.
+*
+*/
+
+
+#ifndef __EASYDIALINGCENREPLISTENER_H__
+#define __EASYDIALINGCENREPLISTENER_H__
+
+//  INCLUDES
+#include <e32base.h>
+#include <cenrepnotifyhandler.h> // link against commonengine.lib
+
+// FORWARD DECLARATIONS
+class CRepository;
+class CenRepNotifyHandler;
+class MEasyDialingCenrepListenerObserver;
+
+// CLASS DECLARATION
+
+/**
+*  Central Repository event monitor
+*/
+class CEasyDialingCenrepListener
+    : public CBase, public MCenRepNotifyHandlerCallback
+{
+    public:  // Constructors and destructor
+
+        /**
+        * Static constructor. Construct a CEasyDialingCenrepListener
+        * using two phase construction, and return a pointer to the created object.
+        * @param    aObserver   Pointer to observer.
+        * @return   Created object.
+        */
+        static CEasyDialingCenrepListener* NewL(MEasyDialingCenrepListenerObserver* aObserver);
+        
+        /**
+        * Destructor. Destroy the object and release all memory objects
+        */
+        virtual ~CEasyDialingCenrepListener();
+
+    public:
+
+        /**
+        * Gets the easydialing on/off cenrep key value
+        * @return   The key value
+        */
+        TInt Value() const;
+        
+        /**
+         * Sets the easydialing on/off cenrep key value
+         * @param aValue Value to be set.
+         */
+        void SetEasyDialingSettingsValue( const TInt aValue );
+        
+        /**
+         * Handles cenrep notifications.
+         * @param   Id of the changed key.
+         */
+       void HandleNotifyGeneric( TUint32 aId );
+              
+    private:
+
+        /**
+        * Perform the first phase of two phase construction
+        * @param    aObserver   Pointer to observer
+        */
+        CEasyDialingCenrepListener(MEasyDialingCenrepListenerObserver* aObserver);
+
+        /**
+        * Second phase constructor
+        */
+        void ConstructL();
+
+    private:       
+
+        /** The central repository handle. Owned. */
+        CRepository* iClient;
+
+        /** Observer to this class. Not owned. */
+        MEasyDialingCenrepListenerObserver* iObserver;
+        
+        /** The cenrep value for easydialing setting. */
+        TInt iEasyDialingSettingValue;
+        
+        /** The cenrep value for contact thumbnail setting (shown / not shown). */
+        TInt iContactThumbnailsSettingsValue;
+     
+        /** Cenrep notify handler. Owned. */
+        CCenRepNotifyHandler* iNotifyHandler;
+};
+
+#endif      // __EASYDIALINGCENREPLISTENER_H__
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcommands.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing command ids.
+*
+*/
+
+#ifndef __EASYDIALINGCOMMANDS_HRH__
+#define __EASYDIALINGCOMMANDS_HRH__
+
+/*
+ * Easy dialing commands live in the same id space with several other 
+ * enumerations. It's range is chosen so that it does not conflict these 
+ * others.
+ * 
+ * The other enumerations are:
+ * - phoneviewcommanddefinitions from 1 to currently ~200
+ * - phoneappcommands id space from 6000 upwards
+ */
+
+
+enum 
+    {
+    EEasyDialingVoiceCall = 400,
+    EEasyDialingVideoCall,
+    EEasyDialingSendMessage,
+    EEasyDialingOpenContact,
+    EEasyDialingCallHandlingActivated,
+    EEasyDialingEnterKeyAction,
+    EEasyDialingOn,
+    EEasyDialingOff,
+    EEasyDialingClosePopup
+    };
+
+#endif //__EASYDIALINGCOMMANDS_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingconstants.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing constant definitions.
+*
+*/
+
+#ifndef __EASYDIALINGCONSTANTS_HRH__
+#define __EASYDIALINGCONSTANTS_HRH__
+
+/**
+ * Dll uid for plugin.
+ */
+#define EASYDIALING_PLUGIN_DLL_UID 0x200212A0
+
+/**
+ * Ecom interface uid plugin
+ */
+#define EASYDIALING_PLUGIN_IF_UID 0x200212A1
+
+/**
+ * Ecom implementation uid plugin. Same as DLL UID.
+ */
+#define EASYDIALING_PLUGIN_ECOM_IMPL_UID 0x200212A0
+
+#endif //__EASYDIALINGCONSTANTS_HRH__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcontactdata.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing contact data manager. 
+*
+*/
+
+
+#ifndef __EASYDIALINGCONTACTDATA_H__
+#define __EASYDIALINGCONTACTDATA_H__
+
+class CFbsBitmap;
+class MVPbkContactLink;
+
+/**
+ *  Container for easy dialing contact data for one contact.
+ */
+class CEasyDialingContactData : public CBase
+    {
+public:
+    
+    /**
+    * Constructor.
+    */
+    CEasyDialingContactData(MVPbkContactLink* aContactLink);
+    
+    /**
+     * Destructor.
+     */
+    ~CEasyDialingContactData();
+    
+
+    /**
+     * Gets a pointer to contact link.
+     * @return  Pointer to contact link object.
+     */
+    MVPbkContactLink* ContactLink();
+    
+    
+    /**
+     * Get's contact's thumbnail bitmap.
+     * @return  Pointer to bitmap object.
+     */
+    CFbsBitmap* Thumbnail();
+    
+    
+    /**
+     * Setting function for contact thumbnail.
+     * @param   aThumnail   Thumbnail to set.
+     */
+    void SetThumbnail(CFbsBitmap* aThumbnail);
+    
+    
+    /**
+     * Get favourite status of the contact.
+     * @return  ETrue, if contact is a favourite, EFalse otherwise.
+     */
+    TBool Fav();
+    
+    
+    /**
+     * Sets favourite status of the contact.
+     * @param   aFav    Boolean value containing the status.
+     */
+    void SetFav(TBool aFav);
+    
+    
+    /**
+     * Returns the loading status of the contact.
+     * @return  ETrue, if contact data loading has completed, EFalse otherwise.
+     */
+    TBool IsLoaded();
+    
+    
+    /**
+     * Sets loading status to complete.
+     */
+    void LoadingComplete();
+
+    
+    /**
+     * Deletes the thumbnail image of the contact.
+     */
+    void DeleteThumbnail();
+    
+    
+    /**
+     * Return ETrue if voice call is available.
+     */
+    TBool VoiceCallAvailable();
+    
+    
+    /**
+     * Sets voice call availability status.
+     * @param   aVailable   Availability of voice call.
+     */
+    void SetVoiceCallAvailable( TBool aVailable );
+    
+    
+    /**
+     * Return ETrue if video call is available.
+     */
+    TBool VideoCallAvailable();
+    
+    
+    /**
+     * Sets video call availability status.
+     * @param   aVailable   Availability of video call.
+     */
+    void SetVideoCallAvailable( TBool aVailable );
+    
+    
+    /**
+     * Return ETrue if uni-editor (SMS, MMS, e-mail) is available.
+     */
+    TBool UniEditorAvailable();
+    
+    
+    /**
+     * Sets uni-editor availability status.
+     * @param   aVailable   Availability of uni-editor.
+     */
+    void SetUniEditorAvailable( TBool aVailable );
+    
+private:
+    
+    /** Contact link. Owned. */
+    MVPbkContactLink* iContactLink;
+    
+    /** Thumbnail bitmap. Owned. */
+    CFbsBitmap* iThumbnail;
+
+    /** ETrue if this is a favourite contact. */
+    TBool iFav;
+       
+    /** ETrue is asynchronous loading of contact data is complete.  */
+    TBool iLoaded;
+       
+    /** ETrue if voice call is a possible action with this contact. */
+    TBool iVoiceCallAvailable;
+    
+    /** ETrue if video call is a possible action with this contact. */
+    TBool iVideoCallAvailable;
+
+    /** ETrue if SMS or MMS is a possible action with this contact. */
+    TBool iUniEditorAvailable;
+    };
+
+#endif //__EASYDIALINGCONTACTDATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcontactdatamanager.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing contact data manager.
+*
+*/
+
+
+#ifndef __EASYDIALINGCONTACTDATAMANAGER_H__
+#define __EASYDIALINGCONTACTDATAMANAGER_H__
+
+#include <MPbk2ImageOperationObservers.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactStoreObserver.h>
+#include <MVPbkOperationObserver.h>
+#include <MVPbkContactViewBase.h>
+#include <TPbk2ImageManagerParams.h>
+#include <MPbkGlobalSetting.h> // For name order setting
+#include <MVPbkContactViewObserver.h>
+#include "easydialingcontactdata.h"
+
+// FORWARD DECLARATIONS
+class CVPbkContactManager;
+class MContactDataManagerObserver;
+class MVPbkFieldType;
+class CPbk2ImageManager;
+class CVPbkTopContactManager;
+class CRepository;
+
+/**
+ *  CEasyDialingContactDataManager
+ *  Handles the loading and storing of thumbnail bitmaps
+ */
+class CEasyDialingContactDataManager : 
+        public CBase,
+        public MPbk2ImageGetObserver,
+        public MVPbkSingleContactOperationObserver,
+        public MVPbkContactStoreObserver,
+        public MVPbkOperationErrorObserver,
+        public MVPbkOperationResultObserver<MVPbkContactViewBase*>,
+        public MPbkGlobalSettingObserver,
+        public MVPbkContactViewObserver
+        
+    {
+public:
+        
+    /**
+     * Contact name display order 
+     */
+    enum TNameOrder
+        {
+        EFirstnameLastname,
+        ELastnameFirstname
+        };
+        
+public:
+    
+    /**
+    * Constructor.
+    */
+    CEasyDialingContactDataManager(CVPbkContactManager* aContactManager);
+    
+    
+    /**
+     * Destructor.
+     */
+    ~CEasyDialingContactDataManager();
+    
+    
+    /**
+     * Second phase constructor of the class.
+     */
+    void ConstructL();
+    
+    /**
+    * Sets the observer. Observer is notified when thumbnail loading is complete
+    * @param aObserver
+    */
+    void SetObserver(MContactDataManagerObserver* aObserver);
+    
+    /**
+    * Sets the size of the thumbnails. If the loaded thumbnail is larger than
+    * the set size, thumnail is scaled to the size. If the set size is different
+    * from the old one, deletes all loaded thumbnails, which causes them to be
+    * reloaded when they are needed the next time.
+    * @param aSize The size of the thumbnails
+    */
+    void SetThumbnailSize(const TSize& aSize);
+    
+    /**
+    * Gets an id string for the thumbnail, if thumbnail exists for the contact.
+    * Used when the listbox items are created.
+    * @param aContact Contact link
+    * @param aMatchThumbnail If true, tries to match the link to the existing thumbnails
+    * @param aFav Is this contact a favourite
+    * @return id string. caller needs to delete this.
+    */
+    HBufC* GetThumbnailIdL( MVPbkContactLink* aContact, TBool aMatchThumbnail, TBool aFav );
+    
+    /**
+    * Gets the thumbnail for a contact item. If thumbnail is not loaded, starts
+    * loading it.
+    * @param aContact Contact link
+    * @param aThumbnail Outparam. Contact thumbnail. NULL if contact doesn't have thumbnail
+    * @param aFav Outparam. Favourite status
+    * @return true if contact data has been loaded
+    */
+    TBool GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav);
+    
+    /**
+    * Deletes all loaded thumbnails and cancel asynchronous operations.
+    */
+    void Reset();
+    
+    /**
+    * Returs ETrue if voice call is available for current contact.
+    */
+    TBool VoiceCallAvailable( TInt aIndex );
+    
+    
+    /**
+    * Returs ETrue if video call is available for current contact.
+    */
+    TBool VideoCallAvailable( TInt aIndex );
+    
+    
+    /**
+    * Returs ETrue if uni-editor is available for current contact.
+    */
+    TBool UniEditorAvailable( TInt aIndex );
+    
+    
+    /**
+    * Returns HBufC8 descriptor containing MVPbkContactLink
+    * link packaged.
+    */
+    HBufC8* ContactLinkLC( TInt aIndex );
+    
+    
+    /**
+     * Sets the iContactThumbnailSetting member variable to either true or false 
+     * which is read and if it is false then thumbnails are not shown 
+     * @param aContactThumbnailSetting which is cenrep value for ContactThumbnailSetting
+     */
+    void SetContactThumbnailSetting( TInt aContactThumbnailSetting );
+    
+    /**
+     * Gets the iContactThumbnailSetting member variable to either true or false 
+     * which is read and if it is false then thumbnails are not shown 
+     * returns iContactThumbnailSetting which is cenrep value for ContactThumbnailSetting
+     */
+    TBool GetContactThumbnailSetting( );
+    
+
+    /**
+    * Flushes the asynchronous contact data of all contacts.
+    */    
+    void Reload();
+    
+    /**
+    * Checks if contact link is a favourite. This is meant to be used for contacts that
+    * don't yet have contact data item. Since this needs to go through all the favourites,
+    * unnecessary calls should be avoided.
+    */    
+    TBool IsFavL( MVPbkContactLink* aLink );
+    
+    /**
+    * @return the number of favourites in contact db
+    */
+    TInt NumberOfFavsL();
+    
+    /**
+    * Creates contact link to a favourite contact.
+    * @param aIndex Index of the favourite in favourites view
+    * @return the newly created link (added to cleanupstack)
+    */
+    MVPbkContactLink* FavLinkLC( TInt aIndex );
+
+    /**
+    * Creates contact string for favourite contact. This string can be used directly
+    * in the contact listbox. F.ex. "Firstname Surname\tCompanyname".
+    * @param aIndex Index of the favourite in favourites view
+    * @param aNameOrder Name ordering to be used
+    * @return the newly created string (added to cleanupstack)
+    */
+    HBufC* FavContactStringLC( TInt aIndex, TNameOrder aNameOrder );
+    
+    /**
+     * @return Contact name display order
+     */
+    TNameOrder NameOrder();
+
+    /**
+     * Pause the loading of contact data. This is used to make sure listbox is responsive
+     * and smooth during panning and flicking.
+     * @param aPause Pause on/off
+     */
+    void Pause( TBool aPause );
+
+public:
+    
+    /**
+     * From MPbk2ImageGetObserver.
+     */
+    void Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap);
+    
+    
+    /**
+     * From MPbk2ImageGetObserver.
+     */
+    void Pbk2ImageGetFailed(MPbk2ImageOperation& aOperation, TInt aError);
+
+public:
+    
+    /**
+     * From MPbkGlobalSettingObserver.
+     */
+    void SettingChangedL( MPbkGlobalSetting::TPbkGlobalSetting aKey );
+    
+private: 
+    
+    /**
+     * From MVPbkSingleContactOperationObserver.
+     */
+    void VPbkSingleContactOperationComplete(
+            MVPbkContactOperationBase& aOperation,
+            MVPbkStoreContact* aContact );
+
+    
+    /**
+     * From MVPbkSingleContactOperationObserver.
+     */
+    void VPbkSingleContactOperationFailed(
+            MVPbkContactOperationBase& aOperation, 
+            TInt aError );
+
+private:
+    
+    
+    /**
+     * From MVPbkContactStoreObserver.
+     */
+    void StoreReady( MVPbkContactStore& aContactStore );
+
+
+    /**
+     * From MVPbkContactStoreObserver.
+     */
+    void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason );
+    
+    
+    /**
+     * From MVPbkContactStoreObserver.
+     */
+    void HandleStoreEventL( MVPbkContactStore& aContactStore, 
+            TVPbkContactStoreEvent aStoreEvent );
+
+private:
+    /**
+     * From MVPbkOperationErrorObserver.
+     */
+    void VPbkOperationFailed(
+            MVPbkContactOperationBase* aOperation,
+            TInt aError );
+
+private:
+    /**
+     * From MVPbkOperationResultObserver.
+     */
+    void VPbkOperationResultCompleted(
+            MVPbkContactOperationBase* aOperation,
+            MVPbkContactViewBase* aOperationResult );
+
+    
+private:
+    /**
+     * From MVPbkContactViewObserver.
+     * For observing changes to favourites view.
+     */
+    virtual void ContactViewReady(
+            MVPbkContactViewBase& aView );
+
+    virtual void ContactViewUnavailable(
+            MVPbkContactViewBase& aView );
+
+    virtual void ContactAddedToView(
+            MVPbkContactViewBase& aView, 
+            TInt aIndex, 
+            const MVPbkContactLink& aContactLink );
+
+    virtual void ContactRemovedFromView(
+            MVPbkContactViewBase& aView, 
+            TInt aIndex, 
+            const MVPbkContactLink& aContactLink );
+
+    virtual void ContactViewError(
+            MVPbkContactViewBase& aView, 
+            TInt aError, 
+            TBool aErrorNotified );
+
+private:
+       
+    void InitReady();
+    
+    TInt FindContactIndex( MVPbkContactLink* aContact );
+    
+    void LoadNextContactDataL();
+    
+    void DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex);
+    
+    void HandleError(TInt aError);
+    
+    void DoHandleContactOperationCompleteL( MVPbkStoreContact* aContact, TInt aIndex);
+    
+    void GetAvailableServicesL( MVPbkStoreContact* aContact, TInt aIndex );
+    
+    void InformObserver();
+    
+    void UpdateNameOrderL();
+
+private:
+    /** Array that contains all loaded contact data. Owned. */
+    RPointerArray<CEasyDialingContactData> iContactDataArray;
+
+    /** Array that contains indexes of thumbnails that are waiting to be loaded. Owned. */
+    RArray<TInt> iWaitingContacts;
+
+    /** Phonebook image manager. Owned. */
+    CPbk2ImageManager* iImageManager;
+    
+    /** Parameters for image manager. Contains info about the size of thumbnails. */
+    TPbk2ImageManagerParams iImageManagerParams;
+    
+    /** Field type. Not owned. */
+    const MVPbkFieldType* iThumbnailFieldType;
+    
+    /** Image loading operation. Owned. */
+    MPbk2ImageOperation* iImageOperation;
+    
+    /** Contact item for which a thumbnail is being loaded. Owned. */
+    MVPbkStoreContact* iStoreContact;
+    
+    /** Virtual phonebook contact manager. Not owned. */
+    CVPbkContactManager* iContactManager;
+
+    /** Contact data manager observer. Not owned. */
+    MContactDataManagerObserver* iObserver;
+
+    /** Top (i.e. favourite) contacts manager. Owned. */
+    CVPbkTopContactManager* iVPbkTopContactManager;
+    
+    /** Virtual phonebook operation handle. Owned. */
+    MVPbkContactOperationBase* iContactOperation;
+
+    /** Default contact store. Not owned. */
+    MVPbkContactStore* iContactStore;
+    
+    /** Variable which tells either to show or hide contact thumbnails. */
+    TBool iContactThumbnailSetting;
+    
+    /** ETrue if asynchronous opening of the contac store is ready. */
+    TBool iStoreReady;
+    
+    /** View to vpbk containing all favourite contacts. Owned. */
+    MVPbkContactViewBase* iFavsView;
+        
+    /** Favourites view is ready to be used. */
+    TBool iFavsViewReady;
+    
+    /** Virtual phonebook operation handle for getting favourites. Owned. */
+    MVPbkContactOperationBase* iFavsOperation;
+    
+    /** Phonebook settings interface. */
+    MPbkGlobalSetting* iPbkSettings;
+    
+    /** Contact name display order. */
+    TNameOrder iNameOrder;
+    
+    /** Contact data manager pause status */
+    TBool iPause;
+    };
+
+#endif //__EASYDIALINGTHUMBNAILMANAGER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcrkeys.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing central repository keys.
+*
+*/
+
+
+#ifndef __EASYDIALINGCRKEYS_H__
+#define __EASYDIALINGCRKEYS_H__
+
+#include <e32cmn.h>
+
+/**
+* Easydialing settings CR UID (same as easydialing DLL uid)
+*/
+const TUid KCRUidEasyDialSettings = {0x200212A0};
+
+/**
+* Easydialing on/off
+*
+* Possible values are:
+* 0 = Easydialing is off
+* 1 = Easydialing is on
+*/
+const TUint32 KEasyDialing = 0x00000001;
+
+/**
+* Easydialing Contact Thumbnails show/hide
+* Possible values are:
+* 0 = Thumbnails are hidden
+* 1 = Thumbnails are shown
+*/
+const TUint32 KEasyDialingContactThumbnails = 0x00000002;
+
+#endif //__EASYDIALINGCRKEYS_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialinglistbox.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing listbox.
+*
+*/
+
+
+#ifndef _EASYDIALINGLISTBOX_H
+#define _EASYDIALINGLISTBOX_H
+
+// INCLUDE FILES
+#include "easydialinglistboxview.h"
+#include "easydialinglistboxitemdrawer.h"
+#include "easydialinglistboxdata.h"
+#include <aknlists.h>
+#include <aknlongtapdetector.h>
+
+// CONSTANTS
+
+// Easy dialing specific listbox events
+const TInt KEasyDialingContactSelected( 0x1001 );
+const TInt KEasyDialingContactLongTapped( 0x1002 );
+const TInt KEasyDialingScrollingStarted( 0x1003 );
+const TInt KEasyDialingScrollingStopped( 0x1004 );
+
+// FORWARD DECLARATIONS
+
+class CEasyDialingListBoxItemDrawer;
+class CAknsFrameBackgroundControlContext;
+class CEasyDialingContactDataManager;
+class CAknLongTapDetector;
+class CAknPointerEventSuppressor;
+
+// CLASS DECLARATIONS
+
+/*
+ * ==============================================================================
+ * 
+ * CEasyDialingListBox
+ * 
+ * ==============================================================================
+ */
+
+class CEasyDialingListBox : public CEikFormattedCellListBox, 
+                            public MAknLongTapDetectorCallBack
+    {
+public:
+    
+    /**
+    * Constructor.
+    */
+    CEasyDialingListBox();
+    
+    /**
+    * Destructor.
+    */
+    ~CEasyDialingListBox();
+    
+    /**
+    * Second phase constructor.
+    * @param    aFlags  Listbox flags.
+    * @param    aContactDataManager Pointer to contact data manager
+    */
+    void ConstructL( TInt aFlags, 
+            CEasyDialingContactDataManager* aContactDataManager );
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    virtual CListBoxView* MakeViewClassInstanceL();
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    CEasyDialingListBoxItemDrawer* ItemDrawer() const;
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    void Draw( const TRect& aRect ) const;
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    void HandleResourceChange( TInt aType );
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    void HandleScrollEventL( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType );
+    
+    /**
+    * From CCoeControl
+    */
+    void MakeVisible( TBool aVisible );
+    
+    /**
+    * From CCoeControl
+    */
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+    
+    /**
+     * The the rectangle within which the listbox must always fit.
+     * @param   aMaxRect   The largest allowed rect size, given in
+     *                     screen relative coordinate system.
+     */
+    void SetMaxRect( TRect aMaxRect );
+    
+    /**
+     * Adjusts the control rect according to amount of visible contacts. 
+     * @param   aNumberOfNames  Number of contact to which to adjust.
+     */
+    void SetRectToNumberOfItems( TInt aNumberOfNames );
+    
+    
+    /**
+     * Puts list box control into focus, and moved the focus highlight
+     * to the appropriate item.
+     * @param   aKeyEvent   key event
+     * @param   aType       key event type
+     * @return  Whether the key was handled or not.
+     */
+    TKeyResponse SetFocusedWithKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+    /**
+    * Gets the height of the listbox based on the number of items.
+    * @param    aNum    Number of items.
+    */
+    TInt GetHeightBasedOnNumberOfItems( TInt aNum ) const;
+    
+    /**
+     * Gets the contact index of the currently selected contact item.
+     * Contact index points to contact data object in 
+     * CEasyDialingContactDataManager. 
+     * @return  Contact data manager index.
+     */
+    TInt CurrentContactDataIndex();
+    
+    /**
+     * Return contact link of current item packaged in HBufC object. 
+     * @return  Contact link.
+     */
+    HBufC8* CurrentContactLinkLC();
+    
+public:
+    /**
+     * From MAknLongTapDetectorCallBack
+     */
+    void HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation );
+    
+protected:
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    virtual void FocusChanged( TDrawNow aDrawNow );
+        
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    virtual void CreateItemDrawerL();
+    
+    /**
+    * From CEikFormattedCellListBox.
+    */
+    virtual void SizeChanged();
+        
+    /**
+    * From CCoeControl
+    */
+    TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+    
+private:
+    
+    /** Background control context. Owned. */
+    CAknsFrameBackgroundControlContext* iBGContext;
+        
+    /** Pointer to a contact data manager; Not Own. */
+    CEasyDialingContactDataManager* iContactDataManager;
+    
+    /** Number of matching contacts. */
+    TInt iNumberOfNames;
+    
+    /** Maximum size rectangle. */
+    TRect iMaxRect;
+    
+    /** Detector for Long Tap event; Owned. */
+    CAknLongTapDetector* iLongTapDetector;
+    
+    /** Flag set when long pointer press has been handled after latest pointer down event.*/
+    TBool iPointerLongPressHandled;	
+    };
+
+#endif // _EASYDIALINGLISTBOX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialinglistboxdata.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing listbox data.
+*
+*/
+
+
+#ifndef _EASYDIALINGLISTBOXDATA_H
+#define _EASYDIALINGLISTBOXDATA_H
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+
+// CONSTANTS
+
+/*
+ * Matching highlight separator character is used in listbox model to separate
+ * matching and non-matching charaters. 0x1F is chosen for this because
+ * it is a control character "INFORMATION SEPARATOR ONE" of ASCII set. 
+ * User of the listbox must use this character in creating list box item 
+ * strings.
+ */
+// FORWARD DECLARATIONS
+class CEasyDialingListBox;
+class CEasyDialingContactDataManager;
+
+// CLASS DECLARATIONS
+
+/*
+ * Easy dialing listbox data class.
+ */
+
+class CEasyDialingListBoxData : public CFormattedCellListBoxData
+    {
+public:
+    
+    class TExtendedColors : public CFormattedCellListBoxData::TColors 
+        {
+        public:
+            
+            TExtendedColors();
+    
+            /** The matching text colour. */
+            TRgb iMatchingText;
+    
+            /** The matching background colour. */
+            TRgb iMatchingBack;
+    
+        };
+    
+    
+    /**
+    * Constructor.
+    */
+    CEasyDialingListBoxData();
+       
+    /**
+     * Destructor
+     */
+    ~CEasyDialingListBoxData();
+       
+    /**
+    * Second phase constructor of the class.
+    * @return   Pointer to the instance. 
+    */
+    static CEasyDialingListBoxData* NewL();
+     
+    /**
+    * Draws selected item.
+    */
+    void DrawData(
+        const TListItemProperties& aItemProperties, 
+        CWindowGc& aGc,
+        const TDesC* aText,
+        const TRect& aRect,
+        TBool aHighlight,
+        const TExtendedColors& aColors ) const;
+     
+    /**
+    * Draws selected item highlight.
+    * @param    aGc         Graphics context.
+    * @param    aItemRect   Item rectangle.
+    */
+    void DrawHighlight( CWindowGc &aGc, const TRect &aItemRect ) const;
+    
+    /**
+    * Sets the contact data manager. Must be set before using the listbox.
+    * @param    aContactDataManager Contact data manager.
+    */
+    void SetContactDataManager( CEasyDialingContactDataManager* aContactDataManager );
+
+    /**
+    * Sets a pointer to listbox class. Called from listbox constructor.
+    * @param    aControl    Pointer to easy dialing listbox cotrol.
+    */
+    void SetEDLBXControl( CEasyDialingListBox* aControl );
+    
+    /**
+     * Handle change in list item size
+     */
+    void HandleItemSizeChange();
+    
+protected:
+        
+    void ConstructLD();
+   
+private:
+    
+    /**
+    * Determines fonts for contact name and company name.
+    * The font sizes are determined based on list box item height.
+    * This function must be called once before any drawing routines are 
+    * done.
+    * @param    aItemHeight List box item height
+    */
+    void ObtainFonts( TInt aItemHeight );
+    
+    /**
+     * Update the color bitmap used for fallback graphics for the Action Menu arrow according to 
+     * size changes in listbox control.
+     * @param   aSize   New size.
+     */
+    void UpdateColorBitmapL( const TSize& aSize );
+    
+    /**
+    * Draws the data for one list item.
+    * @param    aProperties List item property structure.
+    * @param    aGc Graphics context.
+    * @param    aText   String containing  list item data information.
+    * @param    aItemRect   Item rectangle.
+    * @param    aHighlight  ETrue if the item has highlight, EFalse otherwise.
+    * @param    aColors Structure containing used colors.
+    */
+    void DrawDataFormatted( 
+        TListItemProperties aProperties,
+        CWindowGc& aGc,
+        const TDesC* aText,
+        const TRect& aItemRect,
+        TBool aHighlight,
+        const TExtendedColors& aColors ) const;
+
+    /**
+     * Draws the Contact Thumbnail Icon if any else draws the dummy contact thumbnail.
+     * @param   aGc Graphics context.
+     * @param   aBoundingBox    Rectangle containing bounds for contact thumbnail.
+     * @param   aDescId Descriptor containing contact id.
+     */
+    TBool DrawContactThumbnail(
+            CWindowGc& aGc,
+            TRect aBoundingBox,
+            TPtrC aDescId) const;
+    
+    /**
+     * Draws the Action Menu.
+     * @param   aGc Graphics context.
+     * @param   aActionMenuArrowRect    Rectangle where arrow is to be drawn.
+     */ 
+    void DrawArrowIcon( CWindowGc& aGc, TRect aActionMenuArrowRect ) const;
+    
+    /**
+     * Draws the Favourite Icon. Takes the name rect as a parameter. Name rect
+     * must be unmirrored, because the mirroring is done as the last thing
+     * before drawing.
+     * @param   aGc Graphics context.
+     * @param   aNameRectUnMirrored Name rect, where fav star is contained
+     * @param   aEffectiveRect The whole listbox item rect. Used for mirroring.
+     */
+    void DrawFavouriteIcon(
+            CWindowGc& aGc, 
+            TRect aNameRectUnMirrored,
+            TRect aEffectiveRect) const;
+    
+private:
+    
+    /** Font to be used showing contact name. Not owned. */
+    CFont* iContactNameFont;
+    
+    /** Font to be used showing company name. Not owned. */ 
+    CFont* iCompanyNameFont;
+    
+    /** Handle for loading and storing the thumbnails. Not owned.*/ 
+    CEasyDialingContactDataManager* iContactDataManager;
+        
+    /** Action Menu LeftPointing Arrow for mirrored layout. Owned. */
+    CGulIcon* iArrowPointingRight;
+    
+    /** Action Menu RightPointing Arrow. Owned. */
+    CGulIcon* iArrowPointingLeft;
+
+    /** Action icon color bitmap. Owned. */
+    CFbsBitmap* iColorBitmap;
+
+    /** Default image for contacts with no own thumbnail. Owned. */
+    CGulIcon* iDummyThumbnail;
+    
+    /** Favourite icon. Owned. */
+    CGulIcon* iFavouriteIcon;
+    
+    /** Pointer to listbox. Not owned. */
+    CEasyDialingListBox* iControl;
+    };
+
+
+#endif // _EASYDIALINGLISTBOXDATA_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialinglistboxitemdrawer.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing listbox list item drawer.
+*
+*/
+
+
+#ifndef _EASYDIALINGLISTBOXDRAWER_H
+#define _EASYDIALINGLISTBOXDRAWER_H
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+
+// FORWARD DECLARATIONS
+
+class CEasyDialingListBoxData;
+
+// CLASS DECLARATIONS
+
+/*
+ * Easy dialing list item drawer.
+ */
+
+class CEasyDialingListBoxItemDrawer : public CFormattedCellListBoxItemDrawer
+    {
+public:
+    
+    /**
+    * Constructor.
+    * @param aTextListBoxModel Listbox mode.
+    * @param aFont  Font parameter required by super class constructor.
+    * @param aFormattedCellData List box data pointer.
+    */
+    CEasyDialingListBoxItemDrawer(
+            MTextListBoxModel* aTextListBoxModel, 
+            const CFont* aFont, 
+            CFormattedCellListBoxData* aFormattedCellData);
+   
+    /**
+    * Returns pointer to item data.
+    */
+    CEasyDialingListBoxData* EasyDialingCellData() const;
+
+    /**
+    * Draws item.
+    * @param    aItemIndex  Index of the item.
+    * @param    aItemRectPos    Position of the item.
+    * @param    aItemIsSelected ETrue if item is selected, EFalse otherwise.
+    * @param    aItemIsCurrent  ETrue if this item is the current item.
+    * @param    aViewIsEmphasized ETrue if item is emphasized.
+    * @param    aViewIsDimmed   ETrue if item is dimmed.
+    */
+    void DrawItem(
+            TInt aItemIndex, 
+            TPoint aItemRectPos, 
+            TBool aItemIsSelected, 
+            TBool aItemIsCurrent, 
+            TBool aViewIsEmphasized, 
+            TBool aViewIsDimmed) const;
+
+    /**
+    * Draws data content of the item. Not just text but
+    * but any content.
+    * @param    aItemIndex  Index of the item.
+    * @param    aItemTextRect   Rectangle of the item.
+    * @param    aItemIsCurrent  ETrue is the item is currently selected item.
+    * @param    aViewIsEmphasized   ETrue if the item is emphasized.
+    * @param    aItemIsSelected ETrue if item is selected.
+    */
+    void DrawItemText( 
+            TInt aItemIndex,
+            const TRect& aItemTextRect,
+            TBool aItemIsCurrent,
+            TBool aViewIsEmphasized,
+            TBool aItemIsSelected ) const;
+    
+    /**
+    * Finds proper listbox colors from theme and makes them active.
+    */
+    void SetColors();
+
+protected:
+    
+    /**
+    * Draws background of list item.
+    * @param    aItemTextRect   Item rectangle.
+    */
+    void DrawBackgroundAndSeparatorLines( const TRect& aItemTextRect ) const;
+    
+protected:
+    
+    /** The matching text colour. */
+    TRgb iMatchingText;
+
+    /** The matching text background colour. */
+    TRgb iMatchingBack;    
+    };
+
+
+#endif // _EASYDIALINGLISTBOXDRAWER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialinglistboxview.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing list box view.
+*
+*/
+
+#ifndef _EASYDIALINGLISTBOXVIEW_H
+#define _EASYDIALINGLISTBOXVIEW_H
+
+// INCLUDE FILES
+#include <aknlists.h>
+
+// CLASS DECLARATIONS
+
+/*
+ * Easy dialing listbox view.
+ */
+
+class CEasyDialingListBoxView : public CFormattedCellListBoxView
+    {
+public:
+    
+    /**
+    * Sets current index value to outside-of-range value. After this, no
+    * item in the listbox is highlighted. 
+    */
+    void SetCurrentItemIndexToNone();
+    };
+    
+    
+#endif // _EASYDIALINGLISTBOXVIEW_H
+    
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialinglogger.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing logging functions.
+*
+*/
+
+
+#ifndef __EASYDIALINGLOGGER_H__
+#define __EASYDIALINGLOGGER_H__
+
+// Note! These macros are to be used in trace prints (legacy support).
+//       To be used only in error situations and major events only !
+//       Otherwise use OST - Open System Trace
+
+#ifdef _DEBUG
+
+// #define USE_FILE_LOGGING
+
+// From this point on, internal implementation
+
+#include <e32svr.h>     // for RDebug::Print
+
+#ifdef USE_FILE_LOGGING
+#include <flogger.h>
+_LIT( KLogDir,  "ed" );
+_LIT( KLogFile, "easydialing.log" );
+#endif
+
+
+NONSHARABLE_CLASS(TOverflowTruncate) : public TDes16Overflow
+    {
+    public:
+        void Overflow(TDes16& /*aDes*/) {}
+    };
+
+inline void DoDebugPrintF(TRefByValue<const TDesC> aFmt, VA_LIST& aList)
+    {
+    TBuf<200> buf;
+    TOverflowTruncate overFlow;
+    buf.AppendFormatList( aFmt, aList, &overFlow );
+    _LIT(KLogPrintFormat,"%S: %S");                         // Log printing format
+    const TDesC& thname = RThread().Name();                 // With FullName more info
+    RDebug::Print( KLogPrintFormat, &thname, &buf );
+#ifdef USE_FILE_LOGGING
+    RFileLogger::Write(KLogDir, KLogFile, EFileLoggingModeAppend, buf);
+#endif
+    }
+
+inline void DebugPrintF(const TRefByValue<const TDesC> aFmt,...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    DoDebugPrintF(aFmt, list);
+    }
+
+
+// Macros
+
+#define LOGSTRING( TEXT ) DebugPrintF( _L( TEXT ) )
+#define LOGSTRING1( TEXT, VAR1 ) DebugPrintF( _L( TEXT ), VAR1 )
+#define LOGSTRING2( TEXT, VAR1, VAR2 ) DebugPrintF( _L( TEXT ), VAR1, VAR2 )
+
+#define PERF_MEASURE_START \
+        TTime startTime, endTime; \
+        startTime.HomeTime();\
+        DebugPrintF( _L("EasyDialingPlugin: Measure start..") );
+
+
+#define PERF_MEASURE_STOP \
+        endTime.HomeTime(); \
+        TTimeIntervalMicroSeconds microsecs = endTime.MicroSecondsFrom( startTime ); \
+        TReal timeSecs=(TReal)((TReal)(microsecs.Int64())/1000); \
+        DebugPrintF( _L("EasyDialingPlugin: Measure stop, time taken %5.3f msecs"), timeSecs );
+
+#else
+
+#define LOGSTRING( TEXT )
+#define LOGSTRING1( TEXT, VAR1 )
+#define LOGSTRING2( TEXT, VAR1, VAR2 )
+
+#define PERF_MEASURE_START
+#define PERF_MEASURE_STOP
+
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingpanics.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing panic codes and macro.
+*
+*/
+
+#ifndef EASYDIALINGPANICS_H_
+#define EASYDIALINGPANICS_H_
+
+/** Easy dialing panic codes */
+enum 
+    {
+    EEasyDialingPanicInvalidListBoxModelString = 200,
+    EEasyDialingPanicNoResults,
+    EEasyDialingPanicNoContactSelected,
+    EEasyDialingActionNotSupported,
+    EEasyDialingNoFontFound,
+    // add further panics here
+    };
+
+
+/** Easy dialing string for panic function */
+_LIT( KEasyDialingPanicString, "Easy dialing" );
+
+
+/**
+ * Panic function for easy dialing module. 
+ * 
+ */
+inline void EasyDialingPanic( TInt aReason )
+    {
+    User::Panic( KEasyDialingPanicString, aReason );
+    }
+
+
+#endif /* EASYDIALINGPANICS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingplugin.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,502 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Easy dialing plugin implementation.
+*
+*/
+
+
+#ifndef __CEASYDIALINGPLUGIN_H__
+#define __CEASYDIALINGPLUGIN_H__
+
+// INCLUDES
+
+#include "dialingextensioninterface.h"
+#include <MPsResultsObserver.h>
+#include <mccaconnection.h>
+#include <mccaconnectionext.h>
+#include "measydialingcenreplistenerobserver.h"
+#include "mcontactdatamanagerobserver.h"
+#include "medcontactorobserver.h"
+#include "easydialingcontactdatamanager.h"  // for TNameOrder
+
+// Phonebook engine API
+#include <MVPbkContactStoreListObserver.h>
+
+// ListBox Observer API
+#include <eiklbo.h>
+
+// MAknInputBlockCancelHandler
+#include <akninputblock.h> 
+
+
+// CONSTANTS
+
+/** Maximum constact search string length. */
+const TInt KEDMaxSearchStringLength = 200;
+
+/** Maximum string length for listbox model string. */
+const TInt KEDMaxContactStringLength = 600;
+
+/** Maximum phone number length. */
+const TInt KEDMaxPhoneNumberLength = 64;
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+class CPSRequestHandler;
+class CPsQuery;
+class CVPbkContactStoreUriArray;
+class CVPbkContactManager;
+class CEasyDialingListBox;
+class MVPbkContactLink;
+class CEasyDialingCenrepListener;
+class CEasyDialingContactDataManager;
+class CEDContactorService;
+class CEikMenuPane;
+class CAsyncCallBack;
+
+
+// CLASS DECLARATION
+
+/**
+* Easy dialing plugin.
+*/
+class CEasyDialingPlugin : public CDialingExtensionInterface,
+                           public MVPbkContactStoreListObserver,
+                           public MPsResultsObserver,
+                           public MCCAObserver,
+                           public MEasyDialingCenrepListenerObserver,
+                           public MContactDataManagerObserver,
+                           public MEDContactorObserver,
+                           public MEikListBoxObserver,
+                           public MAknInputBlockCancelHandler
+{
+public:
+
+    /**
+    * Static constructor. 
+    * @return: Created object.
+    */
+    static CEasyDialingPlugin* NewL();
+    
+    /**
+    * Destructor. 
+    */
+    virtual ~CEasyDialingPlugin();
+
+public: // from CCoeControl 
+
+    /**
+    * From CCoeControl.
+    */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+    /**
+    * From CCoeControl
+    */
+    TInt CountComponentControls() const;
+    
+    /**
+    * From CCoeControl
+    */
+    CCoeControl* ComponentControl( TInt aIndex ) const;
+    
+    /**
+    * From CCoeControl
+    */
+    void MakeVisible( TBool aVisible );
+
+protected:
+
+    /**
+    * See CCoeControl
+    */
+    void SizeChanged();
+    
+    /**
+    * See CCoeControl
+    */
+    void FocusChanged( TDrawNow aDrawNow );
+
+public: // from CDialingExtensionInterface
+
+    /**
+    * Does further initialization to component.
+    * @param: parent container of this control.
+    */
+    virtual void InitializeL( CCoeControl& aParent );
+    
+    /**
+    * Reset the previour easy dialing search.
+    */
+    void Reset();
+    
+    /**
+    * Adds an observer to dialing extension.
+    * @param: aObserver: observer to be added.
+    */
+    void AddObserverL( MDialingExtensionObserver* aObserver );
+   
+    /**
+    * Removes an observer from dialing extension.
+    * @param: aObserver: observer to be removed.
+    */
+    void RemoveObserver( MDialingExtensionObserver* aObserver );
+    
+    /**
+     * Sets input string (search string) to easy dialing.
+     * @param: aDesC: input string descriptor.
+     */
+    void SetInputL( const TDesC& aDesC );
+    
+    /**
+     * Returns the number of matching contacts in previous search.
+     * @return: number of matches.
+     */
+    TInt MatchingContactCount();
+    
+    /**
+     * Gets the resource id of plugin's control button area resource.
+     * 
+     * @return  Resource id.
+     */
+    TInt CbaResourceId();
+    
+    /**
+     * From CDialingExtensionInterface.
+     * Gets the resource id of plugin's menu bar resource.
+     * 
+     * @return  Resource id.
+     */
+    TInt MenuResourceId();
+    
+    /**
+     * From CDialingExtensionInterface.
+     * Gets the resource id of plugin's menu bar resource.
+     * 
+     * @param   aMenuPane   Menu pane
+     * @param   aMenuResourceId Menu bar resource id.
+     * @return  Resource id.
+     */
+    TBool InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId );
+    
+    /**
+     * From CDialingExtensionInterface.
+     * Gets the resource id of plugin's menu bar resource.
+     * 
+     * @param   aCommand   Command id.
+     * @return  ETrue if command was handled, EFalse otherwise.
+     */
+    TBool HandleCommandL( TInt aCommand );
+    
+    /**
+     * Tells if extension is currently enabled from settings.
+     * @return  ETrue if extension is enabled, EFalse otherwise.
+     */
+    TBool IsEnabled() const;
+
+public:
+
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void StoreReady(MVPbkContactStore& aContactStore);
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void StoreUnavailable(MVPbkContactStore& aContactStore, TInt aReason);
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void HandleStoreEventL( MVPbkContactStore& aContactStore, 
+                            TVPbkContactStoreEvent aStoreEvent);
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void OpenComplete();
+    
+    /**
+    * From MEasyDialingCenrepListenerObserver.
+    */
+    void EasyDialingSettingsChanged( TInt aValue );
+    
+    /**
+    * From MEasyDialingCenrepListenerObserver.
+    */
+    void EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue );
+        
+    /**
+    * From MContactDataManagerObserver.
+    */
+    void AllContactDataLoaded();
+    
+    /**
+    * From MContactDataManagerObserver.
+    */
+    void NameOrderChanged();
+    
+    /**
+    * From MContactDataManagerObserver.
+    */
+    void FavouritesChanged();
+    
+    /**
+    * From MEDContactorObserver.
+    */
+    void InformContactorEvent( MEDContactorObserver::TEvent aEvent );
+    
+    /**
+    * From MEikListBoxObserver.
+    */
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+    
+    /**
+    * From MAknInputBlockCancelHandler.
+    */
+    void AknInputBlockCancel();
+
+
+private:
+
+    /**
+    * Constructor.
+    */
+    CEasyDialingPlugin ();
+    
+    /**
+    * Second phase constructor.
+    */
+    void ConstructL ();
+    
+    void InitPredictiveContactSearchL();
+    
+    void SetSortOrderL( CEasyDialingContactDataManager::TNameOrder aNameOrder );
+    
+    /**
+    * From MPsResultsObserver.
+    */
+    virtual void HandlePsResultsUpdate( RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs );
+    virtual void HandlePsError( TInt aErrorCode );
+    virtual void CachingStatus( TCachingStatus& aStatus, TInt& aError );
+    
+    /**
+     * FindContactFieldPCSIndex
+     * Searches the index that stores the given contact field.
+     * To see possible contact field numbering, see file "vpbkeng.rsg".
+     * @param: contact field to search for. See file "vpbkeng.rsg"
+     * for contact field numbering.
+     * @return: index of the contact field. KErrNotFound if field was not found.
+     * Non-negative return values are for indexing CPsClientData array.
+     */
+    TInt FindContactFieldPCSIndexL( TInt aIndex );
+        
+    /**
+     * HandlePsResultsUpdateL
+     * A leaving function to be trapped in HandlePsResultsUpdate.
+     */
+    void HandlePsResultsUpdateL( RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs );
+
+public:
+    
+    /**
+     * MCCAObserver function handling exit of CCA launcher.
+     */
+    void CCASimpleNotifyL( TNotifyType aType, TInt aReason );
+
+private:
+    
+    /*
+     * Informs all observers registered with AddObserverL.
+     * @param: aEvent: event id to be informed.
+     */
+    void InformObservers( MDialingExtensionObserver::TEvent aEvent );
+
+
+private: 
+
+    /**
+    * This method perform the drawing functionality of the component.
+    * @param: aRect: The rect to be rendered
+    * @return None
+    */
+    void Draw( const TRect& aRect ) const;
+    
+    /**
+    * Initiates predictive contact search.
+    */
+    void LaunchSearchL();
+    
+    /**
+     * Opens ca launcher for currently selected contact.
+     */
+    void LaunchCurrentContactL();
+    
+    /**
+     * Creates listbox model string.
+     */
+    void CreateListBoxContactStringL(
+            const TDesC& aContactString,
+            MVPbkContactLink *aLink,
+            TBool aMatchThumbnails,
+            TBool aFav );
+    
+    /**
+     * Creates string with first name, last name and company name.
+     */
+    HBufC* CreateContactStringLC( CPsClientData* aResult,
+            CEasyDialingContactDataManager::TNameOrder aNameOrder );
+    
+    /** Possible actions launched by this plugin. */
+    enum TEasyDialingAction
+        {
+        ENoActionDefined,
+        ECallCurrentContact,
+        EVideoCallCurrentContact,
+        ESendMessageCurrentContact,
+        ELaunchCurrentContact,
+        ELaunchSearch,
+        EInitializePcs
+        };
+    
+    /**
+     * Initiates asynchronous callback to launch action and sets
+     * input blocker active. 
+     */
+    void AsyncActionLaunchL( const TEasyDialingAction aAction );
+       
+    /**
+     * Callback for CAsyncCallBack. Launches action set in iActionToBeLaunched
+     * and stops input block when launch is done.
+     */
+    static TInt AsyncCallBackToLaunchAction( TAny* aPtr );
+    
+    /**
+     * Launches action defined in iActionToBeLaunched.
+     */
+    void DoLaunchActionL();
+    
+    /**
+     * Cancels async action launch and input block.
+     */
+    void CancelActionLaunchAndInputBlock();
+    
+    /**
+     * Handles change events from contact database and favourites view.
+     */
+    void DoHandleContactsChangedL();
+    
+    /**
+     * Makes contact listbox visible. Effect is used if feasible.
+     */  
+    void ShowContactListBoxWithEffect();
+    
+    /**
+     * Makes contact listbox invisible. Effect is used if feasible.
+     */  
+    void HideContactListBoxWithEffect();
+
+
+private:
+
+    /** Textual version of current search string. */
+    TBuf<KEDMaxSearchStringLength> iSearchString;
+    
+    /** Handle to predictive search engine. Owned. */
+    CPSRequestHandler* iPredictiveContactSearchHandler;
+    
+    /** PCS type of presentation of the current search string. Owned. */
+    CPsQuery* iPredictiveSearchQuery;
+    
+    /** If ETrue, completing PCS searches are not displayed but just discarded. */
+    TBool iDiscardCompletingSearches;
+    
+    /** ETrue if contact database has been changed and a new search is needed. */
+    TBool iNewSearchNeeded;
+    
+    /** Array of used data stores. Owned. */
+    RPointerArray<TDesC> iContactDataStores;
+    
+    /** Contact store array. Owned. */
+    CVPbkContactStoreUriArray* iContactStoreUriArray;
+    
+    /** Contact manager handle. Owned. */
+    CVPbkContactManager* iContactManager;
+	
+    /** Search result field index for first name field. */
+    TInt iFirstNamePCSIndex;
+    
+    /** Search result field index for last name field. */
+    TInt iLastNamePCSIndex;
+    
+    /** Search result field index for first name field. */
+    TInt iCompanyNamePCSIndex;
+    
+    /** Array containing observers to this class. Owned. */
+    RPointerArray<MDialingExtensionObserver> iObservers;
+    
+    /** Contact listbox. Owned. */
+    CEasyDialingListBox* iContactListBox;
+    
+    /** Listbox model from search results. Owned. */
+    CDesCArrayFlat* iListBoxModel;
+    
+    /** Number of found matching contacts from most recent search. */
+    TInt iNumberOfNames;
+    
+    /** Handle to contact launcher. */
+    MCCAConnectionExt* iContactLauncher;
+    
+    /** ETrue if contact launcher (a.k.a. communication launcher) is open. */
+    TBool iContactLauncherActive;
+    
+    /** If true, contact listbox must not reset focus when contact launcher exits. */
+    TBool iRememberFocus;
+    
+    /** Working buffer for creating contact string to listbox. */
+    TBuf<KEDMaxContactStringLength> iContactStringCreationBuffer;
+    
+    /** Central repository listener. Owned. */
+    CEasyDialingCenrepListener* iCenrepListener;
+    
+    /** Contact data manager. Owned. */
+    CEasyDialingContactDataManager* iContactDataManager;
+    
+    /** Easy dialing contactor service. Owned. */
+    CEDContactorService* iContactorService;
+    
+    /** Easy dialing resource file offset in current application. */
+    TInt iResourceFileOffset;
+    
+    /** Blocks user input when action is being launched. NULL if not active. Owned. */
+    CAknInputBlock* iInputBlocker;
+    
+    /** Used to launch action asynchronously. Owned.*/
+    CAsyncCallBack* iAsyncCallBack;
+    
+    /** Action to be launched next asynchronously. */
+    TEasyDialingAction iActionToBeLaunched;
+};
+
+
+#endif //__CEASYDIALINGPLUGIN_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingutils.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Helper class for easydialing. 
+*
+*/
+
+#ifndef __EASYDIALINGUTILS_H__
+#define __EASYDIALINGUTILS_H__
+
+#include "easydialingcontactdatamanager.h"  // for TNameOrder
+
+class EasyDialingUtils
+    {
+    public:
+
+        /*
+         * Creates contact string from first name, last name and company name.
+         * F.ex. "Firstname Lastname\tCompany"
+         * @param aFirstName First name
+         * @param aFirstName Last name
+         * @param aFirstName Comapany name
+         * @param aNameOrder The name ordering to be used
+         * @return Contact string (in cleanupstack)
+         */
+        static HBufC* CreateContactStringLC(
+            const TDesC& aFirstName,
+            const TDesC& aLastName,
+            const TDesC& aCompanyName,
+            CEasyDialingContactDataManager::TNameOrder aNameOrder );
+    };
+
+#endif //__EASYDIALINGUTILS_H__
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/mcontactdatamanagerobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing contac data observer class.
+*
+*/
+
+#ifndef __MCONTACTDATAMANAGEROBSERVER_H__
+#define __MCONTACTDATAMANAGEROBSERVER_H__
+
+/**
+ *  MContactDataManagerObserver
+ *  Contact data manager observer interface
+ */
+class MContactDataManagerObserver
+    {
+public:
+    virtual void AllContactDataLoaded() = 0;
+    
+    virtual void NameOrderChanged() = 0;
+    
+    virtual void FavouritesChanged() = 0;
+    };
+
+#endif //__MCONTACTDATAMANAGEROBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/measydialingcenreplistenerobserver.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing cenrep observer class.
+*
+*/
+
+
+#ifndef __MEASYDIALINGCENREPLISTENEROBSERVER_H__
+#define __MEASYDIALINGCENREPLISTENEROBSERVER_H__
+
+/**
+ * Easy dialing central repository observer.
+ */
+class MEasyDialingCenrepListenerObserver
+    {
+public:
+    
+    
+    /**
+     * Called when easy dialing feature setting (on / off) value is changed. 
+     * @param   aValue  1 if setting is set on, otherwise 0.
+     */
+    virtual void EasyDialingSettingsChanged(TInt aValue) = 0;
+    
+    
+    /**
+     * Called when easy dialing thumbnail setting (shown / not shown) value is changed.
+     * @param   aThumbnailSettingValue  1 if shown, otherwise 0.
+     */
+    virtual void EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue ) = 0;
+    };
+
+#endif //__MEASYDIALINGCENREPLISTENEROBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/layers.sysdef.xml	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+  <!ENTITY layer_real_source_path "addon/custom_sw_tre/easydialing" >
+]>
+
+<SystemDefinition name="easydialing" schema="1.4.0">
+  <systemModel>
+    <layer name="addon_layer">
+      <module name="easydialing">
+        <unit unitID="cusw.easydialing" mrp="" bldFile="&layer_real_source_path;\group" name="easydialing" />
+      </module>
+    </layer>
+    <layer name="api_test_layer">
+      <module name="easydialing_api_tests">
+        <unit unitID="easydialing.test" mrp="" bldFile="&layer_real_source_path;\tsrc\t_easydialingplugin\group" name="easydialing_test" />
+      </module>
+    </layer>
+  </systemModel>
+</SystemDefinition>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/loc/easydialing.loc	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing localization file.
+*
+*/
+
+// LOCALISATION STRINGS
+
+// d: Option in Number Acquisition state menu.
+// d: It contains submenu on/off states of easy dialing.
+// l: list_single_pane_t1_cp2/opt3
+// r:9.1
+#define qtn_easydial_option_submenu_title "Contact search"
+
+//d: Submenu item for easy dialing setting.
+//l: list_single_popup_submenu_pane_t1/opt1
+//r:9.2
+//
+#define qtn_easy_dialing_on "On"
+
+//d: Submenu item for easy dialing setting.
+//l: list_single_popup_submenu_pane_t1/opt1
+//r:9.2
+//
+#define qtn_easy_dialing_off "Off"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/rom/easydialingplugin.iby	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The ROM definition file
+*
+*/
+
+#ifdef FF_HOME_SCREEN_EASY_DIALING
+
+#ifndef __ED_PLUGIN_IBY_
+#define __ED_PLUGIN_IBY_
+
+#include <bldvariant.hrh>
+
+// Stub sis file
+data=ZSYSTEM\install\easydialing_stub.sis            System\Install\easydialing_stub.sis
+
+// Binary code and not localized resources
+
+ECOM_PLUGIN(easydialingplugin.dll,easydialingplugin.rsc)
+
+file=ABI_DIR\BUILD_DIR\edcontactor.dll SHARED_LIB_DIR\edcontactor.dll
+data=DATAZ_\RESOURCE_FILES_DIR\edcontactor.rsc RESOURCE_FILES_DIR\edcontactor.rsc
+
+data=\epoc32\data\z\private\10202be9\200212A0.txt     "\private\10202be9\200212A0.txt"
+
+#endif // __ED_PLUGIN_IBY_
+
+#endif // FF_HOME_SCREEN_EASY_DIALING
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/rom/easydialingpluginresources.iby	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: The ROM definition file
+*
+*/
+
+#ifdef FF_HOME_SCREEN_EASY_DIALING
+
+#ifndef __ED_PLUGINRESOURCES_IBY_
+#define __ED_PLUGINRESOURCES_IBY_
+
+#include <bldvariant.hrh>
+
+// Localisable resources
+
+data=DATAZ_\RESOURCE_FILES_DIR\easydialingpluginresources.rsc   RESOURCE_FILES_DIR\easydialingpluginresources.rsc
+data=DATAZ_\APP_RESOURCE_DIR\easydialing.mif APP_RESOURCE_DIR\easydialing.mif
+
+#endif // __ED_PLUGINRESOURCES_IBY_
+
+#endif FF_HOME_SCREEN_EASY_DIALING
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/dllmain.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing DLL main.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <implementationproxy.h>
+#include "easydialingplugin.h"
+#include "easydialingconstants.hrh"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+const TImplementationProxy ImplementationTable[] =
+    {
+#ifdef __EABI__ 
+    IMPLEMENTATION_PROXY_ENTRY( EASYDIALING_PLUGIN_ECOM_IMPL_UID, CEasyDialingPlugin::NewL ) 
+#else
+    {{EASYDIALING_PLUGIN_ECOM_IMPL_UID},  CEasyDialingPlugin::NewL }
+#endif
+    };
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// ImplementationGroupProxy
+//
+// Provides a key value pair table, this is used to identify
+// Function used to return an instance of the proxy table.
+// the correct construction function for the requested interface.
+// ---------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy (TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
+
+// ---------------------------------------------------------
+// E32Dll
+//
+// Standard Symbian OS DLL entry point.
+// ---------------------------------------------------------
+//
+#ifndef EKA2
+TBool E32Dll(TDllReason)
+    {
+    return ETrue;
+    }
+#endif // EKA2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialingcenreplistener.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing cenrep listener.
+*
+*/
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <cenrepnotifyhandler.h>
+#include "easydialingcenreplistener.h"
+#include "measydialingcenreplistenerobserver.h"
+#include "easydialingcrkeys.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CEasyDialingCenrepListener* CEasyDialingCenrepListener::NewL(MEasyDialingCenrepListenerObserver* aObserver)
+    {   
+    CEasyDialingCenrepListener* self = new (ELeave) CEasyDialingCenrepListener(aObserver);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::~CEasyDialingCenrepListener
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CEasyDialingCenrepListener::~CEasyDialingCenrepListener()
+    {
+    if (iNotifyHandler)
+        {
+        iNotifyHandler->StopListening();
+        delete iNotifyHandler;
+        iNotifyHandler = NULL;
+        }
+
+    delete iClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::CEasyDialingCenrepListener
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CEasyDialingCenrepListener::CEasyDialingCenrepListener(MEasyDialingCenrepListenerObserver* aObserver)
+        : iObserver(aObserver),
+        iEasyDialingSettingValue(0),
+        iContactThumbnailsSettingsValue(1)
+        
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::ConstructL
+// Symbian 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingCenrepListener::ConstructL()
+    {
+    iClient = CRepository::NewL(KCRUidEasyDialSettings);
+    
+    User::LeaveIfError(iClient->Get( KEasyDialing, iEasyDialingSettingValue ));
+    User::LeaveIfError(iClient->Get( KEasyDialingContactThumbnails, iContactThumbnailsSettingsValue ));
+    
+    iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iClient );
+    iNotifyHandler->StartListeningL();
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::KeyValueL
+// Returns key value
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingCenrepListener::Value() const
+    {
+    return iEasyDialingSettingValue;
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::SetEasyDialingSettingsValue
+// Sets key value.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingCenrepListener::SetEasyDialingSettingsValue( const TInt aValue )
+    {
+    iClient->Set( KEasyDialing, aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingCenrepListener::HandleNotifyInt
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingCenrepListener::HandleNotifyGeneric( TUint32 aId )
+    {
+    TInt value(0);
+    
+    iClient->Get( aId, value );
+    
+    if( aId == KEasyDialingContactThumbnails)
+        {
+        if( value!= iContactThumbnailsSettingsValue )
+            {
+            iContactThumbnailsSettingsValue = value;
+            iObserver->EasyDialingContactThumbnailsSettingsChanged( iContactThumbnailsSettingsValue );
+            }
+        }
+    
+    else if ( aId == KEasyDialing )
+        {
+        if ( value != iEasyDialingSettingValue )
+            {
+            iEasyDialingSettingValue = value;
+            iObserver->EasyDialingSettingsChanged( iEasyDialingSettingValue );
+            }        
+        }
+    }
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialingcontactdata.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing contact data container.
+*
+*/
+
+#include <e32std.h>
+#include <MVPbkContactLink.h>
+#include <fbs.h>
+
+#include "easydialingcontactdata.h"
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::CEasyDialingContactData
+// ---------------------------------------------------------------------------
+//
+CEasyDialingContactData::CEasyDialingContactData(MVPbkContactLink* aContactLink)
+        : iContactLink(aContactLink), iThumbnail(NULL),iFav(EFalse), iLoaded(EFalse)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::~CEasyDialingContactData
+// ---------------------------------------------------------------------------
+//
+CEasyDialingContactData::~CEasyDialingContactData()
+    {
+    delete iThumbnail;
+    delete iContactLink;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::Id
+// ---------------------------------------------------------------------------
+//
+MVPbkContactLink* CEasyDialingContactData::ContactLink()
+    {
+    return iContactLink;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::Thumbnail
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CEasyDialingContactData::Thumbnail()
+    {
+    return iThumbnail;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::SetThumbnail
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::SetThumbnail(CFbsBitmap* aThumbnail)
+    {
+    if (iThumbnail)
+        {
+        delete iThumbnail;
+        }
+    iThumbnail = aThumbnail;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::Fav
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactData::Fav()
+    {
+    return iFav;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::SetFav
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::SetFav(TBool aFav)
+    {
+    iFav = aFav;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::IsLoaded
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactData::IsLoaded() 
+    {
+    return iLoaded;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::LoadingComplete
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::LoadingComplete()
+    {
+    iLoaded = ETrue;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::DeleteThumbnail
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::DeleteThumbnail()
+    {
+    delete iThumbnail;
+    iThumbnail = NULL;
+    iLoaded = EFalse;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::VoiceCallAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactData::VoiceCallAvailable()
+    {
+    return iVoiceCallAvailable;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::SetVoiceCallAvailable
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::SetVoiceCallAvailable( TBool aVailable )
+    {
+    iVoiceCallAvailable = aVailable;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::VideoCallAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactData::VideoCallAvailable()
+    {
+    return iVideoCallAvailable;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::SetVideoCallAvailable
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::SetVideoCallAvailable( TBool aVailable )
+    {
+    iVideoCallAvailable = aVailable;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::UniEditorAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactData::UniEditorAvailable()
+    {
+    return iUniEditorAvailable;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactData::SetUniEditorAvailable
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactData::SetUniEditorAvailable( TBool aVailable )
+    {
+    iUniEditorAvailable = aVailable;
+    }
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialingcontactdatamanager.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,1007 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing contact data manager.
+*
+*/
+
+#include <e32std.h>
+#include <fbs.h>
+#include <CPbk2ImageManager.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactLink.h>
+#include <VPbkContactStoreUris.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <CVPbkTopContactManager.h>
+#include <MVPbkContactOperationBase.h>
+#include <TVPbkStoreContactAnalyzer.h>
+#include <MVPbkFieldType.h>
+#include <VPbkEng.rsg>
+
+#include <MVPbkContactViewBase.h>
+#include <MVPbkBaseContactFieldCollection.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactFieldData.h>
+
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkOperationObserver.h>
+#include <MVPbkContactStore.h>          // MVPbkContactStore
+#include <MVPbkStoreContact.h>
+#include <centralrepository.h>
+
+#include <PbkGlobalSettingFactory.h>
+
+#include "easydialingcontactdata.h"
+#include "easydialingcontactdatamanager.h"
+#include "easydialingutils.h"
+#include "mcontactdatamanagerobserver.h"
+#include "easydialingcrkeys.h"
+#include "easydialinglogger.h"
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::CEasyDialingContactDataManager
+// ---------------------------------------------------------------------------
+//
+CEasyDialingContactDataManager::CEasyDialingContactDataManager(CVPbkContactManager* aContactManager)
+        : iImageOperation(NULL), iContactManager(aContactManager), iContactOperation(NULL),
+          iContactThumbnailSetting(ETrue), iStoreReady(EFalse)
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::~CEasyDialingContactDataManager
+// ---------------------------------------------------------------------------
+//
+CEasyDialingContactDataManager::~CEasyDialingContactDataManager()
+    {
+    Reset();
+    iWaitingContacts.Close();
+    iContactDataArray.Close();
+    delete iImageManager;
+    delete iVPbkTopContactManager;
+    delete iImageOperation;
+    delete iContactOperation;
+    delete iFavsView;
+    if (iContactStore)
+        {
+        iContactStore->Close( *this);
+        }
+    
+    if ( iPbkSettings )
+        {
+        iPbkSettings->Close();
+        }
+    delete iPbkSettings;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ConstructL()
+    {
+    iImageManager = CPbk2ImageManager::NewL(*iContactManager);
+    
+    TVPbkContactStoreUriPtr uri( VPbkContactStoreUris::DefaultCntDbUri() );
+    iContactStore = iContactManager->ContactStoresL().Find( uri );
+
+    iVPbkTopContactManager = CVPbkTopContactManager::NewL( *iContactManager );
+
+    iImageManagerParams.iFlags = TPbk2ImageManagerParams::EScaleImage | TPbk2ImageManagerParams::EKeepAspectRatio;
+    iThumbnailFieldType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_THUMBNAILPIC );
+
+    // Open the store
+    iContactStore->OpenL( *this );
+    
+    // Read easydialing setting from cenrep.
+    CRepository* cenrep = CRepository::NewL( KCRUidEasyDialSettings );
+    CleanupStack::PushL( cenrep );
+    User::LeaveIfError( cenrep->Get( KEasyDialingContactThumbnails, iContactThumbnailSetting ) );
+    CleanupStack::PopAndDestroy( cenrep );
+    
+    iPbkSettings = PbkGlobalSettingFactory::CreatePersistentSettingL();
+    iPbkSettings->ConnectL( MPbkGlobalSetting::EGeneralSettingCategory );
+    iPbkSettings->RegisterObserverL( this );
+
+    // Get name order from Phonebook settings
+    UpdateNameOrderL();
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::SetObserver
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::SetObserver(MContactDataManagerObserver* aObserver)
+    {
+    iObserver = aObserver;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::SetThumbnailSize
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::SetThumbnailSize(const TSize& aSize)
+    {
+    if (iImageManagerParams.iSize != aSize)
+        {
+        iImageManagerParams.iSize = aSize;
+        Reload();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::GetThumbnailIdL
+// ---------------------------------------------------------------------------
+//
+HBufC* CEasyDialingContactDataManager::GetThumbnailIdL(
+        MVPbkContactLink* aContact, TBool aMatchThumbnails, TBool aFav )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: GetThumbnailIdL");
+    TInt newIndex(KErrNotFound);
+    if (aMatchThumbnails)
+        {
+        newIndex = FindContactIndex( aContact );
+        }
+    
+    LOGSTRING1("newIndex = %d", newIndex);
+    if (newIndex == KErrNotFound)
+        {
+        MVPbkContactLink* newLink = aContact->CloneLC();
+        CEasyDialingContactData *newThumbnail = new (ELeave) CEasyDialingContactData(newLink);
+        CleanupStack::Pop(); // newLink
+        newIndex = iContactDataArray.Count();
+        CleanupStack::PushL(newThumbnail);
+        iContactDataArray.AppendL(newThumbnail);
+        CleanupStack::Pop(newThumbnail);
+        }
+    
+    iContactDataArray[ newIndex ]->SetFav( aFav );
+    
+    HBufC* id = HBufC::NewL( sizeof(TInt) * 2 ); // space for hex representation of TInt
+    TPtr ptr = id->Des();
+    ptr.Num(newIndex, EHex);
+    LOGSTRING1("CEasyDialingContactDataManager: GetThumbnailIdL returns %S", id);
+    return id;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::GetThumbnailAndFav 
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav)
+    {
+    LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav");
+    TUint idVal(0);
+    TLex lex(aId);
+    lex.Val(idVal, EHex);
+    
+    TBool retVal;
+    
+    CEasyDialingContactData* thumbnail = iContactDataArray[idVal];
+    aFav = thumbnail->Fav();
+    if (thumbnail->IsLoaded())
+        {
+        aThumbnail = thumbnail->Thumbnail();
+        retVal = ETrue;
+        }
+    else
+        {
+        aThumbnail = NULL;
+        retVal = EFalse;
+        if (iWaitingContacts.Find(idVal) == KErrNotFound)
+            {
+            LOGSTRING1("iWaitingContacts.Append %d", idVal);
+            iWaitingContacts.Append(idVal);
+            TRAPD(err, LoadNextContactDataL());
+            if (err)
+                {
+                HandleError(err);
+                }
+            }
+        }    
+    LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav Exit");
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::IsFavL
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::IsFavL( MVPbkContactLink* aLink )
+    {
+    if ( iFavsView && iFavsViewReady && iFavsView->IndexOfLinkL( *aLink ) > KErrNotFound )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::NumberOfFavsL
+// ---------------------------------------------------------------------------
+//
+TInt CEasyDialingContactDataManager::NumberOfFavsL()
+    {
+    if ( iFavsView && iFavsViewReady )
+        {
+        return iFavsView->ContactCountL();
+        }
+    else
+        {
+        return 0;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::FavLinkLC
+// ---------------------------------------------------------------------------
+//
+MVPbkContactLink* CEasyDialingContactDataManager::FavLinkLC( TInt aIndex )
+    {
+    if ( !iFavsView || !iFavsViewReady )
+        {
+        // LC function should not return normally unless it has actually
+        // put something to cleanup stack
+        User::Leave( KErrNotFound );
+        }
+    return iFavsView->ContactAtL( aIndex ).CreateLinkLC();
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::FavContactStringLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CEasyDialingContactDataManager::FavContactStringLC( TInt aIndex, TNameOrder aNameOrder )
+    {
+    const MVPbkBaseContactFieldCollection& fields = iFavsView->ContactAtL( aIndex ).Fields();
+    TPtrC firstName;
+    TPtrC lastName;
+    TPtrC companyName;
+    for ( TInt i = 0; i < fields.FieldCount(); i++ )
+        {
+        const MVPbkFieldType* fieldType = fields.FieldAt( i ).MatchFieldType( 0 );
+        switch ( fieldType->FieldTypeResId() )
+            {
+            case R_VPBK_FIELD_TYPE_LASTNAME:
+                {
+                const MVPbkContactFieldTextData& data = 
+                        MVPbkContactFieldTextData::Cast( fields.FieldAt( i ).FieldData() );
+                lastName.Set( data.Text() );
+                }
+                break;
+            case R_VPBK_FIELD_TYPE_FIRSTNAME:
+                {
+                const MVPbkContactFieldTextData& data = 
+                        MVPbkContactFieldTextData::Cast( fields.FieldAt( i ).FieldData() );
+                firstName.Set( data.Text() );
+                }
+                break;
+            case R_VPBK_FIELD_TYPE_COMPANYNAME:
+                {
+                const MVPbkContactFieldTextData& data = 
+                        MVPbkContactFieldTextData::Cast( fields.FieldAt( i ).FieldData() );
+                companyName.Set( data.Text() );
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    
+    return EasyDialingUtils::CreateContactStringLC( firstName, lastName, companyName, aNameOrder );
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::NameOrder
+// ---------------------------------------------------------------------------
+//
+CEasyDialingContactDataManager::TNameOrder CEasyDialingContactDataManager::NameOrder()
+    {
+    return iNameOrder;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::Pause
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::Pause( TBool aPause )
+    {
+    if ( iPause != aPause )
+        {
+        iPause = aPause;
+        
+        if ( !iPause && iWaitingContacts.Count() )
+            {
+            TRAPD( err, LoadNextContactDataL());
+            if ( err )
+                {
+                HandleError(err);
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::InitReady
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::InitReady()
+    {
+    // Initialization is ready. we can start loading contact data, if needed.
+    // (It is unlikely that there is any data to load at this point)
+    iStoreReady = ETrue;
+    if ( iWaitingContacts.Count() )
+        {
+        TRAPD( err, LoadNextContactDataL() )
+        if ( err )
+            {
+            HandleError( err );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::FindContactIndex
+// ---------------------------------------------------------------------------
+//
+TInt CEasyDialingContactDataManager::FindContactIndex( MVPbkContactLink* aContact )
+    {
+    TInt index( KErrNotFound );
+
+    for ( TInt i = 0; i < iContactDataArray.Count(); i++ )
+        {
+        if ( iContactDataArray[i]->ContactLink()->IsSame( *aContact ) )
+            {
+            index = i;
+            break;
+            }
+        }
+    
+    return index;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::LoadNextContactDataL
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::LoadNextContactDataL()
+    {
+    LOGSTRING("CEasyDialingContactDataManager: LoadNextContactDataL");
+    if ( !iImageOperation && !iContactOperation && iWaitingContacts.Count() && iStoreReady && !iPause )
+        {
+        // first we need to load the contact item
+        CEasyDialingContactData* tn = iContactDataArray[iWaitingContacts[0]];
+        iContactOperation = iContactManager->RetrieveContactL( *(tn->ContactLink()), *this);
+
+        if (!iContactOperation)
+            {
+            tn->LoadingComplete();
+            RDebug::Print(_L("iWaitingContacts.Remove %d"), iWaitingContacts[0]);            
+            iWaitingContacts.Remove(0);
+            LoadNextContactDataL();
+            }
+        }          
+    LOGSTRING("CEasyDialingContactDataManager: LoadNextContactDataL Exit");
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::PbkImageGetComplete
+// From MPbkImageGetObserver
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap)
+    {
+    LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetComplete");
+    TInt index = iWaitingContacts[0];
+    LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);            
+    iWaitingContacts.Remove(0);
+    delete &aOperation;
+    iImageOperation = NULL;
+    delete iStoreContact;
+    iStoreContact = NULL;
+        
+    TRAPD(err, DoHandleImageGetCompleteL(aBitmap, index));
+    if (err)
+        {
+        HandleError(err);
+        }
+    LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetComplete Exit");
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::PbkImageGetFailed
+// From MPbkImageGetObserver
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::Pbk2ImageGetFailed(MPbk2ImageOperation& aOperation, TInt /*aError*/)
+    {
+    LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetFailed");
+    Pbk2ImageGetComplete(aOperation, NULL);
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::SettingChangedL
+// From MPbkGlobalSettingObserver
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::SettingChangedL( MPbkGlobalSetting::TPbkGlobalSetting aKey )
+    {
+    if ( aKey == MPbkGlobalSetting::ENameOrdering )
+        {
+        UpdateNameOrderL();
+        if ( iObserver )
+            {
+            iObserver->NameOrderChanged();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::UpdateNameOrderL
+// Update name order according to Phonebook setting
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::UpdateNameOrderL()
+    {
+    /*
+    * Phonebook name ordering flag, integer value, possible values:
+    * 0: name order Lastname Firstname
+    * 1: name order Firstname Lastname
+    * 2: name order undefined
+    */
+    TInt nameOrderSetting;
+    iPbkSettings->Get( MPbkGlobalSetting::ENameOrdering, nameOrderSetting );
+    
+    switch ( nameOrderSetting )
+        {
+        case 0:
+            {
+            iNameOrder = ELastnameFirstname;
+            break;
+            }
+        case 1:
+            {
+            iNameOrder = EFirstnameLastname;
+            break;
+            }
+        case 2:
+        default:
+            {
+            // Decide name order based on UI language: lastname-firstname
+            // for Chinese, firstname-lastname for the rest of languages.
+            TLanguage uiLang = User::Language();
+            if ( uiLang == ELangPrcChinese || 
+                 uiLang == ELangHongKongChinese ||
+                 uiLang == ELangTaiwanChinese )
+                {
+                iNameOrder = ELastnameFirstname;
+                }
+            else
+                {
+                iNameOrder = EFirstnameLastname;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::DoHandleImageGetCompleteL
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex)
+    {
+    LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL");
+    CEasyDialingContactData *tn = iContactDataArray[aIndex];
+    tn->LoadingComplete();
+    if (aBitmap)
+        {
+        tn->SetThumbnail(aBitmap);
+        }
+    
+    LoadNextContactDataL();
+    InformObserver();
+    LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL Exit");
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::Reset
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::Reset()
+    {
+    LOGSTRING("CEasyDialingContactDataManager: Reset");
+    delete iImageOperation;
+    iImageOperation = NULL;
+    delete iContactOperation;
+    iContactOperation = NULL;
+    delete iStoreContact;
+    iStoreContact = NULL;
+    iWaitingContacts.Reset();
+    iContactDataArray.ResetAndDestroy();
+    iPause = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::VoiceCallAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::VoiceCallAvailable( TInt aIndex )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: VoiceCallAvailable");
+
+    TBool ret( EFalse );
+    
+    if( aIndex >= 0 )
+        {
+        // If the parsed index is valid, return the availability.
+        ret = iContactDataArray[ aIndex ]->VoiceCallAvailable();
+        }
+    
+    LOGSTRING1("CEasyDialingContactDataManager: VoiceCallAvailable returns %d", ret);
+    return ret;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::VideoCallAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::VideoCallAvailable( TInt aIndex )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: VideoCallAvailable");
+
+    TBool ret( EFalse );
+    
+    if( aIndex >= 0 )
+        {
+        // If the parsed index is valid, return the availability.
+        ret = iContactDataArray[ aIndex ]->VideoCallAvailable();
+        }
+    
+    LOGSTRING1("CEasyDialingContactDataManager: VideoCallAvailable returns %d", ret);
+    return ret;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::UniEditorAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::UniEditorAvailable( TInt aIndex )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: UniEditorAvailable");
+
+    TBool ret( EFalse );
+    
+    if( aIndex >= 0 )
+        {
+        // If the parsed index is valid, return the availability.
+        ret = iContactDataArray[ aIndex ]->UniEditorAvailable();
+        }
+    
+    LOGSTRING1("CEasyDialingContactDataManager: UniEditorAvailable returns %d", ret);
+    return ret;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactLinkLC
+// ---------------------------------------------------------------------------
+//
+HBufC8* CEasyDialingContactDataManager::ContactLinkLC( TInt aIndex )
+    {
+    LOGSTRING( "CEasyDialingContactDataManager: ContactLinkLC" );
+
+    if( aIndex >= 0 )
+        {
+        // If the parsed index is valid, return the availability.
+        return iContactDataArray[ aIndex ]->ContactLink()->PackLC();
+        }
+    else 
+        {
+        return NULL; 
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::HandleError
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::HandleError(TInt /*aError*/)
+    {
+    LOGSTRING("CEasyDialingContactDataManager: HandleError");
+    // Something went wrong, but there is no need to panic.
+    // Cancel async operations and notify observer that we are done.
+    iWaitingContacts.Reset();
+    delete iImageOperation;
+    iImageOperation = NULL;
+    delete iContactOperation;
+    iContactOperation = NULL;
+    
+    // Also mark all contact data as loaded. Otherwise it would just be
+    // loaded again, which would cause infinite loop if there is a permanent
+    // problem.
+    for ( TInt i = 0; i < iContactDataArray.Count(); i++ )
+        {
+        iContactDataArray[i]->LoadingComplete();
+        }
+    
+    if ( iObserver )
+        {
+        iObserver->AllContactDataLoaded();
+        }
+    }
+    	
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::StoreReady
+// from MVPbkContactStoreObserver
+// Called when the contact store is ready to be used, signals
+// the next engine state.
+// @param aContactStore The store that is ready.
+// ---------------------------------------------------------------------------
+//
+
+void CEasyDialingContactDataManager::StoreReady( MVPbkContactStore& /*aContactStore*/ )
+    {
+    // next open the favourites view
+    TRAPD( err, iVPbkTopContactManager->GetTopContactsViewL( *this, *this ) );
+    if ( err )
+        {
+        HandleError( err );
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::StoreUnavailable
+// from MVPbkContactStoreObserver
+// Called when a contact store becomes unavailable.
+// @param aContactStore The store that became unavailable.
+// @param aReason The reason why the store is unavailable.
+//                This is one of the system wide error codes.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::StoreUnavailable( MVPbkContactStore& /*aContactStore*/,
+        TInt /*aReason*/ )
+    {
+    // Opening main contact database failed. Easydialing can operate without
+    // it, but thumbnails and favourite stars can't be shown, and availability
+    // of action menu items can't be checked.
+    //   Of course, if easydialing can't open the database, probably PCSServer
+    // can't open it either...
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::HandleStoreEventL
+// from MVPbkContactStoreObserver
+// Called when changes occur in the contact store.
+// IGNORED.
+// @param aContactStore A store whose event it is.
+// @param aStoreEvent The event that has occurred.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::HandleStoreEventL(MVPbkContactStore& /*aContactStore*/,
+        TVPbkContactStoreEvent /*aStoreEvent*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::VPbkOperationFailed
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::VPbkOperationFailed(
+        MVPbkContactOperationBase* /*aOperation*/,
+        TInt /*aError*/ )
+    {
+    // Loading list of favourite contacts failed.
+    // Continue as if none of the contacts are favourited.
+    delete iFavsOperation;
+    iFavsOperation = NULL;        
+    delete iFavsView;
+    iFavsView = NULL;
+    iFavsViewReady = EFalse;
+
+    InitReady();
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::VPbkOperationResultCompleted
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::VPbkOperationResultCompleted(
+        MVPbkContactOperationBase* /*aOperation*/,
+        MVPbkContactViewBase* aOperationResult )
+    {
+    delete iFavsOperation;
+    iFavsOperation = NULL;
+    delete iFavsView;
+    iFavsView = aOperationResult;
+    iFavsViewReady = ETrue;
+    
+    // Leave can be safely ignored. Notifications of favourites view changes
+    // will not work, but otherwise Easydialing will work correctly.
+    TRAP_IGNORE( iFavsView->AddObserverL( *this ) );
+    
+    InitReady();
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactViewReady
+// From MVPbkContactViewObserver.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ContactViewReady(
+        MVPbkContactViewBase& aView )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: ContactViewReady");
+    
+    if ( iFavsView == &aView )
+        {
+        iFavsViewReady = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactViewUnavailable
+// From MVPbkContactViewObserver.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ContactViewUnavailable(
+        MVPbkContactViewBase& aView )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: ContactViewUnavailable");
+    
+    if ( iFavsView == &aView )
+        {
+        iFavsViewReady = EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactAddedToView
+// From MVPbkContactViewObserver.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ContactAddedToView(
+        MVPbkContactViewBase& aView, 
+        TInt /*aIndex*/, 
+        const MVPbkContactLink& /*aContactLink*/ )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: ContactAddedToView");
+    
+    if ( iFavsView == &aView )
+        {
+        iObserver->FavouritesChanged();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactRemovedFromView
+// From MVPbkContactViewObserver.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ContactRemovedFromView(
+        MVPbkContactViewBase& aView, 
+        TInt /*aIndex*/, 
+        const MVPbkContactLink& /*aContactLink*/ )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: ContactRemovedFromView");
+    
+    if ( iFavsView == &aView )
+        {
+        iObserver->FavouritesChanged();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactViewError
+// From MVPbkContactViewObserver.
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ContactViewError(
+        MVPbkContactViewBase& aView, 
+        TInt /*aError*/, 
+        TBool /*aErrorNotified*/ )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: ContactViewError");
+    
+    if ( iFavsView == &aView )
+        {
+        iFavsViewReady = EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::DoHandleContactOperationCompleteL
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::DoHandleContactOperationCompleteL(
+        MVPbkStoreContact* aContact, TInt aIndex)
+    {
+    LOGSTRING("CEasyDialingContactDataManager: DoHandleContactOperationCompleteL");
+    if (aContact)
+        {
+        
+        __ASSERT_DEBUG((!iStoreContact && !iImageOperation), User::Panic(_L("CEasyDialingContactDataManager"), 1));
+        iStoreContact = aContact;
+        
+        // Find out the available communication methods for the contact.
+        GetAvailableServicesL( aContact, aIndex );
+        
+                
+        // Next initiate async thumbnail get operation.
+        
+        if(GetContactThumbnailSetting()) // reads the iContactThumbnailSetting value if it is false we dont fetch images
+            {
+            if (iImageManager->HasImage(*iStoreContact, *iThumbnailFieldType))
+                {
+                iImageOperation = iImageManager->GetImageAsyncL(
+                        &iImageManagerParams,
+                        *iStoreContact,
+                        *iThumbnailFieldType,
+                        *this);
+                }
+            }
+        if (!iImageOperation)
+            {
+            CEasyDialingContactData *tn = iContactDataArray[aIndex];
+            tn->LoadingComplete();
+            LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);            
+            iWaitingContacts.Remove(0);
+            delete iStoreContact;
+            iStoreContact = NULL;
+            LoadNextContactDataL();
+            InformObserver();
+            }
+        }
+    else
+        {
+        // Opening contact failed. Mark contact data loaded, so it's not opened again.
+        CEasyDialingContactData *tn = iContactDataArray[aIndex];
+        tn->LoadingComplete();
+        LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);            
+        iWaitingContacts.Remove(0);
+        LoadNextContactDataL();
+        InformObserver();
+        }
+    LOGSTRING("CEasyDialingContactDataManager: DoHandleContactOperationCompleteL Exit");
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::GetAvailableServicesL
+//
+// Reads from parameter contact which services, i.e. communication methods,
+// can be used with this contact. 
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::GetAvailableServicesL( MVPbkStoreContact* aContact, TInt aIndex )
+    {
+    LOGSTRING1("CEasyDialingContactDataManager: GetAvailableServicesL index = %d", aIndex);
+    TVPbkStoreContactAnalyzer analyzer( *iContactManager, aContact );
+    
+    CEasyDialingContactData* contactData = iContactDataArray[aIndex];
+    
+    // Voice call is available if either circuit-switched call or voip call is available.
+    TBool csdCall = (analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EVoiceCallSelector ) != KErrNotFound);
+    TBool voipCall = (analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EVOIPCallSelector ) != KErrNotFound);
+    
+    contactData->SetVoiceCallAvailable( csdCall || voipCall );
+    
+    contactData->SetVideoCallAvailable(
+            analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EVideoCallSelector ) != KErrNotFound );
+    
+    contactData->SetUniEditorAvailable(
+            analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EUniEditorSelector ) != KErrNotFound );
+    
+    LOGSTRING("CEasyDialingContactDataManager: GetAvailableServicesL Exit");
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::VPbkSingleContactOperationComplete
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::VPbkSingleContactOperationComplete(
+        MVPbkContactOperationBase& aOperation,
+        MVPbkStoreContact* aContact )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete");
+    delete &aOperation;
+    iContactOperation = NULL;
+    TInt index = iWaitingContacts[0];
+    LOGSTRING1("VPbkSingleContactOperationComplete, Index=%d", index);
+    TRAPD(err, DoHandleContactOperationCompleteL(aContact, index));
+    if (err)
+        {
+        HandleError(err);
+        }
+    LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete Exit");
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::VPbkSingleContactOperationFailed
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::VPbkSingleContactOperationFailed(
+        MVPbkContactOperationBase& /*aOperation*/, 
+        TInt /*aError*/ )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationFailed");
+    delete iContactOperation;
+    iContactOperation = NULL;
+    TInt index = iWaitingContacts[0];
+    LOGSTRING1("VPbkSingleContactOperationFailed, Index=%d", index);
+    TRAPD(err, DoHandleContactOperationCompleteL(NULL, index));
+    if (err)
+        {
+        HandleError(err);
+        }
+    LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationFailed Exit");
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::InformObserver
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::InformObserver()
+    {
+    if (iObserver && !iWaitingContacts.Count())
+        {
+        iObserver->AllContactDataLoaded();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::SetContactThumbnailSetting
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::SetContactThumbnailSetting( TInt aContactThumbnailSetting )
+    {
+    iContactThumbnailSetting = aContactThumbnailSetting;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::GetContactThumbnailSetting
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::GetContactThumbnailSetting( )
+    {
+    return iContactThumbnailSetting;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::Reload
+// ---------------------------------------------------------------------------
+//
+void  CEasyDialingContactDataManager::Reload( )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: Reload");
+    
+    for ( TInt i = 0 ; i < iContactDataArray.Count() ; i++ )
+        {
+        iContactDataArray[ i ]->DeleteThumbnail();
+        }
+    }
+
+
+//  End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialinglistbox.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,582 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing list box.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "easydialinglistbox.h"
+#include "easydialinglistboxview.h"
+#include "easydialinglistboxitemdrawer.h"
+#include "easydialinglistboxdata.h"
+#include "easydialingpanics.h"
+#include "easydialingcontactdatamanager.h"
+#include "easydialingcrkeys.h"
+
+#include <easydialingpluginresources.rsg>
+
+#include <phoneappcommands.hrh>
+#include <phonebook2.mbg>
+#include <phonebook2ece.mbg>
+
+#include <ccappcommlauncherpluginrsc.rsg>
+
+#include <aknlongtapdetector.h> // Required for touch
+#include <AknsFrameBackgroundControlContext.h>
+
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <gulicon.h>
+#include <centralrepository.h>
+#include <bautils.h>    // for BaflUtils
+
+#include <aknlistloadertfx.h>
+#include <aknlistboxtfxinternal.h>
+#include <aknlistboxtfx.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+extern TRect ContactImageBoundingBox( const TRect& aItemRect );
+extern TRect ActionMenuIconBoundingBox(const TRect& aItemRect);
+
+// CONSTANTS
+static const TInt KListBoxMarginWidth = 2;
+static const TInt KMaxVisibleItemsPortrait = 3;
+static const TInt KMaxVisibleItemsLandscape = 2;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+
+/*
+ * ==============================================================================
+ * 
+ * 
+ * class CEasyDialingListBox
+ * 
+ * 
+ * ==============================================================================
+ */
+
+
+// -----------------------------------------------------------------------------
+// CEasyDialingListBox
+// 
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBox::CEasyDialingListBox() :
+    CEikFormattedCellListBox()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// ~CEasyDialingListBox
+// 
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBox::~CEasyDialingListBox()
+    {
+    delete iBGContext;    
+    delete iLongTapDetector;
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::ConstructL( TInt aFlags, 
+        CEasyDialingContactDataManager* aContactDataManager )
+    {
+    CEikFormattedCellListBox::ConstructL( NULL, aFlags );
+    
+    iLongTapDetector = CAknLongTapDetector::NewL( this );
+ 
+    CEasyDialingListBoxItemDrawer* drawer = static_cast<CEasyDialingListBoxItemDrawer*> (iItemDrawer);
+    CEasyDialingListBoxData* data = drawer->EasyDialingCellData();
+    data->SetContactDataManager(aContactDataManager);
+    data->SetEDLBXControl(this);
+    
+    iBGContext = CAknsFrameBackgroundControlContext::NewL( KAknsIIDQsnFrPopupSub,
+            Rect(), Rect(), EFalse );
+       
+    // ContactDataManager is accessed from SizeChanged. If list item size
+    // changes -> thumbnail size changes
+    iContactDataManager = aContactDataManager;
+    
+    drawer->SetColors();
+
+    CreateScrollBarFrameL( ETrue );
+    ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+    }
+
+
+// -----------------------------------------------------------------------------
+// MakeViewClassInstanceL
+// 
+// -----------------------------------------------------------------------------
+//
+CListBoxView* CEasyDialingListBox::MakeViewClassInstanceL()
+    {
+    return (new ( ELeave ) CEasyDialingListBoxView);
+    }
+
+
+// -----------------------------------------------------------------------------
+// ItemDrawer
+// 
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBoxItemDrawer* CEasyDialingListBox::ItemDrawer() const
+    {
+    return (CEasyDialingListBoxItemDrawer*) iItemDrawer;
+    }
+
+
+// -----------------------------------------------------------------------------
+// FocusChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::FocusChanged( TDrawNow aDrawNow )
+    {
+    if ( !IsFocused() )
+        {
+        CEasyDialingListBoxView* view = static_cast<CEasyDialingListBoxView*>( iView );
+        view->SetCurrentItemIndexToNone();
+        }
+    CEikFormattedCellListBox::FocusChanged( aDrawNow );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CreateItemDrawerL
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::CreateItemDrawerL()
+    {
+    CEasyDialingListBoxData* celldata = CEasyDialingListBoxData::NewL();
+    CleanupStack::PushL( celldata );
+    iItemDrawer = new(ELeave) CEasyDialingListBoxItemDrawer(Model(), iEikonEnv->NormalFont(), celldata);
+    CleanupStack::Pop( celldata );  
+    }
+
+
+// -----------------------------------------------------------------------------
+// Draw
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::Draw(const TRect& aRect) const
+    {
+    MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( iItemDrawer->Gc() );
+    if ( transApi )
+        {
+        transApi->SetListType( MAknListBoxTfxInternal::EListBoxTypeMainPane );
+        transApi->BeginRedraw( MAknListBoxTfxInternal::EListView, this->Rect() );
+        }
+    
+    if (!iView->RedrawDisabled() )
+        {
+        TRect clientRect( Rect() );
+        TRect viewRect = iView->ViewRect();
+        
+        if ( transApi )
+            {
+            transApi->StartDrawing( MAknListBoxTfxInternal::EListView );
+            }
+
+        AknsDrawUtils::BackgroundBetweenRects( 
+            AknsUtils::SkinInstance(), 
+            iBGContext, 
+            this, 
+            *iItemDrawer->Gc(), 
+            clientRect, 
+            viewRect );
+        
+        if ( transApi )
+            {
+            transApi->StopDrawing();
+            }
+        }
+    
+    if ( iModel->NumberOfItems() )
+        {
+        // Draw the actual list
+        iView->Draw(&aRect);
+        }
+    if ( transApi )
+        {
+        transApi->EndViewRedraw( aRect );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandleResourceChange
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::HandleResourceChange(TInt aType)
+    {
+    CEikFormattedCellListBox::HandleResourceChange( aType );
+    iSBFrame->VerticalScrollBar()->HandleResourceChange( aType );
+    iSBFrame->DrawScrollBarsNow();
+    ItemDrawer()->SetColors();
+    
+    // Base call to HandleResourceChange justifies the list to even items
+    // on the top. This causes problems when listbox height is not a multiple of
+    // listitem heights. Fix scrolling manually for these cases.
+    TRAP_IGNORE( HandleItemAdditionL() ); // needed to prevent drawing problems
+    TInt scrollIndex = ( IsFocused() ? CurrentItemIndex() : iNumberOfNames - 1 );
+    ScrollToMakeItemVisible( scrollIndex );
+    
+    DrawDeferred();
+    }
+
+
+// -----------------------------------------------------------------------------
+// SizeChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::SizeChanged()
+    {
+	// Note that within this call view rect is adjusted to fit into TGulBorder
+    // that could have been given in construction. It's not used by ED listbox.
+    // The view rect is not correct for ED after this call but it's
+    // calculated and set below.
+    CEikFormattedCellListBox::SizeChanged();
+    
+    TRect parentRect = Rect();
+    
+    // Set the listbox colors.
+    // For some reason, calling this in HandleResourceChange is not enough, it does
+    // not get called in situation it should.
+    ItemDrawer()->SetColors();
+    
+    // Get all the layout rects
+    TAknLayoutRect rect;
+    TInt variety = ( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 );
+
+    TAknWindowComponentLayout viewLayout( AknLayoutScalable_Apps::dia3_list_pane( variety ) );
+    rect.LayoutRect(parentRect, viewLayout );
+    TRect viewRect( rect.Rect() );
+    // Add a bit of margin around the view as layout doesn't define any
+    viewRect.Shrink( KListBoxMarginWidth, KListBoxMarginWidth );
+    
+    TAknWindowComponentLayout scrollBarLayout( AknLayoutScalable_Apps::scroll_pane_cp12() );
+    rect.LayoutRect( parentRect, scrollBarLayout );
+    TRect scrollBarRect( rect.Rect() );
+
+    TRect viewAndScrollBarRect( viewRect );
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        viewAndScrollBarRect.iTl.iX = scrollBarRect.iTl.iX + KListBoxMarginWidth;
+        }
+    else
+        {
+        viewAndScrollBarRect.iBr.iX = scrollBarRect.iBr.iX - KListBoxMarginWidth;
+        }
+
+    // If scrollbar is not needed, then we can use all the space for the list view
+    if ( GetHeightBasedOnNumberOfItems( iNumberOfNames ) <= parentRect.Height() )
+        {
+        viewRect = viewAndScrollBarRect;
+        scrollBarRect.SetWidth( 0 );
+        }
+
+    // Must use this method so that all eiklistbox's internal variables are 
+    // set and updated according to this viewRect. This call would
+    // add list margins but no such are defined in layouts so view's rect is
+    // set to viewRect calculated here.
+    SetViewRectFromClientRect( viewRect );
+    
+    // Set scroll bar rect
+    if ( iSBFrame )
+        {
+        CAknDoubleSpanScrollBar* scrollbar = static_cast <CAknDoubleSpanScrollBar*>( iSBFrame->VerticalScrollBar() );
+        scrollbar->SetFixedLayoutRect( scrollBarRect );
+        scrollbar->SetRect( scrollBarRect );
+        scrollbar->MakeVisible( scrollBarRect.Width() != 0 );
+        }
+
+    iBGContext->SetFrameRects( parentRect, viewAndScrollBarRect );
+    
+    TRAP_IGNORE( CEikFormattedCellListBox::HandleViewRectSizeChangeL() );
+    }
+
+
+// -----------------------------------------------------------------------------
+// MopSupplyObject
+// 
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CEasyDialingListBox::MopSupplyObject( TTypeUid aId )
+    {
+    if ( aId.iUid == MAknsControlContext::ETypeId && iBGContext )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBGContext );
+        }
+    return CEikFormattedCellListBox::MopSupplyObject( aId );    
+    }
+
+// -----------------------------------------------------------------------------
+// MakeVisible
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::MakeVisible( TBool aVisible )
+    {
+    if ( aVisible != IsVisible() )
+        {
+        CEikFormattedCellListBox::MakeVisible( aVisible );
+        if ( iSBFrame )
+            {
+            CEikScrollBar* sb = iSBFrame->GetScrollBarHandle( CEikScrollBar::EVertical );
+            if ( sb )
+                {
+                sb->MakeVisible( aVisible );
+                if ( aVisible )
+                    {
+                    UpdateScrollBarThumbs();
+                    }
+                }
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// SetMaxRect
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::SetMaxRect( TRect aMaxRect )
+    {
+    iMaxRect = aMaxRect;
+
+    // Update the list item size according the maximum view rect size
+    TInt variety = ( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 );
+    TAknLayoutRect maxViewLayout;
+    maxViewLayout.LayoutRect( aMaxRect, AknLayoutScalable_Apps::dia3_list_pane( variety ) );
+    TRect maxViewRect( maxViewLayout.Rect() );
+    maxViewRect.Shrink( KListBoxMarginWidth, KListBoxMarginWidth ); // layout data doens't include any margins but we have added some
+    
+    TInt maxItemsShown = ( variety ? KMaxVisibleItemsLandscape : KMaxVisibleItemsPortrait );
+    TInt itemHeight = maxViewRect.Height() / maxItemsShown;
+    TRAP_IGNORE( SetItemHeightL( itemHeight ) );
+
+    // Calculate new thumbnail rect from item size
+    TSize itemSize( maxViewRect.Width(), itemHeight );
+    TRect thumbnailRect = ContactImageBoundingBox( itemSize );
+    iContactDataManager->SetThumbnailSize( thumbnailRect.Size() ); // reloads thumbnails if the new size is different from old one
+
+    // Inform listbox data class about changed list item size
+    ItemDrawer()->EasyDialingCellData()->HandleItemSizeChange();
+    }
+
+// -----------------------------------------------------------------------------
+// SetRectToNumberOfItems
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::SetRectToNumberOfItems( TInt aNumberOfNames ) 
+    {
+    iNumberOfNames = aNumberOfNames;
+
+    TRect listboxRect( iMaxRect );
+    
+    // Make listbox smaller if maximum size is not needed to show
+    // all list items.
+    TInt requiredHeight = GetHeightBasedOnNumberOfItems( iNumberOfNames );
+    if ( requiredHeight < listboxRect.Height() )
+        {
+        // Shrink rect height so that bottom of the rect doesn't move
+        listboxRect.iTl.iY += ( listboxRect.Height() - requiredHeight );
+        }
+    
+    SetRect( listboxRect );
+    }
+
+
+// -----------------------------------------------------------------------------
+// SetFocusedWithKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CEasyDialingListBox::SetFocusedWithKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse keyResponse = EKeyWasNotConsumed;
+    TInt keyCode = aKeyEvent.iCode;
+            
+    // Disable redrawing temporarily.
+    // This is because OfferKeyEventL puts the focus to the wrong item,
+    // and we don't want to show it flashing there.
+    // Make sure that no leave happens before redraw is enabled again.
+    iView->SetDisableRedraw( ETrue );
+        
+    TRAP_IGNORE( keyResponse = OfferKeyEventL( aKeyEvent, aType ) );
+    
+    TInt itemToFocus = ( keyCode == EKeyUpArrow ? iNumberOfNames - 1 : 0 );
+    ScrollToMakeItemVisible( itemToFocus );
+    SetCurrentItemIndex( itemToFocus );
+        
+    iView->SetDisableRedraw( EFalse );
+    
+    DrawDeferred();
+    
+    return keyResponse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// GetHeightBasedOnNumberOfItems
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingListBox::GetHeightBasedOnNumberOfItems( TInt aNum ) const
+    {
+    return ( ItemHeight()*aNum + KListBoxMarginWidth*2 ); 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CurrentContactDataIndex
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingListBox::CurrentContactDataIndex()
+    {
+    if ( CurrentItemIndex() >= 0 ) 
+        {
+        TPtrC itemText = Model()->ItemText( CurrentItemIndex() );
+        TPtrC indexText;
+        
+        TInt error = TextUtils::ColumnText( indexText , 0, &itemText );
+        __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) );
+
+        TUint id( 0 );
+        TLex lex( indexText );
+        error = lex.Val( id, EHex );
+        __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) );
+        
+        return id;
+        }
+    else 
+        {
+        return KErrNotFound;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CurrentContactLinkLC
+// 
+// -----------------------------------------------------------------------------
+//
+HBufC8* CEasyDialingListBox::CurrentContactLinkLC()
+    {
+    TInt index = CurrentContactDataIndex();
+    return iContactDataManager->ContactLinkLC( index );
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandleLongTapEventL
+// Callback from CAknLongTapDetector.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::HandleLongTapEventL( const TPoint& /*aPenEventLocation*/, 
+                                               const TPoint& /*aPenEventScreenLocation*/ )
+    {
+    ReportListBoxEventL( static_cast<MEikListBoxObserver::TListBoxEvent>
+            ( KEasyDialingContactLongTapped ) );
+    iPointerLongPressHandled = ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandlePointerEventL
+// Pointer event handling within the EasyDialingListBox.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    // Button down event starts new pointer press. Reset flags at this point.
+    if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+        {
+        iPointerLongPressHandled = EFalse;
+        }
+    
+    iLongTapDetector->PointerEventL(aPointerEvent);
+    if ( iPointerLongPressHandled )
+        {
+        // No further handling is made after long tap on list item
+        // has been detected.
+        return;
+        }
+
+    CEikFormattedCellListBox::HandlePointerEventL( aPointerEvent );
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandleScrollEventL
+// If the EasyDialingListBox is scrolled by dragging the Scroll bar, this
+// observer function is called
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBox::HandleScrollEventL( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType )
+    {
+    // Report scrolling to the listbox observer
+    TInt scrollEvent( KErrNotFound );
+    switch ( aEventType )
+        {
+        case EEikScrollThumbDragVert:
+            scrollEvent = KEasyDialingScrollingStarted;
+            break;
+
+        case EEikScrollThumbReleaseVert:
+        case EEikScrollUp:
+        case EEikScrollDown:
+        case EEikScrollPageUp:
+        case EEikScrollPageDown:
+            scrollEvent = KEasyDialingScrollingStopped;
+            break;
+            
+        default:
+            break;
+        }
+    
+    if ( scrollEvent != KErrNotFound )
+        {
+        ReportListBoxEventL( static_cast<MEikListBoxObserver::TListBoxEvent>( scrollEvent ) );
+        }
+    
+    // Base class(es) might be also interested about the scrollbar events
+    CEikFormattedCellListBox::HandleScrollEventL( aScrollBar, aEventType );
+    }
+
+// end of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialinglistboxdata.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,1342 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing list box data.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "easydialinglistboxdata.h"
+#include "easydialinglistbox.h"
+#include "easydialinglistboxview.h"
+#include "easydialinglistboxitemdrawer.h"
+#include "easydialingpanics.h"
+
+#include "easydialingcontactdatamanager.h"
+#include <easydialing.mbg>
+#include <phonebook2.mbg>
+#include <phonebook2ece.mbg>
+
+// AvKON and drawing header files
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <akniconconfig.h>
+#include <gulicon.h>
+#include <AknBidiTextUtils.h>
+#include <bidivisual.h>
+
+#include <aknlistloadertfx.h>
+#include <aknlistboxtfxinternal.h>
+#include <aknlistboxtfx.h>
+
+#include <akntransitionutils.h>
+#include <avkon.rsg>
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// KHighlightSeparatorChar is character used to separate matching and non-matching
+// portions of contact names. 
+const TInt KHighlightSeparatorChar = 0x1F;
+_LIT( KHighlightSeparatorCharAsLit, "\x1F" );
+
+
+// KContactNameFontHeightPercent is contact name font height relative to list item height.
+const TInt KContactNameFontHeightPercent = 35;
+
+// KCompanyNameFontHeightPercent is company name font height relative to list item height.
+const TInt KCompanyNameFontHeightPercent = 30;
+
+// KTextBoundingBoxHeightPercent gives the text bounding box height in percentages 
+// relative to font height. This must be over 100, or part of the text cuts off.
+const TInt KTextBoundingBoxHeightPercent = 120;
+
+// KTextPlacementPercent controls how text is placed vertically within its bounding box. 
+// The value is between 0 and 100. 0 means in top part, 50 mean in the middle, 100 means in the
+// bottom. 
+const TInt KTextPlacementPercent = 70;
+
+// KMarginXPercent defines a width of horizontal margin used in many places. In relation to
+// the width of the item rectangle.
+const TInt KMarginXPercent = 2;
+
+// KMarginYPercent defines a height of vertical margin. In relation to
+// the height of the item rectangle. Currently used only with contact thumbnail.
+const TInt KMarginYPercent = 4;
+
+// KContacNameYOffsetPercent defines the vertical placement of contact name in relation to 
+// item height.
+const TInt KContactNameYOffsetPercent = 10;
+
+// KCompanyNameYOffsetPercent defines the vertical placement of company name in relation to 
+// item height.
+const TInt KCompanyNameYOffsetPercent = 60;
+
+// KArrowIconSizePercent defines the size of action menu icon relative to item height.
+const TInt KArrowIconSizePercent = 20;
+
+// KMatchingTextMarginInPixels the absolute pixel width of highlight margin. Highlight margin
+// is an extra space in highlight boundary to make the text look less crowded.
+const TInt KMatchingTextMarginInPixels = 3;
+
+// KFavoriteIconSizePercent is size of favorite icon relative to text height.
+const TInt KFavoriteIconSizePercent = 65;
+
+// KMatchingTextMarginInPixels is the absolute pixel value for rounding used in highlight 
+// rectangle.
+const TInt KHighligthRectangleRoundingYInPixels = 4;
+
+// KThumbnailAspectRatio is the aspect ratio of contact thumbnail in percents. 133 for instance
+// is 4:3 aspect ration.
+const TInt KThumbnailAspectRatio = 133;
+
+const TInt KCent = 100;
+
+const TInt KMaxRunInfoArrayCount = 20;
+
+// IMPLEMENTATION SPECIFIC CONSTANTS
+// The mif file from where you would like to show the 
+// icon on the screen.
+_LIT( KFavouriteIconBitmapFile, "\\resource\\apps\\phonebook2.mif" );
+_LIT( KEasyDialingBitmapFile, "\\resource\\apps\\easydialing.mif" );
+_LIT( KPhonebook2EceBitmapFile, "\\resource\\apps\\phonebook2ece.mif" );
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// GLOBAL FUNCTION PROTOTYPES
+TRect ContactImageBoundingBox( const TRect& aItemRect );
+TRect ArrowIconBoundingBox(const TRect& aItemRect);
+
+// LOCAL FUNCTION PROTOTYPES
+static TRect ContactNameBoundingBox(
+        const TRect& aItemRect, 
+        const CFont* aContactNameFont, 
+        TBool aArrowIconShown,
+        TBool aIsFavourite, 
+        TBool aThumbnailsShown );
+static TRect CompanyNameBoundingBox(
+        const TRect& aItemRect, 
+        const CFont* aCompanyNameFont, 
+        TBool aIsCurrentItem,
+        TBool aThumbnailsShown );
+static TRect FavouriteIconBoundingBox( const TRect& aContactNameBoundingBox );
+static TRect MirrorLayoutBoundingBox(const TRect& aSourceRect, TRect& aBoundingBoxRect);
+static TInt BaseLineOffset( const TRect& aTextBoundingBox, const CFont* aFont );
+static TBool ContainsRightToLeftText( const TDesC& aDesc );
+static TInt HighlightSeparatorCount( const TDesC& aText );
+static HBufC* ConvertToVisualAndClipLC( const TDesC& aText, const CFont& aFont, const TRect& aBoundingBox ); 
+
+static void ClipTextToWidth(
+        TDes& aText,
+        const CFont& aFont,
+        TInt aMaxWidthInPixels,
+        TBool& aMatch );
+
+static TBool DrawPieceOfText(
+        const TRect& aBoundingBox,
+        TInt& aXOffset,
+        CWindowGc &aGc, 
+        const TDesC& aText,
+        TBool aMatch,
+        const CFont* aFont,
+        const CEasyDialingListBoxData::TExtendedColors& aColors,
+        TBool aHighLight);
+
+static TInt DrawTextWithMatchHighlightL(
+        const TRect& aBoundingBox,
+        CWindowGc &aGc, 
+        const TDesC& aText,
+        const CFont* aFont,
+        const CEasyDialingListBoxData::TExtendedColors& aColors,
+        TBool aHighLight );
+
+static TInt CalculateTextWidth(
+        const TRect& aBoundingBox,
+        const TDesC& aText,
+        const CFont* aFont );
+
+static TBool CalculateTextPieceWidth(
+        const TRect& aBoundingBox,
+        TInt& aXOffset,
+        const TDesC& aText,
+        TBool aMatch,
+        const CFont* aFont );
+
+static CGulIcon* CreateIconL(
+        const TDesC& aFileName,
+        TInt aBitmapId,
+        TInt aMaskId );
+// FORWARD DECLARATIONS
+
+
+/*
+ * ==============================================================================
+ * 
+ * 
+ * class EasyDialingListBoxData::TExtendedColors
+ * 
+ * 
+ * ==============================================================================
+ */
+
+
+// -----------------------------------------------------------------------------
+// TExtendedColors
+// 
+// -----------------------------------------------------------------------------
+//       
+CEasyDialingListBoxData::TExtendedColors::TExtendedColors() :
+CFormattedCellListBoxData::TColors(),
+iMatchingText(KRgbBlack),
+iMatchingBack(KRgbDarkYellow)
+    {
+    }
+
+
+/*
+ * ==============================================================================
+ * 
+ * 
+ * class CEasyDialingListBoxData
+ * 
+ * 
+ * ==============================================================================
+ */
+
+
+// -----------------------------------------------------------------------------
+// CEasyDialingListBoxData
+// 
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBoxData::CEasyDialingListBoxData() :
+CFormattedCellListBoxData()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// 
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBoxData::~CEasyDialingListBoxData()
+    {
+    // Release fonts. ReleaseFont function can cope with null pointer
+    // so we don't need to null check them.
+    CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
+    screenDev.ReleaseFont( iContactNameFont );
+    screenDev.ReleaseFont( iCompanyNameFont );
+    
+    delete iArrowPointingRight;
+    delete iArrowPointingLeft;
+    delete iColorBitmap;
+    delete iDummyThumbnail;
+    delete iFavouriteIcon;
+    
+    iContactDataManager = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+// 
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBoxData* CEasyDialingListBoxData::NewL()
+    {
+    CEasyDialingListBoxData* self = new (ELeave) CEasyDialingListBoxData();
+    
+    CleanupStack::PushL( self );
+    self->ConstructLD();
+    CleanupStack::Pop( self );
+ 
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// DrawData
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::DrawData(
+    const TListItemProperties& aProperties, 
+    CWindowGc& aGc,
+    const TDesC* aText,
+    const TRect& aRect,
+    TBool aHighlight,
+    const TExtendedColors& aColors ) const
+    {
+    const TRect &aItemRect = aRect;
+    
+    if ( aHighlight )
+        {
+        DrawHighlight( aGc, aItemRect );
+        }
+    
+    // Draw the actual items.
+    DrawDataFormatted( aProperties, aGc, aText, aItemRect, 
+            aHighlight, aColors );
+    }
+
+
+// -----------------------------------------------------------------------------
+// ConstructLD
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::ConstructLD()
+    {
+    CFormattedCellListBoxData::ConstructLD();
+    
+    // EasyDialing bitmap file is attempted to be read from the same directory where the
+    // executed binary is located
+    TFileName dllFileName;
+    Dll::FileName( dllFileName );
+     
+    TParse parse;
+    User::LeaveIfError(parse.Set(KEasyDialingBitmapFile, &dllFileName, NULL));
+    TFileName bitmapFileName(parse.FullName());
+    
+    // Icon displayed for the selected item in normal layout
+    iArrowPointingRight = CreateIconL( bitmapFileName, EMbmEasydialingQgn_indi_org_arrow_right, 
+            EMbmEasydialingQgn_indi_org_arrow_right_mask );
+
+    // Icon displayed for the selected item in mirrored layout
+    iArrowPointingLeft = CreateIconL( bitmapFileName, EMbmEasydialingQgn_indi_org_arrow_left, 
+            EMbmEasydialingQgn_indi_org_arrow_left_mask );
+
+    // Only mask for the arrow icons are used. iColorBitmap is used for making the icon 
+    // to follow text color changes according to skin.
+    iColorBitmap = new (ELeave) CFbsBitmap;
+
+    // Contact default thumbnail is not available in themes. It is read from phonebook resource.
+    iDummyThumbnail = CreateIconL( KPhonebook2EceBitmapFile,
+            EMbmPhonebook2eceQgn_prop_pb_thumb_unknown, EMbmPhonebook2eceQgn_prop_pb_thumb_unknown_mask );
+    
+    // Create the favourite icon bitmap and mask
+    iFavouriteIcon = CreateIconL( KFavouriteIconBitmapFile, 
+            EMbmPhonebook2Qgn_prop_pb_topc, EMbmPhonebook2Qgn_prop_pb_topc_mask );
+    }
+
+
+// -----------------------------------------------------------------------------
+// DrawHighlight
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::DrawHighlight( CWindowGc &aGc, const TRect &aItemRect ) const
+    {
+    MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( &aGc );
+    if ( transApi )
+        {
+        transApi->Invalidate(MAknListBoxTfxInternal::EListHighlight );
+        transApi->BeginRedraw( MAknListBoxTfxInternal::EListHighlight, aItemRect );
+        transApi->StartDrawing( MAknListBoxTfxInternal::EListHighlight );
+        aGc.SetClippingRect( iControl->Rect() );
+        }
+
+    TAknLayoutRect outerRect;
+    TAknLayoutRect innerRect;
+    outerRect.LayoutRect( aItemRect, TAknWindowComponentLayout::Compose(
+            AknLayoutScalable_Avkon::list_highlight_pane_cp1(),
+            AknLayoutScalable_Avkon::list_highlight_pane_g10_cp1() ).LayoutLine() );
+    innerRect.LayoutRect( aItemRect, TAknWindowComponentLayout::Compose(
+            AknLayoutScalable_Avkon::list_highlight_pane_cp1(),
+            AknLayoutScalable_Avkon::list_highlight_pane_g1_cp1() ).LayoutLine() );
+    MAknsControlContext *cc = AknsDrawUtils::ControlContext( Control() );
+
+    if ( !cc ) 
+        {
+        cc = SkinBackgroundContext();
+        }
+
+    if ( cc )
+        {
+        aGc.SetPenStyle( CGraphicsContext::ENullPen );
+        AknsDrawUtils::DrawFrame(
+                AknsUtils::SkinInstance(), 
+                aGc,
+                outerRect.Rect(),
+                innerRect.Rect(),
+                KAknsIIDQsnFrList,
+                KAknsIIDQsnFrListCenter );
+        }
+
+    if ( transApi )
+        {
+        aGc.CancelClippingRect();
+        transApi->StopDrawing();
+        transApi->EndRedraw( MAknListBoxTfxInternal::EListHighlight );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// DrawDataFormatted
+// 
+// -----------------------------------------------------------------------------
+// 
+// ToDo: SetSize function could be called once for all static data in SizeChanged.
+// Applies at least to icons.
+void CEasyDialingListBoxData::DrawDataFormatted( 
+        TListItemProperties /* aProperties */,
+        CWindowGc& aGc,
+        const TDesC* aText,
+        const TRect& aItemRect,
+        TBool aHighlight,
+        const TExtendedColors& aColors ) const
+    {
+    TPtrC cellText;
+
+    TInt error = TextUtils::ColumnText( cellText , 0, aText );
+    __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) );
+    __ASSERT_DEBUG( iContactNameFont, EasyDialingPanic( EEasyDialingNoFontFound ) );
+    __ASSERT_DEBUG( iCompanyNameFont, EasyDialingPanic( EEasyDialingNoFontFound ) );
+    
+    MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( &aGc );
+    if ( transApi )
+        {
+        transApi->StartDrawing( MAknListBoxTfxInternal::EListItem );
+        if ( transApi->EffectsDisabled() )
+            {
+            aGc.SetClippingRect( iControl->Rect() );
+            }
+        }
+
+    TRect boundingBox = ContactImageBoundingBox( aItemRect );
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        boundingBox = MirrorLayoutBoundingBox( aItemRect, boundingBox );
+        }
+    
+    // Arrow icon is drawn if the item is in focus and listbox has focus
+    // (and not only the temporary visual focus caused by touching a list item).
+    TBool showArrowIcon = aHighlight && iControl->IsFocused();
+    if ( showArrowIcon )
+        {
+        TRect arrowRect = ArrowIconBoundingBox( aItemRect );
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            arrowRect = MirrorLayoutBoundingBox( aItemRect, arrowRect );
+            }
+        DrawArrowIcon( aGc, arrowRect );
+        }
+
+    //Draws the Contact Thumbnail Icon if exists, else draws the dummy contact thumbnail
+    TBool fav = DrawContactThumbnail( aGc, boundingBox, cellText );
+
+    error = TextUtils::ColumnText( cellText , 1, aText );
+    __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) );
+
+    boundingBox = ContactNameBoundingBox( aItemRect,
+                                          iContactNameFont,
+                                          showArrowIcon,
+                                          fav,
+                                          iContactDataManager->GetContactThumbnailSetting() );
+    TRect nameRectUnMirrored = boundingBox; // used for favourite star drawing
+
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        boundingBox = MirrorLayoutBoundingBox( aItemRect, boundingBox );
+        }
+
+    // favourite icon size is set the same as contact name bounding box height.
+    TInt favouriteIconSize = boundingBox.Height();
+    
+    TInt err( KErrNone );
+    TRAP( err, DrawTextWithMatchHighlightL(
+            boundingBox, aGc, cellText, iContactNameFont, aColors, aHighlight ) );
+
+    if ( !err && TextUtils::ColumnText( cellText , 2, aText ) == KErrNone ) 
+        {
+        TRect companyNameBoundingBox = CompanyNameBoundingBox( 
+                aItemRect, iCompanyNameFont, aHighlight, iContactDataManager->GetContactThumbnailSetting() );
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            companyNameBoundingBox = MirrorLayoutBoundingBox( aItemRect, companyNameBoundingBox );
+            }
+        TRAP( err, DrawTextWithMatchHighlightL(
+                companyNameBoundingBox, aGc, cellText, iCompanyNameFont, aColors, aHighlight ) );
+        }
+
+    if ( !err && fav )
+        {
+        // Draws the Favourite Icon
+        DrawFavouriteIcon( aGc, nameRectUnMirrored, aItemRect );
+        }
+    
+    if ( transApi )
+        {
+        aGc.CancelClippingRect();
+        transApi->StopDrawing();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// DrawContactThumbnail
+// 
+// Draws the Contact Thumbnail Icon if any, else draws the dummy contact thumbnail
+// Also check if this is a favorite contact and return true if this is.
+// -----------------------------------------------------------------------------
+//
+TBool CEasyDialingListBoxData::DrawContactThumbnail(CWindowGc& aGc, TRect aBoundingBox, TPtrC aCellText) const
+    {
+    TBool fav(EFalse);
+    CFbsBitmap* thumbnail(NULL);
+    TBool isLoaded = iContactDataManager->GetThumbnailAndFav(aCellText, thumbnail, fav);
+    if ( isLoaded && thumbnail )
+        {
+        // center the thumbnail in its rect
+        TSize size(thumbnail->SizeInPixels());
+        TInt xOffset = (aBoundingBox.Width() - size.iWidth) / 2;
+        TInt yOffset = (aBoundingBox.Height() - size.iHeight) / 2;
+        TPoint tl(aBoundingBox.iTl.iX + xOffset, aBoundingBox.iTl.iY + yOffset);
+        TRect sourceRect( TPoint(0,0),size);
+        aGc.BitBlt(tl, thumbnail, sourceRect);
+        }
+    else if ( isLoaded && iContactDataManager->GetContactThumbnailSetting() )
+        {
+        // draw dummy thumnbnail, but only if we know that the contact doesn't
+        // have a thumbnail, and thumbnail drawing is enabled.
+        AknIconUtils::SetSize(iDummyThumbnail->Bitmap(), aBoundingBox.Size());
+        AknIconUtils::SetSize(iDummyThumbnail->Mask(), aBoundingBox.Size());
+        aGc.BitBltMasked( aBoundingBox.iTl, iDummyThumbnail->Bitmap(),
+                TRect( TPoint(0,0), aBoundingBox.Size() ), 
+                iDummyThumbnail->Mask(), ETrue );
+        }
+    return fav;
+    }
+
+
+// -----------------------------------------------------------------------------
+// DrawArrowIcon
+//  Draws the Action Menu 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::DrawArrowIcon( 
+        CWindowGc& aGc, TRect aArrowRect) const
+    {
+    // Action Menu Arrow for opening the Action Menu
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        // For mirrored layout the UI logic is mirrored as well
+        AknIconUtils::SetSize( iArrowPointingLeft->Mask(), aArrowRect.Size() );
+        aGc.BitBltMasked( aArrowRect.iTl, iColorBitmap,
+                TRect( TPoint(0,0), aArrowRect.Size() ), 
+                iArrowPointingLeft->Mask(), ETrue );
+
+        }
+    else
+        {
+        AknIconUtils::SetSize( iArrowPointingRight->Mask(), aArrowRect.Size() );
+        aGc.BitBltMasked( aArrowRect.iTl, iColorBitmap,
+                TRect( TPoint(0,0), aArrowRect.Size() ), 
+                iArrowPointingRight->Mask(), ETrue );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// DrawFavouriteIcon
+// 
+// Draws the Favourite Icon
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::DrawFavouriteIcon(
+        CWindowGc& aGc, 
+         TRect aNameRectUnMirrored,
+         TRect aEffectiveRect) const
+    {
+    TRect favouriteIconBoundingBox;
+
+    favouriteIconBoundingBox = FavouriteIconBoundingBox( aNameRectUnMirrored );
+
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        favouriteIconBoundingBox = MirrorLayoutBoundingBox(aEffectiveRect, favouriteIconBoundingBox);
+        }
+
+    aGc.SetBrushStyle( CGraphicsContext::ENullBrush );
+    TRect sourceRect( TPoint(0,0), favouriteIconBoundingBox.Size() );
+
+    if( AknsUtils::SkinInstance()->GetCachedItemData(KAknsIIDQgnFsContactsFavorite) )
+        {
+        AknsDrawUtils::DrawCachedImage( AknsUtils::SkinInstance(), aGc, sourceRect, 
+                KAknsIIDQgnFsContactsFavorite );
+        }
+    else
+        {
+        // Set size for the bitmap and mask
+        AknIconUtils::SetSize( iFavouriteIcon->Bitmap(), favouriteIconBoundingBox.Size() );
+        AknIconUtils::SetSize( iFavouriteIcon->Mask(), favouriteIconBoundingBox.Size() );
+        aGc.BitBltMasked( favouriteIconBoundingBox.iTl , iFavouriteIcon->Bitmap(), 
+                sourceRect, iFavouriteIcon->Mask(), ETrue);
+        }
+    }
+// -----------------------------------------------------------------------------
+// SetContactDataManager
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::SetContactDataManager(CEasyDialingContactDataManager* aContactDataManager)
+    {
+    iContactDataManager = aContactDataManager;
+    }
+
+// -----------------------------------------------------------------------------
+// HandleItemSizeChange
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::HandleItemSizeChange()
+    {
+    TInt height = iControl->ItemHeight();
+    TSize size( height, height );
+    TRAP_IGNORE( UpdateColorBitmapL( size ) );
+    
+    // Obtain fonts.
+    ObtainFonts( height );
+    
+    // TODO: also bounding boxes could be updated and stored here
+    }
+
+// -----------------------------------------------------------------------------
+// ObtainFonts
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::ObtainFonts( TInt aItemHeight )
+    {
+    CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
+    
+    // Release previous fonts. ReleaseFont function can cope with null pointers
+    // so we don't need to null check them.
+    screenDev.ReleaseFont( iContactNameFont );
+    screenDev.ReleaseFont( iCompanyNameFont );
+    
+    // Get a logical font to a basis for our own fonts.
+    const CFont* logicalFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont );
+
+    // Extract font information
+    TFontSpec fontSpec = logicalFont->FontSpecInTwips();
+    
+    // Calculate contact name font height in TWIPs.
+    TInt fontHeightPixels = aItemHeight * KContactNameFontHeightPercent / KCent;
+    TInt fontHeightTwips = screenDev.VerticalPixelsToTwips( fontHeightPixels );
+    
+    // Set height, weight, and posture.
+    fontSpec.iHeight = fontHeightTwips;
+    fontSpec.iFontStyle.SetStrokeWeight( EStrokeWeightBold );
+    fontSpec.iFontStyle.SetPosture( EPostureUpright );
+    
+    // Obtain contact name font
+    TInt err = screenDev.GetNearestFontToDesignHeightInTwips( iContactNameFont, fontSpec );
+    __ASSERT_DEBUG( err == KErrNone, EasyDialingPanic( EEasyDialingNoFontFound ) ); 
+    
+    // Calculate company name font height in TWIPs.
+    fontHeightPixels = aItemHeight * KCompanyNameFontHeightPercent / KCent;
+    fontHeightTwips = screenDev.VerticalPixelsToTwips( fontHeightPixels );
+    fontSpec.iHeight = fontHeightTwips;
+    fontSpec.iFontStyle.SetStrokeWeight( EStrokeWeightNormal );
+    
+    // Obtain company name font.  
+    err = screenDev.GetNearestFontToDesignHeightInTwips( iCompanyNameFont, fontSpec );
+    __ASSERT_DEBUG( err == KErrNone, EasyDialingPanic( EEasyDialingNoFontFound ) ); 
+   }
+
+
+// -----------------------------------------------------------------------------
+// UpdateColorBitmapL
+// ColorBitmap is redrawn when UI layout or text color (Theme) changes
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::UpdateColorBitmapL( const TSize& aSize )
+    {
+    TRgb color;
+    // Get the HighLighted text color in ListBox from the Theme
+    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), color, 
+                               KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 );
+    
+    // Create a bitmap with the similar display mode than what the device currently
+    // uses for using it as an offscreen bitmap
+    AknIconConfig::TPreferredDisplayMode mode;
+    AknIconConfig::PreferredDisplayMode( mode, AknIconConfig::EImageTypeOffscreen );
+    User::LeaveIfError( iColorBitmap->Create( aSize, mode.iBitmapMode ) );
+
+    // Create a new drawing device and graphics context for enabling drawing to
+    // the offscreen bitmap
+    CFbsBitmapDevice* destinationDevice = CFbsBitmapDevice::NewL( iColorBitmap );
+    CleanupStack::PushL(destinationDevice);
+
+    CFbsBitGc* destinationGc;
+    User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) );
+
+    // Set the color and style for pen and brush and draw a rectangle to the
+    // bitmap graphics
+    destinationGc->SetPenColor( color );
+    destinationGc->SetPenStyle( CGraphicsContext::ESolidPen );
+    destinationGc->SetBrushColor( color );
+    destinationGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+    destinationGc->DrawRect( TRect( TPoint( 0,0 ), aSize ) );
+
+    // Colorbitmap is ready, cleanup
+    delete destinationGc;
+    CleanupStack::PopAndDestroy(destinationDevice); 
+    }
+
+// -----------------------------------------------------------------------------
+// SetEDLBXControl
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxData::SetEDLBXControl(CEasyDialingListBox* aControl)
+    {
+    iControl = aControl;
+    }
+
+
+/*
+ * ==============================================================================
+ * 
+ * Local functions
+ * 
+ * ==============================================================================
+ */
+
+
+// -----------------------------------------------------------------------------
+// ContactImageBoundingBox
+// Calculates the area where contact thumbnail is confined
+// -----------------------------------------------------------------------------
+//
+TRect ContactImageBoundingBox( const TRect& aItemRect )
+    {
+    TInt leftMargin = aItemRect.Width() * KMarginXPercent / KCent;
+    TInt topMargin = KMarginYPercent * aItemRect.Height() / KCent;
+    TInt bottomMargin = topMargin;
+    TInt width = ((aItemRect.Height() - topMargin - bottomMargin) * KThumbnailAspectRatio) / KCent;
+
+    return TRect(
+            aItemRect.iTl.iX + leftMargin,
+            aItemRect.iTl.iY + topMargin,
+            aItemRect.iTl.iX + leftMargin + width,
+            aItemRect.iBr.iY - bottomMargin);
+    }
+
+// -----------------------------------------------------------------------------
+// ContactNameBoundingBox
+// Calculates the area to which the contact name and possible match highlights
+// are confined.
+// -----------------------------------------------------------------------------
+//
+static TRect ContactNameBoundingBox(
+        const TRect& aItemRect,
+        const CFont* aContactNameFont,
+        TBool aArrowIconShown,
+        TBool aIsFavourite,
+        TBool aThumbnailsShown )
+    {
+    // Position X will contain the starting position of text from left side of item rect.
+    TInt positionX = aItemRect.Width() * KMarginXPercent / KCent;
+    
+    if (aThumbnailsShown)
+        {
+        // If contact image is shown, text starts from right side of contact picture + margin.
+        TRect contactImageBoundingBox = ContactImageBoundingBox( aItemRect );
+        positionX += contactImageBoundingBox.Width();
+        positionX += aItemRect.Width() * KMarginXPercent / KCent;
+        }
+    
+    TInt topMargin = KContactNameYOffsetPercent * aItemRect.Height() / KCent;
+    TInt height = KTextBoundingBoxHeightPercent * aContactNameFont->FontMaxHeight() / KCent;
+    TInt rightMargin = KMarginXPercent * aItemRect.Width() / KCent;
+    
+    // Reserve space for communication launcher icon if it's shown on this item
+    if ( aArrowIconShown )
+        {
+        rightMargin += KArrowIconSizePercent * aItemRect.Height() / KCent;
+        }
+    
+    // If item is favourite, reserve space for favourite icon. Icon dimensions are the same as bounding box height.
+    if ( aIsFavourite )
+        {
+        rightMargin += height;
+        }
+    
+    return TRect(
+        aItemRect.iTl.iX + positionX,
+        aItemRect.iTl.iY + topMargin,
+        aItemRect.iTl.iX + aItemRect.Width() - rightMargin,
+        aItemRect.iTl.iY + topMargin + height);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CompanyNameBoundingBox
+// Calculates the area to which the company name and possible match highlights
+// are confined.
+// -----------------------------------------------------------------------------
+//
+static TRect CompanyNameBoundingBox(
+        const TRect& aItemRect, 
+        const CFont* aCompanyNameFont, 
+        TBool aIsCurrentItem,
+        TBool aThumbnailsShown )
+    {
+    // Position X will contain the starting position of text from left side of item rect.
+    TInt positionX = aItemRect.Width() * KMarginXPercent / KCent;
+    
+    if (aThumbnailsShown)
+        {
+        // If contact image is show, text starts from right side of contact picture + margin.
+        TRect contactImageBoundingBox = ContactImageBoundingBox( aItemRect );
+        positionX += contactImageBoundingBox.Width();
+        positionX += aItemRect.Width() * KMarginXPercent / KCent;
+        }
+    
+    TInt topMargin = KCompanyNameYOffsetPercent * aItemRect.Height() / KCent;
+    TInt height = KTextBoundingBoxHeightPercent * aCompanyNameFont->FontMaxHeight() / KCent;
+    TInt rightMargin = KMarginXPercent * aItemRect.Width() / KCent;
+
+    // Reserve space for communication launcher icon.
+    // Communication launcher icon is shown only id item is highlighted.
+    if ( aIsCurrentItem )
+        {
+        rightMargin += KArrowIconSizePercent * aItemRect.Height() / KCent;
+        }
+    
+    return TRect(
+        aItemRect.iTl.iX + positionX,
+        aItemRect.iTl.iY + topMargin,
+        aItemRect.iTl.iX + aItemRect.Width() - rightMargin,
+        aItemRect.iTl.iY + topMargin + height);
+    }
+
+
+// -----------------------------------------------------------------------------
+// ArrowIconBoundingBox
+// Calculates the area to which the action menu icon is drawn.
+// -----------------------------------------------------------------------------
+//
+TRect ArrowIconBoundingBox( const TRect& aItemRect )
+    {
+    TInt iconSize = KArrowIconSizePercent * aItemRect.Height() / KCent;
+    TInt rightMargin = KMarginXPercent * aItemRect.Width() / KCent;
+    TInt positionX = aItemRect.iBr.iX - rightMargin - iconSize;
+    TInt topMargin = ( aItemRect.Height() - iconSize ) / 2; // Icon is vertically centered.
+
+    return TRect(
+        positionX,
+        aItemRect.iTl.iY + topMargin,
+        positionX + iconSize,
+        aItemRect.iTl.iY + topMargin + iconSize );
+    }
+
+
+// -----------------------------------------------------------------------------
+// FavouriteIconBoundingBox
+// Calculates the area to which the favourite icon is drawn.
+// Favourite icon is drawn right beside contact name bounding box.
+// -----------------------------------------------------------------------------
+//
+static TRect FavouriteIconBoundingBox( const TRect& aContactNameBoundingBox )
+    {
+    // Favourite icons place is right beside contact name bounding box.
+    // Contact name bounding box is calculated so that there is room for the icon.
+    TInt shrinkMargin = ( KCent - KFavoriteIconSizePercent ) * aContactNameBoundingBox.Height() / ( 2 * KCent );
+    TRect rect(
+            aContactNameBoundingBox.iBr.iX,
+            aContactNameBoundingBox.iTl.iY,
+            aContactNameBoundingBox.iBr.iX + aContactNameBoundingBox.Height(),
+            aContactNameBoundingBox.iBr.iY);
+    rect.Shrink( shrinkMargin, shrinkMargin );
+    return rect;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// BaseLineOffset
+//
+// -----------------------------------------------------------------------------
+//
+static TInt BaseLineOffset( const TRect& aTextBoundingBox, const CFont* aFont )
+    {
+    TInt fontHeight = aFont->FontMaxHeight();
+    TInt topMargin = KTextPlacementPercent * (aTextBoundingBox.Height() - fontHeight) / KCent;
+    return fontHeight + topMargin - aFont->FontMaxDescent();
+    }
+
+
+// -----------------------------------------------------------------------------
+// MirrorLayoutBoundingBox
+//
+// -----------------------------------------------------------------------------
+//
+static TRect MirrorLayoutBoundingBox( const TRect& aSourceRect, TRect& aBoundingBoxRect )
+    {
+    return TRect(
+            aSourceRect.iTl.iX + aSourceRect.iBr.iX - aBoundingBoxRect.iBr.iX,
+            aBoundingBoxRect.iTl.iY,
+            aSourceRect.iTl.iX + aSourceRect.iBr.iX - aBoundingBoxRect.iTl.iX,
+            aBoundingBoxRect.iBr.iY);
+    }
+
+
+// -----------------------------------------------------------------------------
+// ClipTextToWidth
+// Cuts the text in the given pixel width. Also considers match highlight
+// issues.
+// NOTE: Can change the aMatch parameter if considers that there is too little
+// width for matching highlight.
+// NOTE 2: This function cannot handle right-to-left or bidirectional text currently.
+// These cases must be handled elsewhere.
+// -----------------------------------------------------------------------------
+//
+static void ClipTextToWidth(
+        TDes& aText,
+        const CFont& aFont,
+        TInt aMaxWidthInPixels,
+        TBool& aMatch)
+    {
+    _LIT( KThreeDots, "..." );
+    TInt minimumWidth = aFont.TextWidthInPixels( KThreeDots );
+    
+    // If this is a matching piece of text, also match text marginals need to be counted.
+    if ( aMatch )
+        {
+        minimumWidth += 2 * KMatchingTextMarginInPixels;
+        }
+    
+    if ( minimumWidth > aMaxWidthInPixels )
+        {
+        
+        // Not enough space for any text. 
+        aText.Zero();
+        aMatch = EFalse; // No match highlight shown.
+        return;
+        }
+    
+    if ( aMatch )
+        {
+        aMaxWidthInPixels -= 2 * KMatchingTextMarginInPixels;
+        }
+    
+    AknTextUtils::ClipToFit( aText, aFont, aMaxWidthInPixels );    
+    }
+
+// -----------------------------------------------------------------------------
+// DrawPieceOfText
+// Draws a piece of text of contact, either matching or not matching.
+// Updates aXOffset argument by adding drawn text width.
+//
+// @return: ETrue, if there was enough space for the text to draw. 
+// NOTE: CWindowGc font must be set before calling this function. 
+// -----------------------------------------------------------------------------
+//
+static TBool DrawPieceOfText(
+        const TRect& aBoundingBox,
+        TInt& aXOffset,
+        CWindowGc &aGc, 
+        const TDesC& aText,
+        TBool aMatch,
+        const CFont* aFont,
+        const CEasyDialingListBoxData::TExtendedColors& aColors,
+        TBool aHighLight )
+    {    
+    if (aText.Length() == 0) 
+        {
+        return ETrue;
+        }
+    
+    HBufC* newText = aText.Alloc();
+    if ( !newText )
+        {
+        return EFalse;
+        }
+    
+    TPtr textPtr = newText->Des();
+    
+    // textWidth is the width needed for the text. 
+    TInt textWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *aFont, textPtr, CFont::TMeasureTextInput::EFVisualOrder );
+    
+    // whole width includes also possible highlight margins. 
+    TInt wholeWidth = textWidth + ( aMatch ? 2 * KMatchingTextMarginInPixels : 0);
+    
+    // availableWidth is the space left for drawing. 
+    TInt availableWidth = aBoundingBox.Width() - aXOffset;
+    
+    if ( availableWidth < wholeWidth )
+        {
+        ClipTextToWidth( textPtr, *aFont, availableWidth, aMatch );
+        wholeWidth = availableWidth;
+        if ( aMatch )
+            {
+            textWidth = wholeWidth - (2 * KMatchingTextMarginInPixels);
+            }
+        else
+            {
+            textWidth = wholeWidth;
+            }
+        }
+    
+    // textBox is rectangle for text without highlight.
+    TRect textBox( aBoundingBox );
+    textBox.iTl.iX += aXOffset;
+    textBox.iBr.iX = textBox.iTl.iX + textWidth;
+    
+    TInt baseLineOffset = BaseLineOffset( textBox, aFont );
+    
+    if ( aMatch )
+        {
+        // highlightBox rectangle for text with highlight.
+        // Compared to no highlight, it has extra margins on both sides.
+        TRect highlightBox( textBox );
+        highlightBox.iBr.iX = highlightBox.iTl.iX + wholeWidth;
+        
+        // Also boundingBox is shifted right for one margin width.
+        textBox.iTl.iX += KMatchingTextMarginInPixels;
+        textBox.iBr.iX += KMatchingTextMarginInPixels;
+       
+        // Outline of matching highlight is of same colour as text.
+        // This looks quite OK.
+        aGc.SetPenColor( aColors.iMatchingText );
+        aGc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        aGc.SetBrushColor( aColors.iMatchingBack );
+        
+        aGc.DrawRoundRect( highlightBox, TSize( KMatchingTextMarginInPixels, KHighligthRectangleRoundingYInPixels ) );
+        
+        aGc.SetBrushStyle( CGraphicsContext::ENullBrush );
+        }
+    else 
+        {
+        if ( aHighLight )
+            {
+            aGc.SetPenColor( aColors.iHighlightedText );
+            }
+        else 
+            {
+            aGc.SetPenColor( aColors.iText );
+            }
+        }
+    
+    aGc.DrawText( textPtr, textBox, baseLineOffset );
+    delete newText;
+    aXOffset += wholeWidth;
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// DrawTextWithMatchHighlight
+// Draws a string with match highlight. Highlighted and non-highlighted
+// parts are separated with KHighlightSeparatorChar.
+// The first text part is not highlighted and from that on highlight
+// is on on every other text piece.
+// 
+// -----------------------------------------------------------------------------
+//
+static TInt DrawTextWithMatchHighlightL(
+        const TRect& aBoundingBox,
+        CWindowGc &aGc, 
+        const TDesC& aText,
+        const CFont* aFont,
+        const CEasyDialingListBoxData::TExtendedColors& aColors,
+        TBool aHighLight )
+    {
+    TInt xOffset = 0;
+    
+    HBufC* visualBuf = ConvertToVisualAndClipLC( aText, *aFont, aBoundingBox );
+    
+    TInt calculatedTextWidth = CalculateTextWidth( aBoundingBox, *visualBuf, aFont );
+    
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        xOffset = aBoundingBox.Width() - calculatedTextWidth;
+        }
+    TPtrC textPiece;
+    TInt textPieceIndex = 0;
+    TBool match = EFalse;
+
+    aGc.UseFont( aFont );
+    aGc.SetBrushStyle( CGraphicsContext::ENullBrush );
+
+    while ( TextUtils::ColumnText( textPiece , textPieceIndex, visualBuf, KHighlightSeparatorChar) == KErrNone ) 
+        {
+        if (! DrawPieceOfText( aBoundingBox, xOffset, aGc, textPiece, match, aFont, aColors, aHighLight ))
+            {
+            // If there was not enough space for this piece of text, exit the loop stop drawing further pieces.
+            break;
+            }
+
+        // Toggle match
+        match = !match;
+
+        ++textPieceIndex;
+        }
+    
+    CleanupStack::PopAndDestroy( visualBuf );
+
+    aGc.DiscardFont();
+    
+    return calculatedTextWidth;
+    }
+
+// -----------------------------------------------------------------------------
+// CalculateTextWidth
+// Calculates the width of the text and returns it 
+// -----------------------------------------------------------------------------
+//
+static TInt CalculateTextWidth( const TRect& aBoundingBox, 
+                                const TDesC& aText, 
+                                const CFont* aFont )
+    {
+    TInt xOffset = 0;
+    TPtrC textPiece;
+    TInt textPieceIndex = 0;
+    TBool match = EFalse;
+
+    while ( TextUtils::ColumnText( textPiece , textPieceIndex, &aText, KHighlightSeparatorChar) == KErrNone ) 
+        {
+        if (! CalculateTextPieceWidth( aBoundingBox, xOffset, textPiece, match, aFont ))
+            {
+            // If there was not enough space for this piece of text, exit the loop stop drawing further pieces.
+            break;
+            }
+
+        // Toggle match
+        match = !match;
+
+        ++textPieceIndex;
+        }
+
+    return xOffset;
+    }
+
+// -----------------------------------------------------------------------------
+// CalculateTextPieceWidth
+// 
+// Calculates the width of the text piece of highlighted text. 
+// The function is aware of the available width for the text, and can take
+// possible clippings into account. 
+//
+// The available width is given by parameters aBoundingBox (space for all text
+// pieces) and aXOffset (now much of that space has already been used).
+//
+// The function adds the text width to the aXOffset reference parameter.
+// Returns EFalse, if there is no more space for new text pieces, otherwise
+// ETrue.
+//
+// This function contains the same logic as function DrawPieceOfText.
+// -----------------------------------------------------------------------------
+//
+static TBool CalculateTextPieceWidth(
+        const TRect& aBoundingBox,
+        TInt& aXOffset,
+        const TDesC& aText,
+        TBool aMatch,
+        const CFont* aFont )
+    {    
+    if (aText.Length() == 0) 
+        {
+        return ETrue;
+        }
+
+    // textWidth is the width needed for the text. 
+    TInt textWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *aFont, aText, CFont::TMeasureTextInput::EFVisualOrder );
+
+    // whole width includes also possible highlight margins. 
+    TInt wholeWidth = textWidth + ( aMatch ? 2 * KMatchingTextMarginInPixels : 0);
+
+    // availableWidth is the space left for drawing. 
+    TInt availableWidth = aBoundingBox.Width() - aXOffset;
+
+    if ( availableWidth < wholeWidth )
+        {
+
+        // We get to this branch, if there is not enough space for the text piece.
+        HBufC* newText = aText.Alloc();
+        if ( !newText )
+            {
+            return EFalse;
+            }
+
+        TPtr textPtr = newText->Des();
+        
+        // Clip the text so that it fits the space.
+        ClipTextToWidth( textPtr, *aFont, availableWidth, aMatch );
+
+        if ( textPtr.Length() > 0 )
+            {
+            wholeWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *aFont, textPtr, CFont::TMeasureTextInput::EFVisualOrder );
+            wholeWidth += (aMatch ? 2 * KMatchingTextMarginInPixels : 0);
+
+            aXOffset += wholeWidth;
+            }
+
+        delete newText;
+
+        return EFalse;
+        }
+
+    aXOffset += wholeWidth;
+
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// ContainsRightToLeftText
+// 
+// Returns true if argument descriptor contains right-to-left text.
+// -----------------------------------------------------------------------------
+//
+static TBool ContainsRightToLeftText( const TDesC& aDesc )
+    {
+    TBool rtlFound = EFalse;
+    
+    // TRunInfoArray contains information of the directionalities of the different sections of the aText    
+    TBidirectionalState::TRunInfo array[ KMaxRunInfoArrayCount ];
+    
+    // Initialize the TBidiLogicalToVisual converter for making the conversion from logical to visual order
+    TBidiLogicalToVisual converter( aDesc, array, KMaxRunInfoArrayCount );
+    
+    // Do the reordering. Amount of different directionality sections is returned.
+    TInt count( converter.Reorder() );
+    // If there are more directionality blocks than we are prepared to handle, just ignore
+    // the rest. Those shouldn't fit the screen anyway.
+    count = Min( count, KMaxRunInfoArrayCount );
+    
+    for ( TInt i = 0 ; i < count && !rtlFound ; i++ )
+        {
+        // iDirection is 0 for left-to-right text.
+        if (array[i].iDirection)
+            {
+            rtlFound = ETrue;
+            }
+        }
+
+    return rtlFound;
+    }
+
+// -----------------------------------------------------------------------------
+// ConvertToVisualAndClipL
+// 
+// Clip bidirectional text to given box and convert it to visual order, ensuring
+// that the match highlights don't get broken in the process. Result is given
+// as new heap descriptor which is left to CleanupStack.
+// NOTE1: No clipping happens here if given descriptor contains only 
+// left-to-right text. 
+// NOTE2: It's assumed that there can be highlights only in pure LTR and RTL
+// texts. Highlights for mixed LTR-RTL text cannot be handled properly.
+// -----------------------------------------------------------------------------
+//
+static HBufC* ConvertToVisualAndClipLC( const TDesC& aText, 
+                                        const CFont& aFont, 
+                                        const TRect& aBoundingBox )
+    {
+    HBufC* buf = HBufC::NewLC( aText.Length() + KAknBidiExtraSpacePerLine );
+    TPtr ptr = buf->Des();
+    ptr.Copy( aText );
+    
+    // Calling AknBidiTextUtils::ConvertToVisualAndClip doesn't work correctly 
+    // with the highlight separator characters (they are not considered to be 
+    // zero-length). To minimise the problem, we call the function only when 
+    // necessary, i.e. when given text really contains RTL text. This should be 
+    // considered as temporary solutions because now the problem of excessive 
+    // truncation still remains with RTL languages.
+    if ( ContainsRightToLeftText( ptr ) )
+        {
+        AknBidiTextUtils::ConvertToVisualAndClipL(
+                ptr, aFont, aBoundingBox.Width(),
+                aBoundingBox.Width() );
+        
+        // If there's an odd number of highlight separators in the RTL text, 
+        // then the matching and and not-matching parts have gone 
+        // off-sync in the visual conversion (because parts are drawn starting 
+        // from left and first part is always interpreted as not-matching part).
+        // Fix this by adding one highlight separator.
+        TInt sepCount = HighlightSeparatorCount( ptr );
+        if ( sepCount % 2 )
+            {
+            if ( ptr.Length() == ptr.MaxLength() )
+                {
+                // There's no more space available. We need to reallocate the 
+                // buffer in order to fit the extra separator character.
+                HBufC* newBuf = buf->ReAllocL( buf->Length() + 1 );
+                CleanupStack::Pop( buf ); // original buf deleted by ReAllocL
+                buf = newBuf;
+                CleanupStack::PushL( buf );
+                ptr.Set( buf->Des() );
+                }
+            ptr.Insert( 0, KHighlightSeparatorCharAsLit );
+            }
+        }
+    
+    return buf;
+    }
+
+// -----------------------------------------------------------------------------
+// HighlightSeparatorCount
+// 
+// Returns number of match highlight separator characters in the text
+// -----------------------------------------------------------------------------
+//
+static TInt HighlightSeparatorCount( const TDesC& aText )
+    {
+    TInt len = aText.Length();
+    TInt sepCount = 0;
+    
+    for ( TInt i = 0; i < len; i++ )
+        {
+        if ( aText[i] == KHighlightSeparatorChar )
+            {
+            sepCount++;
+            }
+        }
+    
+    return sepCount;
+    }
+
+// -----------------------------------------------------------------------------
+// CreateIconL
+// 
+// Create and return a new icon object from given file and with given ID
+// -----------------------------------------------------------------------------
+//
+static CGulIcon* CreateIconL(
+        const TDesC& aFileName,
+        TInt aBitmapId,
+        TInt aMaskId )
+    {
+    CGulIcon* icon = CGulIcon::NewLC();
+
+    CFbsBitmap* bm;
+    CFbsBitmap* mask;
+    AknIconUtils::CreateIconL( bm, mask, aFileName, aBitmapId, aMaskId );
+    
+    icon->SetBitmap( bm );
+    icon->SetMask( mask );
+    
+    CleanupStack::Pop( icon );
+    return icon;
+    }
+
+//  End of File.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing listbox list item drawer.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "easydialinglistboxitemdrawer.h"
+#include "easydialinglistboxdata.h"
+#include "easydialinglistbox.h"
+#include "easydialinglistboxview.h"
+
+#include <aknlistloadertfx.h>
+#include <aknlistboxtfxinternal.h>
+#include <aknlistboxtfx.h>
+#include <akntransitionutils.h>
+#include <AknUtils.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+const TInt KTextColorFallBack = 215;
+const TInt KMatchingTextColorFallBack  = 0;
+const TInt KMatchingTextBackgroundFallBack = 243;
+
+// FORWARD DECLARATIONS
+
+/*
+ * ==============================================================================
+ * 
+ * 
+ * class CEasyDialingListBoxItemDrawer
+ * 
+ * 
+ * ==============================================================================
+ */
+
+// -----------------------------------------------------------------------------
+// CEasyDialingListBoxItemDrawer
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CEasyDialingListBoxItemDrawer::CEasyDialingListBoxItemDrawer(
+        MTextListBoxModel* aTextListBoxModel, 
+        const CFont* aFont, 
+        CFormattedCellListBoxData* aFormattedCellData) :
+        CFormattedCellListBoxItemDrawer( aTextListBoxModel, aFont, aFormattedCellData)
+    {
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// EasyDialingCellData
+// 
+// -----------------------------------------------------------------------------
+//       
+CEasyDialingListBoxData* CEasyDialingListBoxItemDrawer::EasyDialingCellData() const
+    {
+    return STATIC_CAST( CEasyDialingListBoxData*, iData );
+    }
+
+
+// -----------------------------------------------------------------------------
+// DrawItem
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxItemDrawer::DrawItem( 
+    TInt aItemIndex, 
+    TPoint aItemRectPos, 
+    TBool aItemIsSelected, 
+    TBool aItemIsCurrent, 
+    TBool aViewIsEmphasized, 
+    TBool aViewIsDimmed) const 
+    {
+    CFormattedCellListBoxItemDrawer::DrawItem( aItemIndex, aItemRectPos, aItemIsSelected, aItemIsCurrent, aViewIsEmphasized, aViewIsDimmed);  
+    }
+
+
+// -----------------------------------------------------------------------------
+// DrawItemText
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxItemDrawer::DrawItemText( 
+    TInt aItemIndex,
+    const TRect& aItemTextRect,
+    TBool aItemIsCurrent,
+    TBool aViewIsEmphasized,
+    TBool /* aItemIsSelected */) const
+    {
+    MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( iGc );
+    if ( transApi )
+        {
+        transApi->StartDrawing( MAknListBoxTfxInternal::EListNotSpecified );
+        }
+        
+    iGc->SetPenColor(iTextColor);
+    iGc->SetBrushColor(iBackColor);
+
+    TPtrC temp = iModel->ItemText(aItemIndex);
+
+    SetupGc(aItemIndex);
+    if ( transApi )
+        {
+        transApi->StopDrawing();
+        }
+
+//    TBool removeicon = (!aItemIsSelected && !ItemMarkReverse()) || (aItemIsSelected && ItemMarkReverse());
+
+    CEasyDialingListBoxData::TExtendedColors colors;
+    colors.iText = iTextColor;
+    colors.iBack = iBackColor;
+    colors.iHighlightedText = iHighlightedTextColor;
+    colors.iHighlightedBack = iHighlightedBackColor;
+    colors.iMatchingText = iMatchingText;
+    colors.iMatchingBack = iMatchingBack;
+
+    DrawBackgroundAndSeparatorLines( aItemTextRect );
+
+    TBool highlightShown = ETrue;
+    if ( ( FormattedCellData()->RespectFocus() && !aViewIsEmphasized ) )
+        {
+        if ( transApi )
+            {
+            transApi->Remove( MAknListBoxTfxInternal::EListHighlight );
+            }
+
+        highlightShown = EFalse;
+        }
+    
+    // normal drawing without mark icon
+    EasyDialingCellData()->DrawData(
+            Properties(aItemIndex),
+            *iGc,
+            &temp,
+            aItemTextRect,
+            aItemIsCurrent && highlightShown,
+            colors );
+    
+    if ( aItemTextRect.iBr.iY < iViewRect.iBr.iY && aItemIndex < iModel->NumberOfItems() - 1 )
+        {
+        if ( transApi )
+            {
+            transApi->StartDrawing( MAknListBoxTfxInternal::EListItem );
+            }
+        
+        AknListUtils::DrawSeparator( *iGc, aItemTextRect, iTextColor );
+
+        if ( transApi )
+            {
+            transApi->StopDrawing();
+            }
+        }
+    }
+        
+
+// -----------------------------------------------------------------------------
+// SetColors
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxItemDrawer::SetColors()
+    {
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance(); 
+    
+    if ( !skin ) 
+        {
+        // These values are copied from "aknlist.cpp".
+        // This branch should be never take, and can be considered protective programming.
+        iTextColor = AKN_LAF_COLOR_STATIC( KTextColorFallBack);
+        iHighlightedTextColor = AKN_LAF_COLOR_STATIC( KTextColorFallBack );
+        iMatchingText = AKN_LAF_COLOR_STATIC( KMatchingTextColorFallBack );
+        iMatchingBack = AKN_LAF_COLOR_STATIC( KMatchingTextBackgroundFallBack );
+        }
+    
+    else 
+        {
+        AknsUtils::GetCachedColor( skin,
+                iTextColor,
+                KAknsIIDQsnTextColors,
+                EAknsCIQsnTextColorsCG7 );
+        
+        AknsUtils::GetCachedColor( skin,
+                iHighlightedTextColor,
+                KAknsIIDQsnTextColors,
+                EAknsCIQsnTextColorsCG10 );
+        
+        AknsUtils::GetCachedColor( skin,
+                iMatchingText,
+                KAknsIIDQsnTextColors,
+                EAknsCIQsnTextColorsCG24 );
+        
+        AknsUtils::GetCachedColor( skin,
+                iMatchingBack,
+                KAknsIIDQsnHighlightColors,
+                EAknsCIQsnHighlightColorsCG2 );
+        }
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// DrawBackgroundAndSeparatorLines
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxItemDrawer::DrawBackgroundAndSeparatorLines( const TRect& aItemTextRect ) const
+    {
+    CCoeControl* control = FormattedCellData()->Control();
+
+    MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( iGc );
+    
+    if ( transApi && !transApi->EffectsDisabled() )
+        {
+        MAknListBoxTfx* tfxApi = CAknListLoader::TfxApi( iGc );
+
+        if ( tfxApi )
+            {
+            tfxApi->EnableEffects( ETrue );
+            }
+        }
+
+    if ( transApi )
+        {
+        transApi->StartDrawing( MAknListBoxTfxInternal::EListView );
+        }
+    TBool bgDrawn( EFalse );
+    
+    if ( control )
+        {        
+        MAknsControlContext *cc = AknsDrawUtils::ControlContext( control );
+                
+        bgDrawn = AknsDrawUtils::DrawBackground( 
+                AknsUtils::SkinInstance(), 
+                cc, 
+                control, 
+                *Gc(), 
+                aItemTextRect.iTl, 
+                aItemTextRect, 
+                KAknsDrawParamDefault );
+        }
+    
+    if ( !bgDrawn )
+        {
+        iGc->Clear( aItemTextRect );
+        }
+    if ( transApi )
+        {
+        transApi->StopDrawing();
+        }
+    }
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialinglistboxview.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing listbox view.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "easydialinglistboxview.h"
+#include "easydialinglistbox.h"
+#include "easydialinglistboxitemdrawer.h"
+#include "easydialinglistboxdata.h"
+#include "easydialingcontactdatamanager.h"
+#include <phonebook2.mbg>
+#include <phonebook2ece.mbg>
+
+#include <ccappcommlauncherpluginrsc.rsg>
+
+// AvKON and drawing header files
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include <aknlistloadertfx.h>
+#include <aknlistboxtfxinternal.h>
+#include <aknlistboxtfx.h>
+
+#include <akntransitionutils.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+/*
+ * ==============================================================================
+ * 
+ * 
+ * class CEasyDialingListBoxView
+ * 
+ * 
+ * ==============================================================================
+ */
+
+
+// -----------------------------------------------------------------------------
+// SetCurrentItemIndexToNone
+// 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingListBoxView::SetCurrentItemIndexToNone()
+    {
+    iCurrentItemIndex = -1;
+    }
+
+//  End of File.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialingplugin.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,2123 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing plugin.
+*
+*/
+
+// INCLUDE FILES
+
+#include "easydialingplugin.h"
+#include "easydialinglistbox.h"
+#include "easydialinglogger.h"
+#include "easydialingpanics.h"
+#include "easydialingcenreplistener.h"
+#include "easydialingcontactdatamanager.h"
+#include "easydialingutils.h"
+#include "easydialingcommands.hrh"
+#include <easydialingpluginresources.rsg>
+
+// AVKON and drawing header files
+#include <gdi.h>
+#include <aknlists.h>
+#include <AknUtils.h>
+#include <e32cmn.h>
+#include <bidivisual.h>
+
+// Predictive search header files
+#include <CPsSettings.h>
+#include <CPsQuery.h>
+#include <CPsQueryItem.h>
+#include <CPsClientData.h>
+#include <CPsPattern.h>
+#include <CPsRequestHandler.h>
+
+// Virtual phonebook header files
+#include <VPbkContactStoreUris.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <CVPbkContactLinkArray.h>
+#include <VPbkEng.rsg> // contains virtual phonebook data fields
+#include <phoneui.rsg> 
+
+// CCA Launcher header files.
+#include <ccafactory.h>
+#include <mccaparameter.h>
+#include <mccaconnection.h>
+#include <mccaconnectionext.h> 
+
+// Service provider settings api
+#include <spsettingsvoiputils.h>
+
+// AIW header files
+#include <AiwContactAssignDataTypes.h>
+#include <AiwContactSelectionDataTypes.h>
+
+// CCA contactor service.
+#include "edcontactorservice.h"
+
+// Open system trace
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "easydialingpluginTraces.h"
+#endif
+
+#include <phoneappcommands.hrh>
+#include <bautils.h>    // for BaflUtils
+
+// Transition effects
+#include <gfxtranseffect/gfxtranseffect.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KEDMaximumMatchingContactsCount = 100;
+const TInt KEasyDialingListBoxModelGranularity = 8;
+const TInt KEasyDialingMaximumMatchingParts = 10;
+const TInt KErrEasyDialingNoFirstNamePCSIndexing = -2000;
+const TInt KErrEasyDialingNoLastNamePCSIndexing = -2001;
+
+const TInt KEDFlushContactDataManagerLimit = 20;
+
+const TText KHighlightSeparatorChar = 0x1F;
+_LIT(KHighlightSeparatorCharAsLiteral,"\x1F");
+const TText KListFieldSeparatorChar = '\t';
+
+const TText KArabicAndSouthEastAsianRangeStart = 0x0600;
+const TText KArabicAndSouthEastAsianRangeEnd = 0x19FF;
+const TText KArabicPresentationFormsARangenStart = 0xFB50;
+const TText KArabicPresentationFormsARangeEnd = 0xFDFF;
+const TText KArabicPresentationFormsBRangenStart = 0xFE70;
+const TText KArabicPresentationFormsBRangeEnd = 0xFEFF;
+
+const TInt KMaxRunInfoArrayCount = 20;
+
+// Transition context_uid for dialer_list component effects
+#define KGfxContactListBoxUid TUid::Uid( 0x2000B47B )
+const TInt KGfxContactListBoxOpenEffect  = 3;
+const TInt KGfxContactListBoxCloseEffect = 4;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+_LIT(KResourceFile, "\\resource\\easydialingpluginresources.rsc");
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+TInt CompareTPsMatchLocation( const TPsMatchLocation& a1, const TPsMatchLocation& a2 );
+
+void AppendStringWithMatchDataL(
+        TDes& aBuffer,
+        const TDesC& aText,
+        CPSRequestHandler* aPSHandler,
+        const CPsQuery* aPSQuery );
+
+TBool HighlightingSupportedForText( const TDesC& aText );
+
+inline TBool HighlightingSupportedForScript( TText aChar );
+
+TBool IsStrictlyBidirectional( const TDesC& aText );
+
+static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc );
+
+static TBool IsItuTCharacter( TChar aChar );
+
+static TInt Find( const MVPbkContactLink* aLink, const RPointerArray<MVPbkContactLink>& aArray );
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef );
+
+
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin
+// The default c++ constructor
+// -----------------------------------------------------------------------------
+//
+CEasyDialingPlugin::CEasyDialingPlugin() 
+    : iActionToBeLaunched( ENoActionDefined )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+// Create instance of concrete ECOM interface implementation.
+// -----------------------------------------------------------------------------
+//
+CEasyDialingPlugin* CEasyDialingPlugin::NewL()
+    {
+    OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_NEWL_LOAD_PLUGIN, "Loading plugin.." );
+    LOGSTRING("EasyDialingPlugin: Loading plugin..");
+
+    CEasyDialingPlugin* self = new (ELeave) CEasyDialingPlugin;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_NEWL_LOAD_PLUGIN_OK, "Loading plugin completed succesfully" );
+    LOGSTRING("EasyDialingPlugin: Loading plugin completed succesfully");
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+// Main construction handled here. Creates connection to the predictive search
+// engine and initialises all member data.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::ConstructL()
+    {
+    // Create a contact store array.
+    HBufC* defaultCdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC();
+    iContactDataStores.AppendL( defaultCdb );
+    CleanupStack::Pop( defaultCdb );
+
+    // Create a contact manager instance.
+    iContactStoreUriArray = CVPbkContactStoreUriArray::NewL();
+    iContactStoreUriArray->AppendL( TVPbkContactStoreUriPtr( VPbkContactStoreUris::DefaultCntDbUri() ) );
+    iContactManager = CVPbkContactManager::NewL( *iContactStoreUriArray );
+    
+    // Set contact store observer to listen to contact store events.
+    iContactManager->ContactStoresL().OpenAllL( *this );
+    
+    iContactDataManager = new (ELeave) CEasyDialingContactDataManager(iContactManager);
+    iContactDataManager->ConstructL();
+    iContactDataManager->SetObserver(this);
+
+    // Find a handle to ca launcher extension MCCAConnectionExt.
+    // Easydialing has to use the extension API, because it needs function CloseAppL
+    // only found in extension.
+    // MCCAConnection extension has to be obtained through MCCAParameter extension,
+    // since MCCAConnection is not designed to be extensible API.
+    MCCAParameter* parameter = TCCAFactory::NewParameterL();
+    TAny* any = parameter->CcaParameterExtension( KMCCAConnectionExtUid );
+    
+    // Parameter can be deallocated since "any" containing pointer to contact launcher
+    // is not tied to parameter in any way.
+    parameter->Close();
+    
+    // Cast the pointer into contact launcher object. 
+    User::LeaveIfNull( any );
+    iContactLauncher = static_cast<MCCAConnectionExt*>( any );
+    
+    iCenrepListener = CEasyDialingCenrepListener::NewL(this);
+   
+    iContactorService = CEDContactorService::NewL( this );
+
+    // EasyDialing resource file is attempted to be read from the same directory where the
+    // executed binary is located
+    TFileName dllFileName;
+    Dll::FileName( dllFileName );
+    
+    TParse parse;
+    User::LeaveIfError( parse.Set(KResourceFile, &dllFileName, NULL) );
+    TFileName resourceFileName( parse.FullName() );
+
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), resourceFileName );
+    iResourceFileOffset = iCoeEnv->AddResourceFileL( resourceFileName );
+  
+    SetComponentsToInheritVisibility( ETrue );
+    }
+
+// -----------------------------------------------------------------------------
+// ~CEasyDialingPlugin
+// The desctructor
+// -----------------------------------------------------------------------------
+//
+CEasyDialingPlugin::~CEasyDialingPlugin()
+    {
+    iObservers.Reset();
+    
+    if ( iContactManager )
+        {
+        TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
+        }
+
+    delete iCenrepListener;
+    delete iContactDataManager;
+    delete iPredictiveSearchQuery;
+    delete iContactManager;
+    delete iContactStoreUriArray;
+    iContactDataStores.ResetAndDestroy();
+
+    if (iPredictiveContactSearchHandler)
+        {
+        iPredictiveContactSearchHandler->RemoveObserver(this);
+        }
+    delete iPredictiveContactSearchHandler;
+
+    delete iListBoxModel;
+    
+    if ( iContactListBox )
+        {
+        GfxTransEffect::Deregister( iContactListBox );
+        }
+    
+    delete iContactListBox;
+
+    if (iContactLauncher)
+        {
+        iContactLauncher->Close();
+        }
+    
+    delete iContactorService;
+    
+    iCoeEnv->DeleteResourceFile( iResourceFileOffset );
+    
+    delete iInputBlocker;
+    
+    if ( iAsyncCallBack )
+        {
+        iAsyncCallBack->Cancel();
+        }
+    delete iAsyncCallBack;
+    
+    OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_UNLOAD_PLUGIN, "Plugin unloaded" );
+    LOGSTRING("EasyDialingPlugin: Plugin unloaded");
+    }
+
+
+// -----------------------------------------------------------------------------
+// InitializeL
+// Initialises easy dialing.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::InitializeL( CCoeControl& aParent )
+    {
+    SetContainerWindowL( aParent );
+    SetMopParent( &aParent );
+    
+    TCallBack asyncCallBack( AsyncCallBackToLaunchAction, this );
+    iAsyncCallBack = new ( ELeave ) CAsyncCallBack( asyncCallBack, 
+                                                    CActive::EPriorityStandard );
+
+    iContactListBox = new (ELeave) CEasyDialingListBox();
+    iListBoxModel = new(ELeave) CDesCArrayFlat( KEasyDialingListBoxModelGranularity );
+
+    iContactListBox->ConstructL( CEikListBox::EPaintedSelection
+            | CEikListBox::ENoFirstLetterMatching
+            | CEikListBox::EDisableItemSpecificMenu, 
+            iContactDataManager );
+    iContactListBox->SetListBoxObserver(this);
+
+    iContactListBox->SetMopParent(this);
+
+    CTextListBoxModel* model = iContactListBox->Model();
+    model->SetItemTextArray( iListBoxModel );
+    model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+    iContactListBox->MakeVisible( EFalse );
+    
+    SetFocus( EFalse );
+    iContactListBox->ActivateL();
+    
+    GfxTransEffect::Register( iContactListBox, 
+                              KGfxContactListBoxUid, EFalse );
+    
+    // Do delayed initialization of PCS. PCS constructions takes a long time.
+    // On the other hand, easy dialing initialization is done in phone application
+    // constructor, so it contributes the whole system boot time. These are good 
+    // reasons not to construct PCS in easy dialing constructor, but do it later as
+    // an asynchronous operation.
+    AsyncActionLaunchL( EInitializePcs );
+    }
+
+
+// -----------------------------------------------------------------------------
+// Reset
+// Resets easydialing plugin.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::Reset()
+    {
+    // PCS searches completing after the Reset() call must be discarded
+    iDiscardCompletingSearches = ETrue;
+    
+    iNewSearchNeeded = EFalse;
+    iSearchString.Zero();
+    iListBoxModel->Reset();
+    iNumberOfNames = 0;
+    iContactListBox->MakeVisible( EFalse );
+    iContactDataManager->Reset();
+    if ( IsFocused() )
+        {
+        SetFocus( EFalse );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// InitPredictiveContactSearchL
+// Initialises predictive contact search.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::InitPredictiveContactSearchL()
+    {
+    iPredictiveContactSearchHandler = CPSRequestHandler::NewL();
+    iPredictiveContactSearchHandler->AddObserverL(this);
+
+    // Put the searched contact fields into array.
+    RArray<TInt> contact_fields;
+    CleanupClosePushL(contact_fields);
+
+    // Check which relevant contact fields are indexed in PCS search.
+    iFirstNamePCSIndex = FindContactFieldPCSIndexL( R_VPBK_FIELD_TYPE_FIRSTNAME );
+    iLastNamePCSIndex = FindContactFieldPCSIndexL( R_VPBK_FIELD_TYPE_LASTNAME );
+    iCompanyNamePCSIndex = FindContactFieldPCSIndexL( R_VPBK_FIELD_TYPE_COMPANYNAME );
+
+    // If first name and last name are not indexed in PCS, easy dialing plugin
+    // can not function reasonably. The function leaves, which in turn causes
+    // the plugin not to be initialized.
+    // Company name not being indexed is not as severe case, and does not cause a leave.
+    // Fields used in PCS indexing are configured in cenrep 2000B5C6.
+    if ( iFirstNamePCSIndex == KErrNotFound )
+        {
+        OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_INITPREDICTIVECONTACTSEARCHL_ERROR_NO_FIRST_NAME, "ERROR, PCS does not support first name indexing!" );
+        LOGSTRING("EasyDialingPlugin: PCS does not support first name indexing => Leave");
+        User::Leave( KErrEasyDialingNoFirstNamePCSIndexing );
+        }
+    if ( iLastNamePCSIndex == KErrNotFound )
+        {
+        OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_INITPREDICTIVECONTACTSEARCHL_ERROR_NO_LAST_NAME, "ERROR, PCS does not support last name indexing!" );
+        LOGSTRING("EasyDialingPlugin: PCS does not support last name indexing => Leave");
+        User::Leave( KErrEasyDialingNoLastNamePCSIndexing );
+        }
+
+    // First name, last name and company name (if supported) are used in PCS search.
+    contact_fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME);
+    contact_fields.Append(R_VPBK_FIELD_TYPE_LASTNAME);
+    if ( iCompanyNamePCSIndex != KErrNotFound )
+        {
+        contact_fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME);
+        }
+
+    SetSortOrderL( iContactDataManager->NameOrder() );
+
+    // Create and fill ps settings object.
+    CPsSettings* ps_settings = CPsSettings::NewL();
+    CleanupStack::PushL(ps_settings);
+
+    ps_settings->SetSearchUrisL(iContactDataStores);
+    ps_settings->SetMaxResults(KEDMaximumMatchingContactsCount);
+    ps_settings->SetSortType(EAlphabetical);
+    ps_settings->SetDisplayFieldsL(contact_fields);
+
+    // Set the PCS settings.
+    iPredictiveContactSearchHandler->SetSearchSettingsL(*ps_settings);
+
+    CleanupStack::PopAndDestroy(ps_settings);
+    CleanupStack::PopAndDestroy(&contact_fields);
+
+    iPredictiveSearchQuery = CPsQuery::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// SetSortOrderL
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::SetSortOrderL( CEasyDialingContactDataManager::TNameOrder aNameOrder )
+    {
+    RArray<TInt> fields;
+    CleanupClosePushL( fields );
+    if ( aNameOrder == CEasyDialingContactDataManager::EFirstnameLastname )
+        {
+        fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME);
+        fields.Append(R_VPBK_FIELD_TYPE_LASTNAME);
+        }
+    else
+        {
+        fields.Append(R_VPBK_FIELD_TYPE_LASTNAME);
+        fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME);
+        }
+    if ( iCompanyNamePCSIndex != KErrNotFound )
+        {
+        fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME);
+        }
+    iPredictiveContactSearchHandler->ChangeSortOrderL( *iContactDataStores[0], fields );
+    CleanupStack::PopAndDestroy( &fields );
+    }
+
+// -----------------------------------------------------------------------------
+// OfferKeyEventL
+// Check the received keypad event and performs user
+// actions related to it.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CEasyDialingPlugin::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+    {
+    TKeyResponse keyResponse = EKeyWasNotConsumed;
+
+    if ( aKeyEvent.iCode == 0 && aKeyEvent.iScanCode != EStdKeyDevice3)
+        {
+        return keyResponse;
+        }
+
+    TInt keyCode = aKeyEvent.iCode;
+    
+    // Swap right and left key codes in mirrored layout. This needs to be done
+    // also for action menu grid as CAknGrid handles arrow keys like this:
+    // left key = next column (not item!) and right is previous column and
+    // grid layout (LtR/RtL) is not taken into account when movement is done
+    // in columns (always like in LtR layout). So if right key should move
+    // focus to the right also in mirroded layout, key codes must be switched.
+    // This kind of approach is used also e.g. in application grid.
+    if ( AknLayoutUtils::LayoutMirrored() ) 
+        {
+        if ( keyCode == EKeyRightArrow ) keyCode = EKeyLeftArrow;
+        else if ( keyCode == EKeyLeftArrow ) keyCode = EKeyRightArrow;
+        }
+    
+
+    if ( IsFocused() )
+        {
+        if ( keyCode == EKeyUpArrow )
+            {
+            // if the focus is on the top-most item
+            if ( iContactListBox->CurrentItemIndex() == 0)
+                {
+                // then focus jumps off the component.
+                SetFocus( EFalse );
+                DrawDeferred();
+                keyResponse = EKeyWasConsumed;
+                }
+            else
+                {
+                keyResponse = iContactListBox->OfferKeyEventL( aKeyEvent, aType );
+                }
+            }
+        else if ( keyCode == EKeyDownArrow )
+            {
+            // if the focus is on the bottom-most item
+            if ( iContactListBox->CurrentItemIndex() == (iNumberOfNames - 1) )
+                {
+                // then focus jumps off the component.
+                SetFocus( EFalse );
+                DrawDeferred();
+                keyResponse = EKeyWasConsumed;
+                }
+            else
+                {
+                keyResponse = iContactListBox->OfferKeyEventL( aKeyEvent, aType );
+                }
+            }
+
+        else if ( keyCode == EKeyRightArrow )
+            {
+            iRememberFocus = ETrue;
+            AsyncActionLaunchL( ELaunchCurrentContact );
+            keyResponse = EKeyWasConsumed;
+            }
+
+        else if ( keyCode == EKeyLeftArrow )
+            {
+            // then focus jumps off the component.
+            SetFocus( EFalse );
+            DrawDeferred();
+            keyResponse = EKeyWasConsumed;
+            }
+
+        else
+            {
+            // then focus jumps off the component.
+            SetFocus( EFalse );
+            }
+        }
+
+    else if ( iNumberOfNames > 0 ) // not in focus but there are contacts to show
+        {
+        if ( keyCode == EKeyUpArrow || keyCode == EKeyDownArrow )
+            {
+            SetFocus( ETrue );
+            keyResponse = iContactListBox->SetFocusedWithKeyEventL( aKeyEvent, aType );
+            }
+        }
+    return keyResponse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CountComponentControls
+//
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingPlugin::CountComponentControls() const
+    {
+    return iNumberOfNames > 0 ? 1 : 0;
+    }
+
+
+// -----------------------------------------------------------------------------
+// ComponentControl
+//
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CEasyDialingPlugin::ComponentControl( TInt aIndex ) const
+    {
+    return aIndex == 0 ? iContactListBox : NULL;
+    }
+
+
+// -----------------------------------------------------------------------------
+// MakeVisible
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::MakeVisible( TBool aVisible )
+    {
+    if ( aVisible != IsVisible() )
+        {
+        CCoeControl::MakeVisible( aVisible );
+        
+        if ( !aVisible && IsFocused() )
+            {
+            SetFocus( EFalse );
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// SizeChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::SizeChanged()
+    {
+    TRect rect = Rect();
+    // convert rect to absolute coordinates
+    rect.SetRect( PositionRelativeToScreen(), rect.Size() );
+    
+    iContactListBox->SetMaxRect( rect );
+    iContactListBox->SetRectToNumberOfItems( iNumberOfNames );
+    
+    TInt itemToMakeVisible = iContactListBox->CurrentItemIndex();  
+    if ( itemToMakeVisible == KErrNotFound && iNumberOfNames )
+        {
+        // if no current item is set, make sure that the list is then 
+        // scrolled to the bottom.
+        itemToMakeVisible = iNumberOfNames - 1;
+        } 
+    iContactListBox->ScrollToMakeItemVisible( itemToMakeVisible );
+    }
+
+
+// -----------------------------------------------------------------------------
+// FocusChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::FocusChanged( TDrawNow aDrawNow )
+    {
+    iContactListBox->SetFocus( IsFocused() );
+    if( !IsFocused() )
+        {
+        // To be on the safe side, cancel async callback and reset input block.
+        CancelActionLaunchAndInputBlock();
+        }
+    CCoeControl::FocusChanged( aDrawNow );
+    InformObservers( MDialingExtensionObserver::EFocusChanged );
+    }
+
+
+// -----------------------------------------------------------------------------
+// SetInputL
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::SetInputL( const TDesC& aSearchString )
+    {
+    if ( !IsEnabled() )
+        {
+        return;
+        }
+    OstTraceExt1( TRACE_NORMAL, CEASYDIALINGPLUGIN_SET_INPUT, "SetInput: '%S' ", aSearchString );
+    LOGSTRING1("EasyDialingPlugin: SetInput: '%S'", &aSearchString );
+    
+    // Earlier here was a test if the search string is the same as the one used in previous search.
+    // If it was, no search was done but function returned immediately.
+    // This has now been removed. It is possible that contacts have changed, and a new search
+    // may be needed even if the search string is the same. 
+    
+    // Check if search string is just empty space or 0-length. Decision was made that no
+    // matches are shown if search string is just space (would show all contacts)
+    // even if somebody might have unnamed contacts. Should be quite rare.
+    // It's assumed later on in the code that string is not just empty space.
+    TLex searchString( aSearchString );
+    searchString.SkipSpace();
+    if ( searchString.Eos() ) // the end of the string reached after skipping empty space
+        {
+        // It's assumed here that if we get here due to switching to call
+        // handling etc, then dialer and thus ed is already set invisible
+        // and effect will not be shown as listbox is already invisible.
+        // However if user empties number entry, then it's feasible to show
+        // effect.
+        HideContactListBoxWithEffect();
+        Reset();
+        }
+    else // proper search string
+        {
+        iSearchString.Copy( aSearchString.Left( iSearchString.MaxLength() ) );
+        LaunchSearchL();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// MatchingContactCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingPlugin::MatchingContactCount()
+    {
+    return iNumberOfNames;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::StoreReady
+// From MVPbkContactStoreListObserver.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::StoreReady(MVPbkContactStore& /* aContactStore */)
+    {
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::StoreUnavailable
+// From MVPbkContactStoreListObserver.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::StoreUnavailable(MVPbkContactStore& /* aContactStore */, TInt /* aReason */)
+    {
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::HandleStoreEventL
+// From MVPbkContactStoreListObserver.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::HandleStoreEventL( MVPbkContactStore& /* aContactStore */, 
+                        TVPbkContactStoreEvent aStoreEvent)
+    {
+    // Store's observers are informed one by one using active object so one shouldn't
+    // perform search syncronously as one must try to ensure that PCS has had a
+    // chance to update its store. However there seems to be no way to be
+    // 100% sure that PCS is up-to-date when search is launched: telephony app
+    // has such a high priority and there are no APIs to query PCS' status.
+    switch ( aStoreEvent.iEventType )
+        {
+        case TVPbkContactStoreEvent::EContactAdded:
+        case TVPbkContactStoreEvent::EContactDeleted:
+        case TVPbkContactStoreEvent::EContactChanged:
+            {
+            DoHandleContactsChangedL();
+            }
+            break;
+       
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::OpenComplete
+// From MVPbkContactStoreListObserver.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::OpenComplete()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// EasyDialingSettingsChanged
+// From MEasyDialingCenrepListenerObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::EasyDialingSettingsChanged( TInt aValue )
+    {
+    if ( aValue == 0 )
+        {
+        Reset();
+        InformObservers( MDialingExtensionObserver::EEasyDialingDisabled );
+        }
+    else if ( aValue == 1 )
+        {
+        InformObservers( MDialingExtensionObserver::EEasyDialingEnabled );
+        }
+    MakeVisible( aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// EasyDialingContactThumbnailsSettingsChanged
+// From MEasyDialingCenrepListenerObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue )
+    {
+    iContactDataManager->SetContactThumbnailSetting( aThumbnailSettingValue );
+    iContactDataManager->Reload();
+    DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// AllContactDataLoaded
+// From MContactDataManagerObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::AllContactDataLoaded()
+    {
+    iContactListBox->DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// NameOrderChanged
+// From MContactDataManagerObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::NameOrderChanged()
+    {
+    if ( iPredictiveContactSearchHandler )
+        {
+        TRAP_IGNORE( SetSortOrderL( iContactDataManager->NameOrder() ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// FavouritesChanged
+// From MContactDataManagerObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::FavouritesChanged()
+    {
+    TRAP_IGNORE( DoHandleContactsChangedL() );
+    }
+
+// -----------------------------------------------------------------------------
+// InformContactorEvent
+// From MEDContactorObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::InformContactorEvent( MEDContactorObserver::TEvent aEvent )
+    {
+
+    // This callback function simply propagates the events to its own listener.
+    switch ( aEvent )
+        {
+        case MEDContactorObserver::ECommunicationStarted:
+            InformObservers( MDialingExtensionObserver::ECommunicationStarted );
+            break;
+        case MEDContactorObserver::ECommunicationCancelled:
+            InformObservers( MDialingExtensionObserver::ECommunicationCancelled );
+            break;
+        default:
+            break;
+        }
+    
+    // Reset focus unless it is flagged to be remembered.
+    if ( !iRememberFocus )
+        {
+        SetFocus( EFalse );
+        DrawDeferred();
+        }
+    
+    iRememberFocus = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// Draw
+// The actual UI drawing function. Draws the easy dialing popup bubble on the
+// idle screen.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::Draw( const TRect& /* aRect */ ) const
+    {
+    return;
+    }
+
+
+// -----------------------------------------------------------------------------
+// LaunchSearchL
+// Initiates predictive contact search.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::LaunchSearchL()
+    {
+    if ( iSearchString.Length() == 0 || !iPredictiveContactSearchHandler )
+        {
+        return;
+        }
+    
+    iDiscardCompletingSearches = EFalse;
+    iNewSearchNeeded = EFalse;
+    
+    iPredictiveSearchQuery->Reset();
+
+    for ( TInt i = 0; i < iSearchString.Length(); i++ )
+        {
+         // Add a query item
+        CPsQueryItem* item = CPsQueryItem::NewL();
+        CleanupStack::PushL(item);
+
+        item->SetCharacter( iSearchString[i] );
+        
+        // The PCS mode used with character is based on character itself,
+        // not to the keyboard it is made with. While this is not strictly
+        // identical to checking the used keyboard, this behaves identically
+        // in most of the normal cases, and makes the logic simpler.
+        if ( IsItuTCharacter( iSearchString[i] ) )
+            {
+            item->SetMode( EPredictiveItuT );
+            }
+        else 
+            {
+            item->SetMode( EPredictiveDefaultKeyboard );
+            }
+        
+        iPredictiveSearchQuery->AppendL(*item);
+
+        // Previous CPsQuery::AppendL takes the ownership of item.
+        // Do not delete item.
+        CleanupStack::Pop(item);
+        }
+
+    // Issue the search. SearchL is asynchronous function => returns immediately.
+    iPredictiveContactSearchHandler->SearchL(*iPredictiveSearchQuery);
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandlePsResultsUpdate from MPsResultsObserver
+// Called after predictive search has been completed.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::HandlePsResultsUpdate( RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs )
+    {
+    if ( !IsEnabled() )
+        {
+        // Easydialing is off. We should arrive here only if user turned it off while a search was happening.
+        Reset();
+        return;
+        }
+    TRAPD( leaveError, HandlePsResultsUpdateL( aResults, aSeqs ) );
+
+    if ( leaveError )
+        {
+        OstTrace1( TRACE_ERROR, CEASYDIALINGPLUGIN_HANDLEPSRESULTSUPDATE, "HandlePsResultsUpdate failed: %d", leaveError );
+        LOGSTRING1("EasyDialingPlugin: HandlePsResultsUpdate failed: %d", leaveError );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandlePsError from MPsResultsObserver
+// Called when search error happens.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::HandlePsError( TInt aErrorCode )
+    {
+    OstTrace1( TRACE_ERROR, CEASYDIALINGPLUGIN_HANDLEPSERROR, "PCS Error: %d", aErrorCode );
+    LOGSTRING1("EasyDialingPlugin: PCS Error: %d", aErrorCode );
+    }
+
+// -----------------------------------------------------------------------------
+// CachingStatus from MPsResultsObserver
+// Called to update caching status.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::CachingStatus( TCachingStatus& aStatus, TInt& aError )
+    {
+    OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_CACHINGSTATUS, "PCS CachingStatus: %d, error: %d", ( TUint )( aStatus ), aError );
+    LOGSTRING2("EasyDialingPlugin: PCS CachingStatus: %d, error: %d", aStatus, aError );
+    }
+
+
+// -----------------------------------------------------------------------------
+// FindContactFieldPCSIndex
+// Searches the index that stores the given contact field.
+// To see possible contact field numbering, see file "vpbkeng.rsg".
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingPlugin::FindContactFieldPCSIndexL( TInt aIndex )
+    {
+    RArray<TInt> fieldOrder;
+    CleanupClosePushL( fieldOrder );
+
+    // Current implementation searches only from default database.
+    // Later this may be expanded to search SIM contacts as well.
+    HBufC* default_cdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC();
+
+    iPredictiveContactSearchHandler->GetDataOrderL( *default_cdb, fieldOrder );
+
+    for ( TInt i = 0; i < fieldOrder.Count(); i++)
+        {
+        if ( fieldOrder[i] == aIndex )
+            {
+            CleanupStack::PopAndDestroy( default_cdb );
+            CleanupStack::PopAndDestroy( &fieldOrder );
+            return i;
+            }
+        }
+
+    CleanupStack::PopAndDestroy( default_cdb );
+    CleanupStack::PopAndDestroy( &fieldOrder );
+    return KErrNotFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandlePsResultsUpdateL
+// This function does the actual callback fork, and must be trapped inside
+// HandlePsResultsUpdateL.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::HandlePsResultsUpdateL( RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& /*aSeqs*/ )
+    {
+    // If iDiscardCompletingSearches is ETrue, don't show search results but just return.
+    // If easydialing has been reset with reset function, no searches completed after that
+    // can be shown.
+    // This is done like this because there seems not to be a feasible way of cancelling all 
+    // PCS search request in PCS API. CancelRequest does not work here.
+    if ( iDiscardCompletingSearches )
+        {
+        return;
+        }
+    
+    iListBoxModel->Reset();
+    iContactListBox->HandleItemRemovalL();
+
+    TInt numberOfPCSMatches( aResults.Count() );
+    
+    // Resetting the contactdatamanager causes the thumbnails to flicker a bit, because
+    // we need to load the thumbnails again. But if there are lots of search results, or
+    // lots of loaded thumbnails in the manager, matching the search results to the
+    // thumbnail manager contents may take too much time. If there are lots of results,
+    // it is likely that the contents of the listbox change anyway, so the flickering
+    // doesn't matter too much. This also limits the memory usage of the manager.
+    //   But if there are fewer search results, it is worth trying to match them
+    // with the contents of thumbnail manager.
+    
+    TBool matchThumbnails(ETrue);
+    if ( numberOfPCSMatches > KEDFlushContactDataManagerLimit )
+        {
+        iContactDataManager->Reset();
+        matchThumbnails = EFalse;
+        }
+
+    OstTrace1( TRACE_NORMAL, CEASYDIALINGPLUGIN_HANDLEPSRESULTSUPDATEL_MATCHES, "Matching results from PCS: %d", numberOfPCSMatches );
+    LOGSTRING1("EasyDialingPlugin: Matching results from PCS: %d", numberOfPCSMatches );
+
+    // retrieve the name order before adding
+    CEasyDialingContactDataManager::TNameOrder nameOrder = iContactDataManager->NameOrder();
+
+    RPointerArray<MVPbkContactLink> favsFoundByPcs;
+    CleanupResetAndDestroyPushL( favsFoundByPcs );
+    
+    // Update the model
+    // ----------------
+    for ( TInt i = 0; i < numberOfPCSMatches; i++ )
+        {
+        TInt indexFromEnd = numberOfPCSMatches - i - 1;
+
+        MVPbkContactLink* link = iPredictiveContactSearchHandler->ConvertToVpbkLinkLC(
+                *(aResults[indexFromEnd]), *iContactManager );
+        if ( !iContactDataManager->IsFavL( link ) )
+            {
+            // handle favourites separately, in another loop
+            HBufC* contactString = CreateContactStringLC( aResults[ indexFromEnd ], nameOrder );
+            CreateListBoxContactStringL( *contactString, link, matchThumbnails, EFalse );
+            CleanupStack::PopAndDestroy( contactString );
+            CleanupStack::PopAndDestroy( link );
+            }
+        else
+            {
+            // favourites are handled later
+            favsFoundByPcs.AppendL( link );
+            CleanupStack::Pop( link );
+            }
+        
+        OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_HANDLEPSRESULTSUPDATEL_SHOW_MATCH, "Contact #%d: '%S'", i+1, iContactStringCreationBuffer );
+        LOGSTRING2( "EasyDialingPlugin: Contact #%d: '%S'", i+1, &iContactStringCreationBuffer );
+        }
+
+    // Search synchronously through all the favourite contacts to ensure
+    // that all favourite matches are added to bottom even when number of mathces
+    // exceeds the maximum number set to PCS
+    TInt numberOfFavs( iContactDataManager->NumberOfFavsL() );
+    TBuf<KBufferMaxLen> results;
+    for ( TInt i = numberOfFavs - 1; i >= 0; i-- )
+        {
+        HBufC* favContactString = iContactDataManager->FavContactStringLC( i, nameOrder );
+        MVPbkContactLink* link = iContactDataManager->FavLinkLC( i );
+        
+        // Check if this fav contact was returned in aResults.
+        // It's at least theoretically possible that all matches in aResults
+        // are not matched when using LookupMatchL. PCS has completely separate logics
+        // for functions SearchL and LookupMatchL and especially with Chinese variant
+        // they may return different results.
+        TBool found = ( Find( link, favsFoundByPcs ) != KErrNotFound );
+        
+        // If this fav contact was not in aResults, then use LookupMatchL
+        // to check if this contact is still a match and was excluded from aResults
+        // because maximum number of results was exceeded.
+        if ( !found )
+            {
+            results = KNullDesC;
+            iPredictiveContactSearchHandler->LookupMatchL(
+                    *iPredictiveSearchQuery, *favContactString, results );
+            found = ( results.Length() > 0 );
+            }
+
+        if ( found )
+            {
+            // matches, add this fav to listbox.
+            CreateListBoxContactStringL( *favContactString, link, matchThumbnails, ETrue );
+            }
+
+        CleanupStack::PopAndDestroy(); // link
+        CleanupStack::PopAndDestroy( favContactString );
+        }
+    
+    CleanupStack::PopAndDestroy( &favsFoundByPcs ); // ResetAndDestroy
+    
+    // Update the view
+    // ---------------
+    iNumberOfNames = iListBoxModel->Count();
+    if ( iNumberOfNames )
+        {
+        iContactListBox->SetRectToNumberOfItems( iNumberOfNames );
+        iContactListBox->HandleItemAdditionL();
+        // Scroll the list to bottom
+        iContactListBox->ScrollToMakeItemVisible( iNumberOfNames-1 );
+        ShowContactListBoxWithEffect();
+        }
+    else
+        {  
+        HideContactListBoxWithEffect();
+        }
+
+    if ( IsFocused() )
+        {
+        SetFocus( EFalse );
+        }
+
+    DrawDeferred();
+
+    InformObservers( MDialingExtensionObserver::ESearchComplete );
+    }
+
+
+// -----------------------------------------------------------------------------
+// void CCASimpleNotifyL()
+// Implements MCCAObserver notification interface.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::CCASimpleNotifyL( TNotifyType aType, TInt aReason )
+    {
+    OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_CCASIMPLENOTIFYL, "CCASimpleNotifyL: type: %d, reason: %d", ( TUint )( aType ), aReason );
+    LOGSTRING2("EasyDialingPlugin: CCASimpleNotifyL: type: %d, reason: %d", (TInt)aType, aReason );
+
+    iContactLauncherActive = EFalse;
+
+    CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv->AppUi() );
+    appUi->HandleCommandL( EPhoneCmdBlockingDialogClosed );
+    
+    // If contacts have been edited during contact launcher being open, a new search
+    // needs to be done.
+    if ( iNewSearchNeeded )
+        {
+        // The cached information in contact data manager may be outdated. Call to reload makes sure that when the 
+        // search is made, all data is loaded again.
+        iContactDataManager->Reload();
+        
+        LaunchSearchL();
+        }
+
+    // Give up focus, if iRememberFocus flag is not set.
+    if ( !iRememberFocus )
+        {
+        SetFocus( EFalse );
+        DrawDeferred();
+        }    
+    iRememberFocus = EFalse;
+
+    // Inform observers.
+    InformObservers( MDialingExtensionObserver::ECCALauncherExit );
+    }
+
+
+// -----------------------------------------------------------------------------
+// void LaunchCurrentContactL()
+// Implements MCCAObserver notification interface.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::LaunchCurrentContactL()
+    {
+    __ASSERT_DEBUG( iNumberOfNames > 0, EasyDialingPanic( EEasyDialingPanicNoResults ) );
+    __ASSERT_DEBUG( iContactListBox->CurrentItemIndex() >= 0, EasyDialingPanic( EEasyDialingPanicNoContactSelected ) );
+
+    if (( iContactLauncherActive ) || ( iNumberOfNames == 0 ) || ( !iContactListBox ) || ( iContactListBox->CurrentItemIndex() < 0 ))
+        {
+        OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_ERROR, "LaunchCurrentContactL: Parameter error" );
+        LOGSTRING("EasyDialingPlugin: LaunchCurrentContactL - Parameter error");
+        return;
+        }
+
+    MCCAParameter* launchParameters = TCCAFactory::NewParameterL();
+    CleanupClosePushL( *launchParameters );
+
+    // ESoftExit flag causes that ca launcher will not close the 
+    // client application in any circumstance. 
+    // Application hosting easydialing is telephone application.
+    // It must never be closed, so we must use this flag.
+    launchParameters->SetConnectionFlag(MCCAParameter::ESoftExit);
+    
+    launchParameters->SetContactDataFlag(MCCAParameter::EContactLink);
+
+    // Get the contact link of the current contact item.
+    HBufC8* contact8 = iContactListBox->CurrentContactLinkLC();
+    
+    // Expand it into 16-bit descriptor because cca launcher api expects this. 
+    HBufC16* contact16 = HBufC16::NewLC( contact8->Length() );
+    contact16->Des().Copy( *contact8 );
+
+    launchParameters->SetContactDataL( *contact16 );
+
+    CleanupStack::PopAndDestroy( contact16 );
+    CleanupStack::PopAndDestroy( contact8 );
+
+    TPtrC selectedName = iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() );
+    OstTraceExt1( TRACE_NORMAL, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_LAUNCH_CCA, "Launch CL for contact: '%S'", selectedName );
+    LOGSTRING1("EasyDialingPlugin: Launch CL for contact: '%S'", &selectedName );
+
+    iContactLauncher->LaunchAppL( *launchParameters, this );
+
+    // Ownership of parameter transferred to CCA launcher => pop but do not destroy.
+    CleanupStack::Pop( launchParameters );
+
+
+    iContactLauncherActive = ETrue;
+    CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv->AppUi() );
+    appUi->HandleCommandL( EPhoneCmdBlockingDialogLaunched );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CreateListBoxContactStringL
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::CreateListBoxContactStringL(
+        const TDesC& aContactString,
+        MVPbkContactLink *aLink,
+        TBool aMatchThumbnails,
+        TBool aFav )
+    {
+    // Construct the contact string for the listbox model.
+    iContactStringCreationBuffer.Zero();
+    
+    // Append contact thumbnail id.
+    HBufC* thumbnailId = iContactDataManager->GetThumbnailIdL( aLink, aMatchThumbnails, aFav );
+    iContactStringCreationBuffer.Append( *thumbnailId );
+    delete thumbnailId;
+    iContactStringCreationBuffer.Append( KListFieldSeparatorChar );
+    
+    AppendStringWithMatchDataL(
+            iContactStringCreationBuffer,
+            aContactString,
+            iPredictiveContactSearchHandler,
+            iPredictiveSearchQuery );
+    
+    // Append the whole string to listbox model.
+    iListBoxModel->AppendL( iContactStringCreationBuffer );
+    }
+
+// -----------------------------------------------------------------------------
+// CreateContactStringLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CEasyDialingPlugin::CreateContactStringLC( CPsClientData* aResult,
+        CEasyDialingContactDataManager::TNameOrder aNameOrder )
+    {
+    TPtrC firstName = *aResult->Data( iFirstNamePCSIndex );
+    TPtrC lastName = *aResult->Data( iLastNamePCSIndex );
+    TPtrC companyName( KNullDesC );
+    
+    if ( iCompanyNamePCSIndex != KErrNotFound )
+        {
+        companyName.Set( *aResult->Data( iCompanyNamePCSIndex ) );
+        }
+    return EasyDialingUtils::CreateContactStringLC( firstName, lastName, companyName, aNameOrder );
+    }
+
+
+// -----------------------------------------------------------------------------
+// AddObserverL
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::AddObserverL( MDialingExtensionObserver* aObserver )
+    {
+    if ( !aObserver )
+        {
+        return;
+        }
+    
+    iObservers.AppendL( aObserver );
+    }
+
+
+// -----------------------------------------------------------------------------
+// RemoveObserver
+//
+// Removes the parameter observer from observer list if found. If same observer
+// has registered multiple times (which is unnecessary), removed just the first
+// registration.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::RemoveObserver( MDialingExtensionObserver* aObserver )
+    {
+    for ( TInt i = 0; i < iObservers.Count(); i++ )
+        {
+        if ( iObservers[i] == aObserver)
+            {
+            iObservers.Remove( i );
+            return;
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// InformObservers
+// Informs all registered observers of easy dialing events.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::InformObservers( MDialingExtensionObserver::TEvent aEvent )
+    {
+    for ( TInt i = 0; i < iObservers.Count(); i++ )
+        {
+        iObservers[i]->HandleDialingExtensionEvent( aEvent );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CbaResourceId
+// Returns EasyDialingPlugin specific CBA resource ID that
+// Phone application can use when updating Soft Keys.
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingPlugin::CbaResourceId()
+    {
+    return R_EASYDIALING_CBA;
+    }
+
+
+// -----------------------------------------------------------------------------
+// MenuResourceId
+// Returns EasyDialingPlugin specific menu resource ID that
+// Phone application can use when easydialing is in focus.
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingPlugin::MenuResourceId()
+    {
+    return R_EASYDIALING_MENUBAR;
+    }
+
+
+// -----------------------------------------------------------------------------
+// InitializeMenuPaneL
+// Initializes easy dialing menu pane. This function is meant to be called in 
+// DynInitMenuPaneL of the application, if the application wants to use easy
+// dialing menu.
+// -----------------------------------------------------------------------------
+//
+TBool CEasyDialingPlugin::InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId )
+    {   
+    if ( aMenuResourceId == R_PHONEUIDIALER_OPTIONS_MENU )
+        {
+        TInt index( KErrNotFound );
+        // To be on the safe side - place holder was added into phoneui.rss.
+        if ( aMenuPane.MenuItemExists( EEasyDialingSettingsItemPlaceHolder, index ) )
+            {
+            // Add first menu item (= on/off submenu) after placeHolder item and 
+            // then delete that (empty) placeHolder.
+            aMenuPane.AddMenuItemsL( R_EASYDIALING_OPTIONS_ON_OFF_MENU_ITEM, 
+                                     EEasyDialingSettingsItemPlaceHolder );
+            aMenuPane.DeleteMenuItem( EEasyDialingSettingsItemPlaceHolder );
+            
+            LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: Added on/off menu into dialer's menu" );
+            }
+
+        // Return EFalse as only one menu item was added here.
+        return EFalse; 
+        }
+    
+    else if ( aMenuResourceId == R_EASYDIALING_MENU )
+        {
+        TBool voiceCall = EFalse;
+        TBool videoCall = EFalse;
+        TBool message = EFalse;
+        
+        if ( iContactListBox->CurrentItemIndex() >= 0 ) 
+            {
+            TInt index = iContactListBox->CurrentContactDataIndex();
+            
+            voiceCall = iContactDataManager->VoiceCallAvailable( index );
+            videoCall = iContactDataManager->VideoCallAvailable( index );
+            message = iContactDataManager->UniEditorAvailable( index );
+            }
+            
+        // Call menu item is not show if neither voice call nor video call are possible. 
+        aMenuPane.SetItemDimmed( EEasyDialingVoiceCall, !voiceCall && !videoCall ); 
+        aMenuPane.SetItemDimmed( EEasyDialingSendMessage, !message ); 
+        
+        LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: InitializeMenuPaneL done" );
+        
+        return ETrue;  
+        }
+    
+    else if ( aMenuResourceId == R_EASYDIALING_OPTIONS_CALL_MENU )
+        {
+        TBool voiceCall = EFalse;
+        TBool videoCall = EFalse;
+        
+        if ( iContactListBox->CurrentItemIndex() >= 0 ) 
+            {
+            TInt index = iContactListBox->CurrentContactDataIndex();
+            
+            voiceCall = iContactDataManager->VoiceCallAvailable( index );
+            videoCall = iContactDataManager->VideoCallAvailable( index );
+            }
+        
+        aMenuPane.SetItemDimmed( EEasyDialingVoiceCall, !voiceCall ); 
+        aMenuPane.SetItemDimmed( EEasyDialingVideoCall, !videoCall ); 
+
+        LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: InitializeMenuPaneL for call submenu done" );
+        
+        return ETrue;
+        }
+    
+    else if ( aMenuResourceId == R_EASYDIALING_OPTIONS_ON_OFF_CASCADE_MENU )
+        {
+        if ( IsEnabled() )
+            {
+            aMenuPane.SetItemButtonState( EEasyDialingOn, EEikMenuItemSymbolOn );
+            }
+        else
+            {
+            aMenuPane.SetItemButtonState( EEasyDialingOff, EEikMenuItemSymbolOn );
+            }
+        
+        LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: InitializeMenuPaneL for on/off submenu done" );
+        
+        return ETrue;
+        }
+    
+    else 
+        {
+        return EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// HandleCommandL
+// Method for handling EasyDialingPlugin specific commands.
+// -----------------------------------------------------------------------------
+//
+TBool CEasyDialingPlugin::HandleCommandL( TInt aCommand )
+    {      
+    // Input blocker can't block controls higher on the control stack than 
+    // ECoeStackPriorityDialog so we will get HandleCommandL calls from 
+    // phoneappui (CBA) when input blocker is active (=not NULL).
+    
+    if ( iInputBlocker && aCommand != EEasyDialingCallHandlingActivated )
+        {
+        // Some action is already being launched since iInputBlocker exists.
+        // Only call activation command requires always action from this plugin.
+        return ETrue;
+        }
+ 
+    
+    TBool ret(EFalse);
+    
+    switch ( aCommand )
+        {
+        case EEasyDialingOpenContact:
+            
+            iRememberFocus = ETrue;
+            AsyncActionLaunchL( ELaunchCurrentContact );
+            ret = ETrue;
+            break;
+
+        // EEasyDialingEnterKeyAction is sent when Enter key is pressed.
+        // EEasyDialingMakeCall is sent when send key or send toolbar button or send menu item is pressed.
+        case EEasyDialingVoiceCall: // fall through
+        case EEasyDialingEnterKeyAction:
+            // Make a call.
+            iRememberFocus = ETrue;
+            AsyncActionLaunchL( ECallCurrentContact );
+            ret = ETrue;
+            break;
+            
+        // Video call is selectable only through menu.
+        case EEasyDialingVideoCall:
+            // Make a video call.
+            iRememberFocus = ETrue;
+            AsyncActionLaunchL( EVideoCallCurrentContact );
+            ret = ETrue;
+            break;
+                
+        // Uni-editor message is selectable only through menu.
+        case EEasyDialingSendMessage:
+            // Create a message.
+            iRememberFocus = ETrue;
+            AsyncActionLaunchL( ESendMessageCurrentContact );
+            ret = ETrue;
+            break;
+                    
+        // EEasyDialingCallHandlingActivated is sent when the in-call-ui of telephony gets activated
+        case EEasyDialingCallHandlingActivated:
+            
+            iRememberFocus = EFalse;
+            // Stop input block and async action launch in case they are active.
+            CancelActionLaunchAndInputBlock();
+            // Close down number selection popup in case it happens to be open.
+            iContactorService->CancelService();
+            // Close down communication launcher if it's active
+            if ( iContactLauncherActive )
+                {
+                iNewSearchNeeded = EFalse;
+                iContactLauncher->CloseAppL();
+                }
+            ret = ETrue;
+            break;
+            
+        case EEasyDialingOn:
+            
+            iCenrepListener->SetEasyDialingSettingsValue( 1 );
+            ret = ETrue;
+            break;
+
+        case EEasyDialingOff:
+            
+            iCenrepListener->SetEasyDialingSettingsValue( 0 );
+            ret = ETrue;
+            break;    
+            
+        case EEasyDialingClosePopup:
+            
+            // Not only Number Entry is removed but also closes down number selection popup in case it happens to be open.
+            iContactorService->CancelService();
+            ret = ETrue;
+            break;
+            
+        default:
+            break;
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// IsEnabled
+// Check if Easy dialing is enabled in the settings
+// -----------------------------------------------------------------------------
+//
+TBool CEasyDialingPlugin::IsEnabled() const
+    {
+    return ( iCenrepListener && iCenrepListener->Value() != 0 );
+    }
+
+// -----------------------------------------------------------------------------
+// AsyncActionLaunchL
+// Use asynchronous callback to launch action. While action is being launched,
+// input blocker is used to avoid OfferKeyEvent and HandlePointerEvent calls
+// coming in. Both end key and application key work despite of input blocker.
+// Input blocker can't block phoneappui's cba so extra check is needed in
+// HandleCommandL method.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::AsyncActionLaunchL( const TEasyDialingAction aAction )
+    {
+    iActionToBeLaunched = aAction;
+    
+    CancelActionLaunchAndInputBlock();
+    
+    if ( aAction == ELaunchSearch )
+        {
+        // Must be set as low as possible to enable PCS to update its store.
+        iAsyncCallBack->SetPriority( CActive::EPriorityIdle );
+        }
+    else
+        {
+        iAsyncCallBack->SetPriority( CActive::EPriorityStandard );
+        }
+    
+    iAsyncCallBack->CallBack(); // activates callback request
+    
+    // By defining cancel handler, we don't block all input but system is still
+    // able to deactivate the view etc.
+    iInputBlocker = CAknInputBlock::NewCancelHandlerLC( this );
+    CleanupStack::Pop( iInputBlocker );
+    
+    // This means that iInputBlocker is deleted by CAknInputBlock when
+    // it's cancelled ( we get a callback where iInputBlocker is set to NULL).
+    iInputBlocker->SetCancelDelete( iInputBlocker );
+    }
+
+// -----------------------------------------------------------------------------
+// AsyncCallBackToLaunchAction
+// Callback function for CAsyncCallBack class.
+// -----------------------------------------------------------------------------
+//
+TInt CEasyDialingPlugin::AsyncCallBackToLaunchAction( TAny* aPtr )
+    {
+    CEasyDialingPlugin* plugin = static_cast<CEasyDialingPlugin*>( aPtr );
+    
+    TRAP_IGNORE( plugin->DoLaunchActionL() );
+    
+    // Stop input block if active (=not NULL).
+    if ( plugin->iInputBlocker )
+        {
+        plugin->iInputBlocker->Cancel();
+        }
+    
+    plugin->iActionToBeLaunched = ENoActionDefined;
+    
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// DoLaunchActionL
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::DoLaunchActionL( )
+    {
+    // If ELaunchCurrentContact, then we launch cca launcher.
+    if ( iActionToBeLaunched == ELaunchCurrentContact )
+        {
+        LaunchCurrentContactL();
+        return;
+        }
+    else if ( iActionToBeLaunched == ELaunchSearch )
+        {
+        LaunchSearchL();
+        return;
+        }
+    else if ( iActionToBeLaunched == EInitializePcs )
+        {
+        PERF_MEASURE_START
+        InitPredictiveContactSearchL();
+        PERF_MEASURE_STOP
+ 
+        return;
+        }
+    
+    // If not for launching current contact or performing search, 
+    // the action is launching some communication method.
+    
+    if ( iContactorService->IsBusy() )
+        {
+        LOGSTRING("EasyDialingPlugin: LaunchActionL - contactor service is busy!");
+        return;
+        }
+ 
+    // Get current contact link.
+    HBufC8* contact8 = iContactListBox->CurrentContactLinkLC();
+    
+    TPtrC contactString( iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() ) );
+    
+    TPtrC fullNameSeparators;
+    TInt error = TextUtils::ColumnText( fullNameSeparators , 1, &contactString );
+    __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) );
+    
+    // Remove highlight separators. It is possible that some contactor API has problem with them.
+    HBufC* fullName = AllocWithoutHighlightSeparatorsLC( fullNameSeparators );
+    
+    VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector selector( 
+            VPbkFieldTypeSelectorFactory::EEmptySelector );
+    
+    switch ( iActionToBeLaunched ) 
+        {
+        case ECallCurrentContact:
+            {
+            // Easy Dialing provides pretty much the same functionality for big Call icon 
+            // and Send key than phonebook's contact list view by using aiw interface 
+            // in edcontactor.
+            // At this point one must however check whether to use voip or voice call selector - 
+            // otherwise correct logic is provided by aiw interface.
+            // Note that Easy Dialing ignores default numbers and addresses set for
+            // action types and shows always the number and address list if there are
+            // more than one possible number/address for some action.
+             
+            CSPSettingsVoIPUtils* sPSettings = CSPSettingsVoIPUtils::NewLC();
+            
+            if ( sPSettings->IsPreferredTelephonyVoIP() )
+                {
+                selector = VPbkFieldTypeSelectorFactory::EVOIPCallSelector;
+                }
+            else
+                {
+                selector = VPbkFieldTypeSelectorFactory::EVoiceCallSelector;
+                }
+            
+            CleanupStack::PopAndDestroy( sPSettings );
+            }
+            break;
+            
+        case EVideoCallCurrentContact:
+            
+            selector = VPbkFieldTypeSelectorFactory::EVideoCallSelector;
+            break;
+            
+        case ESendMessageCurrentContact:
+            
+            selector = VPbkFieldTypeSelectorFactory::EUniEditorSelector;
+            break;
+            
+        default:
+            CleanupStack::PopAndDestroy( fullName );           
+            CleanupStack::PopAndDestroy( contact8 );
+            __ASSERT_DEBUG( EFalse, EasyDialingPanic( EEasyDialingActionNotSupported ) );
+            return;
+        }
+
+    CEDContactorService::TCSParameter param( selector, *contact8, 
+                                             CEDContactorService::TCSParameter::EEnableDefaults, 
+                                             *fullName );
+
+    iContactorService->ExecuteServiceL( param );
+
+    CleanupStack::PopAndDestroy( fullName );
+    CleanupStack::PopAndDestroy( contact8 );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CancelActionLaunchAndInputBlock
+// Should be called when focus is lost or when call ui is activated.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::CancelActionLaunchAndInputBlock()
+    {
+    iAsyncCallBack->Cancel();
+    if ( iInputBlocker )
+        {
+        iInputBlocker->Cancel();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// HandleListBoxEventL
+// EasyDialerListBox calls this function when listbox events are reported
+// to observers.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+    {
+    LOGSTRING1( "EasyDialingPlugin: HandleListBoxEventL( %d ) - Enter", aEventType );
+
+    switch( aEventType )
+        {
+        case EEventItemSingleClicked:
+            // 9.2. Selecting contact initiates call
+            AsyncActionLaunchL( ECallCurrentContact );
+            break;
+
+        case KEasyDialingContactLongTapped:
+            AsyncActionLaunchL( ELaunchCurrentContact );
+            break;
+            
+        // Pause contact data manager when panning and flicking listbox.
+        // This ensures smooth and responsive listbox touch handling.
+        case EEventFlickStarted:
+        case EEventPanningStarted:
+        case KEasyDialingScrollingStarted:
+            iContactDataManager->Pause( ETrue );
+            break;
+            
+        case EEventFlickStopped:
+        case EEventPanningStopped:
+        case KEasyDialingScrollingStopped:
+            iContactDataManager->Pause( EFalse );
+            
+            // Touching the listbox always removes the visual focus from any list item.
+            // Move the focus away from the listbox after panning has ended to
+            // align our internal state with the visual lack of focus.
+            if ( IsFocused() )
+                {
+                SetFocus( EFalse );
+                DrawDeferred();
+                }
+            break;
+            
+        // We are not interested about the other listbox events.
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// From MAknInputBlockCancelHandler.
+// Called when input block is cancelled.
+// -----------------------------------------------------------------------------
+//
+ void CEasyDialingPlugin::AknInputBlockCancel()
+     {
+     LOGSTRING("EasyDialingPlugin: AknInputBlockCancel");
+     
+     // iInputBlocker will be deleted right after this callback by CAknInputBlock
+     // cause we are using CAknInputBlock::SetCancelDelete method.
+     iInputBlocker = NULL;
+     }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::DoHandleContactsChangedL
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::DoHandleContactsChangedL()
+    {
+    if ( iSearchString.Length() > 0 )
+        {
+        if ( iContactLauncherActive )
+            {
+            // Set the flag to make a search when communication launcher exits.
+            iNewSearchNeeded = ETrue;
+            }
+        else
+            {
+            // We get here if user e.g. leaves dialer open and goes to Contacts
+            // application and does some editing.
+            iContactDataManager->Reload(); // to update thumbnails
+            AsyncActionLaunchL( ELaunchSearch );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::ShowContactListBoxWithEffect
+// Use appear/disappear effects when in foreground and when listbox truly
+// changes visiblity.
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::ShowContactListBoxWithEffect()
+    {  
+    CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv->AppUi() );
+       
+    // Show effect only if listbox is about to come visible.
+    if ( !iContactListBox->IsVisible() &&
+         appUi && appUi->IsForeground() && 
+         GfxTransEffect::IsRegistered( iContactListBox ) )
+        {
+        GfxTransEffect::Begin( iContactListBox, KGfxContactListBoxOpenEffect );
+        iContactListBox->MakeVisible( ETrue );
+        GfxTransEffect::SetDemarcation( iContactListBox, iContactListBox->Rect() );
+        GfxTransEffect::End( iContactListBox );
+        }
+    else
+        {
+        iContactListBox->MakeVisible( ETrue );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::HideContactListBoxWithEffect
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::HideContactListBoxWithEffect()
+    {
+    CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv->AppUi() );
+           
+    // Show effect only if listbox is about to disappear from the screen.
+    if ( iContactListBox->IsVisible() &&
+         appUi && appUi->IsForeground() && 
+         GfxTransEffect::IsRegistered( iContactListBox ) )
+        {
+        GfxTransEffect::Begin( iContactListBox, KGfxContactListBoxCloseEffect );
+        iContactListBox->MakeVisible( EFalse );
+        GfxTransEffect::SetDemarcation( iContactListBox, iContactListBox->Rect() );
+        GfxTransEffect::End( iContactListBox );
+        }
+    else
+        {
+        iContactListBox->MakeVisible( EFalse );
+        }
+    }
+
+/*
+ * ==============================================================================
+ * 
+ * Local functions
+ * 
+ * ==============================================================================
+ */
+
+
+
+// -----------------------------------------------------------------------------
+// CompareTPsMatchLocation
+// Compares two TPsMatchLocation objects based on where the match 
+// is located in the search string. This used in ordering matches
+// based on their location.
+// -----------------------------------------------------------------------------
+//
+TInt CompareTPsMatchLocation( const TPsMatchLocation& a1, const TPsMatchLocation& a2)
+    {
+    return a1.index - a2.index;
+    }
+
+
+// -----------------------------------------------------------------------------
+// AppendStringWithMatchDataL
+// Appends a string with match data into a TDes buffer. Match data is a string 
+// where matching and non-matching parts are separated by matching hightlight separator
+// characters.
+// -----------------------------------------------------------------------------
+//
+void AppendStringWithMatchDataL(
+        TDes& aBuffer,
+        const TDesC& aText,
+        CPSRequestHandler* aPSHandler,
+        const CPsQuery* aPSQuery )
+    {
+    if ( HighlightingSupportedForText( aText ) )
+        {
+        CDesCArrayFlat* matchingParts = new (ELeave) CDesCArrayFlat(KEasyDialingMaximumMatchingParts);
+        CleanupStack::PushL( matchingParts );
+     
+        RArray<TPsMatchLocation> matchIndices;
+        CleanupClosePushL( matchIndices );
+        
+        aPSHandler->LookupL( *aPSQuery , aText , *matchingParts, matchIndices );
+        
+        // Sort matchIndices array. Later handling assumes it to be sorted according to index field.
+        TLinearOrder<TPsMatchLocation> order( CompareTPsMatchLocation );
+        matchIndices.Sort( order );
+       
+        TInt numberOfIndices = matchIndices.Count();
+        TInt textOffset = 0;
+        
+        for ( TInt i = 0; i < numberOfIndices ; i++ )
+            {
+            TInt matchingPartStart = matchIndices[i].index;
+            TInt matchingPartLength = matchIndices[i].length;
+            
+            // Append the non-matching part (if exists) 
+            if ( matchingPartStart > textOffset )
+                {
+                TPtrC notMatchingPart = aText.Mid( textOffset, matchingPartStart - textOffset );
+                aBuffer.Append( notMatchingPart );
+                }
+            
+            // Append matching separator charactes.
+            aBuffer.Append( KHighlightSeparatorChar );
+            
+            TPtrC matchingPart = aText.Mid( matchingPartStart, matchingPartLength );
+            aBuffer.Append( matchingPart );
+            
+            // Append matching separator charactes.
+            aBuffer.Append( KHighlightSeparatorChar );
+            
+            textOffset = matchingPartStart + matchingPartLength;
+            }
+
+        CleanupStack::PopAndDestroy( &matchIndices );
+        CleanupStack::PopAndDestroy( matchingParts );
+
+        // Now there still may be one not matching part to be appended.
+        if ( textOffset < aText.Length() )
+            {
+            TPtrC notMatchingPart = aText.Mid( textOffset, aText.Length() - textOffset );
+            aBuffer.Append( notMatchingPart );
+            }
+        }
+    else // HighlightingSupportedForText( aText )
+        {
+        aBuffer.Append( aText );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// HighlightingSupportedForText
+// Checks if highlighting of matching text part is supported for the combination
+// of scripts used in the given text
+// -----------------------------------------------------------------------------
+//
+TBool HighlightingSupportedForText( const TDesC& aText )
+    {
+    // Highlighting for text is supported unless it contains one ore more
+    // characters written with unsupported script.
+    TBool supported = ETrue;
+    for ( TInt i = 0 ; i < aText.Length() && supported ; ++i )
+        {
+        supported = HighlightingSupportedForScript( aText[i] );
+        }
+    
+    // ... or it contains both LTR and RTL blocks
+    if ( supported )
+        {
+        supported = !IsStrictlyBidirectional( aText );
+        }
+    
+    return supported;
+    }
+
+// -----------------------------------------------------------------------------
+// HighlightingSupportedForScript
+// Checks if highlighting of matching text part is supported for the script
+// of given character
+// -----------------------------------------------------------------------------
+//
+TBool HighlightingSupportedForScript( TText aChar )
+    {
+    // For now, we don't support highlighting for any Arabic or South East Asian 
+    // script. This is because many of these scripts use rendering rules
+    // which cause problems for our simple highlighting logic designed for
+    // Latin script.
+
+    TBool belongsToUnsupportedRange = 
+        ( aChar >= KArabicAndSouthEastAsianRangeStart && aChar <= KArabicAndSouthEastAsianRangeEnd ) ||
+        ( aChar >= KArabicPresentationFormsARangenStart && aChar <= KArabicPresentationFormsARangeEnd ) ||
+        ( aChar >= KArabicPresentationFormsBRangenStart && aChar <= KArabicPresentationFormsBRangeEnd );
+    return !belongsToUnsupportedRange;
+    }
+
+// -----------------------------------------------------------------------------
+// IsStrictlyBidirectional
+// 
+// Returns true if argument descriptor contains both left-to-right and
+// right-to-left blocks
+// -----------------------------------------------------------------------------
+//
+TBool IsStrictlyBidirectional( const TDesC& aText )
+    {
+    TBool bothDirectionsFound = EFalse;
+    
+    // TRunInfoArray contains information of the directionalities of the different sections of the aText    
+    TBidirectionalState::TRunInfo array[ KMaxRunInfoArrayCount ];
+    
+    // Initialize the TBidiLogicalToVisual converter for making the conversion from logical to visual order
+    TBidiLogicalToVisual converter( aText, array, KMaxRunInfoArrayCount );
+    
+    // Do the reordering. Amount of different directionality sections is returned.
+    TInt blockCount = converter.Reorder();
+    if ( blockCount > KMaxRunInfoArrayCount )
+        {
+        // If there are  more directionality blocks than we are prepared to handle, then we don't
+        // know the directionality of them all. Report this as bidirectional to be on the safe side.
+        // This should be an extremely rare special case.
+        bothDirectionsFound = ETrue;
+        }
+    else if ( blockCount > 1 )
+        {
+        // If there are more than one directionality blocks, go through all of them and
+        // check if the resolved direction changes in any of the blocks.
+        TUint8 firstDirection = array[0].iDirection;
+        for ( TInt i = 1 ; i < blockCount && !bothDirectionsFound ; i++ )
+            {
+            if ( array[i].iDirection != firstDirection )
+                {
+                bothDirectionsFound = ETrue;
+                }
+            }
+        }
+
+    return bothDirectionsFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// AllocWithoutHighlightSeparatorsLC
+// 
+// Allocates a copy of the parameter descriptor with highlight separators 
+// removed.
+// -----------------------------------------------------------------------------
+//
+static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc )
+    {
+    HBufC* resultDesc = aDesc.AllocLC();
+    TPtr ptr = resultDesc->Des();
+    AknTextUtils::StripCharacters( ptr, KHighlightSeparatorCharAsLiteral );
+    return resultDesc;
+    }
+
+
+// -----------------------------------------------------------------------------
+// IsItuTCharacter
+// 
+// Test whether parameter character is a number pad character "0123456789#*+"
+// -----------------------------------------------------------------------------
+//
+static TBool IsItuTCharacter( TChar aChar )
+    {
+    return aChar.IsDigit() || 
+         aChar.GetCategory() == TChar::EArabicNumber ||
+         aChar == TChar('#') ||
+         aChar == TChar('*') ||
+         aChar == TChar('+');
+    }
+
+// -----------------------------------------------------------------------------
+// Find contact link pointing to the same contact as given link
+// -----------------------------------------------------------------------------
+//
+static TInt Find( const MVPbkContactLink* aLink, const RPointerArray<MVPbkContactLink>& aArray )
+    {
+    TInt idx = KErrNotFound;
+    for ( TInt i = 0 ; i < aArray.Count() ; ++i )
+        {
+        if ( aArray[i]->IsSame( *aLink ) )
+            {
+            idx = i;
+            i = aArray.Count();
+            }
+        }
+    return idx;
+    }
+
+// -----------------------------------------------------------------------------
+// CleanupStack helpers for item owning RPointerArrays (etc)
+// -----------------------------------------------------------------------------
+//
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef )
+        { CleanupStack::PushL( TCleanupItem(&ResetAndDestroy,&aRef) ); }
+private:
+    inline static void ResetAndDestroy( TAny *aPtr )
+        { static_cast<T*>(aPtr)->ResetAndDestroy(); }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    { CleanupResetAndDestroy<T>::PushL(aRef); }
+
+//  End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/src/easydialingutils.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Helper class for easydialing.
+*
+*/
+
+#include <e32std.h>
+#include <AknUtils.h>
+
+#include "easydialingutils.h"
+
+const TText KNameSeparatorChar = ' ';
+const TText KListFieldSeparatorChar = '\t';
+
+// -----------------------------------------------------------------------------
+// CreateContactStringLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* EasyDialingUtils::CreateContactStringLC(
+        const TDesC& aFirstName,
+        const TDesC& aLastName,
+        const TDesC& aCompanyName,
+        CEasyDialingContactDataManager::TNameOrder aNameOrder )
+    {
+    // first strip control chars from the names
+    HBufC* firstName = aFirstName.AllocLC();
+    TPtr fPtr = firstName->Des();
+    AknTextUtils::StripCharacters( fPtr, KAknStripListControlChars );
+
+    HBufC* lastName = aLastName.AllocLC();
+    TPtr lPtr = lastName->Des();
+    AknTextUtils::StripCharacters( lPtr, KAknStripListControlChars );
+
+    HBufC* companyName = aCompanyName.AllocLC();
+    TPtr cPtr = companyName->Des();
+    AknTextUtils::StripCharacters( cPtr, KAknStripListControlChars );
+
+    // Calculate string lenght. If first name and last name are missing, company name is duplicated.
+    // Add company name lenght twice to make sure there is enough space.
+    TInt stringLength = firstName->Length() + lastName->Length() + 2 * companyName->Length() + 2;
+    HBufC* string = HBufC::NewLC( stringLength );
+    TPtr ptr = string->Des();
+    
+    // If there is no first name, the last name will be used.
+    if ( firstName->Length() == 0 )
+        {
+        ptr.Copy( *lastName );
+        }
+    
+    // If there is no last name, the first name will be used.
+    else if ( lastName->Length() == 0 )
+        {
+        ptr.Copy( *firstName );
+        }
+    
+    // If there are both first and last name, the name string is composed of them both.
+    else 
+        {
+        if( aNameOrder == CEasyDialingContactDataManager::EFirstnameLastname )
+            {
+            ptr.Copy( *firstName );
+            ptr.Append( KNameSeparatorChar );
+            ptr.Append( *lastName );
+            }
+        else
+            {
+            ptr.Copy( *lastName );
+            ptr.Append( KNameSeparatorChar );
+            ptr.Append( *firstName );
+            }        
+        } 
+    
+    // If firstname and last name are missing, duplicate company name into name field.
+    if ( ptr.Length() == 0 )
+        {
+        ptr.Append( *companyName );
+        }
+    
+    // Append company name using tab as a separator.
+    ptr.Append( KListFieldSeparatorChar );
+    ptr.Append( *companyName );
+    
+    CleanupStack::Pop( string );
+    CleanupStack::PopAndDestroy( 3, firstName );
+    CleanupStack::PushL( string );
+    return string;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/traces/OstTraceDefinitions.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: OstTraceDefinitions.h
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/traces/easydialingpluginTraces.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: easydialingpluginTraces.h
+*
+*/
+// Created by TraceCompiler1.1.0
+// DO NOT EDIT, CHANGES WILL BE LOST
+// CONTENT WILL BE GENERATED AUTOMATICALLY HERE
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/data/edta.rls	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2009-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:  
+*
+*/
+
+
+//  LOCALISATION STRINGS
+
+
+//d:Caption string for app.
+rls_string STRING_r_hewb_caption_string "Easy dialing test application"
+
+//d:Short caption string for app.
+rls_string STRING_r_hewb_short_caption_string "HW"
+
+//d:Subcaption for options menu
+rls_string STRING_r_hewb_command_plugin_functions_menu "ED plugin functions"
+
+//d:Subcaption for options menu
+rls_string STRING_r_hewb_command_test_functions_menu "Testing functions"
+
+//d:First item in "Options" menu pane, "hello" event.
+rls_string STRING_r_hewb_command_set_plugin_input "Set ED plugin input"
+
+//d:Menu item for show matching contacts.
+rls_string STRING_r_hewb_command_search_contacts "Search contacts"
+
+//d:Menu item for launching the first contact of the previous search.
+rls_string STRING_r_hewb_command_launch_first_contact "Launch first"
+
+//d:Menu item for selecting and launching a contact from the previous search.
+rls_string STRING_r_hewb_command_select_and_launch_contact "Select contact and open CL"
+
+//d:Menu item for checking the PCSserver.
+rls_string STRING_r_hewb_command_check_pcsserver "Check PCS Server"
+
+//d:Menu item for showing phonebooks name order
+rls_string STRING_r_hewb_command_show_name_ordering "Phonebook name order"
+
+//d:Menu item for creating test contact database
+rls_string STRING_r_hewb_command_create_contact_base "Create test contacts"
+
+//d:Menu item for two consequtive searches test.
+rls_string STRING_r_hewb_command_two_consequtive_searches "Two consequtive searches"
+
+//d:Menu item for coverage tests.
+rls_string STRING_r_hewb_command_coverage_test "Coverage test"
+
+//d:Fourth item in "Options" menu pane, "exit" event.
+rls_string STRING_r_hewb_exit "Exit"
+
+//d:When user requests EEdtaSetPluginInput event, text below is shown.
+rls_string STRING_r_hewb_command_set_plugin_input_text "Set easy dial input"
+
+// d: Menu item for thumbnail setting
+rls_string STRING_r_hewb_command_thumbnail_settings_menu "Thumbnail cenrep setting"
+
+// d: Menu item for thumbnail setting item
+rls_string STRING_r_hewb_command_show_thumbnails "Show thumbnails"
+
+// d: Menu item for thumbnail setting item
+rls_string STRING_r_hewb_command_hide_thumbnails "Hide thumbnails"
+
+//d:When user requests EEdtaCommand2 event, text below is shown.
+rls_string STRING_r_hewb_file_text ""
+
+rls_string STRING_r_edta_loc_resource_file_1 "\\resource\\apps\\edta"
+
+// d: Default document name. Not to be localised.
+rls_string STRING_r_default_document_name "EDTA"
+
+// d: Icon file path. Not to be localised.
+rls_string STRING_r_icon_file_path "\\resource\\apps\\edta_aif.mif"
+
+// d: Application file. Not to be localised.
+rls_string STRING_r_app_file "edta"
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/data/edta.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+//  RESOURCE IDENTIFIER
+NAME HEWB    // 4 letter ID
+
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <appinfo.rh>
+#include <AiwCommon.rh>
+
+#include "edta.hrh"
+#include "edta.rls"
+//#include "easydialingconstants.hrh"
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+//    Define the resource file signature
+//    This resource should be empty.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+//    Default Document Name
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+    {
+    buf=STRING_r_default_document_name;
+    }
+
+// -----------------------------------------------------------------------------
+//
+//    Define default menu and CBA key.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+    {
+    menubar = r_edta_menubar;
+    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_edta_menubar
+//   Menubar for edta example
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_edta_menubar
+    {
+    titles =
+        {
+        MENU_TITLE { menu_pane = r_edta_menu; }
+        };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_edta_menu
+//   Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_edta_menu
+    {
+    items =
+        {
+        MENU_ITEM
+                {
+                txt = STRING_r_hewb_command_plugin_functions_menu;
+                cascade = r_edta_plugin_functions_menu;
+                },
+        MENU_ITEM
+                {
+                command = EEdtaCommandShowContacts;
+                txt = STRING_r_hewb_command_search_contacts;
+                },
+        MENU_ITEM
+                {
+                command = EEdtaSelectAndLaunchContact;
+                txt = STRING_r_hewb_command_select_and_launch_contact;
+                },
+        MENU_ITEM
+                {
+                command = EEdtaCommandCheckPCSServer;
+                txt = STRING_r_hewb_command_check_pcsserver;
+                },
+        MENU_ITEM
+                {
+                command = EEdtaCommandShowNameOrdering;
+                txt = STRING_r_hewb_command_show_name_ordering;
+                },
+        MENU_ITEM
+                {
+                txt = STRING_r_hewb_command_test_functions_menu;
+                cascade = r_edta_test_functions_menu;
+                },
+        MENU_ITEM
+                {
+                command = EAknSoftkeyExit;
+                txt = STRING_r_hewb_exit;
+                }
+        };
+    }
+
+// -----------------------------------------------------------------------------
+//
+//   r_edta_plugin_functions_menu
+//   Submenu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_edta_plugin_functions_menu
+    {
+    items =
+        {
+        MENU_ITEM
+                {
+                command = EEdtaSetPluginInput;
+                txt = STRING_r_hewb_command_set_plugin_input;
+                },
+        MENU_ITEM
+                {
+                command = EEdtaCommandTwoConsequtiveSearchesTest;
+                txt = STRING_r_hewb_command_two_consequtive_searches;
+                },
+        MENU_ITEM
+                {
+                txt = STRING_r_hewb_command_thumbnail_settings_menu;
+                cascade = r_edta_plugin_thumbnail_settings_menu;
+                }              
+        };
+    }
+
+// -----------------------------------------------------------------------------
+//
+//   r_edta_plugin_thumbnail_settings_menu
+//   Submenu for "Thumbnail setting"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_edta_plugin_thumbnail_settings_menu
+    {
+    items =
+       {
+       MENU_ITEM
+               {
+               command = EEdtaCommandShowThumbnails;
+               txt = STRING_r_hewb_command_show_thumbnails;
+               },
+       MENU_ITEM
+               {
+               command = EEdtaCommandHideThumbnails;
+               txt = STRING_r_hewb_command_hide_thumbnails;
+               }
+       };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_edta_test_functions_menu
+//   Submenu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_edta_test_functions_menu
+    {
+    items =
+        {
+        MENU_ITEM
+                {
+                command = EEdtaCommandCreateTestContactBase;
+                txt = STRING_r_hewb_command_create_contact_base;
+                },               
+        MENU_ITEM
+                {
+                command = EEdtaCommandMiscCoverageTest;
+                txt = STRING_r_hewb_command_coverage_test;
+                }
+        };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// Resources for messages.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF32 r_hewb_command_set_plugin_input_text { buf=STRING_r_hewb_command_set_plugin_input_text; }
+RESOURCE TBUF32 r_hewb_file_text { buf=STRING_r_hewb_file_text; }
+RESOURCE TBUF32 r_hewb_caption_string { buf=STRING_r_hewb_caption_string; }
+
+// ----------------------------------------------------------------------------
+//
+// r_edta_localisable_app_info
+//
+// ----------------------------------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_edta_localisable_app_info
+    {
+    short_caption = STRING_r_hewb_caption_string;
+    caption_and_icon =
+    CAPTION_AND_ICON_INFO
+        {
+        caption = STRING_r_hewb_caption_string;
+
+        number_of_icons = 1;
+	   	icon_file = STRING_r_icon_file_path;
+	    };
+    }
+
+// ----------------------------------------------------------------------------
+//
+// r_dialog_text_edit_query
+//
+// ----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_dialog_text_edit_query
+    {
+    flags = EAknGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            control = AVKON_DATA_QUERY
+                {
+                layout = EDataLayout;
+                label = "Enter dial search string ?";
+                control = EDWIN
+                    {
+                    allowed_case_modes = EAknEditorAllCaseModes; 
+                    default_case = EAknEditorLowerCase;
+                    allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode;
+                    default_input_mode = EAknEditorTextInputMode;
+                    avkon_flags = EAknEditorFlagNoT9;
+                    width = 32;
+                    maxlength = 32;
+                    lines = 1;
+                    };
+                };
+            }
+        };
+    }
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/data/edta_reg.rss	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "edta.rls"
+#include <appinfo.rh>
+#include <edta.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x2000FDDC
+//UID3 0xA000017F
+
+RESOURCE APP_REGISTRATION_INFO
+  {
+  app_file=STRING_r_app_file;
+  localisable_resource_file =  STRING_r_edta_loc_resource_file_1;
+  localisable_resource_id = R_EDTA_LOCALISABLE_APP_INFO;
+
+  embeddability=KAppNotEmbeddable;
+  newfile=KAppDoesNotSupportNewFile;
+  }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/gfx/qgn_menu_edta.svg	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 88 87.999">
+<g>
+<g>
+<g>
+<g>
+<rect fill="none" width="88" height="87.999"/>
+</g>
+</g>
+<g>
+<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="12.3042" y1="18.3799" x2="63.4113" y2="79.287">
+<stop offset="0" style="stop-color:#B3DDFF"/>
+<stop offset="0.8146" style="stop-color:#084296"/>
+<stop offset="1" style="stop-color:#084296"/>
+</linearGradient>
+<path fill="url(#XMLID_7_)" d="M32.135,7.415L14.363,17.432v23.167c0,0,8.926,15.351,10.468,18.001       c-2.386,1.704-15.44,11.03-15.44,11.03l21.613,12.652c0,0,12.907-9.85,14.71-11.226c1.979,1.109,16.231,9.101,16.231,9.101       l16.664-15.132c0,0-14.066-6.929-16.888-8.318c1.467-3.01,10.531-21.604,10.531-21.604l-22.298-9.59       c0,0-1.486,3.173-2.093,4.467c-2.046-0.88-6.573-2.826-6.573-2.826s-3.713,2.463-5.696,3.778       c-0.327-0.744-0.542-1.233-0.657-1.495c0.007-0.824,0.213-23.72,0.213-23.72L32.135,7.415z"/>
+<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="40.8276" y1="52.1914" x2="16.1997" y2="21.1353">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_8_)" points="59.051,57.621 69.536,36.111 50.944,28.115 48.852,32.581 41.493,29.418 34.719,33.911        32.932,29.849 33.117,9.157 16.363,18.601 16.363,40.06 27.476,59.169 13.064,69.463 30.856,79.879 45.546,68.669        61.667,77.708 75.089,65.521 "/>
+<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="60.585" y1="31.876" x2="53.8582" y2="45.1125">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_9_)" points="41.26,48.783 50.944,28.115 69.536,36.111 59.051,57.621 "/>
+<polygon fill="#0046B7" points="16.363,40.06 27.476,59.169 41.26,48.783 32.932,29.849 "/>
+<polygon fill="#3366CC" points="16.363,40.06 16.363,18.601 33.117,9.157 32.932,29.849 "/>
+<polygon fill="#CFECFF" points="26.696,39.23 41.493,29.418 59.523,37.168 45.546,47.954 "/>
+<path fill="#5AA7E0" d="M41.954,55.286"/>
+<polygon fill="#3366CC" points="26.696,39.23 27.476,59.169 45.546,68.669 45.546,47.954 "/>
+<polygon fill="#5AA7E0" points="13.064,69.463 27.476,59.169 45.546,68.669 30.856,79.879 "/>
+<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="29.2085" y1="63.6836" x2="48.7102" y2="56.1976">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="0.0056" style="stop-color:#5AA7E0"/>
+<stop offset="0.85" style="stop-color:#3366CC"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_10_)" points="43.423,46.971 27.476,59.169 45.546,68.669 45.546,47.954 "/>
+<polygon fill="#0046B7" points="45.546,47.954 45.546,68.669 59.051,57.621 59.523,37.168 "/>
+<linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="45.3936" y1="59.5186" x2="59.0508" y2="59.5186">
+<stop offset="0" style="stop-color:#0046B7"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_11_)" points="45.394,50.368 45.546,68.669 59.051,57.621 "/>
+<linearGradient id="XMLID_12_" gradientUnits="userSpaceOnUse" x1="60.8945" y1="68.6807" x2="57.2953" y2="58.792">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="0.4101" style="stop-color:#5AA7E0"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_12_)" points="61.667,77.708 45.546,68.669 59.051,57.621 75.089,65.521 "/>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/group/Icons_scalable_dc.mk	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,53 @@
+#
+# Copyright (c) 2002-2006 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:  This is file for creating .mif file (scalable icon)
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\edta_aif.mif
+
+ICONDIR=..\gfx
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+RESOURCE :	
+	mifconv $(ICONTARGETFILENAME) \
+		/c32 $(ICONDIR)\qgn_menu_edta.svg
+		
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+gnumakefile icons_scalable_dc.mk
+
+edta.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/group/edta.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET            edta.exe
+TARGETTYPE        exe
+UID		  0x100039CE 0x2000FDDC
+
+SECUREID	  0x2000FDDC
+EPOCSTACKSIZE	  0x5000
+
+SOURCEPATH        ..\src
+SOURCE            edta.cpp
+SOURCE            edta_application.cpp
+SOURCE            edta_appview.cpp
+SOURCE            edta_appui.cpp
+SOURCE            edta_document.cpp
+SOURCE            edta_querydialog.cpp
+SOURCE            edta_screentextbuffer.cpp
+SOURCE            edta_createtestcontactbase.cpp
+SOURCE            edta_dummylistener.cpp
+
+
+SOURCEPATH        ../data
+
+START RESOURCE    edta.rss
+HEADER
+TARGETPATH resource/apps
+LANG SC 01 09 31 32
+END //RESOURCE
+
+START RESOURCE    edta_reg.rss
+TARGETPATH 	  /private/10003a3f/apps
+END //RESOURCE
+
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE 	  ../../../../../inc
+
+USERINCLUDE       ../inc
+
+LIBRARY           euser.lib
+LIBRARY           apparc.lib
+LIBRARY           cone.lib
+LIBRARY           gdi.lib
+LIBRARY           eikcore.lib
+LIBRARY           avkon.lib
+LIBRARY           bafl.lib
+LIBRARY           commonengine.lib
+LIBRARY		      efsrv.lib
+LIBRARY           estor.lib
+LIBRARY           eikcoctl.lib
+LIBRARY           eikdlg.lib
+LIBRARY           PcsUtils.lib
+LIBRARY           PsServerClientAPI.lib
+LIBRARY           VPbkEng.lib ccaclient.lib
+LIBRARY           ecom.lib
+LIBRARY           cntmodel.lib
+LIBRARY           pbkeng.lib
+LIBRARY	          servicehandler.lib
+LIBRARY           centralrepository.lib   
+
+DEBUGLIBRARY      flogger.lib
+
+
+VENDORID	  	  VID_DEFAULT
+
+CAPABILITY LocalServices Location NetworkServices ReadDeviceData ReadUserData UserEnvironment WriteDeviceData WriteUserData
+
+// End of File
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_HRH__
+#define __EDTA_HRH__
+
+// Edta enumerate command codes
+enum TEdtaIds
+    {
+    EEdtaSetPluginInput = 0x6001, // start value must not be 0
+    EEdtaCommandShowContacts,
+    EEdtaLaunchFirstContact,
+    EEdtaSelectAndLaunchContact,
+    EEdtaCommandCheckPCSServer,
+    EEdtaCommandShowNameOrdering,
+    EEdtaCommandCreateTestContactBase,
+    EEdtaCommandTwoConsequtiveSearchesTest,
+    EEdtaCommandMiscCoverageTest,
+    EEdtaCommandShowThumbnails,
+    EEdtaCommandHideThumbnails,
+    EEdtaCommandLast
+    };
+
+#endif // __EDTA_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta.pan	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* 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:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_PAN__
+#define __EDTA_PAN__
+
+#include "edta_debugprint.h"
+
+/** Edta application panic codes */
+enum TEdtaPanics
+    {
+    EEdtaUi = 1,
+    EEdtaSkinChangePanic = 2,
+    EEdtaCalculatePanic = 3,
+    EEdtaFieldNotInitialized = 4
+    // add further panics here
+    };
+
+_LIT(KEdtaApplicationName,"Edta");
+
+inline void Panic(TEdtaPanics aReason)
+    {
+    DebugPrintF(_L("Panic reason: %d"), (TInt) aReason);
+    User::Panic(KEdtaApplicationName, aReason);
+    }
+
+inline void Panic(TEdtaPanics aReason, TDesC aText)
+    {
+    DebugPrintF(_L("Panic reason: %d, '%S'"), (TInt) aReason, &aText );
+    User::Panic(KEdtaApplicationName, aReason);
+    }
+
+#endif // __EDTA_PAN__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_application.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_APPLICATION_H__
+#define __EDTA_APPLICATION_H__
+
+// INCLUDES
+#include <aknapp.h>
+
+// CLASS DECLARATION
+
+/**
+* CEdtaApplication application class.
+* Provides factory to create concrete document object.
+* An instance of CEdtaApplication is the application part of the
+* AVKON application framework for the Edta example application.
+*/
+class CEdtaApplication : public CAknApplication
+    {
+    public: // Functions from base classes
+
+        /**
+        * From CApaApplication, AppDllUid.
+        * @return Application's UID (KUidEdtaApp).
+        */
+        TUid AppDllUid() const;
+
+    protected: // Functions from base classes
+
+        /**
+        * From CApaApplication, CreateDocumentL.
+        * Creates document object. The returned
+        * pointer in not owned by the CEdtaApplication object.
+        * @return A pointer to the created document object.
+        */
+        CApaDocument* CreateDocumentL();
+    };
+
+#endif // __EDTA_APPLICATION_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_appui.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_APPUI_H__
+#define __EDTA_APPUI_H__
+
+// INCLUDES
+#include <aknappui.h>
+#include "edta_screentextbuffer.h"
+
+// FORWARD DECLARATIONS
+class CEdtaAppView;
+class CAiwServiceHandler;
+class CRepository;
+
+// CLASS DECLARATION
+/**
+* CEdtaAppUi application UI class.
+* Interacts with the user through the UI and request message processing
+* from the handler class
+*/
+class CEdtaAppUi : public CAknAppUi
+    {
+    public: // Constructors and destructor
+
+        void ConstructL();
+        CEdtaAppUi();
+        virtual ~CEdtaAppUi();
+
+        TBool CheckPluginLoadedAndShowNote();
+
+    private:  // Functions from base classes
+
+        void HandleCommandL( TInt aCommand );
+		void HandleStatusPaneSizeChange();
+		void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+
+    protected:
+        
+    private: // Data
+
+        CEdtaAppView* iAppView;
+        
+        // Contains query text
+        TBuf<KEdtaMaxLineWidth> iQueryText;
+
+        // OWN: aiw service handler
+        CAiwServiceHandler* iServiceHandler;
+        
+        // own
+        CRepository* iRepository;
+    };
+
+#endif // __EDTA_APPUI_H__
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_appview.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_APPVIEW_H__
+#define __EDTA_APPVIEW_H__
+
+// INCLUDES
+#include "edta_screentextbuffer.h"
+#include <coecntrl.h>
+#include <MPsResultsObserver.h>
+#include <mccaconnection.h>
+#include <dialingextensioninterface.h>
+
+
+// FORWARD DECLARATIONS
+class CPsClientData;
+class CPbkContactEngine;
+class CPsQuery;
+class CVPbkContactManager;
+class CVPbkContactStoreUriArray;
+class MVPbkContactLink;
+class CPSRequestHandler;
+class TCCAFactory;
+class MCCAParameter;
+class CDialingExtensionInterface;
+class CDummyListener;
+
+
+
+// CLASS DECLARATION
+class CEdtaAppView : public CCoeControl, public MPsResultsObserver, public MCCAObserver, public MDialingExtensionObserver
+    {
+    public: // New methods
+
+        static CEdtaAppView* NewL( const TRect& aRect );
+        static CEdtaAppView* NewLC( const TRect& aRect );
+        virtual ~CEdtaAppView();
+         
+        TInt CountComponentControls() const;
+        CCoeControl* ComponentControl(TInt aIndex) const;
+        
+        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+        
+        CEdtaScreenTextBuffer* GetScreenBuffer();
+        
+        CDialingExtensionInterface* GetEasyDialer();
+        
+        void ShowMatchingContactsL(const TDesC& aSearchString);
+
+        TBool IsPCSServerLoaded();
+        void CheckPCSServerL();
+        
+        void ShowNameOrderL();
+        
+        void LoadPluginL();
+        
+        void LaunchNthContactL(TInt aIx);
+        
+        void SelectAndLaunchContactL();
+        
+        void DoMiscellaneousTestsL();
+        
+    public:  // Functions from base classes
+
+        virtual void SizeChanged();
+
+    private: // Constructors
+
+        void ConstructL(const TRect& aRect);
+        
+        CEdtaAppView();
+        
+        void Draw( const TRect& aRect ) const;
+        
+        void InitContactDataStoreUrisL();
+        void InitPredictiveContactSearchL();
+         
+    private:    
+
+        //MPsResultsObserver functions
+        virtual void HandlePsResultsUpdate(RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs);
+        virtual void HandlePsError(TInt aErrorCode);
+        virtual void CachingStatus(TCachingStatus& aStatus, TInt& aError);
+       
+        /**
+         * Leaving function for Predictive search callback. Call TRAPPED in HandlePsResultsUpdate.
+         */
+        void HandlePredictiveSearchResultL(RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs);
+       
+        //MCCAObserver functions
+        void CCASimpleNotifyL( TNotifyType aType, TInt aReason );
+    
+        void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent );
+
+    private:
+        
+        CEdtaScreenTextBuffer* iScreenBuffer;
+        
+        CPSRequestHandler* iPredictiveContactSearchHandler;
+        
+        CVPbkContactManager* iContactManager;
+        
+        CVPbkContactStoreUriArray* iContactStoreUriArray;
+        
+        RPointerArray<TDesC> iContactDataStores;
+        
+        RPointerArray<TDesC> iContactNames;
+        
+        RPointerArray<MVPbkContactLink> iMatchingContactLinks;
+        
+        CPsQuery* iPredictiveSearchQuery;
+        
+        MCCAConnection* iContactLauncher;
+        
+        /*
+         * Pointer to easy dialing plugin. This may be null, if no plugin present.
+         * Null-check is a must before use.
+         */
+        CDialingExtensionInterface* iEasyDialer;
+        
+        CDummyListener* iDummyListener;
+
+    };
+
+#endif // __EDTA_APPVIEW_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_debugprint.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+
+#ifndef __EDTADEBUGPRINT_H__
+#define __EDTADEBUGPRINT_H__
+
+// If you want file logging, uncomment the next define.
+
+#ifdef _DEBUG
+// #define USE_FILE_LOGGING
+#endif // _DEBUG
+
+#ifdef USE_FILE_LOGGING
+#include <flogger.h>
+_LIT( KLogDir,  "ed" );
+_LIT( KLogFile, "edta.log" );
+#endif
+
+
+// From this point on, internal implementation
+
+NONSHARABLE_CLASS(TOverflowTruncate) : public TDes16Overflow
+	{
+	public:
+	    void Overflow(TDes16& /*aDes*/) {}
+	};
+
+inline void DoDebugPrintF(TRefByValue<const TDesC> aFmt, VA_LIST& aList)
+    {
+    TBuf<200> buf;
+	TOverflowTruncate overFlow;
+    buf.AppendFormatList( aFmt, aList, &overFlow );
+    _LIT(KLogPrintFormat,"%S: %S");   // Log printing format 
+    const TDesC& thname = RThread().Name();                 // FullName
+    RDebug::Print( KLogPrintFormat, &thname, &buf );
+#ifdef USE_FILE_LOGGING
+    RFileLogger::Write(KLogDir, KLogFile, EFileLoggingModeAppend, buf);
+#endif
+    }
+
+inline void DebugPrintF(const TRefByValue<const TDesC> aFmt,...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    DoDebugPrintF(aFmt, list);
+    }
+
+
+#ifdef _DEBUG
+
+// These macros are to be used in debug prints
+#define DEBUGPRINT(x)           DebugPrintF(x)
+#define DEBUGPRINT_2(x,y)       DebugPrintF(x,y)
+#define DEBUGPRINT_3(x,y,z)     DebugPrintF(x,y,z)
+#define DEBUGPRINT_4(x,y,z,a)   DebugPrintF(x,y,z,a)
+
+#else // _DEBUG
+
+#define DEBUGPRINT(x)
+#define DEBUGPRINT_2(x,y)
+#define DEBUGPRINT_3(x,y,z)
+#define DEBUGPRINT_4(x,y,z,a)
+
+#endif // _DEBUG
+
+#endif // __EDTADEBUGPRINT_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_document.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_DOCUMENT_H__
+#define __EDTA_DOCUMENT_H__
+
+// INCLUDES
+#include <akndoc.h>
+
+// FORWARD DECLARATIONS
+class CEdtaAppUi;
+class CEikApplication;
+
+
+// CLASS DECLARATION
+
+/**
+* CEdtaDocument application class.
+* An instance of class CEdtaDocument is the Document part of the
+* AVKON application framework for the Edta example application.
+*/
+class CEdtaDocument : public CAknDocument
+    {
+    public: // Constructors and destructor
+
+        /**
+        * NewL.
+        * Two-phased constructor.
+        * Construct a CEdtaDocument for the AVKON application aApp
+        * using two phase construction, and return a pointer
+        * to the created object.
+        * @param aApp Application creating this document.
+        * @return A pointer to the created instance of CEdtaDocument.
+        */
+        static CEdtaDocument* NewL( CEikApplication& aApp );
+
+        /**
+        * NewLC.
+        * Two-phased constructor.
+        * Construct a CEdtaDocument for the AVKON application aApp
+        * using two phase construction, and return a pointer
+        * to the created object.
+        * @param aApp Application creating this document.
+        * @return A pointer to the created instance of CEdtaDocument.
+        */
+        static CEdtaDocument* NewLC( CEikApplication& aApp );
+
+        /**
+        * ~CEdtaDocument
+        * Virtual Destructor.
+        */
+        virtual ~CEdtaDocument();
+
+    public: // Functions from base classes
+
+        /**
+        * CreateAppUiL
+        * From CEikDocument, CreateAppUiL.
+        * Create a CEdtaAppUi object and return a pointer to it.
+        * The object returned is owned by the Uikon framework.
+        * @return Pointer to created instance of AppUi.
+        */
+        CEikAppUi* CreateAppUiL();
+
+    private: // Constructors
+
+        /**
+        * ConstructL
+        * 2nd phase constructor.
+        */
+        void ConstructL();
+
+        /**
+        * CEdtaDocument.
+        * C++ default constructor.
+        * @param aApp Application creating this document.
+        */
+        CEdtaDocument( CEikApplication& aApp );
+
+    };
+
+#endif // __EDTA_DOCUMENT_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_dummylistener.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef EDTA_DUMMYLISTENER_H_
+#define EDTA_DUMMYLISTENER_H_
+
+#include <coecntrl.h>
+#include <dialingextensioninterface.h>
+
+class CDummyListener : public CBase, public MDialingExtensionObserver
+    {
+public:
+    
+    CDummyListener();
+    ~CDummyListener();
+    
+    void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent );    
+    };
+
+#endif /* EDTA_DUMMYLISTENER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_querydialog.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef _EDTA_QUERYDIALOG_H
+#define _EDTA_QUERYDIALOG_H
+
+
+//  INCLUDES
+#include <aknquerydialog.h>
+
+// CLASS DECLARATION
+
+/**
+*  CEdtaQueryDialog class.
+*  This class is used to query the user for text information
+*/
+class CEdtaQueryDialog : public CAknTextQueryDialog
+    {
+    public:  // Constructors and destructor
+
+        CEdtaQueryDialog( TDes& aBuf, const HBufC *aDefInput );
+        virtual ~CEdtaQueryDialog() {};
+        
+
+    private:    // from CEikDialog
+
+        void  PreLayoutDynInitL();
+
+    private:    // Data
+
+        HBufC&  iDefInput;
+    };
+
+#endif // _EDTA_QUERYDIALOG_H
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/inc/edta_screentextbuffer.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#ifndef __EDTA_SCREENTEXTBUFFER_H__
+#define __EDTA_SCREENTEXTBUFFER_H__
+
+// INCLUDES
+#include <coecntrl.h>
+#include <eiklabel.h>
+#include <coecntrl.h>
+#include <gdi.h>
+#include <eiksbobs.h>
+
+// FORWARD DECLARATIONS
+class CEikScrollBarFrame;
+class CFont;
+class TBidiText;
+class CAknsBasicBackgroundControlContext;
+
+// CONSTANTS
+const TInt KEdtaMaxLineWidth = 200;
+
+
+// CLASS DECLARATION
+class CEdtaScreenTextBuffer : public CCoeControl, public MEikScrollBarObserver
+    {
+    
+public:
+    static CEdtaScreenTextBuffer* NewL( const TRect& aRect );
+    static CEdtaScreenTextBuffer* NewLC( const TRect& aRect );
+    
+public:
+    CEdtaScreenTextBuffer();
+    ~CEdtaScreenTextBuffer();
+
+    void ConstructL( const TRect& aRect );
+    void HandleResourceChange(TInt aType);
+    void WriteLineL( TRefByValue<const TDesC> aText,... ); // text wrapping, was: const TDesC& aText
+    void DeleteLastLine(TInt aCount = 1);
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aModifiers );
+    
+protected:
+    
+    virtual void FocusChanged(TDrawNow aDrawNow);
+    
+private:
+    
+    void SizeChanged();
+
+    void Draw( const TRect& aRect ) const;
+    void ActivateL();
+    void HandleScrollEventL ( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType);
+    TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+    
+private:
+    void CalculateL(const TRect& aRect);
+    void UpdateScrollIndicatorL();
+
+    
+    
+private: // Data
+
+    CArrayPtr<HBufC>* iText;
+    CArrayFixFlat<TInt>* iScreenStarts;
+    TInt iCurrentScreen;
+    TBool iDoNotShowLastLineAgain;
+    CGraphicsContext::TTextAlign iTextAlign;
+    CEikScrollBarFrame* iSBFrame;
+    const CFont* iFont; // not owned
+    
+    TInt iLineWidth;
+    TInt iBaseLineDelta;
+    TInt iTopBaseLineX;
+    TInt iTopBaseLineY;
+    TInt iLinesPerScreen;
+    
+    };
+
+
+#endif // __EDTA_SCREENTEXTBUFFER_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/rom/edta.iby	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* 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: 
+*
+*/
+#ifndef __EDTA_IBY__
+#define __EDTA_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\edta.exe PROGRAMS_DIR\edta.exe
+S60_APP_AIF_ICONS(edta)
+S60_UPGRADABLE_APP_REG_RSC(edta)
+data=\epoc32\data\z\private\2000FDDC\backup_registration.xml \private\2000FDDC\backup_registration.xml
+
+#endif // __EDTA_IBY__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/rom/edta_resources.iby	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* 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: 
+*
+*/
+#ifndef __EDTA_RESOURCES_IBY__
+#define __EDTA_RESOURCES_IBY__
+
+#include <bldvariant.hrh>
+
+S60_APP_RESOURCE(edta)
+
+#endif // __EDTA_RESOURCES_IBY__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/sis/backup_registration.xml	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration>
+  <system_backup/>
+  <restore requires_reboot = "no"/>
+</backup_registration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/sis/edta_armv5.pkg	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,52 @@
+;
+; 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: 
+;
+; Edta_armv5.pkg
+;
+;Language - standard language definitions
+&EN,FI,ZH,JA
+
+; standard SIS file header
+#{"Easy dialing test application", "Easy dialing test application", "Easy dialing test application", "Easy dialing test application"},(0x2000FDDC),1,0,0
+
+;Localised Vendor name
+%{"Nokia", "Nokia", "Nokia", "Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"S60ProductID", "S60ProductID", "S60ProductID", "S60ProductID"}
+
+;Supports Series 60 v 5.0
+[0x1028315F], 0, 0, 0, {"Series605thProductID","Series605thProductID","Series605thProductID","Series605thProductID"}
+
+;ErrRD Support:
+"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" - "C:\resource\ErrRd"
+
+;Files to install
+"\epoc32\release\armv5\urel\Edta.exe" -"!:\sys\bin\edta.exe"
+
+"\epoc32\data\z\resource\apps\edta.rsc" -"!:\resource\apps\edta.rsc"
+"\epoc32\data\z\resource\apps\edta.r09" -"!:\resource\apps\edta.r09"
+"\epoc32\data\z\resource\apps\edta.r31" -"!:\resource\apps\edta.r31"
+"\epoc32\data\z\resource\apps\edta.r32" -"!:\resource\apps\edta.r32"
+
+"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" -"!:\private\10003a3f\import\apps\edta_reg.rsc"
+"\epoc32\data\z\resource\apps\edta_aif.mif" -"!:\resource\apps\edta_aif.mif"
+
+;required for application to be covered by backup/restore facility
+"backup_registration.xml"						-"!:\private\2000FDDC\backup_registration.xml"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/sis/edta_armv5_udeb.pkg	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,52 @@
+;
+; 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: 
+;
+; Edta_armv5.pkg
+;
+;Language - standard language definitions
+&EN,FI,ZH,JA
+
+; standard SIS file header
+#{"Easy dialing test application", "Easy dialing test application", "Easy dialing test application", "Easy dialing test application"},(0x2000FDDC),1,0,0
+
+;Localised Vendor name
+%{"Nokia", "Nokia", "Nokia", "Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"S60ProductID", "S60ProductID", "S60ProductID", "S60ProductID"}
+
+;Supports Series 60 v 5.0
+[0x1028315F], 0, 0, 0, {"Series605thProductID","Series605thProductID","Series605thProductID","Series605thProductID"}
+
+;ErrRD Support:
+"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" - "C:\resource\ErrRd"
+
+;Files to install
+"\epoc32\release\armv5\udeb\Edta.exe" -"!:\sys\bin\edta.exe"
+
+"\epoc32\data\z\resource\apps\edta.rsc" -"!:\resource\apps\edta.rsc"
+"\epoc32\data\z\resource\apps\edta.r09" -"!:\resource\apps\edta.r09"
+"\epoc32\data\z\resource\apps\edta.r31" -"!:\resource\apps\edta.r31"
+"\epoc32\data\z\resource\apps\edta.r32" -"!:\resource\apps\edta.r32"
+
+"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" -"!:\private\10003a3f\import\apps\edta_reg.rsc"
+"\epoc32\data\z\resource\apps\edta_aif.mif" -"!:\resource\apps\edta_aif.mif"
+
+;required for application to be covered by backup/restore facility
+"backup_registration.xml"						-"!:\private\2000FDDC\backup_registration.xml"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "edta_application.h"
+
+/**
+ * factory function to create the Hello World Basic application class
+ */
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CEdtaApplication;
+	}
+
+/**
+ * A normal Symbian OS executable provides an E32Main() function which is
+ * called by the operating system to start the program.
+ */
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication( NewApplication );
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_application.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+#include "edta_document.h"
+#include "edta_application.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// UID for the application.
+// this should correspond to the uid defined in the mmp file
+const TUid KUidEdtaApp = { 0x2000FDDC };
+
+// -----------------------------------------------------------------------------
+// CEdtaApplication::CreateDocumentL()
+// Creates CApaDocument object
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CEdtaApplication::CreateDocumentL()
+    {
+    // Create an Edta document, and return a pointer to it
+    return (static_cast<CApaDocument*>
+                    ( CEdtaDocument::NewL( *this ) ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaApplication::AppDllUid()
+// Returns application UID
+// -----------------------------------------------------------------------------
+//
+TUid CEdtaApplication::AppDllUid() const
+    {
+    // Return the UID for the Edta application
+    return KUidEdtaApp;
+    }
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_appui.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <aknnotewrappers.h>
+#include <stringloader.h>
+#include <Edta.rsg>
+#include <f32file.h>
+#include <s32file.h>
+#include <aiwservicehandler.h>
+#include <centralrepository.h>
+#include <easydialingcrkeys.h>
+
+#include "edta.pan"
+#include "edta_appui.h"
+#include "edta_appview.h"
+#include "edta.hrh"
+#include "edta_querydialog.h"
+#include <AknQueryDialog.h>
+
+
+
+
+// CONSTANTS
+const TInt KSearchStringMaxLen = 64;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CEdtaAppUi::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppUi::ConstructL()
+    {
+    // Initialise app UI with standard value.
+    BaseConstructL(CAknAppUi::EAknEnableSkin);
+
+    // Create view object
+    iAppView = CEdtaAppView::NewL( ClientRect() );
+    
+    // TODO: remove?
+    iServiceHandler = CAiwServiceHandler::NewL();
+
+    iRepository = CRepository::NewL( KCRUidEasyDialSettings );
+    
+    AddToStackL(iAppView);
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaAppUi::CEdtaAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CEdtaAppUi::CEdtaAppUi()
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaAppUi::~CEdtaAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CEdtaAppUi::~CEdtaAppUi()
+    {
+    if ( iAppView )
+        {
+        RemoveFromStack(iAppView);
+        delete iAppView;
+        iAppView = NULL;
+        }
+    delete iServiceHandler;
+    
+    if ( iRepository )
+        {
+        // default setting
+        iRepository->Set(KEasyDialingContactThumbnails, 1);
+        }
+    delete iRepository;
+    }
+
+
+TInt CreateTestContactDatabaseL(); // Should be moved into correct place
+
+// -----------------------------------------------------------------------------
+// CEdtaAppUi::HandleCommandL()
+// Takes care of command handling.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppUi::HandleCommandL( TInt aCommand )
+    {
+    DebugPrintF(_L("CEdtaAppUi::HandleCommandL enter: 0x%X"), aCommand );
+
+    switch( aCommand )
+        {
+        case EEikCmdExit:
+        case EAknSoftkeyExit:
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EXIT"));
+            Exit();
+            break;
+
+        case EEdtaSetPluginInput:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaSetPluginInput"));
+
+            if( CheckPluginLoadedAndShowNote() )
+                {
+                CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iQueryText );
+                if( dlg->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY))
+                    {
+                    if (iAppView->GetEasyDialer())
+                        {
+                        iAppView->GetEasyDialer()->SetInputL( iQueryText );
+                        }
+                    }
+                }
+            }
+            break;
+
+        case EEdtaCommandShowContacts:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandShowContacts"));
+
+            if( iAppView->IsPCSServerLoaded() )
+                {
+                CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iQueryText );
+                if( dlg->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY))
+                    {
+                    iAppView->ShowMatchingContactsL(iQueryText);
+                    }
+                }
+            }
+            break;
+
+        case EEdtaLaunchFirstContact:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaLaunchFirstContact"));
+            if( iAppView->IsPCSServerLoaded() )
+                iAppView->LaunchNthContactL( 0 );
+            }
+            break;
+
+        case EEdtaSelectAndLaunchContact:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaSelectAndLaunchContact"));
+            iAppView->SelectAndLaunchContactL();
+            }
+            break;
+
+        case EEdtaCommandCheckPCSServer:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandCheckPCSServer"));
+            if( iAppView->IsPCSServerLoaded() )
+                iAppView->CheckPCSServerL();
+            }
+            break;
+
+        case EEdtaCommandShowNameOrdering:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandShowNameOrdering"));
+            iAppView->ShowNameOrderL();
+            }
+            break;
+
+        case EEdtaCommandCreateTestContactBase:
+            {
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandCreateTestContactBase"));
+            TInt newContactsCount = CreateTestContactDatabaseL();
+            iAppView->GetScreenBuffer()->WriteLineL(_L("Test contacts updated"));
+            iAppView->GetScreenBuffer()->WriteLineL(_L("%d new contacts"), newContactsCount );
+            }
+            break;
+            
+        case EEdtaCommandTwoConsequtiveSearchesTest:
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: Two search test"));
+
+             if( CheckPluginLoadedAndShowNote() )
+                 {
+                 CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iQueryText );
+                 if( dlg->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY))
+                     {
+                     HBufC* anotherQueryText = HBufC::NewLC( KSearchStringMaxLen );
+                     TPtr ptr = anotherQueryText->Des();
+                     
+                     CAknTextQueryDialog* dlg2 = CAknTextQueryDialog::NewL( ptr );
+                     
+                     if ( dlg2->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY) )
+                         {                   
+                         if (iAppView->GetEasyDialer())
+                             {
+                             iAppView->GetEasyDialer()->SetInputL( iQueryText );
+                             iAppView->GetEasyDialer()->SetInputL( ptr );
+                             }
+                         }
+                     CleanupStack::PopAndDestroy( anotherQueryText );
+                     }
+                 }
+             break;
+
+        case EEdtaCommandMiscCoverageTest:
+            
+            if (iAppView->GetEasyDialer())
+                 {
+                 iAppView->DoMiscellaneousTestsL(  );
+                 }            
+            break;
+        
+        case EEdtaCommandShowThumbnails:
+            iRepository->Set(KEasyDialingContactThumbnails, 1);         
+            break;
+            
+        case EEdtaCommandHideThumbnails:
+            iRepository->Set(KEasyDialingContactThumbnails, 0);
+            break;
+            
+        default:
+            iServiceHandler->ExecuteMenuCmdL(
+                aCommand,
+                iServiceHandler->InParamListL(),    // No input parameters
+                iServiceHandler->OutParamListL(),   // No output parameters
+                0,                                  // No options used.
+                NULL);                              // No need for callback    
+
+            DebugPrintF(_L("CEdtaAppUi::HandleCommandL: AIW (or unknown) menu command: 0x%X"), aCommand );
+            break;
+        }
+
+    DebugPrintF(_L("CEdtaAppUi::HandleCommandL exit"));
+    }
+
+
+void CEdtaAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+    {
+    // First, offer menu pane to AIW framework. It might be the case, that the 
+    // user is opening an AIW submenu. In this case, the AIW handles the menu.
+    if ( iServiceHandler->HandleSubmenuL( *aMenuPane ) )
+        {
+        return;
+        }
+        
+    // Add your normal (non-AIW) menu initialisation code here...      
+
+    // Let AIW provider add its menu items to the menu.
+    iServiceHandler->InitializeMenuPaneL(
+        *aMenuPane, 
+        aResourceId, 
+        EEdtaCommandLast, 
+        iServiceHandler->InParamListL());    
+    }
+
+// -----------------------------------------------------------------------------
+//  Called by the framework when the application status pane
+//  size is changed.  Passes the new client rectangle to the
+//  AppView
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppUi::HandleStatusPaneSizeChange()
+    {
+    iAppView->SetRect( ClientRect() );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// Display note id easydialing plugin is not loaded
+// -----------------------------------------------------------------------------
+//
+TBool CEdtaAppUi::CheckPluginLoadedAndShowNote()
+    {
+    TBool plugin_loaded( ETrue );
+
+    if( !(iAppView->GetEasyDialer()) )
+        {
+        plugin_loaded = EFalse;
+        TBuf<KEdtaMaxLineWidth> tempStr;
+        tempStr.Copy(_L("Easydialing plugin not loaded!"));
+        
+        TRAP_IGNORE(
+                {
+                CAknErrorNote* myNote = new (ELeave) CAknErrorNote();
+                myNote->SetTimeout( CAknNoteDialog::ELongTimeout );
+                myNote->ExecuteLD( tempStr );
+                }
+        );
+        }
+
+    DebugPrintF(_L("CEdtaAppUi::CheckPluginLoadedAndShowNote: Plugin loaded: %d"), plugin_loaded );
+
+    return plugin_loaded;
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_appview.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,872 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+#include <coemain.h>
+#include <aknutils.h>
+#include "edta_appview.h"
+#include "edta_debugprint.h"
+#include "edta_dummylistener.h"
+#include <aknnotewrappers.h>        
+
+// AVKON components
+#include <aknlists.h>
+#include <aknpopup.h>
+
+// Predictive search header files.
+#include <CPsSettings.h>
+#include <CPsQuery.h>
+#include <CPsQueryItem.h>
+#include <CPsClientData.h>
+#include <CPsPattern.h>
+#include <CPsRequestHandler.h>
+
+// Virtual phonebook header files.
+#include <VPbkContactStoreUris.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <TVPbkContactStoreUriPtr.h>
+// contains virtual phonebook data fields
+#include <vpbkeng.rsg>
+
+// Phonebook engine API 
+#include <CPbkContactEngine.h>
+
+// CCA Launcher header files.
+#include <ccafactory.h>
+#include <mccaparameter.h>
+#include <mccaconnection.h>
+
+
+const TInt KEdtaMaximumMatchingCount = 100;
+const TInt KEdtaContactCompanyIndex = 2;
+const TInt KEdtaContactEmailHomeIndex = 3;
+const TInt KEdtaContactEmailWorkIndex = 4;
+const TInt KEdtaContactEmailGenIndex = 5;
+const TInt KEdtaListBoxGranularity = 5;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// NewL
+// First phase constructor without cleanup stack.
+// -----------------------------------------------------------------------------
+//
+CEdtaAppView* CEdtaAppView::NewL( const TRect& aRect )
+    {
+    CEdtaAppView* self = CEdtaAppView::NewLC( aRect );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// NewLC
+// First phase constructor with cleanup stack.
+// -----------------------------------------------------------------------------
+//
+CEdtaAppView* CEdtaAppView::NewLC( const TRect& aRect )
+    {
+    CEdtaAppView* self = new ( ELeave ) CEdtaAppView;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+// Second phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::ConstructL( const TRect& aRect )
+    {
+    DebugPrintF(_L("CEdtaAppView::ConstructL enter, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY  );
+
+    // Create a window for this application view
+    CreateWindowL();
+
+    const TDesC& thname = RThread().Name();
+    iScreenBuffer = CEdtaScreenTextBuffer::NewL( aRect );
+    iScreenBuffer->SetFocus( ETrue );
+    iScreenBuffer->WriteLineL(thname);
+
+    LoadPluginL(); 
+  
+    DebugPrintF(_L("CEdtaAppView::ConstructL: iScreenBuffer: 0x%X, iEasyDialer: 0x%X"), iScreenBuffer, iEasyDialer );
+
+    if (iEasyDialer) 
+        {
+        DebugPrintF(_L("CEdtaAppView::ConstructL: Easydialer plugin found, adding observer..") );
+
+        iEasyDialer->AddObserverL( this );
+        iEasyDialer->SetFocus( EFalse );
+
+        DebugPrintF(_L("CEdtaAppView::ConstructL: Add observer done"));
+        }
+
+    // Init PCS Server..
+    TRAPD( error, InitPredictiveContactSearchL());
+    if( error )
+        {
+        DebugPrintF(_L("CEdtaAppView::ConstructL: Failed to load predictive search engine: %d"), error );
+        iScreenBuffer->WriteLineL(_L("* PCS Server load fail: %d"), error );
+        }
+
+    // Init Communication Launcher..
+    TRAP( error, iContactLauncher = TCCAFactory::NewConnectionL());
+    if( error )
+        {
+        DebugPrintF(_L("CEdtaAppView::ConstructL: Failed connect communication launcher: %d"), error );
+        iScreenBuffer->WriteLineL(_L("* CCA open fail: %d"), error );
+        }
+        
+    iDummyListener = new ( ELeave ) CDummyListener();
+
+    // Set the windows size
+    SetRect( aRect );
+    ActivateL();
+
+    DebugPrintF(_L("CEdtaAppView::ConstructL exit"));
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaAppView
+// The C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CEdtaAppView::CEdtaAppView()
+    {
+    // No implementation here
+    }
+
+// -----------------------------------------------------------------------------
+// ~CEdtaAppView
+// The destructor.
+// -----------------------------------------------------------------------------
+//
+CEdtaAppView::~CEdtaAppView()
+    {
+    DebugPrintF(_L("CEdtaAppView::~CEdtaAppView enter, iEasyDialer: 0x%x"), iEasyDialer );
+    
+    delete iDummyListener;
+
+    if (iEasyDialer)
+        {
+        iEasyDialer->RemoveObserver( this );
+        }
+
+    if (iPredictiveContactSearchHandler)
+        {
+        iPredictiveContactSearchHandler->RemoveObserver(this);
+        }
+
+    delete iEasyDialer;
+    iContactNames.ResetAndDestroy();
+    iMatchingContactLinks.ResetAndDestroy();
+
+    if (iContactLauncher)
+        {
+        iContactLauncher->Close();
+        }
+
+    delete iPredictiveSearchQuery;
+    delete iContactManager;
+    delete iPredictiveContactSearchHandler;
+    delete iContactStoreUriArray;
+    iContactDataStores.ResetAndDestroy();
+
+    delete iScreenBuffer;
+    DebugPrintF(_L("CEdtaAppView::~CEdtaAppView exit"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// Draw
+// Draw itself. Clear the canvas.
+// -----------------------------------------------------------------------------
+//
+
+void CEdtaAppView::Draw( const TRect& aRect ) const
+    {
+    DebugPrintF(_L("CEdtaAppView::Draw, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY );
+
+    CWindowGc& gc = SystemGc();
+    gc.SetClippingRect( aRect );
+    
+    gc.SetBrushColor( KRgbWhite );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.Clear( aRect );
+    }
+
+
+// -----------------------------------------------------------------------------
+// SizeChanged
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::SizeChanged()
+    {
+    DebugPrintF(_L("CEdtaAppView::SizeChanged: iScreenBuffer: 0x%X, iEasyDialer: 0x%X"), iScreenBuffer, iEasyDialer );
+
+    // Controls must set rects, otherwise not drawn
+    // If easy dialer plugin is loaded, the controls are reorganized to screen.
+    if( iEasyDialer )
+        {
+        // Screen buffer occupies upper half of the view.
+        TRect screen_buffer_rect = iAvkonAppUi->ClientRect();
+        screen_buffer_rect.iBr.iY -= (screen_buffer_rect.Height() / 2 );
+        TRect easy_dialer_rect(0, screen_buffer_rect.Height(), screen_buffer_rect.Width(), iAvkonAppUi->ClientRect().Height());
+        iEasyDialer->SetRect( easy_dialer_rect );
+        iScreenBuffer->SetRect(screen_buffer_rect);
+        }
+    else if ( iScreenBuffer )
+        {
+        iScreenBuffer->SetRect(iAvkonAppUi->ClientRect());
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CEdtaAppView::CountComponentControls() const
+    {
+    return iEasyDialer ? 2 : 1;
+    }
+
+
+// -----------------------------------------------------------------------------
+// ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CEdtaAppView::ComponentControl(TInt aIndex) const
+    {
+    switch (aIndex)
+        {
+        case 0: return iScreenBuffer;
+        case 1: return iEasyDialer; // Can be null
+        default: return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CEdtaAppView::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse handled = EKeyWasNotConsumed;
+    
+    if ( iEasyDialer )
+        {
+        handled = iEasyDialer->OfferKeyEventL(aKeyEvent, aType);
+        }
+    
+    if ( handled == EKeyWasNotConsumed )
+        {
+        handled = iScreenBuffer->OfferKeyEventL(aKeyEvent, aType);
+        }
+    else 
+        {
+        handled = EKeyWasConsumed;
+        }
+
+    return handled;
+    }
+
+// -----------------------------------------------------------------------------
+// GetScreenBuffer
+// Returns the pointer to the screen buffer of the view.
+// -----------------------------------------------------------------------------
+//
+CEdtaScreenTextBuffer* CEdtaAppView::GetScreenBuffer()
+    {
+    return iScreenBuffer;
+    }
+
+
+// -----------------------------------------------------------------------------
+// GetEasyDialer
+// Returns the pointer to the easy dialer.
+// -----------------------------------------------------------------------------
+//
+CDialingExtensionInterface* CEdtaAppView::GetEasyDialer()
+    {
+    return iEasyDialer;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// InitContactDataStoreUrisL
+// Initialises user contact data store URIs into field iContactDataStores.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::InitContactDataStoreUrisL()
+    {
+    HBufC* default_cdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC();
+    User::LeaveIfError(iContactDataStores.Append( default_cdb ));
+    CleanupStack::Pop( default_cdb );
+
+    iContactStoreUriArray = CVPbkContactStoreUriArray::NewL();
+    iContactStoreUriArray->AppendL(TVPbkContactStoreUriPtr( VPbkContactStoreUris::DefaultCntDbUri() ));
+    }
+
+
+// -----------------------------------------------------------------------------
+// InitPredictiveContactSearchL
+// Initialises predictive contact search.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::InitPredictiveContactSearchL()
+    {
+    DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL enter"));
+
+    iPredictiveContactSearchHandler = CPSRequestHandler::NewL();
+    iPredictiveContactSearchHandler->AddObserverL(this);
+
+    DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => CPSRequestHandler::NewL done"));
+
+    InitContactDataStoreUrisL();
+
+    DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => InitContactDataStoreUrisL done"));
+
+    iContactManager = CVPbkContactManager::NewL(*iContactStoreUriArray);
+
+    // Put the searched contact fields into array.
+    RArray<TInt> contact_fields;
+    CleanupClosePushL(contact_fields);
+
+    // All supported fields are searched. The supported fiels are specified in cenrep private\10202BE9\2000B5C6.
+    contact_fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME);
+    contact_fields.Append(R_VPBK_FIELD_TYPE_LASTNAME);
+    contact_fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME);
+    contact_fields.Append(R_VPBK_FIELD_TYPE_EMAILHOME);
+    contact_fields.Append(R_VPBK_FIELD_TYPE_EMAILWORK);
+    contact_fields.Append(R_VPBK_FIELD_TYPE_EMAILGEN);
+
+    // Create and fill ps settings object.
+    CPsSettings* ps_settings = CPsSettings::NewL();
+    CleanupStack::PushL(ps_settings);
+
+    ps_settings->SetSearchUrisL(iContactDataStores);
+    ps_settings->SetMaxResults(KEdtaMaximumMatchingCount);
+    ps_settings->SetSortType(EAlphabetical);
+    ps_settings->SetDisplayFieldsL(contact_fields);
+
+    // Set the ps settings.
+    iPredictiveContactSearchHandler->SetSearchSettingsL(*ps_settings);
+
+    DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => CPSRequestHandler::SetSearchSettingsL done"));
+
+    CleanupStack::PopAndDestroy(ps_settings);
+    CleanupStack::PopAndDestroy(&contact_fields);
+
+    iPredictiveSearchQuery = CPsQuery::NewL();
+
+    DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => CPsQuery::NewL done"));
+
+    DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL exit"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// void ShowMatchingContacts(const TDesC& aSearchString)
+// Starts an asynchronous search for contacts matching to aSearchString.
+// The actual displaying of contact is done in callback HandlePsResultsUpdate
+// - Hardcode to use ITU keyboard parameters
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::ShowMatchingContactsL(const TDesC& aSearchString)
+    {
+    DebugPrintF(_L("CEdtaAppView::ShowMatchingContactsL: enter '%S'"), &aSearchString );
+
+    iPredictiveSearchQuery->Reset();
+
+    for(TInt i = 0; i < aSearchString.Length() ;i++)
+        {
+         // Add a query item
+        CPsQueryItem* item = CPsQueryItem::NewL();
+        CleanupStack::PushL(item);
+
+        item->SetCharacter( aSearchString[i] );
+        item->SetMode( EItut );
+        iPredictiveSearchQuery->AppendL(*item);
+
+        // Previous CPsQuery::AppendL takes the ownership of item.
+        // Do not delete item.
+        CleanupStack::Pop(item);
+        }
+
+    // Issue the search. SearchL is asynchronous function => returns immediately.
+    iPredictiveContactSearchHandler->SearchL(*iPredictiveSearchQuery);
+
+    DebugPrintF(_L("CEdtaAppView::ShowMatchingContactsL: exit"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// ShowNameOrderL
+// Check the name ordering from phonebook engine by using phonebook engine API.
+// -----------------------------------------------------------------------------
+// 
+void CEdtaAppView::ShowNameOrderL()
+    {
+    DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: enter"));
+
+    CPbkContactEngine* pbkEngine = CPbkContactEngine::NewL();
+    CPbkContactEngine::TPbkNameOrder nameOrder = pbkEngine->NameDisplayOrderL();
+
+    iScreenBuffer->WriteLineL(_L("Phonebook name order is"));
+    switch ( nameOrder )
+        {
+        case CPbkContactEngine::EPbkNameOrderLastNameFirstName:
+            DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == LastName -> FirstName"), nameOrder );
+            iScreenBuffer->WriteLineL(_L("* Last name, first name"));
+            break;
+        case CPbkContactEngine::EPbkNameOrderFirstNameLastName:
+            DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == FirstName -> LastName"), nameOrder );
+            iScreenBuffer->WriteLineL(_L("* First name, last name"));
+            break;
+        case CPbkContactEngine::EPbkNameOrderNotDefined:
+            DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == Not defined"), nameOrder );
+            iScreenBuffer->WriteLineL(_L("* Not defined"));
+            break;
+        default:
+            DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == Unknown"), nameOrder );
+            iScreenBuffer->WriteLineL(_L("* Unknown value: %d"), nameOrder );
+        }
+
+    delete pbkEngine;
+    
+    DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: exit"));
+    }
+
+// -----------------------------------------------------------------------------
+// IsPCSServerLoaded
+// Checks if the PCSServer is loaded properly at constructor
+// -----------------------------------------------------------------------------
+//
+TBool CEdtaAppView::IsPCSServerLoaded()
+    {
+    if( !iPredictiveSearchQuery )
+        {
+        DebugPrintF(_L("CEdtaAppView::CheckPCSServerL: PCS server not loaded properly!"));
+
+        TBuf<KEdtaMaxLineWidth> tempStr;
+        tempStr.Copy(_L("PCS server not loaded!"));;
+        
+        TRAP_IGNORE(
+                {
+                CAknErrorNote* myNote = new (ELeave) CAknErrorNote();
+                myNote->SetTimeout( CAknNoteDialog::ELongTimeout );
+                TRAP_IGNORE( myNote->ExecuteLD( tempStr ) );
+                }
+        );
+        return EFalse;
+        }
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CheckPCSServerL
+// Checks the configuration of the PCSServer and prints the sortorder of fields.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::CheckPCSServerL()
+    {
+    RArray<TInt> field_order;
+    CleanupClosePushL(field_order);
+
+    HBufC* default_cdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC();
+
+    _LIT(KEdtaField, "*");
+    TBuf<KEdtaMaxLineWidth> line(KEdtaField);
+
+    iPredictiveContactSearchHandler->GetDataOrderL(*default_cdb, field_order);
+
+    DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: Number of fields: %d"), field_order.Count() );
+
+    TInt requiredFieldsCount = 3;
+    
+    for ( TInt i = 0; i < field_order.Count(); i++)
+        {
+        line.Append((TChar) ' ');
+        line.AppendNum(field_order[i]);
+        
+        if(( field_order[i] ==  R_VPBK_FIELD_TYPE_FIRSTNAME) ||
+           ( field_order[i] ==  R_VPBK_FIELD_TYPE_LASTNAME) ||
+           ( field_order[i] ==  R_VPBK_FIELD_TYPE_COMPANYNAME ))
+            {
+            requiredFieldsCount--;
+            }
+        }
+
+    CleanupStack::PopAndDestroy( default_cdb );
+    CleanupStack::PopAndDestroy( &field_order );
+
+    iScreenBuffer->WriteLineL(_L("PCS server fields:"));
+    iScreenBuffer->WriteLineL(line);
+
+    DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: '%S'"), &line );
+
+    if( requiredFieldsCount == 0 )
+        {
+        DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: All required fields found from PCSServer, configuration is OK"));
+        iScreenBuffer->WriteLineL(_L("* All required fields found"));
+        }
+    else
+        {
+        DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: Not all required fields found from PCSServer, configuration is wrong"));
+        iScreenBuffer->WriteLineL(_L("* PCS server misconfigured!"));
+        iScreenBuffer->WriteLineL(_L("* Easydialing may not"));
+        iScreenBuffer->WriteLineL(_L("* match your queries!"));
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// void LaunchNthContactL(TInt aIx)
+// Launches communication launcher for the first contact in the previous
+// search. If not contacts found or no search yet done, function does nothing.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::LaunchNthContactL(TInt aIx)
+    {
+    if (aIx < 0 || iMatchingContactLinks.Count() <= aIx)
+        {
+        DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: No contacts retrieved yet") );
+        return;
+        }
+
+    DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: enter, index: %d, setting parameters.."), aIx );
+
+    MCCAParameter* launch_parameters = TCCAFactory::NewParameterL();
+    CleanupClosePushL( *launch_parameters );
+
+    launch_parameters->SetConnectionFlag(MCCAParameter::ENormal);
+    launch_parameters->SetContactDataFlag(MCCAParameter::EContactLink);
+
+    // Pack the contact link and expand it to 16-bit descriptor.
+    HBufC8* contact8 = iMatchingContactLinks[aIx]->PackLC();
+    HBufC16* contact16 = HBufC16::NewLC( contact8->Length() );
+    contact16->Des().Copy( contact8->Des() );
+
+    launch_parameters->SetContactDataL( contact16->Des() );
+
+    CleanupStack::PopAndDestroy( contact16 );
+    CleanupStack::PopAndDestroy( contact8 );
+
+    DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: launching CCA.."));
+
+    iContactLauncher->LaunchAppL( *launch_parameters, this );
+
+    // Ownership of parameter transferred to CCA launcher => pop but do not destroy.
+    CleanupStack::Pop(launch_parameters);  // Close parameter
+
+    DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: exit"));
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// void DoMiscellaneousTestsL()
+// Does various tests on easy dialing that are difficult to do through normal
+// testing. Mainly for coverage testing purposes.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::DoMiscellaneousTestsL()
+    {
+    // Coverage tests for observer handling.
+    iEasyDialer->AddObserverL( iDummyListener );
+    iEasyDialer->AddObserverL( NULL );
+    iEasyDialer->RemoveObserver( iDummyListener );
+    }
+
+// -----------------------------------------------------------------------------
+// void HandlePsResultsUpdate(RPointerArray<CPsClientData>& aResult, RPointerArray<CPsPattern>& aSeqs)
+// Searched matching contacts using PCS and shows them on the screen.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::HandlePsResultsUpdate(RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs)
+    {
+    TRAP_IGNORE( HandlePredictiveSearchResultL(aResults, aSeqs) );
+    }
+
+
+// -----------------------------------------------------------------------------
+// void HandlePsError(TInt aErrorCode)
+// Called when search error happens.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::HandlePsError(TInt aErrorCode)
+    {
+    DebugPrintF(_L("CEdtaAppView::HandlePsError: %d"), aErrorCode );
+
+    _LIT(KEdtaCachingError, "*** Caching error %d ***");
+    TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingError, aErrorCode) );
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// void CachingStatus(TCachingStatus& aStatus, TInt& aError)
+// Called to update caching status.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::CachingStatus(TCachingStatus& aStatus, TInt& aError )
+    {
+    DebugPrintF(_L("CEdtaAppView::CachingStatus: %d"), aError);
+
+    switch (aStatus)
+        {
+        case ECachingNotStarted:
+            {
+            _LIT(KEdtaCachingStatusStarted, "*** Caching started ***");
+            TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusStarted) );
+            }
+            break;
+        case ECachingInProgress:
+            {
+            _LIT(KEdtaCachingStatusInProgress, "*** Caching in progress ***");
+            TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusInProgress) );
+            }
+            break;
+        case ECachingComplete:
+            {
+            _LIT(KEdtaCachingStatusComplete, "*** Caching complete ***");
+            TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusComplete) );
+            }
+            break;
+        case ECachingCompleteWithErrors:
+            {
+            _LIT(KEdtaCachingStatusCompleteWithErrors, "*** Caching complete with error %d ***");
+            TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusCompleteWithErrors, aError) );
+            }
+            break;
+        default:
+            {
+            _LIT(KEdtaCachingStatusUnknown, "*** Unknown caching status %d ***");
+            TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusUnknown, (TInt) aStatus) );
+            }
+            break;
+        }
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// void HandlePredictiveSearchResultL(RPointerArray<CPsClientData>& aResult, RPointerArray<CPsPattern>& aSeqs)
+// Handles predictive search results. A leaving version to be trapped in HandlePsResultsUpdate.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::HandlePredictiveSearchResultL(RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& /* aSeqs */)
+    {
+    TInt results = aResults.Count();
+    DebugPrintF(_L("CEdtaAppView::HandlePredictiveSearchResultL enter, matching contacts found: %d"), results );
+
+    iContactNames.ResetAndDestroy();
+    iMatchingContactLinks.ResetAndDestroy();
+
+    // map results to old contact match data
+    for (TInt i = 0; i < aResults.Count(); i ++)
+        {
+        TBuf<KEdtaMaxLineWidth> temp;
+        _LIT(KEdtaContactFormatString, "%S %S");
+
+        // Store each contact name into iContactNames.
+        temp.Format(KEdtaContactFormatString, aResults[i]->Data(0), aResults[i]->Data(1));
+
+        DebugPrintF(_L("CEdtaAppView::HandlePredictiveSearchResultL: Contact #%d: '%S'"), i+1, &temp );
+
+        HBufC* contact_name = HBufC::NewL(temp.Length());
+        *contact_name = temp;
+        iContactNames.Append( contact_name );
+
+
+        // Each contact link stored to iMatchingContactLinks, to be possible used later by
+        // CCA launcher functions.
+        MVPbkContactLink* link = iPredictiveContactSearchHandler->ConvertToVpbkLinkLC(*(aResults[i]), *iContactManager);
+        iMatchingContactLinks.Append( link );
+        CleanupStack::Pop( link );
+
+        // Write the contact name to screen buffer
+        iScreenBuffer->WriteLineL( *contact_name );
+
+        TUint8 match_mask = aResults[i]->FieldMatch();
+
+        // Show other search fields only if search matches them.
+        if (match_mask & (1 << KEdtaContactCompanyIndex))
+            {
+            _LIT(KEdtaContactCompany, "* Company: %S");
+            iScreenBuffer->WriteLineL(KEdtaContactCompany, aResults[i]->Data(KEdtaContactCompanyIndex));
+            }
+        if (match_mask & (1 << KEdtaContactEmailHomeIndex))
+            {
+            _LIT(KEdtaContactEmailHome, "* Home e-mail: %S");
+            iScreenBuffer->WriteLineL(KEdtaContactEmailHome, aResults[i]->Data(KEdtaContactEmailHomeIndex));
+            }
+        if (match_mask & (1 << KEdtaContactEmailWorkIndex))
+            {
+            _LIT(KEdtaContactEmailWork, "* Work e-mail: %S");
+            iScreenBuffer->WriteLineL(KEdtaContactEmailWork, aResults[i]->Data(KEdtaContactEmailWorkIndex));
+            }
+        if (match_mask & (1 << KEdtaContactEmailGenIndex))
+            {
+            _LIT(KEdtaContactEmailGen, "* E-mail: %S");
+            iScreenBuffer->WriteLineL(KEdtaContactEmailGen, aResults[i]->Data(KEdtaContactEmailGenIndex));
+            }
+        }
+    _LIT(KEdtaNumberOfMatchingContacts, "*** %d contacts found! ***");
+    iScreenBuffer->WriteLineL(KEdtaNumberOfMatchingContacts, aResults.Count());
+
+    DebugPrintF(_L("CEdtaAppView::HandlePredictiveSearchResultL exit"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// HandleDialingExtensionEvent
+// 
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent )
+    {
+    DebugPrintF(_L("CEdtaAppView::HandleDialingExtensionEvent"));
+
+    if ( aEvent == MDialingExtensionObserver::EFocusChanged )
+        {
+        if ( iEasyDialer->IsFocused() )
+            {
+            iScreenBuffer->SetFocus( EFalse, EDrawNow );
+            }
+        else 
+            {
+            iScreenBuffer->SetFocus( ETrue, EDrawNow );
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// SelectAndLaunchContactL
+// Shows a list box, the launches CCA launcher for user selected contact.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::SelectAndLaunchContactL()
+    {
+    DebugPrintF(_L("CEdtaAppView::SelectAndLaunchContactL enter"));
+
+    // Create list of matched contacts and show them on the screen
+
+    CAknSingleHeadingPopupMenuStyleListBox* listBox = new(ELeave) CAknSingleHeadingPopupMenuStyleListBox;
+    CleanupStack::PushL( listBox );
+
+    CAknPopupList* popupList = CAknPopupList::NewL( listBox,
+                                                    R_AVKON_SOFTKEYS_SELECT_CANCEL,
+                                                    AknPopupLayouts::EMenuGraphicHeadingWindow );
+    CleanupStack::PushL( popupList );
+
+    listBox->ConstructL( popupList, EAknListBoxSelectionList );
+    listBox->CreateScrollBarFrameL( ETrue );
+    listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+                                                        CEikScrollBarFrame::EAuto );
+
+    _LIT( KMatchedContacts, "Matched contacts:" );
+    popupList->SetTitleL( KMatchedContacts );
+
+    // Add items into list
+
+    CDesCArrayFlat* itemArray = new(ELeave)CDesCArrayFlat(KEdtaListBoxGranularity);
+    CleanupStack::PushL(itemArray);
+
+    _LIT( KListItemSeparator1, ". \t" );
+
+    for (TInt listIndex = 0; listIndex < iContactNames.Count(); listIndex++ )
+        {
+        TBuf<KEdtaMaxLineWidth> itemString;
+        itemString.Zero();
+        itemString.AppendNum( listIndex+1 );
+        itemString.Append( KListItemSeparator1 );
+        itemString.Append( *iContactNames[listIndex] );
+
+        itemArray->AppendL(itemString);
+        }
+
+    CTextListBoxModel* model = listBox->Model();
+    model->SetItemTextArray( itemArray );
+    model->SetOwnershipType( ELbmOwnsItemArray );
+    CleanupStack::Pop( itemArray );     // Pop itemArray - the listBox model owns this now
+
+    if( popupList->ExecuteLD() )        // Show the list finally
+        {
+        if( listBox->CurrentItemIndex() >= 0 )
+            {
+            // Launch communication launcher for selected contact
+            LaunchNthContactL( listBox->CurrentItemIndex() );
+            }
+        }
+
+    CleanupStack::Pop( popupList );
+    CleanupStack::PopAndDestroy( listBox );
+
+    DebugPrintF(_L("CEdtaAppView::SelectAndLaunchContactL exit"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCASimpleNotifyL
+// Implements MCCAObserver notification interface.
+// Nothing better to do but show the parameters.
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::CCASimpleNotifyL( TNotifyType aType, TInt aReason )
+    {
+    DebugPrintF(_L("CEdtaAppView::CCASimpleNotifyL: aType: %d, aReason: %d"), (TInt)aType, aReason );
+
+    _LIT(KEdtaCCAExitReason, "Launcher exit reason %d, %d");
+    iScreenBuffer->WriteLineL(KEdtaCCAExitReason, aType, aReason);
+    }
+
+
+// -----------------------------------------------------------------------------
+// LoadPluginL
+// Load the easydialing ECOM plugin
+// -----------------------------------------------------------------------------
+//
+void CEdtaAppView::LoadPluginL()
+    {
+    TRAPD( error, 
+        {
+        iEasyDialer = CDialingExtensionInterface::NewL();
+        iEasyDialer->InitializeL( *this );        
+        } );
+
+    if( error )
+        {
+        DebugPrintF(_L("CEdtaAppView::LoadPluginL FAIL, error: %d"), error );
+        iScreenBuffer->WriteLineL(_L("* EasyDialing Plugin load fail: %d"), error );
+        iEasyDialer = NULL;
+        }
+    else
+        {
+        iScreenBuffer->WriteLineL(_L("EasyDialing Plugin loaded"));
+        DebugPrintF(_L("CEdtaAppView::LoadPluginL OK" ));
+        }
+    }
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_createtestcontactbase.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+
+
+#include <cntdb.h> 
+#include <cntitem.h> 
+#include <cntfldst.h> 
+#include <cpbkcontactitem.h>
+#include <cpbkcontactengine.h>
+#include "edta_debugprint.h"
+
+
+/*
+ * Number of contacts in contactdata array.
+ */
+const TInt nbr_of_contacts = 15;
+
+/*
+ * Contact data contains contact data as text strings.
+ * Each contact takes six line:
+ * - first name
+ * - last name
+ * - cell number
+ * - home number
+ * - company name
+ * - e-mail address
+ */
+const char* contactdata[] = 
+{
+    "Dummy",
+    "Contact",
+    "+1056439939",
+    "035558756",
+    "Ericsson",
+    "dummy.contact@ericsson.sw",
+    
+    "Jaakko",
+    "Helanti",
+    "+358405287761",
+    "034447611",
+    "Nokia",
+    "jaakko.helanti@nokia.com",
+    
+    "Stan",
+    "Laurel",
+    "+0104438839992",
+    "+0104438839000",
+    "MGM",
+    "stan.laurel@heaven.com",
+    
+    "Oliver",
+    "Hardy",
+    "+01078398927",
+    "+10364537882",
+    "MGM",
+    "oliver.hardy@heaven.com",
+    
+    "Harold",
+    "Lloyd",
+    "+102843947",
+    "+10290503958",
+    "Universal",
+    "harold.lloyd@universal.com",
+    
+    "Tauno",
+    "Palo",
+    "+358405557631",
+    "014445466",
+    "Suomi Filmi",
+    "tauno.palo@gmail.com",
+    
+    "Tea",
+    "Ista",
+    "+358475554590",
+    "018723195",
+    "Helsingin Kaupungin Teatteri",
+    "tea.ista@cultureclub.com",
+
+    "Ansa",
+    "Ikonen",
+    "+358471134099",
+    "012388192",
+    "Suomi Filmi",
+    "ansa.ikonen@gmail.com",
+
+    "Bertil",
+    "Nystrom",
+    "+35866377334",
+    "074500998",
+    "Rovaniemen Viuluveistämö",
+    "bertil.nystrom@rvv.com",
+        
+    "",
+    "Onlylastname",
+    "+3585556743",
+    "+35835552727",
+    "",
+    "",
+    
+    "Onlyfirstname",
+    "",
+    "+358405559874",
+    "035553747",
+    "",
+    "",
+       
+    "",
+    "Two-Part Lastname",
+    "+358405557432",
+    "",
+    "",
+    "",
+    
+    "",
+    "",
+    "+35866377334",
+    "074500998",
+    "Just Companyname",
+    "john.doe@justcompanyname.com",
+        
+    "One",
+    "Number",
+    "",
+    "075553266",
+    "Idaho",
+    "",
+    
+    "No",
+    "Number",
+    "",
+    "",
+    "Ericsson",
+    "no.number@ericsson.com",    
+};
+
+
+HBufC* CreateFieldStringL(TInt aIx)
+    {
+    const char* str = contactdata[aIx];
+    TInt len = 0;
+    
+    while (str[len] != '\0')
+        {
+        len++;
+        }
+    
+    if ( len == 0 )
+        {
+        return NULL;
+        }
+    
+    HBufC *field = HBufC::NewL( len );
+    TPtr des = field->Des();
+    des.SetLength( len );
+    
+    for (TInt i = 0; i < len; i++)
+        {
+        des[i] = (TChar) str[i];
+        }
+    
+    return field;
+    }
+
+
+void AddFieldStringL( CPbkContactItem* aContact, TInt aIx, TInt aFieldId )
+    {
+    HBufC* fieldName = CreateFieldStringL( aIx );
+    
+    if ( fieldName ) 
+        {
+        CleanupStack::PushL( fieldName );
+        aContact->FindField( aFieldId )->TextStorage()->SetTextL( *fieldName );
+        CleanupStack::PopAndDestroy(fieldName); 
+        }
+    }
+
+
+void AddContactL(CPbkContactEngine* engine, TInt aIx)
+    {
+    CPbkContactItem* contact = engine->CreateEmptyContactL();
+    CleanupStack::PushL( contact );
+    
+    AddFieldStringL( contact, aIx * 6 + 0, EPbkFieldIdFirstName );
+    AddFieldStringL( contact, aIx * 6 + 1, EPbkFieldIdLastName );
+    AddFieldStringL( contact, aIx * 6 + 2, EPbkFieldIdPhoneNumberMobile );
+    AddFieldStringL( contact, aIx * 6 + 3, EPbkFieldIdPhoneNumberGeneral );
+    AddFieldStringL( contact, aIx * 6 + 4, EPbkFieldIdCompanyName );
+    AddFieldStringL( contact, aIx * 6 + 5, EPbkFieldIdEmailAddress );
+        
+    engine->AddNewContactL( *contact );
+    
+    CleanupStack::PopAndDestroy( contact );
+    }
+
+
+
+// ---------------------------------------------------------
+// CreateTestContactDatabaseL
+//
+// Creates a test contact database if it hasn't been created yet.
+// The existence of test base is done through testing if there
+// is a contact matching with word "Dummy". Test data base has
+// a contact for Mr Dummy Contact.
+// This is the primary function of this file. 
+// ---------------------------------------------------------
+//
+TInt CreateTestContactDatabaseL()
+    {
+    DebugPrintF(_L("CreateTestContactDatabaseL: Contacts creation started.."));
+
+    CPbkContactEngine* engine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( engine );
+    
+    _LIT(KDummyContact, "Dummy");
+        
+    CContactIdArray* findings = engine->FindLC( KDummyContact );
+    
+    // If dummy contact is found, the test database has already been created. 
+    if (findings->Count() > 0)
+        {
+        CleanupStack::PopAndDestroy( findings );
+        CleanupStack::PopAndDestroy( engine );
+        DebugPrintF(_L("CreateTestContactDatabaseL: Database already set up"));
+        return 0;
+        }
+    
+    CleanupStack::PopAndDestroy( findings );
+
+    for (TInt i = 0; i < nbr_of_contacts; i++ )
+        {
+        AddContactL( engine, i );
+        }
+    
+    CleanupStack::PopAndDestroy(engine);
+
+    DebugPrintF(_L("CreateTestContactDatabaseL: Contacts creation completed, number of contacts: %d"), nbr_of_contacts );
+
+    return nbr_of_contacts;
+    }
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_document.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+#include "edta_appui.h"
+#include "edta_document.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEdtaDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CEdtaDocument* CEdtaDocument::NewL( CEikApplication& aApp )
+    {
+    CEdtaDocument* self = NewLC( aApp );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CEdtaDocument* CEdtaDocument::NewLC( CEikApplication& aApp )
+    {
+    CEdtaDocument* self = new ( ELeave ) CEdtaDocument( aApp );
+
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaDocument::CEdtaDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CEdtaDocument::CEdtaDocument( CEikApplication& aApp )
+    : CAknDocument( aApp )
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// CEdtaDocument::~CEdtaDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CEdtaDocument::~CEdtaDocument()
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// CEdtaDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CEdtaDocument::CreateAppUiL()
+    {
+    // Create the application user interface, and return a pointer to it.
+    // The framework takes ownership of this object.
+    return ( static_cast <CEikAppUi*> ( new ( ELeave ) CEdtaAppUi ) );
+    }
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_dummylistener.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+#include "edta_dummylistener.h"
+
+
+CDummyListener::CDummyListener()
+    {
+    }
+
+CDummyListener::~CDummyListener()
+    {
+    }
+    
+void CDummyListener::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent /* aEvent */ )
+    {
+    
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_querydialog.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+
+#include <avkon.hrh>
+#include "edta_querydialog.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CEdtaQueryDialog::CEdtaQueryDialog( TDes& aBuf, const HBufC *aDefInput )
+    : CAknTextQueryDialog( aBuf )
+    , iDefInput(*(const_cast<HBufC*> (aDefInput)))
+    {
+    }
+
+
+
+// ---------------------------------------------------------
+// CEdtaQueryDialog::PreLayoutDynInitL
+// ---------------------------------------------------------
+//
+void  CEdtaQueryDialog::PreLayoutDynInitL()
+    {
+    // first we have to execute PreLayoutDynInitL() of the base-class
+    CAknTextQueryDialog::PreLayoutDynInitL();
+
+    // acquire pointer to editor-control and set the default input.
+    CAknQueryControl* control = QueryControl();
+    control->SetTextL(iDefInput);
+
+    // enable OK-button, so that default text can be accepted as it is
+    // without modifying the text
+    MakeLeftSoftkeyVisible( ETrue );
+    }
+
+//  End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/edta/src/edta_screentextbuffer.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,500 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Easy dialing test application.
+*
+*/
+
+// INCLUDE FILES
+#include "edta_screentextbuffer.h"
+#include "edta_debugprint.h"
+#include "edta.pan"
+
+#include <coemain.h>
+#include <aknsbasicbackgroundcontrolcontext.h>
+#include <eiksbfrm.h>
+#include <eikenv.h>
+#include <eikdef.h>
+#include <aknappui.h>
+#include <aknutils.h>
+
+
+const TInt KLineWidthCent = 90; // Percent of total screen width
+const TInt KHeightMarginCent = 7; // Percent of total height
+const TInt KBottomMarginCent = 3; // Percent of total height
+const TInt KLineHeightCent = 135; // How many percent is the line height of font height
+const TInt KCent = 100;
+const TInt KInitialScreenBufferSize = 20; // This many lines is initially allocated to the screen buffer.
+const TInt KInitialScreenStartAmount = 5; // This many screen starts are initially allocated to screen buffer.
+
+
+CEdtaScreenTextBuffer* CEdtaScreenTextBuffer::NewL( const TRect& aRect )
+    {
+    CEdtaScreenTextBuffer* self = CEdtaScreenTextBuffer::NewLC( aRect );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CEdtaScreenTextBuffer* CEdtaScreenTextBuffer::NewLC( const TRect& aRect )
+    {
+    CEdtaScreenTextBuffer* self = new ( ELeave ) CEdtaScreenTextBuffer;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+
+// constructors
+CEdtaScreenTextBuffer::CEdtaScreenTextBuffer()
+    {
+    }
+
+void CEdtaScreenTextBuffer::ConstructL( const TRect& aRect )
+    {
+    CreateWindowL();
+    CalculateL(aRect);
+    ActivateL();
+    }
+
+// destructor
+CEdtaScreenTextBuffer::~CEdtaScreenTextBuffer()
+    {
+    delete iSBFrame;
+    delete iScreenStarts;
+
+    if ( iText )
+        {
+        iText->ResetAndDestroy();
+        delete iText;
+        }
+    }
+
+void CEdtaScreenTextBuffer::SizeChanged()
+    {
+    // TRAP_IGNORE( CalculateL( Rect() ) );
+    // DrawDeferred();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::Draw()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::Draw( const TRect& aRect ) const
+    {
+	// DebugPrintF(_L("CEdtaScreenTextBuffer::Draw, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY );
+
+    __ASSERT_DEBUG( iText, Panic(EEdtaFieldNotInitialized,_L("CEdtaScreenTextBuffer::Draw: iText == NULL") ));
+    __ASSERT_DEBUG( iScreenStarts, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::Draw: iScreenStarts == NULL") ));
+    __ASSERT_DEBUG( iScreenStarts->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::Draw: iScreenStarts has zero elements") ));
+
+    CWindowGc& gc = SystemGc();
+
+    gc.SetBrushColor( KRgbWhite );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.Clear( aRect );
+    
+    if ( IsFocused() )
+        {
+        TRect frame( aRect );
+        frame.Shrink(3,3);
+        frame.iBr.iX -= 10;
+        gc.SetPenColor(KRgbBlack);
+        gc.SetPenSize( TSize(2,2) );
+        TSize cornerRounding(8,8);
+        gc.DrawRoundRect( frame, cornerRounding );
+        }
+    
+    gc.UseFont( iFont );
+
+    // index of the first line on the screen in the text array
+    TInt firstLine = 0 ;
+    if((iScreenStarts ) && (iScreenStarts->Count() > iCurrentScreen))
+        {
+        firstLine = ( (*iScreenStarts)[ iCurrentScreen ] );
+        }
+    else
+        {
+        firstLine = (*iScreenStarts)[ iScreenStarts->Count() - 1 ];
+        }
+
+    // index of the last line on the screen in the text array
+    TInt lastLine( firstLine + iLinesPerScreen - 1 );
+
+    gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+
+    TPoint position( iTopBaseLineX, iTopBaseLineY );
+    TPoint topLeft;
+    TSize rectSize( iLineWidth, iBaseLineDelta +iFont->DescentInPixels() );
+
+    for ( TInt index = firstLine; index < iText->Count() && index <= lastLine; index++, position.iY += iBaseLineDelta )
+        {
+        HBufC* text = (*iText)[ index ];
+
+        if ( text )
+            {
+            topLeft = TPoint( position.iX, position.iY-iBaseLineDelta );
+            gc.SetPenColor(KRgbBlack);
+            gc.DrawText( *text, TRect( topLeft, rectSize ), iBaseLineDelta, iTextAlign );
+            }
+        }
+
+    gc.DiscardFont();
+
+    // DebugPrintF(_L("CEdtaScreenTextBuffer::Draw exit"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::ActivateL()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::ActivateL()
+    {
+    CCoeControl::ActivateL();
+    UpdateScrollIndicatorL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::SetTextL()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::WriteLineL(TRefByValue<const TDesC> aText,... )
+    {
+    TBuf<KEdtaMaxLineWidth> bufLine;
+    VA_LIST list;
+    VA_START(list,aText);
+    bufLine.FormatList(aText,list);
+
+    if(!bufLine.Length())
+        {
+        iText->AppendL( NULL );
+        }
+    else
+        {
+        HBufC* line = HBufC::NewLC(bufLine.Length());
+        *line = bufLine;
+        iText->AppendL( line );
+        CleanupStack::Pop(line);
+        }
+
+    // Updating scrollbars and screen starts etc are moved to UpdateScrollIndicatorL()
+
+    // if text, last line is shown again in next screen
+    iDoNotShowLastLineAgain = EFalse;
+
+    DrawDeferred(); //New
+    UpdateScrollIndicatorL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::DeleteLastLine()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::DeleteLastLine(TInt aCount)
+    {
+    __ASSERT_DEBUG( iText, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::DeleteLastLine: iText == NULL") ));
+    __ASSERT_DEBUG( iText->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::DeleteLastLine: iText has zero elements") ));
+
+    while (aCount > 0)
+        {
+        // Avoiding memory leaks
+        TInt lastIndex = iText->Count() - 1;
+
+        // The first item in iText cannot be deleted, since UpdateScrollIndicatorL
+        // relies on there being at least one item.
+        if (lastIndex > 0)
+            {
+            HBufC* text = (*iText)[ lastIndex ];
+            delete text;
+            iText->Delete(lastIndex);
+            }
+        --aCount;
+        }
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::OfferKeyEventL()
+// -----------------------------------------------------------------------------
+TKeyResponse CEdtaScreenTextBuffer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                              TEventCode aType )
+    {
+    __ASSERT_DEBUG(iScreenStarts, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::OfferKeyEventL: iScreenStarts == NULL") ));
+    __ASSERT_DEBUG(iScreenStarts->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::OfferKeyEventL: iScreenStarts has zero elements") ));
+
+    if ( aType == EEventKey && iScreenStarts->Count() > 1 )
+        {
+        switch ( aKeyEvent.iCode )
+            {
+            case EKeyUpArrow:
+                if ( iCurrentScreen > 0 )
+                    {
+                    iCurrentScreen--;
+                    DrawNow();
+                    UpdateScrollIndicatorL();
+                    }
+                break;
+
+            case EKeyDownArrow:
+                if ( iCurrentScreen < iScreenStarts->Count() - 1 )
+                    {
+                    iCurrentScreen++;
+                    DrawNow();
+                    UpdateScrollIndicatorL();
+                    }
+                break;
+
+            default:
+                return EKeyWasNotConsumed;
+            }
+        }
+
+    return EKeyWasConsumed;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::FocusChanged()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::FocusChanged(TDrawNow aDrawNow)
+    {
+    if ( aDrawNow == EDrawNow )
+        {
+        DrawNow();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::HandleScrollEventL()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::HandleScrollEventL ( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType)
+    {
+    //Only on page up/down,scroll up/down and drag events
+    switch (aEventType)
+        {
+        case EEikScrollPageDown:
+        case EEikScrollPageUp:
+        case EEikScrollThumbDragVert:
+        case EEikScrollUp:
+        case EEikScrollDown:
+
+            iCurrentScreen = aScrollBar->ThumbPosition();
+
+            //Refresh now
+            DrawNow();
+            UpdateScrollIndicatorL();
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::UpdateScrollIndicatorL()
+//
+// This function assumes that
+// - iText exists and has at least one element.
+// - iScreenStarts exist and has at least one element.
+// These conditions are met if CalculateL / ConstructL has been called.
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::UpdateScrollIndicatorL()
+    {
+    __ASSERT_DEBUG( iText, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iText == NULL") ));
+    __ASSERT_DEBUG( iText->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iText has zero elements") ));
+    __ASSERT_DEBUG( iScreenStarts, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iScreenStarts == NULL") ));
+    __ASSERT_DEBUG( iScreenStarts->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iScreenStarts has zero elements") ));
+
+    TInt lastLine( iText->Count() - 1 );
+    TInt screenStart( (*iScreenStarts)[ iScreenStarts->Count() - 1 ] );
+
+    TBool firstNewScreenHandled( EFalse );
+
+    while ( lastLine >= screenStart + iLinesPerScreen )
+        {
+        if ( !firstNewScreenHandled && iDoNotShowLastLineAgain )
+            {
+            screenStart++;
+            firstNewScreenHandled = ETrue;
+            }
+
+        // If the shows screen is the last on, scroll the view along with new lines.
+        if (iCurrentScreen == iScreenStarts->Count() - 1)
+            {
+            iCurrentScreen++;
+            }
+
+        screenStart += iLinesPerScreen - 1;
+        iScreenStarts->AppendL( screenStart );
+        }
+
+    if ( !iSBFrame )
+        {
+        iSBFrame = new( ELeave ) CEikScrollBarFrame( this, NULL, ETrue );
+
+        iSBFrame->CreateDoubleSpanScrollBarsL(ETrue, EFalse); // non-window owning scrollbar
+        iSBFrame->SetTypeOfVScrollBar(CEikScrollBarFrame::EDoubleSpan);
+
+        iSBFrame->SetScrollBarFrameObserver(this);
+        iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
+        }
+
+    TEikScrollBarModel vSbarModel;
+    vSbarModel.iThumbPosition = iCurrentScreen;
+    vSbarModel.iScrollSpan = iScreenStarts->Count();
+    vSbarModel.iThumbSpan = 1;
+
+    TRect rect(Rect());
+    TEikScrollBarFrameLayout layout;
+    layout.iTilingMode = TEikScrollBarFrameLayout::EInclusiveRectConstant;
+
+    // For EDoubleSpan type scrollbar
+    if (vSbarModel.iThumbPosition + vSbarModel.iThumbSpan > vSbarModel.iScrollSpan)
+        {
+        // Not let scrollbar values overflow
+        vSbarModel.iThumbPosition = vSbarModel.iScrollSpan - vSbarModel.iThumbSpan;
+        }
+
+    TAknDoubleSpanScrollBarModel vDsSbarModel(vSbarModel);
+    iSBFrame->TileL(NULL, &vDsSbarModel, rect, rect, layout);
+    iSBFrame->SetVFocusPosToThumbPos(vDsSbarModel.FocusPosition());
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::CalculateL()
+// Needs to be called in construction, and whenever layout changes.
+// Screen orientation change, etc.
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::CalculateL(const TRect& aRect)
+    {
+    // DebugPrintF(_L("CEdtaScreenTextBuffer::CalculateL, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY  );
+
+    TRect rect(0,0,0,0);
+
+    iCurrentScreen = 0;
+
+    iFont = AknLayoutUtils::FontFromId(EAknLogicalFontSecondaryFont);
+
+    // Calculate various text positioning parameters
+    iBaseLineDelta = iFont->HeightInPixels() * KLineHeightCent / KCent;
+
+    TInt mainPaneWidth( aRect.iBr.iX - aRect.iTl.iX );
+    TInt mainPaneHeight( aRect.iBr.iY - aRect.iTl.iY );
+    // Line width is 90% (by default) of client rect, and horizontal margins 10%
+    iLineWidth = mainPaneWidth * KLineWidthCent / KCent;
+
+    iTopBaseLineX = ( mainPaneWidth - iLineWidth ) / 2;
+
+    // top margin is 7% (by default) of the client rect
+    TInt topMargin = mainPaneHeight * KHeightMarginCent / KCent;
+    iTopBaseLineY = topMargin + iFont->AscentInPixels();
+
+    // minimum bottom margin is 3% (by default) of the client rect
+    TInt bottomMargin = mainPaneHeight * KBottomMarginCent / KCent;
+    iLinesPerScreen =
+        ( mainPaneHeight - topMargin - bottomMargin ) / iBaseLineDelta;
+
+    iTextAlign = CGraphicsContext::ELeft;
+
+    // Text must not be deleted, otherwise all accumulated data will be lost.
+    if ( !iText )
+        {
+        // Every text line on screen is one entry in this array
+        iText = new( ELeave ) CArrayPtrFlat<HBufC>( KInitialScreenBufferSize );
+        iText->AppendL(NULL); // Extra newline for visual reasons
+        }
+
+     if ( iScreenStarts )
+        {
+        delete iScreenStarts;
+        iScreenStarts = NULL;
+        }
+
+
+    // This array contains indices for lines that start the subsequent
+    // screens, for custom scrolling
+    iScreenStarts = new( ELeave ) CArrayFixFlat<TInt>( KInitialScreenStartAmount );
+    // Initialisation: first screen starts at line 0.
+    iScreenStarts->AppendL( 0 );
+
+    if ( iSBFrame )
+        {
+        delete iSBFrame;
+        iSBFrame = NULL;
+        }
+
+    UpdateScrollIndicatorL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CEdtaScreenTextBuffer::HandleResourceChange()
+// -----------------------------------------------------------------------------
+void CEdtaScreenTextBuffer::HandleResourceChange(TInt aType)
+    {
+    switch ( aType )
+        {
+        case KEikDynamicLayoutVariantSwitch :
+            {
+            TRAPD( error, CalculateL( iAvkonAppUi->ClientRect() ));
+
+            if( error != KErrNone )
+                {
+                DebugPrintF(_L("CEdtaScreenTextBuffer::HandleResourceChange: CalculateL -method failed: %d"), error );
+                }
+            else
+                {
+                DrawNow();
+                }
+            }
+            break;
+
+        case KAknsMessageSkinChange :
+            {
+            __ASSERT_DEBUG(iSBFrame, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::HandleResourceChange: iSBFrame == NULL") ));
+
+            TRAPD( error,
+                {
+                iSBFrame->CreateDoubleSpanScrollBarsL(ETrue, EFalse); // window owning scrollbar
+                iSBFrame->SetTypeOfVScrollBar(CEikScrollBarFrame::EDoubleSpan);
+                iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOn);
+                UpdateScrollIndicatorL();
+                }
+            );
+
+            if( error != KErrNone )
+                {
+                DebugPrintF(_L("CEdtaScreenTextBuffer::HandleResourceChange: Create ScrollBars failed: %d"), error );
+                __ASSERT_DEBUG( error == KErrNone, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::HandleResourceChange => Skin change caused panic") ));
+                }
+            }
+
+        default:
+            {
+            CCoeControl::HandleResourceChange(aType);
+            }
+            break;
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CEdtaScreenTextBuffer::MopSupplyObject()
+// Pass skin information if need.
+// ---------------------------------------------------------
+TTypeUid::Ptr CEdtaScreenTextBuffer::MopSupplyObject(TTypeUid aId)
+    {
+    return CCoeControl::MopSupplyObject(aId);
+    }
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/group/UT_easydialingplugin.mmp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project file
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "data_caging_paths.hrh"
+#include "../../../inc/easydialingconstants.hrh"
+
+// DEFINES
+#define         KMyUniqueUid3 0x200212A2
+#define         KEUnitTestDllUid2 0x1000af5a
+
+// Build target
+TARGET          UT_easydialingplugin.dll
+TARGETTYPE      dll
+UID             KEUnitTestDllUid2 KMyUniqueUid3
+
+CAPABILITY      ALL -TCB
+VENDORID        0x101FB657
+
+// Source files
+SOURCEPATH      ../src
+SOURCE          DllMain.cpp           // Test code
+SOURCE			CEasyDialingPlugin_Test.cpp
+SOURCE			createtestcontactbase.cpp
+SOURCE 			dummyparentcontrol.cpp
+
+SOURCEPATH      ../../../src
+SOURCE			easydialingplugin.cpp
+SOURCE          easydialinglistbox.cpp
+SOURCE          easydialinglistboxdata.cpp
+SOURCE          easydialinglistboxitemdrawer.cpp
+SOURCE          easydialinglistboxview.cpp
+SOURCE          easydialingcenreplistener.cpp
+SOURCE          easydialingcontactdata.cpp
+SOURCE          easydialingcontactdatamanager.cpp
+SOURCE          easydialingutils.cpp
+
+// Code under test
+
+// Include paths
+USERINCLUDE     ../inc
+USERINCLUDE     ../../../inc
+USERINCLUDE     ../../../traces
+USERINCLUDE     ../../../edcontactor/inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE  /epoc32/include/Digia/EUnit
+SYSTEMINCLUDE    /epoc32/include/internal
+SYSTEMINCLUDE    /epoc32/include/ecom
+
+SOURCEPATH      ../../../data
+
+START RESOURCE 200212A0.rss
+    LANG    SC
+    TARGET  easydialingplugin.rsc
+END
+
+START RESOURCE easydialingpluginresources.rss
+    HEADER
+    TARGETPATH  \resource
+    TARGET      easydialingpluginresources.rsc
+	LANGUAGE_IDS
+END
+
+
+// Symbian framework libraries
+
+LIBRARY euser.lib
+LIBRARY ECom.lib
+LIBRARY cone.lib  
+LIBRARY ws32.lib
+LIBRARY eikctl.lib
+LIBRARY eikcore.lib
+LIBRARY eikcoctl.lib
+LIBRARY bafl.lib 
+LIBRARY gdi.lib 
+LIBRARY egul.lib
+LIBRARY apgrfx.lib
+LIBRARY fbscli.lib
+LIBRARY efsrv.lib
+LIBRARY cntmodel.lib
+LIBRARY bitgdi.lib
+LIBRARY etext.lib
+
+// Avkon, Avkon skin and Avkon layout libraries.
+LIBRARY avkon.lib
+LIBRARY aknicon.lib
+LIBRARY aknlistloadertfx.lib
+LIBRARY aknskins.lib 
+LIBRARY aknskinsrv.lib 
+LIBRARY aknswallpaperutils.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY cdlengine.lib
+LIBRARY aknlayout2.lib
+
+// AIW library
+LIBRARY servicehandler.lib
+
+// Predictive search libraries
+LIBRARY PcsUtils.lib
+LIBRARY PsServerClientAPI.lib
+
+// Virtual phonebook library
+LIBRARY VPbkEng.lib
+
+// Phonebook engine
+LIBRARY	pbkeng.lib
+
+// ECE Communication launcher library
+LIBRARY ccaclient.lib
+
+// Central repository
+LIBRARY centralrepository.lib   
+LIBRARY commonengine.lib
+LIBRARY cenrepnotifhandler.lib 
+
+// CPbk2ImageManager
+LIBRARY pbk2presentation.lib
+
+// bitmap handling
+LIBRARY bitmaptransforms.lib
+
+// Easy dialing own contactor module.
+LIBRARY edcontactor.lib
+
+// CMS library used for getting information about contacts.
+//LIBRARY 		  cmsclient.lib
+
+// Service provider settings api
+LIBRARY serviceprovidersettings.lib
+
+// Libraries used for R&D purposes only
+DEBUGLIBRARY flogger.lib
+
+// EasyDialing Eunit Test libarary 
+LIBRARY eunit.lib
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Bld.inf
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+UT_easydialingplugin.mmp
+
+//PRJ_MMPFILES
+
+//UT_easydialingplugin.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/inc/CEasyDialingPlugin_Test.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* 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: 
+*
+*/
+/*
+-----------------------------------------------------------------------------
+This file has been generated with EUnit Pro
+http://www.digia.com/eunit
+-----------------------------------------------------------------------------
+*/
+#ifndef __CEASYDIALINGPLUGIN_TEST_H__
+#define __CEASYDIALINGPLUGIN_TEST_H__
+
+// INCLUDES
+#include <CEUnitTestSuiteClass.h>
+#include <EUnitDecorators.h>
+#include "easydialingplugin.h"
+
+// FORWARD DECLARATIONS
+
+class CDummyParentControl;
+
+/**
+ * Generated EUnit test suite class.
+ */
+NONSHARABLE_CLASS( CEasyDialingPlugin_Test ) : public CEUnitTestSuiteClass, public MDialingExtensionObserver
+    {
+    public:  // Constructors and destructor
+
+        static CEasyDialingPlugin_Test* NewL();
+        static CEasyDialingPlugin_Test* NewLC();
+        ~CEasyDialingPlugin_Test();
+        
+        void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent );
+
+    private: // Constructors
+
+        CEasyDialingPlugin_Test();
+        void ConstructL();
+
+    private: // New methods
+
+         void SetupL();
+        
+         void Teardown();
+        
+         void T_Global_OfferKeyEventLL();
+        
+         void T_Global_Search1();
+         void T_Global_Search2();
+         void T_Global_Search3();
+         void T_Global_Search4(); 
+         void T_Global_Search5(); 
+         void T_Global_Search6(); 
+         void T_Global_Search7(); 
+         void T_Global_Search8();
+         
+         void T_Global__CEasyDialingPluginL();
+
+    private: // Data
+
+        CEasyDialingPlugin* iCEasyDialingPlugin;
+        
+        CActiveSchedulerWait* iWait;
+        
+        CDummyParentControl* iDummyParentControl;
+
+        EUNIT_DECLARE_TEST_TABLE;
+
+    };
+
+#endif      //  __CEASYDIALINGPLUGIN_TEST_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/inc/dummyparentcontrol.h	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  EUnit test file.
+*
+*/
+
+#ifndef DUMMYPARENTCONTROL_H_
+#define DUMMYPARENTCONTROL_H_
+
+#include <coecntrl.h>
+
+class CDummyParentControl : public CCoeControl
+    {
+public:
+    
+    static CDummyParentControl* NewL();
+    
+    ~CDummyParentControl();
+    
+private:
+    
+    CDummyParentControl();
+    
+    void ConstructL();
+    
+    };
+
+#endif /* DUMMYPARENTCONTROL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/CEasyDialingPlugin_Test.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,314 @@
+/*
+* 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: 
+*
+*/
+/*
+-----------------------------------------------------------------------------
+This file has been generated with EUnit Pro
+http://www.digia.com/eunit
+-----------------------------------------------------------------------------
+*/
+#include "CEasyDialingPlugin_Test.h"
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+#include <f32file.h> 
+#include <bautils.h> 
+
+#include "easydialingplugin.h"
+#include "dummyparentcontrol.h"
+
+#include <cntdb.h> 
+#include <cntitem.h> 
+#include <cntfldst.h> 
+#include <bautils.h> 
+
+
+// - Construction -----------------------------------------------------------
+
+CEasyDialingPlugin_Test* CEasyDialingPlugin_Test::NewL()
+    {
+    CEasyDialingPlugin_Test* self = CEasyDialingPlugin_Test::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CEasyDialingPlugin_Test* CEasyDialingPlugin_Test::NewLC()
+    {
+    CEasyDialingPlugin_Test* self = new( ELeave ) CEasyDialingPlugin_Test();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+CEasyDialingPlugin_Test::~CEasyDialingPlugin_Test()
+    {
+    RDebug::Print(_L("EDTest: enter desctructor"));
+    
+    if (iCEasyDialingPlugin)
+        {
+        iCEasyDialingPlugin->RemoveObserver( this );
+        }
+    delete iWait;
+    delete iCEasyDialingPlugin;
+    delete iDummyParentControl;
+    RDebug::Print(_L("EDTest: exit desctructor"));
+    }
+
+CEasyDialingPlugin_Test::CEasyDialingPlugin_Test()
+    {
+    }
+
+
+TInt CreateTestContactDatabaseL();
+
+void CEasyDialingPlugin_Test::ConstructL()
+    {
+    CEUnitTestSuiteClass::ConstructL();
+    CreateTestContactDatabaseL();
+    iWait = new( ELeave )CActiveSchedulerWait();
+    iDummyParentControl = CDummyParentControl::NewL();
+    
+    iCEasyDialingPlugin = CEasyDialingPlugin::NewL();
+    iCEasyDialingPlugin->InitializeL( *iDummyParentControl );
+    iCEasyDialingPlugin->AddObserverL( this );
+    
+    
+    RDebug::Print(_L("EDTest:Construct plugin exit"));
+    }
+
+
+void CEasyDialingPlugin_Test::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent )
+    {
+    if ( aEvent == MDialingExtensionObserver::ESearchComplete )
+        {
+        iWait->AsyncStop();
+        }
+    }
+
+// - Test methods -----------------------------------------------------------
+
+
+
+void CEasyDialingPlugin_Test::SetupL(  )
+    {
+    }
+    
+
+void CEasyDialingPlugin_Test::Teardown(  )
+    {
+    }
+
+
+void CEasyDialingPlugin_Test::T_Global_OfferKeyEventLL(  )
+    {
+    
+    TKeyEvent ke;
+    ke.iCode = 32;
+    ke.iModifiers = 0;
+    ke.iRepeats = 0;
+    ke.iScanCode = 32;
+    
+    iCEasyDialingPlugin->OfferKeyEventL( ke, EEventKey );
+    EUNIT_ASSERT_DESC( iCEasyDialingPlugin, "OfferKeyEventL general assert");
+    
+    }
+    
+
+// -----------------------------------------------------------------------------
+// T_Global_Search*
+// These functions do all kind of searches with easy dialing and check that
+// the count of matching contacts is right. These tests require that a specific
+// test contact data base has been created with CreateTestContactDatabaseL().
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin_Test::T_Global_Search1(  )
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("A") ));
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called. 
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 1 );
+    }
+   
+void CEasyDialingPlugin_Test::T_Global_Search2()
+	{
+	TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("b") ));
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+	TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 1 );
+	}
+
+void CEasyDialingPlugin_Test::T_Global_Search3()
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("C") ));
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 2 );
+    }
+
+void CEasyDialingPlugin_Test::T_Global_Search4()
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("2") ));
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 4 );
+    }
+
+void CEasyDialingPlugin_Test::T_Global_Search5()
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("3") ));
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 4 );
+    }
+
+void CEasyDialingPlugin_Test::T_Global_Search6()
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("8286607") )); // should match to <Tauno P>alo
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 1 );
+    }
+
+void CEasyDialingPlugin_Test::T_Global_Search7()
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("5569304") )); // should match to <Lloyd H>arold
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 1 );
+    }
+
+void CEasyDialingPlugin_Test::T_Global_Search8()
+    {
+    TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("3456407") )); // should match to <Filmi S>uomi
+    iWait->Start();
+    // Now execution stops here until HandleDialingExtensionEvent has been called.
+    
+    TInt count = iCEasyDialingPlugin->MatchingContactCount();
+    EUNIT_ASSERT_EQUALS( count, 2 );
+    }
+
+
+    
+// -----------------------------------------------------------------------------
+// T_Global__CEasyDialingPluginL
+// Destructor test 
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin_Test::T_Global__CEasyDialingPluginL(  )
+    {
+    iCEasyDialingPlugin->~CEasyDialingPlugin();
+    iCEasyDialingPlugin = NULL;
+    iCEasyDialingPlugin = CEasyDialingPlugin::NewL();
+    EUNIT_ASSERT_DESC( ETrue, "Generated assert, replace with real");
+    }
+
+
+
+
+
+
+
+// - EUnit test table -------------------------------------------------------
+
+EUNIT_BEGIN_TEST_TABLE(
+    CEasyDialingPlugin_Test,
+    "Easy dialing plugin test",
+    "UNIT" )
+
+EUNIT_TEST(
+    "OfferKeyEventL",
+    "CEasyDialingPlugin",
+    "OfferKeyEventL",
+    "FUNCTIONALITY",
+    SetupL, T_Global_OfferKeyEventLL, Teardown)
+    
+EUNIT_TEST(
+    "SetInputLL",
+    "CEasyDialingPlugin",
+    "SetInputLL",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search1, Teardown)
+    
+EUNIT_TEST(
+	"Tests matching contact count function.",
+	"CEasyDialingPlugin_Test",
+	"MatchingContactCount",
+	"FUNCTIONALITY",
+	SetupL, T_Global_Search2, Teardown )
+
+EUNIT_TEST(
+    "PCS search test function",
+    "CEasyDialingPlugin_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search3, Teardown )
+    
+EUNIT_TEST(
+    "PCS search test function",
+    "CEasyDialingPlugin_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search4, Teardown )
+    
+EUNIT_TEST(
+    "PCS search test function",
+    "CEasyDialingPlugin_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search5, Teardown )
+    
+EUNIT_TEST(
+    "PCS search test function",
+    "CEasyDialingPlugin_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search6, Teardown )
+    
+EUNIT_TEST(
+    "PCS search test function",
+    "CEasyDialingPlugin_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search7, Teardown )
+    
+EUNIT_TEST(
+    "PCS search test function",
+    "CEasyDialingPlugin_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, T_Global_Search8, Teardown )
+    
+EUNIT_TEST(
+    "~CEasyDialingPlugin",
+    "CEasyDialingPlugin",
+    "~CEasyDialingPlugin",
+    "FUNCTIONALITY",
+    SetupL, T_Global__CEasyDialingPluginL, Teardown)
+    
+EUNIT_END_TEST_TABLE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/DllMain.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  EUnit test file.
+*
+*/
+//  EXTERNAL INCLUDES
+#include <CEUnitTestSuite.h>
+#include "CEasyDialingPlugin_Test.h"
+
+/**
+* T_HelloWorld.dll test suite factory function.
+*/
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    CEasyDialingPlugin_Test* rootSuite = CEasyDialingPlugin_Test::NewL();
+    
+    if (rootSuite == NULL)
+        {
+        User::Panic(_L("Koe"), 3);
+        }
+
+    return rootSuite;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/createtestcontactbase.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  EUnit test file.
+*
+*/
+
+
+
+#include <cntdb.h> 
+#include <cntitem.h> 
+#include <cntfldst.h> 
+#include <cpbkcontactitem.h>
+#include <cpbkcontactengine.h>
+
+
+HBufC* CreateFieldStringL(char* contactdata[], TInt aIx)
+    {
+    char* str = contactdata[aIx];
+    TInt len = 0;
+    
+    while (str[len] != '\0')
+        {
+        len++;
+        }
+    
+    if ( len == 0 )
+        {
+        return NULL;
+        }
+    
+    HBufC *field = HBufC::NewL( len );
+    TPtr des = field->Des();
+    des.SetLength( len );
+    
+    for (TInt i = 0; i < len; i++)
+        {
+        des[i] = (TChar) str[i];
+        }
+    
+    return field;
+    }
+
+
+void AddFieldStringL( char* contactdata[], CPbkContactItem* aContact, TInt aIx, TInt aFieldId )
+    {
+    HBufC* fieldName = CreateFieldStringL( contactdata, aIx );
+    
+    if ( fieldName ) 
+        {
+        CleanupStack::PushL( fieldName );
+        aContact->FindField( aFieldId )->TextStorage()->SetTextL( *fieldName );
+        CleanupStack::PopAndDestroy(fieldName); 
+        }
+    }
+
+
+void AddContactL( char* contactdata[], CPbkContactEngine* engine, TInt aIx)
+    {
+    CPbkContactItem* contact = engine->CreateEmptyContactL();
+    CleanupStack::PushL( contact );
+    
+    AddFieldStringL( contactdata, contact, aIx * 6 + 0, EPbkFieldIdFirstName );
+    AddFieldStringL( contactdata, contact, aIx * 6 + 1, EPbkFieldIdLastName );
+    AddFieldStringL( contactdata, contact, aIx * 6 + 2, EPbkFieldIdPhoneNumberMobile );
+    AddFieldStringL( contactdata, contact, aIx * 6 + 3, EPbkFieldIdPhoneNumberGeneral );
+    AddFieldStringL( contactdata, contact, aIx * 6 + 4, EPbkFieldIdCompanyName );
+    AddFieldStringL( contactdata, contact, aIx * 6 + 5, EPbkFieldIdEmailAddress );
+        
+    engine->AddNewContactL( *contact );
+    
+    CleanupStack::PopAndDestroy( contact );
+    }
+
+
+
+// ---------------------------------------------------------
+// CreateTestContactDatabaseL
+//
+// Creates a test contact database if it hasn't been created yet.
+// The existence of test base is done through testing if there
+// is a contact matching with word "Dummy". Test data base has
+// a contact for Mr Dummy Contact.
+// This is the primary function of this file. 
+// ---------------------------------------------------------
+//
+TInt CreateTestContactDatabaseL()
+    {
+    
+    TInt nbr_of_contacts = 15;
+    
+    /*
+     * Contact data contains contact data as text strings.
+     * Each contact takes six lines:
+     * - first name
+     * - last name
+     * - cell number
+     * - home number
+     * - company name
+     * - e-mail address
+     * Empty string means that field is not set.
+     */
+
+    char* contactdata[] = 
+    {
+            "Dummy",
+            "Contact",
+            "+1056439939",
+            "035558756",
+            "Ericsson",
+            "dummy.contact@ericsson.sw",
+            
+            "Jaakko",
+            "Helanti",
+            "+358405557631",
+            "034447611",
+            "Nokia",
+            "jaakko.helanti@helanti.com",
+            
+            "Stan",
+            "Laurel",
+            "+0104438839992",
+            "+0104438839000",
+            "MGM",
+            "stan.laurel@heaven.com",
+            
+            "Oliver",
+            "Hardy",
+            "+01078398927",
+            "+10364537882",
+            "MGM",
+            "oliver.hardy@heaven.com",
+            
+            "Harold",
+            "Lloyd",
+            "+102843947",
+            "+10290503958",
+            "Universal",
+            "harold.lloyd@universal.com",
+            
+            "Tauno",
+            "Palo",
+            "+358405557631",
+            "014445466",
+            "Suomi Filmi",
+            "tauno.palo@gmail.com",
+            
+            "Tea",
+            "Ista",
+            "+358475554590",
+            "018723195",
+            "Helsingin Kaupungin Teatteri",
+            "tea.ista@cultureclub.com",
+
+            "Ansa",
+            "Ikonen",
+            "+358471134099",
+            "012388192",
+            "Suomi Filmi",
+            "ansa.ikonen@gmail.com",
+
+            "Bertil",
+            "Nystrom",
+            "+35866377334",
+            "074500998",
+            "Rovaniemen Viuluveistämö",
+            "bertil.nystrom@rvv.com",
+                
+            "",
+            "Onlylastname",
+            "+3585556743",
+            "+35835552727",
+            "",
+            "",
+            
+            "Onlyfirstname",
+            "",
+            "+358405559874",
+            "035553747",
+            "",
+            "",
+               
+            "",
+            "Two-Part Lastname",
+            "+358405557432",
+            "",
+            "",
+            "",
+            
+            "",
+            "",
+            "+35866377334",
+            "074500998",
+            "Just Companyname",
+            "john.doe@justcompanyname.com",
+                
+            "One",
+            "Number",
+            "",
+            "075553266",
+            "Idaho",
+            "",
+            
+            "No",
+            "Number",
+            "",
+            "",
+            "Ericsson",
+            "no.number@ericsson.com",    
+    };
+
+    
+    CPbkContactEngine* engine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( engine );
+    
+    _LIT(KDummyContact, "Dummy");
+        
+    CContactIdArray* findings = engine->FindLC( KDummyContact );
+    
+    // If dummy contact is found, the test database has already been created. 
+    if (findings->Count() > 0)
+        {
+        CleanupStack::PopAndDestroy( findings );
+        CleanupStack::PopAndDestroy( engine );
+        return 0;
+        }
+    
+    CleanupStack::PopAndDestroy( findings );
+
+    for (TInt i = 0; i < nbr_of_contacts; i++ )
+        {
+        AddContactL( contactdata, engine, i );
+        }
+    
+    CleanupStack::PopAndDestroy(engine);
+
+    return nbr_of_contacts;
+    }
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/dummyparentcontrol.cpp	Fri Apr 23 14:59:43 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  EUnit test file.
+*
+*/
+
+// INCLUDE FILES
+#include "dummyparentcontrol.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+CDummyParentControl* CDummyParentControl::NewL()
+    {
+    
+    CDummyParentControl* self = new (ELeave) CDummyParentControl();
+    
+    self->ConstructL();
+    
+    return self;
+    }
+    
+
+CDummyParentControl::CDummyParentControl() : CCoeControl()
+    {
+    
+    }
+    
+CDummyParentControl::~CDummyParentControl()
+    {
+    }
+    
+void CDummyParentControl::ConstructL()
+    {
+    CreateWindowL();
+    }
+
--- a/phoneuis/group/bld.inf	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/group/bld.inf	Fri Apr 23 14:59:43 2010 +0100
@@ -15,6 +15,7 @@
 *              
 */ 
 
+#include "../easydialing/group/bld.inf"
 #include "../dialer/group/bld.inf"
 #include "../BubbleManager/Group/bld.inf"
 #include "../ConnectUtil/group/bld.inf"
Binary file phoneuis/vmbx/help/data/xhtml.zip has changed
--- a/phoneuis/vmbx/help/inc/smsvo.hlp.hrh	Mon Apr 19 16:39:38 2010 +0300
+++ b/phoneuis/vmbx/help/inc/smsvo.hlp.hrh	Fri Apr 23 14:59:43 2010 +0100
@@ -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"