diff -r 41a7f70b3818 -r 5266b1f337bd phoneapp/phoneuicontrol/src/cphonestate.cpp --- a/phoneapp/phoneuicontrol/src/cphonestate.cpp Tue Aug 31 15:14:29 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonestate.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -32,20 +32,23 @@ #include #include #include +#include #include #include #include #include #include -#include +#include #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -65,10 +68,11 @@ #include "tphonecmdparamcallheaderdata.h" #include "tphonecmdparamincallindicatordata.h" #include "tphonecmdparamnote.h" -#include "tphonecmdparamkeycapture.h" +#include "tphonecmdparamKeycapture.h" #include "tphonecmdparamglobalnote.h" #include "tphonecmdparamquery.h" #include "tphonecmdparamstring.h" +#include "tphonecmdparammessageeditor.h" #include "tphonecmdparamcallstatedata.h" #include "tphonecmdparambitmap.h" #include "tphonecmdparamaudiooutput.h" @@ -101,10 +105,9 @@ #include "cphonecontinueemergencycallcommand.h" #include "cphonecallheadermanager.h" #include "cphonenumberentrymanager.h" -#include "tphonecmdparamsfidata.h" -#include "mphonestorage.h" -#include "phoneconstants.h" -#include "cphoneclearblacklist.h" +#include "mphonesecuritymodeobserver.h" +#include "easydialingcommands.hrh" + // ================= MEMBER FUNCTIONS ======================= @@ -114,8 +117,7 @@ MPhoneCustomization* aCustomization) : iStateMachine( aStateMachine ), iViewCommandHandle( aViewCommandHandle ), - iCustomization( aCustomization ), - iEnv( *CEikonEnv::Static() ) + iCustomization( aCustomization ) { // Need to get current SimState for inherited classis iPreviousSimState = SimState(); @@ -189,7 +191,6 @@ HandleAudioOutputChangedL(); // Go to current state implementation iCbaManager->UpdateInCallCbaL(); - SetTouchPaneButtons(0); break; case MEngineMonitor::EPEMessageAvailableAudioOutputsChanged: @@ -198,7 +199,6 @@ { // Go to current state implementation iCbaManager->UpdateInCallCbaL(); - SetTouchPaneButtons(0); } break; @@ -211,23 +211,34 @@ break; case MEngineMonitor::EPEMessageCallWaiting: - // No need to send waiting notification for user. - //SendGlobalInfoNoteL( EPhoneWaitingText, ETrue ); + SendGlobalInfoNoteL( EPhoneWaitingText ); break; case MEngineMonitor::EPEMessageProfileChanged: { + TPhoneCmdParamBoolean keypadVolumeParam; + if ( iStateMachine->PhoneEngineInfo()->KeypadVolume() == 0 ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewKeypadAudioDisabled ); + } + else + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewKeypadAudioEnabled ); + } + UpdateProfileDisplayL(); } break; case MEngineMonitor::EPEMessageRemoteTerminated: + // Close menu bar, if it is displayed, for call ending note + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); /* Flow through */ case MEngineMonitor::EPEMessageDisconnecting: HandleDisconnectingL( aCallId ); break; case MEngineMonitor::EPEMessageTransferDone: - SendGlobalInfoNoteL( EPhoneInCallTransferred, ETrue ); + SendGlobalInfoNoteL( EPhoneInCallTransferred ); break; case MEngineMonitor::EPEMessageInitiatedEmergencyCall: @@ -238,15 +249,22 @@ HandleInitiatedEmergencyWhileActiveVideoL(); break; - case MEngineMonitor::EPEMessageCallSecureStatusChanged: - HandleCallSecureStatusChangeL( aCallId ); - - if ( iCustomization ) - { - iCustomization->HandlePhoneEngineMessageL( aMessage, - aCallId ); - } - break; + case MEngineMonitor::EPEMessageShowIMEI: + // Stop playing DTMF tone + iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); + HandleShowImeiL(); + break; + + case MEngineMonitor::EPEMessageCallSecureStatusChanged: + HandleCallSecureStatusChangeL( aCallId ); + ForwardPEMessageToPhoneCustomizationL( aMessage, aCallId ); + break; + + case MEngineMonitor::EPEMessageActivateWarrantyMode: + // Stop playing DTMF tone + iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); + HandleShowLifeTimerL(); + break; case MEngineMonitor::EPEMessageIssuingUSSDRequest: { @@ -345,16 +363,22 @@ HandleCugInUseNoteL(); break; + // *#2873# + case MEngineMonitor::EPEMessageBTDebugMode: + accessoryBtHandler = CPhoneAccessoryBTHandler::NewLC( + iViewCommandHandle, iStateMachine, this ); + accessoryBtHandler->SetBTDebugModeL(); + CleanupStack::PopAndDestroy( accessoryBtHandler ); + break; + + case MEngineMonitor::EPEMessageInitiatedMoCall: + // Message should be only handled by CPhoneStateIdle, + // if state is something else than idle then do nothing. + break; + default: - TBool handled( EFalse ); - - if ( iCustomization ) - { - handled = iCustomization->HandlePhoneEngineMessageL( - aMessage, aCallId ); - } - + handled = ForwardPEMessageToPhoneCustomizationL( aMessage, aCallId ); if ( EFalse == handled ) { MPhoneMediatorMessage* mediatorMessage = CPhoneMediatorFactory::Instance()->MediatorMessage( aMessage, aCallId ); @@ -387,8 +411,6 @@ booleanParam.SetBoolean( audioMute ); iViewCommandHandle->ExecuteCommandL( EPhoneViewActivateMuteUIChanges, &booleanParam ); - - SetTouchPaneButtons(0); } // ----------------------------------------------------------- @@ -432,7 +454,8 @@ CPhoneBtaaDisconnectHandler::InstanceL()->HandleConnectionLostL(); } else if ( audioOutput == EPEBTAudioAccessory && - previousOutput != EPEBTAudioAccessory && + previousOutput > EPENotActive && + previousOutput != EPEBTAudioAccessory && btAvailable ) { CPhoneAccessoryBTHandler* bt = CPhoneAccessoryBTHandler::NewLC( @@ -448,7 +471,7 @@ else if ( RouteParameters.iShowNote && audioOutput == EPELoudspeaker ) { CAknKeySoundSystem* keySounds = - static_cast( iEnv.EikAppUi() )->KeySounds(); + static_cast( EikonEnv()->EikAppUi() )->KeySounds(); keySounds->PlaySound( EAvkonSIDIHFActive ); } } @@ -501,7 +524,8 @@ __PHONELOG( EBasic, EPhoneControl, "SIM card was removed" ); TPhoneCmdParamGlobalNote globalNoteParam; - globalNoteParam.SetType( EPhoneMessageBoxInformation ); + globalNoteParam.SetType( EAknGlobalInformationNote ); + globalNoteParam.SetTone( EAvkonSIDNoSound ); globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> @@ -594,6 +618,16 @@ TBool CPhoneState::IsTouchDTmfDialerOn() const { TBool status( EFalse ); + if ( IsOnScreenDialerSupported() ) + { + TBool isDialerVisible( EFalse ); + TRAP_IGNORE( isDialerVisible = IsDTMFEditorVisibleL() ); + + if ( isDialerVisible ) + { + status = ETrue; + } + } return status; } // ----------------------------------------------------------------------------- @@ -609,19 +643,42 @@ { if ( !IsTouchDTmfDialerOn() - && !IsAnyQueryActiveL() ) + && !IsAnyQueryActiveL() + && !IsMenuBarVisibleL() ) { - // Send the key event to the phone engine. - SendKeyEventL( aKeyEvent, aEventCode ); + if( IsKeyEventFurtherProcessedL( aKeyEvent )) + { + // Send the key event to the phone engine. + SendKeyEventL( aKeyEvent, aEventCode ); + } } + } // ----------------------------------------------------------------------------- // CPhoneState::IsKeyEventFurtherProcessed // ----------------------------------------------------------------------------- // -TBool CPhoneState::IsKeyEventFurtherProcessedL( const TKeyEvent& /*aKeyEvent*/ ) const +TBool CPhoneState::IsKeyEventFurtherProcessedL( const TKeyEvent& aKeyEvent ) const { + // While being in some special keyboard mode (Full Screen&mini QWERTY, + // handwriting mode) FEP sends only EEventKey -event and thus manual + // DTMFs can not be played with the user specified tone lengths. Also, + // in general, DTMFs are tried to play only in numeric mode. + TBool numericMode = iViewCommandHandle->HandleCommandL( + EPhoneViewIsNumberEntryNumericMode ) == EPhoneViewResponseSuccess; + + // Key presses simulated by dialer are played even if in alphanumeric mode. + const TBool simulatedByDialer = + ( ( aKeyEvent.iModifiers & ( EModifierNumLock | EModifierKeypad ) ) + == ( EModifierNumLock | EModifierKeypad ) ); + + + if ( ( ( aKeyEvent.iModifiers & EModifierSpecial ) != 0 || !numericMode ) && !simulatedByDialer ) + { + return EFalse; + } + return ETrue; } @@ -644,6 +701,12 @@ aErrorInfo.iCallId ); + // Sets touch buttons to correct status if error has occured. + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + { + iViewCommandHandle->ExecuteCommand( EPhoneResetTouchButtons ); + } + // Do the common error handling (display proper notes etc) CPhoneMainErrorMessagesHandler::Instance()->ShowErrorSpecificNoteL( aErrorInfo ); @@ -676,35 +739,40 @@ } break; - case ECCPErrorCCServiceNotAvailable: - { - if( IsVideoCall( aErrorInfo.iCallId ) ) - { - CPhoneReconnectQuery::InstanceL()->ShowReconnectQueryL( EFalse ); - } - } - break; - - case ECCPErrorBadRequest: + case ECCPErrorCCServiceNotAvailable: + { + if( IsVideoCall( aErrorInfo.iCallId ) ) { - TPECallType callType = - iStateMachine->PhoneEngineInfo()->CallTypeCommand(); - - if( callType == EPECallTypeVideo ) - { - // Dialling MO video call cannot reach 3G network. - __PHONELOG1( EBasic, EPhoneControl, - "PhoneUIControl: CPhoneState::HandleErrorL - ShowReconnectQueryL vid 2, callid%d ", - aErrorInfo.iCallId ); - CPhoneReconnectQuery::InstanceL()->ShowReconnectQueryL( ETrue ); - } + CPhoneReconnectQuery::InstanceL()->ShowReconnectQueryL( EFalse ); } - break; - - case ECCPErrorVideoCallNotSupportedByNetwork: + } + break; + + case ECCPErrorBadRequest: + { + TPECallType callType = + iStateMachine->PhoneEngineInfo()->CallTypeCommand(); + + if( callType == EPECallTypeVideo ) + { + // Dialling MO video call cannot reach 3G network. + __PHONELOG1( EBasic, EPhoneControl, + "PhoneUIControl: CPhoneState::HandleErrorL - ShowReconnectQueryL vid 2, callid%d ", + aErrorInfo.iCallId ); + CPhoneReconnectQuery::InstanceL()->ShowReconnectQueryL( ETrue ); + } + } + break; + + case ECCPErrorVideoCallNotSupportedByNetwork: // Flow trough case ECCPErrorVideoCallSetupFailed: case ECCPErrorNotReached: - // If call id found and seems to be Video Call + case ECCPErrorCCBearerCapabilityNotCurrentlyAvailable: + case ECCPErrorCCBearerCapabilityNotAuthorised: + case ECCPErrorServiceSettingError: + case ECCPErrorNoAnswerForVideo: + { + // If call id found and seems to be Video Call if ( IsVideoCall( aErrorInfo.iCallId ) ) { // Get active call count @@ -726,6 +794,7 @@ ECCPErrorNotReached == aErrorInfo.iErrorCode ); } } + } break; case ECCPErrorNoService: @@ -737,7 +806,12 @@ { // check, that there really was a call established before completing SAT request if( aErrorInfo.iCallId != KPECallIdNotUsed ) - { + { + // Complete sat request + if ( iStateMachine->PhoneEngineInfo()->CallOrigin( aErrorInfo.iCallId ) == EPECallOriginSAT ) + { + CompleteSatRequestL( aErrorInfo.iCallId ); + } } // remove number entry @@ -756,7 +830,6 @@ default: break; } - // clear call blacklist if call failure occurs CPhoneClearBlacklist::Instance()->ClearBlackListOnNextKey(); } @@ -780,14 +853,29 @@ if ( ret || isDisplayOn ) { // Get the call duration - TTimeIntervalSeconds seconds = + TTime time( 0 ); + TTimeIntervalSeconds timeInterval = iStateMachine->PhoneEngineInfo()->CallDuration( aCallId ); - - TPhoneCmdParamInteger time; - time.SetInteger(seconds.Int()); - iViewCommandHandle->ExecuteCommandL(EPhoneViewUpdateCallHeaderCallDuration, aCallId, &time); + time += timeInterval; + + // Read format string from AVKON resource + TBuf timeDurationFormatString( KNullDesC ); + LoadResource( timeDurationFormatString, EPhoneCallDurationFormatString ); + + // Format the time + TBuf timeString( KNullDesC ); + time.FormatL( timeString, timeDurationFormatString ); + + // Localize time format + AknTextUtils::LanguageSpecificNumberConversion( timeString ); + + // update the call header call duration + iViewCommandHandle->ExecuteCommandL( + EPhoneViewUpdateCallHeaderCallDuration, + aCallId, + timeString ); } - } + } // ----------------------------------------------------------------------------- // CPhoneState::HandleRemoteBusyL @@ -796,13 +884,8 @@ void CPhoneState::HandleRemoteBusyL( TInt aCallId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleRemoteBusyL( ) "); - - TPEErrorInfo info; - info.iCallId = aCallId; - info.iErrorCode = ECCPErrorBusy; - info.iErrorType = EPECcp; - CPhoneMainErrorMessagesHandler::Instance()->ShowErrorSpecificNoteL( info ); - + ShowNumberBusyNoteL(); + const TPECallType callType = iStateMachine->PhoneEngineInfo()->CallTypeCommand(); @@ -814,6 +897,14 @@ aCallId ); CPhoneReconnectQuery::InstanceL()->ShowReconnectQueryL( ETrue ); } + else + { + // Complete sat request + if ( iStateMachine->PhoneEngineInfo()->CallOrigin( aCallId ) == EPECallOriginSAT ) + { + CompleteSatRequestL( aCallId ); + } + } } // ----------------------------------------------------------- @@ -823,6 +914,15 @@ EXPORT_C void CPhoneState::HandleDisconnectingL( TInt aCallId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleDisconnectingL( ) "); + // If there is no call in connected state then EPhoneDtmfTextQuery and EPhoneDtmfListQueryDialog + // must be dismmissed from UI, therefore we must set EPhoneViewSetNoConnectedCalls to ETrue this + // way we can ensure that CPhoneQueryController doesnt relaunch EPhoneDtmfListQueryDialog. + if ( !IsAnyConnectedCalls() ) + { + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean(ETrue); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetNoConnectedCalls, &booleanParam ); + } TPhoneCmdParamCallHeaderData callHeaderParam; callHeaderParam.SetCallState( EPEStateDisconnecting ); @@ -835,7 +935,7 @@ iViewCommandHandle->ExecuteCommandL( EPhoneViewStopRingTone ); iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, - &callHeaderParam ); + &callHeaderParam ); CPhoneClearBlacklist::Instance()->ClearBlackListOnNextKey(); } @@ -940,15 +1040,53 @@ } // ----------------------------------------------------------- +// CPhoneState::IsNoteVisibleL +// ----------------------------------------------------------- +// +EXPORT_C TBool CPhoneState::IsNoteVisibleL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::IsNoteVisibleL( ) "); + TPhoneCmdParamBoolean booleanParam; + iViewCommandHandle->ExecuteCommandL( + EPhoneViewGetIsNoteVisible, &booleanParam ); + return booleanParam.Boolean(); + } + +// ----------------------------------------------------------- +// CPhoneState::IsMenuBarVisibleL +// ----------------------------------------------------------- +// +EXPORT_C TBool CPhoneState::IsMenuBarVisibleL() const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::IsMenuBarVisibleL( ) "); + return iViewCommandHandle->HandleCommandL( + EPhoneViewIsMenuBarVisible ) == + EPhoneViewResponseSuccess; + } + +// ----------------------------------------------------------- // CPhoneState::HandleNumericKeyEventL // ----------------------------------------------------------- // EXPORT_C void CPhoneState::HandleNumericKeyEventL( - const TKeyEvent& /*aKeyEvent*/, - TEventCode /*aEventCode*/ ) + const TKeyEvent& aKeyEvent, + TEventCode aEventCode ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleNumericKeyEventL( ) "); + TBool numberEntryUsed = IsNumberEntryUsedL(); + + if ( numberEntryUsed && ( aKeyEvent.iRepeats == 0 || + aKeyEvent.iScanCode == EStdKeyBackspace || + aKeyEvent.iScanCode == EStdKeyLeftArrow || + aKeyEvent.iScanCode == EStdKeyUpArrow || + aKeyEvent.iScanCode == EStdKeyDownArrow || + aKeyEvent.iScanCode == EStdKeyRightArrow )) + { + // Number entry exists but may be hidden + KeyEventForExistingNumberEntryL( aKeyEvent, aEventCode ); + } + } // ----------------------------------------------------------------------------- @@ -1011,6 +1149,38 @@ } // ----------------------------------------------------------- +// CPhoneState::IsDialingExtensionInFocusL +// ----------------------------------------------------------- +// +EXPORT_C TBool CPhoneState::IsDialingExtensionInFocusL() const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::IsDialingExtensionInFocusL( ) "); + return iViewCommandHandle->HandleCommandL( + EPhoneViewGetEasyDialingInFocusStatus ) == + EPhoneViewResponseSuccess; + } + +// ----------------------------------------------------------- +// CPhoneState::EikonEnv +// ----------------------------------------------------------- +// +EXPORT_C CEikonEnv* CPhoneState::EikonEnv() const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::EikonEnv( ) "); + return iEnv; + } + +// ----------------------------------------------------------- +// CPhoneState::SetEikonEnv +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetEikonEnv( CEikonEnv* aEnv ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SetEikonEnv( ) "); + iEnv = aEnv; + } + +// ----------------------------------------------------------- // CPhoneState::SendKeyEventL // ----------------------------------------------------------- // @@ -1060,7 +1230,7 @@ { HBufC* phoneNumber = PhoneNumberFromEntryLC(); // Save the phone number - __PHONELOG1( EBasic, EPhoneControl, "SetPhoneNumber: %S ", phoneNumber ); + __PHONELOG1( EBasic, EPhoneControl, "SetPhoneNumber: %S ", &phoneNumber->Des() ); iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber ); // Convert key code to western. @@ -1089,6 +1259,66 @@ // <------------------------------ SYSTEM EVENTS -----------------------------> +// ----------------------------------------------------------- +// CPhoneState::DynInitMenuPaneL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DynInitMenuPaneL( ) "); + __ASSERT_DEBUG( aMenuPane && aResourceId, + Panic( EPhoneCtrlParameterNotInitialized ) ); + + // Save the number of digits in the number entry before processing + // the menu pane + if ( IsNumberEntryUsedL() ) + { + TPhoneCmdParamBoolean serviceCodeParam; + serviceCodeParam.SetBoolean( + iStateMachine->PhoneEngineInfo()->PhoneNumberIsServiceCode() ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetServiceCodeFlag, + &serviceCodeParam ); + } + + // Process the menu pane + TPhoneCmdParamDynMenu dynMenuPane; + dynMenuPane.SetResourceId( aResourceId ); + dynMenuPane.SetDynMenu( aMenuPane ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuPane, &dynMenuPane ); + + if ( iCustomization ) + { + // Menu pane is customized after default items are decided + iCustomization->CustomizeMenuPaneL(aResourceId, aMenuPane); + } + } + +// ----------------------------------------------------------- +// CPhoneState::DynInitMenuBarL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::DynInitMenuBarL( + TInt aResourceId, + CEikMenuBar* aMenuBar ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DynInitMenuBarL( ) "); + __ASSERT_DEBUG( aMenuBar && aResourceId, + Panic( EPhoneCtrlParameterNotInitialized ) ); + + TPhoneCmdParamDynMenu dynMenuBar; + dynMenuBar.SetResourceId( aResourceId ); + dynMenuBar.SetDynMenu( aMenuBar ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBar, &dynMenuBar ); + + if ( iCustomization ) + { + // Menu bar is customized after default items are decided + iCustomization->CustomizeMenuBarL(aResourceId, aMenuBar); + } + + } // ----------------------------------------------------------- // CPhoneState::HandleSystemEventL @@ -1120,7 +1350,51 @@ // EXPORT_C void CPhoneState::HandlePhoneForegroundEventL() { - } + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandlePhoneForegroundEventL( ) "); + + // Force Idle to the foreground if a foreground event is received, + // but Idle is the top application + + const TBool idleIsTopApp = iViewCommandHandle->HandleCommandL( + EPhoneViewIsIdleTopApp ) == + EPhoneViewResponseSuccess ; + + if ( !IsOnScreenDialerSupported() && idleIsTopApp ) + { + TBool activatePhone = CPhonePubSubProxy::Instance()->Value( + KPSUidAiInformation, KActiveIdleState ) == EPSAiNumberEntry; + if ( activatePhone ) + { + // Set Phone as the top application + TPhoneCmdParamInteger uidParam; + uidParam.SetInteger( KUidPhoneApplication.iUid ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication, + &uidParam ); + NumberEntryManagerL()->CreateNumberEntryL(); + SetNumberEntryVisibilityL(ETrue); + } + + else + { + if ( !iStateMachine->SecurityMode()->IsSecurityMode() ) + { + __PHONELOG( EBasic, EPhoneControl, + "CPhoneState::HandlePhoneForegroundEventL - Force Idle to the foreground" ); + // Bring Idle app to the foreground + iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground ); + } + } + } + + if( NumberEntryManagerL()->IsNumberEntryUsedL() ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleTrue ); + } + else + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleFalse ); + } + } // ----------------------------------------------------------- // CPhoneState::HandlePhoneFocusLostEventL @@ -1132,6 +1406,17 @@ // See implementation in CPhoneAppUI::HandleWsEventL __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandlePhoneFocusLostEventL( ) "); + // Phone app focus lost -> close Dtmf dialer when visible + if ( IsOnScreenDialerSupported() && IsDTMFEditorVisibleL() ) + { + CloseDTMFEditorL(); + } + else if ( IsOnScreenDialerSupported() && IsCustomizedDialerVisibleL() ) + { + CloseCustomizedDialerL(); + } + + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleTrue ); } // --------------------------------------------------------- // CPhoneState::HandleIdleForegroundEventL @@ -1187,7 +1472,18 @@ "CPhoneState::HandlePropertyChangedL - aKey= %d", aKey ); __PHONELOG1( EBasic, EPhoneControl, "CPhoneState::HandlePropertyChangedL - aValue= %d", aValue ); - if ( aCategory == KPSUidTelInformation + if ( aCategory == KPSUidCtsyCallInformation ) + { + // Call state event + if ( aKey == KCTsyCallState ) + { + // Update the incall indicator + UpdateIncallIndicatorL( aValue ); + } + } + + // Telephony information category + else if ( aCategory == KPSUidTelInformation && SimState() == EPESimUsable ) { // Telephony display event @@ -1201,7 +1497,9 @@ else if ( aCategory == KPSUidStartup && aKey == KStartupSimSecurityStatus ) { // Show security note, SIM is not valid. - if ( aValue == ESimRejected || aValue == ESimUnaccepted ) + if ( aValue == ESimRejected + || aValue == ESimUnaccepted + || aValue == ESimInvalid ) { __PHONELOG( EBasic, EPhoneControl, "CPhoneStateStartup::HandlePropertyChangedL - SimSecurity status received" ); StartShowSecurityNoteL(); @@ -1225,13 +1523,13 @@ } // ----------------------------------------------------------- -// CPhoneState::NeedToSendToBackgroundL +// CPhoneState::NeedToReturnToForegroundAppL // ----------------------------------------------------------- // -EXPORT_C TBool CPhoneState::NeedToSendToBackgroundL() const +EXPORT_C TBool CPhoneState::NeedToReturnToForegroundAppL() const { return iViewCommandHandle->HandleCommandL( - EPhoneViewGetNeedToSendToBackgroundStatus ) == + EPhoneViewGetNeedToReturnToForegroundAppStatus ) == EPhoneViewResponseSuccess; } @@ -1247,6 +1545,18 @@ EPhoneViewResponseSuccess; } +// ----------------------------------------------------------- +// CPhoneState::TitlePaneIsVisibleL +// ----------------------------------------------------------- +// +TBool CPhoneState::TitlePaneIsVisibleL() const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::TitlePaneIsVisibleL( ) "); + return iViewCommandHandle->HandleCommandL( + EPhoneViewGetTitlePaneIsVisibleStatus ) == + EPhoneViewResponseSuccess; + } + // <---------------------------- MENU AND CBA EVENTS -------------------------> EXPORT_C TBool CPhoneState::HandleCommandL( TInt aCommand ) @@ -1256,27 +1566,39 @@ switch( aCommand ) { case EPhoneEmergencyCmdExit: - { - } // this should be bypasses? case EPhoneDialerCallHandling: case EPhoneCmdBack: - // Remove number entry from screen - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); - // Do state-specific behaviour if number entry is cleared - HandleNumberEntryClearedL(); + CloseClearNumberEntryAndLoadEffectL( ECallUiAppear ); break; case EPhoneDialerCmdTouchInput: + OpenVkbL(); break; case EPhoneNumberAcqCmdSendMessage: + // Open the mms editor + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSendMessage ); + if ( !IsOnScreenDialerSupported() ) + { + // Remove number entry from screen + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + // Do state-specific behaviour if number entry is cleared + HandleNumberEntryClearedL(); + } break; case EPhoneNumberAcqCmdSave: + // Open Create contact + iViewCommandHandle->ExecuteCommandL( + EPhoneViewAddContact ); break; case EPhoneNumberAcqCmdAddToName: + // Open the message editor + iViewCommandHandle->ExecuteCommandL( + EPhoneViewUpdateContact ); break; case EPhoneNumberAcqCmdAddToContacts: @@ -1349,24 +1671,37 @@ case EPhoneInCallCmdActivatEPhonebook: { + // Launch Phonebook application + TPhoneCmdParamAppInfo appInfoParam; + appInfoParam.SetAppUid( KPhoneUidAppPhonebook ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewActivateApp, &appInfoParam ); } break; - case EPhoneNumberAcqSecurityDialer: + case EPhoneViewYesSingleItemFetch: { - + if ( IsOnScreenDialerSupported() ) + { + TBuf fetchContent; + fetchContent = iViewCommandHandle->FetchContent(); + if ( fetchContent.Length() ) + { + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetNumberEntryContent, + 0, + fetchContent ); + + CallFromNumberEntryL(); + } + } } break; - - case EPhoneDialerCmdContacts: - { - } - break; - case EPhoneNumberAcqCmdToggleNeAlphaMode: case EPhoneNumberAcqCmdToggleNeNumericMode: { - + // Toggle mode + NumberEntryManagerL()->NumberEntryToggleAlphaNumericModeL(); } break; @@ -1380,7 +1715,7 @@ // Show the number entry if it exists SetNumberEntryVisibilityL(ETrue); } - else if ( NeedToSendToBackgroundL() ) + else if ( NeedToReturnToForegroundAppL() ) { // Continue displaying current app but set up the // idle screen in the background @@ -1401,35 +1736,46 @@ } break; + case EPhoneDialerCmdHelp: + if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + TPtrC contextName; + contextName.Set( KDATA_DIALER_HLP_MAIN() ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewLaunchHelpApplication, 0, contextName ); + } + break; + case EPhoneCmdVideoCallOutOfMemory: ShowVideoCallOutOfMemoryNoteL(); DisconnectCallL(); break; - - case EPhoneCallComingCmdSoftReject: - // Open Soft reject message editor - OpenSoftRejectMessageEditorL(); + + case EPhoneCmdUpdateCba: + case EPhoneDialerValidNumber: + case EPhoneDialerInvalidNumber: + case EPhoneCmdBlockingDialogLaunched: + case EPhoneCmdBlockingDialogClosed: + { + // these command ids are sent by easydialing to communicate to phone app + HandleEasyDialingCommandsL( aCommand ); + } break; - - case EPhoneInCallCmdContacts: - iViewCommandHandle->ExecuteCommand( EPhoneViewOpenContacts ); - break; - + default: - - /*if ( IsOnScreenDialerSupported() ) + if ( IsOnScreenDialerSupported() ) { // Offer command to view. + // Easydialing commands are handled in view, too. TPhoneViewResponseId resId = iViewCommandHandle->HandleCommandL( aCommand ); if( resId == EPhoneViewResponseFailed ) { - commandStatus = EFalse; + commandStatus = EFalse; } } - else*/ - + else { commandStatus = EFalse; } @@ -1450,7 +1796,7 @@ // EXPORT_C TBool CPhoneState::ProcessCommandL( TInt /*aCommand*/ ) { - __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::ProcessCommandL() "); + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::ProcessCommandL() "); // no implementation. return EFalse; } @@ -1516,7 +1862,7 @@ __PHONELOG1( EBasic, EPhoneControl, "CPhoneState::DecreaseAudioVolumeL - audio output =%d", output ); if( output == EPETTY ) { - SendGlobalInfoNoteL( EPhoneNoteTTYNoAudioControl, ETrue ); + SendGlobalInfoNoteL( EPhoneNoteTTYNoAudioControl ); } else { @@ -1540,7 +1886,7 @@ __PHONELOG1( EBasic, EPhoneControl, "CPhoneState::IncreaseAudioVolumeL - audio output =%d", output ); if( output == EPETTY ) { - SendGlobalInfoNoteL( EPhoneNoteTTYNoAudioControl, ETrue ); + SendGlobalInfoNoteL( EPhoneNoteTTYNoAudioControl ); } else { @@ -1570,8 +1916,27 @@ iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageSetAudioVolume ); } - - if ( aUpdateControl ) + else + { + CAknKeySoundSystem* keySounds = + static_cast( EikonEnv()->EikAppUi() ) + ->KeySounds(); + + if ( aLevel < KPhoneVolumeMinValue ) + { + // Set the volume value to volume control + valueToControl = KPhoneVolumeMinValue; + keySounds->PlaySound( EAvkonSIDVolumeMinTone ); + } + else // aLevel > KPhoneVolumeMaxValue + { + // Set the volume value to volume control + valueToControl = KPhoneVolumeMaxValue; + keySounds->PlaySound( EAvkonSIDVolumeMaxTone ); + } + } + + if ( aUpdateControl ) { // Update the volume display. // Upper max (11) and under min (-1) @@ -1608,13 +1973,12 @@ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DialVoiceCallL() "); __ASSERT_DEBUG( iStateMachine->PhoneEngineInfo(), Panic( EPhoneCtrlInvariant ) ); - // Disable global notes TPhoneCmdParamBoolean globalNotifierParam; globalNotifierParam.SetBoolean( ETrue ); iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled, &globalNotifierParam ); - iStateMachine->PhoneEngineInfo()->SetCallTypeCommand( EPECallTypeCSVoice ); + iStateMachine->PhoneEngineInfo()->SetCallTypeCommand( EPECallTypeCSVoice ); iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageDial ); } @@ -1622,28 +1986,60 @@ // CPhoneState::DisconnectCallL // ----------------------------------------------------------- // -EXPORT_C TBool CPhoneState::DisconnectCallL() +EXPORT_C void CPhoneState::DisconnectCallL() { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisconnectCallL( ) "); - TPhoneCmdParamInteger callIdParam; - iViewCommandHandle->ExecuteCommandL( - EPhoneViewGetExpandedBubbleCallId, &callIdParam ); - - TBool ret = EFalse; - if( callIdParam.Integer() > KErrNotFound ) + // 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 ) + { + // No hold call, find the dialing call + callStateData.SetCallState( EPEStateDialing ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + } + + if( callStateData.CallId() == KErrNotFound ) + { + // No dialing call, find the outgoing call + callStateData.SetCallState( EPEStateConnecting ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + } + + if( callStateData.CallId() == KErrNotFound ) + { + // No active call, find the disconnectinging call + callStateData.SetCallState( EPEStateDisconnecting ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + } + } + + if( callStateData.CallId() > KErrNotFound ) { // Release the call - iStateMachine->SetCallId( callIdParam.Integer() ); - - if( IsVideoCall( callIdParam.Integer() ) ) + iStateMachine->SetCallId( callStateData.CallId() ); + if( IsVideoCall( callStateData.CallId() ) ) { // Video call can be released only after we get response to VT Shutdown Command CPhoneMediatorFactory::Instance()->Sender()->IssueCommand( KMediatorVideoTelephonyDomain, - KCatPhoneToVideotelCommands, - EVtCmdReleaseDataport, + KCatPhoneToVideotelCommands, + EVtCmdReleaseDataport, TVersion( KPhoneToVideotelCmdVersionMajor, - KPhoneToVideotelCmdVersionMinor, - KPhoneToVideotelCmdVersionBuild ), + KPhoneToVideotelCmdVersionMinor, + KPhoneToVideotelCmdVersionBuild ), KNullDesC8, CPhoneReleaseCommand::NewL( *iStateMachine ) ); } @@ -1653,16 +2049,13 @@ iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageRelease ); } - ret = ETrue; } else { __PHONELOG( EOnlyFatal, EPhoneControl, "CPhoneState::DisconnectCallL has negative call id!" ); - } - - return ret; - } + } + } // ----------------------------------------------------------- // CPhoneState::DisplayIdleScreenL @@ -1695,16 +2088,13 @@ // Don't remove reconnect query if it's shown if( !CPhoneReconnectQuery::InstanceL()->IsDisplayingQuery() ) { - // Remove dialogs if necessary iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); } // Return phone to the background iViewCommandHandle->ExecuteCommandL( EPhoneViewSendToBackground ); - - // Set Idle app as the top app + // Set Idle app as the top app to PS key this way we know if need to + // bring idle to fore in next phone acitvation event. iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIdleTopApplication ); - - // Set Empty CBA iCbaManager->SetCbaL( EPhoneEmptyCBA ); } @@ -1720,7 +2110,8 @@ if ( IsOnScreenDialerSupported() ) { - if ( IsCustomizedDialerVisibleL() ) + if ( IsDTMFEditorVisibleL() || + IsCustomizedDialerVisibleL() ) { return; } @@ -1732,6 +2123,11 @@ { return; } + else if ( IsMenuBarVisibleL() ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + return; + } // Open recent calls list when the number entry is empty TPhoneCmdParamInteger numberEntryCountParam; iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount, @@ -1747,30 +2143,36 @@ } } } - - // Get the number entry contents - HBufC* phoneNumber = PhoneNumberFromEntryLC(); - - // Call the number - iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber ); - - if ( phoneNumber->Des().Length() < KPhoneValidPhoneNumberLength ) + + // If easydialing has focus, call should be initiated to focused contact. + if ( IsDialingExtensionInFocusL() ) { - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); - - HandleNumberEntryClearedL(); + iViewCommandHandle->HandleCommandL( EEasyDialingVoiceCall ); } - - CleanupStack::PopAndDestroy( phoneNumber ); - - if ( !iCustomization || - !iCustomization->HandleCallFromNumberEntryL() ) - { - // Customization didn't handle call. Dial voice call - // as normally - DialVoiceCallL(); + else + { + // Get the number entry contents + HBufC* phoneNumber = PhoneNumberFromEntryLC(); + + // Call the number + iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber ); + + if ( phoneNumber->Des().Length() < KPhoneValidPhoneNumberLength ) + { + CloseClearNumberEntryAndLoadEffectL( ECallUiAppear ); + } + + CleanupStack::PopAndDestroy( phoneNumber ); + + if ( !iCustomization || + !iCustomization->HandleCallFromNumberEntryL() ) + { + // Customization didn't handle call. Dial voice call + // as normally + DialVoiceCallL(); + } } - + } // ----------------------------------------------------------- @@ -1816,12 +2218,12 @@ EXPORT_C void CPhoneState::UpdateSingleActiveCallL( TInt aCallId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::UpdateSingleActiveCallL( ) "); - // Stop capturing keys CaptureKeysDuringCallNotificationL( EFalse ); - BeginUiUpdateLC(); + SetTouchPaneButtonEnabled( EPhoneInCallCmdHold ); + // Update call state TPhoneCmdParamCallHeaderData callHeaderParam; callHeaderParam.SetCallState( EPEStateConnected ); @@ -1832,8 +2234,6 @@ UpdateRemoteInfoDataL( aCallId ); // Create call duration label if enabled - // This key will be moved to some other area, but since key - // is supported we can still use it. TBool callDuration( EFalse ); CPhoneCenRepProxy::Instance()->GetInt( KCRUidLogs, KLogsShowCallDuration, callDuration ); @@ -1848,15 +2248,31 @@ // Go to current state implementation iCbaManager->UpdateInCallCbaL(); - // Go to background if necessary - if ( NeedToSendToBackgroundL() || IsAutoLockOn() ) + //Update state of switch to video or voice call touch button. + TPECallType type = iStateMachine->PhoneEngineInfo()->CallType( aCallId ); + + if( type == EPECallTypeVideo ) { + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetVideoCallFlag, &booleanParam ); } - // If there is no need to send back ground and number entry is used then - // we must show number entry. - else if ( !NeedToSendToBackgroundL() && IsNumberEntryUsedL() ) + else { - SetNumberEntryVisibilityL(ETrue); + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetVideoCallFlag, &booleanParam ); + } + + // Check if application and number entry was open before incoming call. If so give control to number entry + // to prevent flickering + if ( NeedToReturnToForegroundAppL() || IsAutoLockOn() ) + { + // If number entry is used set control and visibility. + if ( IsNumberEntryUsedL() ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetControlAndVisibility ); + } } } @@ -1865,11 +2281,20 @@ // ----------------------------------------------------------- // EXPORT_C void CPhoneState::CaptureKeysDuringCallNotificationL( - TBool /*aCaptured*/ ) + TBool aCaptured ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::CaptureKeysDuringCallNotificationL( ) "); + + if ( AknLayoutUtils::PenEnabled() ) + { + //Capture pointer events + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( aCaptured ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetPointerCapture, &booleanParam ); + } + // Determine which view command to execute based on the capture status - /*const TInt viewCommandId = aCaptured ? + const TInt viewCommandId = aCaptured ? EPhoneViewStartCapturingKey : EPhoneViewStopCapturingKey; @@ -1889,7 +2314,7 @@ cameraKeyCaptureParam.SetCaptureType( EPhoneKeyAllEvents ); iViewCommandHandle->ExecuteCommandL( viewCommandId, &cameraKeyCaptureParam ); - }*/ + } } // ----------------------------------------------------------- @@ -1924,7 +2349,8 @@ if( iCustomization ) { TBuf inCallNumberText( KNullDesC ); - + // incall number text could be 'Call 1', 'Call 2', ... + CallheaderManagerL()->GetInCallNumberTextL( aCallId, inCallNumberText ); // to check if we have VoIP call in question and fix // parameters if needed iCustomization->ModifyCallHeaderTexts( aCallId, &callHeaderParam, @@ -1944,7 +2370,7 @@ // ----------------------------------------------------------- // EXPORT_C void CPhoneState::SetCallHeaderType( - TInt aCallHeaderType ) + const CBubbleManager::TPhoneCallTypeFlags aCallHeaderType ) { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::SetCallHeaderType() "); TRAP_IGNORE( CallheaderManagerL()->SetCallHeaderType( aCallHeaderType ) ); @@ -1985,6 +2411,7 @@ if( activeCallCount.Integer() == ENoActiveCalls ) { iCbaManager->UpdateIncomingCbaL( incomingCall ); + UpdateSilenceButtonDimming(); } else { @@ -2020,6 +2447,55 @@ // <-------------------------- CONTEXT MENU -------------------------> +// ----------------------------------------------------------------------------- +// CPhoneState::SetContextMenu +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetContextMenuL( TInt aResourceId ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SetContextMenuL() "); + + TPhoneCmdParamInteger integerParam; + TInt resId( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( aResourceId ) ); + integerParam.SetInteger( resId ); + __PHONELOG1( EBasic, EPhoneControl, + "CPhoneState::SetContextMenuL : resId =%d",resId ); + + iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateContextMenu, + &integerParam ); + } +// ----------------------------------------------------------------------------- +// CPhoneState::UpdateInCallContextMenuL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::UpdateInCallContextMenuL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::UpdateInCallContextMenuL() "); + + SetContextMenuL( EPhoneNumberAcqMenubar ); + + } + +// ----------------------------------------------------------------------------- +// CPhoneState::UpdateIncomingContextMenuL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::UpdateIncomingContextMenuL( TInt aCallId ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::UpdateIncomingContextMenuL() "); + + if( CPhoneState::IsVideoCall ( aCallId ) ) + { + SetContextMenuL( EPhoneIncomingVideoCallMenubar ); + } + else + { + SetContextMenuL( EPhoneIncomingCallMenubar ); + } + + } + // ----------------------------------------------------------- // CPhoneState::ShowNoteL // ----------------------------------------------------------- @@ -2124,9 +2600,9 @@ noteText.Append( timeString ); TPhoneCmdParamGlobalNote globalNoteParam; - globalNoteParam.SetType( EPhoneMessageBoxInformation ); + globalNoteParam.SetType( EAknGlobalInformationNote ); globalNoteParam.SetText( noteText ); - + globalNoteParam.SetTone( CAknNoteDialog::ENoTone ); iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -2136,8 +2612,7 @@ // CPhoneState::SendGlobalInfoNoteL // --------------------------------------------------------- // -EXPORT_C void CPhoneState::SendGlobalInfoNoteL( - TInt aResourceId, TBool aNotificationDialog ) +EXPORT_C void CPhoneState::SendGlobalInfoNoteL( TInt aResourceId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SendGlobalInfoNoteL( ) "); __ASSERT_DEBUG( aResourceId, Panic( EPhoneCtrlParameterNotInitialized ) ); @@ -2151,15 +2626,13 @@ &globalNotifierParam ); TPhoneCmdParamGlobalNote globalNoteParam; - PhoneNotificationType type = aNotificationDialog ? - EPhoneNotificationDialog : EPhoneMessageBoxInformation; - globalNoteParam.SetType( type ); + + globalNoteParam.SetType( EAknGlobalInformationNote ); globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> ResolveResourceID( aResourceId ) ); - - globalNoteParam.SetNotificationDialog( aNotificationDialog ); - + globalNoteParam.SetTone( EAvkonSIDInformationTone ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -2169,8 +2642,7 @@ // CPhoneUIController::SendGlobalWarningNoteL // --------------------------------------------------------- // -EXPORT_C void CPhoneState::SendGlobalWarningNoteL( - TInt aResourceId, TBool aNotificationDialog ) +EXPORT_C void CPhoneState::SendGlobalWarningNoteL( TInt aResourceId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SendGlobalWarningNoteL( ) "); __ASSERT_DEBUG( aResourceId, Panic( EPhoneCtrlParameterNotInitialized ) ); @@ -2185,15 +2657,12 @@ &globalNotifierParam ); TPhoneCmdParamGlobalNote globalNoteParam; - PhoneNotificationType type = aNotificationDialog ? - EPhoneNotificationDialog : EPhoneMessageBoxWarning; - globalNoteParam.SetType( type ); + globalNoteParam.SetType( EAknGlobalWarningNote ); globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> ResolveResourceID( aResourceId ) ); - - globalNoteParam.SetNotificationDialog( aNotificationDialog ); - + globalNoteParam.SetTone( EAvkonSIDWarningTone ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -2203,8 +2672,7 @@ // CPhoneUIController::SendGlobalErrorNoteL // --------------------------------------------------------- // -EXPORT_C void CPhoneState::SendGlobalErrorNoteL( - TInt aResourceId, TBool aNotificationDialog ) +EXPORT_C void CPhoneState::SendGlobalErrorNoteL( TInt aResourceId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SendGlobalErrorNoteL( ) "); __ASSERT_DEBUG( aResourceId, Panic( EPhoneCtrlParameterNotInitialized ) ); @@ -2218,14 +2686,11 @@ &globalNotifierParam ); TPhoneCmdParamGlobalNote globalNoteParam; - PhoneNotificationType type = aNotificationDialog ? - EPhoneNotificationDialog : EPhoneMessageBoxInformation; - globalNoteParam.SetType( type ); - + globalNoteParam.SetType( EAknGlobalErrorNote ); globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> ResolveResourceID( aResourceId ) ); - globalNoteParam.SetNotificationDialog( aNotificationDialog ); + globalNoteParam.SetTone( CAknNoteDialog::EErrorTone ); iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); @@ -2243,7 +2708,7 @@ iViewCommandHandle, iStateMachine, this ); if ( !bt->SetHandsfreeModeL( aHandsfreeMode )) { - SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed, ETrue ); + SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed ); } CleanupStack::PopAndDestroy( bt ); } @@ -2259,7 +2724,7 @@ iViewCommandHandle, iStateMachine, this ); if ( !bt->SetBTHandsfreeModeL( aHandsfreeMode )) { - SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed, ETrue ); + SendGlobalErrorNoteL( EPhoneNoteTextNotAllowed ); } CleanupStack::PopAndDestroy( bt ); } @@ -2267,13 +2732,298 @@ // <-------------------------- INTERNAL FUNCTIONS ------------------------> // ----------------------------------------------------------- +// CPhoneState::UpdateIncallIndicatorL +// ----------------------------------------------------------- +// +void CPhoneState::UpdateIncallIndicatorL( TInt aCallState ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::UpdateIncallIndicatorL( ) "); + TPhoneCmdParamIncallIndicatorData incallIndicatorParam; + // Set the state. + incallIndicatorParam.SetCallState( aCallState ); + + if((aCallState == EPSCTsyCallStateUninitialized) || + (aCallState == EPSCTsyCallStateNone)) + { + incallIndicatorParam.SetLittleBubbleVisible( EFalse ); + } + else + { + SetLittleBubbleVisibilityL(&incallIndicatorParam); + } + + // Set mode + incallIndicatorParam.SetMode( + CPhonePubSubProxy::Instance()->Value( + KPSUidCtsyCallInformation, + KCTsyCallType ) ); + + TInt activeCallId = GetActiveCallIdL(); + if ( activeCallId > KErrNone ) + { + if ( iStateMachine->PhoneEngineInfo()->CallALSLine( activeCallId ) + == CCCECallParameters::ECCELineTypeAux ) + { + incallIndicatorParam.SetLine2( ETrue ); + } + } + + // Set the mute status + const TBool audioMute = iStateMachine->PhoneEngineInfo()->AudioMute(); + incallIndicatorParam.SetMute( audioMute ); + + // Set the voice privacy status + if ( activeCallId > KErrNotFound && activeCallId != KConferenceCallId ) + { + incallIndicatorParam.SetCiphering( + iStateMachine->PhoneEngineInfo()->IsSecureCall( activeCallId ) ); + } + else + { + incallIndicatorParam.SetCiphering( ETrue ); + } + + incallIndicatorParam.SetCipheringIndicatorAllowed( + iStateMachine->PhoneEngineInfo()->SecureSpecified() ); + + // Set the emergency status + if( EPEStateIdle != iStateMachine->PhoneEngineInfo()->CallState( KPEEmergencyCallId ) ) + { + incallIndicatorParam.SetEmergency( ETrue ); + } + + // Update the in-call indicator + iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateIncallIndicator, + &incallIndicatorParam ); + } + +// ----------------------------------------------------------- // CPhoneState::UpdateProfileDisplayL // ----------------------------------------------------------- // void CPhoneState::UpdateProfileDisplayL() { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::UpdateProfileDisplayL( ) "); + // Get the profile information + const TInt profileId = + iStateMachine->PhoneEngineInfo()->ProfileId(); + TPEProfileName profileName = + iStateMachine->PhoneEngineInfo()->ProfileName(); + + HBufC* profileString = HBufC::NewLC( profileName.Length() + + KPhoneMaxDateDisplayTextLength ); + + TPtr profileNameBuf = profileString->Des(); + profileNameBuf.Zero(); + profileNameBuf.Append( profileName ); + + if ( ( profileId == EProfileGeneralId ) || + ( profileId == EProfileOffLineId ) ) + { + // Show date instead of profile name on navi pane + HBufC* buffer = HBufC::NewLC( KPhoneMaxDateDisplayTextLength ); + TPtr dateString( buffer->Des() ); + + TTime time; + time.HomeTime(); + + // Get date string + CCoeEnv* coeEnv = CCoeEnv::Static(); + + HBufC* dateFormatString = + StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO, coeEnv ); + time.FormatL( dateString, *dateFormatString ); + CleanupStack::PopAndDestroy( dateFormatString ); + + // To arabic + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( + dateString ); + + //Get week day abbreviation + TDayNameAbb wkDayAbb = TDayNameAbb(); + wkDayAbb.Set(time.DayNoInWeek()); + + //Get time format string + HBufC* timeFormat = StringLoader::LoadLC( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneIdleTimeFormat ), + coeEnv ); + + //Set date and weekdays to time format + profileNameBuf.Zero(); + + StringLoader::Format( + profileNameBuf, + *timeFormat, + 1, // date + dateString ); + + dateString.Copy( profileNameBuf ); + + StringLoader::Format( + profileNameBuf, + dateString, + 0, // weekday + wkDayAbb ); + + CleanupStack::PopAndDestroy( timeFormat ); + CleanupStack::PopAndDestroy( buffer ); + } + + // Set silence indicator based on the ringing profile + const TProfileRingingType ringingType = + iStateMachine->PhoneEngineInfo()->RingingType(); + if ( ringingType == EProfileRingingTypeSilent ) + { + TBuf< 1 > silent; + silent.Append( KPuaCodeSilentSymbol ); + profileNameBuf.Insert( 0, silent ); + } + + // Update the profile display on the navi pane + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetNaviPaneContent, 0, + profileNameBuf ); + + if ( profileId == EProfileOffLineId ) + { + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetTitlePaneContent, + 0, + profileName ); + } + else + { + UpdateOperatorDisplayL(); + } + + CleanupStack::PopAndDestroy( profileString ); } +// ----------------------------------------------------------- +// CPhoneState::UpdateOperatorDisplayL +// ----------------------------------------------------------- +// +void CPhoneState::UpdateOperatorDisplayL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::UpdateOperatorDisplayL( ) "); + __PHONELOG( EBasic, EPhoneControl, "CPhoneState::UpdateOperatorDisplayL" ); + // Get current title pane content. + TTelTitleDisplay titleContent; + titleContent.iDisplayTag.Zero(); + titleContent.iLogoHandle = 0; + TPckg titlePckg( titleContent ); + + RProperty::Get( + KPSUidTelInformation, + KTelDisplayInfo, + titlePckg ); + + if ( TitlePaneIsVisibleL() ) + { + // There is a title pane icon. + if ( titleContent.iLogoHandle != 0 ) + { + // Set new logo. + __PHONELOG( EBasic, EPhoneControl, + "CPhoneState::UpdateOperatorDisplayL - logo found" ); + + if( iLogoHandle != titleContent.iLogoHandle ) + { + __PHONELOG( EBasic, EPhoneControl, + "CPhoneState::UpdateOperatorDisplayL - set new logo" ); + + TPhoneCmdParamBitmap bitmapParam; + + // Duplicate bitmap from handle. + CFbsBitmap* bitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL( bitmap ); + User::LeaveIfError( + bitmap->Duplicate( titleContent.iLogoHandle ) ); + bitmapParam.SetBitmap( bitmap ); + + // Duplicate and set bitmap mask if needed + CFbsBitmap* maskBitmap = NULL; + if( titleContent.iLogoMaskHandle != 0 ) + { + maskBitmap = new( ELeave )CFbsBitmap; + CleanupStack::PushL( maskBitmap ); + User::LeaveIfError( maskBitmap->Duplicate( + titleContent.iLogoMaskHandle ) ); + bitmapParam.SetMaskBitmap( maskBitmap ); + } + + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetTitlePanePicture, + &bitmapParam ); + + // The title pane takes ownership of the bitmaps so no need + // to destroy it here. + if( maskBitmap ) + { + // Pop maskBitmap only, if it has been created + CleanupStack::Pop( maskBitmap ); + } + CleanupStack::Pop( bitmap ); + } + } + else + { + __PHONELOG1( EBasic, EPhoneControl, + "CPhoneState::UpdateOperatorDisplayL - set text=%S", &titleContent.iDisplayTag ); + iLogoHandle = titleContent.iLogoHandle; + + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetTitlePaneContent, + 0, + titleContent.iDisplayTag ); + } + } + + // Check background image. + TPhoneCmdParamBitmap savedBitmapParam; + iViewCommandHandle->ExecuteCommandL( + EPhoneViewGetBackgroundImageBitmap, + &savedBitmapParam ); + + if ( titleContent.iBackgroundImageHandle != + savedBitmapParam.Bitmap()->Handle() ) + { + __PHONELOG2( EBasic, EPhoneControl, + "CPhoneState::UpdateOperatorDisplayL - update background image since different titleContent(%d), saved(%d)", + titleContent.iBackgroundImageHandle, savedBitmapParam.Bitmap()->Handle() ); + // Background image has changed. Duplicate bitmap from handle if + // available; otherwise reset the background image + CFbsBitmap* bitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL( bitmap ); + TInt err = KErrNone; + if ( titleContent.iBackgroundImageHandle != 0 ) + { + err = bitmap->Duplicate( titleContent.iBackgroundImageHandle ); + } + else + { + bitmap->Reset(); + } + + if ( err == KErrNone ) + { + iBitmapRedrawCounter = titleContent.iBackgroundImageRedrawCounter; + TPhoneCmdParamBitmap bitmapParam; + bitmapParam.SetBitmap( bitmap ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetBackgroundImageBitmap, + &bitmapParam ); + } + + CleanupStack::PopAndDestroy( bitmap ); + } + else if ( titleContent.iBackgroundImageRedrawCounter != + iBitmapRedrawCounter ) + { + iBitmapRedrawCounter = titleContent.iBackgroundImageRedrawCounter; + iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateView ); + } + } // ----------------------------------------------------------- // CPhoneState::HandleInitiatedEmergencyCallL @@ -2295,6 +3045,9 @@ holdFlag.SetBoolean( EFalse ); iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag ); + // Undim Answer button for sure. + SetTouchPaneButtonEnabled( EPhoneCallComingCmdAnswer ); + // Go to emergency call state // No need update cba iStateMachine->ChangeState( EPhoneStateEmergency ); @@ -2310,14 +3063,57 @@ // We have existing video call so need to release dataport before continuing // emergency call. Otherwise we will face problems with dataport use later. - CPhoneMediatorFactory::Instance()->Sender()->IssueCommand( KMediatorVideoTelephonyDomain, - KCatPhoneToVideotelCommands, - EVtCmdReleaseDataport, - TVersion( KPhoneToVideotelCmdVersionMajor, - KPhoneToVideotelCmdVersionMinor, - KPhoneToVideotelCmdVersionBuild ), - KNullDesC8, - CPhoneContinueEmergencyCallCommand::NewL( *iStateMachine ) ); + CPhoneMediatorFactory::Instance()->Sender()->IssueCommand( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + EVtCmdReleaseDataport, + TVersion( KPhoneToVideotelCmdVersionMajor, + KPhoneToVideotelCmdVersionMinor, + KPhoneToVideotelCmdVersionBuild ), + KNullDesC8, + CPhoneContinueEmergencyCallCommand::NewL( *iStateMachine ) ); + } + +// ----------------------------------------------------------- +// CPhoneState::HandleShowImeiL +// ----------------------------------------------------------- +// +void CPhoneState::HandleShowImeiL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleShowImeiL( ) "); + + if ( IsOnScreenDialerSupported() ) + { + NumberEntryClearL(); + } + else + { + // Remove number entry from screen + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + } + + // Fetch IMEI + TBuf serialNumber; + TPEPhoneIdentityParameters phoneIdentityParameters = iStateMachine-> + PhoneEngineInfo()->PhoneIdentityParameters(); + serialNumber = phoneIdentityParameters.iSerialNumber; + + // Add it to the resource string + HBufC* buf = StringLoader::LoadLC( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( + EPhonePhoneImeiString ), serialNumber ); + + TPhoneCmdParamNote noteParam; + noteParam.SetType( EPhoneNoteCustom ); + noteParam.SetResourceId( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInformationWaitNote ) ); + noteParam.SetText( *buf ); + + // Display note + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowNote, ¬eParam ); + + CleanupStack::PopAndDestroy( buf ); } // ----------------------------------------------------------- @@ -2348,6 +3144,61 @@ &callHeaderParam ); } +// ----------------------------------------------------------- +// CPhoneState::HandleShowLifeTimerL +// ----------------------------------------------------------- +// +void CPhoneState::HandleShowLifeTimerL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleShowLifeTimerL( ) "); + if ( IsOnScreenDialerSupported() ) + { + NumberEntryClearL(); + } + else + { + // Remove number entry from screen + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + } + + // Fetch LifeTime + TPELifeTimeData lifeTimeData = iStateMachine-> + PhoneEngineInfo()->LifeTimerData(); + + TLocale locale; + TBuf lifetimerText; + lifetimerText.NumFixedWidth( + lifeTimeData.iHours, + EDecimal, + KPhoneLifeTimerHoursLength ); + + lifetimerText.Append(locale.TimeSeparator( KTimerMinuteSeparator ) ); // minute seperator + + TBuf mins; + mins.NumFixedWidth( + lifeTimeData.iMinutes, + EDecimal, + KPhoneLifeTimerMinutesLength ); + + lifetimerText.Append(mins); + + // Add it to the resource string + HBufC* buf = StringLoader::LoadLC( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( + EPhoneLifeTimeFormat ), lifetimerText ); + TPhoneCmdParamNote noteParam; + noteParam.SetType( EPhoneNoteCustom ); + noteParam.SetResourceId( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInformationWaitNote ) ); + noteParam.SetText( *buf ); + + // Display note + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowNote, ¬eParam ); + + CleanupStack::PopAndDestroy( buf ); + } + // --------------------------------------------------------- // CPhoneState::IsVideoCall // --------------------------------------------------------- @@ -2495,6 +3346,7 @@ { case ESimRejected: case ESimUnaccepted: + case ESimInvalid: retVal = EFalse; break; @@ -2513,9 +3365,7 @@ // EXPORT_C TBool CPhoneState::IsSimStateNotPresentWithSecurityModeEnabled() { - TPhoneCmdParamBoolean isSecurityMode; - TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode ) ); - if ( SimState() == EPESimNotPresent && isSecurityMode.Boolean() ) + if ( SimState() == EPESimNotPresent && iStateMachine->SecurityMode()->IsSecurityMode() ) { return ETrue; } @@ -2526,16 +3376,6 @@ } // --------------------------------------------------------- -// CPhoneState::SetDivertIndication -// --------------------------------------------------------- -// -EXPORT_C void CPhoneState::SetDivertIndication( const TBool aDivertIndication ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::SetDivertIndication()"); - TRAP_IGNORE( CallheaderManagerL()->SetDivertIndication( aDivertIndication ) ); - } - -// --------------------------------------------------------- // CPhoneState::StartAlsLineChangeTimerL // --------------------------------------------------------- // @@ -2570,13 +3410,12 @@ { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::StartShowSecurityNoteL "); - // Set security mode on. - TPhoneCmdParamBoolean securityMode; - securityMode.SetBoolean( ETrue ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetSecurityMode, &securityMode ); - // Remove number entry from screen iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + + TPhoneCmdParamBoolean visibleMode; + visibleMode.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetStatusPaneVisible, &visibleMode ); iCbaManager->UpdateCbaL( EPhoneEmptyCBA ); @@ -2592,21 +3431,38 @@ TInt resourceId ( KErrNone ); - if ( SimSecurityStatus() == ESimRejected ) - { - resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneSimRejected ); - } - else if ( SimState() == EPESimNotPresent ) + + switch( SimSecurityStatus() ) { - // insert sim card -note - resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneSimRemoved ); - } - else if ( SimSecurityStatus() == ESimUnaccepted ) - { - resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneSimUnaccepted ); + case ESimRejected: + { + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSimRejected ); + break; + } + case ESimUnaccepted: + { + // insert sim card -note + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSimUnaccepted ); + break; + } + case ESimInvalid: + { + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSIMInvalidUICC ); + break; + } + default: + { + if ( SimState() == EPESimNotPresent ) + { + // insert sim card -note + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSimRemoved ); + } + break; + } } if ( resourceId != KErrNone ) @@ -2822,14 +3678,13 @@ resource = iCustomization->CustomizeBusyNoteText(); } - // Show number busy notification + // Show number busy note TPhoneCmdParamGlobalNote globalNoteParam; - globalNoteParam.SetType( EPhoneNotificationDialog ); + globalNoteParam.SetType( EAknGlobalInformationNote ); globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> ResolveResourceID( resource ) ); - - globalNoteParam.SetNotificationDialog( ETrue ); + globalNoteParam.SetTone( EAvkonSIDInformationTone ); iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } @@ -2846,11 +3701,6 @@ KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus ) > EAutolockOff; - __PHONELOG1( EBasic, - EPhoneControl, - "CPhoneState::IsAutoLockOn() Status: %d", - phoneIsLocked ); - return phoneIsLocked; } @@ -2891,37 +3741,28 @@ // CPhoneState::SetTouchPaneButtons // --------------------------------------------------------- // -EXPORT_C void CPhoneState::SetTouchPaneButtons( TInt /*aResourceId*/ ) +EXPORT_C void CPhoneState::SetTouchPaneButtons( TInt aResourceId ) { if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { - TPhoneCmdParamBoolean muteParam; - muteParam.SetBoolean( iStateMachine->PhoneEngineInfo()->AudioMute() ); - iViewCommandHandle->ExecuteCommand(EPhoneViewSetMuteFlag,&muteParam); - - const TPEAudioOutput audioOutput = - iStateMachine->PhoneEngineInfo()->AudioOutput(); - - TBool btAvailable = iStateMachine->PhoneEngineInfo()->AudioOutputAvailable( - EPEBTAudioAccessory ); - - TPhoneCmdParamBoolean btParam; - btParam.SetBoolean( audioOutput == EPEBTAudioAccessory ); - iViewCommandHandle->ExecuteCommand(EPhoneViewSetBlueToothFlag,&btParam); - - TPhoneCmdParamBoolean btAvailableParam; - btAvailableParam.SetBoolean( btAvailable ); - iViewCommandHandle->ExecuteCommand( - EPhoneViewSetBluetoothAvailableFlag,&btAvailableParam); - - TBool emergency( EPEStateIdle != - iStateMachine->PhoneEngineInfo()->CallState( KPEEmergencyCallId ) ); - TPhoneCmdParamBoolean booleanParam; - booleanParam.SetBoolean( emergency ); - + // Display Video Share button instead of Hold Button if + // the feature is enabled and video sharing is currently available. + if ( aResourceId == EPhoneIncallButtons && + FeatureManager::FeatureSupported( KFeatureIdFfEntryPointForVideoShare ) && + CPhonePubSubProxy::Instance()->Value + ( KPSUidCoreApplicationUIs, KCoreAppUIsVideoSharingIndicator ) + == ECoreAppUIsVideoSharingIndicatorOn ) + { + aResourceId = EPhoneIncallVideoShareButtons; + } + TPhoneCmdParamInteger integerParam; + integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( aResourceId ) ); TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTouchPaneButtons, - &booleanParam ) ); + &integerParam ) ); + + SetTouchPaneVisible( ETrue ); } } @@ -2933,10 +3774,60 @@ { if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { - TPhoneCmdParamBoolean boolParam; + TPhoneCmdParamInteger integerParam; + integerParam.SetInteger( 0 ); TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTouchPaneButtons, - &boolParam ) ); + &integerParam ) ); + + SetTouchPaneVisible( EFalse ); + } + } + +// --------------------------------------------------------- +// CPhoneState::SetTouchPaneVisible +// --------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetTouchPaneVisible( TBool aVisible ) + { + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + { + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( aVisible ); + TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetTouchPaneVisible, + &booleanParam ) ); + } + } + +// ---------------------------------------------------------------------------- +// CPhoneState::SetTouchButtonEnabled +// ---------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetTouchPaneButtonEnabled( TInt aCommandId ) + { + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + { + TPhoneCmdParamInteger commandParam; + commandParam.SetInteger( aCommandId ); + iViewCommandHandle->ExecuteCommand( EPhoneViewEnableTouchButton, + &commandParam ); + } + } + +// ---------------------------------------------------------------------------- +// CPhoneState::SetTouchButtonDisabled +// ---------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetTouchPaneButtonDisabled( TInt aCommandId ) + { + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + { + TPhoneCmdParamInteger commandParam; + commandParam.SetInteger( aCommandId ); + + iViewCommandHandle->ExecuteCommand( EPhoneViewDisableTouchButton, + &commandParam ); } } @@ -2948,6 +3839,28 @@ { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::HandleLongHashL() "); + TPhoneCmdParamInteger numberEntryCountParam; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount, + &numberEntryCountParam ); + TInt neLength( numberEntryCountParam.Integer() ); + + if( neLength == 1 ) + { + if ( !iStateMachine->SecurityMode()->IsSecurityMode() ) + { + OnlyHashInNumberEntryL(); + } + } + } + +// ----------------------------------------------------------- +// CPhoneState::OpenVKBL +// ----------------------------------------------------------- +// +void CPhoneState::OpenVkbL() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::OpenVKB() "); + iViewCommandHandle->ExecuteCommandL( EPhoneViewOpenVirtualKeyBoard ); } // ----------------------------------------------------------- @@ -2956,9 +3869,7 @@ // EXPORT_C void CPhoneState::BeginUiUpdateLC() { - iViewCommandHandle->ExecuteCommand( EPhoneViewBeginUpdate ); - TCleanupItem operation( UiUpdateCleanup, this ); CleanupStack::PushL( operation ); } @@ -2969,7 +3880,53 @@ // EXPORT_C void CPhoneState::EndUiUpdate() { - CleanupStack::PopAndDestroy(); // Call UiUpdateCleanup + CleanupStack::PopAndDestroy(); // Call UiUpdateCleanup + } + +// ----------------------------------------------------------- +// CPhoneState::BeginTransEffectLC +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::BeginTransEffectLC( TStateTransEffectType aType ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::BeginTransEffectLC( ) "); + TPhoneCmdParamTransEffect effectParam; + switch ( aType ) + { + case ENumberEntryOpen: + effectParam.SetType( EPhoneTransEffectDialerOpen ); + break; + case ENumberEntryClose: + effectParam.SetType( EPhoneTransEffectDialerClose ); + break; + case ENumberEntryCreate: + effectParam.SetType( EPhoneTransEffectDialerCreate ); + break; + case ECallUiAppear: + effectParam.SetType( EPhoneTransEffectCallUiAppear ); + break; + case ECallUiDisappear: + effectParam.SetType( EPhoneTransEffectCallUiDisappear ); + break; + default: + effectParam.SetType( EPhoneTransEffectNone ); + } + effectParam.SetAppUid( KUidPhoneApplication ); + iViewCommandHandle->ExecuteCommand( + EPhoneViewBeginTransEffect, + &effectParam ); + // Always put the cleanup item into stack as expected by the caller. + TCleanupItem operation( EffectCleanup, this ); + CleanupStack::PushL( operation ); + } + +// ----------------------------------------------------------- +// CPhoneState::EndTransEffect +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::EndTransEffect() + { + CleanupStack::PopAndDestroy(); // Call EffectCleanup } // ----------------------------------------------------------- @@ -3019,6 +3976,58 @@ EPhoneViewEndUpdate ); } +// ----------------------------------------------------------------------------- +// CPhoneState::EffectCleanup +// ----------------------------------------------------------------------------- +// +void CPhoneState::EffectCleanup(TAny* aThis ) + { + TPhoneCmdParamTransEffect effectParam; + effectParam.SetType( EPhoneTransEffectStop ); + // won't do anything if effect wasn't started + static_cast( aThis )->iViewCommandHandle->ExecuteCommand( + EPhoneViewEndTransEffect, &effectParam ); + } + +// ----------------------------------------------------------------------------- +// CPhoneState::IsDTMFEditorVisibleL +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CPhoneState::IsDTMFEditorVisibleL() const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::IsDTMFEditorVisibleL( ) "); + return iViewCommandHandle->HandleCommandL( + EPhoneViewIsDTMFEditorVisible ) == + EPhoneViewResponseSuccess; + } + +// ----------------------------------------------------------------------------- +// CPhoneState::CloseDTMFEditorL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::CloseDTMFEditorL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::CloseDTMFEditorL()"); + if ( iOnScreenDialer ) // Touch + { + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetDtmfDialerViewVisible, + &booleanParam ); + CloseClearNumberEntryAndLoadEffectL( ECallUiAppear ); + } + else // Non-Touch + { + // If dtmf query is visible then remove number entry + // because it should not be shown if user has pressed end key. + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveQuery ); + // Do state-specific behaviour if number entry is cleared + HandleNumberEntryClearedL(); + } + } + // ----------------------------------------------------------- // CPhoneState::SetDefaultFlagsL() // ----------------------------------------------------------- @@ -3045,19 +4054,15 @@ &globalNotifierParam ); // uncapture App and Camera keys if not security mode - TPhoneCmdParamBoolean isSecurityMode; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode ); - if ( !isSecurityMode.Boolean() ) + if ( !iStateMachine->SecurityMode()->IsSecurityMode() ) { CaptureKeysDuringCallNotificationL( EFalse ); } - - // Restore keylock if phone has been locked before call. - if ( iStateMachine->PhoneStorage()->NeedToEnableKeylock() ) - { - iViewCommandHandle->ExecuteCommandL( EPhoneViewEnableKeyLock ); - iStateMachine->PhoneStorage()->SetNeedToEnableKeylock( EFalse ); - } + + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverAllowed ); } // ----------------------------------------------------------- @@ -3119,6 +4124,8 @@ ESimSecurityStatusUninitialized = KStartupEnumerationFirstValue, ESimRejected, // The PUK code has been entered incorrectly, so the card is rejected. ESimUnaccepted // The SIM lock is on, so the card is unaccepted. + ESimInvalid // The Sim inserted is not same as the one provided by the + // operator, so card is invalid. */ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SimSecurityStatus()" ); return CPhonePubSubProxy::Instance()->Value( @@ -3164,19 +4171,18 @@ TPhoneCmdParamGlobalNote globalNoteParam; globalNoteParam.SetText( callText ); - globalNoteParam.SetType( EPhoneNotificationDialog ); - + globalNoteParam.SetType( EAknGlobalInformationNote ); + globalNoteParam.SetTone( EAvkonSIDInformationTone ); globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> ResolveResourceID( EPhoneCallWaitingWithLabel ) ); - globalNoteParam.SetNotificationDialog( ETrue ); - + iViewCommandHandle->ExecuteCommandL( EPhoneViewShowGlobalNote, &globalNoteParam ); } else { - SendGlobalInfoNoteL( EPhoneCallWaitingWithoutLabel, ETrue ); + SendGlobalInfoNoteL( EPhoneCallWaitingWithoutLabel ); } } @@ -3305,13 +4311,14 @@ EPhoneInfoCugInUse ), cugIndex ); TPhoneCmdParamGlobalNote globalNoteParam; - globalNoteParam.SetText( *buf ); - globalNoteParam.SetType( EPhoneMessageBoxInformation ); - - iViewCommandHandle->ExecuteCommandL( - EPhoneViewShowGlobalNote, &globalNoteParam ); - - CleanupStack::PopAndDestroy( buf ); + globalNoteParam.SetText( *buf ); + globalNoteParam.SetType( EAknGlobalInformationNote ); + globalNoteParam.SetTone( EAvkonSIDInformationTone ); + + iViewCommandHandle->ExecuteCommandL( + EPhoneViewShowGlobalNote, &globalNoteParam ); + + CleanupStack::PopAndDestroy( buf ); } } @@ -3332,13 +4339,128 @@ return iCallHeaderManager; } +// ----------------------------------------------------------------------------- +// CPhoneState::CloseCustomizedDialerL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneState::CloseCustomizedDialerL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::CloseCustomizedDialerL( ) "); + // Set dialer back to default mode. + iViewCommandHandle->HandleCommandL( EPhoneViewHideCustomizedDialer ); + CloseClearNumberEntryAndLoadEffectL( ENumberEntryClose ); + } + +// ----------------------------------------------------------------------------- +// CPhoneState::CustomizedDialerMenuResourceId +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPhoneState::CustomizedDialerMenuResourceIdL() + { + __LOGMETHODSTARTEND(EPhoneControl, + "CPhoneState::CustomizedDialerMenuResourceId( ) "); + // Get and return customized dialer menu resource id + TPhoneCmdParamInteger integerParam; + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCustomizedDialerMenuResourceId, + &integerParam ); + return integerParam.Integer(); + } + +// ----------------------------------------------------------------------------- +// CPhoneState::CustomizedDialerCbaResourceId +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPhoneState::CustomizedDialerCbaResourceIdL() + { + __LOGMETHODSTARTEND(EPhoneControl, + "CPhoneState::CustomizedDialerCbaResourceId( ) "); + // Get and return customized dialer CBA resource id + TPhoneCmdParamInteger integerParam; + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCustomizedDialerCbaResourceId, + &integerParam ); + return integerParam.Integer(); + } + +// ----------------------------------------------------------- +// CPhoneState::ShowDtmfDialerL +// ----------------------------------------------------------- +// +void CPhoneState::ShowDtmfDialerL() + { + __LOGMETHODSTARTEND(EPhoneControl, + "CPhoneState::ShowDtmfDialerL()" ); + + // Set dialer to DTMF mode. + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfDialerViewVisible, + &booleanParam ); + BeginTransEffectLC( ECallUiDisappear ); + if ( IsNumberEntryUsedL() ) + { + // Store the number entry content to cache + if ( !IsNumberEntryContentStored() ) + { + StoreNumberEntryContentL(); + } + // Clear and display DTMF dialer + NumberEntryClearL(); + SetNumberEntryVisibilityL(ETrue); + } + else + { + // Create and display DTMF dialer + NumberEntryManagerL()->CreateNumberEntryL(); + } + EndTransEffect(); + + // Update CBA + iCbaManager->UpdateInCallCbaL(); + + if( EPSCTsyCallStateDialling == + CPhonePubSubProxy::Instance()->Value(KPSUidCtsyCallInformation, KCTsyCallState ) ) + { + // Call indicator update to ensure that small call + // bubble is shown in dtmf dialer during dialing + // call this needs to be done because when call is + // initialized small call bubble visibility is set to false. + UpdateIncallIndicatorL(EPSCTsyCallStateDialling); + } + } + // ----------------------------------------------------------- // CPhoneState::CheckIfRestoreNEContentAfterDtmfDialer // ----------------------------------------------------------- // EXPORT_C void CPhoneState::CheckIfRestoreNEContentAfterDtmfDialer() { - + if ( IsOnScreenDialerSupported() ) + { + TBool isDialerVisible( EFalse ); + TRAP_IGNORE( isDialerVisible = IsDTMFEditorVisibleL() ); + + if ( isDialerVisible ) + { + TRAP_IGNORE( CloseDTMFEditorL() ); + } + + // if the DTMF dialer is used before the idle message, we have to + // restore the original content of the number entry + if ( IsNumberEntryContentStored() ) + { + TBool isNumberEntryUsed( EFalse ); + TRAP_IGNORE( isNumberEntryUsed = IsNumberEntryUsedL() ); + + if ( !isNumberEntryUsed ) + { + TRAP_IGNORE( NumberEntryManagerL()->CreateNumberEntryL() ); + } + // Restore the number entry content from cache + TRAP_IGNORE( RestoreNumberEntryContentL() ); + } + } } // ----------------------------------------------------------- @@ -3360,7 +4482,7 @@ __PHONELOG1( EBasic, EPhoneControl, "CPhoneState::LoadResource - aResource: %d", aResource ); StringLoader::Load( aData, CPhoneMainResourceResolver::Instance()->ResolveResourceID( aResource ), - &iEnv ); + EikonEnv() ); } // ----------------------------------------------------------- @@ -3430,6 +4552,17 @@ } // ----------------------------------------------------------- +// CPhoneState::KeyEventForExistingNumberEntryL +// ----------------------------------------------------------- +// +void CPhoneState::KeyEventForExistingNumberEntryL( const TKeyEvent& aKeyEvent, + TEventCode aEventCode ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::KeyEventForExistingNumberEntryL( ) "); + NumberEntryManagerL()->KeyEventForExistingNumberEntryL( aKeyEvent, aEventCode ); + } + +// ----------------------------------------------------------- // CPhoneState::HandleNumberEntryClearedL // ----------------------------------------------------------- // @@ -3455,6 +4588,17 @@ NumberEntryManagerL()->SetNumberEntryVisibilityL( booleanParam ); } +// --------------------------------------------------------- +// CPhoneState::HandleCreateNumberEntryL +// --------------------------------------------------------- +// +EXPORT_C void CPhoneState::HandleCreateNumberEntryL( + const TKeyEvent& /*aKeyEvent*/, + TEventCode /*aEventCode*/ ) + { + NumberEntryManagerL()->HandleCreateNumberEntryL(); + } + // ----------------------------------------------------------- // CPhoneState::IsNumberEntryContentStored // ----------------------------------------------------------- @@ -3476,6 +4620,15 @@ } // ----------------------------------------------------------- +// CPhoneState::RestoreNumberEntryContentL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::RestoreNumberEntryContentL() + { + NumberEntryManagerL()->RestoreNumberEntryContentL(); + } + +// ----------------------------------------------------------- // CPhoneState::ClearNumberEntryContentCache // ----------------------------------------------------------- // @@ -3484,6 +4637,16 @@ TRAP_IGNORE( NumberEntryManagerL()->ClearNumberEntryContentCache() ); } +// ----------------------------------------------------------- +// CPhoneState::HandleNumberEntryEdited +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::HandleNumberEntryEdited() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::HandleNumberEntryEdited() "); + TRAP_IGNORE( NumberEntryManagerL()->HandleNumberEntryEdited() ); + } + // ----------------------------------------------------------------------------- // CPhoneState::IsAlphanumericSupportedAndCharInput // ----------------------------------------------------------------------------- @@ -3516,205 +4679,45 @@ { NumberEntryManagerL()->NumberEntryClearL(); } - -// ----------------------------------------------------------- -// CPhoneState::GetBlockedKeyList -// ----------------------------------------------------------- -// -EXPORT_C const RArray& CPhoneState::GetBlockedKeyList() const - { - __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::GetBlockedKeyList( ) "); - return iStateMachine->PhoneStorage()->GetBlockedKeyList(); - } - -// ----------------------------------------------------------- -// CPhoneState::DisableHWKeysL + // ----------------------------------------------------------- -// -EXPORT_C void CPhoneState::DisableHWKeysL() - { - __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisableHWKeysL( ) "); - - if( iStateMachine->PhoneStorage()->IsBlockedKeysListEmpty() ) - { - __PHONELOG( EBasic, EPhoneControl, " CPhoneState::DisableHWKeysL HW Keys Disabled " ); - - iStateMachine->PhoneStorage()->AppendBlockedKeysListL( EStdKeyNo ); - iStateMachine->PhoneStorage()->AppendBlockedKeysListL( EStdKeyYes ); - } - } - -// ----------------------------------------------------------- -// CPhoneState::DisableCallUIL +// CPhoneState::UpdateSilenceButtonDimming // ----------------------------------------------------------- // -EXPORT_C void CPhoneState::DisableCallUIL() - { - __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisableCallUIL( ) "); - - // Set Call UI state to storage - if( !iStateMachine->PhoneStorage()->IsScreenLocked() ) - { - __PHONELOG( EBasic, EPhoneControl, " CPhoneState::DisableCallUIL CallUI Disabled " ); - - // Show keys locked note - TPhoneCmdParamNote noteParam; - noteParam.SetType( EPhoneNoteUIDisabled ); - noteParam.SetResourceId( CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneInformationNote ) ); - - HBufC* noteText = StringLoader::LoadLC( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneIncomingCallKeysLocked ) ); - noteParam.SetText( *noteText ); - - iViewCommandHandle->ExecuteCommandL( EPhoneViewShowNote, ¬eParam ); - CleanupStack::PopAndDestroy( noteText ); - - // Start capturing the key guard key - TPhoneCmdParamKeyCapture appKeyCaptureParam; - appKeyCaptureParam.SetKey( EStdKeyDevice7 ); - appKeyCaptureParam.SetKeyCode( EKeyDeviceF ); - appKeyCaptureParam.SetCaptureType( EPhoneKeyAllEvents ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewStartCapturingKey, &appKeyCaptureParam ); - - // Set Call UI state to storage - iStateMachine->PhoneStorage()->SetScreenLocked( ETrue ); - } - } - -// ----------------------------------------------------------- -// CPhoneState::EnableCallUIL -// ----------------------------------------------------------- -// -EXPORT_C void CPhoneState::EnableCallUIL() +EXPORT_C void CPhoneState::UpdateSilenceButtonDimming() { - __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::EnableCallUIL( ) "); - - if( iStateMachine->PhoneStorage()->IsScreenLocked() ) + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { - __PHONELOG( EBasic, EPhoneControl, " CPhoneState::EnableCallUIL CallUI Enabled " ); - - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewDisableKeyLockWithoutNote ); - - // Stop capturing the key guard key - TPhoneCmdParamKeyCapture appKeyCaptureParam; - appKeyCaptureParam.SetKey( EStdKeyDevice7 ); - appKeyCaptureParam.SetKeyCode( EKeyDeviceF ); - appKeyCaptureParam.SetCaptureType( EPhoneKeyAllEvents ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewStopCapturingKey, &appKeyCaptureParam ); + const TProfileRingingType ringingType = + iStateMachine->PhoneEngineInfo()->RingingType(); - iStateMachine->PhoneStorage()->SetScreenLocked( EFalse ); - } - } - -// ----------------------------------------------------------- -// CPhoneState::CheckDisableHWKeysAndCallUIL -// ----------------------------------------------------------- -// -EXPORT_C void CPhoneState::CheckDisableHWKeysAndCallUIL() - { - __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneState::CheckDisableHWKeysAndCallUIL( ) "); - - if( IsKeyLockOn() || IsAutoLockOn() ) - { - // Disable HW keys if needed - if( CPhoneCenRepProxy::Instance()-> - IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) ) + TBool callIsAlerting = + !(( ringingType == EProfileRingingTypeSilent ) || + ( ringingType == EProfileRingingTypeBeepOnce )); + + if ( !callIsAlerting ) { - DisableHWKeysL(); - } - - // Disable Call UI if needed - if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) - && !CPhoneCenRepProxy::Instance()-> - IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) ) - { - DisableCallUIL(); - iStateMachine->PhoneStorage()->SetNeedToEnableKeylock( ETrue ); + SetTouchPaneButtonDisabled( EPhoneCallComingCmdSilent ); } } } - -// ----------------------------------------------------------- -// CPhoneState::HandleHoldSwitchL -// ----------------------------------------------------------- -// -EXPORT_C void CPhoneState::HandleHoldSwitchL() - { - __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneState::HandleHoldSwitchL( ) "); - - if( CPhoneCenRepProxy::Instance()-> - IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) ) - { - if( iStateMachine->PhoneStorage()->IsBlockedKeysListEmpty() ) - { - // Disable HW Keys if needed - DisableHWKeysL(); - } - else - { - // Reset blocked keys list - iStateMachine->PhoneStorage()->ResetBlockedKeysList(); - } - } - - if( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) - && !CPhoneCenRepProxy::Instance()-> - IsTelephonyFeatureSupported( KTelephonyLVFlagAllowUnlockOnIncoming ) ) - { - if( iStateMachine->PhoneStorage()->IsScreenLocked() ) - { - // Enable Call - EnableCallUIL(); - } - else - { - // Set keylock enabled - iViewCommandHandle->ExecuteCommandL( EPhoneViewEnableKeyLockWithoutNote ); - // Disable Call - DisableCallUIL(); - } - } - - // Stop ringingtone - iViewCommandHandle->ExecuteCommandL( EPhoneViewStopRingTone ); - } - -// ----------------------------------------------------------- -// CPhoneState::RetainPreviousKeylockStateL -// ----------------------------------------------------------- -// -EXPORT_C void CPhoneState::RetainPreviousKeylockStateL() - { - // Lock keypad, if keylock was enabled before incoming call. - // Also reset PhoneStorage keylock status. - if ( FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) && - iStateMachine->PhoneStorage()->NeedToEnableKeylock() ) - { - iStateMachine->PhoneStorage()->SetNeedToEnableKeylock( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewEnableKeyLockWithoutNote ); - } - } - + // --------------------------------------------------------- -// CPhoneState::HandleKeyLockEnabledL +// CPhoneState::SetToolbarDimming // --------------------------------------------------------- // -EXPORT_C void CPhoneState::HandleKeyLockEnabled( TBool aKeylockEnabled ) +EXPORT_C void CPhoneState::SetToolbarDimming( TBool aDimmed ) { - __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::HandleKeyLockEnabledL( ) "); - if( !FeatureManager::FeatureSupported( KFeatureIdFfTouchUnlockStroke ) - && CPhoneCenRepProxy::Instance()-> - IsTelephonyFeatureSupported( KTelephonyLVFlagDisableCallControlHardKeysWhileLocked ) ) + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { - if( !aKeylockEnabled ) - { - // Keylock disabled - // Reset blocked keys list - iStateMachine->PhoneStorage()->ResetBlockedKeysList(); - } + // Check that we are not undimming toolbar in security mode + if ( !( !aDimmed && iStateMachine->SecurityMode()->IsSecurityMode() ) ) + { + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( aDimmed ); + TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetToolbarDimming, &booleanParam )); + } } } @@ -3728,75 +4731,207 @@ { TPhoneCmdParamInteger integerParam; integerParam.SetInteger( EPhoneInCallCmdActivateIhf ); - TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( - EPhoneViewEnableToolbarButton, &integerParam )); + iViewCommandHandle->ExecuteCommand( + EPhoneViewEnableToolbarButton, &integerParam ); + } + } + +// --------------------------------------------------------- +// CPhoneState::SetToolbarButtonHandsetEnabled +// --------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetToolbarButtonHandsetEnabled() + { + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + { + TPhoneCmdParamInteger integerParam; + integerParam.SetInteger( EPhoneInCallCmdHandset ); + iViewCommandHandle->ExecuteCommand( + EPhoneViewEnableToolbarButton, &integerParam ); + } + } + +// --------------------------------------------------------- +// CPhoneState::SetToolbarButtonBTHFEnabled +// --------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetToolbarButtonBTHFEnabled() + { + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + { + TPhoneCmdParamInteger integerParam; + integerParam.SetInteger( EPhoneInCallCmdBtHandsfree ); + iViewCommandHandle->ExecuteCommand( + EPhoneViewEnableToolbarButton, &integerParam ); } } // --------------------------------------------------------- -// CPhoneState::SetBackButtonActive +// CPhoneState::HandleEasyDialingCommandsL // --------------------------------------------------------- // -EXPORT_C void CPhoneState::SetBackButtonActive( TBool aActive ) +void CPhoneState::HandleEasyDialingCommandsL( TInt aCommandId ) { - if(IsAutoLockOn() && aActive) { - // keep back button dimmed device lock case - return; - } - - if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) + switch ( aCommandId ) { - TPhoneCmdParamBoolean booleanParam; - booleanParam.SetBoolean( aActive ); - iViewCommandHandle->ExecuteCommand( - EPhoneViewBackButtonActive, &booleanParam ); + case EPhoneCmdUpdateCba: + iCbaManager->UpdateInCallCbaL(); + break; + + case EPhoneDialerValidNumber: + { + TPhoneCmdParamBoolean command; + command.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetInvalidCsPhoneNumberFlag, &command ); + } + break; + + case EPhoneDialerInvalidNumber: + { + TPhoneCmdParamBoolean command; + command.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetInvalidCsPhoneNumberFlag, &command ); + } + break; + + case EPhoneCmdBlockingDialogLaunched: + { + TPhoneCmdParamBoolean param; + param.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetBlockingDialogStatus, ¶m ); + } + break; + + case EPhoneCmdBlockingDialogClosed: + { + TPhoneCmdParamBoolean param; + param.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetBlockingDialogStatus, ¶m ); + } + break; + + default: + break; } } // ----------------------------------------------------------- -// CPhoneState::OpenSoftRejectMessageEditorL +// CPhoneState::ForwardPEMessageToPhoneCustomizationL +// Forward Phone Engine messages to Phone customization +// (other items were commented in a header). +// ----------------------------------------------------------- +// +EXPORT_C TBool CPhoneState::ForwardPEMessageToPhoneCustomizationL( + const TInt aMessage, + TInt aCallId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::ForwardPEMessageToPhoneCustomizationL() " ); + TBool handled = EFalse; + + if ( iCustomization ) + { + handled = iCustomization->HandlePhoneEngineMessageL( aMessage, aCallId ); + } + return handled; + } + +// ----------------------------------------------------------- +// CPhoneState::SetLittleBubbleVisibilityL +// ----------------------------------------------------------- +// +void CPhoneState::SetLittleBubbleVisibilityL( + TPhoneCommandParam* aCommandParam) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::SetLittleBubbleVisibilityL() " ); + // If user has opened dtmfeditor(dtmfdialer) then do not make any changes + // to SetLittleBubbleVisible value. SetLittleBubbleVisible value is true by default. + if( !IsDTMFEditorVisibleL() ) + { + TPhoneCmdParamIncallIndicatorData* incallIndicatorParam = + static_cast( aCommandParam ); + TInt activeCallId = GetActiveCallIdL(); + switch( incallIndicatorParam->CallState() ) + { + case EPSCTsyCallStateRinging: + case EPSCTsyCallStateDialling: + { + // If we have single ringing or dialling call then it is ok + // to set visibility to false. + if ( activeCallId < KErrNone ) + { + incallIndicatorParam->SetLittleBubbleVisible( EFalse ); + } + } + break; + default: + incallIndicatorParam->SetLittleBubbleVisible( ETrue ); + break; + } + } + } + +// ----------------------------------------------------------- +// CPhoneState::DisplayCallSetupL // ----------------------------------------------------------- // -EXPORT_C void CPhoneState::OpenSoftRejectMessageEditorL() +EXPORT_C void CPhoneState::DisplayCallSetupL( TInt aCallId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneState::DisplayCallSetupL() "); + BeginTransEffectLC( ECallUiAppear ); + BeginUiUpdateLC(); + SetNumberEntryVisibilityL( EFalse ); + CaptureKeysDuringCallNotificationL( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); + TPhoneCmdParamInteger uidParam; + uidParam.SetInteger( KUidPhoneApplication.iUid ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground, + &uidParam ); + // Do state-specific operations. + DoStateSpecificCallSetUpDefinitionsL(); + DisplayHeaderForOutgoingCallL(aCallId); + EndUiUpdate(); + EndTransEffect(); + iCbaManager->UpdateCbaL(EPhoneCallHandlingCallSetupCBA); + } + +// ----------------------------------------------------------- +// Sends command to viewcontroller to store the flag +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::SetNeedToReturnToForegroundAppStatusL( + TBool aNeedToReturn ) { - __LOGMETHODSTARTEND(EPhoneControl, - "CPhoneState::OpenSoftRejectMessageEditorL ()" ); - - // Fetch incoming call's id from view - TPhoneCmdParamCallStateData callStateData; - callStateData.SetCallState( EPEStateRinging ); - iViewCommandHandle->HandleCommandL( - EPhoneViewGetCallIdByState, &callStateData ); - - TInt ringingCallId( KErrNotFound ); - // Do nothing if negative incoming call id - if( callStateData.CallId() > KErrNotFound ) - { - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveQuery ); - - ringingCallId = callStateData.CallId(); - } - - - TPhoneCmdParamSfiData sfiDataParam; - - if (KErrNotFound != ringingCallId) - { - if ( iStateMachine->PhoneEngineInfo()->RemoteName( ringingCallId ).Length() ) - { - // store both the name and the number - sfiDataParam.SetNumber( iStateMachine->PhoneEngineInfo()->RemotePhoneNumber( ringingCallId ) ); - sfiDataParam.SetName( iStateMachine->PhoneEngineInfo()->RemoteName( ringingCallId ) ); - } - else - { - // store the number - sfiDataParam.SetNumber( iStateMachine->PhoneEngineInfo()->RemotePhoneNumber( ringingCallId ) ); - } - } - - iViewCommandHandle->ExecuteCommandL( - EPhoneViewOpenSoftRejectEditor, &sfiDataParam ); + TPhoneCmdParamBoolean booleanParam; + booleanParam.SetBoolean( aNeedToReturn ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewSetNeedToReturnToForegroundAppStatus, + &booleanParam ); + } + +// ----------------------------------------------------------- +// CPhoneState::DoStateSpecificCallSetUpDefinitionsL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::DoStateSpecificCallSetUpDefinitionsL() + { + // do nothing + } + +// ----------------------------------------------------------- +// CPhoneState::CloseClearNumberEntryAndLoadEffect +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneState::CloseClearNumberEntryAndLoadEffectL( + TStateTransEffectType aType ) + { + __LOGMETHODSTARTEND( EPhoneControl, + "CPhoneState::CloseClearNumberEntryAndLoadEffectL() "); + BeginTransEffectLC( aType ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + EndTransEffect(); + // Do state-specific operation when number entry is cleared + HandleNumberEntryClearedL(); } // End of File