phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp
branchRCL_3
changeset 61 41a7f70b3818
parent 58 40a3f856b14d
child 62 5266b1f337bd
--- a/phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp	Thu Aug 19 09:54:27 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp	Tue Aug 31 15:14:29 2010 +0300
@@ -19,6 +19,8 @@
 // INCLUDES
 #include <StringLoader.h>
 #include <cpephonemodelif.h>
+#include <featmgr.h>
+#include <telephonyvariant.hrh>
 #include "cphoneconferenceandwaiting.h"
 #include "mphonestatemachine.h"
 #include "phoneviewcommanddefinitions.h"
@@ -32,6 +34,8 @@
 #include "phonerssbase.h"
 #include "tphonecmdparamglobalnote.h"
 #include "phoneui.hrh"
+#include "cphonecenrepproxy.h"
+#include "mphonestorage.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -115,7 +119,7 @@
             break;
             
         case MEngineMonitor::EPEMessageDialing:
-            HandleDialingL( aCallId );
+            HandleDiallingL( aCallId );
             break;
             
         case MEngineMonitor::EPEMessageConferenceIdle:
@@ -126,6 +130,23 @@
             HandleWentOneToOneL( aCallId );
             break;
 
+        case MEngineMonitor::EPEMessageHeldConference:            
+        case MEngineMonitor::EPEMessageConnectedConference:
+            {
+            TPhoneCmdParamInteger callIdParam;
+            iViewCommandHandle->ExecuteCommandL( 
+                        EPhoneViewGetExpandedBubbleCallId, &callIdParam );
+            
+            CPhoneConference::HandlePhoneEngineMessageL( aMessage, 
+                            aCallId );
+            
+            if ( KConferenceCallId == callIdParam.Integer() )
+                {
+                iViewCommandHandle->ExecuteCommand(EPhoneSetConferenceExpanded);
+                }
+            }
+            break;
+            
         default:
             CPhoneConference::HandlePhoneEngineMessageL( aMessage, 
                 aCallId );
@@ -167,61 +188,19 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneConferenceAndWaiting::HandleErrorL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneConferenceAndWaiting::HandleErrorL( 
-        const TPEErrorInfo& aErrorInfo )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndWaiting::HandleErrorL()");
-    
-    if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
-        {
-        // Should not shown "No Answer" note
-        __PHONELOG1( EBasic, EPhoneUIStates,
-       "PhoneUIStates: CPhoneConferenceAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ",
-            aErrorInfo.iErrorCode);
-        }
-    else
-        {
-        CPhoneState::HandleErrorL( aErrorInfo );
-        }
-    }
-
-// -----------------------------------------------------------
-// CPhoneConferenceAndWaiting::OpenMenuBarL
+// CPhoneConferenceAndWaiting::HandleKeyEventL
 // -----------------------------------------------------------
 //
-void CPhoneConferenceAndWaiting::OpenMenuBarL()
+void CPhoneConferenceAndWaiting::HandleKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode /*aEventCode*/ )
     {
-    __LOGMETHODSTARTEND(EPhoneUIStates, 
-        "CPhoneConferenceAndWaiting::OpenMenuBarL()");
-        
-    TInt resourceId( EPhoneConfAndCallWaitingMenubar );
-    
-    if( IsNumberEntryVisibleL() )
-        {
-        resourceId = EPhoneConfAndCallWaitingMenubarWithNumberEntry;
-        }
-    else if ( IsConferenceBubbleInSelectionMode() )
+    if( EKeyDeviceF == aKeyEvent.iCode )
         {
-        resourceId = EPhoneConfCallParticipantsMenubar;    
-        }        
-    
-    TPhoneCmdParamBoolean booleanParam;
-    const TBool videoWaiting = IsVideoCallRingingL();
-    booleanParam.SetBoolean( videoWaiting );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndWaitingVideo,
-        &booleanParam );
-    
-    
-    TPhoneCmdParamInteger integerParam;
-    integerParam.SetInteger( 
-                CPhoneMainResourceResolver::Instance()->
-                ResolveResourceID( resourceId ) );
-                
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, 
-        &integerParam );
+        __PHONELOG( EBasic, EPhoneUIStates,
+            "CPhoneConferenceAndWaiting::HandleKeyMessageL-deviceF" );
+        HandleHoldSwitchL();
+        }
     }
 
 // -----------------------------------------------------------
