--- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Mon Jun 21 15:39:45 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Thu Jul 15 18:38:16 2010 +0300
@@ -76,7 +76,8 @@
MPhoneStateMachine* aStateMachine,
MPhoneViewCommandHandle* aViewCommandHandle,
MPhoneCustomization* aCustomization ) :
- CPhoneState( aStateMachine, aViewCommandHandle, aCustomization )
+ CPhoneState( aStateMachine, aViewCommandHandle, aCustomization ),
+ iBubbleInitialized( EFalse )
{
}
@@ -480,32 +481,45 @@
EXPORT_C void CPhoneStateIdle::HandleDialingL( TInt aCallId )
{
__LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleDialingL( ) ");
+ if( IsBubbleInitialized() )
+ {
+ UpdateCallBubbleL( aCallId );
+ }
+ else
+ {
+ ShowCallHandlingViewL( aCallId );
+ }
+ ChangeTo( EPhoneStateCallSetup );
+ }
+// -----------------------------------------------------------
+// CPhoneStateIdle::ShowCallHandlingViewL
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::ShowCallHandlingViewL( TInt aCallId )
+ {
+ __LOGMETHODSTARTEND(EPhoneControl,
+ "CPhoneStateIdle::ShowCallHandlingViewL( ) ");
BeginUiUpdateLC();
-
SetNumberEntryVisibilityL(EFalse);
// Show call setup buttons
SetTouchPaneButtons( EPhoneCallSetupButtons );
- SetTouchPaneButtonDisabled( EPhoneInCallCmdHold );
-
+ SetTouchPaneButtonDisabled( EPhoneInCallCmdHold );
+
// Display call setup
- DisplayCallSetupL( aCallId );
-
+ DisplayCallSetupL( aCallId );
EndUiUpdate();
// Remove any phone dialogs if they are displayed
iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-
+
// Go to call setup state
iCbaManager->UpdateCbaL( EPhoneCallHandlingCallSetupCBA );
SetToolbarDimming( ETrue );
-
SetToolbarButtonLoudspeakerEnabled();
SetToolbarButtonHandsetEnabled();
-
- ChangeTo( EPhoneStateCallSetup );
}
// -----------------------------------------------------------
@@ -831,12 +845,19 @@
// Set Phone as the top application
iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication,
&uidParam );
-
- if ( !UpdateCallBubbleL( aCallId ) )
+
+ if( !IsBubbleInitialized() )
{
// Create and Display call setup header if update was not done.
DisplayHeaderForOutgoingCallL( aCallId );
}
+ else
+ {
+ /* Create and Display initializing call header, difference
+ to DisplayHeaderForOutgoingCallL is that this doesnt load
+ CLI information to header.*/
+ DisplayHeaderForInitializingCallL( aCallId );
+ }
}
// -----------------------------------------------------------
@@ -884,40 +905,7 @@
iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageCheckEmergencyNumber );
if ( IsBubbleInitialized() )
{
- BeginUiUpdateLC();
-
- SetNumberEntryVisibilityL(EFalse);
-
- // Show call setup buttons
- SetTouchPaneButtons( EPhoneCallSetupButtons );
-
- // Close menu bar, if it is displayed
- iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
-
- // Capture keys when the phone is dialling
- CaptureKeysDuringCallNotificationL( ETrue );
-
- // Bring Phone app in the foreground
- TPhoneCmdParamInteger uidParam;
- uidParam.SetInteger( KUidPhoneApplication.iUid );
- iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground,
- &uidParam );
-
- // Set Phone as the top application
- iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication,
- &uidParam );
-
- DisplayHeaderForInitializingCallL( aCallId );
-
- EndUiUpdate();
-
- // Remove any phone dialogs if they are displayed
- iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
-
- // Go to call setup state
- iCbaManager->UpdateCbaL( EPhoneCallHandlingCallSetupCBA );
-
- SetToolbarDimming( ETrue );
+ ShowCallHandlingViewL( aCallId );
}
}
@@ -1032,12 +1020,11 @@
// -----------------------------------------------------------
// CPhoneStateIdle::SpeedDialL
// -----------------------------------------------------------
-//
+//
EXPORT_C void CPhoneStateIdle::SpeedDialL( const TUint& aDigit,
TDialInitiationMethod aDialMethod )
{
__LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::SpeedDialL( ) ");
-
iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
TPhoneCmdParamSpeedDial speedDialParam;
@@ -1050,29 +1037,43 @@
if ( NULL != phoneNumber && KNullDesC() != *phoneNumber )
{
DialL( *phoneNumber, speedDialParam.NumberType(), aDialMethod );
-
- if ( IsNumberEntryUsedL() )
- {
- iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
-
- // Set Idle background, if still idle
- if ( iStateMachine->State() == this )
- {
- SetupIdleScreenInBackgroundL();
- }
- }
+ RemoveNumberEntryAndSetIdleToBackgroundIfNeededL();
}
else
{
// User cancelled dialog or didn't give a valid number
SpeedDialCanceledL( aDigit );
}
-
CleanupStack::PopAndDestroy( phoneNumber );
}
// -----------------------------------------------------------
-// CPhoneStateIdle:SpeedDialCanceledL
+// CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL
+// -----------------------------------------------------------
+//
+void CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL()
+ {
+ __LOGMETHODSTARTEND(EPhoneControl,
+ "CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL( ) ");
+ if ( IsNumberEntryUsedL() )
+ {
+ /*NE should be removed because if speeddial dial is interupted during
+ call setup phone should not return to NE/Dialler view.*/
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry );
+
+ /*It might be possible that some async operation was ongoing and
+ state has already in that case do not set idle to background. If
+ there is initialized call then do not set idle to background.*/
+ if ( ( iStateMachine->State() == this ) &&
+ ( !IsBubbleInitialized() ) )
+ {
+ SetupIdleScreenInBackgroundL();
+ }
+ }
+ }
+
+// -----------------------------------------------------------
+// CPhoneStateIdle::SpeedDialCanceledL
// -----------------------------------------------------------
//
EXPORT_C void CPhoneStateIdle::SpeedDialCanceledL( const TUint& aDigit )
@@ -1609,8 +1610,9 @@
__PHONELOG1( EBasic, EPhoneControl,
"PhoneUIControl: CPhoneStateIdle::HandleErrorL - aErrorInfo.iCallId =%d ",
aErrorInfo.iCallId );
- if( ( ECCPErrorNone != aErrorInfo.iErrorCode ) &&
- IsBubbleInitialized() )
+ if( ( KErrNotFound < aErrorInfo.iCallId ) &&
+ ( ECCPErrorNone != aErrorInfo.iErrorCode ) &&
+ IsBubbleInitialized() )
{
HandleInitializingCallErrorL( aErrorInfo.iCallId );
SetBubbleInitialized( EFalse );