phoneapp/phoneuicontrol/src/cphonestateidle.cpp
branchRCL_3
changeset 62 5266b1f337bd
parent 61 41a7f70b3818
child 69 8baf28733c3d
--- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp	Tue Aug 31 15:14:29 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp	Wed Sep 01 12:30:10 2010 +0100
@@ -27,9 +27,13 @@
 #include <telephonyvariant.hrh>
 #include <featmgr.h>
 #include <settingsinternalcrkeys.h>
+#include <ScreensaverInternalPSKeys.h>
 #include <mpeengineinfo.h>
+#include <activeidle2domainpskeys.h>
 #include <mpeclientinformation.h>
 #include <bldvariant.hrh>
+#include <MProEngEngine.h>
+#include <ProEngFactory.h>
 
 #include "cphonepubsubproxy.h"
 #include "cphonecenrepproxy.h"
@@ -37,8 +41,8 @@
 #include "tphonecmdparaminteger.h"
 #include "tphonecmdparamboolean.h"
 #include "tphonecmdparamglobalnote.h"
-#include "tphonecmdparamkeycapture.h"
 #include "tphonecmdparamstring.h"
+#include "tphonecmdparamspeeddial.h"
 #include "tphonecmdparamboolean.h"
 #include "mphonestatemachine.h"
 #include "phonestatedefinitions.h"
@@ -46,6 +50,7 @@
 #include "cphonekeys.h"
 
 #include "tphonecmdparamcallstatedata.h"
+#include "tphonecmdparamcallheaderdata.h"
 #include "phoneviewcommanddefinitions.h"
 #include "phoneui.hrh"
 #include "phonerssbase.h"
@@ -54,8 +59,13 @@
 #include "cphonepubsubproxy.h"
 #include "phonelogger.h"
 #include "phoneui.pan"
+#include "phoneconstants.h"
 #include "mphonecustomization.h"
+#include <easydialingcommands.hrh>
+#include "mphonesecuritymodeobserver.h"
 
+//CONSTANTS
+const TInt  KMaxParamLength = 1024;
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -66,7 +76,8 @@
     MPhoneStateMachine* aStateMachine, 
     MPhoneViewCommandHandle* aViewCommandHandle,
     MPhoneCustomization* aCustomization ) : 
-    CPhoneState( aStateMachine, aViewCommandHandle, aCustomization )
+    CPhoneState( aStateMachine, aViewCommandHandle, aCustomization ),
+    iCallInitialized( EFalse )
     {
     }
 
@@ -83,6 +94,33 @@
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::ConstructL() ");
     CPhoneState::BaseConstructL();
+    
+    // Set send key activation on.
+    TPhoneCmdParamBoolean boolean;
+    boolean.SetBoolean( ETrue );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetSendKeyDialerActivationFlag, 
+                &boolean );
+    
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewCreatePhoneBookServices ); 
+
+    // If Sim is not ok and we are not at foreground, bring ourselves to foreground
+    // so that the security note can be seen.
+    TPhoneCmdParamInteger foregroundAppParam;
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetForegroundApplication,
+                                         &foregroundAppParam );
+
+    if ( !IsSimOk() )
+        {
+        TPhoneCmdParamInteger uidParam;
+        // Bring Phone app in the foreground
+        uidParam.SetInteger( KUidPhoneApplication.iUid );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground,
+            &uidParam );
+
+        // Set Phone as the top application
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication,
+            &uidParam );
+        }
     }
 
 // -----------------------------------------------------------
@@ -113,17 +151,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
@@ -172,6 +208,11 @@
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleKeyMessageL( ) ");
 
