Revision: 201021 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 09 Jun 2010 09:41:11 +0300
branchRCL_3
changeset 39 b8d67d6176f5
parent 34 b68fcd923911
child 44 3c221667e687
Revision: 201021 Kit: 2010123
phone_plat/phone_application_commands_api/phone_application_commands_api.metaxml
phone_plat/phone_application_voip_commands_api/phone_application_voip_commands_api.metaxml
phone_plat/telephony_bubble_extension_api/telephony_bubble_extension_api.metaxml
phone_plat/telephony_logging_extension_api/telephony_logging_extension_api.metaxml
phone_plat/telephony_matching_extension_api/telephony_matching_extension_api.metaxml
phone_plat/telephony_mediator_api/telephony_mediator_api.metaxml
phone_plat/telephony_menu_extension_api/telephony_menu_extension_api.metaxml
phone_plat/video_telephony_mediator_api/video_telephony_mediator_api.metaxml
phoneapp/phoneuicontrol/group/phoneuicontrol.mmp
phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h
phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp
phoneapp/phoneuicontrol/src/cphonestate.cpp
phoneapp/phoneuicontrol/src/cphonestateidle.cpp
phoneapp/phoneuicontrol/src/cphonestateincall.cpp
phoneapp/phoneuistates/inc/cphoneerrormessageshandler.h
phoneapp/phoneuistates/src/cphoneconference.cpp
phoneapp/phoneuistates/src/cphoneemergency.cpp
phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp
phoneapp/phoneuistates/src/cphonesinglecall.cpp
phoneapp/phoneuistates/src/cphonetwosingles.cpp
phoneapp/phoneuiutils/inc/phonerssbase.h
phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp
phoneapp/phoneuiview/group/phoneuiview.mmp
phoneapp/phoneuiview/inc/cphoneviewcontroller.h
phoneapp/phoneuiview/inc/mphoneviewcontrollerobserver.h
phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h
phoneapp/phoneuiview/src/cphonenote.cpp
phoneapp/phoneuiview/src/cphoneview.cpp
phoneapp/phoneuiview/src/cphoneviewcontroller.cpp
phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactmatchstrategy.h
phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp
phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp
phoneengine/phonemodel/inc/cpemessagehandler.h
phoneengine/phonemodel/src/cpemessagehandler.cpp
phoneengine/phonemodel/src/cpephonemodel.cpp
phoneuis/dialer/src/cdialernumberentry.cpp
phoneuis/easydialing/inc/easydialinglistbox.h
phoneuis/easydialing/inc/easydialinglistboxdata.h
phoneuis/easydialing/inc/easydialingplugin.h
phoneuis/easydialing/src/easydialinglistbox.cpp
phoneuis/easydialing/src/easydialinglistboxdata.cpp
phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp
phoneuis/easydialing/src/easydialingplugin.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/phone_application_commands_api/phone_application_commands_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="f8b5e8c2d5c658824216fea358937375" dataversion="2.0">
+  <name>phone_application_commands_api</name>
+  <description>List of phoneapp UI commands. This API is related to telephony_menu_extension_api.</description>
+  <type>c++</type>
+  <collection>phoneapp</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/phone_application_voip_commands_api/phone_application_voip_commands_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="86ebac75a121d58fad9a44aafb0092a4" dataversion="2.0">
+  <name>phone_application_voip_commands_api</name>
+  <description>List of phoneapp VoIP related UI commands. This API is related to telephony_menu_extension_api.</description>
+  <type>c++</type>
+  <collection>phoneapp</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/telephony_bubble_extension_api/telephony_bubble_extension_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="c883bcedfe2b2b72959090b59f8a33a2" dataversion="2.0">
+  <name>telephony_bubble_extension_api</name>
+  <description>This API enables customization of call handling UI (call bubbles). Certain indicators and caller image can be replaced with plug-in based implementation.</description>
+  <type>c++</type>
+  <collection>phoneuis</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.2"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/telephony_logging_extension_api/telephony_logging_extension_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="824866f4d6444f7c1413ddb7c446fff2" dataversion="2.0">
+  <name>telephony_logging_extension_api</name>
+  <description>This plug-in API enables manipulation of telephony event logging.</description>
+  <type>c++</type>
+  <collection>phoneengine</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/telephony_matching_extension_api/telephony_matching_extension_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="97e5b7b32efc3e749f51b863ac60acc0" dataversion="2.0">
+  <name>telephony_matching_extension_api</name>
+  <description>This plug-in API enables manipulation of telephony contact matching.</description>
+  <type>c++</type>
+  <collection>phoneengine</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/telephony_mediator_api/telephony_mediator_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="d195ea66b9998dedd678827e31db6bcd" dataversion="2.0">
+  <name>telephony_mediator_api</name>
+  <description>This mediator API can be used to: end calls, mute/unmute microphone and get call status information.</description>
+  <type>c++</type>
+  <collection>phoneapp</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/telephony_menu_extension_api/telephony_menu_extension_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="1bc03b12f63ce66ce85a12aa6418f5fe" dataversion="2.0">
+  <name>telephony_menu_extension_api</name>
+  <description>This plug-in API enables customization of phoneapp menus.</description>
+  <type>c++</type>
+  <collection>phoneapp</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phone_plat/video_telephony_mediator_api/video_telephony_mediator_api.metaxml	Wed Jun 09 09:41:11 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="48cd1f332053377c8039bd5aec60154d" dataversion="2.0">
+  <name>video_telephony_mediator_api</name>
+  <description>Video telephony specific mediator service. Used by video telephony.</description>
+  <type>c++</type>
+  <collection>phoneapp</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- a/phoneapp/phoneuicontrol/group/phoneuicontrol.mmp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuicontrol/group/phoneuicontrol.mmp	Wed Jun 09 09:41:11 2010 +0300
@@ -102,3 +102,5 @@
 LIBRARY         starterclient.lib
 
 LIBRARY         phonemediatorcenter.lib
+
+LIBRARY         peninputclient.lib
--- a/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h	Wed Jun 09 09:41:11 2010 +0300
@@ -22,6 +22,8 @@
 // INCLUDES
 #include    <bldvariant.hrh> //Feature flags
 #include    <coecntrl.h>
+#include    <peninputsrveventhandler.h>
+#include    <peninputclient.h>
  
 // FORWARD DECLARATIONS
 class MPhoneStateMachine;
@@ -38,7 +40,8 @@
 *
 */
 class CPhoneKeyEventForwarder 
-    : public CCoeControl 
+    : public CCoeControl,
+    public MPenUiActivationHandler
     {
     public:  // Constructors and destructor      
         
@@ -115,6 +118,17 @@
                 const TKeyEvent& aKeyEvent,
                 TEventCode aType );
 
+        /**
+         * @see MPenUiActivationHandler
+         */
+        void OnPeninputUiDeactivated();
+
+        /**
+         * @see MPenUiActivationHandler
+         */        
+        void OnPeninputUiActivated();
+        
+
     private:
 
         /**
@@ -271,6 +285,16 @@
          * Needed to detect situations where key up event is handled before key event.
          */
         TBool iExpectKeyUpEvent;