@@ -265,35 +244,51 @@
 void CPhoneConferenceAndWaiting::MakeStateTransitionToConferenceAndSingleL( TInt aCallId )
     {
     __LOGMETHODSTARTEND(EPhoneUIStates, "CPhoneConferenceAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
-    BeginUiUpdateLC();
     
+    if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
+        && iStateMachine->PhoneStorage()->IsScreenLocked() )
+        {
+        EnableCallUIL();
+        }
+    
+    // Reset blocked keys list
+    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
+        
+    BeginUiUpdateLC();    
+         
     UpdateRemoteInfoDataL ( aCallId );
-    if ( IsConferenceBubbleInSelectionMode() )
-        {
-        CloseSelectionListL();
-        }
+    
+    // Show bubble
     TPhoneCmdParamCallHeaderData callHeaderParam;
     callHeaderParam.SetCallState( EPEStateConnected );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, 
-            aCallId, &callHeaderParam );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, 
+        &callHeaderParam );
+    
+    
     if ( IsNumberEntryUsedL() )
         {
-        if ( NeedToReturnToForegroundAppL() )
+        if ( NeedToSendToBackgroundL() )
+            {           
+            UpdateCbaL( EPhoneCallHandlingInCallCBA );
+            }
+        else
             {
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
-            UpdateCbaL( EPhoneCallHandlingInCallCBA );
+            // Show the number entry if it exists.
+            SetNumberEntryVisibilityL(ETrue);
             }
         }
     else
         {
         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
+        // If numberentry is not open just check NeedToSendToBackgroundL and 
+        // sendbackround if needed.
         }
     SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );
-    SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
     
     EndUiUpdate();
+
     // CBA updates in above if-else conditions
-    iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );
+    iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );                     
     }
 
 // -----------------------------------------------------------
@@ -316,52 +311,65 @@
     
     if( iRingingCallId == aCallId )
         {
-        BeginUiUpdateLC();
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+        
+        BeginUiUpdateLC();    
+
+        // Remove call 
         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
             
         if ( IsNumberEntryUsedL() )
             {
-            if ( NeedToReturnToForegroundAppL() ) 
+            if ( NeedToSendToBackgroundL() )
                 {
-                // Return phone to the background if menu application is needed to foreground.
+                // Return phone to the background if send to background is needed.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
+
                 UpdateCbaL( EPhoneCallHandlingInCallCBA );
                 }
+            else
+                {
+                // Show the number entry if it exists.
+                SetNumberEntryVisibilityL(ETrue);
+                }
             }
         else
             {
             UpdateCbaL( EPhoneCallHandlingInCallCBA );
-            // If numberentry is not open just check NeedToReturnToForegroundAppL and 
+            // If numberentry is not open just check NeedToSendToBackgroundL and 
             // sendbackround if needed.
-            if ( NeedToReturnToForegroundAppL() )
+            if ( NeedToSendToBackgroundL() )
                 {
                 // Return phone to the background if send to background is needed.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
                 }
             }
         
-        if ( iViewCommandHandle->HandleCommandL( EPhoneViewIsConferenceInExpandedMode ) 
-                == EPhoneViewResponseSuccess )
+        if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
+            && iStateMachine->PhoneStorage()->IsScreenLocked() )
             {
-            SetTouchPaneButtons( EPhoneParticipantListButtons );
+            EnableCallUIL();
             }
-        else
-            {
-            SetTouchPaneButtons( EPhoneConferenceButtons );    
-            }
+        
+        // Reset blocked keys list
+        iStateMachine->PhoneStorage()->ResetBlockedKeysList();
+
+        SetTouchPaneButtons( EPhoneConferenceButtons );    
+        
         EndUiUpdate();
+         
+        // Go to conference state
         // CBA updates in above if-else conditions
-        iStateMachine->ChangeState( EPhoneStateConference );
+        iStateMachine->ChangeState( EPhoneStateConference );                    
         }
     else
         {
         // Idle message came for conference member
-        CPhoneConference::HandleIdleL( aCallId );
+        CPhoneConference::HandleIdleL( aCallId );           
+        
         TPhoneCmdParamBoolean conferenceBubbleExists;
         iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference,
-                                             &conferenceBubbleExists );
+                                             &conferenceBubbleExists );                            
+                
         if( !conferenceBubbleExists.Boolean() )
             {
             HandleConferenceIdleL();
@@ -376,12 +384,15 @@
 void CPhoneConferenceAndWaiting::HandleConferenceIdleL()
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndWaiting::HandleConferenceIdleL()");
+ 
     BeginUiUpdateLC();
+    
     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+    
     TPhoneCmdParamInteger activeCallCount;
     iViewCommandHandle->ExecuteCommandL(
-            EPhoneViewGetCountOfActiveCalls, &activeCallCount );
+        EPhoneViewGetCountOfActiveCalls, &activeCallCount );
+        
     switch( activeCallCount.Integer() )
         {
         case ENoActiveCalls:
@@ -400,24 +411,26 @@
             BringIncomingToForegroundL(); 
            
             SetCallHeaderTextsForCallComingInL( iRingingCallId, EFalse, &callHeaderParam );
-            
+          
             iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, 
                 iRingingCallId ,&callHeaderParam );
             iCbaManager->UpdateIncomingCbaL( iRingingCallId );
-            UpdateSilenceButtonDimming();
             
             // Hide number entry if visible
             if ( IsNumberEntryVisibleL() )
                 {
-                SetNumberEntryVisibilityL(EFalse);
+                SetNumberEntryVisibilityL(EFalse);   
                 }
+            
+            // Check if HW Keys or Call UI should be disabled
+            CheckDisableHWKeysAndCallUIL();
+            
             SetTouchPaneButtons( EPhoneIncomingCallButtons );