+    if( aMessage == EPhoneKeyLongPress && CheckAppLaunchingL( aCode ) )
+        {
+        return;
+        }
+
     switch ( aCode )
         {
         case EKeyEnd:
@@ -182,7 +223,7 @@
             
         // end-key
         case EKeyNo:
-            HandleEndKeyPressL( aMessage );            
+            HandleEndKeyPressL( aMessage );
             break;
 
         // send-key
@@ -192,10 +233,7 @@
                 {
                 if ( IsNumberEntryUsedL() )
                     {
-                    // Security mode check
-                    TPhoneCmdParamBoolean isSecurityMode;      
-                    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode );
-
+                   
                     TPhoneCmdParamInteger numberEntryCountParam;
                     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount,
                     &numberEntryCountParam );
@@ -206,8 +244,13 @@
                         {
                         return;
                         }
+                    else if ( IsMenuBarVisibleL() )
+                        {
+                        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+                        return;
+                        }
                     
-                    else if ( neLength == 0 && !isSecurityMode.Boolean())
+                    else if ( neLength == 0 && !iStateMachine->SecurityMode()->IsSecurityMode() )
                         {
                         // start logs
                         iViewCommandHandle->HandleCommandL( 
@@ -219,16 +262,11 @@
                 // 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())
+                   if ( iStateMachine->SecurityMode()->IsSecurityMode() )
                         {
-                        // launch dialer.
-                        HandleCommandL(EPhoneNumberAcqSecurityDialer);
+                        iViewCommandHandle->HandleCommandL( EPhoneViewOpenNumberEntry );
                         }
                     }           
                 }
@@ -241,20 +279,60 @@
         case EKeyApplication0:
             {
             // If dialer is not open but phone is in foreground and phone receives
-            // applicaion-key event we have to open emergency dialer. No need own
-            // securitymode check because Applicationkey only captured in securitymode.
-            if ( !IsNumberEntryUsedL() )
+            // applicaion-key event we have to open emergency dialer. 
+            // Securitymode check because Applicationkey only open dialer in securitymode.
+            if ( iStateMachine->SecurityMode()->IsSecurityMode() && !IsNumberEntryUsedL() )
                 {
-                HandleCommandL(EPhoneNumberAcqSecurityDialer);
+                iViewCommandHandle->HandleCommandL( EPhoneViewOpenNumberEntry );
                 }           
             }
             break;
             
+        // "O" key
+        case KPhoneDtmf0Character:
+            if ( aMessage == EPhoneKeyLongPress && IsSimOk() )
+                {
+                LaunchApplicationL();
+                }
+            break;
+            
+        // number key
+        case KPhoneDtmf1Character:
+        case KPhoneDtmf2Character:
+        case KPhoneDtmf3Character:
+        case KPhoneDtmf4Character:
+        case KPhoneDtmf5Character:
+        case KPhoneDtmf6Character:
+        case KPhoneDtmf7Character:
+        case KPhoneDtmf8Character:
+        case KPhoneDtmf9Character:
+            if ( aMessage == EPhoneKeyLongPress && IsSimOk() )
+                {
+                HandleNumberLongKeyPressL();
+                }
+            break;
+
 #ifdef RD_INTELLIGENT_TEXT_INPUT   
         case EKeyEnter:
             if ( IsNumberEntryVisibleL() )
                 {
-                HandleCommandL( EPhoneCmdOptions );
+                if ( IsDialingExtensionInFocusL() )
+                    {
+                    HandleCommandL( EEasyDialingEnterKeyAction );
+                    }
+                else
+                    {
+                    TPhoneCmdParamInteger numberEntryCountParam;
+                    iViewCommandHandle->ExecuteCommandL( 
+                            EPhoneViewGetNumberEntryCount,
+                            &numberEntryCountParam );
+                    
+                    TInt neLength( numberEntryCountParam.Integer() );
+                    if ( neLength > 0 )
+                        {
+                        HandleSendCommandL();
+                        }
+                    }               
                 }
             break;
 #endif
@@ -275,6 +353,10 @@
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandlePhoneEngineMessageL( ) ");
     switch ( aMessage )
         {
+        case MEngineMonitor::EPEMessageInitiatedMoCall:
+            SetCallInitialized( ETrue );
+            break;
+                    
         case MEngineMonitor::EPEMessageIncoming:
             HandleIncomingL( aCallId );
             break;
@@ -295,9 +377,9 @@
                 if ( IsNumberEntryUsedL() )
                     {
                     // Show the number entry if it exists
-                    SetNumberEntryVisibilityL(ETrue);    
+                    SetNumberEntryVisibilityL(ETrue);
                     }    
-                else if ( NeedToSendToBackgroundL() )
+                else if ( NeedToReturnToForegroundAppL() )
                     {
                     // Continue displaying current app but set up the 
                     // idle screen in the background
@@ -315,14 +397,14 @@
             HandleIdleL( aCallId );
             break;
             
-        case MEngineMonitor::EPEMessageInValidEmergencyNumber:                
-            SendGlobalWarningNoteL( EPhoneEmergencyCallsOnly, ETrue );                           
+        case MEngineMonitor::EPEMessageInValidEmergencyNumber:
+            SendGlobalWarningNoteL( EPhoneEmergencyCallsOnly );
             break;
             
         case MEngineMonitor::EPEMessageValidEmergencyNumber:
             DialVoiceCallL();
             break; 
-                        
+        
         default:
             CPhoneState::HandlePhoneEngineMessageL( aMessage, aCallId );
             break;
@@ -340,9 +422,19 @@
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleIncomingL( ) ");
 
     HandleAudioAvailableOutputChangedL();
+    
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewShowNaviPaneAudioVolume );
 
     SetRingingTonePlaybackL( aCallId );
-
+    
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+        KPSUidScreenSaver,
+        KScreenSaverAllowScreenSaver,
+        EPhoneScreensaverNotAllowed );
+    
+    IsNumberEntryUsedL() ? 
+        BeginTransEffectLC( ECallUiAppear ) :
+        BeginTransEffectLC( ENumberEntryOpen );
     BeginUiUpdateLC();
     
     // Hide the number entry if it exists
@@ -351,56 +443,63 @@
         SetNumberEntryVisibilityL(EFalse);    
         }
      
