phoneapp/phoneuistates/src/cphonesingleandwaiting.cpp
branchRCL_3
changeset 61 41a7f70b3818
parent 58 40a3f856b14d
child 62 5266b1f337bd
--- a/phoneapp/phoneuistates/src/cphonesingleandwaiting.cpp	Thu Aug 19 09:54:27 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphonesingleandwaiting.cpp	Tue Aug 31 15:14:29 2010 +0300
@@ -42,6 +42,7 @@
 #include "phonelogger.h"
 #include "cphonecenrepproxy.h"
 #include "cphonepubsubproxy.h"
+#include "mphonestorage.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -65,14 +66,7 @@
 //
 CPhoneSingleAndWaiting::~CPhoneSingleAndWaiting()
     {
-    if( iViewCommandHandle )
-        {
-        TPhoneCmdParamBoolean dtmfSendFlag;
-        dtmfSendFlag.SetBoolean( EFalse );
-        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( 
-                        EPhoneViewSetVideoCallDTMFVisibilityFlag,
-                        &dtmfSendFlag ); )
-        }
+
     }
 
 // -----------------------------------------------------------
@@ -149,7 +143,7 @@
             break;
 
         case MEngineMonitor::EPEMessageDialing:
-            HandleDialingL( aCallId );
+            HandleDiallingL( aCallId );
             break;
             
         case MEngineMonitor::EPEMessageDisconnecting:
@@ -191,11 +185,9 @@
             }
 
         case EPhoneInCallCmdNewCall:
-            LaunchNewCallQueryL();
             break;
 
         case EPhoneInCallCmdNewCallCall:
-            CallFromNewCallQueryL();
             break;
 
         case EPhoneCallComingCmdReject: // fall through
@@ -218,6 +210,10 @@
                 MPEPhoneModel::EPEMessageReject );
             break;
 
+        case EPhoneCmdUpdateUiControls:
+            UpdateUiControlsL();
+            break;
+
         default:
             commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand );
             break;
@@ -226,65 +222,6 @@
     return commandStatus;
     }
 
-// -----------------------------------------------------------
-// CPhoneSingleAndWaiting::OpenMenuBarL
-// -----------------------------------------------------------
-//
-void CPhoneSingleAndWaiting::OpenMenuBarL()
-    {
-    __LOGMETHODSTARTEND( EPhoneUIStates,
-        "CPhoneSingleAndWaiting::OpenMenuBarL() ");
-    TInt resourceId ( KErrNone );
-
-
-    if ( !IsAutoLockOn() )
-        {
-         if( IsVideoCallActiveL() || IsVideoCallRingingL() )
-            {
-            //DTMF hiding will be set to TRUE
-            if( IsVideoCallActiveL() )
-                {
-                TPhoneCmdParamBoolean dtmfSendFlag;
-                dtmfSendFlag.SetBoolean( ETrue );
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewSetVideoCallDTMFVisibilityFlag,
-                        &dtmfSendFlag );
-                }
-            if ( IsNumberEntryVisibleL() )
-                {
-                resourceId = EPhoneVideoCallWaitingMenubarWithNumberEntry;
-                }
-            else
-                {
-                resourceId = EPhoneVideoCallWaitingMenubar;
-                }
-            }
-
-        else // single voice and waiting voice
-            {
-            if ( IsNumberEntryVisibleL() )
-                {
-                resourceId = EPhoneCallWaitingMenubarWithNumberEntry;
-                }
-            else
-                {
-                resourceId = EPhoneCallWaitingMenubar;
-                }
-            }
-        }
-    else
-        {
-        resourceId = EPhoneCallWaitingLockMenubar;
-        }
-
-
-    TPhoneCmdParamInteger integerParam;
-    integerParam.SetInteger(
-        CPhoneMainResourceResolver::Instance()->
-        ResolveResourceID( resourceId ) );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen,
-        &integerParam );
-    }
-
 // --------------------------------------------------------------
 // CPhoneSingleAndWaiting::HandleKeyMessageL
 // --------------------------------------------------------------
@@ -327,6 +264,22 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneSingleAndWaiting::HandleKeyEventL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndWaiting::HandleKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode /*aEventCode*/ )
+    {
+    if( EKeyDeviceF == aKeyEvent.iCode )
+        {
+        __PHONELOG( EBasic, EPhoneUIStates,
+            "CPhoneSingleAndWaiting::HandleKeyMessageL-deviceF" );
+        HandleHoldSwitchL();
+        }
+    }
+
+// -----------------------------------------------------------
 // CPhoneSingleAndWaiting::HandleIdleL
 // -----------------------------------------------------------
 //
@@ -334,8 +287,6 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates,
         "CPhoneSingleAndWaiting::HandleIdleL() ");
-    // Close menu bar, if it is displayed
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
 
     if ( iSingleCallId == KErrNotFound )
         {
@@ -410,38 +361,42 @@
                 SetNumberEntryVisibilityL(EFalse);
                 }
 
+            // Check if HW Keys or Call UI should be disabled
+            CheckDisableHWKeysAndCallUIL();
+            
             SetTouchPaneButtons( EPhoneIncomingCallButtons );
