phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp
branchRCL_3
changeset 62 5266b1f337bd
parent 61 41a7f70b3818
child 69 8baf28733c3d
--- a/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp	Tue Aug 31 15:14:29 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp	Wed Sep 01 12:30:10 2010 +0100
@@ -57,6 +57,16 @@
 //
 CPhoneConferenceAndSingle::~CPhoneConferenceAndSingle()
     {
+    // Need to check iViewCommandHandle validity here to not
+    // trigger a high/can panic error in a Codescanner run.
+    // coverity[var_compare_op]
+    if ( iViewCommandHandle )
+        {
+        TPhoneCmdParamBoolean dtmfSendFlag;
+        dtmfSendFlag.SetBoolean( EFalse );
+        TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
+    	    &dtmfSendFlag ) );     	
+        }
     }
 
 // -----------------------------------------------------------
@@ -68,6 +78,7 @@
 void CPhoneConferenceAndSingle::ConstructL()
     {
     CPhoneConference::ConstructL();
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
     }
 
 // -----------------------------------------------------------
@@ -118,13 +129,13 @@
             HandleHeldL( aCallId );
             break;
             
-        case MEngineMonitor::EPEMessageInValidEmergencyNumber:              
-            SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed, ETrue );                       
+        case MEngineMonitor::EPEMessageInValidEmergencyNumber:				
+	 		SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed );  	 					
             break;
             
         case MEngineMonitor::EPEMessageValidEmergencyNumber:
             DialVoiceCallL();
-            break;                          
+            break;        	 				
            
         case MEngineMonitor::EPEMessageAddedConferenceMember:
             HandleAddedConferenceMemberL( aCallId );
@@ -155,6 +166,7 @@
                     
         case EAknSoftkeyCancel:
             commandStatus = CPhoneConference::HandleCommandL( aCommand );
+            iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
             SetTouchPaneButtons( EPhoneConferenceAndHeldSingleButtons );
             break;
             
@@ -164,6 +176,8 @@
             break;
         
         case EPhoneInCallCmdParticipants:
+            commandStatus = CPhoneConference::HandleCommandL( aCommand );
+            SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
             break;
         
         default:
@@ -175,6 +189,116 @@
     }
 
 // -----------------------------------------------------------
+// CPhoneConferenceAndSingle::OpenMenuBarL
+// -----------------------------------------------------------
+//
+void CPhoneConferenceAndSingle::OpenMenuBarL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::OpenMenuBarL");
+    
+    // Set Conference And Single specific flag to view
+    TPhoneCmdParamBoolean conferenceAndSingleFlag;
+    conferenceAndSingleFlag.SetBoolean( ETrue );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag, 
+    	&conferenceAndSingleFlag );
+    
+    // Set specific flag to view so that DTMF menu item available
+    TPhoneCmdParamBoolean dtmfSendFlag;
+    dtmfSendFlag.SetBoolean( ETrue );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
+    	&dtmfSendFlag );    	
+    
+    TPhoneViewResponseId response;
+    TPhoneCmdParamCallStateData callStateData;
+    TPhoneCmdParamBoolean booleaParam;
+    TInt heldCallId( KErrNotFound );
+    TInt connectedCallId( KErrNotFound );
+    
+    // Fetch active call's id from view
+    callStateData.SetCallState( EPEStateConnected );
+    response = iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+    if( response != EPhoneViewResponseSuccess )
+        {
+        // Unsuccesfull fetch - do nothing
+        return;            
+        }
+    connectedCallId = callStateData.CallId();
+    
+    // Fetch held call's id from view
+    callStateData.SetCallState( EPEStateHeld );
+    response = iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+    if( response != EPhoneViewResponseSuccess )
+        {
+        // Unsuccesfull fetch - do nothing
+        return;            
+        }
+    heldCallId = callStateData.CallId();
+
+    // Open the correct menubar according which call is active
+    TInt resourceId;
+    if( connectedCallId == KConferenceCallId )
+        {
+        if ( IsNumberEntryVisibleL() )
+            {
+            resourceId = EPhoneConfAndHeldCallMenubarWithNumberEntry;
+            }
+        else if ( IsConferenceBubbleInSelectionMode() )
+            {
+            resourceId = EPhoneConfCallParticipantsDropMenubar;    
+            }
+        else
+            {
+            resourceId = EPhoneConfAndHeldCallMenubar;
+            }
+        }
+    else
+        {
+        if ( IsNumberEntryVisibleL() )
+            {
+            resourceId = EPhoneActiveAndHeldConfMenubarWithNumberEntry;
+            }
+        else if ( IsConferenceBubbleInSelectionMode() )
+            {
+            resourceId = EPhoneConfCallParticipantsDropMenubar;    
+            }            
+        else
+            {
+            resourceId = EPhoneActiveAndHeldConfMenubar;
+            }            
+        }
+        
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
+    
+    // Check that calls are the same type (f.ex. both are CS calls)
+    booleaParam.SetBoolean( 
+        heldCallId != KErrNotFound && connectedCallId != KErrNotFound &&
+        iStateMachine->PhoneEngineInfo()->CallType( heldCallId ) != 
+        iStateMachine->PhoneEngineInfo()->CallType( connectedCallId ));
+
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConfrenceOptionsFlag, 
+        &booleaParam );
+
+    if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
+        {
+        resourceId = EPhoneDtmfDialerMenubar;
+        }
+    else if ( iOnScreenDialer && IsCustomizedDialerVisibleL() )
+        {  
+        resourceId = CustomizedDialerMenuResourceIdL();         
+        }
+            
+    TPhoneCmdParamInteger integerParam;
+    integerParam.SetInteger( 
+                CPhoneMainResourceResolver::Instance()->
+                ResolveResourceID( resourceId ) );
+    
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, 
+        &integerParam );
+    }
+
+// -----------------------------------------------------------
 // CPhoneConferenceAndSingle::HandleConnectedConferenceL
 // -----------------------------------------------------------
 //