+        
+        /**
+         * Server that sends events via callback when the virtual keyboard is opened/closed.
+         */     
+        RPeninputServer iPeninputServer;
+        
+        /**
+         * Status of virtual keyboard.
+         */     
+        TBool iVirtualKeyBoardOpen;
     };
 
 #endif      // CPHONEKEYEVENTFORWARDER_H
--- a/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -22,6 +22,7 @@
 #include <bldvariant.hrh>
 #include <featmgr.h>
 #include <PtiDefs.h>
+#include <AknUtils.h>
 
 #include "mphonestatemachine.h"
 #include "mphonekeyeventhandler.h"
@@ -79,6 +80,13 @@
     {
     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneKeyEventForwarder::~CPhoneKeyEventForwarder");
 
+    if ( AknLayoutUtils::PenEnabled() ) 
+        {
+        iPeninputServer.RemovePenUiActivationHandler( this );
+        }
+    
+    iPeninputServer.Close();
+    
     if ( iEikonEnv )
         {
         iEikonEnv->EikAppUi()->RemoveFromStack( this );
@@ -227,6 +235,13 @@
             static_cast<CDialer*>( ptrParam.Pointer() );
             
     iQwertyHandler->AddQwertyModeObserverL( *qwertyObserver );
+    
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        User::LeaveIfError( iPeninputServer.Connect() );
+        iPeninputServer.AddPenUiActivationHandler( this, EPluginInputModeAll );
+        iVirtualKeyBoardOpen = iPeninputServer.IsVisible();
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -419,6 +434,32 @@
     return EKeyWasNotConsumed;
     }
 
+// ---------------------------------------------------------------------------
+// CPhoneKeyEventForwarder::OnPeninputUiDeactivated
+//
+// Gets called when the virtual keyboard editor is closed.
+// ---------------------------------------------------------------------------
+//
+void CPhoneKeyEventForwarder::OnPeninputUiDeactivated()
+    {
+    __LOGMETHODSTARTEND( EPhoneControl,
+            "CPhoneKeyEventForwarder::OnPeninputUiDeactivated");
+    iVirtualKeyBoardOpen = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneKeyEventForwarder::OnPeninputUiActivated
+//
+// Gets called when the virtual keyboard editor is opened.
+// ---------------------------------------------------------------------------
+//
+void CPhoneKeyEventForwarder::OnPeninputUiActivated()
+    {
+    __LOGMETHODSTARTEND( EPhoneControl,
+            "CPhoneKeyEventForwarder::OnPeninputUiActivated");
+    iVirtualKeyBoardOpen = ETrue;
+    }
+
 // -----------------------------------------------------------
 // CPhoneKeyEventForwarder::HandleEventKeyDownBeforeControlStackL
 // -----------------------------------------------------------
@@ -457,6 +498,11 @@
             !IsKeySimulatedByTouchDialer( aKeyEvent ) && 
             iQwertyHandler->IsQwertyInput() &&
             iViewCommandHandle->HandleCommandL( EPhoneViewIsNumberEntryNumericMode ) != EPhoneViewResponseSuccess;
+    
+    // Prevent long tap functionality for key events coming from virtual touch keyboard.
+    // Virtual touch keyboard has own editing functionality for long presses, and telephony
+    // should not add conflicting behaviour on top of that.
+    preventLongTap = preventLongTap || iVirtualKeyBoardOpen;
 
     if ( !preventLongTap ) 
         {
--- a/phoneapp/phoneuicontrol/src/cphonestate.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestate.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -1359,6 +1359,14 @@
             }
         }
 
+    if( NumberEntryManagerL()->IsNumberEntryUsedL() )
+        {
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleTrue );
+        }
+    else
+        {
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleFalse );
+        }
      }
 
 // -----------------------------------------------------------
@@ -1380,6 +1388,8 @@
         {
         CloseCustomizedDialerL();
         }
+
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleTrue );
     }
 // ---------------------------------------------------------
 // CPhoneState::HandleIdleForegroundEventL
--- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -301,7 +301,16 @@
                     }
                 else
                     {
-                    HandleCommandL( EPhoneCmdOptions );
+                    TPhoneCmdParamInteger numberEntryCountParam;
+                    iViewCommandHandle->ExecuteCommandL( 
+                            EPhoneViewGetNumberEntryCount,
+                            &numberEntryCountParam );
+                    
+                    TInt neLength( numberEntryCountParam.Integer() );
+                    if ( neLength > 0 )
+                        {
+                        HandleSendCommandL();
+                        }
                     }               
                 }
             break;
--- a/phoneapp/phoneuicontrol/src/cphonestateincall.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateincall.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -154,8 +154,17 @@
                     }
                 else
                     {
-                    HandleCommandL( EPhoneCmdOptions );
-                    }
+                    TPhoneCmdParamInteger numberEntryCountParam;
+                    iViewCommandHandle->ExecuteCommandL( 
+                           EPhoneViewGetNumberEntryCount,
+                           &numberEntryCountParam );
+                    
+                    TInt neLength( numberEntryCountParam.Integer() );
+                    if ( neLength > 0 )
+                       {
+                       HandleCommandL( EPhoneNumberAcqCmdSendCommand );
+                       }
+                    }      
                 }
             break;
 #endif            
--- a/phoneapp/phoneuistates/inc/cphoneerrormessageshandler.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuistates/inc/cphoneerrormessageshandler.h	Wed Jun 09 09:41:11 2010 +0300
@@ -109,6 +109,11 @@
         * Return ETrue if video call.
         */
         TBool IsVideoCall( const TInt aCallId ) const;
+        
+        /**
+        * Return ETrue if voice call.
+        */
+        TBool IsVoiceCall( const TInt aCallId ) const;
  
     protected:
 		
--- a/phoneapp/phoneuistates/src/cphoneconference.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconference.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -17,6 +17,7 @@
 
 
 // INCLUDES
+#include <ScreensaverInternalPSKeys.h>
 #include <eikmenub.h> 
 #include <eikenv.h>
 #include <StringLoader.h>
@@ -41,6 +42,7 @@
 #include "tphonecmdparamcallstatedata.h"
 #include "cphonekeys.h"
 #include "phonelogger.h"
+#include "cphonepubsubproxy.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -81,6 +83,10 @@
     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled,
         &globalNotifierParam );
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverAllowed ); 
   
     DefineAndSetHoldFlagL();
     
@@ -461,7 +467,12 @@
                 EPhoneViewGetCallIdByState, &callStateData );
                 
             if( callStateData.CallId() > KErrNotFound )
-                {
+                {            
+                CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                                KPSUidScreenSaver,
+                                KScreenSaverAllowScreenSaver,
+                                EPhoneScreensaverNotAllowed );
+            
                 UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
                 iStateMachine->ChangeState( EPhoneStateWaitingInSingle );    
                 }