-    // Display incoming call
-    DisplayIncomingCallL( aCallId );
-    
+    // Close fast swap window if it's displayed
+    EikonEnv()->DismissTaskList();
+
     // Show incoming call buttons
     SetTouchPaneButtons( EPhoneIncomingCallButtons );
-    
-    // Disable HW keys and Call UI if needed
-    CheckDisableHWKeysAndCallUIL();
+    SetTouchPaneButtonEnabled( EPhoneCallComingCmdSilent );
+    SetTouchPaneButtonEnabled( EPhoneInCallCmdHold );
     
-    SetBackButtonActive(EFalse);
-    
+    // Display incoming call
+    DisplayIncomingCallL( aCallId );
+
     EndUiUpdate();
+    EndTransEffect();
     
     // Go to incoming state
     iCbaManager->UpdateIncomingCbaL( aCallId );
-
+    UpdateSilenceButtonDimming();
+    UpdateIncomingContextMenuL( aCallId );
+    //Dim toolbar items
+    SetToolbarDimming( ETrue );
     //request that dimmed toolbar is visible.
     iViewCommandHandle->HandleCommandL( EPhoneViewShowToolbar );
-    iStateMachine->ChangeState( EPhoneStateIncoming );
-         
-    // Reset divert indication
-    SetDivertIndication( EFalse );
+    
+    ChangeTo( EPhoneStateIncoming );
     }
 
 // -----------------------------------------------------------
-// CPhoneStateIdle::HandleDiallingL
+// CPhoneStateIdle::HandleDialingL
 // Default handling for dialling message
 // (other items were commented in a header).
 // -----------------------------------------------------------
 //
 EXPORT_C void CPhoneStateIdle::HandleDialingL( TInt aCallId )
-    {
+    {    
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleDialingL( ) ");
-    BeginUiUpdateLC();
+    // Indicate that the Phone needs to be sent to the background if
+    // an application other than phone or idle application is in the foreground
+    SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() );
+   
+    DisplayCallSetupL( aCallId );
+    ChangeTo( EPhoneStateCallSetup );
+    }
 
-    // Display call setup 
-    DisplayCallSetupL( aCallId );  
-    
+// -----------------------------------------------------------
+// CPhoneStateIdle::DoStateSpecificCallSetUpDefinitionsL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateIdle::DoStateSpecificCallSetUpDefinitionsL()
+    {
     // Show call setup buttons
-    SetTouchPaneButtons( EPhoneCallSetupButtons );          
-    
-    EndUiUpdate();
-    
-    // Remove any phone dialogs if they are displayed
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-            
-    // Go to call setup state
-    iCbaManager->UpdateCbaL( EPhoneCallHandlingCallSetupCBA );
-    
-    iStateMachine->ChangeState( EPhoneStateCallSetup );
+    SetTouchPaneButtons( EPhoneCallSetupButtons );
+    SetTouchPaneButtonDisabled( EPhoneInCallCmdHold );
+
+    SetToolbarDimming( ETrue );
+    SetToolbarButtonLoudspeakerEnabled();
+    SetToolbarButtonHandsetEnabled();
+    SetToolbarButtonBTHFEnabled();
     }
 
 // -----------------------------------------------------------
@@ -424,8 +523,9 @@
         iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground, 
             &uidParam );
         }
+    BeginTransEffectLC( ENumberEntryClose );
     BeginUiUpdateLC();
-            
+    
     // Remove the number entry
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
  
@@ -437,12 +537,14 @@
     
     // Update touch buttons
     SetTouchPaneButtons( EPhoneIncallButtons );
+    SetToolbarDimming( EFalse );
     
     EndUiUpdate();
+    EndTransEffect();
   
     // Go to single state
     iCbaManager->UpdateCbaL( EPhoneCallHandlingInCallCBA );
-    iStateMachine->ChangeState( EPhoneStateSingle );
+    ChangeTo( EPhoneStateSingle );
     }
 
 // -----------------------------------------------------------
@@ -458,11 +560,16 @@
         {
         case EPhoneCmdOptions:
             {
-            break;
+            // Open number entry menubar
+            TInt menuId( GetNumberAcqMenuIdL() );
+            TPhoneCmdParamInteger integerParam;
+            integerParam.SetInteger( menuId );
+            iViewCommandHandle->ExecuteCommandL( 
+                EPhoneViewMenuBarOpen, &integerParam );
             }
-        
+            break;
         case EPhoneNumberAcqCmdCall:
-            HandleVoiceCallCommandL();
+            HandleVoiceCallCommandL( EFalse );
             break;
         case EPhoneNumberAcqCmdSendCommand:
             HandleSendCommandL();
@@ -473,15 +580,22 @@
             break;
             
         case EPhoneCmdBack:
-            break;            
+            BeginTransEffectLC( ENumberEntryClose );
+            HandleBackCommandL();
+            EndTransEffect();
+            break;
+        
+        case EPhoneViewOpenNumberEntry:
+            BeginTransEffectLC( ENumberEntryOpen );
+            commandStatus = CPhoneState::HandleCommandL( aCommand );
+            EndTransEffect();
+            break;
             
         default:
             commandStatus = CPhoneState::HandleCommandL( aCommand );
             break;
         }