@@ -183,7 +307,7 @@
     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::HandleConnectedConferenceL");
     // Update call state
     TPhoneCmdParamCallHeaderData callHeaderParam;
-    callHeaderParam.SetCallState( EPEStateConnectedConference );
+    callHeaderParam.SetCallState( EPEStateConnected );
 
     TBuf<KPhoneCallHeaderLabelMaxLength> conferenceText( KNullDesC );
     TInt callLabelId = CPhoneMainResourceResolver::Instance()->
@@ -205,7 +329,7 @@
         EPhoneViewUpdateBubble, KConferenceCallId, &callHeaderParam );
     
     SetTouchPaneButtons( EPhoneConferenceAndHeldSingleButtons );
-    UpdateInCallCbaL();
+    
     EndUiUpdate();          
     }
 
@@ -220,7 +344,7 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::HandleHeldConferenceL");
     TPhoneCmdParamCallHeaderData callHeaderParam;
-    callHeaderParam.SetCallState( EPEStateHeldConference );
+    callHeaderParam.SetCallState( EPEStateHeld );
     
     TInt callLabelId;
     TBuf<KPhoneCallHeaderLabelMaxLength> labelText( KNullDesC );
@@ -232,6 +356,8 @@
         callLabelId, 
         CCoeEnv::Static() );        
     callHeaderParam.SetLabelText( labelText );
+         
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
 
     BeginUiUpdateLC();
      
@@ -250,14 +376,15 @@
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::HandleConnectedL");
     
+    UpdateInCallCbaL();
+    
+    
     // Display connected bubble
     TPhoneCmdParamCallHeaderData callHeaderParam;
     callHeaderParam.SetCallState( EPEStateConnected );
     iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, 
         &callHeaderParam );
-
-    UpdateInCallCbaL();
-    SetTouchPaneButtons( EPhoneConferenceButtons );
+    
     }
 
 // -----------------------------------------------------------
@@ -282,9 +409,7 @@
     callHeaderParam.SetLabelText( labelText );
 
     iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, 
-        &callHeaderParam );      
-    
-    SetTouchPaneButtons( EPhoneConferenceButtons );
+        &callHeaderParam );        
     }
 
 // -----------------------------------------------------------
@@ -303,9 +428,15 @@
     UpdateConferenceSecurityStatusL( aCallId );
 
     SetTouchPaneButtons( EPhoneConferenceButtons );
+    SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate );
     
     EndUiUpdate();
 
+    TPhoneCmdParamBoolean conferenceAndSingleFlag;
+    conferenceAndSingleFlag.SetBoolean( EFalse );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag, 
+    	&conferenceAndSingleFlag );
+
     UpdateCbaL( EPhoneCallHandlingInCallCBA );
     iStateMachine->ChangeState( EPhoneStateConference );        
     }
@@ -328,9 +459,17 @@
 void CPhoneConferenceAndSingle::HandleIncomingL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
-        "CPhoneConferenceAndSingle::HandleIncomingL");
+            "CPhoneConferenceAndSingle::HandleIncomingL");
+    IsNumberEntryUsedL() ? 
+        BeginTransEffectLC( ECallUiAppear ) :
+        BeginTransEffectLC( ENumberEntryOpen );
+    BeginUiUpdateLC();  
     
-    BeginUiUpdateLC();  
+    // Hide the number entry if it exists
+    if ( IsNumberEntryUsedL() )
+        {
+        SetNumberEntryVisibilityL( EFalse );
+        }
     
     TPhoneCmdParamBoolean dialerParam;
     dialerParam.SetBoolean( ETrue );
@@ -338,21 +477,31 @@
     // Get allow waiting call header param value.
     AllowShowingOfWaitingCallHeaderL( dialerParam );
     
+    // Close conference list
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( EFalse );
+    iViewCommandHandle->ExecuteCommandL( 
+    	EPhoneViewOpenConferenceList, &booleanParam );
+
     iViewCommandHandle->ExecuteCommandL( EPhoneViewCloseFSW );
     
