phoneapp/phoneuistates/src/cphoneconference.cpp
branchRCL_3
changeset 62 5266b1f337bd
parent 61 41a7f70b3818
child 69 8baf28733c3d
--- a/phoneapp/phoneuistates/src/cphoneconference.cpp	Tue Aug 31 15:14:29 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconference.cpp	Wed Sep 01 12:30:10 2010 +0100
@@ -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,13 @@
     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled,
         &globalNotifierParam );
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverAllowed ); 
+  
+    DefineAndSetHoldFlagL();
+    
     }
 
 // -----------------------------------------------------------
@@ -144,12 +153,6 @@
             {
             TPhoneCmdParamCallHeaderData callHeaderParam;
             callHeaderParam.SetCallState( EPEStateHeld );
-            TBuf<KPhoneCallHeaderLabelMaxLength> labelText( KNullDesC );
-            TInt callLabelId = CPhoneMainResourceResolver::Instance()->
-                    ResolveResourceID( EPhoneCallOnHold );
-
-            StringLoader::Load( labelText, callLabelId, CCoeEnv::Static() );
-            callHeaderParam.SetLabelText( labelText );
             iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, 
                 &callHeaderParam );
             }
@@ -165,7 +168,7 @@
             break;
             
         case MEngineMonitor::EPEMessageDialing:
-            HandleDiallingL( aCallId );
+            HandleDialingL( aCallId );
             break;
             
         case MEngineMonitor::EPEMessageIncoming:
@@ -192,6 +195,7 @@
         {   
         case EAknSoftkeyCancel:
             BeginUiUpdateLC();
+            CloseSelectionListL();
             SetTouchPaneButtons( EPhoneConferenceButtons );
             EndUiUpdate();    
             UpdateCbaL( EPhoneCallHandlingInCallCBA );
@@ -211,6 +215,7 @@
             
         // Conference -> Drop participant
         case EPhoneInCallCmdDropSelection:
+            OpenDropParticipantSelectionL();
             break;
         
         // Drop CBA    
@@ -219,6 +224,7 @@
             break;
             
         case EPhoneInCallCmdPrivateSelection:
+            OpenPrivateSelectionL();
             break;
             
         case EPhoneInCallCmdPrivate:
@@ -226,13 +232,25 @@
             break;
           
         case EPhoneInCallCmdNewCall:
+            LaunchNewCallQueryL();
             break;
             
         case EPhoneInCallCmdNewCallCall:
+            CallFromNewCallQueryL();
             break;
             
         case EPhoneInCallCmdParticipants:
-            break;     
+            OpenParticipantsListL();
+            break;
+            
+        case EPhoneViewOpenNumberEntry:
+            if ( IsConferenceBubbleInSelectionMode() )
+                {
+                CloseSelectionListL();
+                SetTouchPaneButtons( EPhoneConferenceButtons );
+                }
+            commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand );
+            break;            
 
         default:
             commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand );
@@ -248,7 +266,47 @@
 //
 void CPhoneConference::UpdateInCallCbaL()
     {
-    UpdateCbaL( EPhoneCallHandlingInCallCBA );
+    if ( iViewCommandHandle->HandleCommandL( EPhoneViewIsConferenceInExpandedMode ) 
+        != EPhoneViewResponseSuccess )
+        {
+        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+        }    
+    }
+
+// -----------------------------------------------------------
+// CPhoneConference::OpenMenuBarL
+// -----------------------------------------------------------
+//
+void CPhoneConference::OpenMenuBarL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneConference::OpenMenuBarL()");
+    TInt resourceId;
+
+    if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
+        {
+        resourceId = EPhoneDtmfDialerMenubar;
+        }
+    else if ( IsNumberEntryVisibleL() )
+        {
+        resourceId = EPhoneConfCallMenubarWithNumberEntry;
+        }
+    else if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) 
+              && IsConferenceBubbleInSelectionMode() )        
+        {
+        resourceId = EPhoneConfCallParticipantsMenubar;            
+        }
+    else
+        {
+        resourceId = EPhoneConfCallMenubar;
+        }
+
+    TPhoneCmdParamInteger integerParam;
+    integerParam.SetInteger( 
+        CPhoneMainResourceResolver::Instance()->
+        ResolveResourceID( resourceId ) );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, 
+        &integerParam );
     }
 
 // -----------------------------------------------------------
