diff -r 40a3f856b14d -r 41a7f70b3818 phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp --- a/phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp Thu Aug 19 09:54:27 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -32,16 +32,19 @@ #include "phonerssbase.h" #include "tphonecmdparamglobalnote.h" #include "phoneui.hrh" +#include "mphonestorage.h" +#include "cphonecenrepproxy.h" +#include // ================= MEMBER FUNCTIONS ======================= // C++ default constructor can NOT contain any code, that // might leave. // -CPhoneConferenceAndSingleAndWaiting::CPhoneConferenceAndSingleAndWaiting( - MPhoneStateMachine* aStateMachine, +CPhoneConferenceAndSingleAndWaiting::CPhoneConferenceAndSingleAndWaiting( + MPhoneStateMachine* aStateMachine, MPhoneViewCommandHandle* aViewCommandHandle, - MPhoneCustomization* aPhoneCustomization ) : + MPhoneCustomization* aPhoneCustomization ) : CPhoneConferenceAndSingle( aStateMachine, aViewCommandHandle, aPhoneCustomization ) { } @@ -54,16 +57,6 @@ // CPhoneConferenceAndSingleAndWaiting::~CPhoneConferenceAndSingleAndWaiting() { - // 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 ) ); - } } // ----------------------------------------------------------- @@ -83,18 +76,18 @@ // (other items were commented in a header). // ----------------------------------------------------------- // -CPhoneConferenceAndSingleAndWaiting* CPhoneConferenceAndSingleAndWaiting::NewL( - MPhoneStateMachine* aStateMachine, +CPhoneConferenceAndSingleAndWaiting* CPhoneConferenceAndSingleAndWaiting::NewL( + MPhoneStateMachine* aStateMachine, MPhoneViewCommandHandle* aViewCommandHandle, MPhoneCustomization* aPhoneCustomization ) { - CPhoneConferenceAndSingleAndWaiting* self = new( ELeave ) CPhoneConferenceAndSingleAndWaiting( + CPhoneConferenceAndSingleAndWaiting* self = new( ELeave ) CPhoneConferenceAndSingleAndWaiting( aStateMachine, aViewCommandHandle, aPhoneCustomization ); - + CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); - + return self; } @@ -102,126 +95,65 @@ // CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL // ----------------------------------------------------------- // -void CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL( - const TInt aMessage, +void CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL( + const TInt aMessage, TInt aCallId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::HandlePhoneEngineMessageL()"); switch ( aMessage ) - { + { case MEngineMonitor::EPEMessageAddedConferenceMember: HandleAddedConferenceMemberL( aCallId ); break; - + case MEngineMonitor::EPEMessageIdle: HandleIdleL( aCallId ); break; - + default: - CPhoneConferenceAndSingle::HandlePhoneEngineMessageL( aMessage, + CPhoneConferenceAndSingle::HandlePhoneEngineMessageL( aMessage, aCallId ); break; } } // ----------------------------------------------------------- -// CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL -// ----------------------------------------------------------- -// -void CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL() - { - __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneConferenceAndSingleAndWaiting::OpenMenuBarL()"); - TInt resourceId = NULL; - - // Set specific flag to view so that DTMF menu item available - TPhoneCmdParamBoolean dtmfSendFlag; - dtmfSendFlag.SetBoolean( ETrue ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, - &dtmfSendFlag ); - - - TPhoneCmdParamCallStateData callStateData; - callStateData.SetCallState( EPEStateHeld ); - iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, - &callStateData ); - if( callStateData.CallId() == KConferenceCallId ) - { - // Conference call is on hold and single is active - if ( IsNumberEntryVisibleL() ) - { - resourceId = EPhoneCallActiveHeldConfAndWaitingMenubarWithNumberEntry; - } - else if ( IsConferenceBubbleInSelectionMode() ) - { - resourceId = EPhoneConfCallParticipantsDropMenubar; - } - else - { - resourceId = EPhoneCallActiveHeldConfAndWaitingMenubar; - } - } - else if( callStateData.CallId() >= 0 ) - { - // Single call is on hold and conference is active - if ( IsNumberEntryVisibleL() ) - { - resourceId = EPhoneConfCallActiveHeldAndWaitingMenubarWithNumberEntry; - } - else if ( IsConferenceBubbleInSelectionMode() ) - { - resourceId = EPhoneConfCallParticipantsDropMenubar; - } - else - { - resourceId = EPhoneConfCallActiveHeldAndWaitingMenubar; - } - } - else - { - return; // negative call id, don't do anything - } - - TPhoneCmdParamInteger integerParam; - integerParam.SetInteger( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( resourceId ) ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, - &integerParam ); - } - -// ----------------------------------------------------------- // CPhoneConferenceAndSingleAndWaiting::HandleIdleL // ----------------------------------------------------------- // void CPhoneConferenceAndSingleAndWaiting::HandleIdleL( TInt aCallId ) { - __LOGMETHODSTARTEND( EPhoneUIStates, + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleIdleL()"); + BeginUiUpdateLC(); - SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer ); + // Set touch controls SetTouchPaneButtons( EPhoneWaitingCallButtons ); + TPhoneCmdParamBoolean conferenceExistsForCallId; iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference, aCallId, &conferenceExistsForCallId ); + if( conferenceExistsForCallId.Boolean() ) { // Remove conference member from conference bubble - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference, + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference, aCallId ); } else { + // Remove call iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId ); + TPhoneCmdParamBoolean conferenceBubbleExists; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference, + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsConference, &conferenceBubbleExists ); if( !conferenceBubbleExists.Boolean() ) { // Idle message came for conference member. MakeTransitionAccordingToActiveCallsL(); - } + } else { TPhoneCmdParamCallStateData callStateData; @@ -255,7 +187,7 @@ UpdateConferenceSecurityStatusL( aCallId ); - MakeStateTransitionToConferenceAndWaitingL( KConferenceCallId ); + MakeStateTransitionToConferenceAndWaitingL( KConferenceCallId ); } // ----------------------------------------------------------- @@ -264,17 +196,14 @@ // void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL( TInt /*aCallId*/ ) { - __LOGMETHODSTARTEND( EPhoneUIStates, + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndWaitingL()"); - if ( !IsNumberEntryUsedL() ) - { - // Close menu bar, if number entry isnt open. - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); - } - - SetTouchPaneButtons( EPhoneWaitingCallButtons ); - SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer ); - + + SetTouchPaneButtons( EPhoneWaitingCallButtons ); + + // Check if HW Keys or Call UI should be disabled + CheckDisableHWKeysAndCallUIL(); + // Go to Conference And Waiting state UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); iStateMachine->ChangeState( EPhoneStateConferenceAndWaiting ); @@ -286,50 +215,49 @@ // void CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL( TInt /*aCallId*/ ) { - __LOGMETHODSTARTEND( EPhoneUIStates, + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::MakeStateTransitionToConferenceAndSingleL()"); - if ( !IsNumberEntryUsedL() ) + if( /*FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) + */ 1 && iStateMachine->PhoneStorage()->IsScreenLocked() ) { - // Close menu bar, if number entry isnt open. - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + EnableCallUIL(); } + // Reset blocked keys list + iStateMachine->PhoneStorage()->ResetBlockedKeysList(); + if ( IsNumberEntryUsedL() ) { - if ( NeedToReturnToForegroundAppL() ) + if ( NeedToSendToBackgroundL() ) { // Return phone to the background if send to background is needed. iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility ); - UpdateCbaL( EPhoneCallHandlingInCallCBA ); } else { // Show the number entry if it exists - SetNumberEntryVisibilityL(ETrue); + SetNumberEntryVisibilityL(ETrue); } } else { UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA ); - // If numberentry is not open just check NeedToReturnToForegroundAppL and + // If numberentry is not open just check NeedToSendToBackgroundL and // sendbackround if needed. - if ( NeedToReturnToForegroundAppL() ) + if ( NeedToSendToBackgroundL() ) { // Return phone to the background if send to background is needed. iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground ); } - } + } - SetTouchPaneButtons( EPhoneConferenceAndSingleButtons ); - SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer ); - SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate ); + SetTouchPaneButtons( EPhoneConferenceAndSingleButtons ); // Go to conference and single state // CBA updates in above if-else conditions - iStateMachine->ChangeState( EPhoneStateConferenceAndSingle ); + iStateMachine->ChangeState( EPhoneStateConferenceAndSingle ); } // ----------------------------------------------------------- @@ -338,50 +266,47 @@ // void CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL() { - __LOGMETHODSTARTEND( EPhoneUIStates, + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleConferenceIdleL()"); - - BeginUiUpdateLC(); - - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble ); - - // Close menu bar, if it is displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + + BeginUiUpdateLC(); + + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble ); // Remove any phone dialogs if they are displayed iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); MakeTransitionAccordingToActiveCallsL(); - - EndUiUpdate(); + + EndUiUpdate(); } // -------------------------------------------------------------- // CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL // -------------------------------------------------------------- // -void CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL( +void CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL( TPhoneKeyEventMessages aMessage, TKeyCode aCode ) { - __LOGMETHODSTARTEND( EPhoneUIStates, + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL()"); switch ( aCode ) { // send-key case EKeyYes: if( IsNumberEntryVisibleL() ) - { - CallFromNumberEntryL(); - } - else - { + { + CallFromNumberEntryL(); + } + else + { // Not allowed to answer - SendGlobalWarningNoteL( - EPhoneNoteTextCallNotAllowed ); - } + SendGlobalWarningNoteL( + EPhoneNoteTextCallNotAllowed, ETrue ); + } break; - + default: // do base operation CPhoneConferenceAndSingle::HandleKeyMessageL( aMessage, aCode ); @@ -390,24 +315,18 @@ } // ----------------------------------------------------------- -// CPhoneConferenceAndSingleAndWaiting::HandleErrorL +// CPhoneConferenceAndSingleAndWaiting::HandleKeyEventL // ----------------------------------------------------------- // -EXPORT_C void CPhoneConferenceAndSingleAndWaiting::HandleErrorL( - const TPEErrorInfo& aErrorInfo ) +void CPhoneConferenceAndSingleAndWaiting::HandleKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode /*aEventCode*/ ) { - __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleErrorL()"); - - if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer ) + if( EKeyDeviceF == aKeyEvent.iCode ) { - // Should not shown "No Answer" note - __PHONELOG1( EBasic, EPhoneUIStates, - "PhoneUIStates: CPhoneConferenceAndSingleAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ", - aErrorInfo.iErrorCode); - } - else - { - CPhoneState::HandleErrorL( aErrorInfo ); + __PHONELOG( EBasic, EPhoneUIStates, + "CPhoneConferenceAndSingleAndWaiting::HandleKeyMessageL-deviceF" ); + HandleHoldSwitchL(); } } @@ -418,7 +337,7 @@ void CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL() { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL() "); - + UpdateCbaL ( EPhoneCallHandlingCallWaitingCBA ); } @@ -431,46 +350,48 @@ TPhoneCmdParamInteger activeCallCount; iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCountOfActiveCalls, &activeCallCount ); - + switch( activeCallCount.Integer() ) { case ENoActiveCalls: // Go to incoming state { // Get Waiting call's Call Id - TPhoneCmdParamCallStateData callStateData; + TPhoneCmdParamCallStateData callStateData; callStateData.SetCallState( EPEStateRinging ); - iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, + iViewCommandHandle->HandleCommandL( EPhoneViewGetCallIdByState, &callStateData ); - + if ( callStateData.CallId() != KErrNotFound ) { // Display ringing bubble TPhoneCmdParamCallHeaderData callHeaderParam; callHeaderParam.SetCallState( EPEStateRinging ); - + SetCallHeaderTextsForCallComingInL( callStateData.CallId(), EFalse, &callHeaderParam ); - - iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, - callStateData.CallId(), + + iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, + callStateData.CallId(), &callHeaderParam ); - + // Capture keys when there is an incoming call - CaptureKeysDuringCallNotificationL( ETrue ); - + CaptureKeysDuringCallNotificationL( ETrue ); + // Go to Incoming state iCbaManager->UpdateIncomingCbaL( callStateData.CallId() ); + + // Check if HW Keys or Call UI should be disabled + CheckDisableHWKeysAndCallUIL(); + SetTouchPaneButtons( EPhoneIncomingCallButtons ); - UpdateSilenceButtonDimming(); - SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer ); - SetRingingTonePlaybackL( callStateData.CallId() ); - SetToolbarDimming( ETrue ); - iStateMachine->ChangeState( EPhoneStateIncoming ); + SetRingingTonePlaybackL( callStateData.CallId() ); + SetBackButtonActive(EFalse); + iStateMachine->ChangeState( EPhoneStateIncoming ); } else { SetDefaultFlagsL(); UpdateCbaL( EPhoneEmptyCBA ); - iStateMachine->ChangeState( EPhoneStateIdle ); + iStateMachine->ChangeState( EPhoneStateIdle ); } } break; @@ -478,27 +399,34 @@ { // Go to Single And Waiting state UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); - SetTouchPaneButtons( EPhoneWaitingCallButtons ); - SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer ); - iStateMachine->ChangeState( EPhoneStateWaitingInSingle ); + SetTouchPaneButtons( EPhoneWaitingCallButtons ); + + // Check if HW Keys or Call UI should be disabled + CheckDisableHWKeysAndCallUIL(); + + iStateMachine->ChangeState( EPhoneStateWaitingInSingle ); } break; case ETwoActiveCalls: { // Go to Two Singles And Waiting state UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); - SetTouchPaneButtons( EPhoneWaitingCallButtons ); + + // Check if HW Keys or Call UI should be disabled + CheckDisableHWKeysAndCallUIL(); + + SetTouchPaneButtons( EPhoneWaitingCallButtons ); iStateMachine->ChangeState( EPhoneStateTwoSinglesAndWaiting ); } break; default: // Too many active calls to handle reliable state change now. // Waiting for all conference member idles - // This case may happen when 'End all calls' because conferenceIdle may + // This case may happen when 'End all calls' because conferenceIdle may // come earlier than idle for conference member break; } } - + // End of File