--- a/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp Tue Aug 31 15:14:29 2010 +0300
+++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp Wed Sep 01 12:30:10 2010 +0100
@@ -57,6 +57,16 @@
//
CPhoneConferenceAndSingle::~CPhoneConferenceAndSingle()
{
+ // 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 ) );
+ }
}
// -----------------------------------------------------------
@@ -68,6 +78,7 @@
void CPhoneConferenceAndSingle::ConstructL()
{
CPhoneConference::ConstructL();
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
}
// -----------------------------------------------------------
@@ -118,13 +129,13 @@
HandleHeldL( aCallId );
break;
- case MEngineMonitor::EPEMessageInValidEmergencyNumber:
- SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed, ETrue );
+ case MEngineMonitor::EPEMessageInValidEmergencyNumber:
+ SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed );
break;
case MEngineMonitor::EPEMessageValidEmergencyNumber:
DialVoiceCallL();
- break;
+ break;
case MEngineMonitor::EPEMessageAddedConferenceMember:
HandleAddedConferenceMemberL( aCallId );
@@ -155,6 +166,7 @@
case EAknSoftkeyCancel:
commandStatus = CPhoneConference::HandleCommandL( aCommand );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
SetTouchPaneButtons( EPhoneConferenceAndHeldSingleButtons );
break;
@@ -164,6 +176,8 @@
break;
case EPhoneInCallCmdParticipants:
+ commandStatus = CPhoneConference::HandleCommandL( aCommand );
+ SetTouchPaneButtonDisabled( EPhoneInCallCmdPrivate );
break;
default:
@@ -175,6 +189,116 @@
}
// -----------------------------------------------------------
+// CPhoneConferenceAndSingle::OpenMenuBarL
+// -----------------------------------------------------------
+//
+void CPhoneConferenceAndSingle::OpenMenuBarL()
+ {
+ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::OpenMenuBarL");
+
+ // Set Conference And Single specific flag to view
+ TPhoneCmdParamBoolean conferenceAndSingleFlag;
+ conferenceAndSingleFlag.SetBoolean( ETrue );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag,
+ &conferenceAndSingleFlag );
+
+ // Set specific flag to view so that DTMF menu item available
+ TPhoneCmdParamBoolean dtmfSendFlag;
+ dtmfSendFlag.SetBoolean( ETrue );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag,
+ &dtmfSendFlag );
+
+ TPhoneViewResponseId response;
+ TPhoneCmdParamCallStateData callStateData;
+ TPhoneCmdParamBoolean booleaParam;
+ TInt heldCallId( KErrNotFound );
+ TInt connectedCallId( KErrNotFound );
+
+ // Fetch active call's id from view
+ callStateData.SetCallState( EPEStateConnected );
+ response = iViewCommandHandle->HandleCommandL(
+ EPhoneViewGetCallIdByState, &callStateData );
+ if( response != EPhoneViewResponseSuccess )
+ {
+ // Unsuccesfull fetch - do nothing
+ return;
+ }
+ connectedCallId = callStateData.CallId();
+
+ // Fetch held call's id from view
+ callStateData.SetCallState( EPEStateHeld );
+ response = iViewCommandHandle->HandleCommandL(
+ EPhoneViewGetCallIdByState, &callStateData );
+ if( response != EPhoneViewResponseSuccess )
+ {
+ // Unsuccesfull fetch - do nothing
+ return;
+ }
+ heldCallId = callStateData.CallId();
+
+ // Open the correct menubar according which call is active
+ TInt resourceId;
+ if( connectedCallId == KConferenceCallId )
+ {
+ if ( IsNumberEntryVisibleL() )
+ {
+ resourceId = EPhoneConfAndHeldCallMenubarWithNumberEntry;
+ }
+ else if ( IsConferenceBubbleInSelectionMode() )
+ {
+ resourceId = EPhoneConfCallParticipantsDropMenubar;
+ }
+ else
+ {
+ resourceId = EPhoneConfAndHeldCallMenubar;
+ }
+ }
+ else
+ {
+ if ( IsNumberEntryVisibleL() )
+ {
+ resourceId = EPhoneActiveAndHeldConfMenubarWithNumberEntry;
+ }
+ else if ( IsConferenceBubbleInSelectionMode() )
+ {
+ resourceId = EPhoneConfCallParticipantsDropMenubar;
+ }
+ else
+ {
+ resourceId = EPhoneActiveAndHeldConfMenubar;
+ }
+ }
+
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
+
+ // Check that calls are the same type (f.ex. both are CS calls)
+ booleaParam.SetBoolean(
+ heldCallId != KErrNotFound && connectedCallId != KErrNotFound &&
+ iStateMachine->PhoneEngineInfo()->CallType( heldCallId ) !=
+ iStateMachine->PhoneEngineInfo()->CallType( connectedCallId ));
+
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConfrenceOptionsFlag,
+ &booleaParam );
+
+ if ( iOnScreenDialer && IsDTMFEditorVisibleL() )
+ {
+ resourceId = EPhoneDtmfDialerMenubar;
+ }
+ else if ( iOnScreenDialer && IsCustomizedDialerVisibleL() )
+ {
+ resourceId = CustomizedDialerMenuResourceIdL();
+ }
+
+ TPhoneCmdParamInteger integerParam;
+ integerParam.SetInteger(
+ CPhoneMainResourceResolver::Instance()->
+ ResolveResourceID( resourceId ) );
+
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen,
+ &integerParam );
+ }
+
+// -----------------------------------------------------------
// CPhoneConferenceAndSingle::HandleConnectedConferenceL
// -----------------------------------------------------------
//
@@ -183,7 +307,7 @@
__LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::HandleConnectedConferenceL");
// Update call state
TPhoneCmdParamCallHeaderData callHeaderParam;
- callHeaderParam.SetCallState( EPEStateConnectedConference );
+ callHeaderParam.SetCallState( EPEStateConnected );
TBuf<KPhoneCallHeaderLabelMaxLength> conferenceText( KNullDesC );
TInt callLabelId = CPhoneMainResourceResolver::Instance()->
@@ -205,7 +329,7 @@
EPhoneViewUpdateBubble, KConferenceCallId, &callHeaderParam );
SetTouchPaneButtons( EPhoneConferenceAndHeldSingleButtons );
- UpdateInCallCbaL();
+
EndUiUpdate();
}
@@ -220,7 +344,7 @@
{
__LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::HandleHeldConferenceL");
TPhoneCmdParamCallHeaderData callHeaderParam;
- callHeaderParam.SetCallState( EPEStateHeldConference );
+ callHeaderParam.SetCallState( EPEStateHeld );
TInt callLabelId;
TBuf<KPhoneCallHeaderLabelMaxLength> labelText( KNullDesC );
@@ -232,6 +356,8 @@
callLabelId,
CCoeEnv::Static() );
callHeaderParam.SetLabelText( labelText );
+
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
BeginUiUpdateLC();
@@ -250,14 +376,15 @@
{
__LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingle::HandleConnectedL");
+ UpdateInCallCbaL();
+
+
// Display connected bubble
TPhoneCmdParamCallHeaderData callHeaderParam;
callHeaderParam.SetCallState( EPEStateConnected );
iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId,
&callHeaderParam );
-
- UpdateInCallCbaL();
- SetTouchPaneButtons( EPhoneConferenceButtons );
+
}
// -----------------------------------------------------------
@@ -282,9 +409,7 @@
callHeaderParam.SetLabelText( labelText );
iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId,
- &callHeaderParam );
-
- SetTouchPaneButtons( EPhoneConferenceButtons );
+ &callHeaderParam );
}
// -----------------------------------------------------------
@@ -303,9 +428,15 @@
UpdateConferenceSecurityStatusL( aCallId );
SetTouchPaneButtons( EPhoneConferenceButtons );
+ SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate );
EndUiUpdate();
+ TPhoneCmdParamBoolean conferenceAndSingleFlag;
+ conferenceAndSingleFlag.SetBoolean( EFalse );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag,
+ &conferenceAndSingleFlag );
+
UpdateCbaL( EPhoneCallHandlingInCallCBA );
iStateMachine->ChangeState( EPhoneStateConference );
}
@@ -328,9 +459,17 @@
void CPhoneConferenceAndSingle::HandleIncomingL( TInt aCallId )
{
__LOGMETHODSTARTEND( EPhoneUIStates,
- "CPhoneConferenceAndSingle::HandleIncomingL");
+ "CPhoneConferenceAndSingle::HandleIncomingL");
+ IsNumberEntryUsedL() ?
+ BeginTransEffectLC( ECallUiAppear ) :
+ BeginTransEffectLC( ENumberEntryOpen );
+ BeginUiUpdateLC();
- BeginUiUpdateLC();
+ // Hide the number entry if it exists
+ if ( IsNumberEntryUsedL() )
+ {
+ SetNumberEntryVisibilityL( EFalse );
+ }
TPhoneCmdParamBoolean dialerParam;
dialerParam.SetBoolean( ETrue );
@@ -338,21 +477,31 @@
// Get allow waiting call header param value.
AllowShowingOfWaitingCallHeaderL( dialerParam );
+ // Close conference list
+ TPhoneCmdParamBoolean booleanParam;
+ booleanParam.SetBoolean( EFalse );
+ iViewCommandHandle->ExecuteCommandL(
+ EPhoneViewOpenConferenceList, &booleanParam );
+
iViewCommandHandle->ExecuteCommandL( EPhoneViewCloseFSW );
- // Check if HW Keys or Call UI should be disabled
- CheckDisableHWKeysAndCallUIL();
-
+ // Set touch controls
+ SetTouchPaneButtonDisabled( EPhoneCallComingCmdAnswer );
+
+ SetTouchPaneButtons( EPhoneWaitingCallButtons );
+
// Display incoming call
DisplayIncomingCallL( aCallId, dialerParam );
- // Set touch controls
- SetTouchPaneButtons( EPhoneWaitingCallButtons );
-
EndUiUpdate();
+ EndTransEffect();
+ TPhoneCmdParamBoolean conferenceAndSingleFlag;
+ conferenceAndSingleFlag.SetBoolean( EFalse );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag,
+ &conferenceAndSingleFlag );
// Go to Conference And Single And Waiting state
- UpdateCbaL( EPhoneCallHandlingIncomingRejectCBA );
+ UpdateCbaL( EPhoneCallHandlingCallWaitingCBA );
iStateMachine->ChangeState( EPhoneStateConferenceAndSingleAndWaiting );
}
@@ -363,7 +512,13 @@
void CPhoneConferenceAndSingle::HandleIdleL( TInt aCallId )
{
__LOGMETHODSTARTEND( EPhoneUIStates,
- "CPhoneConferenceAndSingle::HandleIdleL");
+ "CPhoneConferenceAndSingle::HandleIdleL");
+
+ // If dialler is not open then close menu bar.
+ if ( !IsNumberEntryUsedL() )
+ {
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+ }
TPhoneCmdParamBoolean conferenceExistsForCallId;
iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCallExistsInConference,
@@ -374,6 +529,8 @@
// Remove conference member from conference bubble
iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveFromConference,
aCallId );
+
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateMaxConfMemberFlag );
}
else
{
@@ -381,9 +538,24 @@
BeginUiUpdateLC();
iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
- SetTouchPaneButtons( EPhoneConferenceButtons );
+ TPhoneCmdParamBoolean conferenceAndSingleFlag;
+ conferenceAndSingleFlag.SetBoolean( EFalse );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetConferenceAndSingleFlag,
+ &conferenceAndSingleFlag );
- UpdateCbaL( EPhoneCallHandlingInCallCBA );
+ TPhoneCmdParamBoolean participantsVisibleFlag;
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewGetConferenceListVisibleFlag,
+ &participantsVisibleFlag );
+
+ // if participants list is visible - do not change buttons or cba
+ if( !participantsVisibleFlag.Boolean() )
+ {
+ // Go to Conference state
+ SetTouchPaneButtons( EPhoneConferenceButtons );
+ SetTouchPaneButtonEnabled( EPhoneInCallCmdPrivate );
+
+ UpdateCbaL( EPhoneCallHandlingInCallCBA );
+ }
EndUiUpdate();
@@ -405,19 +577,19 @@
TPhoneCmdParamInteger intParam;
iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCountOfActiveCalls,
- &intParam );
-
+ &intParam );
+
switch( intParam.Integer() )
- {
- case EOneActiveCall:
- MakeStateTransitionToSingleL();
- break;
-
- case ETwoActiveCalls: // Fall through
- default:
- MakeStateTransitionToTwoSinglesL();
- break;
- }
+ {
+ case EOneActiveCall:
+ MakeStateTransitionToSingleL();
+ break;
+
+ case ETwoActiveCalls: // Fall through
+ default:
+ MakeStateTransitionToTwoSinglesL();
+ break;
+ }
}
// --------------------------------------------------------------
@@ -435,15 +607,15 @@
// send-key
case EKeyYes:
if( IsNumberEntryVisibleL() )
- {
+ {
HandleSendL();
}
- else
- {
+ else
+ {
// Number entry is below so swap the call
iStateMachine->SendPhoneEngineMessage(
- CPEPhoneModelIF::EPEMessageSwap );
- }
+ CPEPhoneModelIF::EPEMessageSwap );
+ }
break;
default:
@@ -484,8 +656,32 @@
{
iStateMachine->SendPhoneEngineMessage(
MPEPhoneModel::EPEMessageCheckEmergencyNumber );
- }
+ }
CleanupStack::PopAndDestroy( phoneNumber );
}
+// -----------------------------------------------------------
+// CPhoneConferenceAndSingle::DisconnectCallL
+// -----------------------------------------------------------
+//
+void CPhoneConferenceAndSingle::DisconnectCallL()
+ {
+ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingle::DisconnectCallL( ) ");
+ // Fetch active call's id from view
+ TPhoneCmdParamCallStateData callStateData;
+ callStateData.SetCallState( EPEStateConnected );
+ iViewCommandHandle->HandleCommandL(
+ EPhoneViewGetCallIdByState, &callStateData );
+
+ if( callStateData.CallId() > KErrNotFound && callStateData.CallId() == KConferenceCallId )
+ {
+ iStateMachine->SendPhoneEngineMessage(
+ CPEPhoneModelIF::EPEMessageHangUpConference );
+ }
+ else
+ {
+ CPhoneState::DisconnectCallL();
+ }
+ }
+
// End of File