@@ -839,6 +850,11 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::HandleDiallingL()");
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    
     BeginUiUpdateLC(); 
     
     CloseSelectionListL(); 
@@ -922,6 +938,11 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::HandleIncomingL()");
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    
     BeginUiUpdateLC();
     
     // Hide the number entry if it exists
--- a/phoneapp/phoneuistates/src/cphoneemergency.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneemergency.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -172,11 +172,11 @@
             CPhoneGsmInCall::HandlePhoneEngineMessageL( aMessage, aCallId );
             if ( iStateMachine->PhoneEngineInfo()->CallState( KPEEmergencyCallId ) == EPEStateDialing )
                 {
-                TPhoneCmdParamBoolean isProgressNoteVisible;
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsProgressNoteVisible,
-                      &isProgressNoteVisible );
+                TPhoneCmdParamBoolean isNoteVisible;
+                iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsNoteVisible,
+                      &isNoteVisible );
 
-                if ( !isProgressNoteVisible.Boolean() )
+                if ( !isNoteVisible.Boolean() )
                     {
                     ShowNoteL( EPhoneEmergencyConnectWaitNote );
                     UpdateSetupCbaL();
@@ -667,15 +667,6 @@
 
     switch( aCommand )
         {
-        case EPhoneInCallCmdDtmfManualQuery:
-            if ( iStateMachine->PhoneEngineInfo()->CallState( KPEEmergencyCallId ) == EPEStateDialing )
-                {
-                // Remove emergency connecting note
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote );
-                }
-            commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand );
-            break;
-
         case EPhoneDtmfDialerExit:      // fall through
         case EPhoneDtmfDialerCancel:
              {
@@ -683,11 +674,11 @@
                  {
                  CloseDTMFEditorL();
 
-                 TPhoneCmdParamBoolean isProgressNoteVisible;
-                 iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsProgressNoteVisible,
-                        &isProgressNoteVisible );
+                 TPhoneCmdParamBoolean isNoteVisible;
+                 iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsNoteVisible,
+                        &isNoteVisible );
 
-                 if ( !isProgressNoteVisible.Boolean() )
+                 if ( !isNoteVisible.Boolean() )
                      {
                      ShowNoteL( EPhoneEmergencyConnectWaitNote );
                      UpdateSetupCbaL();
--- a/phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -383,6 +383,10 @@
                 {
                 SendGlobalInfoNoteL( EPhoneNoteCalledNumberHasBarredIncomingCalls );
                 }
+            else if ( IsVoiceCall( aErrorInfo.iCallId ))
+                {
+                SendGlobalWarningNoteL( EPhoneNoteCallInfoCauseValue21 );
+                }
             break;
             
         case ECCPErrorMovedPermanently:
@@ -578,4 +582,23 @@
         ->CallType( aCallId )== EPECallTypeVideo );
     }
     
+// -----------------------------------------------------------
+// CPhoneErrorMessagesHandler::IsVoiceCall
+// -----------------------------------------------------------
+//
+TBool CPhoneErrorMessagesHandler::IsVoiceCall( const TInt aCallId ) const
+    {
+    __LOGMETHODSTARTEND( EPhoneControl, "CPhoneErrorMessagesHandler::IsVoiceCall() ");
+
+    if( aCallId == KErrNotFound )
+        {
+       // Illegal call id, check call type command
+        return ( iStateMachine->PhoneEngineInfo()->CallTypeCommand()
+            == EPECallTypeCSVoice );  
+        }
+     
+    return ( iStateMachine->PhoneEngineInfo()
+            ->CallType( aCallId )== EPECallTypeCSVoice );
+	}
+
 // End of File
--- a/phoneapp/phoneuistates/src/cphonesinglecall.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonesinglecall.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -27,6 +27,7 @@
 #include <connect/sbdefs.h>
 #include <videotelcontrolmediatorapi.h>
 #include <MediatorDomainUIDs.h>
+#include <ScreensaverInternalPSKeys.h>
 
 #include "cphonesinglecall.h"
 #include "tphonecmdparamstring.h"
@@ -114,6 +115,10 @@
     iCallId = callStateData.CallId();
     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
 
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverAllowed );
     
     // Update phone number availability for menu use
     PhoneNumberAvailableInPhoneEngineL( callStateData.CallId() );
@@ -494,6 +499,11 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneSingleCall::HandleIncomingL()");
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    
     BeginUiUpdateLC();
     
     // Hide the number entry if it exists
@@ -608,6 +618,11 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneSingleCall::HandleDiallingL()");
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    
     BeginUiUpdateLC();
     
     SetNumberEntryVisibilityL(EFalse);
--- a/phoneapp/phoneuistates/src/cphonetwosingles.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonetwosingles.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -17,6 +17,7 @@
 
 
 // INCLUDES
+#include <ScreensaverInternalPSKeys.h>
 #include <eikmenub.h> 
 #include <eikenv.h>
 #include <StringLoader.h>
@@ -39,6 +40,7 @@
 #include "tphonecmdparamcallstatedata.h"
 #include "phonestatedefinitionsgsm.h"
 #include "phonelogger.h"
+#include "cphonepubsubproxy.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -78,6 +80,11 @@
     globalNotifierParam.SetBoolean( EFalse );
     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled,
         &globalNotifierParam );
+    
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverAllowed );
     }
 
 // -----------------------------------------------------------
@@ -389,6 +396,11 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneTwoSingles::HandleIncomingL()");
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    
     BeginUiUpdateLC();
     
     // Hide the number entry if it exists
--- a/phoneapp/phoneuiutils/inc/phonerssbase.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiutils/inc/phonerssbase.h	Wed Jun 09 09:41:11 2010 +0300
@@ -347,6 +347,7 @@
     EPhoneNoteNoService,
     EPhoneNoteCallInfoCauseValue16,
     EPhoneNoteCallInfoCauseValue18,
+    EPhoneNoteCallInfoCauseValue21,
     EPhoneNoteCallInfoCauseValue22,
     EPhoneNoteCallInfoCauseValue34,
     EPhoneNoteCallInfoCauseValue38,
--- a/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -1443,7 +1443,11 @@
         case EPhoneNoteCalledNumberHasBarredIncomingCalls:
             retVal = R_NOTE_CALLED_NUMBER_HAS_BARRED_INCOMING_CALLS;
             break;
-
+            
+        case EPhoneNoteCallInfoCauseValue21:
+            retVal = R_CALL_INFO_CAUSE_VALUE21;
+            break;
+            
         case EPhoneNoteCallInfoCauseValue22:
             retVal = R_CALL_INFO_CAUSE_VALUE22;
             break;
--- a/phoneapp/phoneuiview/group/phoneuiview.mmp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/group/phoneuiview.mmp	Wed Jun 09 09:41:11 2010 +0300
@@ -171,3 +171,5 @@
 LIBRARY         serviceprovidersettings.lib
 
 LIBRARY         musmanagerclient.lib