@@ -261,19 +319,33 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::HandleKeyEventL()");
-
-    if ( CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) )
+    if ( IsConferenceBubbleInSelectionMode() )
         {
-        // Handle numeric keys when key events are received 
-        // in conference state.
-        CPhoneGsmInCall::HandleNumericKeyEventL( aKeyEvent, aEventCode );
+        if ( aKeyEvent.iCode == EKeyUpArrow ||
+             aKeyEvent.iCode == EKeyDownArrow )
+            {
+            TPhoneCmdParamKeyEvent keyEventParam;
+            keyEventParam.SetKeyEvent( aKeyEvent );
+            keyEventParam.SetEventCode( aEventCode );    
+            
+            iViewCommandHandle->ExecuteCommandL( 
+                EPhoneViewMoveHighLightInList, &keyEventParam );
+            }
         }
     else
         {
-        // Handle other key events.
-        CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode );
+        if ( CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) )
+            {
+            // Handle numeric keys when key events are received 
+            // in conference state.
+            CPhoneGsmInCall::HandleNumericKeyEventL( aKeyEvent, aEventCode );
+            }
+        else
+            {
+            // Handle other key events.
+            CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode );
+            }
         }
-    
     }
 
 // --------------------------------------------------------------
@@ -336,6 +408,12 @@
 
     // Stop capturing keys
     CaptureKeysDuringCallNotificationL( EFalse );
+
+    // If dialler is not open then close menu bar.
+    if ( !IsNumberEntryUsedL() )
+        {
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+        }
         
     // If conference bubble still exists then we have conference and
     // single call
@@ -365,6 +443,7 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::HandleConferenceIdleL()");
+    BeginTransEffectLC( ENumberEntryClose );
     BeginUiUpdateLC();
     
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble );
@@ -377,7 +456,7 @@
         {
         case ENoActiveCalls:
             MakeStateTransitionToIdleL();
-            break;
+            break; 
             
         case EOneActiveCall:
             {
@@ -388,13 +467,17 @@
                 EPhoneViewGetCallIdByState, &callStateData );
                 
             if( callStateData.CallId() > KErrNotFound )
-                {
+                {            
+                CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                                KPSUidScreenSaver,
+                                KScreenSaverAllowScreenSaver,
+                                EPhoneScreensaverNotAllowed );
                 UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
                 iStateMachine->ChangeState( EPhoneStateWaitingInSingle );    
                 }
             else
                 {
-                MakeStateTransitionToSingleL();                    
+                MakeStateTransitionToSingleL();
                 }
             }
             break;
@@ -407,8 +490,8 @@
             MakeStateTransitionToTwoSinglesL();
             break;
         }
-    
-    EndUiUpdate(); 
+    EndUiUpdate();
+    EndTransEffect();     
     }
 
 // -----------------------------------------------------------
@@ -420,7 +503,7 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::HandleHeldConferenceL()");
     TPhoneCmdParamCallHeaderData callHeaderParam;
-    callHeaderParam.SetCallState( EPEStateHeldConference );
+    callHeaderParam.SetCallState( EPEStateHeld );
     
     TInt callLabelId;
     TBuf<KPhoneCallHeaderLabelMaxLength> labelText( KNullDesC );
@@ -435,16 +518,61 @@
  
     iViewCommandHandle->ExecuteCommandL( 
         EPhoneViewUpdateBubble, aCallId, &callHeaderParam );
-           
+       
+    // Set Hold flag to view
+    SetHoldFlagL();
+    
     if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
         {
-        SendGlobalInfoNoteL( EPhoneInformationConferenceOnHold, ETrue );
+        SendGlobalInfoNoteL( EPhoneInformationConferenceOnHold );
         }
     
-    SetTouchPaneButtons( EPhoneConferenceButtons );
+    SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
+    
     UpdateInCallCbaL();
     }
 
