phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp
changeset 22 6bb1b21d2484
parent 21 92ab7f8d0eab
child 51 f39ed5e045e0
equal deleted inserted replaced
21:92ab7f8d0eab 22:6bb1b21d2484
     1 /*
     1 /*
     2 * Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies). 
     2 * Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    39 // ================= MEMBER FUNCTIONS =======================
    39 // ================= MEMBER FUNCTIONS =======================
    40 
    40 
    41 // C++ default constructor can NOT contain any code, that
    41 // C++ default constructor can NOT contain any code, that
    42 // might leave.
    42 // might leave.
    43 //
    43 //
    44 CPhoneConferenceAndSingleAndWaiting::CPhoneConferenceAndSingleAndWaiting( 
    44 CPhoneConferenceAndSingleAndWaiting::CPhoneConferenceAndSingleAndWaiting(
    45     MPhoneStateMachine* aStateMachine, 
    45     MPhoneStateMachine* aStateMachine,
    46     MPhoneViewCommandHandle* aViewCommandHandle,
    46     MPhoneViewCommandHandle* aViewCommandHandle,
    47     MPhoneCustomization* aPhoneCustomization ) : 
    47     MPhoneCustomization* aPhoneCustomization ) :
    48     CPhoneConferenceAndSingle( aStateMachine, aViewCommandHandle, aPhoneCustomization )
    48     CPhoneConferenceAndSingle( aStateMachine, aViewCommandHandle, aPhoneCustomization )
    49     {
    49     {
    50     }
    50     }
    51 
    51 
    52 // -----------------------------------------------------------
    52 // -----------------------------------------------------------
    60     // Reset flag
    60     // Reset flag
    61     if ( iViewCommandHandle )
    61     if ( iViewCommandHandle )
    62         {
    62         {
    63         TPhoneCmdParamBoolean dtmfSendFlag;
    63         TPhoneCmdParamBoolean dtmfSendFlag;
    64         dtmfSendFlag.SetBoolean( EFalse );
    64         dtmfSendFlag.SetBoolean( EFalse );
    65 // <-- QT PHONE START -->
    65         iViewCommandHandle->ExecuteCommand( EPhoneViewSetDtmfOptionsFlag,
    66         iViewCommandHandle->ExecuteCommand( EPhoneViewSetDtmfOptionsFlag, 
       
    67             &dtmfSendFlag );
    66             &dtmfSendFlag );
    68 // <-- QT PHONE END -->
       
    69         }
    67         }
    70     }
    68     }
    71 
    69 
    72 // -----------------------------------------------------------
    70 // -----------------------------------------------------------
    73 // CPhoneConferenceAndSingleAndWaiting::ConstructL()
    71 // CPhoneConferenceAndSingleAndWaiting::ConstructL()
    84 // CPhoneConferenceAndSingleAndWaiting::NewL()
    82 // CPhoneConferenceAndSingleAndWaiting::NewL()
    85 // Constructor
    83 // Constructor
    86 // (other items were commented in a header).
    84 // (other items were commented in a header).
    87 // -----------------------------------------------------------
    85 // -----------------------------------------------------------
    88 //
    86 //
    89 CPhoneConferenceAndSingleAndWaiting* CPhoneConferenceAndSingleAndWaiting::NewL( 
    87 CPhoneConferenceAndSingleAndWaiting* CPhoneConferenceAndSingleAndWaiting::NewL(
    90     MPhoneStateMachine* aStateMachine, 
    88     MPhoneStateMachine* aStateMachine,
    91     MPhoneViewCommandHandle* aViewCommandHandle,
    89     MPhoneViewCommandHandle* aViewCommandHandle,
    92     MPhoneCustomization* aPhoneCustomization )
    90     MPhoneCustomization* aPhoneCustomization )
    93     {
    91     {
    94     CPhoneConferenceAndSingleAndWaiting* self = new( ELeave ) CPhoneConferenceAndSingleAndWaiting( 
    92     CPhoneConferenceAndSingleAndWaiting* self = new( ELeave ) CPhoneConferenceAndSingleAndWaiting(
    95         aStateMachine, aViewCommandHandle, aPhoneCustomization );
    93         aStateMachine, aViewCommandHandle, aPhoneCustomization );
    96     
    94 
    97     CleanupStack::PushL( self );
    95     CleanupStack::PushL( self );
    98     self->ConstructL();
    96     self->ConstructL();
    99     CleanupStack::Pop( self );
    97     CleanupStack::Pop( self );
   100     
    98 
   101     return self;
    99     return self;
   102     }
   100     }
   103 
   101 
   104 // -----------------------------------------------------------
   102 // -----------------------------------------------------------
   105 // CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL
   103 // CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL
   106 // -----------------------------------------------------------
   104 // -----------------------------------------------------------
   107 //
   105 //
   108 void CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL( 
   106 void CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL(
   109     const TInt aMessage, 
   107     const TInt aMessage,
   110     TInt aCallId )
   108     TInt aCallId )
   111     {
   109     {
   112     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL()");
   110     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL()");
   113     switch ( aMessage )
   111     switch ( aMessage )
   114         {           
   112         {
   115         case MEngineMonitor::EPEMessageAddedConferenceMember:
   113         case MEngineMonitor::EPEMessageAddedConferenceMember:
   116             HandleAddedConferenceMemberL( aCallId );
   114             HandleAddedConferenceMemberL( aCallId );
   117             break;
   115             break;
   118             
   116 
   119         case MEngineMonitor::EPEMessageIdle:
   117         case MEngineMonitor::EPEMessageIdle:
   120             HandleIdleL( aCallId );
   118             HandleIdleL( aCallId );
   121             break;
   119             break;
   122             
   120 
   123         default:
   121         default:
   124             CPhoneConferenceAndSingle::HandlePhoneEngineMessageL( aMessage, 
   122             CPhoneConferenceAndSingle::HandlePhoneEngineMessageL( aMessage,
   125                 aCallId );
   123                 aCallId );
   126             break;
   124             break;
   127         }
   125         }
   128     }
   126     }
   129 
   127 
   131 // CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL
   129 // CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL
   132 // -----------------------------------------------------------
   130 // -----------------------------------------------------------
   133 //
   131 //
   134 void CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()
   132 void CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()
   135     {
   133     {
   136     __LOGMETHODSTARTEND( EPhoneUIStates, 
   134     __LOGMETHODSTARTEND( EPhoneUIStates,
   137         "CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()");
   135         "CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()");
   138     TInt resourceId = NULL;
   136     TInt resourceId = NULL;
   139 
   137 
   140    // Set specific flag to view so that DTMF menu item available
   138    // Set specific flag to view so that DTMF menu item available
   141     TPhoneCmdParamBoolean dtmfSendFlag;
   139     TPhoneCmdParamBoolean dtmfSendFlag;
   142     dtmfSendFlag.SetBoolean( ETrue );
   140     dtmfSendFlag.SetBoolean( ETrue );
   143     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
   141     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag,
   144         &dtmfSendFlag );
   142         &dtmfSendFlag );
   145   
   143 
   146 
   144 
   147     TPhoneCmdParamCallStateData callStateData;
   145     TPhoneCmdParamCallStateData callStateData;
   148     callStateData.SetCallState( EPEStateHeld );
   146     callStateData.SetCallState( EPEStateHeld );
   149     iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, 
   147     iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   150         &callStateData );
   148         &callStateData );
   151     if( callStateData.CallId() == KConferenceCallId )
   149     if( callStateData.CallId() == KConferenceCallId )
   152         {
   150         {
   153         // Conference call is on hold and single is active
   151         // Conference call is on hold and single is active
   154         if ( IsNumberEntryVisibleL() )
   152         if ( IsNumberEntryVisibleL() )
   155             {
   153             {
   156             resourceId = EPhoneCallActiveHeldConfAndWaitingMenubarWithNumberEntry;
   154             resourceId = EPhoneCallActiveHeldConfAndWaitingMenubarWithNumberEntry;
   157             }
   155             }
   158         else if ( IsConferenceBubbleInSelectionMode() )
   156         else if ( IsConferenceBubbleInSelectionMode() )
   159             {
   157             {
   160             resourceId = EPhoneConfCallParticipantsDropMenubar;    
   158             resourceId = EPhoneConfCallParticipantsDropMenubar;
   161             }                    
   159             }
   162         else
   160         else
   163             {
   161             {
   164             resourceId = EPhoneCallActiveHeldConfAndWaitingMenubar;
   162             resourceId = EPhoneCallActiveHeldConfAndWaitingMenubar;
   165             }
   163             }
   166         }
   164         }
   171             {
   169             {
   172             resourceId = EPhoneConfCallActiveHeldAndWaitingMenubarWithNumberEntry;
   170             resourceId = EPhoneConfCallActiveHeldAndWaitingMenubarWithNumberEntry;
   173             }
   171             }
   174         else if ( IsConferenceBubbleInSelectionMode() )
   172         else if ( IsConferenceBubbleInSelectionMode() )
   175             {
   173             {
   176             resourceId = EPhoneConfCallParticipantsDropMenubar;    
   174             resourceId = EPhoneConfCallParticipantsDropMenubar;
   177             }                    
   175             }
   178         else
   176         else
   179             {
   177             {
   180             resourceId = EPhoneConfCallActiveHeldAndWaitingMenubar;
   178             resourceId = EPhoneConfCallActiveHeldAndWaitingMenubar;
   181             }
   179             }
   182         }
   180         }
   183     else
   181     else
   184         {
   182         {
   185         return; // negative call id, don't do anything            
   183         return; // negative call id, don't do anything
   186         }
   184         }
   187 
   185 
   188     TPhoneCmdParamInteger integerParam;
   186     TPhoneCmdParamInteger integerParam;
   189     integerParam.SetInteger( 
   187     integerParam.SetInteger(
   190         CPhoneMainResourceResolver::Instance()->
   188         CPhoneMainResourceResolver::Instance()->
   191         ResolveResourceID( resourceId ) );
   189         ResolveResourceID( resourceId ) );
   192     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, 
   190     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen,
   193         &integerParam );
   191         &integerParam );
   194     }
   192     }
   195 
   193 
   196 // -----------------------------------------------------------
   194 // -----------------------------------------------------------
   197 // CPhoneConferenceAndSingleAndWaiting::HandleIdleL
   195 // CPhoneConferenceAndSingleAndWaiting::HandleIdleL
   198 // -----------------------------------------------------------
   196 // -----------------------------------------------------------
   199 //
   197 //
   200 void CPhoneConferenceAndSingleAndWaiting::HandleIdleL( TInt aCallId )
   198 void CPhoneConferenceAndSingleAndWaiting::HandleIdleL( TInt aCallId )
   201     {
   199     {
   202     __LOGMETHODSTARTEND( EPhoneUIStates, 
   200     __LOGMETHODSTARTEND( EPhoneUIStates,
   203         "CPhoneConferenceAndSingleAndWaiting::HandleIdleL()");
   201         "CPhoneConferenceAndSingleAndWaiting::HandleIdleL()");
   204         
   202 
   205     // Effect is shown when dialer exist.
   203     // Effect is shown when dialer exist.
   206     TBool effectStarted ( EFalse );
   204     TBool effectStarted ( EFalse );
   207     if ( !NeedToSendToBackgroundL() )
   205     if ( !NeedToSendToBackgroundL() )
   208         {
   206         {
   209         BeginTransEffectLC( ENumberEntryOpen );
   207         BeginTransEffectLC( ENumberEntryOpen );
   210         effectStarted = ETrue; 
   208         effectStarted = ETrue;
   211         }
   209         }
   212          
   210 
   213     BeginUiUpdateLC();    
   211     BeginUiUpdateLC();
   214     // Set touch controls
   212     // Set touch controls
   215     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   213     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   216     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   214     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   217        
   215 
   218 
   216 
   219     TPhoneCmdParamBoolean conferenceExistsForCallId;
   217     TPhoneCmdParamBoolean conferenceExistsForCallId;
   220     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference,
   218     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference,
   221         aCallId, &conferenceExistsForCallId );
   219         aCallId, &conferenceExistsForCallId );
   222     
   220 
   223     if( conferenceExistsForCallId.Boolean() )
   221     if( conferenceExistsForCallId.Boolean() )
   224         {
   222         {
   225         // Remove conference member from conference bubble
   223         // Remove conference member from conference bubble
   226         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference, 
   224         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference,
   227             aCallId );            
   225             aCallId );
   228         }
   226         }
   229     else
   227     else
   230         {
   228         {
   231         // Remove call 
   229         // Remove call
   232         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
   230         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
   233 
   231 
   234         TPhoneCmdParamBoolean conferenceBubbleExists;
   232         TPhoneCmdParamBoolean conferenceBubbleExists;
   235         iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference, 
   233         iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference,
   236             &conferenceBubbleExists );                            
   234             &conferenceBubbleExists );
   237         if( !conferenceBubbleExists.Boolean() )
   235         if( !conferenceBubbleExists.Boolean() )
   238             {
   236             {
   239             // Idle message came for conference member.
   237             // Idle message came for conference member.
   240             MakeTransitionAccordingToActiveCallsL();
   238             MakeTransitionAccordingToActiveCallsL();
   241             }            
   239             }
   242         else
   240         else
   243             {
   241             {
   244             TPhoneCmdParamCallStateData callStateData;
   242             TPhoneCmdParamCallStateData callStateData;
   245             callStateData.SetCallState( EPEStateRinging );
   243             callStateData.SetCallState( EPEStateRinging );
   246             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   244             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   247                 &callStateData );
   245                 &callStateData );
   248             if( callStateData.CallId() >= 0 )
   246             if( callStateData.CallId() >= 0 )
   249                 {
   247                 {
   250                 // We have Conference and Waiting calls left
   248                 // We have Conference and Waiting calls left
   251                 MakeStateTransitionToConferenceAndWaitingL( aCallId );            
   249                 MakeStateTransitionToConferenceAndWaitingL( aCallId );
   252                 }
   250                 }
   253             else
   251             else
   254                 {
   252                 {
   255                 // We have Conference and Single calls left
   253                 // We have Conference and Single calls left
   256                 MakeStateTransitionToConferenceAndSingleL( aCallId );
   254                 MakeStateTransitionToConferenceAndSingleL( aCallId );
   257                 }                
   255                 }
   258             }
   256             }
   259         }
   257         }
   260     EndUiUpdate();
   258     EndUiUpdate();
   261     if ( effectStarted )
   259     if ( effectStarted )
   262         {
   260         {
   263         EndTransEffect();    
   261         EndTransEffect();
   264         }
   262         }
   265     }
   263     }
   266 
   264 
   267 // -----------------------------------------------------------
   265 // -----------------------------------------------------------
   268 // CPhoneConferenceAndSingleAndWaiting::HandleAddedConferenceMemberL
   266 // CPhoneConferenceAndSingleAndWaiting::HandleAddedConferenceMemberL
   274     // Update conference bubble
   272     // Update conference bubble
   275     iViewCommandHandle->ExecuteCommandL( EPhoneViewAddToConference );
   273     iViewCommandHandle->ExecuteCommandL( EPhoneViewAddToConference );
   276 
   274 
   277     UpdateConferenceSecurityStatusL( aCallId );
   275     UpdateConferenceSecurityStatusL( aCallId );
   278 
   276 
   279     MakeStateTransitionToConferenceAndWaitingL( KConferenceCallId );        
   277     MakeStateTransitionToConferenceAndWaitingL( KConferenceCallId );
   280     }
   278     }
   281 
   279 
   282 // -----------------------------------------------------------
   280 // -----------------------------------------------------------
   283 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL
   281 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL
   284 // -----------------------------------------------------------
   282 // -----------------------------------------------------------
   285 //
   283 //
   286 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL( TInt /*aCallId*/ )
   284 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL( TInt /*aCallId*/ )
   287     {
   285     {
   288     __LOGMETHODSTARTEND( EPhoneUIStates, 
   286     __LOGMETHODSTARTEND( EPhoneUIStates,
   289         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL()");
   287         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL()");
   290     if ( !IsNumberEntryUsedL() )
   288     if ( !IsNumberEntryUsedL() )
   291         {
   289         {
   292         // Close menu bar, if number entry isnt open.
   290         // Close menu bar, if number entry isnt open.
   293         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   291         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   294         }
   292         }
   295   
   293 
   296     SetTouchPaneButtons( EPhoneWaitingCallButtons ); 
   294     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   297     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   295     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   298     
   296 
   299     // Check if HW Keys or Call UI should be disabled
   297     // Check if HW Keys or Call UI should be disabled
   300     CheckDisableHWKeysAndCallUIL();
   298     CheckDisableHWKeysAndCallUIL();
   301 
   299 
   302     // Go to Conference And Waiting state
   300     // Go to Conference And Waiting state
   303     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   301     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   308 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL
   306 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL
   309 // -----------------------------------------------------------
   307 // -----------------------------------------------------------
   310 //
   308 //
   311 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL( TInt /*aCallId*/ )
   309 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL( TInt /*aCallId*/ )
   312     {
   310     {
   313     __LOGMETHODSTARTEND( EPhoneUIStates, 
   311     __LOGMETHODSTARTEND( EPhoneUIStates,
   314         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
   312         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
   315 
   313 
   316     if( /*FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) 
   314     if( /*FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
   317         */ 1 &&  iStateMachine->PhoneStorage()->IsScreenLocked() )
   315         */ 1 &&  iStateMachine->PhoneStorage()->IsScreenLocked() )
   318         {
   316         {
   319         EnableCallUIL();
   317         EnableCallUIL();
   320         }
   318         }
   321     
   319 
   322     // Reset blocked keys list
   320     // Reset blocked keys list
   323     iStateMachine->PhoneStorage()->ResetBlockedKeysList();
   321     iStateMachine->PhoneStorage()->ResetBlockedKeysList();
   324     
   322 
   325     if ( !IsNumberEntryUsedL() )
   323     if ( !IsNumberEntryUsedL() )
   326         {
   324         {
   327         // Close menu bar, if number entry isnt open.
   325         // Close menu bar, if number entry isnt open.
   328         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );       
   326         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   329         }
   327         }
   330 
   328 
   331     if ( IsNumberEntryUsedL() )
   329     if ( IsNumberEntryUsedL() )
   332         {
   330         {
   333         if ( NeedToSendToBackgroundL() )
   331         if ( NeedToSendToBackgroundL() )
   334             {
   332             {
   335             // Return phone to the background if send to background is needed.
   333             // Return phone to the background if send to background is needed.
   336             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   334             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   337 
   335 
   338             iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
   336             iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
   339  
   337 
   340             UpdateCbaL( EPhoneCallHandlingInCallCBA );
   338             UpdateCbaL( EPhoneCallHandlingInCallCBA );
   341             }
   339             }
   342         else
   340         else
   343             {
   341             {
   344             // Show the number entry if it exists
   342             // Show the number entry if it exists
   345             SetNumberEntryVisibilityL(ETrue);    
   343             SetNumberEntryVisibilityL(ETrue);
   346             }
   344             }
   347         }
   345         }
   348     else
   346     else
   349         {
   347         {
   350         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
   348         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
   351         // If numberentry is not open just check NeedToSendToBackgroundL and 
   349         // If numberentry is not open just check NeedToSendToBackgroundL and
   352         // sendbackround if needed.
   350         // sendbackround if needed.
   353         if ( NeedToSendToBackgroundL() )
   351         if ( NeedToSendToBackgroundL() )
   354             {
   352             {
   355             // Return phone to the background if send to background is needed.
   353             // Return phone to the background if send to background is needed.
   356             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   354             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   357             }
   355             }
   358         }  
   356         }
   359 
   357 
   360     SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );       
   358     SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );
   361     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   359     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   362     SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
   360     SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
   363     // Go to conference and single state
   361     // Go to conference and single state
   364     // CBA updates in above if-else conditions
   362     // CBA updates in above if-else conditions
   365     iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );                             
   363     iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );
   366     }
   364     }
   367 
   365 
   368 // -----------------------------------------------------------
   366 // -----------------------------------------------------------
   369 // CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL
   367 // CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL
   370 // -----------------------------------------------------------
   368 // -----------------------------------------------------------
   371 //
   369 //
   372 void CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()
   370 void CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()
   373     {
   371     {
   374     __LOGMETHODSTARTEND( EPhoneUIStates, 
   372     __LOGMETHODSTARTEND( EPhoneUIStates,
   375         "CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()");
   373         "CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()");
   376     
   374 
   377     BeginUiUpdateLC();    
   375     BeginUiUpdateLC();
   378     
   376 
   379     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble );    
   377     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble );
   380         
   378 
   381     // Close menu bar, if it is displayed
   379     // Close menu bar, if it is displayed
   382     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   380     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   383 
   381 
   384     // Remove any phone dialogs if they are displayed
   382     // Remove any phone dialogs if they are displayed
   385     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
   383     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
   386 
   384 
   387     MakeTransitionAccordingToActiveCallsL();
   385     MakeTransitionAccordingToActiveCallsL();
   388     
   386 
   389     EndUiUpdate();          
   387     EndUiUpdate();
   390     }
   388     }
   391 
   389 
   392 // --------------------------------------------------------------
   390 // --------------------------------------------------------------
   393 // CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL
   391 // CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL
   394 // --------------------------------------------------------------
   392 // --------------------------------------------------------------
   395 //
   393 //
   396 void CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL( 
   394 void CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL(
   397     TPhoneKeyEventMessages aMessage,
   395     TPhoneKeyEventMessages aMessage,
   398     TKeyCode aCode )
   396     TKeyCode aCode )
   399     {
   397     {
   400     __LOGMETHODSTARTEND( EPhoneUIStates, 
   398     __LOGMETHODSTARTEND( EPhoneUIStates,
   401         "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL()");
   399         "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL()");
   402     switch ( aCode )
   400     switch ( aCode )
   403         {
   401         {
   404         // send-key
   402         // send-key
   405         case EKeyYes:
   403         case EKeyYes:
   406             if( IsNumberEntryVisibleL() )
   404             if( IsNumberEntryVisibleL() )
   407                 {
   405                 {
   408                 CallFromNumberEntryL();                         
   406                 CallFromNumberEntryL();
   409                 }
   407                 }
   410             else
   408             else
   411                 {
   409                 {
   412                 // Not allowed to answer
   410                 // Not allowed to answer
   413                 SendGlobalWarningNoteL( 
   411                 SendGlobalWarningNoteL(
   414                     EPhoneNoteTextCallNotAllowed );                     
   412                     EPhoneNoteTextCallNotAllowed );
   415                 }
   413                 }
   416             break;
   414             break;
   417             
   415 
   418         default:
   416         default:
   419             // do base operation
   417             // do base operation
   420             CPhoneConferenceAndSingle::HandleKeyMessageL( aMessage, aCode );
   418             CPhoneConferenceAndSingle::HandleKeyMessageL( aMessage, aCode );
   421             break;
   419             break;
   422         }
   420         }
   443 // -----------------------------------------------------------
   441 // -----------------------------------------------------------
   444 //
   442 //
   445 void CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL()
   443 void CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL()
   446     {
   444     {
   447     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL() ");
   445     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL() ");
   448     
   446 
   449     UpdateCbaL ( EPhoneCallHandlingCallWaitingCBA );
   447     UpdateCbaL ( EPhoneCallHandlingCallWaitingCBA );
   450     }
   448     }
   451 
   449 
   452 // -----------------------------------------------------------
   450 // -----------------------------------------------------------
   453 // CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL
   451 // CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL
   456 void CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL()
   454 void CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL()
   457     {
   455     {
   458     TPhoneCmdParamInteger activeCallCount;
   456     TPhoneCmdParamInteger activeCallCount;
   459     iViewCommandHandle->ExecuteCommandL(
   457     iViewCommandHandle->ExecuteCommandL(
   460         EPhoneViewGetCountOfActiveCalls, &activeCallCount );
   458         EPhoneViewGetCountOfActiveCalls, &activeCallCount );
   461     
   459 
   462     switch( activeCallCount.Integer() )
   460     switch( activeCallCount.Integer() )
   463          {
   461          {
   464          case ENoActiveCalls: // Go to incoming state
   462          case ENoActiveCalls: // Go to incoming state
   465             {
   463             {
   466             // Get Waiting call's Call Id
   464             // Get Waiting call's Call Id
   467             TPhoneCmdParamCallStateData callStateData;    
   465             TPhoneCmdParamCallStateData callStateData;
   468             callStateData.SetCallState( EPEStateRinging );
   466             callStateData.SetCallState( EPEStateRinging );
   469             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, 
   467             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   470                 &callStateData );
   468                 &callStateData );
   471             
   469 
   472             if ( callStateData.CallId() != KErrNotFound )
   470             if ( callStateData.CallId() != KErrNotFound )
   473                 {
   471                 {
   474                 // Display ringing bubble
   472                 // Display ringing bubble
   475                 TPhoneCmdParamCallHeaderData callHeaderParam;
   473                 TPhoneCmdParamCallHeaderData callHeaderParam;
   476                 callHeaderParam.SetCallState( EPEStateRinging );
   474                 callHeaderParam.SetCallState( EPEStateRinging );
   477                 
   475 
   478                 SetCallHeaderTextsForCallComingInL( callStateData.CallId(), EFalse, &callHeaderParam );
   476                 SetCallHeaderTextsForCallComingInL( callStateData.CallId(), EFalse, &callHeaderParam );
   479                 
   477 
   480                 iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, 
   478                 iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble,
   481                     callStateData.CallId(), 
   479                     callStateData.CallId(),
   482                     &callHeaderParam );
   480                     &callHeaderParam );
   483         
   481 
   484                 // Capture keys when there is an incoming call
   482                 // Capture keys when there is an incoming call
   485                 CaptureKeysDuringCallNotificationL( ETrue );    
   483                 CaptureKeysDuringCallNotificationL( ETrue );
   486                 
   484 
   487                 // Go to Incoming state
   485                 // Go to Incoming state
   488                 iCbaManager->UpdateIncomingCbaL( callStateData.CallId() );
   486                 iCbaManager->UpdateIncomingCbaL( callStateData.CallId() );
   489 
   487 
   490                 // Check if HW Keys or Call UI should be disabled
   488                 // Check if HW Keys or Call UI should be disabled
   491                 CheckDisableHWKeysAndCallUIL();
   489                 CheckDisableHWKeysAndCallUIL();
   492                 
   490 
   493                 SetTouchPaneButtons( EPhoneIncomingCallButtons );
   491                 SetTouchPaneButtons( EPhoneIncomingCallButtons );
   494                 UpdateSilenceButtonDimming();
   492                 UpdateSilenceButtonDimming();
   495                 SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   493                 SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   496                 SetRingingTonePlaybackL( callStateData.CallId() );      
   494                 SetRingingTonePlaybackL( callStateData.CallId() );
   497                 SetToolbarDimming( ETrue );
   495                 SetToolbarDimming( ETrue );
   498                 iStateMachine->ChangeState( EPhoneStateIncoming );          
   496                 SetBackButtonActive(EFalse);
       
   497                 iStateMachine->ChangeState( EPhoneStateIncoming );
   499                 }
   498                 }
   500             else
   499             else
   501                 {
   500                 {
   502                 SetDefaultFlagsL();
   501                 SetDefaultFlagsL();
   503                 UpdateCbaL( EPhoneEmptyCBA );
   502                 UpdateCbaL( EPhoneEmptyCBA );
   504                 iStateMachine->ChangeState( EPhoneStateIdle );          
   503                 iStateMachine->ChangeState( EPhoneStateIdle );
   505                 }
   504                 }
   506             }
   505             }
   507             break;
   506             break;
   508          case EOneActiveCall:
   507          case EOneActiveCall:
   509             {
   508             {
   510             // Go to Single And Waiting state
   509             // Go to Single And Waiting state
   511             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   510             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   512             SetTouchPaneButtons( EPhoneWaitingCallButtons );        
   511             SetTouchPaneButtons( EPhoneWaitingCallButtons );
   513             SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   512             SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   514 
   513 
   515             // Check if HW Keys or Call UI should be disabled
   514             // Check if HW Keys or Call UI should be disabled
   516             CheckDisableHWKeysAndCallUIL();
   515             CheckDisableHWKeysAndCallUIL();
   517 
   516 
   518             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );        
   517             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );
   519             }
   518             }
   520             break;
   519             break;
   521          case ETwoActiveCalls:
   520          case ETwoActiveCalls:
   522             {
   521             {
   523             // Go to Two Singles And Waiting state
   522             // Go to Two Singles And Waiting state
   524             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   523             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   525 
   524 
   526             // Check if HW Keys or Call UI should be disabled
   525             // Check if HW Keys or Call UI should be disabled
   527             CheckDisableHWKeysAndCallUIL();
   526             CheckDisableHWKeysAndCallUIL();
   528 
   527 
   529             SetTouchPaneButtons( EPhoneWaitingCallButtons );        
   528             SetTouchPaneButtons( EPhoneWaitingCallButtons );
   530             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
   529             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
   531             }
   530             }
   532             break;
   531             break;
   533          default:
   532          default:
   534            // Too many active calls to handle reliable state change now.
   533            // Too many active calls to handle reliable state change now.
   535            // Waiting for all conference member idles
   534            // Waiting for all conference member idles
   536            // This case may happen when 'End all calls' because conferenceIdle may 
   535            // This case may happen when 'End all calls' because conferenceIdle may
   537            // come earlier than idle for conference member
   536            // come earlier than idle for conference member
   538             break;
   537             break;
   539          }
   538          }
   540 
   539 
   541     }
   540     }
   542     
   541 
   543 // End of File
   542 // End of File