-            SetTouchPaneButtonEnabled( EPhoneCallComingCmdSilent );
-            SetRingingTonePlaybackL( iRingingCallId );
-            SetToolbarDimming( ETrue );
+            SetRingingTonePlaybackL( iRingingCallId );          
+            SetBackButtonActive(EFalse);
             iStateMachine->ChangeState( EPhoneStateIncoming );
-            }
-            break;
+            break;   
+            }   
             
         case EOneActiveCall:
             if ( IsNumberEntryUsedL() )
@@ -427,7 +440,11 @@
                 }
             // Go to waiting in single state
             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
-            SetTouchPaneButtons( EPhoneWaitingCallButtons );
+            
+            // Check if HW Keys or Call UI should be disabled
+            CheckDisableHWKeysAndCallUIL();
+            
+            SetTouchPaneButtons( EPhoneWaitingCallButtons );             
             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );
             break;
             
@@ -439,7 +456,12 @@
                 }
             // Go to two singles and waiting state
             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
-            SetTouchPaneButtons( EPhoneWaitingCallButtons ); 
+            
+            // Check if HW Keys or Call UI should be disabled
+            CheckDisableHWKeysAndCallUIL();
+            
+            SetTouchPaneButtons( EPhoneWaitingCallButtons );               
+
             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
             break; 
         default:
@@ -447,7 +469,7 @@
           // Waiting for all conference member idles
           // This case may happen when 'End all calls' because conferenceIdle may 
           // come earlier than idle for conference member
-           break;
+           break;            
         }
     EndUiUpdate();
     }
@@ -463,29 +485,33 @@
     }
 
 // -----------------------------------------------------------
-// CPhoneConferenceAndWaiting::HandleDialingL
+// CPhoneConferenceAndWaiting::HandleDiallingL
 // -----------------------------------------------------------
 //
-void CPhoneConferenceAndWaiting::HandleDialingL( TInt aCallId )
+void CPhoneConferenceAndWaiting::HandleDiallingL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
-        "CPhoneConferenceAndWaiting::HandleDialingL()");
+        "CPhoneConferenceAndWaiting::HandleDiallingL()");
+
+    BeginUiUpdateLC();
+    // Hide number entry if it exists
+    SetNumberEntryVisibilityL(EFalse);        
+
     // Display call setup 
     DisplayCallSetupL( aCallId );
+
+    SetTouchPaneButtons( EPhoneCallSetupButtons ); 
+
+    EndUiUpdate();
+    
+    // Update conference and waiting and call setup softkeys
+    UpdateCbaL( EPhoneCallHandlingCallSetupCBA );
+    
     // Go to conference and waiting and call setup state
     iStateMachine->ChangeState( EPhoneStateConferenceAndWaitingAndCallSetup );
     }
 
 // -----------------------------------------------------------
-// CPhoneConferenceAndWaiting::DoStateSpecificCallSetUpDefinitionsL
-// -----------------------------------------------------------
-//
-EXPORT_C void CPhoneConferenceAndWaiting::DoStateSpecificCallSetUpDefinitionsL()
-    {
-    SetTouchPaneButtons( EPhoneCallSetupButtons );
-    }
-
-// -----------------------------------------------------------
 // CPhoneConferenceAndWaiting::HandleWentOneToOneL
 // -----------------------------------------------------------
 //
@@ -516,14 +542,48 @@
     if( conferenceBubbleExists.Boolean() && 
         ( iRingingCallId != KErrNotFound ) )
         {
-        // Set touch controls
-        SetTouchPaneButtonDisabled( EPhoneCallComingCmdAnswer );
         SetTouchPaneButtons( EPhoneWaitingCallButtons );
         UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
         // Go to Conference And Single And Waiting state
         iStateMachine->ChangeState( EPhoneStateConferenceAndSingleAndWaiting );  
         }
+
     EndUiUpdate();
     }
 
+// -----------------------------------------------------------
+// CPhoneConferenceAndWaiting::HandleCommandL
+// -----------------------------------------------------------
+//
+TBool CPhoneConferenceAndWaiting::HandleCommandL( TInt aCommand )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates,
+        "CPhoneConferenceAndWaiting::HandleCommandL() ");
+    TBool commandStatus = ETrue;
+
+    switch( aCommand )
+        {
+        case EPhoneCmdUpdateUiControls:
+            UpdateUiControlsL();
+            break;
+
+        default:
+            commandStatus = CPhoneConference::HandleCommandL( aCommand );
+            break;
+        }
+
+    return commandStatus;
+    }
+
+// -----------------------------------------------------------
+// CPhoneConferenceAndWaiting::UpdateUiControlsL
+// -----------------------------------------------------------
+//
+void CPhoneConferenceAndWaiting::UpdateUiControlsL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndWaiting::UpdateUiControlsL( ) ");
+    iViewCommandHandle->ExecuteCommand(EPhoneSetConferenceExpanded);
+    UpdateCbaL( EPhoneCallHandlingInCallCBA );
+    }
+
 // End of File