+
+// -----------------------------------------------------------
+// CPhoneConference::DefineAndSetHoldFlagL
+// -----------------------------------------------------------
+//
+void CPhoneConference::DefineAndSetHoldFlagL()
+    {
+    // Find out is conference held or not
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallId( KConferenceCallId );
+    iViewCommandHandle->HandleCommandL( EPhoneViewGetCallState,
+            &callStateData );
+    
+    // Set Hold flag to view
+    TPhoneCmdParamBoolean holdFlag;
+        
+    if( callStateData.CallState() == EPEStateHeld )
+        {
+        holdFlag.SetBoolean( ETrue );
+        }
+    else
+        {
+        holdFlag.SetBoolean( EFalse );   
+        }
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
+    
+    }
+
+// -----------------------------------------------------------
+// CPhoneConference::SetHoldFlagL
+// -----------------------------------------------------------
+//
+void CPhoneConference::SetHoldFlagL()
+    {
+    // Set Hold flag to view
+    TPhoneCmdParamBoolean holdFlag;
+    holdFlag.SetBoolean( ETrue );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
+
+    }
+
 // -----------------------------------------------------------
 // CPhoneConference::HandleConnectedConferenceL
 // -----------------------------------------------------------
@@ -455,8 +583,8 @@
         "CPhoneConference::HandleConnectedConferenceL()");
     // Update call state
     TPhoneCmdParamCallHeaderData callHeaderParam;
-    callHeaderParam.SetCallState( EPEStateConnectedConference );
-    
+    callHeaderParam.SetCallState( EPEStateConnected );
+
     TBuf<KPhoneCallHeaderLabelMaxLength> conferenceText( KNullDesC );
     TInt callLabelId = CPhoneMainResourceResolver::Instance()->
             ResolveResourceID( EPhoneCLIConferenceCall );
@@ -477,15 +605,31 @@
     
     if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
         { 
-        SendGlobalInfoNoteL( EPhoneInformationConferenceActiveted, ETrue );
+        SendGlobalInfoNoteL( EPhoneInformationConferenceActiveted );
         }
     
-    SetTouchPaneButtons( EPhoneConferenceButtons );
+    SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate );
     
     UpdateInCallCbaL();
     }
 
 // -----------------------------------------------------------
+// CPhoneConference::OpenDropParticipantSelectionL
+// -----------------------------------------------------------
+//
+void CPhoneConference::OpenDropParticipantSelectionL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneConference::OpenDropParticipantSelectionL()");
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( ETrue );
+    iViewCommandHandle->ExecuteCommandL( 
+        EPhoneViewOpenConferenceList, &booleanParam );
+
+    iCbaManager->SetCbaL( EPhoneDropParticipantCBA );
+    }
+
+// -----------------------------------------------------------
 // CPhoneConference::DropSelectedParticipantL
 // -----------------------------------------------------------
 //
@@ -509,6 +653,22 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneConference::OpenPrivateSelectionL
+// -----------------------------------------------------------
+//
+void CPhoneConference::OpenPrivateSelectionL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneConference::OpenPrivateSelectionL()");
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( ETrue );
+    iViewCommandHandle->ExecuteCommandL( 
+        EPhoneViewOpenConferenceList, &booleanParam );
+
+    iCbaManager->SetCbaL( EPhonePrivateParticipantCBA );
+    }
+
+// -----------------------------------------------------------
 // CPhoneConference::PrivateSelectedParticipantL
 // -----------------------------------------------------------
 //
@@ -531,6 +691,7 @@
         
         // Update call view
         BeginUiUpdateLC();
+        CloseSelectionListL();
         SetTouchPaneButtons( EPhoneConferenceButtons );
         EndUiUpdate();    
                 