+
+LIBRARY         aknskinsrv.lib
--- a/phoneapp/phoneuiview/inc/cphoneviewcontroller.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/inc/cphoneviewcontroller.h	Wed Jun 09 09:41:11 2010 +0300
@@ -24,6 +24,7 @@
 #include <e32base.h>
 #include <cntdef.h>
 #include <cphcntspeeddialmonitor.h>
+#include <AknsSrvClient.h>
 
 #include "mphoneviewcommandhandle.h"
 #include "cphonerecoverysystem.h"
@@ -89,8 +90,9 @@
     public MPhoneStatusPaneObserver,
     public MPhoneViewBlockingDialogObserver,
     public MNumberEntryObserver,
-	public MPhoneSecurityModeChangeObserver,
-	public MPhoneViewControllerObserver
+    public MPhoneSecurityModeChangeObserver,
+    public MPhoneViewControllerObserver,
+    public MAknsSkinChangeObserver
     {
     public:  // Constructors and destructor
 
@@ -664,6 +666,33 @@
          */
         static void EffectCleanup(TAny* aThis );
         
+    private: 
+        /**
+         * Called by the skin server when skin content is changed and the
+         * connected client wants to be informed.
+         *
+         * @see MAknsSkinChangeObserver
+         */
+         void SkinContentChanged();
+
+         /**
+         * Called by the skin server to indicate that the current skin
+         * configuration has changed.
+         *
+         * @see MAknsSkinChangeObserver
+         */
+         void SkinConfigurationChanged(
+             const TAknsSkinStatusConfigurationChangeReason aReason );
+
+         /**
+         * Called by the skin server to indicate that the available
+         * skin packages have changed.
+         *
+         * @see MAknsSkinChangeObserver
+         */
+         void SkinPackageChanged(
+             const TAknsSkinStatusPackageChangeReason aReason );
+        
     private:    // Data
 
         CPhoneView* iPhoneView;
@@ -812,6 +841,9 @@
         TBool iNeedToReturnToForegroundAppAfterCall;
         
         CAknIncallBubble* iIncallBubble;
+        
+        // Server wich sends events about background image changes
+        RAknsSrvSession iSkinServerSession;
     };
 
 #endif // CPHONEVIEWCONTROLLER_H
--- a/phoneapp/phoneuiview/inc/mphoneviewcontrollerobserver.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/inc/mphoneviewcontrollerobserver.h	Wed Jun 09 09:41:11 2010 +0300
@@ -38,11 +38,6 @@
     * Sets incall small bubble´s visibility in special cases.
     */
     virtual void AllowInCallBubbleInSpecialCases() = 0;
-	 
-    /**
-    * Sets Incall bubble´s visibility.
-    */   
-    virtual void SetIncallBubbleVisibility( TBool aIncallBubbleVisible ) = 0;
     };
 
 #endif /* MPHONEVIEWCONTROLLEROBSERVER_H_ */
--- a/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h	Wed Jun 09 09:41:11 2010 +0300
@@ -233,6 +233,8 @@
     EPhoneViewSetConferenceAndWaitingVideo,
     EPhoneViewLaunchMultimediaSharing,
     EPhoneViewGetQwertyModeObserver,
+    EPhoneViewSetIncallBubbleTrue,
+    EPhoneViewSetIncallBubbleFalse,
 
     EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list.
 };
--- a/phoneapp/phoneuiview/src/cphonenote.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphonenote.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -88,7 +88,9 @@
     // Let the command observer process the command
     iCommandObserver.ProcessCommandL( aCommand );
 
-    return EFalse; // so that the dialog will not disappear
+    // So that the dialog will not disappear, or must disappear
+    // EPhoneInCallCmdDtmfManualQuery since it can be already deleted.
+    return ( aCommand == EPhoneInCallCmdDtmfManualQuery ); 
     }
     
 // ---------------------------------------------------------
--- a/phoneapp/phoneuiview/src/cphoneview.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphoneview.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -192,7 +192,6 @@
     {
     __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::ViewDeactivated()");
     SetActivatePreviousApp( EFalse );
-    iViewControllerObserver->SetIncallBubbleVisibility( EFalse );
     DrawDeferred();
     }
 
--- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -265,6 +265,8 @@
     iAknUiServerClient = CAknSgcClient::AknSrv();
     
     iIncallBubble = CAknIncallBubble::NewL();
+    
+    User::LeaveIfError( iSkinServerSession.Connect( this ) );
     }
 
 // -----------------------------------------------------------------------------
@@ -290,6 +292,8 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIView,
                         "CPhoneViewController::~CPhoneViewController()" );
+    iSkinServerSession.Close();
+    
     delete iButtonsController;
     delete iDialerController;
     delete iToolbarController;
@@ -645,6 +649,20 @@
             }
             break;
 
+        case EPhoneViewSetIncallBubbleTrue:
+            {
+            // Allow small call bubble, if call handling view is in background and allow for dialer also
+            SetIncallBubbleVisibility( ETrue );
+            }
+            break;
+
+        case EPhoneViewSetIncallBubbleFalse:
+            {
+            // Don't allow small call bubble, if call handling view is not in foreground
+            SetIncallBubbleVisibility( EFalse );
+            }
+            break;
+
         default:
             __PHONELOG( EBasic, EPhonePhoneapp,
                 "CPhoneViewController::ExecuteCommandL -> UnKnownMessage !");
@@ -2171,33 +2189,49 @@
 	iMenuController->SetSecurityMode( aIsEnabled );
 	if ( iDialer )
 		{
-        CDialingExtensionInterface* easyDialing = iDialer->GetEasyDialingInterface();
-        if ( easyDialing )
+        iDialerController->SetRestrictedDialer( aIsEnabled );
+	
+        if ( iDialerActive && iSecurityMode != aIsEnabled )
             {
+            CDialingExtensionInterface* easyDialing = iDialer->GetEasyDialingInterface();
+            if ( easyDialing )
+                {
+                if ( aIsEnabled )
+                    {
+                    // Reset the Easy Dialing just in case, this clears the existing matches
+                    // when restricted mode is activated
+                    easyDialing->Reset();
+                    }
+                else
+                    {
+                    if ( easyDialing->IsEnabled() )
+                        {
+                        // If Easy Dialing is enabled, set the input from the numeric entry
+                        // field for updating the search result when restricted mode is
+                        // deactivated.
+                        TBuf<KDialerInputMaxChars> buf;
+                        iDialer->NumberEntry()->GetTextFromNumberEntry( buf );
+                        TRAP_IGNORE( easyDialing->SetInputL( buf ) );
+                        }
+                    }
+                }
+            iDialer->RelayoutAndDraw();
+            
+            // also update cba if security mode changes while dialer is open
+            TPhoneCmdParamInteger integerParam;
             if ( aIsEnabled )
                 {
-                // Reset the Easy Dialing just in case, this clears the existing matches
-                // when restricted mode is activated
-                easyDialing->Reset();
+                iNoteController->DestroyNote();
+                integerParam.SetInteger( CPhoneMainResourceResolver::Instance()->
+                        ResolveResourceID( EPhoneEmergencyModeNoteCBA ) );
                 }
             else
                 {
-                if ( easyDialing->IsEnabled() )
-                    {
-                    // If Easy Dialing is enabled, set the input from the numeric entry
-                    // field for updating the search result when restricted mode is
-                    // deactivated.
-                    TBuf<KDialerInputMaxChars> buf;
-                    iDialer->NumberEntry()->GetTextFromNumberEntry( buf );
-                    easyDialing->SetInputL( buf );
-                    }
+                integerParam.SetInteger( CPhoneMainResourceResolver::Instance()->
+                        ResolveResourceID( EPhoneNumberAcqCBA ) );
                 }
+            TRAP_IGNORE( ExecuteCommandL( EPhoneViewUpdateCba, &integerParam ) );
             }
-        iDialerController->SetRestrictedDialer( aIsEnabled );
-		if ( iSecurityMode != aIsEnabled )
-			{
-			iDialer->RelayoutAndDraw();
-			}
 		}
     if ( iSecurityMode != aIsEnabled )
         {
@@ -3711,7 +3745,7 @@
                                     iStatusPane->StatusPane().SwapControlL(
             TUid::Uid( EEikStatusPaneUidIndic ), iIndiContainer );
             }