-
     return commandStatus;
-
     }
 
 // -----------------------------------------------------------------------------
@@ -496,9 +610,16 @@
        {
        case EAknSoftkeyContextOptions:
            {
+           // Open number entry OK menubar
+           TPhoneCmdParamInteger integerParam;
+           integerParam.SetInteger( 
+               CPhoneMainResourceResolver::Instance()->
+               ResolveResourceID( EPhoneNumberAcqOkMenubar ) );
+           iViewCommandHandle->ExecuteCommandL( 
+               EPhoneViewMenuBarOpen, &integerParam );
+           commandStatus = ETrue;
            }
-           break;       
-           
+           break;
        default:
            commandStatus = CPhoneState::ProcessCommandL( aCommand );
            break;
@@ -540,9 +661,54 @@
         }
     else
         {
-        DialVoiceCallL();                
+        DialVoiceCallL();
         }
     }
+    
+// -----------------------------------------------------------
+// CPhoneStateIdle::HandleBackCommandL
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::HandleBackCommandL()
+    {
+    TBool previousApp(EFalse);
+
+    // If previous app activation is true then open
+    // previous application.
+    if ( iOnScreenDialer && 
+        IsSimOk() )
+        {
+        TPhoneCmdParamBoolean booleanParam;
+        iViewCommandHandle->ExecuteCommandL( 
+            EPhoneViewGetActivatePreviousApp, &booleanParam );
+        
+
+        if ( booleanParam.Boolean() )
+            {
+            // Open previous app.
+            iViewCommandHandle->ExecuteCommandL( 
+                EPhoneViewActivatePreviousApp );
+
+            // Remove number entry from screen
+            iViewCommandHandle->ExecuteCommandL( 
+                EPhoneViewRemoveNumberEntry ); 
+
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW ); 
+            previousApp = ETrue;   
+            }        
+        }
+        
+    if ( !previousApp )
+        {
+        // Remove number entry from screen
+        iViewCommandHandle->ExecuteCommandL( 
+            EPhoneViewRemoveNumberEntry );
+         
+        // Do state-specific operation when number entry is cleared
+        HandleNumberEntryClearedL();
+        }  
+ 
+    }
 
 // -----------------------------------------------------------
 // CPhoneStateIdle::DialVideoCallL
@@ -564,9 +730,17 @@
         else
 #endif // _DEBUG
             {
-            // call the number
-            iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber );
-            DialMultimediaCallL();
+            if ( IsSpeedDialNumber( (*phoneNumber) ) )
+                {
+                // Handle speed dial
+                SpeedDialL( (*phoneNumber)[0], EDialMethodMenuSelection );
+                }
+            else
+                {
+                // call the number
+                iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber );
+                DialMultimediaCallL();
+                }
 
             CleanupStack::PopAndDestroy( phoneNumber );
             }
@@ -582,25 +756,19 @@
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::DisplayIncomingCallL( ) ");
     __ASSERT_DEBUG( iStateMachine->PhoneEngineInfo() && aCallId >= 0,
         Panic( EPhoneCtrlInvariant ) );
+    // Close menu bar, if it is displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
     // Remove any phone dialogs if they are displayed
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
 
-    TPhoneCmdParamKeyCapture captureParam;
-    captureParam.SetKeyCode( EKeyNo );
-    iViewCommandHandle->ExecuteCommand( EPhoneViewStartCapturingKey, &captureParam );
-    
     // 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
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( !TopAppIsDisplayedL() );
-    iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
-        &booleanParam );
-
+    // Indicate that the Foreground application needs to be sent to the foreground 
+    // after call is ended.
+    SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() );
+    
     // Bring Phone app in the foreground
     TPhoneCmdParamInteger uidParam;
     uidParam.SetInteger( KUidPhoneApplication.iUid );
@@ -623,45 +791,6 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneStateIdle::DisplayCallSetupL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneStateIdle::DisplayCallSetupL( TInt aCallId )
-    {
-    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::DisplayCallSetupL( ) ");
-    __ASSERT_DEBUG( aCallId > KErrNotFound, Panic( EPhoneCtrlParameterNotInitialized ) );
-
-    TPhoneCmdParamKeyCapture captureParam;
-    captureParam.SetKeyCode( EKeyNo );
-    iViewCommandHandle->ExecuteCommand( EPhoneViewStartCapturingKey, &captureParam );
-    
-    // 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;
-    uidParam.SetInteger( KUidPhoneApplication.iUid );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground,
-        &uidParam );
-
-    // Set Phone as the top application
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication,
-        &uidParam ); 
-    
-    // Display call setup header
-    DisplayHeaderForOutgoingCallL( aCallId );
-    }
-
-// -----------------------------------------------------------
 // CPhoneStateIdle::HandleIdleForegroundEventL
 // -----------------------------------------------------------
 //