@@ -551,11 +712,34 @@
 
     if ( IsNumberEntryUsedL() )
         {
-        // Show the number entry if it exists
-        SetNumberEntryVisibilityL(ETrue);      
-        }
-    else if ( !TopAppIsDisplayedL() )
+        if ( NeedToReturnToForegroundAppL() )
+            {
+            // Return phone to the background if menu application is needed to foreground.
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
+    
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
+    
+            // Set Number Entry CBA
+            iCbaManager->SetCbaL( EPhoneNumberAcqCBA );
+            }
+        else
+            {
+            // Show the number entry if it exists
+            SetNumberEntryVisibilityL(ETrue);
+        
+            // Close dtmf dialer when call is disconnected.
+            if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
+                {            
+                CloseDTMFEditorL();
+                // Display idle screen and update CBAs
+                DisplayIdleScreenL();
+                }
+            }
+        }  
+    else if ( !TopAppIsDisplayedL() || NeedToReturnToForegroundAppL() )
         {
+        // Close menu bar, if it is displayed
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
         
         // Continue displaying current app but set up the 
         // idle screen in the background
@@ -563,6 +747,9 @@
         }
     else
         {
+        // Close menu bar, if it is displayed
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+        
          // Display idle screen
         DisplayIdleScreenL();
         }
@@ -583,12 +770,10 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::MakeStateTransitionToSingleL()");
+    // Close menu bar, if it is displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
  
-    if ( IsNumberEntryUsedL() )
-        {
-        // Show the number entry if it exists
-        SetNumberEntryVisibilityL(ETrue);
-        }
+
     SetTouchPaneButtons( EPhoneIncallButtons );    
   
     // Go to single state
@@ -604,12 +789,9 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::MakeStateTransitionToTwoSinglesL()");
+    // Close menu bar, if it is displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    if ( IsNumberEntryUsedL() )
-        {
-        // Show the number entry if it exists
-        SetNumberEntryVisibilityL(ETrue);
-        }
         
     SetTouchPaneButtons( EPhoneTwoSinglesButtons );        
     
@@ -621,6 +803,21 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneConference::CloseSelectionListL
+// -----------------------------------------------------------
+//
+void CPhoneConference::CloseSelectionListL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneConference::CloseSelectionListL()");
+    // Close conference list
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( EFalse );
+    iViewCommandHandle->ExecuteCommandL( 
+        EPhoneViewOpenConferenceList, &booleanParam );
+    }
+
+// -----------------------------------------------------------
 // CPhoneConference::ToggleHold
 // -----------------------------------------------------------
 //
@@ -628,78 +825,76 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::ToggleHoldL()");
-    
-    TPECallControlCaps callControlCaps =
-        iStateMachine->PhoneEngineInfo()->CallControlCaps( KConferenceCallId );
+    TPhoneCmdParamBoolean hold;
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetHoldFlag, &hold );
     
-    if ( callControlCaps & MCCECallObserver::ECCECapsHold  )
+    if( hold.Boolean() )
         {
-        iStateMachine->SetCallId( KConferenceCallId );         
         iStateMachine->SendPhoneEngineMessage( 
-            CPEPhoneModelIF::EPEMessageHold );    
-        }
-    else if ( callControlCaps & MCCECallObserver::ECCECapsResume )
-        {
-        iStateMachine->SetCallId( KConferenceCallId );         
-        iStateMachine->SendPhoneEngineMessage( 
-            CPEPhoneModelIF::EPEMessageResume );    
+            CPEPhoneModelIF::EPEMessageResumeConference );
         }
     else
         {
-        SendGlobalInfoNoteL( EPhoneNoteTextNotAllowed, ETrue );    
+        iStateMachine->SendPhoneEngineMessage( 
+            CPEPhoneModelIF::EPEMessageHoldConference );
         }
     }
 
 // -----------------------------------------------------------
-// CPhoneConference::HandleDiallingL
+// CPhoneConference::HandleDialingL
 // -----------------------------------------------------------
 //
-void CPhoneConference::HandleDiallingL( TInt aCallId )
+void CPhoneConference::HandleDialingL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
-        "CPhoneConference::HandleDiallingL()");
-    BeginUiUpdateLC(); 
-    
-    SetNumberEntryVisibilityL(EFalse);
+        "CPhoneConference::HandleDialingL()");
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    CloseSelectionListL();
     
     // Display call setup 
     DisplayCallSetupL( aCallId );
