# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1279208296 -10800 # Node ID 94dc1107e8b2813743549341237838a2cedd709c # Parent 3c221667e68752a923eedd65ee2d333ed5652674 Revision: 201025 Kit: 2010127 diff -r 3c221667e687 -r 94dc1107e8b2 phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh --- a/phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh Mon Jun 21 15:39:45 2010 +0300 +++ b/phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh Thu Jul 15 18:38:16 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2002-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" @@ -11,10 +11,10 @@ * * Contributors: * -* Description: +* Description: * This file contains declarations for commands of PhoneAppS60. * The file can be included in C++ or resource file. -* +* * */ @@ -28,7 +28,7 @@ // CONSTANTS #define KPhoneCmdBase 6000 -enum +enum { // commands for all EPhoneCmdDoNothing = KPhoneCmdBase, @@ -132,13 +132,13 @@ EPhoneInCallCmdCancelSendingDtmfString, EPhoneInCallCmdContinueSendingDtmfString, EPhoneInCallCmdVoiceMode, - EPhoneInCallCmdSendToCallerMenu, + EPhoneInCallCmdSendToCallerMenu, EPhoneInCallCmdSendNew, EPhoneInCallCmdSendFile, EPhoneInCallCmdProcessSend, // NOT IN MENU! EPhoneInCallCmdDrop, EPhoneInCallCmdPrivate, - EPhoneInCallCmdCbaJoin, // NOT IN MENU! + EPhoneInCallCmdCbaJoin, // NOT IN MENU! EPhoneInCallCmdDialer, // Enable video @@ -160,7 +160,7 @@ EPhoneInCallCmdNewCallCall, EPhoneInCallCmdGoToIdle, EPhoneInCallCmdParticipants, - + // CDMA specific EPhoneInCallCmdMulticall3WayCall, EPhoneInCallCmdMulticallIgnore, @@ -181,12 +181,12 @@ EPhoneCmdSettingsUiExit, // Settings GUI - Data Parameters GUI (commands specific to DataParameters) EPhoneCmdDataParametersRestoreSettings, - EPhoneCmdRelease, + EPhoneCmdRelease, // DTMF specific EPhoneCmdDtmfSearch, EPhoneCmdDtmfOk, EPhoneCmdDtmfSpeedDialOk, - EPhoneInCallCmdDtmfListViewSearch, + EPhoneInCallCmdDtmfListViewSearch, // other commands EPhoneCmdWaitNoteOk, EPhoneCmdVideoCallMemoryLowNoteDismissed, @@ -196,7 +196,7 @@ EPhoneCmdYesSwitchToVideo, EPhoneCmdNoSwitchToVideo, EPhoneCmdYesSwitchToVoice, - EPhoneCmdNoSwitchToVoice, + EPhoneCmdNoSwitchToVoice, EPhoneMediatorSetPhoneNumber, EPhoneCmdCoverUiShowMultimediaRingingTone, EPhoneInCallCmdLockKeypad, @@ -204,17 +204,17 @@ EPhoneCmdYesVideoFailedNoMemorySwitchToVoice, EPhoneCmdNoVideoFailedNoMemorySwitchToVoice, EPhoneInCallCmdSetVolumeLevel, - + //Dialer commands EPhoneDialerCmdLog, EPhoneDialerCmdContacts, - EPhoneDialerCmdClear, + EPhoneDialerCmdClear, EPhoneDialerCallHandling, EPhoneDialerCmdTouchInput, EPhoneDialerCmdSpeedDial, EPhoneDialerCmdEditText, - EPhoneDialerCallSettings, - EPhoneDtmfDialerCancel, + EPhoneDialerCallSettings, + EPhoneDtmfDialerCancel, EPhoneDtmfDialerExit, EPhoneIsDTMFDialerVisible, EPhoneDialerCmdHelp, @@ -232,10 +232,13 @@ EPhoneCmdBlockingDialogLaunched, EPhoneCmdBlockingDialogClosed, + // Update cba in case of emergency call + EPhoneCmdUpdateEmergencyCba, + EPhoneCmdLast }; - - + + // Command range for custom menu commands. // Custom commands can be used for menu extensions. #define KPhoneCustomCmdBase 8000 diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h --- a/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h Thu Jul 15 18:38:16 2010 +0300 @@ -186,7 +186,7 @@ /** * Convert key code */ - void ConvertKeyCode( TUint& aCode, const TKeyEvent& aKeyEvent ); + void ConvertKeyCodeL( TUint& aCode, const TKeyEvent& aKeyEvent ); /** * Handle key long press @@ -197,7 +197,7 @@ * Checks from the statemachine is the given keyevent * one which produces a legal character in the current mode. */ - TBool IsKeyAllowed( const TKeyEvent& aKeyEvent ); + TBool IsKeyAllowedL( const TKeyEvent& aKeyEvent ); /** * Checks is the given key special character (*, 0, # ) from half-qwerty @@ -297,6 +297,13 @@ */ TBool iVirtualKeyBoardOpen; + + /** + * Indicates if menu or dialog was displayed + * when the key was pressed down. + */ + TBool iDisplayingMenuOrDialogOnEventKeyDown; + /** * Application menu. * Not owned. diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuicontrol/inc/cphonestateidle.h --- a/phoneapp/phoneuicontrol/inc/cphonestateidle.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuicontrol/inc/cphonestateidle.h Thu Jul 15 18:38:16 2010 +0300 @@ -230,6 +230,12 @@ */ TBool IsBubbleInitialized(); + /** + * Removes NE and sets idle to background, for more detailed + * information check comments from implementation. + */ + void RemoveNumberEntryAndSetIdleToBackgroundIfNeededL(); + private: // New functions /** @@ -317,6 +323,12 @@ TInt GetNumberAcqMenuIdL(); /** + * Sets UI elements to correct state and launches + * call header to screen by calling DisplayCallSetupL. + */ + void ShowCallHandlingViewL( TInt aCallId ); + + /** * Launches initializing call bubble. */ void DisplayInitializingCallL( TInt aCallId ); @@ -338,8 +350,6 @@ void ChangeTo( TInt aState ); private: - // indicates that incomming call is arrived. - TBool iIncommingCall; // Indicates call bubble is already initiliazed. TBool iBubbleInitialized; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp --- a/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -174,7 +174,7 @@ // Open number entry view if any allowed character key // is pressed on homescreen or in-call ui - if ( aType != EEventKeyUp && IsKeyAllowed( keyEvent ) ) + if ( aType != EEventKeyUp && IsKeyAllowedL( keyEvent ) ) { // Do not open number entry with up key iStateMachine->State()->HandleCreateNumberEntryL( keyEvent, aType ); @@ -252,13 +252,13 @@ } // ----------------------------------------------------------------------------- -// CPhoneKeyEventForwarder::IsAlphaNumericKey +// CPhoneKeyEventForwarder::IsKeyAllowedL // ----------------------------------------------------------------------------- // -TBool CPhoneKeyEventForwarder::IsKeyAllowed( const TKeyEvent& aKeyEvent ) +TBool CPhoneKeyEventForwarder::IsKeyAllowedL( const TKeyEvent& aKeyEvent ) { __LOGMETHODSTARTEND( EPhoneControl, - "CPhoneKeyEventForwarder::IsAlphaNumericKey"); + "CPhoneKeyEventForwarder::IsKeyAllowedL"); TKeyEvent keyEvent( aKeyEvent ); @@ -428,14 +428,20 @@ if ( EEventKeyUp == aType && EKeyNull != iKeyPressedDown ) { - // Handle short key press - iStateMachine->State()->HandleKeyMessageL( - MPhoneKeyEvents::EPhoneKeyShortPress, - TKeyCode( iKeyPressedDown ) ); - + // EKeyEnter is always offered to Telephony so don´t offer it + // to state if there is menu or a dialog open. + if ( !( EKeyEnter == iKeyPressedDown + && iDisplayingMenuOrDialogOnEventKeyDown ) ) + { + // Handle short key press + iStateMachine->State()->HandleKeyMessageL( + MPhoneKeyEvents::EPhoneKeyShortPress, + TKeyCode( iKeyPressedDown ) ); + } // Reset key code iScanCode = EStdKeyNull; iKeyPressedDown = EKeyNull; + iDisplayingMenuOrDialogOnEventKeyDown = EFalse; } return EKeyWasNotConsumed; @@ -478,7 +484,7 @@ "CPhoneKeyEventForwarder::HandleEventKeyDownBeforeControlStackL"); // Convert key code - ConvertKeyCode( iKeyPressedDown, aKeyEvent ); + ConvertKeyCodeL( iKeyPressedDown, aKeyEvent ); // Save key scan code iScanCode = aKeyEvent.iScanCode; @@ -520,7 +526,15 @@ this ) ); } - return ( EKeyWasNotConsumed ); + // Check if dialog or menu is open + // EikAppUi()->IsDisplayingMenuOrDialog doesn´t always return correct + // value for menubar, so ask visibility also from CEikMenuBar + iDisplayingMenuOrDialogOnEventKeyDown = ( iViewCommandHandle->HandleCommandL( + EPhoneViewIsDisplayingMenuOrDialog ) == + EPhoneViewResponseSuccess ) || ( iMenu && iMenu->IsDisplayed() ); + + // Consume dialer simulated key events, pass others on + return ( IsKeySimulatedByTouchDialer( aKeyEvent ) ? EKeyWasConsumed : EKeyWasNotConsumed ); } // ----------------------------------------------------------- @@ -631,7 +645,8 @@ // Store the previous scan code iPreviousScanCode = iScanCode; - return EKeyWasNotConsumed; + // Consume dialer simulated key events, pass others on + return ( IsKeySimulatedByTouchDialer( aKeyEvent ) ? EKeyWasConsumed : EKeyWasNotConsumed ); } // --------------------------------------------------------- @@ -699,19 +714,19 @@ } // ----------------------------------------------------------- -// CPhoneKeyEventForwarder::ConvertKeyCode +// CPhoneKeyEventForwarder::ConvertKeyCodeL // ----------------------------------------------------------- // -void CPhoneKeyEventForwarder::ConvertKeyCode( TUint& aCode, +void CPhoneKeyEventForwarder::ConvertKeyCodeL( TUint& aCode, const TKeyEvent& aKeyEvent ) { __LOGMETHODSTARTEND( EPhoneControl, - "CPhoneKeyEventForwarder::ConvertKeyCode"); + "CPhoneKeyEventForwarder::ConvertKeyCodeL"); // Handler for special device key mapping in case iScanCode // to iCode conversion hasn't been handled by CAknAppUi::GetAliasKeyCodeL __PHONELOG1( EBasic, EPhoneControl, - "CPhoneKeyEventHandler::ConvertKeyCode scan code (%d)", + "CPhoneKeyEventHandler::ConvertKeyCodeL scan code (%d)", aKeyEvent.iScanCode ); if ( !ConvertHalfQwertySpecialChar( aCode, aKeyEvent ) ) @@ -743,6 +758,7 @@ case EStdKeyYes: aCode = EKeyYes; break; + case EStdKeyEnd: // End key is emulated if the device has combined power and end key case EStdKeyNo: aCode = EKeyNo; break; @@ -766,7 +782,7 @@ } __PHONELOG1( EBasic, EPhoneControl, - "CPhoneKeyEventHandler::ConvertKeyCode aCode (%d)", aCode ); + "CPhoneKeyEventHandler::ConvertKeyCodeL aCode (%d)", aCode ); } // End of File diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuicontrol/src/cphonenumberentrymanager.cpp --- a/phoneapp/phoneuicontrol/src/cphonenumberentrymanager.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonenumberentrymanager.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -67,7 +67,7 @@ iStateMachine ( aStateMachine ), iCustomization ( aCustomization ), iCbaManager ( aCbaManager ), - iEnv( *CEikonEnv::Static() ) + iEnv( *CEikonEnv::Static() ) // codescanner::eikonenvstatic { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::CPhoneNumberEntryManager() "); } @@ -478,9 +478,12 @@ const TKeyEvent& aKeyEvent ) const { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput( ) "); - TBool ret = ( iViewCommandHandle.HandleCommandL( EPhoneViewIsNumberEntryNumericMode ) - != EPhoneViewResponseSuccess ) - && + + TBool numericMode = EFalse; + TRAP_IGNORE( numericMode = ( iViewCommandHandle.HandleCommandL( EPhoneViewIsNumberEntryNumericMode ) + == EPhoneViewResponseSuccess ) ); + + TBool ret = !numericMode && ( ( aKeyEvent.iScanCode >= KPhoneKeyStart && aKeyEvent.iScanCode <= KPhoneKeyEnd ) || aKeyEvent.iModifiers & EModifierSpecial ); diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuicontrol/src/cphonestateidle.cpp --- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -76,7 +76,8 @@ MPhoneStateMachine* aStateMachine, MPhoneViewCommandHandle* aViewCommandHandle, MPhoneCustomization* aCustomization ) : - CPhoneState( aStateMachine, aViewCommandHandle, aCustomization ) + CPhoneState( aStateMachine, aViewCommandHandle, aCustomization ), + iBubbleInitialized( EFalse ) { } @@ -480,32 +481,45 @@ EXPORT_C void CPhoneStateIdle::HandleDialingL( TInt aCallId ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::HandleDialingL( ) "); + if( IsBubbleInitialized() ) + { + UpdateCallBubbleL( aCallId ); + } + else + { + ShowCallHandlingViewL( aCallId ); + } + ChangeTo( EPhoneStateCallSetup ); + } +// ----------------------------------------------------------- +// CPhoneStateIdle::ShowCallHandlingViewL +// ----------------------------------------------------------- +// +void CPhoneStateIdle::ShowCallHandlingViewL( TInt aCallId ) + { + __LOGMETHODSTARTEND(EPhoneControl, + "CPhoneStateIdle::ShowCallHandlingViewL( ) "); BeginUiUpdateLC(); - SetNumberEntryVisibilityL(EFalse); // Show call setup buttons SetTouchPaneButtons( EPhoneCallSetupButtons ); - SetTouchPaneButtonDisabled( EPhoneInCallCmdHold ); - + SetTouchPaneButtonDisabled( EPhoneInCallCmdHold ); + // Display call setup - DisplayCallSetupL( aCallId ); - + DisplayCallSetupL( aCallId ); EndUiUpdate(); // Remove any phone dialogs if they are displayed iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - + // Go to call setup state iCbaManager->UpdateCbaL( EPhoneCallHandlingCallSetupCBA ); SetToolbarDimming( ETrue ); - SetToolbarButtonLoudspeakerEnabled(); SetToolbarButtonHandsetEnabled(); - - ChangeTo( EPhoneStateCallSetup ); } // ----------------------------------------------------------- @@ -831,12 +845,19 @@ // Set Phone as the top application iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication, &uidParam ); - - if ( !UpdateCallBubbleL( aCallId ) ) + + if( !IsBubbleInitialized() ) { // Create and Display call setup header if update was not done. DisplayHeaderForOutgoingCallL( aCallId ); } + else + { + /* Create and Display initializing call header, difference + to DisplayHeaderForOutgoingCallL is that this doesnt load + CLI information to header.*/ + DisplayHeaderForInitializingCallL( aCallId ); + } } // ----------------------------------------------------------- @@ -884,40 +905,7 @@ iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageCheckEmergencyNumber ); if ( IsBubbleInitialized() ) { - BeginUiUpdateLC(); - - SetNumberEntryVisibilityL(EFalse); - - // Show call setup buttons - SetTouchPaneButtons( EPhoneCallSetupButtons ); - - // Close menu bar, if it is displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); - - // Capture keys when the phone is dialling - CaptureKeysDuringCallNotificationL( ETrue ); - - // Bring Phone app in the foreground - TPhoneCmdParamInteger uidParam; - uidParam.SetInteger( KUidPhoneApplication.iUid ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground, - &uidParam ); - - // Set Phone as the top application - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication, - &uidParam ); - - DisplayHeaderForInitializingCallL( aCallId ); - - EndUiUpdate(); - - // Remove any phone dialogs if they are displayed - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - - // Go to call setup state - iCbaManager->UpdateCbaL( EPhoneCallHandlingCallSetupCBA ); - - SetToolbarDimming( ETrue ); + ShowCallHandlingViewL( aCallId ); } } @@ -1032,12 +1020,11 @@ // ----------------------------------------------------------- // CPhoneStateIdle::SpeedDialL // ----------------------------------------------------------- -// +// EXPORT_C void CPhoneStateIdle::SpeedDialL( const TUint& aDigit, TDialInitiationMethod aDialMethod ) { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneStateIdle::SpeedDialL( ) "); - iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); TPhoneCmdParamSpeedDial speedDialParam; @@ -1050,29 +1037,43 @@ if ( NULL != phoneNumber && KNullDesC() != *phoneNumber ) { DialL( *phoneNumber, speedDialParam.NumberType(), aDialMethod ); - - if ( IsNumberEntryUsedL() ) - { - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); - - // Set Idle background, if still idle - if ( iStateMachine->State() == this ) - { - SetupIdleScreenInBackgroundL(); - } - } + RemoveNumberEntryAndSetIdleToBackgroundIfNeededL(); } else { // User cancelled dialog or didn't give a valid number SpeedDialCanceledL( aDigit ); } - CleanupStack::PopAndDestroy( phoneNumber ); } // ----------------------------------------------------------- -// CPhoneStateIdle:SpeedDialCanceledL +// CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL +// ----------------------------------------------------------- +// +void CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL() + { + __LOGMETHODSTARTEND(EPhoneControl, + "CPhoneStateIdle::RemoveNumberEntryAndSetIdleToBackgroundIfNeededL( ) "); + if ( IsNumberEntryUsedL() ) + { + /*NE should be removed because if speeddial dial is interupted during + call setup phone should not return to NE/Dialler view.*/ + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + + /*It might be possible that some async operation was ongoing and + state has already in that case do not set idle to background. If + there is initialized call then do not set idle to background.*/ + if ( ( iStateMachine->State() == this ) && + ( !IsBubbleInitialized() ) ) + { + SetupIdleScreenInBackgroundL(); + } + } + } + +// ----------------------------------------------------------- +// CPhoneStateIdle::SpeedDialCanceledL // ----------------------------------------------------------- // EXPORT_C void CPhoneStateIdle::SpeedDialCanceledL( const TUint& aDigit ) @@ -1609,8 +1610,9 @@ __PHONELOG1( EBasic, EPhoneControl, "PhoneUIControl: CPhoneStateIdle::HandleErrorL - aErrorInfo.iCallId =%d ", aErrorInfo.iCallId ); - if( ( ECCPErrorNone != aErrorInfo.iErrorCode ) && - IsBubbleInitialized() ) + if( ( KErrNotFound < aErrorInfo.iCallId ) && + ( ECCPErrorNone != aErrorInfo.iErrorCode ) && + IsBubbleInitialized() ) { HandleInitializingCallErrorL( aErrorInfo.iCallId ); SetBubbleInitialized( EFalse ); diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuistates/src/cphoneemergency.cpp --- a/phoneapp/phoneuistates/src/cphoneemergency.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneemergency.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -45,8 +45,10 @@ // ================= MEMBER FUNCTIONS ======================= +// ----------------------------------------------------------- // C++ default constructor can NOT contain any code, that // might leave. +// ----------------------------------------------------------- // CPhoneEmergency::CPhoneEmergency( MPhoneStateMachine* aStateMachine, @@ -62,7 +64,7 @@ // Destructor // (other items were commented in a header). // ----------------------------------------------------------- - +// CPhoneEmergency::~CPhoneEmergency() { } @@ -183,10 +185,10 @@ } } break; - + case MEngineMonitor::EPEMessageColpNumberAvailable: //Don't show COLP note during emergency call. - break; + break; default: CPhoneGsmInCall::HandlePhoneEngineMessageL( @@ -551,11 +553,11 @@ } } else if ( iStateMachine->SecurityMode()->IsAutolockEnabled() - || SimState() != EPESimUsable - || iStartupInterrupted ) + || SimState() != EPESimUsable + || iStartupInterrupted ) { if ( TouchCallHandlingSupported() ) - { + { resourceId = EPhoneCallHandlingEmergencyInCallNoOptions; } else if ( audioOutput == EPEWiredAudioAccessory || IsSwivelClosed()) @@ -581,8 +583,8 @@ { resourceId = EPhoneCallHandlingEmergencyHandsetCBA; } - else if ( ( audioOutput == EPEHandset ) - && ( btAvailable ) ) + else if ( ( audioOutput == EPEHandset ) + && ( btAvailable ) ) { resourceId = EPhoneCallHandlingInCallBtaaCBA; } @@ -643,10 +645,10 @@ { if ( TouchCallHandlingSupported() ) { - CPhoneGsmInCall::HandleKeyMessageL( aMessage, aCode ); + CPhoneGsmInCall::HandleKeyMessageL( aMessage, aCode ); } else if ( !iStateMachine->SecurityMode()->IsAutolockEnabled() - && SimState() == EPESimUsable ) + && SimState() == EPESimUsable ) { // do base operation CPhoneGsmInCall::HandleKeyMessageL( aMessage, aCode ); @@ -696,6 +698,10 @@ DisconnectEmergencyCallL(); break; + case EPhoneCmdUpdateEmergencyCba: + UpdateInCallCbaL(); + break; + default: commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand ); break; @@ -768,24 +774,24 @@ TEventCode aEventCode ) { __LOGMETHODSTARTEND(EPhoneUIStates, "CPhoneEmergency::HandleKeyEventL( ) "); - + if ( TouchCallHandlingSupported() ) { CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode ); } else { - if ( iStateMachine->SecurityMode()->IsAutolockEnabled() - && CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) ) - { - // Send the key event to the phone engine - SendKeyEventL( aKeyEvent, aEventCode ); - } - else - { - // Handle numeric keys when key events are received in idle state - CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode ); - } + if ( iStateMachine->SecurityMode()->IsAutolockEnabled() + && CPhoneKeys::IsNumericKey( aKeyEvent, aEventCode ) ) + { + // Send the key event to the phone engine + SendKeyEventL( aKeyEvent, aEventCode ); + } + else + { + // Handle numeric keys when key events are received in idle state + CPhoneState::HandleKeyEventL( aKeyEvent, aEventCode ); + } } } @@ -880,8 +886,8 @@ const TPEAudioOutput audioOutput = iStateMachine->PhoneEngineInfo()->AudioOutput(); - if ( !( TouchCallHandlingSupported() ) - && iCallSetup && audioOutput != EPENotActive ) + if ( !( TouchCallHandlingSupported() ) + && iCallSetup && audioOutput != EPENotActive ) { if ( audioOutput == EPELoudspeaker ) { @@ -951,33 +957,33 @@ // -------------------------------------------------------------- // TBool CPhoneEmergency::TouchCallHandlingSupported () const - { - if ( FeatureManager::FeatureSupported ( KFeatureIdTouchCallHandling ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } + { + if ( FeatureManager::FeatureSupported ( KFeatureIdTouchCallHandling ) ) + { + return ETrue; + } + else + { + return EFalse; + } + } // -------------------------------------------------------------- // CPhoneEmergency::UseEmergencyNoIhfCBA // -------------------------------------------------------------- // TBool CPhoneEmergency::UseEmergencyNoIhfCBA( const TPEAudioOutput& aAudioOutput ) const - { - if ( !( TouchCallHandlingSupported() ) - && ( ( aAudioOutput == EPEWiredAudioAccessory ) || ( IsSwivelClosed() ) ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } + { + if ( !( TouchCallHandlingSupported() ) + && ( ( aAudioOutput == EPEWiredAudioAccessory ) || ( IsSwivelClosed() ) ) ) + { + return ETrue; + } + else + { + return EFalse; + } + } // -------------------------------------------------------------- // CPhoneEmergency::UseHandsetEmergencyCBA @@ -985,15 +991,15 @@ // TBool CPhoneEmergency::UseHandsetEmergencyCBA( const TPEAudioOutput& aAudioOutput ) const { - if ( !( TouchCallHandlingSupported() ) - && ( ( aAudioOutput == EPELoudspeaker ) || ( aAudioOutput == EPEBTAudioAccessory ) ) ) - { - return ETrue; - } - else - { - return EFalse; - } + if ( !( TouchCallHandlingSupported() ) + && ( ( aAudioOutput == EPELoudspeaker ) || ( aAudioOutput == EPEBTAudioAccessory ) ) ) + { + return ETrue; + } + else + { + return EFalse; + } } // -------------------------------------------------------------- diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h --- a/phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h Thu Jul 15 18:38:16 2010 +0300 @@ -194,10 +194,10 @@ EPhoneViewPrivateFromConference, /** EPhoneViewSelectedConfMember */ EPhoneViewSelectedConfMember, + /** EPhoneViewGetConferenceListVisibleFlag */ + EPhoneViewGetConferenceListVisibleFlag, /** EPhoneViewOpenConferenceList */ EPhoneViewOpenConferenceList, - /** EPhoneViewGetConferenceListVisibleFlag */ - EPhoneViewGetConferenceListVisibleFlag, /** EPhoneViewGetCallState */ EPhoneViewGetCallState, /** EPhoneViewGetCallIdByState */ @@ -246,10 +246,6 @@ EPhoneViewSetBlockingDialogStatus, /** EPhoneViewSetPhoneNumberAvailableInPhoneEngine */ EPhoneViewSetPhoneNumberAvailableInPhoneEngine, - /** EPhoneViewSetSecurityMode */ - EPhoneViewSetSecurityMode, - /** EPhoneViewGetSecurityModeStatus */ - EPhoneViewGetSecurityModeStatus, /** EPhoneViewSetStatusPaneVisible */ EPhoneViewSetStatusPaneVisible, /** EPhoneViewEnableKeyLock */ @@ -366,12 +362,12 @@ EPhoneViewSetVideoCallDTMFVisibilityFlag, /** EPhoneViewLoadPlugins */ EPhoneViewLoadPlugins, - /** PhoneViewServiceSelection */ - PhoneViewServiceSelection, /** EPhoneViewOpenVirtualKeyBoard */ EPhoneViewOpenVirtualKeyBoard, /** EPhoneViewUpdateNoteSoftkeys */ EPhoneViewUpdateNoteSoftkeys, + /** EPhoneViewSendAiwCommand */ + EPhoneViewSendAiwCommand, /** EPhoneViewShowCustomizedDialer */ EPhoneViewShowCustomizedDialer, /** EPhoneViewHideCustomizedDialer */ @@ -380,6 +376,8 @@ EPhoneViewGetCustomizedDialerMenuResourceId, /** EPhoneViewGetCustomizedDialerCbaResourceId */ EPhoneViewGetCustomizedDialerCbaResourceId, + /** EPhoneViewCipheringInfoChangePlayTone */ + EPhoneViewCipheringInfoChangePlayTone, /** EPhoneViewCreatePhoneBookServices */ EPhoneViewCreatePhoneBookServices, /** EPhoneViewDisableKeyLockWithoutNote */ @@ -404,6 +402,8 @@ EPhoneViewAddContactByString, /** EPhoneViewIsActiveNoteDissmissableByKeyEvent */ EPhoneViewIsActiveNoteDissmissableByKeyEvent, + /** EPhoneViewUpdateContextMenu */ + EPhoneViewUpdateContextMenu, /** EPhoneViewSetNoConnectedCalls */ EPhoneViewSetNoConnectedCalls, /** EPhoneViewIsDTMFEditorVisible */ @@ -430,12 +430,18 @@ EPhoneViewGetNeedToReturnToForegroundAppStatus, /** EPhoneViewSetNeedToReturnToForegroundAppStatus */ EPhoneViewSetNeedToReturnToForegroundAppStatus, + /** EPhoneViewSetConferenceAndWaitingVideo */ + EPhoneViewSetConferenceAndWaitingVideo, + /** EPhoneViewLaunchMultimediaSharing */ + EPhoneViewLaunchMultimediaSharing, /** EPhoneViewGetQwertyModeObserver */ EPhoneViewGetQwertyModeObserver, /** EPhoneViewSetIncallBubbleTrue */ EPhoneViewSetIncallBubbleTrue, /** EPhoneViewSetIncallBubbleFalse */ EPhoneViewSetIncallBubbleFalse, + /** EPhoneViewIsDisplayingMenuOrDialog */ + EPhoneViewIsDisplayingMenuOrDialog, /** , // Don't remove this, this should always be the last in list. */ EPhoneAmountOfCommands }; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp --- a/phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -106,8 +106,8 @@ _STLIT8(K80, "EPhoneViewRemoveFromConference"); _STLIT8(K81, "EPhoneViewPrivateFromConference"); _STLIT8(K82, "EPhoneViewSelectedConfMember"); -_STLIT8(K83, "EPhoneViewOpenConferenceList"); -_STLIT8(K84, "EPhoneViewGetConferenceListVisibleFlag"); +_STLIT8(K83, "EPhoneViewGetConferenceListVisibleFlag"); +_STLIT8(K84, "EPhoneViewOpenConferenceList"); _STLIT8(K85, "EPhoneViewGetCallState"); _STLIT8(K86, "EPhoneViewGetCallIdByState"); _STLIT8(K87, "EPhoneViewMoveHighLightInList"); @@ -132,85 +132,85 @@ _STLIT8(K106, "EPhoneViewSendMessage"); _STLIT8(K107, "EPhoneViewSetBlockingDialogStatus"); _STLIT8(K108, "EPhoneViewSetPhoneNumberAvailableInPhoneEngine"); -_STLIT8(K109, "EPhoneViewSetSecurityMode"); -_STLIT8(K110, "EPhoneViewGetSecurityModeStatus"); -_STLIT8(K111, "EPhoneViewSetStatusPaneVisible"); -_STLIT8(K112, "EPhoneViewEnableKeyLock"); -_STLIT8(K113, "EPhoneViewLaunchFaxModem"); -_STLIT8(K114, "EPhoneViewUpdateFSW"); -_STLIT8(K115, "EPhoneViewIsQuery"); -_STLIT8(K116, "EPhoneViewBringIdleToForeground"); -_STLIT8(K117, "EPhoneViewSetIdleTopApplication"); -_STLIT8(K118, "EPhoneViewBeginUpdate"); -_STLIT8(K119, "EPhoneViewEndUpdate"); -_STLIT8(K120, "EPhoneViewSetConfrenceOptionsFlag"); -_STLIT8(K121, "EPhoneViewRemoveConferenceBubble"); -_STLIT8(K122, "EPhoneViewGetSoftRejectWindowGroupId"); -_STLIT8(K123, "EPhoneViewSetTouchPaneButtons"); -_STLIT8(K124, "EPhoneViewSetTouchPaneVisible"); -_STLIT8(K125, "EPhoneViewEnableTouchButton"); -_STLIT8(K126, "EPhoneViewDisableTouchButton"); -_STLIT8(K127, "EPhoneResetTouchButtons"); -_STLIT8(K128, "EPhoneViewGetIsConferenceInSelectionMode"); -_STLIT8(K129, "EPhoneViewIsStraightCallToVideoMailBox"); -_STLIT8(K130, "EPhoneViewSetDtmfDialerViewVisible"); -_STLIT8(K131, "EPhoneViewSetRestrictedDialer"); -_STLIT8(K132, "EPhoneViewIsConferenceInExpandedMode"); -_STLIT8(K133, "EPhoneViewIsMenuBarVisible"); -_STLIT8(K134, "EPhoneViewGetBlockingDialogStatus"); -_STLIT8(K135, "EPhoneViewYesSingleItemFetch"); -_STLIT8(K136, "EPhoneViewNoSingleItemFetch"); -_STLIT8(K137, "EPhoneViewGetLocalizedNumberFromEntry"); -_STLIT8(K138, "EPhoneViewIsNoteActive"); -_STLIT8(K139, "EPhoneViewOpenNumberEntry"); -_STLIT8(K140, "EPhoneViewOpenCallHandling"); -_STLIT8(K141, "EPhoneViewGetConferenceAndSingleFlag"); -_STLIT8(K142, "EPhoneViewSetConferenceAndSingleFlag"); -_STLIT8(K143, "EPhoneViewSetVideoCallFlag"); -_STLIT8(K144, "EPhoneViewSetDtmfOptionsFlag"); -_STLIT8(K145, "EPhoneViewShowVTSetupFailedCreateCallToSameContactQuery"); -_STLIT8(K146, "EPhoneViewGetAudioVolumeLevel"); -_STLIT8(K147, "EPhoneViewIsIdleTopApp"); -_STLIT8(K148, "EPhoneViewUpdateToolbar"); -_STLIT8(K149, "EPhoneViewSetControlAndVisibility"); -_STLIT8(K150, "EPhoneViewAllowWaitingCallHeader"); -_STLIT8(K151, "EPhoneViewBeginTransEffect"); -_STLIT8(K152, "EPhoneViewEndTransEffect"); -_STLIT8(K153, "EPhoneViewSetDialerControlVisible"); -_STLIT8(K154, "EPhoneViewCloseSingleItemFetchDialog"); -_STLIT8(K155, "EPhoneViewGetActivatePreviousApp"); -_STLIT8(K156, "EPhoneViewActivatePreviousApp"); -_STLIT8(K157, "EPhoneViewSetPointerCapture"); -_STLIT8(K158, "EPhoneViewSetSendKeyDialerActivationFlag"); -_STLIT8(K159, "EPhoneViewPrepareIcons"); -_STLIT8(K160, "EPhoneViewKeypadAudioEnabled"); -_STLIT8(K161, "EPhoneViewKeypadAudioDisabled"); -_STLIT8(K162, "EPhoneViewUpdateCallHeaderRemoteInfoDataAndLabel"); -_STLIT8(K163, "EPhoneViewRemoveDtmfNote"); -_STLIT8(K164, "EPhoneViewUpdatePhoneIconToFSW"); -_STLIT8(K165, "EPhoneViewSetEikonNotifiersDisabled"); -_STLIT8(K166, "EPhoneViewCancelAllNotications"); -_STLIT8(K167, "EPhoneViewSetVideoCallDTMFVisibilityFlag"); -_STLIT8(K168, "EPhoneViewLoadPlugins"); -_STLIT8(K169, "PhoneViewServiceSelection"); -_STLIT8(K170, "EPhoneViewOpenVirtualKeyBoard"); -_STLIT8(K171, "EPhoneViewUpdateNoteSoftkeys"); -_STLIT8(K172, "EPhoneViewShowCustomizedDialer"); -_STLIT8(K173, "EPhoneViewHideCustomizedDialer"); -_STLIT8(K174, "EPhoneViewGetCustomizedDialerMenuResourceId"); -_STLIT8(K175, "EPhoneViewGetCustomizedDialerCbaResourceId"); -_STLIT8(K176, "EPhoneViewCreatePhoneBookServices"); -_STLIT8(K177, "EPhoneViewDisableKeyLockWithoutNote"); -_STLIT8(K178, "EPhoneViewGetKeyLockStatus"); -_STLIT8(K179, "EPhoneViewSetNumberEntryObserver"); -_STLIT8(K180, "EPhoneViewGetSingleItemFetchType"); -_STLIT8(K181, "EPhoneViewRemoveGlobalWaitNote"); -_STLIT8(K182, "EPhoneViewSetPhoneCustomization"); -_STLIT8(K183, "EPhoneViewSetViewCustomization"); -_STLIT8(K184, "EPhoneViewSetButtonCustomization"); -_STLIT8(K185, "EPhoneViewUpdateContactByString"); -_STLIT8(K186, "EPhoneViewAddContactByString"); -_STLIT8(K187, "EPhoneViewIsActiveNoteDissmissableByKeyEvent"); +_STLIT8(K109, "EPhoneViewSetStatusPaneVisible"); +_STLIT8(K110, "EPhoneViewEnableKeyLock"); +_STLIT8(K111, "EPhoneViewLaunchFaxModem"); +_STLIT8(K112, "EPhoneViewUpdateFSW"); +_STLIT8(K113, "EPhoneViewIsQuery"); +_STLIT8(K114, "EPhoneViewBringIdleToForeground"); +_STLIT8(K115, "EPhoneViewSetIdleTopApplication"); +_STLIT8(K116, "EPhoneViewBeginUpdate"); +_STLIT8(K117, "EPhoneViewEndUpdate"); +_STLIT8(K118, "EPhoneViewSetConfrenceOptionsFlag"); +_STLIT8(K119, "EPhoneViewRemoveConferenceBubble"); +_STLIT8(K120, "EPhoneViewGetSoftRejectWindowGroupId"); +_STLIT8(K121, "EPhoneViewSetTouchPaneButtons"); +_STLIT8(K122, "EPhoneViewSetTouchPaneVisible"); +_STLIT8(K123, "EPhoneViewEnableTouchButton"); +_STLIT8(K124, "EPhoneViewDisableTouchButton"); +_STLIT8(K125, "EPhoneResetTouchButtons"); +_STLIT8(K126, "EPhoneViewGetIsConferenceInSelectionMode"); +_STLIT8(K127, "EPhoneViewIsStraightCallToVideoMailBox"); +_STLIT8(K128, "EPhoneViewSetDtmfDialerViewVisible"); +_STLIT8(K129, "EPhoneViewSetRestrictedDialer"); +_STLIT8(K130, "EPhoneViewIsConferenceInExpandedMode"); +_STLIT8(K131, "EPhoneViewIsMenuBarVisible"); +_STLIT8(K132, "EPhoneViewGetBlockingDialogStatus"); +_STLIT8(K133, "EPhoneViewYesSingleItemFetch"); +_STLIT8(K134, "EPhoneViewNoSingleItemFetch"); +_STLIT8(K135, "EPhoneViewGetLocalizedNumberFromEntry"); +_STLIT8(K136, "EPhoneViewIsNoteActive"); +_STLIT8(K137, "EPhoneViewOpenNumberEntry"); +_STLIT8(K138, "EPhoneViewOpenCallHandling"); +_STLIT8(K139, "EPhoneViewGetConferenceAndSingleFlag"); +_STLIT8(K140, "EPhoneViewSetConferenceAndSingleFlag"); +_STLIT8(K141, "EPhoneViewSetVideoCallFlag"); +_STLIT8(K142, "EPhoneViewSetDtmfOptionsFlag"); +_STLIT8(K143, "EPhoneViewShowVTSetupFailedCreateCallToSameContactQuery"); +_STLIT8(K144, "EPhoneViewGetAudioVolumeLevel"); +_STLIT8(K145, "EPhoneViewIsIdleTopApp"); +_STLIT8(K146, "EPhoneViewUpdateToolbar"); +_STLIT8(K147, "EPhoneViewSetControlAndVisibility"); +_STLIT8(K148, "EPhoneViewAllowWaitingCallHeader"); +_STLIT8(K149, "EPhoneViewBeginTransEffect"); +_STLIT8(K150, "EPhoneViewEndTransEffect"); +_STLIT8(K151, "EPhoneViewSetDialerControlVisible"); +_STLIT8(K152, "EPhoneViewCloseSingleItemFetchDialog"); +_STLIT8(K153, "EPhoneViewGetActivatePreviousApp"); +_STLIT8(K154, "EPhoneViewActivatePreviousApp"); +_STLIT8(K155, "EPhoneViewSetPointerCapture"); +_STLIT8(K156, "EPhoneViewSetSendKeyDialerActivationFlag"); +_STLIT8(K157, "EPhoneViewPrepareIcons"); +_STLIT8(K158, "EPhoneViewKeypadAudioEnabled"); +_STLIT8(K159, "EPhoneViewKeypadAudioDisabled"); +_STLIT8(K160, "EPhoneViewUpdateCallHeaderRemoteInfoDataAndLabel"); +_STLIT8(K161, "EPhoneViewRemoveDtmfNote"); +_STLIT8(K162, "EPhoneViewUpdatePhoneIconToFSW"); +_STLIT8(K163, "EPhoneViewSetEikonNotifiersDisabled"); +_STLIT8(K164, "EPhoneViewCancelAllNotications"); +_STLIT8(K165, "EPhoneViewSetVideoCallDTMFVisibilityFlag"); +_STLIT8(K166, "EPhoneViewLoadPlugins"); +_STLIT8(K167, "EPhoneViewOpenVirtualKeyBoard"); +_STLIT8(K168, "EPhoneViewUpdateNoteSoftkeys"); +_STLIT8(K169, "EPhoneViewSendAiwCommand"); +_STLIT8(K170, "EPhoneViewShowCustomizedDialer"); +_STLIT8(K171, "EPhoneViewHideCustomizedDialer"); +_STLIT8(K172, "EPhoneViewGetCustomizedDialerMenuResourceId"); +_STLIT8(K173, "EPhoneViewGetCustomizedDialerCbaResourceId"); +_STLIT8(K174, "EPhoneViewCipheringInfoChangePlayTone"); +_STLIT8(K175, "EPhoneViewCreatePhoneBookServices"); +_STLIT8(K176, "EPhoneViewDisableKeyLockWithoutNote"); +_STLIT8(K177, "EPhoneViewGetKeyLockStatus"); +_STLIT8(K178, "EPhoneViewSetNumberEntryObserver"); +_STLIT8(K179, "EPhoneViewGetSingleItemFetchType"); +_STLIT8(K180, "EPhoneViewRemoveGlobalWaitNote"); +_STLIT8(K181, "EPhoneViewSetPhoneCustomization"); +_STLIT8(K182, "EPhoneViewSetViewCustomization"); +_STLIT8(K183, "EPhoneViewSetButtonCustomization"); +_STLIT8(K184, "EPhoneViewUpdateContactByString"); +_STLIT8(K185, "EPhoneViewAddContactByString"); +_STLIT8(K186, "EPhoneViewIsActiveNoteDissmissableByKeyEvent"); +_STLIT8(K187, "EPhoneViewUpdateContextMenu"); _STLIT8(K188, "EPhoneViewSetNoConnectedCalls"); _STLIT8(K189, "EPhoneViewIsDTMFEditorVisible"); _STLIT8(K190, "EPhoneViewSetToolbarDimming"); @@ -224,10 +224,13 @@ _STLIT8(K198, "EPhoneViewGetEasyDialingCbaId"); _STLIT8(K199, "EPhoneViewGetNeedToReturnToForegroundAppStatus"); _STLIT8(K200, "EPhoneViewSetNeedToReturnToForegroundAppStatus"); -_STLIT8(K201, "EPhoneViewGetQwertyModeObserver"); -_STLIT8(K202, "EPhoneViewSetIncallBubbleTrue"); -_STLIT8(K203, "EPhoneViewSetIncallBubbleFalse"); -_STLIT8(K204, ", // Don't remove this, this should always be the last in list."); +_STLIT8(K201, "EPhoneViewSetConferenceAndWaitingVideo"); +_STLIT8(K202, "EPhoneViewLaunchMultimediaSharing"); +_STLIT8(K203, "EPhoneViewGetQwertyModeObserver"); +_STLIT8(K204, "EPhoneViewSetIncallBubbleTrue"); +_STLIT8(K205, "EPhoneViewSetIncallBubbleFalse"); +_STLIT8(K206, "EPhoneViewIsDisplayingMenuOrDialog"); +_STLIT8(K207, ", // Don't remove this, this should always be the last in list."); // Intermediate const void * const KStringPointers[] = @@ -435,8 +438,11 @@ (const void*)&K201, (const void*)&K202, (const void*)&K203, - (const void*)&K204 + (const void*)&K204, + (const void*)&K205, + (const void*)&K206, + (const void*)&K207 }; -const TStringTable PhoneLoggerviewCommands::Table = {204, KStringPointers, EFalse}; +const TStringTable PhoneLoggerviewCommands::Table = {207, KStringPointers, EFalse}; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiutils/src/phoneloggerviewcommands.st --- a/phoneapp/phoneuiutils/src/phoneloggerviewcommands.st Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiutils/src/phoneloggerviewcommands.st Thu Jul 15 18:38:16 2010 +0300 @@ -82,8 +82,8 @@ EPhoneViewRemoveFromConference EPhoneViewRemoveFromConference EPhoneViewPrivateFromConference EPhoneViewPrivateFromConference EPhoneViewSelectedConfMember EPhoneViewSelectedConfMember +EPhoneViewGetConferenceListVisibleFlag EPhoneViewGetConferenceListVisibleFlag EPhoneViewOpenConferenceList EPhoneViewOpenConferenceList -EPhoneViewGetConferenceListVisibleFlag EPhoneViewGetConferenceListVisibleFlag EPhoneViewGetCallState EPhoneViewGetCallState EPhoneViewGetCallIdByState EPhoneViewGetCallIdByState EPhoneViewMoveHighLightInList EPhoneViewMoveHighLightInList @@ -108,8 +108,6 @@ EPhoneViewSendMessage EPhoneViewSendMessage EPhoneViewSetBlockingDialogStatus EPhoneViewSetBlockingDialogStatus EPhoneViewSetPhoneNumberAvailableInPhoneEngine EPhoneViewSetPhoneNumberAvailableInPhoneEngine -EPhoneViewSetSecurityMode EPhoneViewSetSecurityMode -EPhoneViewGetSecurityModeStatus EPhoneViewGetSecurityModeStatus EPhoneViewSetStatusPaneVisible EPhoneViewSetStatusPaneVisible EPhoneViewEnableKeyLock EPhoneViewEnableKeyLock EPhoneViewLaunchFaxModem EPhoneViewLaunchFaxModem @@ -168,13 +166,14 @@ EPhoneViewCancelAllNotications EPhoneViewCancelAllNotications EPhoneViewSetVideoCallDTMFVisibilityFlag EPhoneViewSetVideoCallDTMFVisibilityFlag EPhoneViewLoadPlugins EPhoneViewLoadPlugins -PhoneViewServiceSelection PhoneViewServiceSelection EPhoneViewOpenVirtualKeyBoard EPhoneViewOpenVirtualKeyBoard EPhoneViewUpdateNoteSoftkeys EPhoneViewUpdateNoteSoftkeys +EPhoneViewSendAiwCommand EPhoneViewSendAiwCommand EPhoneViewShowCustomizedDialer EPhoneViewShowCustomizedDialer EPhoneViewHideCustomizedDialer EPhoneViewHideCustomizedDialer EPhoneViewGetCustomizedDialerMenuResourceId EPhoneViewGetCustomizedDialerMenuResourceId EPhoneViewGetCustomizedDialerCbaResourceId EPhoneViewGetCustomizedDialerCbaResourceId +EPhoneViewCipheringInfoChangePlayTone EPhoneViewCipheringInfoChangePlayTone EPhoneViewCreatePhoneBookServices EPhoneViewCreatePhoneBookServices EPhoneViewDisableKeyLockWithoutNote EPhoneViewDisableKeyLockWithoutNote EPhoneViewGetKeyLockStatus EPhoneViewGetKeyLockStatus @@ -187,6 +186,7 @@ EPhoneViewUpdateContactByString EPhoneViewUpdateContactByString EPhoneViewAddContactByString EPhoneViewAddContactByString EPhoneViewIsActiveNoteDissmissableByKeyEvent EPhoneViewIsActiveNoteDissmissableByKeyEvent +EPhoneViewUpdateContextMenu EPhoneViewUpdateContextMenu EPhoneViewSetNoConnectedCalls EPhoneViewSetNoConnectedCalls EPhoneViewIsDTMFEditorVisible EPhoneViewIsDTMFEditorVisible EPhoneViewSetToolbarDimming EPhoneViewSetToolbarDimming @@ -200,7 +200,10 @@ EPhoneViewGetEasyDialingCbaId EPhoneViewGetEasyDialingCbaId EPhoneViewGetNeedToReturnToForegroundAppStatus EPhoneViewGetNeedToReturnToForegroundAppStatus EPhoneViewSetNeedToReturnToForegroundAppStatus EPhoneViewSetNeedToReturnToForegroundAppStatus +EPhoneViewSetConferenceAndWaitingVideo EPhoneViewSetConferenceAndWaitingVideo +EPhoneViewLaunchMultimediaSharing EPhoneViewLaunchMultimediaSharing EPhoneViewGetQwertyModeObserver EPhoneViewGetQwertyModeObserver EPhoneViewSetIncallBubbleTrue EPhoneViewSetIncallBubbleTrue EPhoneViewSetIncallBubbleFalse EPhoneViewSetIncallBubbleFalse +EPhoneViewIsDisplayingMenuOrDialog EPhoneViewIsDisplayingMenuOrDialog EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list. diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/inc/cphonemenucontroller.h --- a/phoneapp/phoneuiview/inc/cphonemenucontroller.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/inc/cphonemenucontroller.h Thu Jul 15 18:38:16 2010 +0300 @@ -159,6 +159,8 @@ void ShowTaskSwapper( TInt aResourceId ) const; TBool IsSwivelClosed() const; + + TBool IsQwertyMode() const; private: CEikMenuBar* iMenu; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/inc/cphoneviewcontroller.h --- a/phoneapp/phoneuiview/inc/cphoneviewcontroller.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/inc/cphoneviewcontroller.h Thu Jul 15 18:38:16 2010 +0300 @@ -260,31 +260,31 @@ * From base class MNumberEntryObserver * Indication that numberentry state changed */ - void NumberEntryStateChanged( TBool aEntryHasText ); + void NumberEntryStateChanged( TBool aEntryHasText ); // From MPhoneSecurityModeChangeObserver - IMPORT_C void HandleSecurityModeChanged( TBool aIsEnabled ); - - /** + IMPORT_C void HandleSecurityModeChanged( TBool aIsEnabled ); + + /** * Sets incall small bubble´s visibility in special cases. - */ - void AllowInCallBubbleInSpecialCases(); - - /** + */ + void AllowInCallBubbleInSpecialCases(); + + /** * Sets value for incall bubble visibility. - */ - void SetIncallBubbleVisibility( TBool aIncallBubbleVisible ); + */ + void SetIncallBubbleVisibility( TBool aIncallBubbleVisible ); private: // New functions - /** - * Set security mode - * - * @param aMode ETrue if mode should be set enabled. - */ - void SetSecurityMode( TBool aMode ); - + /** + * Set security mode + * + * @param aMode ETrue if mode should be set enabled. + */ + void SetSecurityMode( TBool aMode ); + /** * read IdleApplicationUid from PubSub */ @@ -526,7 +526,7 @@ * @return Phone number's type */ TPhoneNumberType ConvertNumberTypeFromSpeedDialFieldInfo( - CPhCntSpeedDialMonitor::TSpdDialFieldInfo aFieldInfo ); + const CPhCntSpeedDialMonitor::TSpdDialFieldInfo& aFieldInfo ); /** * Open the Unified message editor and get @@ -586,7 +586,7 @@ /** * Handles transition effect. */ - void HandleTransitionEffect( TPhoneTransEffectType aType, + void HandleTransitionEffect( TPhoneTransEffectType aType, const TUid& aAppUidEffectParam = KUidPhoneApplication ); /** @@ -633,15 +633,15 @@ TInt SingleItemFetchType() const; /** - * Checks if DTMF dialer mode is currently active + * Checks if DTMF dialer mode is currently active */ TBool IsDtmfDialerActive() const; - + /** - * Checks if custom dialer mode is currently active + * Checks if custom dialer mode is currently active */ TBool IsCustomDialerActive() const; - + /** * Checks if the effect could and should be triggered. */ @@ -659,14 +659,19 @@ * Complete transition effect. */ void EndTransEffect(); - + /** * TCleanupOperation to call EndTransEffect, if leave occurs * after BeginTransEffectForAppStartFromDialerLC. */ static void EffectCleanup(TAny* aThis ); - - private: + + /** + * Checks if emergency call is ongoing. + */ + TBool IsEmergencyCallOngoing(); + + private: /** * Called by the skin server when skin content is changed and the * connected client wants to be informed. @@ -692,12 +697,12 @@ */ void SkinPackageChanged( const TAknsSkinStatusPackageChangeReason aReason ); - + private: // Data CPhoneView* iPhoneView; - CPhoneDialerView* iDialerView; + CPhoneDialerView* iDialerView; // iCba CEikButtonGroupContainer* iCba; @@ -712,16 +717,16 @@ // Controls the touch buttons CPhoneDialerController* iDialerController; - + // Controls touch dialer in DTMF mode CPhoneDtmfDialerController* iDtmfDialerController; - + // Controls the toolbar CPhoneToolbarController* iToolbarController; // Handles easydialing commands. Owned. CPhoneEasyDialingController* iEasyDialingController; - + // For accessing incall indicator CPhoneIncallIndicator* iIncallIndicator; @@ -736,7 +741,7 @@ CPhoneApplicationExit* iApplicationExit; CPhoneAudioController* iAudioController; - + CPhoneRingingTonePlayerAO* iRingingTonePlayerAO; // EikEnv for CPhoneKeyCaptureController, CPhoneNoteController, @@ -830,18 +835,18 @@ TInt iPrevious; TBool iPriotityChanged; - - /** - * Internal flag to define if security mode is enabled. - */ + + /** + * Internal flag to define if security mode is enabled. + */ TBool iSecurityMode; - + // Boolean flag. ETrue if the application needs to return // to the foreground after call ended TBool iNeedToReturnToForegroundAppAfterCall; - + CAknIncallBubble* iIncallBubble; - + // Server wich sends events about background image changes RAknsSrvSession iSkinServerSession; }; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/inc/mphoneringingtonesrv.h --- a/phoneapp/phoneuiview/inc/mphoneringingtonesrv.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/inc/mphoneringingtonesrv.h Thu Jul 15 18:38:16 2010 +0300 @@ -24,14 +24,14 @@ { public: /** - * Increments sessions. + * Start session. */ - virtual void IncrementSessions() = 0; + virtual TInt StartSession() = 0; /** - * Decrements sessions. + * Close session. */ - virtual void DecrementSessions() = 0; + virtual void CloseSession() = 0; // Ringing tone settings diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/inc/phoneringingtonesrv.h --- a/phoneapp/phoneuiview/inc/phoneringingtonesrv.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/inc/phoneringingtonesrv.h Thu Jul 15 18:38:16 2010 +0300 @@ -51,14 +51,14 @@ ~CPhoneRingingToneServer(); /** - * Increments sessions. + * Start session. */ - void IncrementSessions(); + TInt StartSession(); /** - * Decrements sessions. + * Close session. */ - void DecrementSessions(); + void CloseSession(); /** * Thread entry function. @@ -180,8 +180,8 @@ // File server connection RFs iFs; - // Number of active sessions - TInt iSessionCount; + // Indicates is session already in use + TBool iSessionInUse; // Player active object CPhoneRingingToneSrvPlayerAO* iPlayer; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/inc/phoneringingtonesrvsession.h --- a/phoneapp/phoneuiview/inc/phoneringingtonesrvsession.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/inc/phoneringingtonesrvsession.h Thu Jul 15 18:38:16 2010 +0300 @@ -58,6 +58,8 @@ private: // Server. MPhoneRingingToneServer& iServer; + + TInt iStartSession; }; #endif diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h --- a/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h Thu Jul 15 18:38:16 2010 +0300 @@ -235,6 +235,7 @@ EPhoneViewGetQwertyModeObserver, EPhoneViewSetIncallBubbleTrue, EPhoneViewSetIncallBubbleFalse, + EPhoneViewIsDisplayingMenuOrDialog, EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list. }; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/src/cphonebubblewrapper.cpp --- a/phoneapp/phoneuiview/src/cphonebubblewrapper.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphonebubblewrapper.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -336,7 +336,7 @@ // 3. Thumbnail if ( callHeaderParam->Thumbnail() ) { - iBubbleManager->SetCallObjectImage( bubble, callHeaderParam->Thumbnail(), NULL ); + iBubbleManager->SetThumbnail( bubble, callHeaderParam->Thumbnail(), NULL ); } } else if ( iCallTheme->CallImageThemeSettings() == 2 ) @@ -609,7 +609,7 @@ "CPhoneBubbleWrapper::SetCallHeaderParameters()-> Set 3.Thumbnail"); if ( aCallHeaderParam->Thumbnail() ) { - iBubbleManager->SetCallObjectImage( aBubble, aCallHeaderParam->Thumbnail(), NULL ); + iBubbleManager->SetThumbnail( aBubble, aCallHeaderParam->Thumbnail(), NULL ); } } else diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/src/cphonedialercontroller.cpp --- a/phoneapp/phoneuiview/src/cphonedialercontroller.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphonedialercontroller.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -132,7 +132,7 @@ EAknsMinorGenericQgnIndiDialerClear, EMbmPhoneuiQgn_indi_dialer_clear, EMbmPhoneuiQgn_indi_dialer_clear_mask, - R_PHONEUI_DIALER_TOOLTIP_CLEAR + 0 //no tooltip for clear key } }; static const TInt KClearButtonDataTableCount = @@ -491,7 +491,15 @@ const TDesC& aMifFile ) const { // Create tooltip text - HBufC* tooltip = StringLoader::LoadLC( aSourceData.iTooltipResourceId ); + HBufC* tooltip = NULL; + if ( aSourceData.iTooltipResourceId > 0 ) + { + tooltip = StringLoader::LoadLC( aSourceData.iTooltipResourceId ); + } + else + { + tooltip = HBufC::NewLC(0); + } // Create icon TAknsItemID skinId = { EAknsMajorGeneric, aSourceData.iSkinItemIdMinor }; diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/src/cphonemenucontroller.cpp --- a/phoneapp/phoneuiview/src/cphonemenucontroller.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphonemenucontroller.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -40,7 +40,7 @@ #include #include #include - +#include #include #include @@ -175,6 +175,15 @@ } +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +TBool CPhoneMenuController::IsQwertyMode() const + { + return CPhonePubSubProxy::Instance()->Value( + KCRUidAvkon, + KAknQwertyInputModeActive ); + } // --------------------------------------------------------- // CPhoneMenuController::DynInitMenuBar // --------------------------------------------------------- @@ -522,7 +531,8 @@ break; case EPhoneDialerCmdTouchInput: { - if ( !FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) ) + if ( !FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) || + IsQwertyMode() ) { menuPane->DeleteMenuItem( menuItemArray[i] ); } diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/src/cphoneviewcontroller.cpp --- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -187,7 +187,7 @@ iAppui = (CAknAppUi*)iEikEnv.EikAppUi(); iCba = iEikEnv.AppUiFactory()->Cba(); - iPhoneView = CPhoneView::NewL( aRect, *iCba, this ); + iPhoneView = CPhoneView::NewL( aRect, *iCba, this ); iBubbleWrapper = CPhoneBubbleWrapper::NewL( iPhoneView, aRect ); @@ -224,7 +224,7 @@ iEikEnv.WsSession().FindWindowGroupIdentifier( 0, KPhoneEikonServer ) ); CCoeEnv* coeEnv = CCoeEnv::Static(); - + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { iButtonsController = CPhoneButtonsController::NewL( iBubbleWrapper->TouchPane() ); @@ -249,13 +249,13 @@ // Finalise dialer view iDialerView->SetControl( iDialer ); iDialerView->ActivateL(); - + // Create controller for Easy Dialing iEasyDialingController = CPhoneEasyDialingController::NewL( *iDialer ); iDialerController->SetEasyDialingController( iEasyDialingController ); - + // Create controller for DTMF mode of the dialer - iDtmfDialerController = CPhoneDtmfDialerController::NewL( iBubbleWrapper, + iDtmfDialerController = CPhoneDtmfDialerController::NewL( iBubbleWrapper, *coeEnv ); } @@ -264,9 +264,9 @@ // if you are using sgc-client's session to capserver, //you are not allowed to close the session. iAknUiServerClient = CAknSgcClient::AknSrv(); - + iIncallBubble = CAknIncallBubble::NewL(); - + User::LeaveIfError( iSkinServerSession.Connect( this ) ); } @@ -294,7 +294,7 @@ __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::~CPhoneViewController()" ); iSkinServerSession.Close(); - + delete iButtonsController; delete iDialerController; delete iToolbarController; @@ -326,10 +326,10 @@ } delete iDialerView; } - - delete iEasyDialingController; - delete iDtmfDialerController; - + + delete iEasyDialingController; + delete iDtmfDialerController; + delete iDialer; if ( iSingleItemFetch ) { @@ -342,7 +342,7 @@ // delete iStatusPane; <-- CCoeStatic are destroyed outside application iApaLsSession.Close(); - + delete iIncallBubble; } @@ -380,12 +380,12 @@ SetControltoCallHandlingL(); iBubbleWrapper->RemoveNumberEntry(); iPhoneView->SetActivatePreviousApp( EFalse ); - + TPhoneCmdParamCallStateData callStateData; callStateData.SetCallState( EPEStateConnected ); iBubbleWrapper->GetCallIdByState( &callStateData ); TInt connected = callStateData.CallId(); - + // If video call if( connected == KVideoTelephonyCallId1 || connected == KVideoTelephonyCallId2 ) @@ -445,7 +445,7 @@ case EPhoneViewRemovePhoneDialogs: RemovePhoneDialogsL(); break; - + case EPhoneViewRemoveAllCallHeaders: iBubbleWrapper->RemoveAllCallHeadersL(); break; @@ -457,7 +457,7 @@ case EPhoneViewStopRingTone: iRingingTonePlayerAO->StopPlaying(); break; - + case EPhoneViewMuteRingTone: iRingingTonePlayerAO->MuteRingingTone(); break; @@ -642,7 +642,7 @@ { iToolbarController->HideToolbar(); } - break; + break; case EPhoneViewLaunchMultimediaSharing: { @@ -741,9 +741,10 @@ break; case EPhoneViewUpdateContextMenu: - { - iMenuController->SetContextMenu( aCommandParam ); - } break; + { + iMenuController->SetContextMenu( aCommandParam ); + } + break; case EPhoneViewGetLocalizedNumberFromEntry: iBubbleWrapper->GetLocalizedNumberEntryContent( aCommandParam ); @@ -906,7 +907,7 @@ iMenuController->CloseMenuBar(); iIncallIndicator->Update( aCommandParam ); iMenuController->SetCallInProgressFlag( aCommandParam ); - iToolbarController->SetCallInProgressFlag( aCommandParam ); + iToolbarController->SetCallInProgressFlag( aCommandParam ); break; case EPhoneViewStartCapturingKey: @@ -1186,11 +1187,11 @@ iToolbarController->DimToolbar( booleanParam->Boolean()); break; } - + case EPhoneViewSetInvalidCsPhoneNumberFlag: iMenuController->SetInvalidCsPhoneNumberFlag( aCommandParam ); break; - + case EPhoneViewGetInvalidCsPhoneNumberFlag: iMenuController->GetInvalidCsPhoneNumberFlag( aCommandParam ); break; @@ -1206,7 +1207,7 @@ TPhoneCmdParamBoolean* booleanParam = static_cast( aCommandParam ); iMenuController->SetConferenceAndWaitingVideoFlag( booleanParam->Boolean() ); - } + } break; default: __PHONELOG( EBasic, EPhonePhoneapp, @@ -1499,7 +1500,7 @@ } } break; - + case EPhoneViewEnableToolbarButton: { TPhoneCmdParamInteger* integerParam = @@ -1507,7 +1508,7 @@ iToolbarController->SetToolbarButtonDimmed( integerParam->Integer(), EFalse ); } break; - + case EPhoneViewGetQwertyModeObserver: { TPhoneCmdParamPointer* ptrParam = static_cast( aCommandParam ); @@ -1603,7 +1604,7 @@ EPhoneViewResponseSuccess : EPhoneViewResponseFailed; break; - + case EPhoneViewIsMenuBarVisible: viewResponse = iMenuController->IsMenuBarVisible() ? EPhoneViewResponseSuccess : @@ -1634,7 +1635,7 @@ EndTransEffect(); } break; - + case EPhoneDialerCmdContacts: { // Launch Phonebook application @@ -1644,7 +1645,7 @@ ExecuteCommandL( EPhoneViewActivateApp, &appInfoParam ); EndTransEffect(); } - break; + break; case EPhoneDialerCmdSpeedDial: { @@ -1654,7 +1655,7 @@ ExecuteCommandL( EPhoneViewActivateApp, &appInfoParam ); break; } - + case EPhoneDialerCallSettings: { CGSLauncher* launcher = CGSLauncher::NewLC(); @@ -1664,7 +1665,7 @@ CleanupStack::PopAndDestroy( launcher ); break; } - + case EPhoneViewIsDTMFEditorVisible: if ( iDialer ) { @@ -1679,7 +1680,7 @@ EPhoneViewResponseFailed; } break; - + case EPhoneViewIsConferenceInExpandedMode: viewResponse = iBubbleWrapper->IsConferenceInExpandedMode() ? EPhoneViewResponseSuccess : @@ -1705,18 +1706,18 @@ // Set Number Entry CBA TPhoneCmdParamInteger integerParam; if ( iSecurityMode ) - { + { iNoteController->DestroyNote(); integerParam.SetInteger( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneEmergencyModeNoteCBA ) ); - } - else - { - integerParam.SetInteger( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneNumberAcqCBA ) ); - } + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneEmergencyModeNoteCBA ) ); + } + else + { + integerParam.SetInteger( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneNumberAcqCBA ) ); + } ExecuteCommandL( EPhoneViewUpdateCba, &integerParam ); // Set flag to false because dialler is set to open status. iPhoneView->SetPhoneAppViewToDialer( EFalse ); @@ -1736,10 +1737,10 @@ static_cast( CEikonEnv::Static()->EikAppUi() ) ->ProcessCommandL( EPhoneDtmfDialerExit ); } - else if ( iCustomization && + else if ( iCustomization && IsCustomDialerActive() ) { - iCustomization->HandleCommandL( + iCustomization->HandleCommandL( *this, EPhoneViewOpenCallHandling, NULL ); } else @@ -1803,6 +1804,14 @@ iToolbarController->ShowToolbar(); } break; + + case EPhoneViewIsDisplayingMenuOrDialog: + { + viewResponse = iEikEnv.EikAppUi()->IsDisplayingMenuOrDialog() ? + EPhoneViewResponseSuccess : + EPhoneViewResponseFailed; + } + break; default: viewResponse = EPhoneViewResponseFailed; __PHONELOG( EBasic, EPhonePhoneapp, "CPhoneViewController::HandleCommandL -> UnKnownMessage !!! "); @@ -1823,7 +1832,7 @@ __PHONELOGVIEWMSG( aCmdId, 0 ); TPhoneViewResponseId viewResponse = EPhoneViewResponseSuccess; TInt err; - + switch ( aCmdId ) { case EPhoneViewSendKeyEventToNumberEntry: @@ -1956,7 +1965,7 @@ viewResponse = EPhoneViewResponseSuccess; } break; - + default: if ( iCustomization ) { @@ -2132,7 +2141,7 @@ "CPhoneViewController::HandleResourceChangeL()" ) // Notify the bubble that there has been a resource change iBubbleWrapper->Control()->HandleResourceChange( aType ); - + // Notify dialer and switch statuspane layout. if ( iDialer ) { @@ -2178,25 +2187,54 @@ } // --------------------------------------------------------------------------- +// CPhoneViewController::IsEmergencyCallOngoing() +// --------------------------------------------------------------------------- +// +TBool CPhoneViewController::IsEmergencyCallOngoing() + { + __LOGMETHODSTARTEND( EPhoneUIView, + "CPhoneViewController::IsEmergencyCallOngoing()"); + + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallState( EPEStateConnected ); + iBubbleWrapper->GetCallIdByState( &callStateData ); + TInt connected = callStateData.CallId(); + + callStateData.SetCallState( EPEStateConnecting ); + iBubbleWrapper->GetCallIdByState( &callStateData ); + TInt connecting = callStateData.CallId(); + + return ( ( connected == KEmergencyCallId ) || + ( connecting == KEmergencyCallId ) ); + } + +// --------------------------------------------------------------------------- // CPhoneViewController::HandleSecurityModeChanged // --------------------------------------------------------------------------- // EXPORT_C void CPhoneViewController::HandleSecurityModeChanged( TBool aIsEnabled ) - { - __PHONELOG1( EBasic, EPhoneUIView, - "CPhoneViewController::SetSecurityMode Mode = (%d)", aIsEnabled ); - iToolbarController->DimToolbar( aIsEnabled ); - iPhoneView->SetSecurityMode( aIsEnabled ); - iMenuController->SetSecurityMode( aIsEnabled ); - - TBool securityModeChanged = ( iSecurityMode != aIsEnabled ); - - iSecurityMode = aIsEnabled; - - if ( iDialer ) - { + { + __PHONELOG1( EBasic, EPhoneUIView, + "CPhoneViewController::HandleSecurityModeChanged Mode = (%d)", aIsEnabled ); + + TBool emergencyCallOngoing = IsEmergencyCallOngoing(); + + // Don't undim toolbar if emergency call is ongoing + if ( !emergencyCallOngoing ) + { + iToolbarController->DimToolbar( aIsEnabled ); + } + iPhoneView->SetSecurityMode( aIsEnabled ); + iMenuController->SetSecurityMode( aIsEnabled ); + + TBool securityModeChanged = ( iSecurityMode != aIsEnabled ); + + iSecurityMode = aIsEnabled; + + if ( iDialer ) + { iDialerController->SetRestrictedDialer( aIsEnabled ); - + if ( iDialerActive && securityModeChanged ) { CDialingExtensionInterface* easyDialing = iDialer->GetEasyDialingInterface(); @@ -2222,30 +2260,40 @@ } } iDialer->RelayoutAndDraw(); - - // also update cba if security mode changes while dialer is open - TPhoneCmdParamInteger integerParam; - if ( aIsEnabled ) + + // Don't update cba here if emergency call is ongoing + if ( !emergencyCallOngoing ) { - iNoteController->DestroyNote(); - integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneEmergencyModeNoteCBA ) ); + // also update cba if security mode changes while dialer is open + TPhoneCmdParamInteger integerParam; + if ( aIsEnabled ) + { + iNoteController->DestroyNote(); + integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneEmergencyModeNoteCBA ) ); + } + else + { + integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneNumberAcqCBA ) ); + } + TRAP_IGNORE( ExecuteCommandL( EPhoneViewUpdateCba, &integerParam ) ); } - else - { - integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneNumberAcqCBA ) ); - } - TRAP_IGNORE( ExecuteCommandL( EPhoneViewUpdateCba, &integerParam ) ); - if ( !aIsEnabled ) { TRAP_IGNORE( SwitchLayoutToFlatStatusPaneL( ETrue ) ); } } - } + } if ( securityModeChanged ) { + // Update cba if security mode changes while emergency call is ongoing + if ( emergencyCallOngoing ) + { + TRAP_IGNORE( static_cast( CEikonEnv::Static()->EikAppUi() ) + ->ProcessCommandL( EPhoneCmdUpdateEmergencyCba ) ); + } + // Update status pane dimming iStatusPane->StatusPane().SetDimmed( aIsEnabled ); @@ -2257,7 +2305,7 @@ iKeyCaptureController->StopCapturingKey( &appKeyCaptureParam ); } - } + } // --------------------------------------------------------------------------- // CPhoneViewController::IdleAppUid @@ -2299,7 +2347,7 @@ { iMenuController->SetNumberEntryEmptyFlag( !aEntryHasText ); iBubbleWrapper->HandleNumberEntryChanged(); - ExecuteCommandL( EPhoneViewUpdateToolbar ); + TRAP_IGNORE( ExecuteCommandL( EPhoneViewUpdateToolbar ) ); } // --------------------------------------------------------------------------- @@ -2485,7 +2533,7 @@ CAknSgcClient::MoveApp( phoneApp.WgId(), ESgcMoveAppToForeground ); __PHONELOG1( EBasic, EPhoneUIView, "CPhoneViewController::BringPhoneAppToForeground - Previous App WG ID: %d", - iPrevForegroundAppWg ); + iPrevForegroundAppWg ); } } @@ -2760,9 +2808,9 @@ TInt resourceId = cbaResource->Integer(); iCba->SetCommandSetL( resourceId ); - + iCba->DrawDeferred(); - + } // --------------------------------------------------------------------------- @@ -2879,10 +2927,10 @@ if ( phoneIsLocked || IsSecurityCodeQuery() ) { - // Soft Reject is enabled if the phone is not locked. - // Security Code query is checked because in the boot - // autolock status value is OFF even when it's actually - // ON so we need to do this double checking. + // Soft Reject is enabled if the phone is not locked. + // Security Code query is checked because in the boot + // autolock status value is OFF even when it's actually + // ON so we need to do this double checking. return EFalse; } return ETrue; @@ -3029,8 +3077,8 @@ CPhCntSpeedDialMonitor::TSpdDialFieldInfo fieldInfo; TBuf number; - TContactItemId itemId = iSpeedDialController->GetSpeedDialFieldL( - aSpeedDialLocation, + TContactItemId itemId = iSpeedDialController->GetSpeedDialFieldL( + aSpeedDialLocation, number, fieldInfo ); @@ -3045,7 +3093,7 @@ // --------------------------------------------------------------------------- // TPhoneNumberType CPhoneViewController::ConvertNumberTypeFromSpeedDialFieldInfo( - CPhCntSpeedDialMonitor::TSpdDialFieldInfo aFieldInfo ) + const CPhCntSpeedDialMonitor::TSpdDialFieldInfo& aFieldInfo ) { __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneViewController::ConvertNumberTypeFromSpeedDialFieldInfo() "); @@ -3103,7 +3151,7 @@ TBool CPhoneViewController::AssignSpeedDialLocationL( TInt aLocation ) { - CreateSpeedDialControllerL(); + CreateSpeedDialControllerL(); // Assign speed dial location TBuf number; @@ -3128,7 +3176,7 @@ TUid mtmUid = { KSenduiMtmUniMessageUidValue }; CSendUi* messageEditor = CSendUi::NewL(); - CleanupStack::PushL( messageEditor ); + CleanupStack::PushL( messageEditor ); // Inform the SendUi to open the message editor. This is not a blocking // dialog so the flag does not need to be set. @@ -3588,7 +3636,7 @@ { __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::CreateSpeedDialControllerL()" ); - if( !iSpeedDialController ) + if( !iSpeedDialController ) { iSpeedDialController = iContactController->CreateSpeedDialMonitorL(); } @@ -3690,12 +3738,12 @@ // ----------------------------------------------------------- // TInt CPhoneViewController::SingleItemFetchType() const - { - __LOGMETHODSTARTEND(EPhoneUIView, + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneViewController::SingleItemFetchType()" ); - return iSingleItemFetchType; - } + return iSingleItemFetchType; + } // --------------------------------------------------------------------------- // CPhoneViewController::SwitchLayoutToFlatStatusPaneL @@ -3822,9 +3870,9 @@ case EPhoneTransEffectAppStartFromDialer: { GfxTransEffect::BeginFullScreen( - AknTransEffect::EApplicationStart, - TRect(), - AknTransEffect::EParameterType, + AknTransEffect::EApplicationStart, + TRect(), + AknTransEffect::EParameterType, AknTransEffect::GfxTransParam( aAppUidEffectParam, AknTransEffect::TParameter::EActivateExplicitCancel ) ); iEffectOngoing = ETrue; @@ -3859,18 +3907,18 @@ { iDialerActive = ETrue; - // Ensure that toolbar and menu commands are up-to-date + // Ensure that toolbar and menu commands are up-to-date TBuf<1> temp; // we are only interested if the text is empty or not iDialer->GetTextFromNumberEntry( temp ); NumberEntryStateChanged( temp.Length() > 0 ); - + // Make dialer view top most iDialerView->DrawableWindow()->SetOrdinalPosition( iPhoneView->DrawableWindow()->OrdinalPosition() ); // Hide in-call view toolbar iToolbarController->HideToolbar(); - + SwitchLayoutToFlatStatusPaneL( ETrue ); // Don't make dialer view visible before status pane is updated. @@ -3882,7 +3930,7 @@ // dialer as soon as it becomes visible to prevent the flashing of // number entry (DrawDeferred() isn't fast enough here). iDialerView->DrawNow(); - + iPhoneView->DrawableWindow()->SetOrdinalPosition( -1 ); iPhoneView->MakeVisible( EFalse ); @@ -3910,7 +3958,7 @@ // resizing of dialer components. Hiding dialer view already before showing // phone view might cause screen flickering but tests have proven it doesn't happen. iDialerView->MakeVisible( EFalse ); - + SwitchLayoutToFlatStatusPaneL( EFalse ); // Make call handling view top most @@ -3924,7 +3972,7 @@ // Update control stack iAppui->AddToStackL( iPhoneView ); iAppui->RemoveFromStack( iDialerView ); - + iEasyDialingController->HandleCommandL( EEasyDialingCallHandlingActivated ); } } @@ -4038,8 +4086,8 @@ // TBool CPhoneViewController::IsDtmfDialerActive() const { - TBool ret = - ( iDialer && iDtmfDialerController && + TBool ret = + ( iDialer && iDtmfDialerController && iDialer->Controller() == iDtmfDialerController ); return ret; } @@ -4054,8 +4102,8 @@ if ( iDialer ) { MPhoneDialerController* curController = iDialer->Controller(); - ret = ( curController && - curController != iDialerController && + ret = ( curController && + curController != iDialerController && curController != iDtmfDialerController ); } return ret; @@ -4065,16 +4113,16 @@ // CPhoneViewController::CanTransEffectBeUsed // ----------------------------------------------------------- // -TBool CPhoneViewController::CanTransEffectBeUsed( +TBool CPhoneViewController::CanTransEffectBeUsed( TPhoneTransEffectType aType ) { TBool okToUseEffect( EFalse ); - + TBool isForeground = iAppui->IsForeground(); // Check whether the idle is on foreground TBool idleInFore = ForegroundApplicationWindowGroupId() == IdleWindowGroupId() ? ETrue : EFalse; - + if ( isForeground && // Newer run effect if not at front ( ( aType == EPhoneTransEffectDialerCreate && !iDialerActive ) || ( aType == EPhoneTransEffectDialerOpen && !iDialerActive && @@ -4083,18 +4131,18 @@ { okToUseEffect = ETrue; } - // In case transition is from idle to dialer show transition effects as well. + // In case transition is from idle to dialer show transition effects as well. else if ( idleInFore && !iDialerActive && aType == EPhoneTransEffectDialerOpen ) { okToUseEffect = ETrue; } - else if ( isForeground && iDialerActive && + else if ( isForeground && iDialerActive && aType == EPhoneTransEffectAppStartFromDialer ) { okToUseEffect = ETrue; } - + return okToUseEffect; } @@ -4102,13 +4150,13 @@ // CPhoneViewController::BeginTransEffectForAppStartFromDialerLC // ----------------------------------------------------------- // -void CPhoneViewController::BeginTransEffectForAppStartFromDialerLC( +void CPhoneViewController::BeginTransEffectForAppStartFromDialerLC( const TUid& aAppUid ) { TPhoneCmdParamTransEffect effectParam; effectParam.SetType( EPhoneTransEffectAppStartFromDialer ); effectParam.SetAppUid( aAppUid ); - + ExecuteCommand( EPhoneViewBeginTransEffect, &effectParam ); TCleanupItem operation( EffectCleanup, this ); @@ -4167,20 +4215,19 @@ // --------------------------------------------------------------------------- // void CPhoneViewController::AllowInCallBubbleInSpecialCases() -{ + { // this method can be used for special cases like dialer - + if( iDialerActive ) - { + { SetIncallBubbleVisibility( ETrue ); + } + else + { + SetIncallBubbleVisibility( EFalse ); + } } - else - { - SetIncallBubbleVisibility( EFalse ); - } - -} - + // --------------------------------------------------------------------------- // CPhoneViewController::SetIncallBubbleVisibility // --------------------------------------------------------------------------- @@ -4191,7 +4238,7 @@ "CPhoneViewController::SetIncallBubbleVisibility(%d)", aVisible ); - TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( aVisible ) ); + TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( aVisible ) ); } // --------------------------------------------------------------------------- diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/src/phoneringingtonesrv.cpp --- a/phoneapp/phoneuiview/src/phoneringingtonesrv.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/src/phoneringingtonesrv.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -88,24 +88,37 @@ } // ----------------------------------------------------------------------------- -// CPhoneRingingToneServer::IncrementSessions +// CPhoneRingingToneServer::StartSession // ----------------------------------------------------------------------------- // -void CPhoneRingingToneServer::IncrementSessions() +TInt CPhoneRingingToneServer::StartSession() { - iSessionCount++; + PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::StartSession err %d", iSessionCount ); + + TInt err( KErrNone ); + + if( !iSessionInUse ) + { + iSessionInUse = ETrue; + } + else + { + err = KErrAccessDenied; + } + + return err; } // ----------------------------------------------------------------------------- -// CPhoneRingingToneServer::DecrementSessions +// CPhoneRingingToneServer::CloseSession // ----------------------------------------------------------------------------- // -void CPhoneRingingToneServer::DecrementSessions() +void CPhoneRingingToneServer::CloseSession() { - if ( --iSessionCount <= 0 ) - { - CActiveScheduler::Stop(); - } + PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::CloseSession()" ); + + CActiveScheduler::Stop(); + iSessionInUse = EFalse; } // ----------------------------------------------------------------------------- diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuiview/src/phoneringingtonesrvsession.cpp --- a/phoneapp/phoneuiview/src/phoneringingtonesrvsession.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuiview/src/phoneringingtonesrvsession.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -43,7 +43,10 @@ // CPhoneRingingToneServerSession::~CPhoneRingingToneServerSession() { - iServer.DecrementSessions(); + if( iStartSession == KErrNone ) + { + iServer.CloseSession(); + } } // ----------------------------------------------------------------------------- @@ -68,7 +71,10 @@ void CPhoneRingingToneServerSession::ConstructL() { PHONEUIVIEW_PRINT( "CPhoneRingingToneServerSession::ConstructL" ); - iServer.IncrementSessions(); + + iStartSession = iServer.StartSession(); + + User::LeaveIfError( iStartSession ); } // ----------------------------------------------------------------------------- diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/ContactService/inc/CPhCntMatcherImpl.h --- a/phoneengine/PhoneCntFinder/ContactService/inc/CPhCntMatcherImpl.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/inc/CPhCntMatcherImpl.h Thu Jul 15 18:38:16 2010 +0300 @@ -45,12 +45,12 @@ { public: - /** - * Static constructor. - * - * @since S60 v3.1 - * @param aOwner Phonebook owner. - */ + /** + * Static constructor. + * + * @since S60 v3.1 + * @param aOwner Phonebook owner. + */ static CPhCntMatcherImpl* NewL( const MPhoneCntPbkOwner& aOwner ); /** @@ -110,14 +110,14 @@ /** * Match number to phonebook. * @param aMatch Found match, owership tranferred. NULL if not found any. - * @param aNumber Number to match against. + * @param aMatchString Number to match against. * @return Error code: KErrNone - one match found * KErrNotFound - no matches found * other - normal Symbian OS error */ - TInt MatchVoipNumber( + TInt MatchVoipNumber( MPhCntMatch*& aMatch, - const TDesC& aNumber, + const TDesC& aMatchString, TBool aAllowUserNameMatch, MDesCArray* aContactStoreUris, TInt aCharsForMatching = 0 ); @@ -127,6 +127,7 @@ * by contact id. * @since Series60 3.0 * @param aMatch for found match, owership tranferred. Empty if not found. + * @param aMatchString Number to match against. * @param aContactId for current contact. * @return Error code: KErrNone - VoIP call contact found * KErrNotFound - no VoIP call contact found @@ -134,6 +135,7 @@ */ TInt MatchVoipNumber( MPhCntMatch*& aMatch, + const TDesC& aMatchString, const CPhCntContactId& aContactId ); diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/ContactService/inc/cphcntmatchervoipimpl.h --- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntmatchervoipimpl.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntmatchervoipimpl.h Thu Jul 15 18:38:16 2010 +0300 @@ -44,7 +44,7 @@ * Match number to phonebook. * @since S60 v3.2 * @param aMatch Found match, owership tranferred. NULL if not found any. - * @param aNumber Number to match against. + * @param aMatchString Number to match against. * @param aAllowUserNameMatch If true user name match is allowed. * @param aCharsForMatching Characters for user name match. Match is started from * the rigth of the user name part. (see CS call match) @@ -54,7 +54,7 @@ */ TInt MatchVoipNumber( MPhCntMatch*& aMatch, - const TDesC& aNumber, + const TDesC& aMatchString, TBool aAllowUserNameMatch, MDesCArray* aContactStoreUris, TInt aCharsForMatching = 0 ); @@ -65,6 +65,7 @@ * by contact id. * @since Series60 3.2 * @param aMatch for found match, owership tranferred. Empty if not found. + * @param aMatchString Number to match against. * @param aContactId for current contact. * @return Error code: KErrNone - VoIP call contact found * KErrNotFound - no VoIP call contact found @@ -72,6 +73,7 @@ */ TInt MatchVoipNumber( MPhCntMatch*& aMatch, + const TDesC& aMatchString, const CPhCntContactId& aContactId ); @@ -110,6 +112,16 @@ */ TInt CreateMatcher(); + /** + * Sets matched VoIP number if it was found. + * + * @param aContact Contact, which is checked. + * @param aMatchString Number to match against. + */ + void SetMatchedVoIPNumberIfExists( + CPhCntContact& aContact, + const TDesC& aMatchString ); + private: // data diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/ContactService/src/CPhCntMatcherImpl.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntMatcherImpl.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntMatcherImpl.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -78,25 +78,25 @@ TEFLOGSTRING( KTAOBJECT, "CNT CPhCntMatcherImpl::MatchNumber" ); TInt err = CreateMatcher(); if ( !err ) - { - // Check if we already have the contact. - CPhCntContact* contact = iFoundContacts->FindContact( aTelNumber ); + { + // Check if we already have the contact. + CPhCntContact* contact = iFoundContacts->FindContact( aTelNumber ); - err = KErrNone; - if( !contact ) - { - // Get contact from contact stores - TRAPD( traperr, err = GetContactL( aMatch, aTelNumber )); - if ( traperr ) - { - err = traperr; - } - } - else - { - aMatch = contact; - } - } + err = KErrNone; + if( !contact ) + { + // Get contact from contact stores + TRAPD( traperr, err = GetContactL( aMatch, aTelNumber )); + if ( traperr ) + { + err = traperr; + } + } + else + { + aMatch = contact; + } + } TEFLOGSTRING2( KTAOBJECT, "CNT CPhCntMatcherImpl::MatchNumber %d " , err); return err; } @@ -113,31 +113,31 @@ { TInt err = CreateMatcher(); if ( !err ) - { - if( aContactId.IsValid() ) - { - // Do we have existing contact for the link and number. - const CPhCntVPbkContactId& contactId = - static_cast( aContactId ); - const MVPbkContactLink& link = contactId.ContactLink(); - aMatch = - iFoundContacts->FindContact( aTelNumber, link ); - if( !aMatch ) - { - // Get the contact. - CPhCntContact* match = NULL; - err = FetchContact( match, link, aTelNumber ); - if( !err ) - { - aMatch = match; - } - } - } - else - { - err = MatchNumber( aMatch, aTelNumber ); - } - } + { + if( aContactId.IsValid() ) + { + // Do we have existing contact for the link and number. + const CPhCntVPbkContactId& contactId = + static_cast( aContactId ); + const MVPbkContactLink& link = contactId.ContactLink(); + aMatch = + iFoundContacts->FindContact( aTelNumber, link ); + if( !aMatch ) + { + // Get the contact. + CPhCntContact* match = NULL; + err = FetchContact( match, link, aTelNumber ); + if( !err ) + { + aMatch = match; + } + } + } + else + { + err = MatchNumber( aMatch, aTelNumber ); + } + } return err; } @@ -163,6 +163,7 @@ // TInt CPhCntMatcherImpl::MatchVoipNumber( MPhCntMatch*& /*aMatch*/, + const TDesC& /*aMatchString*/, const CPhCntContactId& /*aContactId*/ ) { return KErrNotFound; @@ -266,26 +267,26 @@ // --------------------------------------------------------------------------- // void CPhCntMatcherImpl::DoCreateMatcherL() - { - TEFLOGSTRING( KTAOBJECT, "CNT CPhCntMatcherImpl::DoCreateMatcherL" ); - if ( !iContactStores ) - { - iFoundContacts = CPhCntFoundContacts::NewL(); - iContactStores = CPhCntContactStores::NewL( iContactManager ); - iMatchContact = CPhCntMatchContact::NewL(); - iFetchContact = CPhCntFetchContact::NewL( *iContactStores ); - } - } + { + TEFLOGSTRING( KTAOBJECT, "CNT CPhCntMatcherImpl::DoCreateMatcherL" ); + if ( !iContactStores ) + { + iFoundContacts = CPhCntFoundContacts::NewL(); + iContactStores = CPhCntContactStores::NewL( iContactManager ); + iMatchContact = CPhCntMatchContact::NewL(); + iFetchContact = CPhCntFetchContact::NewL( *iContactStores ); + } + } // --------------------------------------------------------------------------- // Delayed on-demand based construction // --------------------------------------------------------------------------- // TInt CPhCntMatcherImpl::CreateMatcher() - { - TRAPD( err, DoCreateMatcherL() ); - return err; - } + { + TRAPD( err, DoCreateMatcherL() ); + return err; + } // --------------------------------------------------------------------------- // Second phase constructor diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/ContactService/src/cphcntmatchervoipimpl.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/cphcntmatchervoipimpl.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntmatchervoipimpl.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -78,117 +78,116 @@ TInt err = CreateMatcher(); if ( err == KErrNone ) - { - CPhCntContact* existingContact = - iFoundContacts->FindContact( sipUri.SipURI() ); - if( !existingContact ) { - // Check for service specific contact stores and - // open stores if not open - if ( aContactStoreUris ) + CPhCntContact* existingContact = + iFoundContacts->FindContact( sipUri.SipURI() ); + if( !existingContact ) { - TInt storeCount = aContactStoreUris->MdcaCount(); - for( TInt i = 0; i < storeCount ; i++ ) + // Check for service specific contact stores and + // open stores if not open + if ( aContactStoreUris ) + { + TInt storeCount = aContactStoreUris->MdcaCount(); + for( TInt i = 0; i < storeCount ; i++ ) + { + TPtrC storeUri = aContactStoreUris->MdcaPoint( i ); + + err = iContactStoreLoader->LoadContactStoreWithUri( storeUri ); + } + } + + const MVPbkContactLinkArray* linkArray = NULL; + + // Find possible contacts. + if( aAllowUserNameMatch && !aCharsForMatching ) + { + err = iMatchContact->MatchContact( + linkArray, sipUri.UserNamePart(), *iVoipMatchStrategy ); + } + else if ( aCharsForMatching ) + { + err = iMatchContact->MatchContact( + linkArray, sipUri.FixedUserNamePart(), *iVoipMatchStrategy ); + } + else + { + err = iMatchContact->MatchContact( + linkArray, sipUri.SipURI() , *iVoipMatchStrategy ); + } + + MPhCntMatch* match = NULL; + if( !err ) { - TPtrC storeUri = aContactStoreUris->MdcaPoint( i ); - - err = iContactStoreLoader->LoadContactStoreWithUri( storeUri ); - } - } - - const MVPbkContactLinkArray* linkArray = NULL; - - // Find possible contacts. - if( aAllowUserNameMatch && !aCharsForMatching ) - { - err = iMatchContact->MatchContact( - linkArray, sipUri.UserNamePart(), *iVoipMatchStrategy ); - } - else if ( aCharsForMatching ) - { - err = iMatchContact->MatchContact( - linkArray, sipUri.FixedUserNamePart(), *iVoipMatchStrategy ); + // Fetch all the matched contacts, because iVoipMatchStrategy + // could give us a match that is matched to wrong contact field. + const TInt matchedContacts( linkArray->Count() ); + + // Find real matches. + TPhCntVoipMatchArray voipMatches; + for( TInt i = 0; i < matchedContacts; i++ ) + { + // Get contacts from phone book. + CPhCntContact* match = NULL; + err = FetchContact( match, linkArray->At( i ), sipUri.SipURI() ); + if( !err ) + { + TRAP_IGNORE( voipMatches.AppendL( match ) ); + } + else + { + // Error in fetching contacts + break; + } + } + + if( aAllowUserNameMatch || aCharsForMatching ) + { + match = voipMatches.FindFullOrUsernameMatch( sipUri, aCharsForMatching ); + } + else + { + // Take the first match, that is voip contact. Gives NULL if match not found. + match = voipMatches.FindFullMatch( sipUri ); + } + + // Release extra matches + voipMatches.ReleaseMatches(); + } + + // If no error and match still null pointer, then no contacts were found. + if( !err && !match ) + { + err = KErrNotFound; + } + else + { + aMatch = match; + } } else { - err = iMatchContact->MatchContact( - linkArray, sipUri.SipURI() , *iVoipMatchStrategy ); - } - - - MPhCntMatch* match = NULL; - if( !err ) - { - // Fetch all the matched contacts, because iVoipMatchStrategy - // could give us a match that is matched to wrong contact field. - const TInt matchedContacts( linkArray->Count() ); - - // Find real matches. - TPhCntVoipMatchArray voipMatches; - for( TInt i = 0; i < matchedContacts; i++ ) - { - // Get contacts from phone book. - CPhCntContact* match = NULL; - err = FetchContact( match, linkArray->At( i ), sipUri.SipURI() ); - if( !err ) - { - TRAP_IGNORE( voipMatches.AppendL( match ) ); - } - else - { - // Error in fetching contacts - break; - } - } - - if( aAllowUserNameMatch || aCharsForMatching ) - { - match = voipMatches.FindFullOrUsernameMatch( sipUri, aCharsForMatching ); - } - else - { - // Take the first match, that is voip contact. Gives NULL if match not found. - match = voipMatches.FindFullMatch( sipUri ); - } - - // Release extra matches - voipMatches.ReleaseMatches(); - } - - // If no error and match still null pointer, then no contacts were found. - if( !err && !match ) - { - err = KErrNotFound; - } - else - { - aMatch = match; + aMatch = existingContact; } } - else - { - aMatch = existingContact; - } - } return err; } - + // --------------------------------------------------------------------------- // From class CPhCntMatcher // Matches voip contacts // --------------------------------------------------------------------------- TInt CPhCntMatcherVoIPImpl::MatchVoipNumber( - MPhCntMatch*& aMatch, - const CPhCntContactId& aContactId ) + MPhCntMatch*& aMatch, + const TDesC& aMatchString, + const CPhCntContactId& aContactId ) { const CPhCntVPbkContactId& contactId = static_cast( aContactId ); - + const MVPbkContactLink& contactLink = contactId.ContactLink(); - - TInt err = CreateMatcher(); + TInt err = CreateMatcher(); const TVPbkContactStoreUriPtr uri = contactLink.ContactStore().StoreProperties().Uri(); @@ -197,61 +196,78 @@ iContactStoreLoader->LoadContactStoreWithUri( uri.UriDes() ); if ( err == KErrNone ) - { - CPhCntContact* existingContact = - iFoundContacts->FindContact( contactLink ); - - - if( !existingContact ) { - CPhCntContact* contact = NULL; - err = iFetchContact->FetchContact( contactLink, contact ); - - if( !err ) + CPhCntContact* existingContact = + iFoundContacts->FindContact( contactLink ); + + if ( !existingContact ) { - const RArray& allNumbers = - contact->AllNumbers(); - const TInt count( allNumbers.Count() ); - for( TInt i = 0; i < count; i++ ) + CPhCntContact* contact = NULL; + err = iFetchContact->FetchContact( contactLink, contact ); + + if ( !err ) { - // Take first voip number and set it as contacts number. - TPhCntNumber number = allNumbers[i]; - if( number.Type() == MPhCntMatch::EVoipNumber || - number.Type() == MPhCntMatch::EMobileNumber || - number.Type() == MPhCntMatch::EStandardNumber || - number.Type() == CPhCntContact::EPagerNumber || - number.Type() == CPhCntContact::EVideoNumber || - number.Type() == CPhCntContact::EAssistantNumber || - number.Type() == CPhCntContact::EFaxNumber || - number.Type() == CPhCntContact::ECarNumber ) + SetMatchedVoIPNumberIfExists( *contact, aMatchString ); + + TPhCntSipURI sipUri( contact->Number() ); + TRAP( err, iFoundContacts->AddL( contact, sipUri.SipURI() ) ); + if ( err ) { - contact->SetMatchedVoipNumber( TPhCntSipURI( number.Number() ) ); - break; + delete contact; + } + else + { + aMatch = contact; } } - TPhCntSipURI sipUri( contact->Number() ); - TRAP( err, iFoundContacts->AddL( contact, sipUri.SipURI() ) ); - if( err ) - { - delete contact; - } - else - { - aMatch = contact; - } - + } + else + { + aMatch = existingContact; } } - else - { - aMatch = existingContact; - } - } return err; } // --------------------------------------------------------------------------- +// Sets matched VoIP number if it was found. +// --------------------------------------------------------------------------- +// +void CPhCntMatcherVoIPImpl::SetMatchedVoIPNumberIfExists( + CPhCntContact& aContact, + const TDesC& aMatchString ) + { + const RArray& allNumbers = aContact.AllNumbers(); + const TInt numberCount( allNumbers.Count() ); + TPhCntSipURI sipUri( aMatchString ); + + for ( TInt i = 0; i < numberCount; i++ ) + { + TPhCntNumber number = allNumbers[i]; + if ( number.Type() == CPhCntContact::EVoipNumber || + number.Type() == CPhCntContact::EMobileNumber || + number.Type() == CPhCntContact::EStandardNumber || + number.Type() == CPhCntContact::EPagerNumber || + number.Type() == CPhCntContact::EVideoNumber || + number.Type() == CPhCntContact::EAssistantNumber || + number.Type() == CPhCntContact::EFaxNumber || + number.Type() == CPhCntContact::ECarNumber ) + { + // If uris are the same then we have a full match. + // (usernamepart requires case sensitive match, domain is not sensitive) + TPhCntSipURI matchURI( number.Number() ); + if ( matchURI.SipURI().CompareF( sipUri.SipURI() ) == KErrNone && + matchURI.UserNamePart().Compare( sipUri.UserNamePart() ) == KErrNone ) + { + aContact.SetMatchedVoipNumber( matchURI ); + break; + } + } + } + } + +// --------------------------------------------------------------------------- // From class CPhCntMatcher // Determines if contact has CS numbers. // --------------------------------------------------------------------------- @@ -265,28 +281,26 @@ if ( CreateMatcher() == KErrNone ) { + // Check if we have contact already. + CPhCntContact* contact = + iFoundContacts->FindContact( contactId.ContactLink() ); - // Check if we have contact already. - CPhCntContact* contact = - iFoundContacts->FindContact( contactId.ContactLink() ); - - if( contact ) - { - hasCSNumbers = HasCSNumbers( contact ); - contact->Release(); - } - else - { - // Fetch the contact from Virtual phonebook. - const TInt err = - iFetchContact->FetchContact( contactId.ContactLink(), contact ); - hasCSNumbers = HasCSNumbers( contact ); - - // We can delete the contact, because it is not added to - // iFoundContacts. - delete contact; - } - + if ( contact ) + { + hasCSNumbers = HasCSNumbers( contact ); + contact->Release(); + } + else + { + // Fetch the contact from Virtual phonebook. + const TInt err = + iFetchContact->FetchContact( contactId.ContactLink(), contact ); + hasCSNumbers = HasCSNumbers( contact ); + + // We can delete the contact, because it is not added to + // iFoundContacts. + delete contact; + } } return hasCSNumbers; @@ -323,17 +337,17 @@ { TBool hasCSNumbers = EFalse; - if( aContact ) + if ( aContact ) { const RArray& allNumbers = aContact->AllNumbers(); const TInt count( allNumbers.Count() ); for( TInt i = 0; i < count; i++ ) { const MPhCntMatch::TNumberType type = allNumbers[i].Type(); - if( type != MPhCntMatch::ENone && - type != MPhCntMatch::EFaxNumber && - type != MPhCntMatch::EPagerNumber && - type != MPhCntMatch::EVoipNumber + if ( type != MPhCntMatch::ENone && + type != MPhCntMatch::EFaxNumber && + type != MPhCntMatch::EPagerNumber && + type != MPhCntMatch::EVoipNumber ) { hasCSNumbers = ETrue; @@ -343,10 +357,14 @@ return hasCSNumbers; } +// --------------------------------------------------------------------------- +// Creates the contact matcher. +// --------------------------------------------------------------------------- +// TInt CPhCntMatcherVoIPImpl::CreateMatcher() { TInt err = CPhCntMatcherImpl::CreateMatcher(); - if (!err && !iVoipMatchStrategy ) + if ( !err && !iVoipMatchStrategy ) { TRAP( err, iVoipMatchStrategy = CPhCntVoipContactMatchStrategy::NewL( iContactManager, diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/ContactService/src/cphcntspeeddialimpl.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/cphcntspeeddialimpl.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntspeeddialimpl.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -106,14 +106,6 @@ TInt aSpeedDialPosition, TSpdDialFieldInfo& aFieldInfo ) { - - MVPbkContactLink* contactLink = aContact.ContactLink()->CloneLC(); - CPhCntVPbkContactId* contactId = - CPhCntVPbkContactId::NewL( contactLink, iContactManager ); - CleanupStack::Pop(); // contactLink - aFieldInfo.iContactId = contactId; - - aFieldInfo.iThumbIndex = KErrNotFound; TPhCntNumber speedDial = aContact.SpeedDialNumber( aSpeedDialPosition ); aFieldInfo.iNumberType = speedDial.Type(); } @@ -260,6 +252,9 @@ TInt err = iSpdDial->ShowAssign( aSpeedDialPosition, link ); delete iSpdDial; iSpdDial = NULL; + delete link; + link = NULL; + if ( err == KErrNone ) { err = FetchNumberL( aSpeedDialPosition, aPhoneNumber ); diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/ContactService/src/tphcntservicerequestparams.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/tphcntservicerequestparams.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/tphcntservicerequestparams.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -249,8 +249,6 @@ aContactManager.AppendFilterToSelectorL( *iContactViewFilter, EVPbkContactViewFilterPhoneNumber ); - - iDefaultPriorities.Append( EVPbkDefaultTypePhoneNumber ); TAiwSingleItemSelectionDataV3 data = TAiwSingleItemSelectionDataV3(); diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/inc/CPhCntMatcher.h --- a/phoneengine/PhoneCntFinder/inc/CPhCntMatcher.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/inc/CPhCntMatcher.h Thu Jul 15 18:38:16 2010 +0300 @@ -102,7 +102,7 @@ /** * Match number to phonebook. * @param aMatch Found match, owership tranferred. NULL if not found any. - * @param aNumber Number to match against. + * @param aMatchString Number to match against. * @param aAllowUsernameMatch * is ETrue if username is sufficient for match. * @param aContactStoreUris @@ -116,7 +116,7 @@ */ virtual TInt MatchVoipNumber( MPhCntMatch*& aMatch, - const TDesC& aNumber, + const TDesC& aMatchString, const TBool aAllowUsernameMatch, MDesCArray* aContactStoreUris, TInt aCharsForMatching = 0 ) = 0; @@ -126,6 +126,7 @@ * by contact id. * @since Series60 3.0 * @param aMatch for found match, owership tranferred. Empty if not found. + * @param aMatchString Number to match against. * @param aContactId for current contact. * @return Error code: KErrNone - VoIP call contact found * KErrNotFound - no VoIP call contact found @@ -133,6 +134,7 @@ */ virtual TInt MatchVoipNumber( MPhCntMatch*& aMatch, + const TDesC& aMatchString, const CPhCntContactId& aContactId ) = 0; /** diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/PhoneCntFinder/inc/Misc/CPhCntSpeedDialMonitor.h --- a/phoneengine/PhoneCntFinder/inc/Misc/CPhCntSpeedDialMonitor.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/PhoneCntFinder/inc/Misc/CPhCntSpeedDialMonitor.h Thu Jul 15 18:38:16 2010 +0300 @@ -49,12 +49,7 @@ */ struct TSpdDialFieldInfo { - CPhCntContactId* iContactId; - MPhCntMatch::TNumberType iNumberType; - - // Thumbnail index of a grid array. - TInt iThumbIndex; }; /** diff -r 3c221667e687 -r 94dc1107e8b2 phoneengine/contacthandling/src/cpecontactmatch.cpp --- a/phoneengine/contacthandling/src/cpecontactmatch.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneengine/contacthandling/src/cpecontactmatch.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -81,7 +81,7 @@ delete iSpeedDialCommand; if ( iContactThumbnailLoader && iThumbnailId ) { - iContactThumbnailLoader->Cancel( iThumbnailId ); + iContactThumbnailLoader->Cancel( iThumbnailId ); } delete iThumbnailImage; delete iContactThumbnailLoader; @@ -194,11 +194,10 @@ void CPEContactMatch::MatchWithContactIdL( const TInt aCallId ) - { TEFLOGSTRING( KTAINT, "CNT CPEContactMatch::MatchWithContactIdL" ); MPhCntMatch* match( NULL ); - CPhCntContactId* contactId = NULL; + CPhCntContactId* contactId( NULL ); contactId = CreateContactIdL( iDataStore.CallClientInformation( aCallId ).ContactLink() ); CleanupStack::PushL( contactId ); if ( iDataStore.CallType( aCallId ) == EPECallTypeVoIP ) @@ -208,6 +207,7 @@ TEFLOGSTRING( KTAINT, "CNT CPEContactMatch::MatchWithContactIdL > CPhCntMatcher::MatchVoipNumber" ); // Get contact based on contact id. iContactMatcher->MatchVoipNumber( match, + iDataStore.RemotePhoneNumber( aCallId ), *contactId ); } else @@ -220,9 +220,9 @@ if ( contactId && contactId->IsValid() ) { TEFLOGSTRING( KTAINT, "CNT CPEContactMatch::MatchWithContactIdL > CPhCntMatcher::MatchNumber" ); - iContactMatcher->MatchNumber( match, - iDataStore.RemotePhoneNumber( aCallId ), - *contactId ); + iContactMatcher->MatchNumber( match, + iDataStore.RemotePhoneNumber( aCallId ), + *contactId ); } else { @@ -230,7 +230,7 @@ } } - if ( match != NULL ) + if ( match ) { TEFLOGSTRING( KTAINT, "CNT CPEContactMatch::MatchWithContactIdL, Contact match found" ); CopyContactFieldsDataL( *match, aCallId ); @@ -277,7 +277,7 @@ iContactMatcher->MatchNumber( match, remoteNumber ); } - if ( match != NULL ) + if ( match ) { TEFLOGSTRING( KTAINT, "CNT CPEContactMatch::MatchWithNumberL, Contact match found" ); CopyContactFieldsDataL( *match, aCallId ); @@ -645,7 +645,7 @@ // ----------------------------------------------------------- // CDesCArray* CPEContactMatch::StoreUrisForServiceL( TUint aServiceId ) - { + { CDesCArray* storeUris = new ( ELeave ) CDesC16ArrayFlat( 1 ); CleanupStack::PushL( storeUris ); diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/Group/Bubblemanager.mmp --- a/phoneuis/BubbleManager/Group/Bubblemanager.mmp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/Group/Bubblemanager.mmp Thu Jul 15 18:38:16 2010 +0300 @@ -89,6 +89,7 @@ source BMNumberTypeIcon.cpp source BMMainPaneControl.cpp source BMTouchPaneButton.cpp +SOURCE telbubbleimagescaler.cpp sourcepath ../laf source BMLayout.cpp @@ -122,5 +123,5 @@ LIBRARY akntransitionutils.lib #endif LIBRARY bmcustomization.lib - +LIBRARY bitmaptransforms.lib // End of File diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/Inc/BMMainPaneControl.h --- a/phoneuis/BubbleManager/Inc/BMMainPaneControl.h Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/Inc/BMMainPaneControl.h Thu Jul 15 18:38:16 2010 +0300 @@ -19,8 +19,9 @@ #ifndef C_BUBBLEMAINPANECONTROL_H #define C_BUBBLEMAINPANECONTROL_H +#include #include "BMBubbleManager.h" -#include +#include "telbubbleimagescaler.h" class CBubbleCallObjectManager; class CTelBubbleCustomElement; @@ -34,7 +35,8 @@ * @lib BubbleManager.lib * @since S60 v5.0 */ -NONSHARABLE_CLASS( CBubbleMainPaneControl ) : public CCoeControl +NONSHARABLE_CLASS( CBubbleMainPaneControl ) : public CCoeControl, + public MTelBubbleImageScalerObserver { public: /** @@ -77,7 +79,18 @@ * Returns ETrue when image is being displayed. */ TBool IsUsed() const; - + + // from MTelBubbleImageScalerObserver + /** + * Callback function from CTelBubbleImageScaler + * + * @param aError Error happened during scaling + * @param aBitmap Scaled bitmap + * @return None + */ + void ImageScalingComplete + (TInt aError, CFbsBitmap* aBitmap); + private: CBubbleMainPaneControl( CBubbleManager& aCustomManager, CBubbleCallObjectManager& aCallObjectManager ); @@ -87,8 +100,10 @@ TBool& aBitmapOwnership, CFbsBitmap*& aMask, TBool& aMaskOwnership, - TBool aIsScalable ); + TBool aIsScalable, + TBool aThumbnail = EFalse ); + void StartScaling( CFbsBitmap *aSourceBitmap ); private: // data CBubbleManager& iBubbleManager; CBubbleCallObjectManager& iCallObjectManager; @@ -98,6 +113,11 @@ TBool iIsUsed; CFbsBitmap* iBitmap; // not owned CFbsBitmap* iMask; // not owned + CTelBubbleImageScaler *iScaler; + CFbsBitmap *iScaledImage; + + // to prevent loading & scaling the same image again. + CFbsBitmap* iOldBitmap; }; #endif // C_BUBBLEMAINPANECONTROL_H diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/Inc/telbubbleimagescaler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/BubbleManager/Inc/telbubbleimagescaler.h Thu Jul 15 18:38:16 2010 +0300 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 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" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Ctelbubbleimagescaler declaration +* +*/ + +#ifndef TELBUBBLEIMAGESCALER_H +#define TELBUBBLEIMAGESCALER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFbsBitmap; +class CBitmapScaler; + +/** + * Interface to observe scaling status + */ +class MTelBubbleImageScalerObserver +{ +public: + /** + * Callback to indicate scaling completion + * + * @param aError Error occured during scaling + * @param aBitmap Scaled bitmap + */ + virtual void ImageScalingComplete + (TInt aError, CFbsBitmap* aBitmap) = 0; + }; + +/** + * Asynchronous bitmap scaler. + * Uses CBitmapScaler to do scaling + */ +class CTelBubbleImageScaler : public CActive +{ +public: + // Cancel and destroy + ~CTelBubbleImageScaler(); + + /** Two phase constructor */ + static CTelBubbleImageScaler* NewL(MTelBubbleImageScalerObserver& aObserver); + + /** Two phase constructor */ + static CTelBubbleImageScaler* NewLC(MTelBubbleImageScalerObserver& aObserver); + + /** + * Scaling status + */ + enum TState + { + EScalingIdle = 0, EScalingStarted, EScalingDone + }; + +public: + /** + * Starts bitmap scaling Asynchronously + * @param aSrc Bitmap that needs to be scaled + * @param aTarget Scaled bitmap + * @return None. + */ + void StartScaleL(CFbsBitmap* aSrc, CFbsBitmap* aTarget); + + /** + * Sets the state of Scaler + * @param aState State to be set + * @return None. + */ + void SetState(TState aState); + + /** + * Returns the current state of Scaler + * @param None + * @return TInt State of the scaler + */ + TInt GetState(); + +private: + /* constructor */ + CTelBubbleImageScaler(MTelBubbleImageScalerObserver& aObserver); + + /* Second-phase constructor */ + void ConstructL(); + +private: // From CActive + /* + * Handle completion + */ + void RunL(); + + /* + * Cancels active request + */ + void DoCancel(); + + /* + * Override to handle leaves from RunL(). Default implementation causes + * the active scheduler to panic. + */ + TInt RunError(TInt aError); + +private: + /* + * Scaler observer instance + */ + MTelBubbleImageScalerObserver& iObserver; + + /* + * Own: Bitmap scaler + */ + CBitmapScaler* iScaler; + + /* + * Own: The bitmap that is scaled. + */ + CFbsBitmap* iScaledBitmap; + + /* + * Scaler state + */ + TInt iState; + }; + +#endif // TELBUBBLEIMAGESCALER_H + +// End of File + diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/Src/BMCallObjectManager.cpp --- a/phoneuis/BubbleManager/Src/BMCallObjectManager.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMCallObjectManager.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -167,36 +167,52 @@ TSize sourceSize( iMediaReader->SourceSize() ); - TReal scaleFactor; - TRect clipRect; - TSize targetSize; - if ( BubbleCallObjectUtils::GetScaleFactorAndClipRect( + TReal scaleFactor( 0 ); + TRect clipRect( 0, 0, 0, 0 ); + TSize targetSize( 0, 0 ); + + // if the caller image (source size) is bigger than aPreferredImageSize (the whole caller-image area) + // then some down scaling is required. + if ( sourceSize.iHeight > aPreferredImageSize.iHeight && sourceSize.iWidth > aPreferredImageSize.iWidth ) + { + targetSize = aPreferredImageSize; + + BubbleCallObjectUtils::GetScaleFactorAndClipRect( sourceSize, aPreferredImageSize, BubbleCallObjectUtils::EFillTarget, scaleFactor, - clipRect ) && - aTinyImageSize != TSize(0,0) ) + clipRect ); + } + else // no scaling. wide or tall images gets cropped from center if required. { - // Tiny image - BubbleCallObjectUtils::GetScaleFactorAndClipRect( - sourceSize, - aTinyImageSize, - BubbleCallObjectUtils::EMaximumFit, - scaleFactor, - clipRect ); - - targetSize = aTinyImageSize; + targetSize = aPreferredImageSize; + scaleFactor = 1; + TInt x_offset = 0; + TInt y_offset = 0; + + if ( sourceSize.iWidth > aPreferredImageSize.iWidth ) + { + x_offset = ( sourceSize.iWidth - aPreferredImageSize.iWidth ) / 2; + } + if ( sourceSize.iHeight > aPreferredImageSize.iHeight ) + { + y_offset = ( sourceSize.iHeight - aPreferredImageSize.iHeight ) / 2; + } + + clipRect = sourceSize; + + if ( x_offset > 0 || y_offset > 0 ) + { + // clip from center of the source image + clipRect.Shrink( x_offset, y_offset ); + } } - else - { - targetSize = aPreferredImageSize; - } - + iMediaReader->StartReadingL( targetSize, scaleFactor, clipRect, - this ); + this ); } // --------------------------------------------------------------------------- diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/Src/BMMainPaneControl.cpp --- a/phoneuis/BubbleManager/Src/BMMainPaneControl.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMMainPaneControl.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -28,6 +28,8 @@ #include #include +#define SCALE_FACTOR 1.5 + // --------------------------------------------------------------------------- // C++ constructor // --------------------------------------------------------------------------- @@ -36,7 +38,9 @@ CBubbleManager& aBubbleManager, CBubbleCallObjectManager& aCallObjectManager ) : iBubbleManager( aBubbleManager ), - iCallObjectManager ( aCallObjectManager ) + iCallObjectManager ( aCallObjectManager ), + iScaler( NULL ), + iScaledImage( NULL ) { } @@ -46,6 +50,7 @@ // void CBubbleMainPaneControl::ConstructL() { + iScaler = CTelBubbleImageScaler::NewL( *this ); } // --------------------------------------------------------------------------- @@ -72,6 +77,11 @@ // CBubbleMainPaneControl::~CBubbleMainPaneControl() { + delete iScaler; + iScaler = NULL; + + delete iScaledImage; + iScaledImage = NULL; } // --------------------------------------------------------------------------- @@ -82,23 +92,49 @@ const CBubbleHeader& aHeader ) { iBubble = aHeader.BubbleId(); - iBitmap = aHeader.CallObjectImage(); - iMask = aHeader.CallObjectImageMask(); + TBool thumbnail( EFalse ); + TBool noScaling( EFalse ); + + if ( aHeader.CallObjectImage() ) + { + iBitmap = aHeader.CallObjectImage(); + iMask = aHeader.CallObjectImageMask(); + } + else if ( aHeader.TnBitmap() ) + { + iBitmap = aHeader.TnBitmap(); + iMask = aHeader.TnBitmapMask(); + thumbnail = ETrue; + } + else + { + iBitmap = NULL; + } + iThreeLinedBubble = ( aHeader.CNAP().Length() > 0 ); + // PrepareBitmapsL() needs to know if a brand new thumbnail is about to get prepared. + if ( thumbnail && (iOldBitmap != NULL) && (iOldBitmap == iBitmap) && (iScaler->GetState() != CTelBubbleImageScaler::EScalingStarted) ) + { + noScaling = ETrue; + } + if ( iBitmap ) { - CFbsBitmap* bitmap; - CFbsBitmap* mask; - TBool bitmapOwnership; - TBool maskOwnership; + iOldBitmap = iBitmap; + + CFbsBitmap* bitmap( NULL ); + CFbsBitmap* mask( NULL ); + TBool bitmapOwnership( EFalse ); + TBool maskOwnership( EFalse ); TRAPD(err, PrepareBitmapsL( bitmap, bitmapOwnership, mask, maskOwnership, aHeader.CallObjectImageType() == - CBubbleHeader::EThemeImage ) ); + CBubbleHeader::EThemeImage, + noScaling )); if ( err ) { @@ -119,6 +155,12 @@ iIsUsed = ETrue; MakeVisible( ETrue ); + + // upscale thumbnails if loading it for the first time. + if ( thumbnail && !noScaling && ( iScaler->GetState() != CTelBubbleImageScaler::EScalingStarted ) ) + { + StartScaling( iBitmap ); + } } } @@ -131,9 +173,18 @@ TBool& aBitmapOwnership, CFbsBitmap*& aMask, TBool& aMaskOwnership, - TBool aIsScalable ) + TBool aIsScalable, + TBool aThumbnail ) { - aBitmap = iBitmap; + if ( aThumbnail ) + { + aBitmap = iScaledImage; + } + else + { + aBitmap = iBitmap; + } + aMask = iMask; aBitmapOwnership = EFalse; aMaskOwnership = EFalse; @@ -278,5 +329,117 @@ } } +// --------------------------------------------------------------------------- +// CTelBubbleCallImage::ImageScalingComplete +// +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::ImageScalingComplete( TInt aError, + CFbsBitmap* aBitmap ) + { + if ( aError == KErrNone ) + { + // Draw the scaled image + iScaledImage = aBitmap; + iScaler->SetState( CTelBubbleImageScaler::EScalingDone ); + + CFbsBitmap* bitmap( NULL ); + CFbsBitmap* mask( NULL ); + TBool bitmapOwnership( EFalse ); + TBool maskOwnership( EFalse ); + + TRAPD(err, PrepareBitmapsL( bitmap, + bitmapOwnership, + mask, + maskOwnership, + EFalse, + ETrue ) ); + + if ( err ) + { + return; + } + + if ( iCallImage->ControlType() == + CTelBubbleCustomElement::EBubbleCallImage ) + { + CTelBubbleCallImage* image = + static_cast ( iCallImage->Control() ); + image->SetImage( bitmap, EFalse, mask, maskOwnership ); + } + + SizeChanged(); + + iIsUsed = ETrue; + MakeVisible( ETrue ); + + Parent()->DrawNow(); // refreshing view with scaled image + } + else if ( aError == KErrCancel ) + { + // error is ignored + // This error is returned when a previous scaling is cancelled + // while new scaling request is given to active object + } + else + { + // draw the unscaled image in error cases + + delete iScaledImage; + iScaledImage = NULL; + } + + iScaler->SetState( CTelBubbleImageScaler::EScalingDone ); + } + +// --------------------------------------------------------------------------- +// CTelBubbleCallImage::StartScaling +// +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::StartScaling( CFbsBitmap *aSourceBitmap ) + { + if ( !iScaler ) + { + return; + } + + iScaler->Cancel(); // cancels any outstanding scaling requests + + delete iScaledImage; + iScaledImage = NULL; + + // create a bitmap for scaled size + TRAPD( err, iScaledImage = new (ELeave) CFbsBitmap ); + if ( err != KErrNone ) + { + // no scaling in error cases + iScaler->SetState( CTelBubbleImageScaler::EScalingIdle ); + return; + } + + TSize size = aSourceBitmap->SizeInPixels(); + TRect scaledRect( 0, 0, size.iWidth * SCALE_FACTOR, size.iHeight * SCALE_FACTOR ); + + TRAP( err, iScaledImage->Create( scaledRect.Size(), aSourceBitmap->DisplayMode() ) ); + if ( err != KErrNone ) + { + delete iScaledImage; + iScaledImage = NULL; + iScaler->SetState( CTelBubbleImageScaler::EScalingIdle ); + } + else + { + //start scaling + TRAPD( err, iScaler->StartScaleL( aSourceBitmap, iScaledImage ) ); + if (err != KErrNone) + { + iScaler->SetState( CTelBubbleImageScaler::EScalingIdle ); + delete iScaledImage; + iScaledImage = NULL; + } + } + } + // END OF FILE diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/Src/telbubbleimagescaler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/BubbleManager/Src/telbubbleimagescaler.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 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" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Ctelbubbleimagescaler implementation +* +*/ + +#include "telbubbleimagescaler.h" +#include "BMBubbleDebug.h" +#include + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CTelBubbleImageScaler::CTelBubbleImageScaler( + MTelBubbleImageScalerObserver& aObserver) : + CActive(CActive::EPriorityStandard), iObserver(aObserver), iState(EScalingIdle), + iScaler( NULL ) + { + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CTelBubbleImageScaler* CTelBubbleImageScaler::NewLC( + MTelBubbleImageScalerObserver& aObserver) + { + CTelBubbleImageScaler* self = new (ELeave) CTelBubbleImageScaler( + aObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CTelBubbleImageScaler* CTelBubbleImageScaler::NewL( + MTelBubbleImageScalerObserver& aObserver) + { + CTelBubbleImageScaler* self = CTelBubbleImageScaler::NewLC(aObserver); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::ConstructL +// --------------------------------------------------------------------------- +// +void CTelBubbleImageScaler::ConstructL() + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CTelBubbleImageScaler::~CTelBubbleImageScaler() + { + if ( iScaler ) + { + iScaler->Cancel(); // Cancel any request, if outstanding + } + + delete iScaler; + iState = EScalingIdle; + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::StartScaleL +// --------------------------------------------------------------------------- +// +void CTelBubbleImageScaler::StartScaleL(CFbsBitmap* aSrc, CFbsBitmap* aTarget) + { + BM_TRACE_( "CTelBubbleImageScaler::StartScaleL()" ); + if ( !iScaler ) + { + iScaler = CBitmapScaler::NewL(); + } + + iScaledBitmap = aTarget; + + iScaler->SetQualityAlgorithm( CBitmapScaler::EMaximumQuality ); + iScaler->Scale( &iStatus, *aSrc, *aTarget, EFalse ); + iState = EScalingStarted; + SetActive(); + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::DoCancel +// --------------------------------------------------------------------------- +// +void CTelBubbleImageScaler::DoCancel() + { + BM_TRACE_( "CTelBubbleImageScaler::DoCancel()" ); + if ( iScaler ) + { + iScaler->Cancel(); + } + + iObserver.ImageScalingComplete( KErrCancel, iScaledBitmap ); + iState = EScalingDone; + iScaledBitmap = NULL; + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::RunL +// --------------------------------------------------------------------------- +// +void CTelBubbleImageScaler::RunL() + { + BM_TRACE_( "CTelBubbleImageScaler::RunL()" ); + iState = EScalingDone; + TInt status = iStatus.Int(); + iObserver.ImageScalingComplete( status, iScaledBitmap ); + iScaledBitmap = NULL; + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::RunError +// --------------------------------------------------------------------------- +// +TInt CTelBubbleImageScaler::RunError( TInt aError ) + { + BM_TRACE_( "CTelBubbleImageScaler::RunError()" ); + iState = EScalingDone; + iObserver.ImageScalingComplete( aError, iScaledBitmap ); + iScaledBitmap = NULL; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::SetState +// --------------------------------------------------------------------------- +// +void CTelBubbleImageScaler::SetState(TState aState) + { + BM_TRACE_1( "CTelBubbleImageScaler::SetState(): %d", aState ); + iState = aState; + } + +// --------------------------------------------------------------------------- +// CTelBubbleImageScaler::GetState +// --------------------------------------------------------------------------- +// +TInt CTelBubbleImageScaler::GetState() + { + BM_TRACE_1( "CTelBubbleImageScaler::GetState(): %d", iState ); + return iState; + } diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/bmcustomization/src/telbubblecallimage.cpp --- a/phoneuis/BubbleManager/bmcustomization/src/telbubblecallimage.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/bmcustomization/src/telbubblecallimage.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -203,60 +203,68 @@ { return; } - - // If bitmap is bigger than drawing area then clip from center. - TRect rect; - if ( IsFullScreenImage() ) - { - rect = Rect(); - } - else - { - rect = ImagePlacingArea(); - } - + + // If bitmap is bigger than drawing area then clip from center of the image. + TRect rect = Rect(); iSourceRect = iImage->SizeInPixels(); - + TInt offsetX = ( iSourceRect.Width() > rect.Width() ) ? ((iSourceRect.Width() - rect.Width()) / 2) : 0; TInt offsetY = ( iSourceRect.Height() > rect.Height() ) ? ((iSourceRect.Height() - rect.Height()) / 2) : 0; - iSourceRect.Shrink( offsetX, offsetY ); - // If bitmap is smaller than drawing area then center it. + iSourceRect.Shrink( offsetX, offsetY ); + + // If bitmap is smaller than the drawing area then center the image on it. iOffset.iX = ( iSourceRect.Width() < rect.Width() ) ? ((rect.Width() - iSourceRect.Width()) / 2) : 0; - iOffset.iY = ( iSourceRect.Height() < rect.Height() ) ? - ((rect.Height() - iSourceRect.Height()) / 2) : 0; + + iOffset.iY = 0; + + // lift the image higher if needed. + if ( iSourceRect.Height() < rect.Height() ) + { + // check if it fits totally above the bubble + TInt height = iImagePlacingArea.iBr.iY - iImagePlacingArea.iTl.iY; + + if ( iSourceRect.Height() < height ) + { + // if it fits then center it above the bubble + iOffset.iY = ( height - iSourceRect.Height() ) / 2; + } + } } - // --------------------------------------------------------------------------- // CTelBubbleCallImage::Draw // --------------------------------------------------------------------------- // EXPORT_C void CTelBubbleCallImage::Draw( const TRect& /*aRect*/ ) const { - if ( iImage ) + if ( iImage ) { CWindowGc& gc = SystemGc(); - const TPoint topLeft = IsFullScreenImage() ? Rect().iTl : iImagePlacingArea.iTl; + + const TPoint topLeft = Rect().iTl; const TPoint bitmapTopLeft = topLeft + iOffset; - - if( iMask ) + + // if we have y offset then the image wont go under the bubble in any case and so + // no need for masking + if ( iMask && iOffset.iY == 0 ) { gc.BitBltMasked( bitmapTopLeft, - iImage, - iSourceRect, - iMask, - EFalse ); + iImage, + iSourceRect, + iMask, + EFalse ); } - else + else { gc.BitBlt( bitmapTopLeft, - iImage, - iSourceRect ); + iImage, + iSourceRect ); } + DrawRoundRect( gc, bitmapTopLeft, iSourceRect.Size() ); } } diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/BubbleManager/eabi/bubblemanageru.def --- a/phoneuis/BubbleManager/eabi/bubblemanageru.def Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/BubbleManager/eabi/bubblemanageru.def Thu Jul 15 18:38:16 2010 +0300 @@ -138,4 +138,5 @@ _ZTV25CBubbleOutlookNumberEntry @ 137 NONAME _ZTV29CBubbleOutlookBottomImageCnap @ 138 NONAME _ZTV29CBubbleOutlookBottomRightCnap @ 139 NONAME - + _ZTI21CTelBubbleImageScaler @ 140 NONAME + _ZTV21CTelBubbleImageScaler @ 141 NONAME diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/dialer/src/cdialertoolbarcontainer.cpp --- a/phoneuis/dialer/src/cdialertoolbarcontainer.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/dialer/src/cdialertoolbarcontainer.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -471,13 +471,13 @@ keyEvent.iCode = 0; // key code is always 0 for key up and down events keyEvent.iScanCode = EStdKeyBackspace; - iCoeEnv->SimulateKeyEventL( keyEvent, EEventKeyDown ); + TRAP_IGNORE( iCoeEnv->SimulateKeyEventL( keyEvent, EEventKeyDown ) ); keyEvent.iCode = EKeyBackspace; - iCoeEnv->SimulateKeyEventL( keyEvent, EEventKey ); + TRAP_IGNORE( iCoeEnv->SimulateKeyEventL( keyEvent, EEventKey ) ); keyEvent.iCode = 0; - iCoeEnv->SimulateKeyEventL( keyEvent, EEventKeyUp ); + TRAP_IGNORE( iCoeEnv->SimulateKeyEventL( keyEvent, EEventKeyUp ) ); } // end of file diff -r 3c221667e687 -r 94dc1107e8b2 phoneuis/easydialing/src/easydialingutils.cpp --- a/phoneuis/easydialing/src/easydialingutils.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneuis/easydialing/src/easydialingutils.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -80,18 +80,20 @@ ptr.Append( KNameSeparatorChar ); ptr.Append( *firstName ); } - } - - // If firstname and last name are missing, duplicate company name into name field. + } + + // If firstname and last name are missing, put company name into the first field. if ( ptr.Length() == 0 ) { ptr.Append( *companyName ); } - - // Append company name using tab as a separator. - ptr.Append( KListFieldSeparatorChar ); - ptr.Append( *companyName ); - + else + { + // Otherwise add company name into the second field using tab as a separator. + ptr.Append( KListFieldSeparatorChar ); + ptr.Append( *companyName ); + } + CleanupStack::Pop( string ); CleanupStack::PopAndDestroy( 3, firstName ); CleanupStack::PushL( string );