phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp
branchRCL_3
changeset 25 5266b1f337bd
parent 24 41a7f70b3818
child 26 8baf28733c3d
equal deleted inserted replaced
24:41a7f70b3818 25:5266b1f337bd
     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".
    30 #include "tphonecmdparamcallstatedata.h"
    30 #include "tphonecmdparamcallstatedata.h"
    31 #include "cphonemainresourceresolver.h"
    31 #include "cphonemainresourceresolver.h"
    32 #include "phonerssbase.h"
    32 #include "phonerssbase.h"
    33 #include "tphonecmdparamglobalnote.h"
    33 #include "tphonecmdparamglobalnote.h"
    34 #include "phoneui.hrh"
    34 #include "phoneui.hrh"
    35 #include "mphonestorage.h"
       
    36 #include "cphonecenrepproxy.h"
       
    37 #include <telephonyvariant.hrh>
       
    38 
    35 
    39 // ================= MEMBER FUNCTIONS =======================
    36 // ================= MEMBER FUNCTIONS =======================
    40 
    37 
    41 // C++ default constructor can NOT contain any code, that
    38 // C++ default constructor can NOT contain any code, that
    42 // might leave.
    39 // might leave.
    43 //
    40 //
    44 CPhoneConferenceAndSingleAndWaiting::CPhoneConferenceAndSingleAndWaiting(
    41 CPhoneConferenceAndSingleAndWaiting::CPhoneConferenceAndSingleAndWaiting( 
    45     MPhoneStateMachine* aStateMachine,
    42     MPhoneStateMachine* aStateMachine, 
    46     MPhoneViewCommandHandle* aViewCommandHandle,
    43     MPhoneViewCommandHandle* aViewCommandHandle,
    47     MPhoneCustomization* aPhoneCustomization ) :
    44     MPhoneCustomization* aPhoneCustomization ) : 
    48     CPhoneConferenceAndSingle( aStateMachine, aViewCommandHandle, aPhoneCustomization )
    45     CPhoneConferenceAndSingle( aStateMachine, aViewCommandHandle, aPhoneCustomization )
    49     {
    46     {
    50     }
    47     }
    51 
    48 
    52 // -----------------------------------------------------------
    49 // -----------------------------------------------------------
    55 // (other items were commented in a header).
    52 // (other items were commented in a header).
    56 // -----------------------------------------------------------
    53 // -----------------------------------------------------------
    57 //
    54 //
    58 CPhoneConferenceAndSingleAndWaiting::~CPhoneConferenceAndSingleAndWaiting()
    55 CPhoneConferenceAndSingleAndWaiting::~CPhoneConferenceAndSingleAndWaiting()
    59     {
    56     {
       
    57     // Need to check iViewCommandHandle validity here to not
       
    58     // trigger a high/can panic error in a Codescanner run.
       
    59     // coverity[var_compare_op]
       
    60     if ( iViewCommandHandle )
       
    61         {
       
    62         TPhoneCmdParamBoolean dtmfSendFlag;
       
    63         dtmfSendFlag.SetBoolean( EFalse );
       
    64         TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
       
    65     	&dtmfSendFlag ) );
       
    66         }
    60     }
    67     }
    61 
    68 
    62 // -----------------------------------------------------------
    69 // -----------------------------------------------------------
    63 // CPhoneConferenceAndSingleAndWaiting::ConstructL()
    70 // CPhoneConferenceAndSingleAndWaiting::ConstructL()
    64 // Constructor
    71 // Constructor
    74 // CPhoneConferenceAndSingleAndWaiting::NewL()
    81 // CPhoneConferenceAndSingleAndWaiting::NewL()
    75 // Constructor
    82 // Constructor
    76 // (other items were commented in a header).
    83 // (other items were commented in a header).
    77 // -----------------------------------------------------------
    84 // -----------------------------------------------------------
    78 //
    85 //
    79 CPhoneConferenceAndSingleAndWaiting* CPhoneConferenceAndSingleAndWaiting::NewL(
    86 CPhoneConferenceAndSingleAndWaiting* CPhoneConferenceAndSingleAndWaiting::NewL( 
    80     MPhoneStateMachine* aStateMachine,
    87     MPhoneStateMachine* aStateMachine, 
    81     MPhoneViewCommandHandle* aViewCommandHandle,
    88     MPhoneViewCommandHandle* aViewCommandHandle,
    82     MPhoneCustomization* aPhoneCustomization )
    89     MPhoneCustomization* aPhoneCustomization )
    83     {
    90     {
    84     CPhoneConferenceAndSingleAndWaiting* self = new( ELeave ) CPhoneConferenceAndSingleAndWaiting(
    91     CPhoneConferenceAndSingleAndWaiting* self = new( ELeave ) CPhoneConferenceAndSingleAndWaiting( 
    85         aStateMachine, aViewCommandHandle, aPhoneCustomization );
    92         aStateMachine, aViewCommandHandle, aPhoneCustomization );
    86 
    93     
    87     CleanupStack::PushL( self );
    94     CleanupStack::PushL( self );
    88     self->ConstructL();
    95     self->ConstructL();
    89     CleanupStack::Pop( self );
    96     CleanupStack::Pop( self );
    90 
    97     
    91     return self;
    98     return self;
    92     }
    99     }
    93 
   100 
    94 // -----------------------------------------------------------
   101 // -----------------------------------------------------------
    95 // CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL
   102 // CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL
    96 // -----------------------------------------------------------
   103 // -----------------------------------------------------------
    97 //
   104 //
    98 void CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL(
   105 void CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL( 
    99     const TInt aMessage,
   106     const TInt aMessage, 
   100     TInt aCallId )
   107     TInt aCallId )
   101     {
   108     {
   102     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL()");
   109     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL()");
   103     switch ( aMessage )
   110     switch ( aMessage )
   104         {
   111         {           
   105         case MEngineMonitor::EPEMessageAddedConferenceMember:
   112         case MEngineMonitor::EPEMessageAddedConferenceMember:
   106             HandleAddedConferenceMemberL( aCallId );
   113             HandleAddedConferenceMemberL( aCallId );
   107             break;
   114             break;
   108 
   115             
   109         case MEngineMonitor::EPEMessageIdle:
   116         case MEngineMonitor::EPEMessageIdle:
   110             HandleIdleL( aCallId );
   117             HandleIdleL( aCallId );
   111             break;
   118             break;
   112 
   119             
   113         default:
   120         default:
   114             CPhoneConferenceAndSingle::HandlePhoneEngineMessageL( aMessage,
   121             CPhoneConferenceAndSingle::HandlePhoneEngineMessageL( aMessage, 
   115                 aCallId );
   122                 aCallId );
   116             break;
   123             break;
   117         }
   124         }
   118     }
   125     }
   119 
   126 
   120 // -----------------------------------------------------------
   127 // -----------------------------------------------------------
       
   128 // CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL
       
   129 // -----------------------------------------------------------
       
   130 //
       
   131 void CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()
       
   132     {
       
   133     __LOGMETHODSTARTEND( EPhoneUIStates, 
       
   134         "CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()");
       
   135     TInt resourceId = NULL;
       
   136 
       
   137    // Set specific flag to view so that DTMF menu item available
       
   138     TPhoneCmdParamBoolean dtmfSendFlag;
       
   139     dtmfSendFlag.SetBoolean( ETrue );
       
   140     iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, 
       
   141     	&dtmfSendFlag );
       
   142   
       
   143 
       
   144     TPhoneCmdParamCallStateData callStateData;
       
   145     callStateData.SetCallState( EPEStateHeld );
       
   146     iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, 
       
   147         &callStateData );
       
   148     if( callStateData.CallId() == KConferenceCallId )
       
   149         {
       
   150         // Conference call is on hold and single is active
       
   151         if ( IsNumberEntryVisibleL() )
       
   152             {
       
   153             resourceId = EPhoneCallActiveHeldConfAndWaitingMenubarWithNumberEntry;
       
   154             }
       
   155         else if ( IsConferenceBubbleInSelectionMode() )
       
   156             {
       
   157             resourceId = EPhoneConfCallParticipantsDropMenubar;    
       
   158             }                    
       
   159         else
       
   160             {
       
   161             resourceId = EPhoneCallActiveHeldConfAndWaitingMenubar;
       
   162             }
       
   163         }
       
   164     else if( callStateData.CallId() >= 0 )
       
   165         {
       
   166         // Single call is on hold and conference is active
       
   167         if ( IsNumberEntryVisibleL() )
       
   168             {
       
   169             resourceId = EPhoneConfCallActiveHeldAndWaitingMenubarWithNumberEntry;
       
   170             }
       
   171         else if ( IsConferenceBubbleInSelectionMode() )
       
   172             {
       
   173             resourceId = EPhoneConfCallParticipantsDropMenubar;    
       
   174             }                    
       
   175         else
       
   176             {
       
   177             resourceId = EPhoneConfCallActiveHeldAndWaitingMenubar;
       
   178             }
       
   179         }
       
   180     else
       
   181         {
       
   182         return; // negative call id, don't do anything            
       
   183         }
       
   184 
       
   185     TPhoneCmdParamInteger integerParam;
       
   186     integerParam.SetInteger( 
       
   187         CPhoneMainResourceResolver::Instance()->
       
   188         ResolveResourceID( resourceId ) );
       
   189     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, 
       
   190         &integerParam );
       
   191     }
       
   192 
       
   193 // -----------------------------------------------------------
   121 // CPhoneConferenceAndSingleAndWaiting::HandleIdleL
   194 // CPhoneConferenceAndSingleAndWaiting::HandleIdleL
   122 // -----------------------------------------------------------
   195 // -----------------------------------------------------------
   123 //
   196 //
   124 void CPhoneConferenceAndSingleAndWaiting::HandleIdleL( TInt aCallId )
   197 void CPhoneConferenceAndSingleAndWaiting::HandleIdleL( TInt aCallId )
   125     {
   198     {
   126     __LOGMETHODSTARTEND( EPhoneUIStates,
   199     __LOGMETHODSTARTEND( EPhoneUIStates, 
   127         "CPhoneConferenceAndSingleAndWaiting::HandleIdleL()");
   200         "CPhoneConferenceAndSingleAndWaiting::HandleIdleL()");
   128 
       
   129     BeginUiUpdateLC();
   201     BeginUiUpdateLC();
   130     // Set touch controls
   202     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   131     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   203     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   132 
       
   133 
   204 
   134     TPhoneCmdParamBoolean conferenceExistsForCallId;
   205     TPhoneCmdParamBoolean conferenceExistsForCallId;
   135     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference,
   206     iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference,
   136         aCallId, &conferenceExistsForCallId );
   207         aCallId, &conferenceExistsForCallId );
   137 
       
   138     if( conferenceExistsForCallId.Boolean() )
   208     if( conferenceExistsForCallId.Boolean() )
   139         {
   209         {
   140         // Remove conference member from conference bubble
   210         // Remove conference member from conference bubble
   141         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference,
   211         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference, 
   142             aCallId );
   212             aCallId );
   143         }
   213         }
   144     else
   214     else
   145         {
   215         {
   146         // Remove call
       
   147         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
   216         iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
   148 
       
   149         TPhoneCmdParamBoolean conferenceBubbleExists;
   217         TPhoneCmdParamBoolean conferenceBubbleExists;
   150         iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference,
   218         iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference, 
   151             &conferenceBubbleExists );
   219             &conferenceBubbleExists );
   152         if( !conferenceBubbleExists.Boolean() )
   220         if( !conferenceBubbleExists.Boolean() )
   153             {
   221             {
   154             // Idle message came for conference member.
   222             // Idle message came for conference member.
   155             MakeTransitionAccordingToActiveCallsL();
   223             MakeTransitionAccordingToActiveCallsL();
   156             }
   224             }            
   157         else
   225         else
   158             {
   226             {
   159             TPhoneCmdParamCallStateData callStateData;
   227             TPhoneCmdParamCallStateData callStateData;
   160             callStateData.SetCallState( EPEStateRinging );
   228             callStateData.SetCallState( EPEStateRinging );
   161             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   229             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   185     // Update conference bubble
   253     // Update conference bubble
   186     iViewCommandHandle->ExecuteCommandL( EPhoneViewAddToConference );
   254     iViewCommandHandle->ExecuteCommandL( EPhoneViewAddToConference );
   187 
   255 
   188     UpdateConferenceSecurityStatusL( aCallId );
   256     UpdateConferenceSecurityStatusL( aCallId );
   189 
   257 
   190     MakeStateTransitionToConferenceAndWaitingL( KConferenceCallId );
   258     MakeStateTransitionToConferenceAndWaitingL( KConferenceCallId );        
   191     }
   259     }
   192 
   260 
   193 // -----------------------------------------------------------
   261 // -----------------------------------------------------------
   194 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL
   262 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL
   195 // -----------------------------------------------------------
   263 // -----------------------------------------------------------
   196 //
   264 //
   197 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL( TInt /*aCallId*/ )
   265 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL( TInt /*aCallId*/ )
   198     {
   266     {
   199     __LOGMETHODSTARTEND( EPhoneUIStates,
   267     __LOGMETHODSTARTEND( EPhoneUIStates, 
   200         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL()");
   268         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL()");
   201 
   269     if ( !IsNumberEntryUsedL() )
   202     SetTouchPaneButtons( EPhoneWaitingCallButtons );
   270         {
   203 
   271         // Close menu bar, if number entry isnt open.
   204     // Check if HW Keys or Call UI should be disabled
   272         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   205     CheckDisableHWKeysAndCallUIL();
   273         }
   206 
   274   
       
   275     SetTouchPaneButtons( EPhoneWaitingCallButtons ); 
       
   276     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
       
   277     
   207     // Go to Conference And Waiting state
   278     // Go to Conference And Waiting state
   208     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   279     UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   209     iStateMachine->ChangeState( EPhoneStateConferenceAndWaiting );
   280     iStateMachine->ChangeState( EPhoneStateConferenceAndWaiting );
   210     }
   281     }
   211 
   282 
   213 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL
   284 // CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL
   214 // -----------------------------------------------------------
   285 // -----------------------------------------------------------
   215 //
   286 //
   216 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL( TInt /*aCallId*/ )
   287 void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL( TInt /*aCallId*/ )
   217     {
   288     {
   218     __LOGMETHODSTARTEND( EPhoneUIStates,
   289     __LOGMETHODSTARTEND( EPhoneUIStates, 
   219         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
   290         "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL()");
   220 
   291 
   221     if( /*FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke )
   292     if ( !IsNumberEntryUsedL() )
   222         */ 1 &&  iStateMachine->PhoneStorage()->IsScreenLocked() )
   293         {
   223         {
   294         // Close menu bar, if number entry isnt open.
   224         EnableCallUIL();
   295         iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );       
   225         }
   296         }
   226 
       
   227     // Reset blocked keys list
       
   228     iStateMachine->PhoneStorage()->ResetBlockedKeysList();
       
   229 
   297 
   230     if ( IsNumberEntryUsedL() )
   298     if ( IsNumberEntryUsedL() )
   231         {
   299         {
   232         if ( NeedToSendToBackgroundL() )
   300         if ( NeedToReturnToForegroundAppL() ) 
   233             {
   301             {
   234             // Return phone to the background if send to background is needed.
   302             // Return phone to the background if send to background is needed.
   235             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   303             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   236 
   304 
       
   305             iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility );
       
   306  
   237             UpdateCbaL( EPhoneCallHandlingInCallCBA );
   307             UpdateCbaL( EPhoneCallHandlingInCallCBA );
   238             }
   308             }
   239         else
   309         else
   240             {
   310             {
   241             // Show the number entry if it exists
   311             // Show the number entry if it exists
   242             SetNumberEntryVisibilityL(ETrue);
   312             SetNumberEntryVisibilityL(ETrue);    
   243             }
   313             }
   244         }
   314         }
   245     else
   315     else
   246         {
   316         {
   247         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
   317         UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
   248         // If numberentry is not open just check NeedToSendToBackgroundL and
   318         // If numberentry is not open just check NeedToReturnToForegroundAppL and 
   249         // sendbackround if needed.
   319         // sendbackround if needed.
   250         if ( NeedToSendToBackgroundL() )
   320         if ( NeedToReturnToForegroundAppL() ) 
   251             {
   321             {
   252             // Return phone to the background if send to background is needed.
   322             // Return phone to the background if send to background is needed.
   253             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   323             iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground );
   254             }
   324             }
   255         }
   325         }  
   256 
   326 
   257     SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );
   327     SetTouchPaneButtons( EPhoneConferenceAndSingleButtons );       
       
   328     SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
       
   329     SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
   258     // Go to conference and single state
   330     // Go to conference and single state
   259     // CBA updates in above if-else conditions
   331     // CBA updates in above if-else conditions
   260     iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );
   332     iStateMachine->ChangeState( EPhoneStateConferenceAndSingle );                             
   261     }
   333     }
   262 
   334 
   263 // -----------------------------------------------------------
   335 // -----------------------------------------------------------
   264 // CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL
   336 // CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL
   265 // -----------------------------------------------------------
   337 // -----------------------------------------------------------
   266 //
   338 //
   267 void CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()
   339 void CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()
   268     {
   340     {
   269     __LOGMETHODSTARTEND( EPhoneUIStates,
   341     __LOGMETHODSTARTEND( EPhoneUIStates, 
   270         "CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()");
   342         "CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()");
   271 
   343     
   272     BeginUiUpdateLC();
   344     BeginUiUpdateLC();    
   273 
   345     
   274     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble );
   346     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble );    
       
   347         
       
   348     // Close menu bar, if it is displayed
       
   349     iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
   275 
   350 
   276     // Remove any phone dialogs if they are displayed
   351     // Remove any phone dialogs if they are displayed
   277     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
   352     iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
   278 
   353 
   279     MakeTransitionAccordingToActiveCallsL();
   354     MakeTransitionAccordingToActiveCallsL();
   280 
   355     
   281     EndUiUpdate();
   356     EndUiUpdate();    	    
   282     }
   357     }
   283 
   358 
   284 // --------------------------------------------------------------
   359 // --------------------------------------------------------------
   285 // CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL
   360 // CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL
   286 // --------------------------------------------------------------
   361 // --------------------------------------------------------------
   287 //
   362 //
   288 void CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL(
   363 void CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL( 
   289     TPhoneKeyEventMessages aMessage,
   364     TPhoneKeyEventMessages aMessage,
   290     TKeyCode aCode )
   365     TKeyCode aCode )
   291     {
   366     {
   292     __LOGMETHODSTARTEND( EPhoneUIStates,
   367     __LOGMETHODSTARTEND( EPhoneUIStates, 
   293         "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL()");
   368         "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL()");
   294     switch ( aCode )
   369     switch ( aCode )
   295         {
   370         {
   296         // send-key
   371         // send-key
   297         case EKeyYes:
   372         case EKeyYes:
   298             if( IsNumberEntryVisibleL() )
   373             if( IsNumberEntryVisibleL() )
   299                 {
   374  				{
   300                 CallFromNumberEntryL();
   375                 CallFromNumberEntryL();    	 					
   301                 }
   376  				}
   302             else
   377  			else
   303                 {
   378 	 			{
   304                 // Not allowed to answer
   379                 // Not allowed to answer
   305                 SendGlobalWarningNoteL(
   380                 SendGlobalWarningNoteL( 
   306                     EPhoneNoteTextCallNotAllowed, ETrue );
   381                     EPhoneNoteTextCallNotAllowed );		 				
   307                 }
   382 	 			}
   308             break;
   383             break;
   309 
   384             
   310         default:
   385         default:
   311             // do base operation
   386             // do base operation
   312             CPhoneConferenceAndSingle::HandleKeyMessageL( aMessage, aCode );
   387             CPhoneConferenceAndSingle::HandleKeyMessageL( aMessage, aCode );
   313             break;
   388             break;
   314         }
   389         }
   315     }
   390     }
   316 
   391 
   317 // -----------------------------------------------------------
   392 // -----------------------------------------------------------
   318 // CPhoneConferenceAndSingleAndWaiting::HandleKeyEventL
   393 // CPhoneConferenceAndSingleAndWaiting::HandleErrorL
   319 // -----------------------------------------------------------
   394 // -----------------------------------------------------------
   320 //
   395 //
   321 void CPhoneConferenceAndSingleAndWaiting::HandleKeyEventL(
   396 EXPORT_C void CPhoneConferenceAndSingleAndWaiting::HandleErrorL( 
   322     const TKeyEvent& aKeyEvent,
   397         const TPEErrorInfo& aErrorInfo )
   323     TEventCode /*aEventCode*/ )
   398     {
   324     {
   399     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleErrorL()");
   325     if( EKeyDeviceF == aKeyEvent.iCode )
   400     
   326         {
   401     if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer )
   327         __PHONELOG( EBasic, EPhoneUIStates,
   402         {
   328             "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL-deviceF" );
   403         // Should not shown "No Answer" note
   329         HandleHoldSwitchL();
   404         __PHONELOG1( EBasic, EPhoneUIStates,
       
   405        "PhoneUIStates: CPhoneConferenceAndSingleAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ",
       
   406             aErrorInfo.iErrorCode);
       
   407         }
       
   408     else
       
   409         {
       
   410         CPhoneState::HandleErrorL( aErrorInfo );
   330         }
   411         }
   331     }
   412     }
   332 
   413 
   333 // -----------------------------------------------------------
   414 // -----------------------------------------------------------
   334 // CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL
   415 // CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL
   335 // -----------------------------------------------------------
   416 // -----------------------------------------------------------
   336 //
   417 //
   337 void CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL()
   418 void CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL()
   338     {
   419     {
   339     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL() ");
   420     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL() ");
   340 
   421     
   341     UpdateCbaL ( EPhoneCallHandlingCallWaitingCBA );
   422     UpdateCbaL ( EPhoneCallHandlingCallWaitingCBA );
   342     }
   423     }
   343 
   424 
   344 // -----------------------------------------------------------
   425 // -----------------------------------------------------------
   345 // CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL
   426 // CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL
   348 void CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL()
   429 void CPhoneConferenceAndSingleAndWaiting::MakeTransitionAccordingToActiveCallsL()
   349     {
   430     {
   350     TPhoneCmdParamInteger activeCallCount;
   431     TPhoneCmdParamInteger activeCallCount;
   351     iViewCommandHandle->ExecuteCommandL(
   432     iViewCommandHandle->ExecuteCommandL(
   352         EPhoneViewGetCountOfActiveCalls, &activeCallCount );
   433         EPhoneViewGetCountOfActiveCalls, &activeCallCount );
   353 
   434     
   354     switch( activeCallCount.Integer() )
   435     switch( activeCallCount.Integer() )
   355          {
   436          {
   356          case ENoActiveCalls: // Go to incoming state
   437          case ENoActiveCalls: // Go to incoming state
   357             {
   438             {
   358             // Get Waiting call's Call Id
   439             // Get Waiting call's Call Id
   359             TPhoneCmdParamCallStateData callStateData;
   440             TPhoneCmdParamCallStateData callStateData;    
   360             callStateData.SetCallState( EPEStateRinging );
   441             callStateData.SetCallState( EPEStateRinging );
   361             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState,
   442             iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, 
   362                 &callStateData );
   443                 &callStateData );
   363 
   444             
   364             if ( callStateData.CallId() != KErrNotFound )
   445             if ( callStateData.CallId() != KErrNotFound )
   365                 {
   446                 {
   366                 // Display ringing bubble
   447                 // Display ringing bubble
   367                 TPhoneCmdParamCallHeaderData callHeaderParam;
   448                 TPhoneCmdParamCallHeaderData callHeaderParam;
   368                 callHeaderParam.SetCallState( EPEStateRinging );
   449                 callHeaderParam.SetCallState( EPEStateRinging );
   369 
   450                 
   370                 SetCallHeaderTextsForCallComingInL( callStateData.CallId(), EFalse, &callHeaderParam );
   451                 SetCallHeaderTextsForCallComingInL( callStateData.CallId(), EFalse, &callHeaderParam );
   371 
   452                 
   372                 iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble,
   453                 iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, 
   373                     callStateData.CallId(),
   454                     callStateData.CallId(), 
   374                     &callHeaderParam );
   455                     &callHeaderParam );
   375 
   456         
   376                 // Capture keys when there is an incoming call
   457                 // Capture keys when there is an incoming call
   377                 CaptureKeysDuringCallNotificationL( ETrue );
   458                 CaptureKeysDuringCallNotificationL( ETrue );    
   378 
   459                 
   379                 // Go to Incoming state
   460                 // Go to Incoming state
   380                 iCbaManager->UpdateIncomingCbaL( callStateData.CallId() );
   461                 iCbaManager->UpdateIncomingCbaL( callStateData.CallId() );
   381 
       
   382                 // Check if HW Keys or Call UI should be disabled
       
   383                 CheckDisableHWKeysAndCallUIL();
       
   384 
       
   385                 SetTouchPaneButtons( EPhoneIncomingCallButtons );
   462                 SetTouchPaneButtons( EPhoneIncomingCallButtons );
   386                 SetRingingTonePlaybackL( callStateData.CallId() );
   463                 UpdateSilenceButtonDimming();
   387                 SetBackButtonActive(EFalse);
   464                 SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   388                 iStateMachine->ChangeState( EPhoneStateIncoming );
   465                 SetRingingTonePlaybackL( callStateData.CallId() );      
       
   466                 SetToolbarDimming( ETrue );
       
   467                 iStateMachine->ChangeState( EPhoneStateIncoming );          
   389                 }
   468                 }
   390             else
   469             else
   391                 {
   470                 {
   392                 SetDefaultFlagsL();
   471                 SetDefaultFlagsL();
   393                 UpdateCbaL( EPhoneEmptyCBA );
   472                 UpdateCbaL( EPhoneEmptyCBA );
   394                 iStateMachine->ChangeState( EPhoneStateIdle );
   473                 iStateMachine->ChangeState( EPhoneStateIdle );          
   395                 }
   474                 }
   396             }
   475             }
   397             break;
   476             break;
   398          case EOneActiveCall:
   477          case EOneActiveCall:
   399             {
   478             {
   400             // Go to Single And Waiting state
   479             // Go to Single And Waiting state
   401             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   480             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   402             SetTouchPaneButtons( EPhoneWaitingCallButtons );
   481             SetTouchPaneButtons( EPhoneWaitingCallButtons );        
   403 
   482             SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer );
   404             // Check if HW Keys or Call UI should be disabled
   483             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );        
   405             CheckDisableHWKeysAndCallUIL();
       
   406 
       
   407             iStateMachine->ChangeState( EPhoneStateWaitingInSingle );
       
   408             }
   484             }
   409             break;
   485             break;
   410          case ETwoActiveCalls:
   486          case ETwoActiveCalls:
   411             {
   487             {
   412             // Go to Two Singles And Waiting state
   488             // Go to Two Singles And Waiting state
   413             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   489             UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
   414 
   490             SetTouchPaneButtons( EPhoneWaitingCallButtons );        
   415             // Check if HW Keys or Call UI should be disabled
       
   416             CheckDisableHWKeysAndCallUIL();
       
   417 
       
   418             SetTouchPaneButtons( EPhoneWaitingCallButtons );
       
   419             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
   491             iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting );
   420             }
   492             }
   421             break;
   493             break;
   422          default:
   494          default:
   423            // Too many active calls to handle reliable state change now.
   495            // Too many active calls to handle reliable state change now.
   424            // Waiting for all conference member idles
   496            // Waiting for all conference member idles
   425            // This case may happen when 'End all calls' because conferenceIdle may
   497            // This case may happen when 'End all calls' because conferenceIdle may 
   426            // come earlier than idle for conference member
   498            // come earlier than idle for conference member
   427             break;
   499             break;
   428          }
   500          }
   429 
   501 
   430     }
   502     }
   431 
   503     
   432 // End of File
   504 // End of File