@@ -670,8 +799,13 @@
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleIdleForegroundEventL( ) ");
     
     if ( IsNumberEntryUsedL() )
-        {        
-        if ( IsNumberEntryVisibleL() )
+        {
+        // If numberentry is used then we need to call EPhoneViewSetDialerControlVisible 
+        // to ensure that numberentry/dialler is drawn to UI.
+        TPhoneViewResponseId respond = 
+            iViewCommandHandle->HandleCommandL( EPhoneViewSetDialerControlVisible );
+        
+        if ( respond && IsNumberEntryVisibleL() )
             {
             // Set Number Entry CBA
             iCbaManager->SetCbaL( EPhoneNumberAcqCBA );
@@ -680,7 +814,7 @@
     else if ( !IsAnyQueryActiveL() )
         {
         // Set idle as top application
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground );            
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground );
         }
     }
 
@@ -690,6 +824,44 @@
 
 EXPORT_C void CPhoneStateIdle::HandlePhoneForegroundEventL()
     {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandlePhoneForegroundEventL( ) ");
+    
+    TBool activatePhone = CPhonePubSubProxy::Instance()->Value(
+                    KPSUidAiInformation, KActiveIdleState ) == EPSAiNumberEntry;
+    
+    if ( activatePhone )
+        {
+        // If activatePhone is true then user has pressed some numeric
+        // key and icon must be set to FSW. In this case number entry is not yet open so it
+        // it is not enough to call EPhoneViewUpdateFSW.
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdatePhoneIconToFSW );
+        }
+    // If number entry is used update FSW accordingly.
+    else if ( IsNumberEntryUsedL() )
+        {
+        // If numberentry is used then we need to call EPhoneViewSetDialerControlVisible 
+        // to ensure that numberentry/dialler is drawn to UI.
+        TPhoneViewResponseId respond = 
+            iViewCommandHandle->HandleCommandL( EPhoneViewSetDialerControlVisible );
+        
+        if ( respond && IsNumberEntryVisibleL() )
+            {
+            // Set Number Entry CBA
+            iCbaManager->SetCbaL( EPhoneNumberAcqCBA );
+            }
+        
+        // If dialer is open add icon to FSW list.
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW );
+        }
+    /*iCallInitialized has to be checked because if it true then phoneapp 
+    is already initializing call bubble and we cant bring idle to screen. */
+    else if ( !IsNumberEntryUsedL() && 
+              !iStateMachine->SecurityMode()->IsSecurityMode() &&
+              !iCallInitialized )
+        {
+        // Bring Idle app to the foreground
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground );
+        }
     }
 
 // -----------------------------------------------------------
@@ -712,17 +884,130 @@
 //
 void CPhoneStateIdle::HandleIdleL( TInt /*aCallId*/ )
     {
-    __LOGMETHODSTARTEND(EPhoneControl,  
-        "CPhoneStateIdle::HandleIdleL()" );
-        
-    // Remove all call headers
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleIdleL()" );
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveAllCallHeaders );
+    CloseClearNumberEntryAndLoadEffectL( ECallUiDisappear );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+    // Reset flag.
+    SetCallInitialized( EFalse );
+    }
+ 
+// -----------------------------------------------------------
+// CPhoneStateIdle::SpeedDialL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateIdle::SpeedDialL( const TUint& aDigit, 
+        TDialInitiationMethod aDialMethod )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::SpeedDialL( ) ");
+    iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
+    
+    TPhoneCmdParamSpeedDial speedDialParam;
+    HBufC* phoneNumber = NumberForSpeedDialLocationL( aDigit, speedDialParam );
+
+    // Store serviceId received from vmbx handler
+    iStateMachine->PhoneEngineInfo()->SetServiceIdCommand( speedDialParam.ServiceId() );
+    CleanupStack::PushL( phoneNumber );
     
-    // Close number entry
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );    
+    if ( NULL != phoneNumber && KNullDesC() != *phoneNumber )
+        {
+        DialL( *phoneNumber, speedDialParam.NumberType(), aDialMethod );
+        RemoveNumberEntryAndSetIdleToBackgroundIfNeededL();
+        }
+    else
+        {
+        // User cancelled dialog or didn't give a valid number
+        SpeedDialCanceledL( aDigit );
+        }
+    CleanupStack::PopAndDestroy( phoneNumber );
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, 
+    "CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL( ) ");
+    if ( IsNumberEntryUsedL() )
+        {
+        BeginTransEffectLC( ECallUiAppear );
+        /*NE should be removed because if speeddial dial is interupted during
+        call setup phone should not return to NE/Dialler view.*/
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
+        
+        /*It might be possible that some async operation was ongoing and 
+        state has already in that case do not set idle to background.*/
+        if ( iStateMachine->State() == this )
+            {
+            iCbaManager->UpdateCbaL( EPhoneEmptyCBA );
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIdleTopApplication );
+            }
+        EndTransEffect();
+        }
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::SpeedDialCanceledL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateIdle::SpeedDialCanceledL( const TUint& aDigit )
 