-        else
+        else if ( iPreviousIndicatorControl )
             {
             //Restore previous indicator control
             iStatusPane->StatusPane().SwapControlL(
@@ -4128,7 +4162,36 @@
         "CPhoneViewController::SetIncallBubbleVisibility(%d)",
         aVisible );
 
-        TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( aVisible ) ); 
+    TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( aVisible ) ); 
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneViewController::SkinContentChanged
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::SkinContentChanged()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::SkinContentChanged()" );
+    iPhoneView->DrawNow();
     }
 
+// ---------------------------------------------------------------------------
+// CPhoneViewController::SkinConfigurationChanged
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::SkinConfigurationChanged( const TAknsSkinStatusConfigurationChangeReason /*aReason*/ )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::SkinConfigurationChanged()" );
+    iPhoneView->DrawNow();
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneViewController::SkinPackageChanged
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::SkinPackageChanged( const TAknsSkinStatusPackageChangeReason /*aReason*/ )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::SkinPackageChanged()" );
+    iPhoneView->DrawNow();
+    }
 // End of File
--- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactmatchstrategy.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactmatchstrategy.h	Wed Jun 09 09:41:11 2010 +0300
@@ -55,12 +55,14 @@
      * @param aContactManager Contact manager.
      * @param aUriArray Array of contact store URI's used.
      * @param aObserver Observer for finding contacts.
+     * @param aMatchFlags A bitset of flags for matching strategy. Has zero or
+     * more CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags flags set.
      */
     static CPhCntContactMatchStrategy* NewL(
         CVPbkContactManager& aContactManager,
         CPhCntContactStoreUris& aContactStoreUris,
         MVPbkContactFindObserver& aObserver,
-        CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag );
+        TUint32 aMatchFlags );
 
     /**
      * Destructor.
@@ -135,13 +137,10 @@
         CVPbkContactManager& aContactManager,
         CPhCntContactStoreUris& aContactStoreUris,
         MVPbkContactFindObserver& aObserver,
-        CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag );
+        TUint32 aMatchFlags );
 
     void ConstructL();
 
-protected: // data
-    CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags iMatchFlag;
-	
 private: // data
 
     /**
@@ -200,6 +199,18 @@
      */
     CCntRawPhoneNumberExtractor* iNumberExtractor;
 
+protected:  // data
+
+    /**
+     * A bitset of matching strategy flags. Changed from
+     * CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags enum to TUint32
+     * in order to support multiple flags, as in
+     * CVPbkPhoneNumberMatchStrategy::TConfig.
+	 * 
+	 * Protected because a unit test class derives from this class.
+     */
+    TUint32 iMatchFlags;
+
     };
 
 
--- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -118,13 +118,16 @@
     MVPbkContactFindObserver& aObserver,
     TBool aRemoveDuplicates )
     {
+    TUint32 dupesMatch =
+        CVPbkPhoneNumberMatchStrategy::EVPbkDuplicatedContactsMatchFlag |
+        CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag;
+    TUint32 noDupesMatch = CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag;
+    
     return CPhCntContactMatchStrategy::NewL(
         *iContactManager,
         *iContactStoreUris,
         aObserver,
-        aRemoveDuplicates ?
-        CVPbkPhoneNumberMatchStrategy::EVPbkDuplicatedContactsMatchFlag :
-        CVPbkPhoneNumberMatchStrategy::EVPbkMatchFlagsNone );
+        aRemoveDuplicates ? dupesMatch : noDupesMatch );
     }
 
 // ---------------------------------------------------------------------------
--- a/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -20,11 +20,13 @@
 #include <centralrepository.h>
 #include <telconfigcrkeys.h>
 #include <CVPbkContactStoreUriArray.h>
+#include <cntdb.h>  // KBestMatchingPhoneNumbers
 
 #include "cphcntcontactmatchstrategy.h"
 #include "cphcntcontactstoreuris.h"
 #include "CPhoneRawMatchNumberExtractor.h"
 
+
 // Digit count used to match CS number.
 const TInt KPhCntMatchMin = 7;
 const TInt KPhCntMatchMax = 11;
@@ -37,11 +39,11 @@
     CVPbkContactManager& aContactManager,
     CPhCntContactStoreUris& aContactStoreUris,
     MVPbkContactFindObserver& aObserver,
-    CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag ) :
+    TUint32 aMatchFlags ) :
     iContactManager( aContactManager ),
     iContactStoreUris( aContactStoreUris ),
     iObserver( aObserver ),
-    iMatchFlag( aMatchFlag )
+    iMatchFlags( aMatchFlags )
     {
     iContactStoreUris.SetObserver( *this );
     }
@@ -91,14 +93,14 @@
     CVPbkContactManager& aContactManager,
     CPhCntContactStoreUris& aContactStoreUris,
     MVPbkContactFindObserver& aObserver,