-            SetTouchPaneButtonEnabled( EPhoneCallComingCmdSilent );
             
             // Bring up callhandling view
             BringIncomingToForegroundL();
 
             //Set incoming cba
             iCbaManager->UpdateIncomingCbaL( callStateData.CallId() );
-            UpdateSilenceButtonDimming();
             
             // Play ringtone
             SetRingingTonePlaybackL( callStateData.CallId() );
             }
+
+        SetBackButtonActive(EFalse);
         EndUiUpdate();
-        SetToolbarDimming( ETrue );
 
         iStateMachine->ChangeState( EPhoneStateIncoming );
         }
     else
         {
+
         BeginUiUpdateLC();
 
         // Remove call
         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
+
         // Idle message came for waiting call
         if ( IsNumberEntryUsedL() )
             {
-            if ( NeedToReturnToForegroundAppL() )
+            if ( NeedToSendToBackgroundL() )
                 {
                 // Return phone to the background if send to background is needed.
                 iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
-                iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
+
                 UpdateCbaL( EPhoneCallHandlingInCallCBA );
                 }
             else
@@ -453,30 +408,32 @@
         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 ( IsVideoCall( iSingleCallId ) )
+        // Enable call UI
+        if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
+            && iStateMachine->PhoneStorage()->IsScreenLocked() )
             {
-            TPhoneCmdParamInteger uidParam;
-            uidParam.SetInteger( KVtUiAppUidValue.iUid );
+            EnableCallUIL();
+            }
 
-            // Set video Phone as the top application
-            iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication,
-                &uidParam );
-            }
-        
+        // Reset blocked keys list
+        iStateMachine->PhoneStorage()->ResetBlockedKeysList();
+
         SetTouchPaneButtons( EPhoneIncallButtons );
         EndUiUpdate();
+
         // CBA updates in above if-else conditions
         iStateMachine->ChangeState( EPhoneStateSingle );
         }
+
     }
 
 // -----------------------------------------------------------
@@ -496,7 +453,7 @@
     TInt callLabelId = CPhoneMainResourceResolver::Instance()->
             ResolveResourceID( EPhoneCallOnHold );
 
-    StringLoader::Load( labelText, callLabelId, CCoeEnv::Static() );
+    StringLoader::Load( labelText, callLabelId, CCoeEnv::Static() );        
     callHeaderParam.SetLabelText( labelText );
 
     iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId,
@@ -513,6 +470,8 @@
         }
 
     UpdateInCallCbaL();
+    
+    SetTouchPaneButtons( EPhoneWaitingCallButtons ); 
     }
 
 // -----------------------------------------------------------
@@ -548,12 +507,6 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates,
         "CPhoneSingleAndWaiting::HandleUnholdL() ");
-    // Close menu if focus is somewhere else than number entry.
-    if ( !IsNumberEntryUsedL() )
-        {
-        // Close menubar
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
-        }
 
     // Show bubble
     TPhoneCmdParamCallHeaderData callHeaderParam;
@@ -572,7 +525,9 @@
         }
 
     // Set CBAs
-    UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
+    UpdateInCallCbaL();
+    
+    SetTouchPaneButtons( EPhoneWaitingCallButtons ); 
     }
 
 // -----------------------------------------------------------
@@ -583,7 +538,12 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates,
         "CPhoneSingleAndWaiting::MakeStateTransitionToTwoSinglesL() ");
+    
+    // Reset blocked keys list
+    iStateMachine->PhoneStorage()->ResetBlockedKeysList();
+    
     BeginUiUpdateLC();
+
     UpdateRemoteInfoDataL ( aCallId );
     // Show bubble
     TPhoneCmdParamCallHeaderData callHeaderParam;
@@ -596,83 +556,91 @@
     holdFlag.SetBoolean( EFalse );
     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
 
-    // Close dtmf dialer if exist.
-    if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
-        {
-        CloseDTMFEditorL();
-        }
-    else if ( iOnScreenDialer && IsCustomizedDialerVisibleL() )
+    if ( IsNumberEntryUsedL() )
         {
-        CloseCustomizedDialerL();
-        }
-     
-    if ( IsNumberEntryUsedL() && NeedToReturnToForegroundAppL() )
-        {
-        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
-        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+        if ( NeedToSendToBackgroundL() )
+            {
+            // Return phone to the background if send to background is needed.
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
+
+            UpdateCbaL( EPhoneCallHandlingInCallCBA );
+            }
+        else
+            {
+            // Show the number entry if it exists.
+            SetNumberEntryVisibilityL(ETrue);
+            }
         }
     else
         {
-        // Set Two singles state softkeys
+        // Set Two singles softkeys
         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
         }
-    
+
     SetTouchPaneButtons( EPhoneTwoSinglesButtons );
     EndUiUpdate();
+
+    // Go to two singles state
     // CBA updates in above if-else conditions
     iStateMachine->ChangeState( EPhoneStateTwoSingles );
     }
 