-    // Remove all notes and dialogs
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );    
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::SpeedDialCanceledL( ) ");
+    if ( IsNumberEntryUsedL() )
+        {
+        if ( aDigit == KPhoneDtmf1Character || 
+                  ( aDigit == KPhoneDtmf2Character && 
+                    iViewCommandHandle->HandleCommandL( 
+                     EPhoneViewIsStraightCallToVideoMailBox ) == EPhoneViewResponseSuccess ) ) 
+            {
+            // Remove number entry and set idle background on non-touch products
+            if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
+                {
+                iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
+                
+                // Set Idle background, if still idle ( f.e not incoming call arrived )
+                if ( iStateMachine->State() == this )
+                    {
+                    // idle screen in the background
+                    SetupIdleScreenInBackgroundL();
+                    }
+                }
+            }
+        }        
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::HandleNumberLongKeyPressL()
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateIdle::HandleNumberLongKeyPressL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, 
+        "CPhoneStateIdle::HandleNumberLongKeyPressL( ) ");
+    
+    HBufC* phoneNumber = PhoneNumberFromEntryLC();
+    
+    if ( phoneNumber && IsSpeedDialNumber ( *phoneNumber ) )
+        {
+        SpeedDialL( (*phoneNumber)[0], EDialMethodOneKeyDialing );
+        }
+    
+    CleanupStack::PopAndDestroy( phoneNumber );
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::IsSpeedDialNumber()
+// -----------------------------------------------------------
+//
+EXPORT_C TBool CPhoneStateIdle::IsSpeedDialNumber( 
+        const TDesC& aNumber ) const
+    {
+    return ( aNumber.Length() == KPhoneDtmfSpeedDialPrefixLength 
+            && aNumber[0] >= KPhoneDtmf1Character 
+            && aNumber[0] <= KPhoneDtmf9Character );
     }
 
 // -----------------------------------------------------------
@@ -734,7 +1019,35 @@
     __LOGMETHODSTARTEND(
         EPhoneControl, "CPhoneStateIdle::HandleSendCommandL()" );
     
-    HandleVoiceCallCommandL();
+    HandleVoiceCallCommandL( ETrue );
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::LaunchApplicationL()
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::LaunchApplicationL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::LaunchApplicationL( ) ");
+    // Check if only one number exists in the number
+    // entry
+    TPhoneCmdParamInteger numberEntryCountParam;
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount,
+        &numberEntryCountParam );
+
+    if ( numberEntryCountParam.Integer() == 1 )
+        {
+        // Remove the number entry window
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewClearNumberEntryContent );
+        
+        iStateMachine->SendPhoneEngineMessage( 
+                MPEPhoneModel::EPEMessageEndDTMF );
+
+        // Launch application.
+        iViewCommandHandle->ExecuteCommandL(
+            EPhoneViewLaunchApplication );
+
+        }
     }
 
 // -----------------------------------------------------------
@@ -744,22 +1057,18 @@
 void CPhoneStateIdle::SendExitCommandL()
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::SendExitCommand( ) ");
-    // Remove number entry from screen
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
+    // Remove number entry from screen 
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); 
 
-    // Simulate exit command
-    CEikonEnv& eikEnv = *CEikonEnv::Static();
-    CCoeEnv& coeEnv = eikEnv;
-    RWsSession& wsSession=coeEnv.WsSession();
-    TKeyEvent keyEvent;
-    keyEvent.iCode = EEikCmdExit;
-    keyEvent.iScanCode = EEikCmdExit;
-    keyEvent.iModifiers = 0;
-    keyEvent.iRepeats = 0;
-    wsSession.SimulateKeyEvent( keyEvent );
-    wsSession.Flush();  
-
-    iViewCommandHandle->ExecuteCommandL( EPhoneAppShutDown );
+    // Simulate exit command 
+    RWsSession& wsSession = EikonEnv()->WsSession(); 
+    TKeyEvent keyEvent; 
+    keyEvent.iCode = EEikCmdExit; 
+    keyEvent.iScanCode = EEikCmdExit; 
+    keyEvent.iModifiers = 0; 
+    keyEvent.iRepeats = 0; 
+    wsSession.SimulateKeyEvent( keyEvent ); 
+    wsSession.Flush(); 
     }
 
 // -----------------------------------------------------------