-    CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag )
+    TUint32 aMatchFlags )
     {
     CPhCntContactMatchStrategy* self = 
         new( ELeave ) CPhCntContactMatchStrategy( 
             aContactManager,
             aContactStoreUris, 
             aObserver,
-            aMatchFlag );
+            aMatchFlags );
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -242,10 +244,10 @@
 TInt CPhCntContactMatchStrategy::DoCreateMatchStrategy()
     {
     CVPbkPhoneNumberMatchStrategy::TConfig config( 
-            iNumberOfDigits,
+            KBestMatchingPhoneNumbers,
             *iUriArray,
             CVPbkPhoneNumberMatchStrategy::EVPbkSequentialMatch, 
-            iMatchFlag
+            iMatchFlags
             );
     TRAPD( err, iMatchStrategy = CVPbkPhoneNumberMatchStrategy::NewL( 
                     config, 
--- a/phoneengine/phonemodel/inc/cpemessagehandler.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneengine/phonemodel/inc/cpemessagehandler.h	Wed Jun 09 09:41:11 2010 +0300
@@ -593,6 +593,13 @@
         * Handle disable service
         */     
         void HandleDisableService();
+        
+        /**
+        * Adds SIM rejected MO CS call to logs. 
+        * @param aCallId is the identification number of the call.   
+        * @return KErrNone if succesfull
+        */
+        TInt AddSIMRejectedMoCsCallToLog( const TInt aCallId );
    
     private: // New functions
         
--- a/phoneengine/phonemodel/src/cpemessagehandler.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneengine/phonemodel/src/cpemessagehandler.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -3009,5 +3009,42 @@
         mediatorUpdater->UpdateRemotePartyInfo();
         }
     }
-	
+
+// -----------------------------------------------------------------------------
+// CPEMessageHandler::AddSIMRejectedMoCsCallToLog
+// -----------------------------------------------------------------------------
+//	
+TInt CPEMessageHandler::AddSIMRejectedMoCsCallToLog( const TInt aCallId )
+    {
+    TInt errorCode( ECCPErrorGeneral );
+    
+    errorCode = iCallHandling.GetCallInfo( *iCallInfo, aCallId );
+    
+    if ( errorCode == ECCPErrorNone )
+        {
+        TPEState callState;
+        callState = iCallHandling.GetCallState( aCallId );
+        TPECallType callType;
+		callType = iDataStore.CallType( aCallId );
+
+	    errorCode = ECCPErrorNotFound;
+	            
+        if ( EPEStateIdle == callState 
+             && EPECallTypeCSVoice == callType )
+            {
+            SetPhoneNumberForCallLogging( aCallId );
+            
+            errorCode = UpdateClientInfo( aCallId );       
+            
+            // Calls have to log also without a contact (ECCPErrorNotFound).
+            if ( errorCode == ECCPErrorNone || errorCode == ECCPErrorNotFound )
+                {
+                // Save the rest of information to EngineInfo.
+                SetLoggingInfo( aCallId, callState );
+                errorCode = iLogHandling.SaveCallEntry( aCallId );
+                }
+            }
+        }
+    return errorCode;
+    }
 //  End of File  
--- a/phoneengine/phonemodel/src/cpephonemodel.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneengine/phonemodel/src/cpephonemodel.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -980,8 +980,15 @@
 	    TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo();
     	errorInfo.iCallId = aCallId;
     	errorInfo.iErrorType = EPECcp;
-        iEngineMonitor.HandleError( errorInfo );
-	    }
+
+        if ( ECCPErrorCCCallRejected == errorInfo.iErrorCode )
+            {
+            // Call direction is not set if the call was rejected before Dialing-state
+            iEngineInfo->SetCallDirection( RMobileCall::EMobileOriginated, aCallId );
+            iMessageHandler->AddSIMRejectedMoCsCallToLog( aCallId );
+            }
+    	iEngineMonitor.HandleError( errorInfo );
+  	    }
     else if ( message == MEngineMonitor::EPEMessageServiceHandlingError )
         {
         TEFLOGSTRING( 
--- a/phoneuis/dialer/src/cdialernumberentry.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/dialer/src/cdialernumberentry.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -159,9 +159,15 @@
     {
     DIALER_PRINT("numberentry::SetFocus<");
     
-    CCoeControl::SetFocus( aFocus, aDrawNow );
-    iEditor->SetFocus( aFocus );
+    if ( aFocus != IsFocused() )
+        {
+        CCoeControl::SetFocus( aFocus, aDrawNow );
+        }
     
+    if ( aFocus != iEditor->IsFocused() )
+        {
+        iEditor->SetFocus( aFocus );
+        }
     DIALER_PRINT("numberentry::SetFocus>");
     }
 
--- a/phoneuis/easydialing/inc/easydialinglistbox.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/inc/easydialinglistbox.h	Wed Jun 09 09:41:11 2010 +0300
@@ -185,7 +185,7 @@
     
     /** Background control context. Owned. */
     CAknsFrameBackgroundControlContext* iBGContext;
-        
+    
     /** Pointer to a contact data manager; Not Own. */
     CEasyDialingContactDataManager* iContactDataManager;
     
--- a/phoneuis/easydialing/inc/easydialinglistboxdata.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/inc/easydialinglistboxdata.h	Wed Jun 09 09:41:11 2010 +0300
@@ -62,20 +62,15 @@
     
     
     /**
-    * Constructor.
-    */
-    CEasyDialingListBoxData();
-       
-    /**
      * Destructor
      */
     ~CEasyDialingListBoxData();
        
     /**
-    * Second phase constructor of the class.
+    * Two phased constructor of the class.
     * @return   Pointer to the instance. 
     */
-    static CEasyDialingListBoxData* NewL();
+    static CEasyDialingListBoxData* NewL( CCoeEnv& aCoeEnv );
      
     /**
     * Draws selected item.
@@ -100,7 +95,7 @@
     * @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.
@@ -114,6 +109,14 @@
     
 protected:
         
+    /**
+    * C++ Constructor
+    */
+    CEasyDialingListBoxData( CCoeEnv& aCoeEnv );
+    
+    /**
+     * Second phase constructor 
+     */
     void ConstructLD();
    
 private:
@@ -150,7 +153,7 @@
         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.
@@ -174,7 +177,7 @@
      * 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   aNameRectUnMirrored Name rect, after which the icon is drawn
      * @param   aEffectiveRect The whole listbox item rect. Used for mirroring.
      */
     void DrawFavouriteIcon(
@@ -184,6 +187,9 @@
     
 private:
     
+    /** Control environment */
+    CCoeEnv& iCoeEnv;
+    
     /** Font to be used showing contact name. Not owned. */
     CFont* iContactNameFont;
     
@@ -198,10 +204,10 @@
     
     /** 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;
     
--- a/phoneuis/easydialing/inc/easydialingplugin.h	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/inc/easydialingplugin.h	Wed Jun 09 09:41:11 2010 +0300
@@ -30,9 +30,6 @@
 #include "medcontactorobserver.h"
 #include "easydialingcontactdatamanager.h"  // for TNameOrder
 
-// Phonebook engine API
-#include <MVPbkContactStoreListObserver.h>
-
 // ListBox Observer API
 #include <eiklbo.h>
 
@@ -78,7 +75,6 @@
 * Easy dialing plugin.
 */
 class CEasyDialingPlugin : public CDialingExtensionInterface,
-                           public MVPbkContactStoreListObserver,
                            public MPsResultsObserver,
                            public MCCAObserver,
                            public MEasyDialingCenrepListenerObserver,
@@ -220,27 +216,6 @@
 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 );
@@ -446,6 +421,11 @@
      */  
     void SetInfoLabelColourL();
     
+    /**
+     * Sets info label visibility.
+     */  
+    void SetInfoLabelVisibleL( TBool aVisible );
+    
 private:
 
     /** Textual version of current search string. */
--- a/phoneuis/easydialing/src/easydialinglistbox.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/src/easydialinglistbox.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -98,7 +98,7 @@
 //
 CEasyDialingListBox::~CEasyDialingListBox()
     {
-    delete iBGContext;    
+    delete iBGContext;
     delete iLongTapDetector;
     }
 
@@ -121,7 +121,7 @@
     
     iBGContext = CAknsFrameBackgroundControlContext::NewL( KAknsIIDQsnFrPopupSub,
             Rect(), Rect(), EFalse );
-       
+    
     // ContactDataManager is accessed from SizeChanged. If list item size
     // changes -> thumbnail size changes
     iContactDataManager = aContactDataManager;
@@ -178,7 +178,7 @@
 //
 void CEasyDialingListBox::CreateItemDrawerL()
     {
-    CEasyDialingListBoxData* celldata = CEasyDialingListBoxData::NewL();
+    CEasyDialingListBoxData* celldata = CEasyDialingListBoxData::NewL( *iEikonEnv );
     CleanupStack::PushL( celldata );
     iItemDrawer = new(ELeave) CEasyDialingListBoxItemDrawer(Model(), iEikonEnv->NormalFont(), celldata);
     CleanupStack::Pop( celldata );  
--- a/phoneuis/easydialing/src/easydialinglistboxdata.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/src/easydialinglistboxdata.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -60,14 +60,14 @@
 const TInt KContactNameFontHeightPercent = 35;
 
 // KCompanyNameFontHeightPercent is company name font height relative to list item height.
-const TInt KCompanyNameFontHeightPercent = 30;
+const TInt KCompanyNameFontHeightPercent = 28;
 
-// KTextBoundingBoxHeightPercent gives the text bounding box height in percentages 
+// KTextBoundingBoxHeightPercent gives the text bounding box height in percents
 // 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
+// The value is between 0 and 100. 0 means in top part, 50 means in the middle, 100 means in the
 // bottom. 
 const TInt KTextPlacementPercent = 70;
 
@@ -228,8 +228,8 @@
 // 
 // -----------------------------------------------------------------------------
 //
-CEasyDialingListBoxData::CEasyDialingListBoxData() :
-CFormattedCellListBoxData()
+CEasyDialingListBoxData::CEasyDialingListBoxData( CCoeEnv& aCoeEnv ) :
+CFormattedCellListBoxData(), iCoeEnv( aCoeEnv )
     {
     }
 
@@ -242,7 +242,7 @@
     {
     // Release fonts. ReleaseFont function can cope with null pointer
     // so we don't need to null check them.
-    CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
+    CWsScreenDevice& screenDev = *( iCoeEnv.ScreenDevice() );
     screenDev.ReleaseFont( iContactNameFont );
     screenDev.ReleaseFont( iCompanyNameFont );
     
@@ -260,9 +260,9 @@
 // 
 // -----------------------------------------------------------------------------
 //
-CEasyDialingListBoxData* CEasyDialingListBoxData::NewL()
+CEasyDialingListBoxData* CEasyDialingListBoxData::NewL( CCoeEnv& aCoeEnv )
     {
-    CEasyDialingListBoxData* self = new (ELeave) CEasyDialingListBoxData();
+    CEasyDialingListBoxData* self = new (ELeave) CEasyDialingListBoxData( aCoeEnv );
     
     CleanupStack::PushL( self );
     self->ConstructLD();
@@ -562,8 +562,8 @@
 //
 void CEasyDialingListBoxData::DrawFavouriteIcon(
         CWindowGc& aGc, 
-         TRect aNameRectUnMirrored,
-         TRect aEffectiveRect) const
+        TRect aNameRectUnMirrored,
+        TRect aEffectiveRect ) const
     {
     TRect favouriteIconBoundingBox;
 
@@ -577,7 +577,7 @@
     aGc.SetBrushStyle( CGraphicsContext::ENullBrush );
     TRect sourceRect( TPoint(0,0), favouriteIconBoundingBox.Size() );
 
-    if( AknsUtils::SkinInstance()->GetCachedItemData(KAknsIIDQgnFsContactsFavorite) )
+    if ( AknsUtils::SkinInstance()->GetCachedItemData(KAknsIIDQgnFsContactsFavorite) )
         {
         AknsDrawUtils::DrawCachedImage( AknsUtils::SkinInstance(), aGc, sourceRect, 
                 KAknsIIDQgnFsContactsFavorite );
@@ -587,8 +587,8 @@
         // 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);
+        aGc.BitBltMasked( favouriteIconBoundingBox.iTl, iFavouriteIcon->Bitmap(), 
+                sourceRect, iFavouriteIcon->Mask(), ETrue );
         }
     }
 // -----------------------------------------------------------------------------
@@ -625,7 +625,7 @@
 //
 void CEasyDialingListBoxData::ObtainFonts( TInt aItemHeight )
     {
-    CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
+    CWsScreenDevice& screenDev = *( iCoeEnv.ScreenDevice() );
     
     // Release previous fonts. ReleaseFont function can cope with null pointers
     // so we don't need to null check them.
@@ -1078,7 +1078,7 @@
     aGc.UseFont( aFont );
     aGc.SetBrushStyle( CGraphicsContext::ENullBrush );
 
-    while ( TextUtils::ColumnText( textPiece , textPieceIndex, visualBuf, KHighlightSeparatorChar) == KErrNone ) 
+    while ( TextUtils::ColumnText( textPiece, textPieceIndex, visualBuf, KHighlightSeparatorChar) == KErrNone ) 
         {
         if (! DrawPieceOfText( aBoundingBox, xOffset, aGc, textPiece, match, aFont, aColors, aHighLight ))
             {
--- a/phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -123,8 +123,6 @@
         transApi->StopDrawing();
         }
 
-//    TBool removeicon = (!aItemIsSelected && !ItemMarkReverse()) || (aItemIsSelected && ItemMarkReverse());
-
     CEasyDialingListBoxData::TExtendedColors colors;
     colors.iText = iTextColor;
     colors.iBack = iBackColor;
--- a/phoneuis/easydialing/src/easydialingplugin.cpp	Tue May 25 12:41:50 2010 +0300
+++ b/phoneuis/easydialing/src/easydialingplugin.cpp	Wed Jun 09 09:41:11 2010 +0300
@@ -61,10 +61,6 @@
 // Service provider settings api
 #include <spsettingsvoiputils.h>
 
-// AIW header files
-#include <AiwContactAssignDataTypes.h>
-#include <AiwContactSelectionDataTypes.h>
-
 #include <StringLoader.h>
 
 // CCA contactor service.
@@ -136,7 +132,7 @@
 
 TBool IsStrictlyBidirectional( const TDesC& aText );
 
-static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc );
+static HBufC* AllocWithoutHighlightSeparatorsLC( const TDesC& aDesc );
 
 static TBool IsItuTCharacter( TChar aChar );
 
@@ -195,9 +191,6 @@
     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);
@@ -246,11 +239,6 @@
     {
     iObservers.Reset();
     
-    if ( iContactManager )
-        {
-        TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
-        }
-
     delete iCenrepListener;
     delete iContactDataManager;
     delete iPredictiveSearchQuery;
@@ -258,7 +246,7 @@
     delete iContactStoreUriArray;
     iContactDataStores.ResetAndDestroy();
 
-    if (iPredictiveContactSearchHandler)
+    if ( iPredictiveContactSearchHandler )
         {
         iPredictiveContactSearchHandler->RemoveObserver(this);
         }
@@ -278,7 +266,7 @@
 
     delete iContactListBox;
 
-    if (iContactLauncher)
+    if ( iContactLauncher )
         {
         iContactLauncher->Close();
         }
@@ -719,7 +707,7 @@
 void CEasyDialingPlugin::FocusChanged( TDrawNow aDrawNow )
     {
     iContactListBox->SetFocus( IsFocused() );
-    if( !IsFocused() )
+    if ( !IsFocused() )
         {
         // To be on the safe side, cancel async callback and reset input block.
         CancelActionLaunchAndInputBlock();
@@ -763,18 +751,12 @@
         // However if user empties number entry, then it's feasible to show
         // effect.
         HideContactListBoxWithEffect();
-        iInfoLabelLine1->SetTextL( *iInfoLabelTextLine1 );
-        iInfoLabelLine2->SetTextL( *iInfoLabelTextLine2 );
-        iInfoLabelLine1->DrawDeferred();
-        iInfoLabelLine2->DrawDeferred();
+        SetInfoLabelVisibleL( ETrue );
         Reset();
         }
     else // proper search string
         {
-        iInfoLabelLine1->SetTextL( KNullDesC );
-        iInfoLabelLine2->SetTextL( KNullDesC );
-        iInfoLabelLine1->DrawDeferred();
-        iInfoLabelLine2->DrawDeferred();
+        SetInfoLabelVisibleL( EFalse );
         iSearchString.Copy( aSearchString.Left( iSearchString.MaxLength() ) );
         LaunchSearchL();
         }
@@ -793,69 +775,6 @@
 
 
 // -----------------------------------------------------------------------------
-// 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
 // -----------------------------------------------------------------------------
@@ -866,10 +785,15 @@
         {
         Reset();
         InformObservers( MDialingExtensionObserver::EEasyDialingDisabled );
+        TRAP_IGNORE( SetInfoLabelVisibleL( EFalse ) );
         }
     else if ( aValue == 1 )
         {
         InformObservers( MDialingExtensionObserver::EEasyDialingEnabled );
+        if ( iSearchString.Length() == 0 )
+            {
+            TRAP_IGNORE( SetInfoLabelVisibleL( ETrue ) );
+            }
         }
     MakeVisible( aValue );
     }
@@ -906,6 +830,8 @@
     if ( iPredictiveContactSearchHandler )
         {
         TRAP_IGNORE( SetSortOrderL( iContactDataManager->NameOrder() ) );
+        // Refresh current results if needed
+        TRAP_IGNORE( DoHandleContactsChangedL() );
         }
     }
 
@@ -926,7 +852,6 @@
 //
 void CEasyDialingPlugin::InformContactorEvent( MEDContactorObserver::TEvent aEvent )
     {
-
     // This callback function simply propagates the events to its own listener.
     switch ( aEvent )
         {
@@ -958,7 +883,6 @@
 //
 void CEasyDialingPlugin::Draw( const TRect& /* aRect */ ) const
     {
-    return;
     }
 
 
@@ -1054,6 +978,18 @@
 void CEasyDialingPlugin::CachingStatus( TCachingStatus& aStatus, TInt& aError )
     {
     OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_CACHINGSTATUS, "PCS CachingStatus: %d, error: %d", ( TUint )( aStatus ), aError );
+    
+    switch ( aStatus )
+        {
+        case ECacheUpdateContactRemoved:
+        case ECacheUpdateContactModified:
+        case ECacheUpdateContactAdded:
+            TRAP_IGNORE( DoHandleContactsChangedL() );
+            break;
+        default:
+            break;
+        }
+    
     LOGSTRING2("EasyDialingPlugin: PCS CachingStatus: %d, error: %d", aStatus, aError );
     }
 
@@ -1255,17 +1191,6 @@
 
     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 )
@@ -1986,6 +1911,14 @@
 //
 void CEasyDialingPlugin::HandleGainingForeground()
     {
+    if ( iNewSearchNeeded && IsEnabled() )
+        {
+        // 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();
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -2023,19 +1956,29 @@
 //
 void CEasyDialingPlugin::DoHandleContactsChangedL()
     {
-    if ( iSearchString.Length() > 0 )
+    if ( iSearchString.Length() > 0 && IsEnabled() )
         {
-        if ( iContactLauncherActive )
+        CAknAppUi* appUi = static_cast<CAknAppUi*>( iCoeEnv->AppUi() );
+        if ( appUi->IsForeground() )
             {
-            // Set the flag to make a search when communication launcher exits.
-            iNewSearchNeeded = ETrue;
+            // Do new search immediately, if contacts change while we are on the
+            // foreground. This can happen for example if view is switched to
+            // dialer while deletion of multiple contacts is still ongoing or if
+            // PCS takes so long to update the cache that view gets changed 
+            // before the update is ready.
+            iContactDataManager->Reload(); // to update thumbnails
+            AsyncActionLaunchL( ELaunchSearch );
             }
         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 );
+            // Set the flag to make a search when we come back to foreground.
+            // This way, we don't make unnecessary searches when several
+            // contacts are imported or deleted, for example.
+            iNewSearchNeeded = ETrue;
+            
+            // Hide previous results so that they won't show up before the
+            // the new search is ready.
+            iContactListBox->MakeVisible( EFalse );
             }
         }
     }
@@ -2129,6 +2072,26 @@
         }    
     }
 
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::SetInfoLabelVisibleL
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::SetInfoLabelVisibleL( TBool aVisible )
+    {
+    if ( aVisible )
+        {
+        iInfoLabelLine1->SetTextL( *iInfoLabelTextLine1 );
+        iInfoLabelLine2->SetTextL( *iInfoLabelTextLine2 );
+        }
+    else
+        {
+        iInfoLabelLine1->SetTextL( KNullDesC );
+        iInfoLabelLine2->SetTextL( KNullDesC );
+        }    
+    iInfoLabelLine1->DrawDeferred();
+    iInfoLabelLine2->DrawDeferred();
+    }
+
 
 /*
  * ==============================================================================
@@ -2319,7 +2282,7 @@
 // removed.
 // -----------------------------------------------------------------------------
 //
-static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc )
+static HBufC* AllocWithoutHighlightSeparatorsLC( const TDesC& aDesc )
     {
     HBufC* resultDesc = aDesc.AllocLC();
     TPtr ptr = resultDesc->Des();