-    
-    // Conference is understood as single call in buttons enumerations.
-    SetTouchPaneButtons(EPhoneCallSetupAndSingleButtons); 
-
-    EndUiUpdate();
-    
-    // Set Call Setup CBA 
-    UpdateCbaL( EPhoneCallHandlingCallSetupCBA );
-      
+          
     // Go to conference and call setup state
     iStateMachine->ChangeState( EPhoneStateConferenceAndCallSetup );
     }
 
 // -----------------------------------------------------------
-// CPhoneConference::DisplayCallSetupL
+// CPhoneConference::DoStateSpecificCallSetUpDefinitionsL
 // -----------------------------------------------------------
 //
-void CPhoneConference::DisplayCallSetupL( TInt aCallId )
+EXPORT_C void CPhoneConference::DoStateSpecificCallSetUpDefinitionsL()
+    {
+    // Show incoming call buttons
+    SetTouchPaneButtons( EPhoneCallSetupAndSingleButtons );
+    }
+
+// ---------------------------------------------------------
+// CPhoneConference::CallFromNewCallQueryL
+// ---------------------------------------------------------
+//
+void CPhoneConference::CallFromNewCallQueryL()
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
-        "CPhoneConference::DisplayCallSetupL()");
-
-    // Remove dialogs if necessary
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-
-    // Capture keys when the phone is dialling
-    CaptureKeysDuringCallNotificationL( ETrue );
+        "CPhoneConference::CallFromNewCallQueryL()");
+    // First get the phone number from the dialog
+    TPhoneCmdParamString phoneNumberParam;
+    HBufC *content = HBufC::NewLC( KPhoneNumberEntryBufferSize );
+    TPtr ptr( content->Des() );
+    phoneNumberParam.SetString( &ptr );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetTextQueryContent,
+        &phoneNumberParam );
 
-    // Bring Phone app in the foreground
-    TPhoneCmdParamInteger uidParam;
-    uidParam.SetInteger( KUidPhoneApplication.iUid );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground,
-        &uidParam );
+    // Store the phone number
+    iStateMachine->PhoneEngineInfo()->SetPhoneNumber( ptr );
 
-    // Display call setup header
-    DisplayHeaderForOutgoingCallL( aCallId );
+    // clean up stack
+    CleanupStack::PopAndDestroy( content );
+  
+    // Dial number
+    DialVoiceCallL();
     }
 
 // -----------------------------------------------------------
@@ -711,25 +906,44 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::HandleIncomingL()");
     
+    CPhonePubSubProxy::Instance()->ChangePropertyValue(
+                    KPSUidScreenSaver,
+                    KScreenSaverAllowScreenSaver,
+                    EPhoneScreensaverNotAllowed );
+    
+    IsNumberEntryUsedL() ? 
+        BeginTransEffectLC( ECallUiAppear ) :
+        BeginTransEffectLC( ENumberEntryOpen );
     BeginUiUpdateLC();
- 
+    
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );    
+        }
+    
+    // Indicate that the menu application on foreground needs to be sent back to the foreground 
+    // after call is ended.
+    SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() );
+    
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
     
     // Get allow waiting call header param value.
     AllowShowingOfWaitingCallHeaderL( dialerParam );
+            
+    CloseSelectionListL();
+
     // Close fast swap window if it's displayed
-    CEikonEnv::Static()->DismissTaskList();
-    
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
+    EikonEnv()->DismissTaskList();
+
+    SetTouchPaneButtons( EPhoneWaitingCallButtons );
     
     // Display incoming call
     DisplayIncomingCallL( aCallId, dialerParam );
-    
-    SetTouchPaneButtons( EPhoneWaitingCallButtons );
 
     EndUiUpdate();
+    EndTransEffect();
 
     // Go to incoming state
     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
@@ -742,31 +956,19 @@
 //
 void CPhoneConference::DisplayIncomingCallL( 
     TInt aCallId, 
-    const TPhoneCmdParamBoolean aCommandParam )
+    const TPhoneCmdParamBoolean /*aCommandParam*/ )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
         "CPhoneConference::DisplayIncomingCallL()");