-// ---------------------------------------------------------
-// CPhoneSingleAndWaiting::CallFromNewCallQueryL
-// ---------------------------------------------------------
+// -----------------------------------------------------------
+// CPhoneSingleAndWaiting::HandleDiallingL
+// -----------------------------------------------------------
 //
-void CPhoneSingleAndWaiting::CallFromNewCallQueryL()
+void CPhoneSingleAndWaiting::HandleDiallingL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates,
-        "CPhoneSingleAndWaiting::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 );
+        "CPhoneSingleAndWaiting::HandleDiallingL() ");
 
-    // Store the phone number
-    iStateMachine->PhoneEngineInfo()->SetPhoneNumber( ptr );
+    BeginUiUpdateLC();
 
-    // clean up stack
-    CleanupStack::PopAndDestroy( content );
-
-    DialVoiceCallL();
-    }
+    // Hide number entry if it exists
+    SetNumberEntryVisibilityL(EFalse);
 
-// -----------------------------------------------------------
-// CPhoneSingleAndWaiting::HandleDialingL
-// -----------------------------------------------------------
-//
-void CPhoneSingleAndWaiting::HandleDialingL( TInt aCallId )
-    {
-    __LOGMETHODSTARTEND( EPhoneUIStates,
-        "CPhoneSingleAndWaiting::HandleDialingL() ");
     // Display call setup
     DisplayCallSetupL( aCallId );
+
+    // Set Hold flag to view ( DTMF menu label have to present )
+    TPhoneCmdParamBoolean holdFlag;
+    holdFlag.SetBoolean( EFalse );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
+
+    SetTouchPaneButtons( EPhoneCallSetupButtons );
+
+    EndUiUpdate();
+
+    // Update call setup CBAs
+    UpdateCbaL( EPhoneCallHandlingCallSetupCBA );
+
     // Go to Single And Waiting And Call Setup state
     iStateMachine->ChangeState( EPhoneStateSingleAndCallSetupAndWaiting );
     }
 
 // -----------------------------------------------------------
-// CPhoneSingleAndWaiting::DoStateSpecificCallSetUpDefinitionsL
+// CPhoneSingleAndWaiting::DisplayCallSetupL
 // -----------------------------------------------------------
 //
-EXPORT_C void CPhoneSingleAndWaiting::DoStateSpecificCallSetUpDefinitionsL()
+void CPhoneSingleAndWaiting::DisplayCallSetupL( TInt aCallId )
     {
-    // Set Hold flag to view ( DTMF menu label have to present )
-    TPhoneCmdParamBoolean holdFlag;
-    holdFlag.SetBoolean( EFalse );
-    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
-    SetTouchPaneButtons( EPhoneCallSetupButtons );
+    __LOGMETHODSTARTEND( EPhoneUIStates,
+        "CPhoneSingleAndWaiting::DisplayCallSetupL() ");
+
+    // Remove dialogs if necessary
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+
+    // Capture keys when the phone is dialling
+    CaptureKeysDuringCallNotificationL( ETrue );
+
+    // Force telephony to the foreground
+    TPhoneCmdParamInteger uidParam;
+    uidParam.SetInteger( KUidPhoneApplication.iUid );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground,
+        &uidParam );
+
+    // Display call setup header
+    DisplayHeaderForOutgoingCallL( aCallId );
     }
 
 // -----------------------------------------------------------
@@ -683,7 +651,18 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates,
         "CPhoneSingleAndWaiting::UpdateInCallCbaL() ");
-     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
+    TPhoneCmdParamInteger callIdParam;
+    iViewCommandHandle->ExecuteCommandL( 
+            EPhoneViewGetExpandedBubbleCallId, &callIdParam );
+
+    if ( callIdParam.Integer()==iSingleCallId )
+        {
+        CPhoneGsmInCall::UpdateInCallCbaL();
+        } 
+    else 
+        {
+        iCbaManager->SetCbaL(  EPhoneCallHandlingCallWaitingCBA );
+        }
     }
 
 // -----------------------------------------------------------
@@ -711,9 +690,33 @@
 // CPhoneSingleAndWaiting::HandleDisconnectingL
 // -----------------------------------------------------------
 //
-void CPhoneSingleAndWaiting::HandleDisconnectingL( TInt /*aCallId*/ )
+void CPhoneSingleAndWaiting::HandleDisconnectingL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleAndWaiting::HandleDisconnectingL( ) ");
+    
+    if( ( iSingleCallId == aCallId ) && IsVideoCall( aCallId ) )
+        {
+        __PHONELOG( EBasic, EPhoneControl, 
+            "CPhoneSingleAndWaiting::HandleDisconnectingL EPhoneViewSetNeedToSendToBackgroundStatus" );
+        
+        // Keep phone on the foreground
+        TPhoneCmdParamBoolean booleanParam;
+        booleanParam.SetBoolean( EFalse );
+        iViewCommandHandle->ExecuteCommandL(
+            EPhoneViewSetNeedToSendToBackgroundStatus,
+            &booleanParam );
+        }
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndWaiting::UpdateUiControlsL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndWaiting::UpdateUiControlsL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleAndWaiting::UpdateUiControlsL( ) ");
+    
+    UpdateInCallCbaL();
     }
 
 // End of File