@@ -779,6 +1088,7 @@
         {
         //Cancels e.g. USB notifier and Audio notifier.
         iViewCommandHandle->ExecuteCommandL( EPhoneViewCancelAllNotications );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewExitApplications );
         // If KFeatureIdFfSimlessOfflineSupport is undef and security note is shown then do not
         // remove security note from screen.
         if ( !( IsSimStateNotPresentWithSecurityModeEnabled() && 
@@ -797,12 +1107,7 @@
 
                 if ( IsNumberEntryUsedL() )
                     {
-                    // Remove number entry from screen
-                    iViewCommandHandle->ExecuteCommandL( 
-                        EPhoneViewRemoveNumberEntry );
-                    // Do state-specific operation when number entry is cleared
-                    HandleNumberEntryClearedL();
-                    
+                    CloseClearNumberEntryAndLoadEffectL( ENumberEntryClose );
                     // If long end key event occures then all calls are terminated and
                     // dialer is closed, therefore tel.icon must be removed from FSW.
                     iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW );
@@ -815,30 +1120,19 @@
                 }
             else if ( IsNumberEntryUsedL() && TopAppIsDisplayedL() )
                 {
-                // Remove number entry from screen
-                iViewCommandHandle->ExecuteCommandL( 
-                    EPhoneViewRemoveNumberEntry );
-                // Do state-specific operation when number entry is cleared
-                HandleNumberEntryClearedL();
+                CloseClearNumberEntryAndLoadEffectL( ENumberEntryClose );
                 }
             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 );
-                        }
-                    
-                    // Remove number entry from screen
-                    iViewCommandHandle->ExecuteCommandL( 
-                        EPhoneViewRemoveNumberEntry );
-                    } 
-                // Bring Idle app to the foreground
+                    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+                    }
+                iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground );
+                iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW );
                 }
             }
         else if ( IsNumberEntryUsedL() )
@@ -858,7 +1152,19 @@
 EXPORT_C void CPhoneStateIdle::OnlyHashInNumberEntryL()
     {
     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneStateIdle::OnlyHashInNumberEntryL( ) ");
-    
+    if ( CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported( 
+        KTelephonyLVFlagMannerMode ) )
+        {
+        ChangeMannerModeL();
+        }
+    else
+        {
+        StartAlsLineChangeTimerL();
+        }
+    // Check if any application launch functionality
+    // is configured for pressing hash for a long time
+    // the return value of CheckAppLaunchingL ignored.
+    CheckAppLaunchingL( TKeyCode( KPhoneDtmfHashCharacter ) );
     }
 
 // ---------------------------------------------------------
@@ -867,7 +1173,46 @@
 //
 void CPhoneStateIdle::ChangeMannerModeL()
     {
-    __LOGMETHODSTARTEND( EPhoneControl, "CPhoneStateIdle::ChangeMannerModeL( ) ");         
+    __LOGMETHODSTARTEND( EPhoneControl, "CPhoneStateIdle::ChangeMannerModeL( ) ");
+
+    // Get the profile information
+    MProEngEngine* profileEngine = ProEngFactory::NewEngineLC();
+    const TInt profileId =
+            profileEngine->ActiveProfileId();
+    
+    TInt newProfile;
+    
+    if ( profileId == EProfileSilentId )
+        {
+        newProfile = EProfileGeneralId;
+        }
+    else
+        {
+        newProfile = EProfileSilentId;    
+        }
+    
+    profileEngine->SetActiveProfileL( newProfile );
+    
+    CleanupStack::Pop(); // profileEngine 
+    profileEngine->Release();
+    
+    // Stop playing DTMF tone
+    iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); 
+    
+    if ( !iOnScreenDialer )
+        {
+        // Remove the number entry
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );        
+        }
+    else
+        {
+        NumberEntryClearL();
+        }
+    
+    iCbaManager->UpdateCbaL( EPhoneEmptyCBA );
+ 
+     // Bring Idle app to the top app
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIdleTopApplication );            
     }
 
 // -----------------------------------------------------------
@@ -897,17 +1242,8 @@
 EXPORT_C void CPhoneStateIdle::DialVoiceCallL()
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::DialVoiceCallL() ");
-    __ASSERT_DEBUG( iStateMachine->PhoneEngineInfo(),
-        Panic( EPhoneCtrlInvariant ) );
-        
-    // Disable global notes
-    TPhoneCmdParamBoolean globalNotifierParam;
-    globalNotifierParam.SetBoolean( ETrue );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled,
-        &globalNotifierParam );
-    
+    __ASSERT_DEBUG( iStateMachine->PhoneEngineInfo(), Panic( EPhoneCtrlInvariant ) );
     CPhoneState::DialVoiceCallL();
- 
     }
 
 // -----------------------------------------------------------------------------
@@ -925,11 +1261,98 @@
     return ( restoreValue & ( conn::EBURRestoreFull | conn::EBURRestorePartial ));
     }
 
