diff -r 41a7f70b3818 -r 5266b1f337bd phoneapp/phoneuistates/src/cphoneconference.cpp --- a/phoneapp/phoneuistates/src/cphoneconference.cpp Tue Aug 31 15:14:29 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneconference.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -17,6 +17,7 @@ // INCLUDES +#include #include #include #include @@ -41,6 +42,7 @@ #include "tphonecmdparamcallstatedata.h" #include "cphonekeys.h" #include "phonelogger.h" +#include "cphonepubsubproxy.h" // ================= MEMBER FUNCTIONS ======================= @@ -81,6 +83,13 @@ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled, &globalNotifierParam ); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverAllowed ); + + DefineAndSetHoldFlagL(); + } // ----------------------------------------------------------- @@ -144,12 +153,6 @@ { TPhoneCmdParamCallHeaderData callHeaderParam; callHeaderParam.SetCallState( EPEStateHeld ); - TBuf labelText( KNullDesC ); - TInt callLabelId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneCallOnHold ); - - StringLoader::Load( labelText, callLabelId, CCoeEnv::Static() ); - callHeaderParam.SetLabelText( labelText ); iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, &callHeaderParam ); } @@ -165,7 +168,7 @@ break; case MEngineMonitor::EPEMessageDialing: - HandleDiallingL( aCallId ); + HandleDialingL( aCallId ); break; case MEngineMonitor::EPEMessageIncoming: @@ -192,6 +195,7 @@ { case EAknSoftkeyCancel: BeginUiUpdateLC(); + CloseSelectionListL(); SetTouchPaneButtons( EPhoneConferenceButtons ); EndUiUpdate(); UpdateCbaL( EPhoneCallHandlingInCallCBA ); @@ -211,6 +215,7 @@ // Conference -> Drop participant case EPhoneInCallCmdDropSelection: + OpenDropParticipantSelectionL(); break; // Drop CBA @@ -219,6 +224,7 @@ break; case EPhoneInCallCmdPrivateSelection: + OpenPrivateSelectionL(); break; case EPhoneInCallCmdPrivate: @@ -226,13 +232,25 @@ break; case EPhoneInCallCmdNewCall: + LaunchNewCallQueryL(); break; case EPhoneInCallCmdNewCallCall: + CallFromNewCallQueryL(); break; case EPhoneInCallCmdParticipants: - break; + OpenParticipantsListL(); + break; + + case EPhoneViewOpenNumberEntry: + if ( IsConferenceBubbleInSelectionMode() ) + { + CloseSelectionListL(); + SetTouchPaneButtons( EPhoneConferenceButtons ); + } + commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand ); + break; default: commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand ); @@ -248,7 +266,47 @@ // void CPhoneConference::UpdateInCallCbaL() { - UpdateCbaL( EPhoneCallHandlingInCallCBA ); + if ( iViewCommandHandle->HandleCommandL( EPhoneViewIsConferenceInExpandedMode ) + != EPhoneViewResponseSuccess ) + { + UpdateCbaL( EPhoneCallHandlingInCallCBA ); + } + } + +// ----------------------------------------------------------- +// CPhoneConference::OpenMenuBarL +// ----------------------------------------------------------- +// +void CPhoneConference::OpenMenuBarL() + { + __LOGMETHODSTARTEND( EPhoneUIStates, + "CPhoneConference::OpenMenuBarL()"); + TInt resourceId; + + if ( iOnScreenDialer && IsDTMFEditorVisibleL() ) + { + resourceId = EPhoneDtmfDialerMenubar; + } + else if ( IsNumberEntryVisibleL() ) + { + resourceId = EPhoneConfCallMenubarWithNumberEntry; + } + else if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) + && IsConferenceBubbleInSelectionMode() ) + { + resourceId = EPhoneConfCallParticipantsMenubar; + } + else + { + resourceId = EPhoneConfCallMenubar; + } + + TPhoneCmdParamInteger integerParam; + integerParam.SetInteger( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( resourceId ) ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, + &integerParam ); } // ----------------------------------------------------------- @@ -261,19 +319,33 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::HandleKeyEventL()"); - - if ( CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) ) + if ( IsConferenceBubbleInSelectionMode() ) { - // Handle numeric keys when key events are received - // in conference state. - CPhoneGsmInCall::HandleNumericKeyEventL( aKeyEvent, aEventCode ); + if ( aKeyEvent.iCode == EKeyUpArrow || + aKeyEvent.iCode == EKeyDownArrow ) + { + TPhoneCmdParamKeyEvent keyEventParam; + keyEventParam.SetKeyEvent( aKeyEvent ); + keyEventParam.SetEventCode( aEventCode ); + + iViewCommandHandle->ExecuteCommandL( + EPhoneViewMoveHighLightInList, &keyEventParam ); + } } else { - // Handle other key events. - CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode ); + if ( CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) ) + { + // Handle numeric keys when key events are received + // in conference state. + CPhoneGsmInCall::HandleNumericKeyEventL( aKeyEvent, aEventCode ); + } + else + { + // Handle other key events. + CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode ); + } } - } // -------------------------------------------------------------- @@ -336,6 +408,12 @@ // Stop capturing keys CaptureKeysDuringCallNotificationL( EFalse ); + + // If dialler is not open then close menu bar. + if ( !IsNumberEntryUsedL() ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + } // If conference bubble still exists then we have conference and // single call @@ -365,6 +443,7 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::HandleConferenceIdleL()"); + BeginTransEffectLC( ENumberEntryClose ); BeginUiUpdateLC(); iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveConferenceBubble ); @@ -377,7 +456,7 @@ { case ENoActiveCalls: MakeStateTransitionToIdleL(); - break; + break; case EOneActiveCall: { @@ -388,13 +467,17 @@ EPhoneViewGetCallIdByState, &callStateData ); if( callStateData.CallId() > KErrNotFound ) - { + { + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); iStateMachine->ChangeState( EPhoneStateWaitingInSingle ); } else { - MakeStateTransitionToSingleL(); + MakeStateTransitionToSingleL(); } } break; @@ -407,8 +490,8 @@ MakeStateTransitionToTwoSinglesL(); break; } - - EndUiUpdate(); + EndUiUpdate(); + EndTransEffect(); } // ----------------------------------------------------------- @@ -420,7 +503,7 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::HandleHeldConferenceL()"); TPhoneCmdParamCallHeaderData callHeaderParam; - callHeaderParam.SetCallState( EPEStateHeldConference ); + callHeaderParam.SetCallState( EPEStateHeld ); TInt callLabelId; TBuf labelText( KNullDesC ); @@ -435,16 +518,61 @@ iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, &callHeaderParam ); - + + // Set Hold flag to view + SetHoldFlagL(); + if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { - SendGlobalInfoNoteL( EPhoneInformationConferenceOnHold, ETrue ); + SendGlobalInfoNoteL( EPhoneInformationConferenceOnHold ); } - SetTouchPaneButtons( EPhoneConferenceButtons ); + SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate ); + UpdateInCallCbaL(); } + +// ----------------------------------------------------------- +// CPhoneConference::DefineAndSetHoldFlagL +// ----------------------------------------------------------- +// +void CPhoneConference::DefineAndSetHoldFlagL() + { + // Find out is conference held or not + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallId( KConferenceCallId ); + iViewCommandHandle->HandleCommandL( EPhoneViewGetCallState, + &callStateData ); + + // Set Hold flag to view + TPhoneCmdParamBoolean holdFlag; + + if( callStateData.CallState() == EPEStateHeld ) + { + holdFlag.SetBoolean( ETrue ); + } + else + { + holdFlag.SetBoolean( EFalse ); + } + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag ); + + } + +// ----------------------------------------------------------- +// CPhoneConference::SetHoldFlagL +// ----------------------------------------------------------- +// +void CPhoneConference::SetHoldFlagL() + { + // Set Hold flag to view + TPhoneCmdParamBoolean holdFlag; + holdFlag.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag ); + + } + // ----------------------------------------------------------- // CPhoneConference::HandleConnectedConferenceL // ----------------------------------------------------------- @@ -455,8 +583,8 @@ "CPhoneConference::HandleConnectedConferenceL()"); // Update call state TPhoneCmdParamCallHeaderData callHeaderParam; - callHeaderParam.SetCallState( EPEStateConnectedConference ); - + callHeaderParam.SetCallState( EPEStateConnected ); + TBuf conferenceText( KNullDesC ); TInt callLabelId = CPhoneMainResourceResolver::Instance()-> ResolveResourceID( EPhoneCLIConferenceCall ); @@ -477,15 +605,31 @@ if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { - SendGlobalInfoNoteL( EPhoneInformationConferenceActiveted, ETrue ); + SendGlobalInfoNoteL( EPhoneInformationConferenceActiveted ); } - SetTouchPaneButtons( EPhoneConferenceButtons ); + SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate ); UpdateInCallCbaL(); } // ----------------------------------------------------------- +// CPhoneConference::OpenDropParticipantSelectionL +// ----------------------------------------------------------- +// +void CPhoneConference::OpenDropParticipantSelectionL() + { + __LOGMETHODSTARTEND( EPhoneUIStates, + "CPhoneConference::OpenDropParticipantSelectionL()"); + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewOpenConferenceList, &booleanParam ); + + iCbaManager->SetCbaL( EPhoneDropParticipantCBA ); + } + +// ----------------------------------------------------------- // CPhoneConference::DropSelectedParticipantL // ----------------------------------------------------------- // @@ -509,6 +653,22 @@ } // ----------------------------------------------------------- +// CPhoneConference::OpenPrivateSelectionL +// ----------------------------------------------------------- +// +void CPhoneConference::OpenPrivateSelectionL() + { + __LOGMETHODSTARTEND( EPhoneUIStates, + "CPhoneConference::OpenPrivateSelectionL()"); + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewOpenConferenceList, &booleanParam ); + + iCbaManager->SetCbaL( EPhonePrivateParticipantCBA ); + } + +// ----------------------------------------------------------- // CPhoneConference::PrivateSelectedParticipantL // ----------------------------------------------------------- // @@ -531,6 +691,7 @@ // Update call view BeginUiUpdateLC(); + CloseSelectionListL(); SetTouchPaneButtons( EPhoneConferenceButtons ); EndUiUpdate(); @@ -551,11 +712,34 @@ if ( IsNumberEntryUsedL() ) { - // Show the number entry if it exists - SetNumberEntryVisibilityL(ETrue); - } - else if ( !TopAppIsDisplayedL() ) + if ( NeedToReturnToForegroundAppL() ) + { + // Return phone to the background if menu application is needed to foreground. + iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground ); + + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility ); + + // Set Number Entry CBA + iCbaManager->SetCbaL( EPhoneNumberAcqCBA ); + } + else + { + // Show the number entry if it exists + SetNumberEntryVisibilityL(ETrue); + + // Close dtmf dialer when call is disconnected. + if ( iOnScreenDialer && IsDTMFEditorVisibleL() ) + { + CloseDTMFEditorL(); + // Display idle screen and update CBAs + DisplayIdleScreenL(); + } + } + } + else if ( !TopAppIsDisplayedL() || NeedToReturnToForegroundAppL() ) { + // Close menu bar, if it is displayed + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); // Continue displaying current app but set up the // idle screen in the background @@ -563,6 +747,9 @@ } else { + // Close menu bar, if it is displayed + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + // Display idle screen DisplayIdleScreenL(); } @@ -583,12 +770,10 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::MakeStateTransitionToSingleL()"); + // Close menu bar, if it is displayed + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); - if ( IsNumberEntryUsedL() ) - { - // Show the number entry if it exists - SetNumberEntryVisibilityL(ETrue); - } + SetTouchPaneButtons( EPhoneIncallButtons ); // Go to single state @@ -604,12 +789,9 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::MakeStateTransitionToTwoSinglesL()"); + // Close menu bar, if it is displayed + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); - if ( IsNumberEntryUsedL() ) - { - // Show the number entry if it exists - SetNumberEntryVisibilityL(ETrue); - } SetTouchPaneButtons( EPhoneTwoSinglesButtons ); @@ -621,6 +803,21 @@ } // ----------------------------------------------------------- +// CPhoneConference::CloseSelectionListL +// ----------------------------------------------------------- +// +void CPhoneConference::CloseSelectionListL() + { + __LOGMETHODSTARTEND( EPhoneUIStates, + "CPhoneConference::CloseSelectionListL()"); + // Close conference list + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewOpenConferenceList, &booleanParam ); + } + +// ----------------------------------------------------------- // CPhoneConference::ToggleHold // ----------------------------------------------------------- // @@ -628,78 +825,76 @@ { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::ToggleHoldL()"); - - TPECallControlCaps callControlCaps = - iStateMachine->PhoneEngineInfo()->CallControlCaps( KConferenceCallId ); + TPhoneCmdParamBoolean hold; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetHoldFlag, &hold ); - if ( callControlCaps & MCCECallObserver::ECCECapsHold ) + if( hold.Boolean() ) { - iStateMachine->SetCallId( KConferenceCallId ); iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageHold ); - } - else if ( callControlCaps & MCCECallObserver::ECCECapsResume ) - { - iStateMachine->SetCallId( KConferenceCallId ); - iStateMachine->SendPhoneEngineMessage( - CPEPhoneModelIF::EPEMessageResume ); + CPEPhoneModelIF::EPEMessageResumeConference ); } else { - SendGlobalInfoNoteL( EPhoneNoteTextNotAllowed, ETrue ); + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageHoldConference ); } } // ----------------------------------------------------------- -// CPhoneConference::HandleDiallingL +// CPhoneConference::HandleDialingL // ----------------------------------------------------------- // -void CPhoneConference::HandleDiallingL( TInt aCallId ) +void CPhoneConference::HandleDialingL( TInt aCallId ) { __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneConference::HandleDiallingL()"); - BeginUiUpdateLC(); - - SetNumberEntryVisibilityL(EFalse); + "CPhoneConference::HandleDialingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + CloseSelectionListL(); // Display call setup DisplayCallSetupL( aCallId ); - - // Conference is understood as single call in buttons enumerations. - SetTouchPaneButtons(EPhoneCallSetupAndSingleButtons); - - EndUiUpdate(); - - // Set Call Setup CBA - UpdateCbaL( EPhoneCallHandlingCallSetupCBA ); - + // Go to conference and call setup state iStateMachine->ChangeState( EPhoneStateConferenceAndCallSetup ); } // ----------------------------------------------------------- -// CPhoneConference::DisplayCallSetupL +// CPhoneConference::DoStateSpecificCallSetUpDefinitionsL // ----------------------------------------------------------- // -void CPhoneConference::DisplayCallSetupL( TInt aCallId ) +EXPORT_C void CPhoneConference::DoStateSpecificCallSetUpDefinitionsL() + { + // Show incoming call buttons + SetTouchPaneButtons( EPhoneCallSetupAndSingleButtons ); + } + +// --------------------------------------------------------- +// CPhoneConference::CallFromNewCallQueryL +// --------------------------------------------------------- +// +void CPhoneConference::CallFromNewCallQueryL() { __LOGMETHODSTARTEND( EPhoneUIStates, - "CPhoneConference::DisplayCallSetupL()"); - - // Remove dialogs if necessary - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - - // Capture keys when the phone is dialling - CaptureKeysDuringCallNotificationL( ETrue ); + "CPhoneConference::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 ); - // Bring Phone app in the foreground - TPhoneCmdParamInteger uidParam; - uidParam.SetInteger( KUidPhoneApplication.iUid ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground, - &uidParam ); + // Store the phone number + iStateMachine->PhoneEngineInfo()->SetPhoneNumber( ptr ); - // Display call setup header - DisplayHeaderForOutgoingCallL( aCallId ); + // clean up stack + CleanupStack::PopAndDestroy( content ); + + // Dial number + DialVoiceCallL(); } // ----------------------------------------------------------- @@ -711,25 +906,44 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::HandleIncomingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + + IsNumberEntryUsedL() ? + BeginTransEffectLC( ECallUiAppear ) : + BeginTransEffectLC( ENumberEntryOpen ); BeginUiUpdateLC(); - + + // Hide the number entry if it exists + if ( IsNumberEntryUsedL() ) + { + SetNumberEntryVisibilityL( EFalse ); + } + + // Indicate that the menu application on foreground needs to be sent back to the foreground + // after call is ended. + SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() ); + TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); // Get allow waiting call header param value. AllowShowingOfWaitingCallHeaderL( dialerParam ); + + CloseSelectionListL(); + // Close fast swap window if it's displayed - CEikonEnv::Static()->DismissTaskList(); - - // Check if HW Keys or Call UI should be disabled - CheckDisableHWKeysAndCallUIL(); + EikonEnv()->DismissTaskList(); + + SetTouchPaneButtons( EPhoneWaitingCallButtons ); // Display incoming call DisplayIncomingCallL( aCallId, dialerParam ); - - SetTouchPaneButtons( EPhoneWaitingCallButtons ); EndUiUpdate(); + EndTransEffect(); // Go to incoming state UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); @@ -742,31 +956,19 @@ // void CPhoneConference::DisplayIncomingCallL( TInt aCallId, - const TPhoneCmdParamBoolean aCommandParam ) + const TPhoneCmdParamBoolean /*aCommandParam*/ ) { __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::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 ) ) - { - CallWaitingNoteL( aCallId ); - } - else - { - // Remove any phone dialogs if they are displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - } + // 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 - TPhoneCmdParamBoolean booleanParam; - booleanParam.SetBoolean( !TopAppIsDisplayedL() ); - iViewCommandHandle->ExecuteCommandL( - EPhoneViewSetNeedToSendToBackgroundStatus, - &booleanParam ); + SetNeedToReturnToForegroundAppStatusL( !TopAppIsDisplayedL() ); // Bring Phone app in the foreground TPhoneCmdParamInteger uidParam; @@ -808,6 +1010,7 @@ UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA ); iStateMachine->ChangeState( EPhoneStateConferenceAndSingle ); SetTouchPaneButtons( EPhoneConferenceAndSingleButtons ); + SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate ); } else { @@ -815,6 +1018,73 @@ } EndUiUpdate(); } + +// ----------------------------------------------------------- +// CPhoneConference::OpenParticipantsListL +// ----------------------------------------------------------- +// +void CPhoneConference::OpenParticipantsListL() + { + BeginUiUpdateLC(); + + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( ETrue ); + + iViewCommandHandle->ExecuteCommandL( EPhoneViewOpenConferenceList, + &booleanParam ); + + SetTouchPaneButtons( EPhoneParticipantListButtons ); + + EndUiUpdate(); + + iCbaManager->SetCbaL( EPhoneParticipantListCBA ); + + // Find out is conference held or not + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallId( KConferenceCallId ); + iViewCommandHandle->HandleCommandL( EPhoneViewGetCallState, + &callStateData ); + + if( callStateData.CallState() == EPEStateHeld ) + { + //set Private button to Dimmed. + SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate ); + } + else + { + //set Private button to UnDimmed. + SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate ); + } + + } + +// ----------------------------------------------------------- +// CPhoneConference::IsConferenceBubbleInSelectionMode +// ----------------------------------------------------------- +// +TBool CPhoneConference::IsConferenceBubbleInSelectionMode() const + { + TPhoneCmdParamBoolean booleanParam; + + iViewCommandHandle->ExecuteCommand( + EPhoneViewGetIsConferenceInSelectionMode, &booleanParam ); + + return booleanParam.Boolean(); + } + +// --------------------------------------------------------- +// CPhoneState::HandleCreateNumberEntryL +// --------------------------------------------------------- +// +void CPhoneConference::HandleCreateNumberEntryL( const TKeyEvent& aKeyEvent, + TEventCode aEventCode ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneConference::HandleCreateNumberEntryL() "); + if ( !IsConferenceBubbleInSelectionMode() ) + { + CPhoneGsmInCall::HandleCreateNumberEntryL( aKeyEvent,aEventCode ); + } + } // ----------------------------------------------------------- // CPhoneConference::UpdateConferenceSecurityStatusL @@ -841,4 +1111,35 @@ } } +// ----------------------------------------------------------- +// CPhoneConference::DisconnectCallL +// ----------------------------------------------------------- +// +void CPhoneConference::DisconnectCallL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConference::DisconnectCallL( ) "); + // Fetch active call's id from view + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallState( EPEStateConnected ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + + if( callStateData.CallId() == KErrNotFound ) + { + // No connected call, find the hold call + callStateData.SetCallState( EPEStateHeld ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + } + + if( callStateData.CallId() > KErrNotFound ) + { + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageHangUpConference ); + } + else + { + CPhoneState::DisconnectCallL(); + } + } // End of File