diff -r 40a3f856b14d -r 41a7f70b3818 phoneapp/phoneuistates/src/cphonesinglecall.cpp --- a/phoneapp/phoneuistates/src/cphonesinglecall.cpp Thu Aug 19 09:54:27 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphonesinglecall.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include "cphonesinglecall.h" #include "tphonecmdparamstring.h" @@ -47,6 +47,8 @@ #include "cphonemediatorfactory.h" #include "cphonemediatorsender.h" #include "cphoneswitchtovideoorvoicecommand.h" +#include "mphonestorage.h" +#include "cphonecenrepproxy.h" // ================= MEMBER FUNCTIONS ======================= @@ -114,14 +116,7 @@ iCallId = callStateData.CallId(); iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag ); - - CPhonePubSubProxy::Instance()->ChangePropertyValue( - KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, - EPhoneScreensaverAllowed ); - - // Update phone number availability for menu use - PhoneNumberAvailableInPhoneEngineL( callStateData.CallId() ); + } // ----------------------------------------------------------- @@ -228,7 +223,7 @@ break; case MEngineMonitor::EPEMessageDialing: - HandleDialingL( aCallId ); + HandleDiallingL( aCallId ); break; /* Flow through */ @@ -239,7 +234,7 @@ break; case MEngineMonitor::EPEMessageInValidEmergencyNumber: - SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed ); + SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed, ETrue ); break; case MEngineMonitor::EPEMessageValidEmergencyNumber: @@ -270,11 +265,9 @@ break; case EPhoneInCallCmdNewCall: - LaunchNewCallQueryL(); break; case EPhoneInCallCmdNewCallCall: - CallFromNewCallQueryL(); break; case EPhoneInCallCmdSwitchToVideo: @@ -295,30 +288,28 @@ /* Flow through */ case EPhoneCmdNoSwitchToVideo: case EPhoneCmdNoSwitchToVoice: - // Sets touch buttons to correct status if 'No' command has occured. - iViewCommandHandle->ExecuteCommand( EPhoneResetTouchButtons ); break; case EPhoneCmdYesSwitchToVoice: // Set current call id iStateMachine->SetCallId( iCallId ); - if( IsVideoCall( iCallId ) ) - { - // Video call can be released only after we get response to VT Shutdown Command - CPhoneMediatorFactory::Instance()->Sender()->IssueCommand( KMediatorVideoTelephonyDomain, - KCatPhoneToVideotelCommands, - EVtCmdReleaseDataport, - TVersion( KPhoneToVideotelCmdVersionMajor, - KPhoneToVideotelCmdVersionMinor, - KPhoneToVideotelCmdVersionBuild ), - KNullDesC8, - CPhoneSwitchToVideoOrVoiceCommand::NewL( *iStateMachine ) ); - } - else - { - iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageSwitchToVideoOrVoice ); - } + if( IsVideoCall( iCallId ) ) + { + // Video call can be released only after we get response to VT Shutdown Command + CPhoneMediatorFactory::Instance()->Sender()->IssueCommand( KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + EVtCmdReleaseDataport, + TVersion( KPhoneToVideotelCmdVersionMajor, + KPhoneToVideotelCmdVersionMinor, + KPhoneToVideotelCmdVersionBuild ), + KNullDesC8, + CPhoneSwitchToVideoOrVoiceCommand::NewL( *iStateMachine ) ); + } + else + { + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageSwitchToVideoOrVoice ); + } break; case EPhoneVideoSharing: @@ -341,24 +332,6 @@ } // ----------------------------------------------------------- -// CPhoneSingleCall::OpenMenuBarL -// ----------------------------------------------------------- -// -EXPORT_C void CPhoneSingleCall::OpenMenuBarL() - { - __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::OpenMenuBarL()"); - - if ( IsVideoCall ( iCallId )) - { - OpenVideoCallMenuBarL(); - } - else - { - CPhoneGsmInCall::OpenMenuBarL(); - } - } - -// ----------------------------------------------------------- // CPhoneSingleCall::CallId // ----------------------------------------------------------- // @@ -374,26 +347,7 @@ void CPhoneSingleCall::OpenVideoCallMenuBarL() { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::OpenVideoCallMenuBarL()"); - if( FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony ) ) - { - TInt resourceId; - - if ( IsNumberEntryUsedL() ) - { - resourceId = EPhoneVideoCallMenubarWithNumberEntry; - } - else - { - resourceId = EPhoneVideoCallMenubar; - } - - TPhoneCmdParamInteger integerParam; - integerParam.SetInteger( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( resourceId ) ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, - &integerParam ); - } + } // ----------------------------------------------------------- @@ -432,6 +386,7 @@ } UpdateInCallCbaL(); + SetTouchPaneButtons( EPhoneIncallHeldButtons ); } // ----------------------------------------------------------- @@ -466,6 +421,7 @@ } UpdateInCallCbaL(); + SetTouchPaneButtons( EPhoneIncallButtons ); } // ----------------------------------------------------------- @@ -476,16 +432,25 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::ToggleHoldL()"); - TPhoneCmdParamBoolean hold; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetHoldFlag, &hold ); - - if( hold.Boolean() ) + + TPECallControlCaps callControlCaps = + iStateMachine->PhoneEngineInfo()->CallControlCaps( iCallId ); + + if ( callControlCaps & MCCECallObserver::ECCECapsHold ) { - SetCallResumeL(); + iStateMachine->SetCallId( iCallId ); + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageHold ); + } + else if ( callControlCaps & MCCECallObserver::ECCECapsResume ) + { + iStateMachine->SetCallId( iCallId ); + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageResume ); } else { - SetCallHoldL(); + SendGlobalInfoNoteL( EPhoneNoteTextNotAllowed, ETrue ); } } @@ -498,44 +463,53 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::HandleIncomingL()"); - CPhonePubSubProxy::Instance()->ChangePropertyValue( - KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, - EPhoneScreensaverNotAllowed ); - IsNumberEntryUsedL() ? - BeginTransEffectLC( ECallUiAppear ) : - BeginTransEffectLC( ENumberEntryOpen ); BeginUiUpdateLC(); - // Hide the number entry if it exists - if ( IsNumberEntryUsedL() ) - { - SetNumberEntryVisibilityL( EFalse ); - } - TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); // Get allow waiting call header param value. AllowShowingOfWaitingCallHeaderL( dialerParam ); - // Close fast swap window if it's displayed - EikonEnv()->DismissTaskList(); - - // Show incoming call buttons - SetTouchPaneButtons( EPhoneWaitingCallButtons ); - // Display incoming call DisplayIncomingCallL( aCallId, dialerParam ); - + + // Show incoming call buttons + SetTouchPaneButtons( EPhoneWaitingCallButtons ); + + if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) + && !CPhoneCenRepProxy::Instance()-> + IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) + && ( IsKeyLockOn() || IsAutoLockOn() ) ) + { + DisableCallUIL(); + } + else + { + // if keys have been locked, disable keylock without information note + if ( IsKeyLockOn() ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote ); + } + } + + if( CPhoneCenRepProxy::Instance()-> + IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) + && ( IsKeyLockOn() || IsAutoLockOn() ) ) + { + DisableHWKeysL(); + } + EndUiUpdate(); - EndTransEffect(); + // This query is required to dismiss // Operation cannot be completed in waiting and single state if ( iSwitchToVideoQuery ) { iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveQuery ); } + + // Go to incoming state UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); iStateMachine->ChangeState( EPhoneStateWaitingInSingle ); } @@ -546,26 +520,32 @@ // void CPhoneSingleCall::DisplayIncomingCallL( TInt aCallId, - const TPhoneCmdParamBoolean /*aCommandParam*/ ) + const TPhoneCmdParamBoolean aCommandParam ) { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::DisplayIncomingCallL()"); - // Close menu bar, if it is displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); - // Remove any phone dialogs if they are displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - - // if keys have been locked, disable keylock without information note - if ( IsKeyLockOn() ) + // Cannot delete active note, e.g. New call query, + // but show waiting note with or without caller name + if ( IsAnyQueryActiveL() || + ( !aCommandParam.Boolean() && iOnScreenDialer ) ) { - iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote ); + CallWaitingNoteL( aCallId ); + } + else + { + // Remove any phone dialogs if they are displayed + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); } // Indicate that the Phone needs to be sent to the background if // an application other than the top application is in the foreground - SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() ); - + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( !TopAppIsDisplayedL() ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetNeedToSendToBackgroundStatus, + &booleanParam ); + // Bring Phone app in the foreground TPhoneCmdParamInteger uidParam; uidParam.SetInteger( KUidPhoneApplication.iUid ); @@ -578,112 +558,54 @@ DisplayHeaderForCallComingInL( aCallId, ETrue ); //waiting call } - -// --------------------------------------------------------- -// CPhoneSingleCall::CallFromNewCallQueryL -// --------------------------------------------------------- -// -void CPhoneSingleCall::CallFromNewCallQueryL() - { - __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneSingleCall::CallFromNewCallQueryL()"); - // First get the phone number from the dialog - TPhoneCmdParamString phoneNumberParam; - HBufC *content = HBufC::NewLC( KPhoneNumberEntryBufferSize ); - TPtr ptr( content->Des() ); - phoneNumberParam.SetString( &ptr ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetTextQueryContent, - &phoneNumberParam ); - - // Store the phone number - iStateMachine->PhoneEngineInfo()->SetPhoneNumber( ptr ); - - // clean up stack - CleanupStack::PopAndDestroy( content ); - - DialVoiceCallL(); - } - // ----------------------------------------------------------- -// CPhoneSingleCall::HandleDialingL +// CPhoneSingleCall::HandleDiallingL // ----------------------------------------------------------- // -void CPhoneSingleCall::HandleDialingL( TInt aCallId ) +void CPhoneSingleCall::HandleDiallingL( TInt aCallId ) { __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneSingleCall::HandleDialingL()"); + "CPhoneSingleCall::HandleDiallingL()"); + BeginUiUpdateLC(); - CPhonePubSubProxy::Instance()->ChangePropertyValue( - KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, - EPhoneScreensaverNotAllowed ); + SetNumberEntryVisibilityL(EFalse); + // Display call setup DisplayCallSetupL( aCallId ); - iStateMachine->ChangeState( EPhoneStateCallSetupInSingle ); - } - -// ----------------------------------------------------------- -// CPhoneSingleCall::DoStateSpecificCallSetUpDefinitionsL -// ----------------------------------------------------------- -// -EXPORT_C void CPhoneSingleCall::DoStateSpecificCallSetUpDefinitionsL() - { + // Show incoming call buttons SetTouchPaneButtons( EPhoneCallSetupAndSingleButtons ); - } + + EndUiUpdate(); -// ----------------------------------------------------------- -// CPhoneSingleCall::SetCallHoldL -// ----------------------------------------------------------- -// -void CPhoneSingleCall::SetCallHoldL() - { - __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneSingleCall::SetCallHold()"); - - TPhoneCmdParamCallStateData callStateData; - callStateData.SetCallId( iCallId ); - iViewCommandHandle->HandleCommandL( EPhoneViewGetCallState, - &callStateData ); - - if( callStateData.CallState() == EPEStateConnected && !IsVideoCallActiveL() ) - { - iStateMachine->SetCallId( iCallId ); - iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageHold ); - } - else - { - // Show not allowed note - SendGlobalInfoNoteL( EPhoneNoteTextNotAllowed ); - } + // Go to call setup state + UpdateCbaL( EPhoneCallHandlingCallSetupCBA ); + iStateMachine->ChangeState( EPhoneStateCallSetupInSingle ); } // ----------------------------------------------------------- -// CPhoneSingleCall::SetCallResumeL +// CPhoneSingleCall::DisplayCallSetupL // ----------------------------------------------------------- // -void CPhoneSingleCall::SetCallResumeL() +void CPhoneSingleCall::DisplayCallSetupL( TInt aCallId ) { __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneSingleCall::SetCallHold()"); + "CPhoneSingleCall::DisplayCallSetupL()"); + + // Remove dialogs if necessary + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); + + // Capture keys when the phone is dialling + CaptureKeysDuringCallNotificationL( ETrue ); - TPhoneCmdParamCallStateData callStateData; - callStateData.SetCallId( iCallId ); - iViewCommandHandle->HandleCommandL( EPhoneViewGetCallState, - &callStateData ); - - if( callStateData.CallState() == EPEStateHeld ) - { - iStateMachine->SetCallId( iCallId ); - iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageResume ); - } - else - { - // Show not allowed note - SendGlobalInfoNoteL( EPhoneNoteTextNotAllowed ); - } + // Force telephony to the foreground + TPhoneCmdParamInteger uidParam; + uidParam.SetInteger( KUidPhoneApplication.iUid ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground, + &uidParam ); + + // Display call setup header + DisplayHeaderForOutgoingCallL( aCallId ); } // ----------------------------------------------------------- @@ -696,38 +618,28 @@ "CPhoneSingleCall::SwitchToVideoL()"); if( FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony ) ) - { + { TInt networkMode( CPhonePubSubProxy::Instance()->Value( KPSUidNetworkInfo, KNWTelephonyNetworkMode ) ); TBool restoreOngoing( CPhonePubSubProxy::Instance()->Value( KUidSystemCategory, conn::KUidBackupRestoreKey )); - - TBool resetTouchButtons = EFalse; if ( networkMode != ENWNetworkModeWcdma ) { // We aren't in 3G, video call not possible SendGlobalInfoNoteL( EPhoneInformationNoNetworkSupportForVideoCallNote ); - resetTouchButtons = ETrue; } else if ( restoreOngoing & ( conn::EBURRestoreFull | conn::EBURRestorePartial )) { // MC restore ongoing SendGlobalInfoNoteL( EPhoneInformationVideoCallNotAllowedDuringRestoreNote ); - resetTouchButtons = ETrue; } else { - iSwitchToVideoQuery = ETrue; - ShowQueryL( EPhoneSwitchToVideoQuery ); - iSwitchToVideoQuery = EFalse; - } - - if( resetTouchButtons ) - { - // Sets touch buttons to correct status if error has occured. - iViewCommandHandle->ExecuteCommand( EPhoneResetTouchButtons ); - } + iSwitchToVideoQuery = ETrue; + //ShowQueryL( EPhoneSwitchToVideoQuery ); + iSwitchToVideoQuery = EFalse; + } } } @@ -740,7 +652,7 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::SwitchToVoiceL()"); - ShowQueryL( EPhoneSwitchToVoiceQuery ); + //ShowQueryL( EPhoneSwitchToVoiceQuery ); } // End of File