+// -----------------------------------------------------------------------------
+// CPhoneStateIdle::CheckAppLaunchingL
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneStateIdle::CheckAppLaunchingL( const TKeyCode aCode )
+    {
+    TBool valuesFetched( EFalse );
+    
+    if( !IsSimOk() )
+        {
+        return valuesFetched;
+        }
+    
+    TPhoneCmdParamAppInfo appInfo;
+    HBufC8* appParam = HBufC8::NewL( KMaxParamLength );
+    CleanupStack::PushL( appParam );
+
+    TBool isValidAppLaunchingKeyEvent = ETrue;
+    
+    // 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 )
+        {
+        TPhoneCmdParamInteger numberEntryCount;
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount,
+            &numberEntryCount );
+    
+        isValidAppLaunchingKeyEvent = ( numberEntryCount.Integer() == 1 );
+        }
+    
+    if ( isValidAppLaunchingKeyEvent )
+        {
+        TRAPD( err, 
+            CPhoneCenRepProxy::Instance()->FetchValuesFromCenRepL( 
+            appInfo, aCode, appParam, valuesFetched ) );
+        
+        if ( KErrNone == err && valuesFetched )
+            {
+            // Remove the number entry window
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
+
+            // Stop playing DTMF tone
+            iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
+
+            TPhoneCommandParam* phoneCommandParam = 
+                static_cast<TPhoneCommandParam*>( &appInfo );
+            iViewCommandHandle->ExecuteCommandL( 
+                        EPhoneViewActivateAppViewConventional,
+                        phoneCommandParam ); 
+            
+            // Continue displaying current app but set up the 
+            // idle screen in the background
+            SetupIdleScreenInBackgroundL();
+            }
+        }
+    CleanupStack::PopAndDestroy( appParam );
+    return valuesFetched;
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::NumberForSpeedDialLocationL
+// -----------------------------------------------------------
+// 
+HBufC* CPhoneStateIdle::NumberForSpeedDialLocationL( 
+        const TUint& aDigit,
+        TPhoneCmdParamSpeedDial& aSpeedDialParam ) const
+    {
+    // Set the speed dial location from the digit in buffer. Character
+    // '1' means location 1, and so on.
+    const TInt location = aDigit - KPhoneDtmf1Character + 1;
+    aSpeedDialParam.SetLocation( location );
+    
+    // Get the number and type from the speed dial location.
+    HBufC* phoneNumber = HBufC::NewLC( KPhoneNumberEntryBufferSize );
+    
+    TPtr ptr( phoneNumber->Des() );
+    aSpeedDialParam.SetPhoneNumber( &ptr );
+    iViewCommandHandle->HandleCommandL( 
+        EPhoneViewGetNumberFromSpeedDialLocation, &aSpeedDialParam );
+
+    CleanupStack::Pop( phoneNumber );
+    return phoneNumber;
+    }
+
 // -----------------------------------------------------------
 // CPhoneStateIdle::HandleVoiceCallCommandL()
 // -----------------------------------------------------------
 //
-void CPhoneStateIdle::HandleVoiceCallCommandL()
+void CPhoneStateIdle::HandleVoiceCallCommandL( TBool aSendKey )
     {
     __LOGMETHODSTARTEND(
         EPhoneControl, "CPhoneStateIdle::HandleVoiceCallCommandL()" );
@@ -957,12 +1380,102 @@
         else
 #endif // _DEBUG
             {
-            // call the number
-            iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber );
-            DialVoiceCallL();
+            if ( IsDialingExtensionInFocusL() )
+                {
+                CPhoneState::HandleCommandL( EEasyDialingVoiceCall );
+                }
+            
+            else if ( IsSpeedDialNumber( *phoneNumber ) )
+                {
+                // Handle speed dial
+                SpeedDialL( (*phoneNumber)[0], aSendKey ? EDialMethodSendCommand : EDialMethodMenuSelection );
+                }
+            else
+                {
+                // call the number
+                iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber );
+                DialVoiceCallL();
+                }
+            
             CleanupStack::PopAndDestroy( phoneNumber );
             }
         }    
     }
 
+// -----------------------------------------------------------
+// CPhoneStateIdle::GetNumberAcqMenuIdL()
+// -----------------------------------------------------------
+//
+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;
+    }
+	
+// -----------------------------------------------------------
+// CPhoneStateIdle::HandleErrorL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneStateIdle::HandleErrorL( const TPEErrorInfo& aErrorInfo )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneStateIdle::HandleErrorL() ");
+    if( KErrNotFound < aErrorInfo.iCallId )
+        {
+        SetCallInitialized( EFalse );
+        }
+    CPhoneState::HandleErrorL( aErrorInfo );
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::ChangeTo
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::ChangeTo( TInt aState )
+    {
+    __PHONELOG1( EBasic, EPhoneControl, 
+           "PhoneUIControl: CPhoneStateIdle::ChangeTo - aState =%d ",
+           aState );
+    SetCallInitialized( EFalse );
+    iStateMachine->ChangeState( aState );
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::SetBubbleInitialized
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::SetCallInitialized( TBool aValue )
+    {
+    __PHONELOG1( EBasic, EPhoneControl, 
+            "PhoneUIControl: CPhoneStateIdle::SetCallInitialized - iCallInitialized =%d ",
+            aValue );
+    iCallInitialized = aValue;
+    }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::IsBubbleInitialized
+// -----------------------------------------------------------
+//
+TBool CPhoneStateIdle::IsCallInitialized()
+    {
+    __PHONELOG1( EBasic, EPhoneControl, 
+            "PhoneUIControl: CPhoneStateIdle::IsCallInitialized - iCallInitialized =%d ",
+            iCallInitialized );
+    return iCallInitialized;
+    }
+
 // End of File