-    // Check if HW Keys or Call UI should be disabled
-    CheckDisableHWKeysAndCallUIL();
-    
+    // Set touch controls
+    SetTouchPaneButtonDisabled( EPhoneCallComingCmdAnswer );
+
+    SetTouchPaneButtons( EPhoneWaitingCallButtons );
+        
     // Display incoming call
     DisplayIncomingCallL( aCallId, dialerParam  );
 
-    // Set touch controls
-    SetTouchPaneButtons( EPhoneWaitingCallButtons );
-    
     EndUiUpdate();
+    EndTransEffect();
+    TPhoneCmdParamBoolean conferenceAndSingleFlag;
+    conferenceAndSingleFlag.SetBoolean( EFalse );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag, 
+    	&conferenceAndSingleFlag );
     
     // Go to Conference And Single And Waiting state
-    UpdateCbaL( EPhoneCallHandlingIncomingRejectCBA );
+    UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
     iStateMachine->ChangeState( EPhoneStateConferenceAndSingleAndWaiting );                
     }
 
@@ -363,7 +512,13 @@
 void CPhoneConferenceAndSingle::HandleIdleL( TInt aCallId )
     {
     __LOGMETHODSTARTEND( EPhoneUIStates, 
-        "CPhoneConferenceAndSingle::HandleIdleL");
+    	"CPhoneConferenceAndSingle::HandleIdleL");
+    
+    // If dialler is not open then close menu bar.
+    if ( !IsNumberEntryUsedL() )
+        {
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+        }
     
     TPhoneCmdParamBoolean conferenceExistsForCallId;
     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference,
@@ -374,6 +529,8 @@
         // Remove conference member from conference bubble
         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference, 
             aCallId );                    
+
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
         }
     else
         {       
@@ -381,9 +538,24 @@
         BeginUiUpdateLC(); 
         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
 
-        SetTouchPaneButtons( EPhoneConferenceButtons );
+	    TPhoneCmdParamBoolean conferenceAndSingleFlag;
+	    conferenceAndSingleFlag.SetBoolean( EFalse );
+	    iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag, 
+	    	&conferenceAndSingleFlag );
         
-        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+	    TPhoneCmdParamBoolean participantsVisibleFlag;
+	    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetConferenceListVisibleFlag,
+	            &participantsVisibleFlag );
+	    
+	    // if participants list is visible - do not change buttons or cba
+	    if( !participantsVisibleFlag.Boolean() )
+	        {
+	        // Go to Conference state
+	        SetTouchPaneButtons( EPhoneConferenceButtons );
+	        SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate );  
+	        
+	        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+	        }
       
 
         EndUiUpdate();
@@ -405,19 +577,19 @@
     
     TPhoneCmdParamInteger intParam;
     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCountOfActiveCalls,
-        &intParam );
-        
+    	&intParam );
+    	
     switch( intParam.Integer() )
-        {
-        case EOneActiveCall:
-            MakeStateTransitionToSingleL();
-            break;
-            
-        case ETwoActiveCalls: // Fall through
-        default:
-            MakeStateTransitionToTwoSinglesL();
-            break;
-        }
+	    {
+	    case EOneActiveCall:
+	    	MakeStateTransitionToSingleL();
+	    	break;
+	    	
+	    case ETwoActiveCalls: // Fall through
+	    default:
+	    	MakeStateTransitionToTwoSinglesL();
+	    	break;
+	    }
     }
 
 // --------------------------------------------------------------
@@ -435,15 +607,15 @@
         // send-key
         case EKeyYes:
             if( IsNumberEntryVisibleL() )
-                {
+				{
                 HandleSendL();
                 }
-            else
-                {
+ 			else
+	 			{
                 // Number entry is below so swap the call
                 iStateMachine->SendPhoneEngineMessage(
-                    CPEPhoneModelIF::EPEMessageSwap );        
-                }
+                	CPEPhoneModelIF::EPEMessageSwap );        
+	 			}
             break;
             
         default:
@@ -484,8 +656,32 @@
         {
         iStateMachine->SendPhoneEngineMessage( 
             MPEPhoneModel::EPEMessageCheckEmergencyNumber );
-        }   
+        } 	
     CleanupStack::PopAndDestroy( phoneNumber );
     }
 
+// -----------------------------------------------------------
+// CPhoneConferenceAndSingle::DisconnectCallL
+// -----------------------------------------------------------
+//
+void CPhoneConferenceAndSingle::DisconnectCallL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingle::DisconnectCallL( ) ");
+    // Fetch active call's id from view
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallState( EPEStateConnected );
+    iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+  
+    if( callStateData.CallId() > KErrNotFound  && callStateData.CallId() == KConferenceCallId )
+        {
+        iStateMachine->SendPhoneEngineMessage(
+                      CPEPhoneModelIF::EPEMessageHangUpConference );  
+        }
+    else
+        {
+        CPhoneState::DisconnectCallL();
+        }
+    }
+
 // End of File