diff -r 41a7f70b3818 -r 5266b1f337bd phoneapp/phoneuistates/src/cphonesinglecall.cpp --- a/phoneapp/phoneuistates/src/cphonesinglecall.cpp Tue Aug 31 15:14:29 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphonesinglecall.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include "cphonesinglecall.h" #include "tphonecmdparamstring.h" @@ -47,8 +47,6 @@ #include "cphonemediatorfactory.h" #include "cphonemediatorsender.h" #include "cphoneswitchtovideoorvoicecommand.h" -#include "mphonestorage.h" -#include "cphonecenrepproxy.h" // ================= MEMBER FUNCTIONS ======================= @@ -116,7 +114,14 @@ iCallId = callStateData.CallId(); iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag ); - + + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverAllowed ); + + // Update phone number availability for menu use + PhoneNumberAvailableInPhoneEngineL( callStateData.CallId() ); } // ----------------------------------------------------------- @@ -223,7 +228,7 @@ break; case MEngineMonitor::EPEMessageDialing: - HandleDiallingL( aCallId ); + HandleDialingL( aCallId ); break; /* Flow through */ @@ -234,7 +239,7 @@ break; case MEngineMonitor::EPEMessageInValidEmergencyNumber: - SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed, ETrue ); + SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed ); break; case MEngineMonitor::EPEMessageValidEmergencyNumber: @@ -265,9 +270,11 @@ break; case EPhoneInCallCmdNewCall: + LaunchNewCallQueryL(); break; case EPhoneInCallCmdNewCallCall: + CallFromNewCallQueryL(); break; case EPhoneInCallCmdSwitchToVideo: @@ -288,28 +295,30 @@ /* 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: @@ -332,6 +341,24 @@ } // ----------------------------------------------------------- +// CPhoneSingleCall::OpenMenuBarL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneSingleCall::OpenMenuBarL() + { + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::OpenMenuBarL()"); + + if ( IsVideoCall ( iCallId )) + { + OpenVideoCallMenuBarL(); + } + else + { + CPhoneGsmInCall::OpenMenuBarL(); + } + } + +// ----------------------------------------------------------- // CPhoneSingleCall::CallId // ----------------------------------------------------------- // @@ -347,7 +374,26 @@ 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 ); + } } // ----------------------------------------------------------- @@ -386,7 +432,6 @@ } UpdateInCallCbaL(); - SetTouchPaneButtons( EPhoneIncallHeldButtons ); } // ----------------------------------------------------------- @@ -421,7 +466,6 @@ } UpdateInCallCbaL(); - SetTouchPaneButtons( EPhoneIncallButtons ); } // ----------------------------------------------------------- @@ -432,25 +476,16 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::ToggleHoldL()"); - - TPECallControlCaps callControlCaps = - iStateMachine->PhoneEngineInfo()->CallControlCaps( iCallId ); - - if ( callControlCaps & MCCECallObserver::ECCECapsHold ) + TPhoneCmdParamBoolean hold; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetHoldFlag, &hold ); + + if( hold.Boolean() ) { - iStateMachine->SetCallId( iCallId ); - iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageHold ); - } - else if ( callControlCaps & MCCECallObserver::ECCECapsResume ) - { - iStateMachine->SetCallId( iCallId ); - iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageResume ); + SetCallResumeL(); } else { - SendGlobalInfoNoteL( EPhoneNoteTextNotAllowed, ETrue ); + SetCallHoldL(); } } @@ -463,53 +498,44 @@ __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 ); } @@ -520,32 +546,26 @@ // 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 ); - // Cannot delete active note, e.g. New call query, - // but show waiting note with or without caller name - if ( IsAnyQueryActiveL() || - ( !aCommandParam.Boolean() && iOnScreenDialer ) ) + // Remove any phone dialogs if they are displayed + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); + + // if keys have been locked, disable keylock without information note + if ( IsKeyLockOn() ) { - CallWaitingNoteL( aCallId ); - } - else - { - // Remove any phone dialogs if they are displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote ); } // Indicate that the Phone needs to be sent to the background if // an application other than the top application is in the foreground - TPhoneCmdParamBoolean booleanParam; - booleanParam.SetBoolean( !TopAppIsDisplayedL() ); - iViewCommandHandle->ExecuteCommandL( - EPhoneViewSetNeedToSendToBackgroundStatus, - &booleanParam ); - + SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() ); + // Bring Phone app in the foreground TPhoneCmdParamInteger uidParam; uidParam.SetInteger( KUidPhoneApplication.iUid ); @@ -558,54 +578,112 @@ 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::HandleDiallingL +// CPhoneSingleCall::HandleDialingL // ----------------------------------------------------------- // -void CPhoneSingleCall::HandleDiallingL( TInt aCallId ) +void CPhoneSingleCall::HandleDialingL( TInt aCallId ) { __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneSingleCall::HandleDiallingL()"); - BeginUiUpdateLC(); + "CPhoneSingleCall::HandleDialingL()"); - SetNumberEntryVisibilityL(EFalse); - + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); // Display call setup DisplayCallSetupL( aCallId ); - + iStateMachine->ChangeState( EPhoneStateCallSetupInSingle ); + } + +// ----------------------------------------------------------- +// CPhoneSingleCall::DoStateSpecificCallSetUpDefinitionsL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneSingleCall::DoStateSpecificCallSetUpDefinitionsL() + { // Show incoming call buttons SetTouchPaneButtons( EPhoneCallSetupAndSingleButtons ); - - EndUiUpdate(); + } - // Go to call setup state - UpdateCbaL( EPhoneCallHandlingCallSetupCBA ); - iStateMachine->ChangeState( EPhoneStateCallSetupInSingle ); +// ----------------------------------------------------------- +// 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 ); + } } // ----------------------------------------------------------- -// CPhoneSingleCall::DisplayCallSetupL +// CPhoneSingleCall::SetCallResumeL // ----------------------------------------------------------- // -void CPhoneSingleCall::DisplayCallSetupL( TInt aCallId ) +void CPhoneSingleCall::SetCallResumeL() { __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneSingleCall::DisplayCallSetupL()"); - - // Remove dialogs if necessary - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - - // Capture keys when the phone is dialling - CaptureKeysDuringCallNotificationL( ETrue ); + "CPhoneSingleCall::SetCallHold()"); - // Force telephony to the foreground - TPhoneCmdParamInteger uidParam; - uidParam.SetInteger( KUidPhoneApplication.iUid ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground, - &uidParam ); - - // Display call setup header - DisplayHeaderForOutgoingCallL( aCallId ); + 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 ); + } } // ----------------------------------------------------------- @@ -618,28 +696,38 @@ "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; - } + iSwitchToVideoQuery = ETrue; + ShowQueryL( EPhoneSwitchToVideoQuery ); + iSwitchToVideoQuery = EFalse; + } + + if( resetTouchButtons ) + { + // Sets touch buttons to correct status if error has occured. + iViewCommandHandle->ExecuteCommand( EPhoneResetTouchButtons ); + } } } @@ -652,7 +740,7 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::SwitchToVoiceL()"); - //ShowQueryL( EPhoneSwitchToVoiceQuery ); + ShowQueryL( EPhoneSwitchToVoiceQuery ); } // End of File