+    // Close menu bar, if it is displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
-    // Cannot delete active note, e.g. New call query, 
-    // but show waiting note with or without caller name
-    if ( IsAnyQueryActiveL() ||  
-        ( !aCommandParam.Boolean() && iOnScreenDialer ) )
-        {
-        CallWaitingNoteL( aCallId );        
-        }
-    else
-        {
-        // Remove any phone dialogs if they are displayed
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-        }
+    // Remove any phone dialogs if they are displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
 
     // Indicate that the Phone needs to be sent to the background if
     // an application other than the top application is in the foreground
-    TPhoneCmdParamBoolean booleanParam;
-    booleanParam.SetBoolean( !TopAppIsDisplayedL() );
-    iViewCommandHandle->ExecuteCommandL( 
-        EPhoneViewSetNeedToSendToBackgroundStatus,
-        &booleanParam );
+    SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() );
 
     // Bring Phone app in the foreground
     TPhoneCmdParamInteger uidParam;
@@ -808,6 +1010,7 @@
         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
         iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );                    
         SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );
+        SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
         }
     else
         {            
@@ -815,6 +1018,73 @@
         }       
     EndUiUpdate();
     }
+
+// -----------------------------------------------------------
+// CPhoneConference::OpenParticipantsListL
+// -----------------------------------------------------------
+//    
+void CPhoneConference::OpenParticipantsListL()
+    {
+    BeginUiUpdateLC();
+    
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( ETrue );
+    
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewOpenConferenceList,
+                                         &booleanParam );    
+
+    SetTouchPaneButtons( EPhoneParticipantListButtons );
+                                         
+    EndUiUpdate();
+    
+    iCbaManager->SetCbaL( EPhoneParticipantListCBA );
+     
+    // Find out is conference held or not
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallId( KConferenceCallId );
+    iViewCommandHandle->HandleCommandL( EPhoneViewGetCallState,
+        &callStateData );
+    
+    if( callStateData.CallState() == EPEStateHeld )
+        {
+        //set Private button to Dimmed.        
+        SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
+        } 
+    else
+        {
+        //set Private button to UnDimmed.        
+         SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate );        
+        }   
+                                           
+    }
+
+// -----------------------------------------------------------
+// CPhoneConference::IsConferenceBubbleInSelectionMode
+// -----------------------------------------------------------
+//
+TBool CPhoneConference::IsConferenceBubbleInSelectionMode() const
+    {
+    TPhoneCmdParamBoolean booleanParam;
+    
+    iViewCommandHandle->ExecuteCommand( 
+        EPhoneViewGetIsConferenceInSelectionMode, &booleanParam );
+    
+    return booleanParam.Boolean();
+    }
+
+// ---------------------------------------------------------
+// CPhoneState::HandleCreateNumberEntryL
+// ---------------------------------------------------------
+//
+void CPhoneConference::HandleCreateNumberEntryL( const TKeyEvent& aKeyEvent,
+        TEventCode aEventCode )
+    {
+    __LOGMETHODSTARTEND( EPhoneControl, "CPhoneConference::HandleCreateNumberEntryL() ");
+    if ( !IsConferenceBubbleInSelectionMode() )
+        {
+        CPhoneGsmInCall::HandleCreateNumberEntryL( aKeyEvent,aEventCode );
+        }
+    }
     
 // -----------------------------------------------------------
 // CPhoneConference::UpdateConferenceSecurityStatusL
@@ -841,4 +1111,35 @@
         }
     }
 
+// -----------------------------------------------------------
+// CPhoneConference::DisconnectCallL
+// -----------------------------------------------------------
+//
+void CPhoneConference::DisconnectCallL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConference::DisconnectCallL( ) ");
+    // Fetch active call's id from view
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallState( EPEStateConnected );
+    iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+
+    if( callStateData.CallId() == KErrNotFound )
+        {
+        // No connected call, find the hold call
+        callStateData.SetCallState( EPEStateHeld );
+        iViewCommandHandle->HandleCommandL(
+            EPhoneViewGetCallIdByState, &callStateData );
+        }
+  
+    if( callStateData.CallId() > KErrNotFound  )
+        {
+        iStateMachine->SendPhoneEngineMessage(
+                      CPEPhoneModelIF::EPEMessageHangUpConference );  
+        }
+    else
+        {
+        CPhoneState::DisconnectCallL();
+        }
+    }
 // End of File