# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1276065671 -10800 # Node ID b8d67d6176f51f26c309ad0423947b8f364df40c # Parent b68fcd92391126fe4814c8343931a20895471489 Revision: 201021 Kit: 2010123 diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/phone_application_commands_api/phone_application_commands_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/phone_application_commands_api/phone_application_commands_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + phone_application_commands_api + List of phoneapp UI commands. This API is related to telephony_menu_extension_api. + c++ + phoneapp + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/phone_application_voip_commands_api/phone_application_voip_commands_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/phone_application_voip_commands_api/phone_application_voip_commands_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + phone_application_voip_commands_api + List of phoneapp VoIP related UI commands. This API is related to telephony_menu_extension_api. + c++ + phoneapp + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/telephony_bubble_extension_api/telephony_bubble_extension_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/telephony_bubble_extension_api/telephony_bubble_extension_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + telephony_bubble_extension_api + This API enables customization of call handling UI (call bubbles). Certain indicators and caller image can be replaced with plug-in based implementation. + c++ + phoneuis + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/telephony_logging_extension_api/telephony_logging_extension_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/telephony_logging_extension_api/telephony_logging_extension_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + telephony_logging_extension_api + This plug-in API enables manipulation of telephony event logging. + c++ + phoneengine + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/telephony_matching_extension_api/telephony_matching_extension_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/telephony_matching_extension_api/telephony_matching_extension_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + telephony_matching_extension_api + This plug-in API enables manipulation of telephony contact matching. + c++ + phoneengine + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/telephony_mediator_api/telephony_mediator_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/telephony_mediator_api/telephony_mediator_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + telephony_mediator_api + This mediator API can be used to: end calls, mute/unmute microphone and get call status information. + c++ + phoneapp + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/telephony_menu_extension_api/telephony_menu_extension_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/telephony_menu_extension_api/telephony_menu_extension_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + telephony_menu_extension_api + This plug-in API enables customization of phoneapp menus. + c++ + phoneapp + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phone_plat/video_telephony_mediator_api/video_telephony_mediator_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phone_plat/video_telephony_mediator_api/video_telephony_mediator_api.metaxml Wed Jun 09 09:41:11 2010 +0300 @@ -0,0 +1,13 @@ + + + video_telephony_mediator_api + Video telephony specific mediator service. Used by video telephony. + c++ + phoneapp + + + + no + no + + diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuicontrol/group/phoneuicontrol.mmp --- a/phoneapp/phoneuicontrol/group/phoneuicontrol.mmp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuicontrol/group/phoneuicontrol.mmp Wed Jun 09 09:41:11 2010 +0300 @@ -102,3 +102,5 @@ LIBRARY starterclient.lib LIBRARY phonemediatorcenter.lib + +LIBRARY peninputclient.lib diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h --- a/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h Wed Jun 09 09:41:11 2010 +0300 @@ -22,6 +22,8 @@ // INCLUDES #include //Feature flags #include +#include +#include // FORWARD DECLARATIONS class MPhoneStateMachine; @@ -38,7 +40,8 @@ * */ class CPhoneKeyEventForwarder - : public CCoeControl + : public CCoeControl, + public MPenUiActivationHandler { public: // Constructors and destructor @@ -115,6 +118,17 @@ const TKeyEvent& aKeyEvent, TEventCode aType ); + /** + * @see MPenUiActivationHandler + */ + void OnPeninputUiDeactivated(); + + /** + * @see MPenUiActivationHandler + */ + void OnPeninputUiActivated(); + + private: /** @@ -271,6 +285,16 @@ * Needed to detect situations where key up event is handled before key event. */ TBool iExpectKeyUpEvent; + + /** + * Server that sends events via callback when the virtual keyboard is opened/closed. + */ + RPeninputServer iPeninputServer; + + /** + * Status of virtual keyboard. + */ + TBool iVirtualKeyBoardOpen; }; #endif // CPHONEKEYEVENTFORWARDER_H diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp --- a/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -22,6 +22,7 @@ #include #include #include +#include #include "mphonestatemachine.h" #include "mphonekeyeventhandler.h" @@ -79,6 +80,13 @@ { __LOGMETHODSTARTEND( EPhoneControl, "CPhoneKeyEventForwarder::~CPhoneKeyEventForwarder"); + if ( AknLayoutUtils::PenEnabled() ) + { + iPeninputServer.RemovePenUiActivationHandler( this ); + } + + iPeninputServer.Close(); + if ( iEikonEnv ) { iEikonEnv->EikAppUi()->RemoveFromStack( this ); @@ -227,6 +235,13 @@ static_cast( ptrParam.Pointer() ); iQwertyHandler->AddQwertyModeObserverL( *qwertyObserver ); + + if ( AknLayoutUtils::PenEnabled() ) + { + User::LeaveIfError( iPeninputServer.Connect() ); + iPeninputServer.AddPenUiActivationHandler( this, EPluginInputModeAll ); + iVirtualKeyBoardOpen = iPeninputServer.IsVisible(); + } } // ----------------------------------------------------------------------------- @@ -419,6 +434,32 @@ return EKeyWasNotConsumed; } +// --------------------------------------------------------------------------- +// CPhoneKeyEventForwarder::OnPeninputUiDeactivated +// +// Gets called when the virtual keyboard editor is closed. +// --------------------------------------------------------------------------- +// +void CPhoneKeyEventForwarder::OnPeninputUiDeactivated() + { + __LOGMETHODSTARTEND( EPhoneControl, + "CPhoneKeyEventForwarder::OnPeninputUiDeactivated"); + iVirtualKeyBoardOpen = EFalse; + } + +// --------------------------------------------------------------------------- +// CPhoneKeyEventForwarder::OnPeninputUiActivated +// +// Gets called when the virtual keyboard editor is opened. +// --------------------------------------------------------------------------- +// +void CPhoneKeyEventForwarder::OnPeninputUiActivated() + { + __LOGMETHODSTARTEND( EPhoneControl, + "CPhoneKeyEventForwarder::OnPeninputUiActivated"); + iVirtualKeyBoardOpen = ETrue; + } + // ----------------------------------------------------------- // CPhoneKeyEventForwarder::HandleEventKeyDownBeforeControlStackL // ----------------------------------------------------------- @@ -457,6 +498,11 @@ !IsKeySimulatedByTouchDialer( aKeyEvent ) && iQwertyHandler->IsQwertyInput() && iViewCommandHandle->HandleCommandL( EPhoneViewIsNumberEntryNumericMode ) != EPhoneViewResponseSuccess; + + // Prevent long tap functionality for key events coming from virtual touch keyboard. + // Virtual touch keyboard has own editing functionality for long presses, and telephony + // should not add conflicting behaviour on top of that. + preventLongTap = preventLongTap || iVirtualKeyBoardOpen; if ( !preventLongTap ) { diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuicontrol/src/cphonestate.cpp --- a/phoneapp/phoneuicontrol/src/cphonestate.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonestate.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -1359,6 +1359,14 @@ } } + if( NumberEntryManagerL()->IsNumberEntryUsedL() ) + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleTrue ); + } + else + { + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleFalse ); + } } // ----------------------------------------------------------- @@ -1380,6 +1388,8 @@ { CloseCustomizedDialerL(); } + + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetIncallBubbleTrue ); } // --------------------------------------------------------- // CPhoneState::HandleIdleForegroundEventL diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuicontrol/src/cphonestateidle.cpp --- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -301,7 +301,16 @@ } else { - HandleCommandL( EPhoneCmdOptions ); + TPhoneCmdParamInteger numberEntryCountParam; + iViewCommandHandle->ExecuteCommandL( + EPhoneViewGetNumberEntryCount, + &numberEntryCountParam ); + + TInt neLength( numberEntryCountParam.Integer() ); + if ( neLength > 0 ) + { + HandleSendCommandL(); + } } } break; diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuicontrol/src/cphonestateincall.cpp --- a/phoneapp/phoneuicontrol/src/cphonestateincall.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonestateincall.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -154,8 +154,17 @@ } else { - HandleCommandL( EPhoneCmdOptions ); - } + TPhoneCmdParamInteger numberEntryCountParam; + iViewCommandHandle->ExecuteCommandL( + EPhoneViewGetNumberEntryCount, + &numberEntryCountParam ); + + TInt neLength( numberEntryCountParam.Integer() ); + if ( neLength > 0 ) + { + HandleCommandL( EPhoneNumberAcqCmdSendCommand ); + } + } } break; #endif diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuistates/inc/cphoneerrormessageshandler.h --- a/phoneapp/phoneuistates/inc/cphoneerrormessageshandler.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuistates/inc/cphoneerrormessageshandler.h Wed Jun 09 09:41:11 2010 +0300 @@ -109,6 +109,11 @@ * Return ETrue if video call. */ TBool IsVideoCall( const TInt aCallId ) const; + + /** + * Return ETrue if voice call. + */ + TBool IsVoiceCall( const TInt aCallId ) const; protected: diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuistates/src/cphoneconference.cpp --- a/phoneapp/phoneuistates/src/cphoneconference.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneconference.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -17,6 +17,7 @@ // INCLUDES +#include #include #include #include @@ -41,6 +42,7 @@ #include "tphonecmdparamcallstatedata.h" #include "cphonekeys.h" #include "phonelogger.h" +#include "cphonepubsubproxy.h" // ================= MEMBER FUNCTIONS ======================= @@ -81,6 +83,10 @@ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled, &globalNotifierParam ); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverAllowed ); DefineAndSetHoldFlagL(); @@ -461,7 +467,12 @@ EPhoneViewGetCallIdByState, &callStateData ); if( callStateData.CallId() > KErrNotFound ) - { + { + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + UpdateCbaL( EPhoneCallHandlingCallWaitingCBA ); iStateMachine->ChangeState( EPhoneStateWaitingInSingle ); } @@ -839,6 +850,11 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::HandleDiallingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + BeginUiUpdateLC(); CloseSelectionListL(); @@ -922,6 +938,11 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConference::HandleIncomingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + BeginUiUpdateLC(); // Hide the number entry if it exists diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuistates/src/cphoneemergency.cpp --- a/phoneapp/phoneuistates/src/cphoneemergency.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneemergency.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -172,11 +172,11 @@ CPhoneGsmInCall::HandlePhoneEngineMessageL( aMessage, aCallId ); if ( iStateMachine->PhoneEngineInfo()->CallState( KPEEmergencyCallId ) == EPEStateDialing ) { - TPhoneCmdParamBoolean isProgressNoteVisible; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsProgressNoteVisible, - &isProgressNoteVisible ); + TPhoneCmdParamBoolean isNoteVisible; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsNoteVisible, + &isNoteVisible ); - if ( !isProgressNoteVisible.Boolean() ) + if ( !isNoteVisible.Boolean() ) { ShowNoteL( EPhoneEmergencyConnectWaitNote ); UpdateSetupCbaL(); @@ -667,15 +667,6 @@ switch( aCommand ) { - case EPhoneInCallCmdDtmfManualQuery: - if ( iStateMachine->PhoneEngineInfo()->CallState( KPEEmergencyCallId ) == EPEStateDialing ) - { - // Remove emergency connecting note - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote ); - } - commandStatus = CPhoneGsmInCall::HandleCommandL( aCommand ); - break; - case EPhoneDtmfDialerExit: // fall through case EPhoneDtmfDialerCancel: { @@ -683,11 +674,11 @@ { CloseDTMFEditorL(); - TPhoneCmdParamBoolean isProgressNoteVisible; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsProgressNoteVisible, - &isProgressNoteVisible ); + TPhoneCmdParamBoolean isNoteVisible; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetIsNoteVisible, + &isNoteVisible ); - if ( !isProgressNoteVisible.Boolean() ) + if ( !isNoteVisible.Boolean() ) { ShowNoteL( EPhoneEmergencyConnectWaitNote ); UpdateSetupCbaL(); diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp --- a/phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneerrormessageshandler.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -383,6 +383,10 @@ { SendGlobalInfoNoteL( EPhoneNoteCalledNumberHasBarredIncomingCalls ); } + else if ( IsVoiceCall( aErrorInfo.iCallId )) + { + SendGlobalWarningNoteL( EPhoneNoteCallInfoCauseValue21 ); + } break; case ECCPErrorMovedPermanently: @@ -578,4 +582,23 @@ ->CallType( aCallId )== EPECallTypeVideo ); } +// ----------------------------------------------------------- +// CPhoneErrorMessagesHandler::IsVoiceCall +// ----------------------------------------------------------- +// +TBool CPhoneErrorMessagesHandler::IsVoiceCall( const TInt aCallId ) const + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneErrorMessagesHandler::IsVoiceCall() "); + + if( aCallId == KErrNotFound ) + { + // Illegal call id, check call type command + return ( iStateMachine->PhoneEngineInfo()->CallTypeCommand() + == EPECallTypeCSVoice ); + } + + return ( iStateMachine->PhoneEngineInfo() + ->CallType( aCallId )== EPECallTypeCSVoice ); + } + // End of File diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuistates/src/cphonesinglecall.cpp --- a/phoneapp/phoneuistates/src/cphonesinglecall.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphonesinglecall.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -27,6 +27,7 @@ #include #include #include +#include #include "cphonesinglecall.h" #include "tphonecmdparamstring.h" @@ -114,6 +115,10 @@ iCallId = callStateData.CallId(); iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag ); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverAllowed ); // Update phone number availability for menu use PhoneNumberAvailableInPhoneEngineL( callStateData.CallId() ); @@ -494,6 +499,11 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::HandleIncomingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + BeginUiUpdateLC(); // Hide the number entry if it exists @@ -608,6 +618,11 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneSingleCall::HandleDiallingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + BeginUiUpdateLC(); SetNumberEntryVisibilityL(EFalse); diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuistates/src/cphonetwosingles.cpp --- a/phoneapp/phoneuistates/src/cphonetwosingles.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphonetwosingles.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -17,6 +17,7 @@ // INCLUDES +#include #include #include #include @@ -39,6 +40,7 @@ #include "tphonecmdparamcallstatedata.h" #include "phonestatedefinitionsgsm.h" #include "phonelogger.h" +#include "cphonepubsubproxy.h" // ================= MEMBER FUNCTIONS ======================= @@ -78,6 +80,11 @@ globalNotifierParam.SetBoolean( EFalse ); iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled, &globalNotifierParam ); + + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverAllowed ); } // ----------------------------------------------------------- @@ -389,6 +396,11 @@ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneTwoSingles::HandleIncomingL()"); + CPhonePubSubProxy::Instance()->ChangePropertyValue( + KPSUidScreenSaver, + KScreenSaverAllowScreenSaver, + EPhoneScreensaverNotAllowed ); + BeginUiUpdateLC(); // Hide the number entry if it exists diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiutils/inc/phonerssbase.h --- a/phoneapp/phoneuiutils/inc/phonerssbase.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiutils/inc/phonerssbase.h Wed Jun 09 09:41:11 2010 +0300 @@ -347,6 +347,7 @@ EPhoneNoteNoService, EPhoneNoteCallInfoCauseValue16, EPhoneNoteCallInfoCauseValue18, + EPhoneNoteCallInfoCauseValue21, EPhoneNoteCallInfoCauseValue22, EPhoneNoteCallInfoCauseValue34, EPhoneNoteCallInfoCauseValue38, diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp --- a/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -1443,7 +1443,11 @@ case EPhoneNoteCalledNumberHasBarredIncomingCalls: retVal = R_NOTE_CALLED_NUMBER_HAS_BARRED_INCOMING_CALLS; break; - + + case EPhoneNoteCallInfoCauseValue21: + retVal = R_CALL_INFO_CAUSE_VALUE21; + break; + case EPhoneNoteCallInfoCauseValue22: retVal = R_CALL_INFO_CAUSE_VALUE22; break; diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/group/phoneuiview.mmp --- a/phoneapp/phoneuiview/group/phoneuiview.mmp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/group/phoneuiview.mmp Wed Jun 09 09:41:11 2010 +0300 @@ -171,3 +171,5 @@ LIBRARY serviceprovidersettings.lib LIBRARY musmanagerclient.lib + +LIBRARY aknskinsrv.lib diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/inc/cphoneviewcontroller.h --- a/phoneapp/phoneuiview/inc/cphoneviewcontroller.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/inc/cphoneviewcontroller.h Wed Jun 09 09:41:11 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include #include "mphoneviewcommandhandle.h" #include "cphonerecoverysystem.h" @@ -89,8 +90,9 @@ public MPhoneStatusPaneObserver, public MPhoneViewBlockingDialogObserver, public MNumberEntryObserver, - public MPhoneSecurityModeChangeObserver, - public MPhoneViewControllerObserver + public MPhoneSecurityModeChangeObserver, + public MPhoneViewControllerObserver, + public MAknsSkinChangeObserver { public: // Constructors and destructor @@ -664,6 +666,33 @@ */ static void EffectCleanup(TAny* aThis ); + private: + /** + * Called by the skin server when skin content is changed and the + * connected client wants to be informed. + * + * @see MAknsSkinChangeObserver + */ + void SkinContentChanged(); + + /** + * Called by the skin server to indicate that the current skin + * configuration has changed. + * + * @see MAknsSkinChangeObserver + */ + void SkinConfigurationChanged( + const TAknsSkinStatusConfigurationChangeReason aReason ); + + /** + * Called by the skin server to indicate that the available + * skin packages have changed. + * + * @see MAknsSkinChangeObserver + */ + void SkinPackageChanged( + const TAknsSkinStatusPackageChangeReason aReason ); + private: // Data CPhoneView* iPhoneView; @@ -812,6 +841,9 @@ TBool iNeedToReturnToForegroundAppAfterCall; CAknIncallBubble* iIncallBubble; + + // Server wich sends events about background image changes + RAknsSrvSession iSkinServerSession; }; #endif // CPHONEVIEWCONTROLLER_H diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/inc/mphoneviewcontrollerobserver.h --- a/phoneapp/phoneuiview/inc/mphoneviewcontrollerobserver.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/inc/mphoneviewcontrollerobserver.h Wed Jun 09 09:41:11 2010 +0300 @@ -38,11 +38,6 @@ * Sets incall small bubble´s visibility in special cases. */ virtual void AllowInCallBubbleInSpecialCases() = 0; - - /** - * Sets Incall bubble´s visibility. - */ - virtual void SetIncallBubbleVisibility( TBool aIncallBubbleVisible ) = 0; }; #endif /* MPHONEVIEWCONTROLLEROBSERVER_H_ */ diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h --- a/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h Wed Jun 09 09:41:11 2010 +0300 @@ -233,6 +233,8 @@ EPhoneViewSetConferenceAndWaitingVideo, EPhoneViewLaunchMultimediaSharing, EPhoneViewGetQwertyModeObserver, + EPhoneViewSetIncallBubbleTrue, + EPhoneViewSetIncallBubbleFalse, EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list. }; diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/src/cphonenote.cpp --- a/phoneapp/phoneuiview/src/cphonenote.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphonenote.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -88,7 +88,9 @@ // Let the command observer process the command iCommandObserver.ProcessCommandL( aCommand ); - return EFalse; // so that the dialog will not disappear + // So that the dialog will not disappear, or must disappear + // EPhoneInCallCmdDtmfManualQuery since it can be already deleted. + return ( aCommand == EPhoneInCallCmdDtmfManualQuery ); } // --------------------------------------------------------- diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/src/cphoneview.cpp --- a/phoneapp/phoneuiview/src/cphoneview.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphoneview.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -192,7 +192,6 @@ { __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::ViewDeactivated()"); SetActivatePreviousApp( EFalse ); - iViewControllerObserver->SetIncallBubbleVisibility( EFalse ); DrawDeferred(); } diff -r b68fcd923911 -r b8d67d6176f5 phoneapp/phoneuiview/src/cphoneviewcontroller.cpp --- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -265,6 +265,8 @@ iAknUiServerClient = CAknSgcClient::AknSrv(); iIncallBubble = CAknIncallBubble::NewL(); + + User::LeaveIfError( iSkinServerSession.Connect( this ) ); } // ----------------------------------------------------------------------------- @@ -290,6 +292,8 @@ { __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::~CPhoneViewController()" ); + iSkinServerSession.Close(); + delete iButtonsController; delete iDialerController; delete iToolbarController; @@ -645,6 +649,20 @@ } break; + case EPhoneViewSetIncallBubbleTrue: + { + // Allow small call bubble, if call handling view is in background and allow for dialer also + SetIncallBubbleVisibility( ETrue ); + } + break; + + case EPhoneViewSetIncallBubbleFalse: + { + // Don't allow small call bubble, if call handling view is not in foreground + SetIncallBubbleVisibility( EFalse ); + } + break; + default: __PHONELOG( EBasic, EPhonePhoneapp, "CPhoneViewController::ExecuteCommandL -> UnKnownMessage !"); @@ -2171,33 +2189,49 @@ iMenuController->SetSecurityMode( aIsEnabled ); if ( iDialer ) { - CDialingExtensionInterface* easyDialing = iDialer->GetEasyDialingInterface(); - if ( easyDialing ) + iDialerController->SetRestrictedDialer( aIsEnabled ); + + if ( iDialerActive && iSecurityMode != aIsEnabled ) { + CDialingExtensionInterface* easyDialing = iDialer->GetEasyDialingInterface(); + if ( easyDialing ) + { + if ( aIsEnabled ) + { + // Reset the Easy Dialing just in case, this clears the existing matches + // when restricted mode is activated + easyDialing->Reset(); + } + else + { + if ( easyDialing->IsEnabled() ) + { + // If Easy Dialing is enabled, set the input from the numeric entry + // field for updating the search result when restricted mode is + // deactivated. + TBuf buf; + iDialer->NumberEntry()->GetTextFromNumberEntry( buf ); + TRAP_IGNORE( easyDialing->SetInputL( buf ) ); + } + } + } + iDialer->RelayoutAndDraw(); + + // also update cba if security mode changes while dialer is open + TPhoneCmdParamInteger integerParam; if ( aIsEnabled ) { - // Reset the Easy Dialing just in case, this clears the existing matches - // when restricted mode is activated - easyDialing->Reset(); + iNoteController->DestroyNote(); + integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneEmergencyModeNoteCBA ) ); } else { - if ( easyDialing->IsEnabled() ) - { - // If Easy Dialing is enabled, set the input from the numeric entry - // field for updating the search result when restricted mode is - // deactivated. - TBuf buf; - iDialer->NumberEntry()->GetTextFromNumberEntry( buf ); - easyDialing->SetInputL( buf ); - } + integerParam.SetInteger( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneNumberAcqCBA ) ); } + TRAP_IGNORE( ExecuteCommandL( EPhoneViewUpdateCba, &integerParam ) ); } - iDialerController->SetRestrictedDialer( aIsEnabled ); - if ( iSecurityMode != aIsEnabled ) - { - iDialer->RelayoutAndDraw(); - } } if ( iSecurityMode != aIsEnabled ) { @@ -3711,7 +3745,7 @@ iStatusPane->StatusPane().SwapControlL( TUid::Uid( EEikStatusPaneUidIndic ), iIndiContainer ); } - else + else if ( iPreviousIndicatorControl ) { //Restore previous indicator control iStatusPane->StatusPane().SwapControlL( @@ -4128,7 +4162,36 @@ "CPhoneViewController::SetIncallBubbleVisibility(%d)", aVisible ); - TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( aVisible ) ); + TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( aVisible ) ); + } + +// --------------------------------------------------------------------------- +// CPhoneViewController::SkinContentChanged +// --------------------------------------------------------------------------- +// +void CPhoneViewController::SkinContentChanged() + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::SkinContentChanged()" ); + iPhoneView->DrawNow(); } +// --------------------------------------------------------------------------- +// CPhoneViewController::SkinConfigurationChanged +// --------------------------------------------------------------------------- +// +void CPhoneViewController::SkinConfigurationChanged( const TAknsSkinStatusConfigurationChangeReason /*aReason*/ ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::SkinConfigurationChanged()" ); + iPhoneView->DrawNow(); + } + +// --------------------------------------------------------------------------- +// CPhoneViewController::SkinPackageChanged +// --------------------------------------------------------------------------- +// +void CPhoneViewController::SkinPackageChanged( const TAknsSkinStatusPackageChangeReason /*aReason*/ ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneViewController::SkinPackageChanged()" ); + iPhoneView->DrawNow(); + } // End of File diff -r b68fcd923911 -r b8d67d6176f5 phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactmatchstrategy.h --- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactmatchstrategy.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactmatchstrategy.h Wed Jun 09 09:41:11 2010 +0300 @@ -55,12 +55,14 @@ * @param aContactManager Contact manager. * @param aUriArray Array of contact store URI's used. * @param aObserver Observer for finding contacts. + * @param aMatchFlags A bitset of flags for matching strategy. Has zero or + * more CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags flags set. */ static CPhCntContactMatchStrategy* NewL( CVPbkContactManager& aContactManager, CPhCntContactStoreUris& aContactStoreUris, MVPbkContactFindObserver& aObserver, - CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag ); + TUint32 aMatchFlags ); /** * Destructor. @@ -135,13 +137,10 @@ CVPbkContactManager& aContactManager, CPhCntContactStoreUris& aContactStoreUris, MVPbkContactFindObserver& aObserver, - CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag ); + TUint32 aMatchFlags ); void ConstructL(); -protected: // data - CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags iMatchFlag; - private: // data /** @@ -200,6 +199,18 @@ */ CCntRawPhoneNumberExtractor* iNumberExtractor; +protected: // data + + /** + * A bitset of matching strategy flags. Changed from + * CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags enum to TUint32 + * in order to support multiple flags, as in + * CVPbkPhoneNumberMatchStrategy::TConfig. + * + * Protected because a unit test class derives from this class. + */ + TUint32 iMatchFlags; + }; diff -r b68fcd923911 -r b8d67d6176f5 phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -118,13 +118,16 @@ MVPbkContactFindObserver& aObserver, TBool aRemoveDuplicates ) { + TUint32 dupesMatch = + CVPbkPhoneNumberMatchStrategy::EVPbkDuplicatedContactsMatchFlag | + CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag; + TUint32 noDupesMatch = CVPbkPhoneNumberMatchStrategy::EVPbkBestMatchingFlag; + return CPhCntContactMatchStrategy::NewL( *iContactManager, *iContactStoreUris, aObserver, - aRemoveDuplicates ? - CVPbkPhoneNumberMatchStrategy::EVPbkDuplicatedContactsMatchFlag : - CVPbkPhoneNumberMatchStrategy::EVPbkMatchFlagsNone ); + aRemoveDuplicates ? dupesMatch : noDupesMatch ); } // --------------------------------------------------------------------------- diff -r b68fcd923911 -r b8d67d6176f5 phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -20,11 +20,13 @@ #include #include #include +#include // KBestMatchingPhoneNumbers #include "cphcntcontactmatchstrategy.h" #include "cphcntcontactstoreuris.h" #include "CPhoneRawMatchNumberExtractor.h" + // Digit count used to match CS number. const TInt KPhCntMatchMin = 7; const TInt KPhCntMatchMax = 11; @@ -37,11 +39,11 @@ CVPbkContactManager& aContactManager, CPhCntContactStoreUris& aContactStoreUris, MVPbkContactFindObserver& aObserver, - CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag ) : + TUint32 aMatchFlags ) : iContactManager( aContactManager ), iContactStoreUris( aContactStoreUris ), iObserver( aObserver ), - iMatchFlag( aMatchFlag ) + iMatchFlags( aMatchFlags ) { iContactStoreUris.SetObserver( *this ); } @@ -91,14 +93,14 @@ CVPbkContactManager& aContactManager, CPhCntContactStoreUris& aContactStoreUris, MVPbkContactFindObserver& aObserver, - CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlag ) + TUint32 aMatchFlags ) { CPhCntContactMatchStrategy* self = new( ELeave ) CPhCntContactMatchStrategy( aContactManager, aContactStoreUris, aObserver, - aMatchFlag ); + aMatchFlags ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -242,10 +244,10 @@ TInt CPhCntContactMatchStrategy::DoCreateMatchStrategy() { CVPbkPhoneNumberMatchStrategy::TConfig config( - iNumberOfDigits, + KBestMatchingPhoneNumbers, *iUriArray, CVPbkPhoneNumberMatchStrategy::EVPbkSequentialMatch, - iMatchFlag + iMatchFlags ); TRAPD( err, iMatchStrategy = CVPbkPhoneNumberMatchStrategy::NewL( config, diff -r b68fcd923911 -r b8d67d6176f5 phoneengine/phonemodel/inc/cpemessagehandler.h --- a/phoneengine/phonemodel/inc/cpemessagehandler.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneengine/phonemodel/inc/cpemessagehandler.h Wed Jun 09 09:41:11 2010 +0300 @@ -593,6 +593,13 @@ * Handle disable service */ void HandleDisableService(); + + /** + * Adds SIM rejected MO CS call to logs. + * @param aCallId is the identification number of the call. + * @return KErrNone if succesfull + */ + TInt AddSIMRejectedMoCsCallToLog( const TInt aCallId ); private: // New functions diff -r b68fcd923911 -r b8d67d6176f5 phoneengine/phonemodel/src/cpemessagehandler.cpp --- a/phoneengine/phonemodel/src/cpemessagehandler.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneengine/phonemodel/src/cpemessagehandler.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -3009,5 +3009,42 @@ mediatorUpdater->UpdateRemotePartyInfo(); } } - + +// ----------------------------------------------------------------------------- +// CPEMessageHandler::AddSIMRejectedMoCsCallToLog +// ----------------------------------------------------------------------------- +// +TInt CPEMessageHandler::AddSIMRejectedMoCsCallToLog( const TInt aCallId ) + { + TInt errorCode( ECCPErrorGeneral ); + + errorCode = iCallHandling.GetCallInfo( *iCallInfo, aCallId ); + + if ( errorCode == ECCPErrorNone ) + { + TPEState callState; + callState = iCallHandling.GetCallState( aCallId ); + TPECallType callType; + callType = iDataStore.CallType( aCallId ); + + errorCode = ECCPErrorNotFound; + + if ( EPEStateIdle == callState + && EPECallTypeCSVoice == callType ) + { + SetPhoneNumberForCallLogging( aCallId ); + + errorCode = UpdateClientInfo( aCallId ); + + // Calls have to log also without a contact (ECCPErrorNotFound). + if ( errorCode == ECCPErrorNone || errorCode == ECCPErrorNotFound ) + { + // Save the rest of information to EngineInfo. + SetLoggingInfo( aCallId, callState ); + errorCode = iLogHandling.SaveCallEntry( aCallId ); + } + } + } + return errorCode; + } // End of File diff -r b68fcd923911 -r b8d67d6176f5 phoneengine/phonemodel/src/cpephonemodel.cpp --- a/phoneengine/phonemodel/src/cpephonemodel.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneengine/phonemodel/src/cpephonemodel.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -980,8 +980,15 @@ TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo(); errorInfo.iCallId = aCallId; errorInfo.iErrorType = EPECcp; - iEngineMonitor.HandleError( errorInfo ); - } + + if ( ECCPErrorCCCallRejected == errorInfo.iErrorCode ) + { + // Call direction is not set if the call was rejected before Dialing-state + iEngineInfo->SetCallDirection( RMobileCall::EMobileOriginated, aCallId ); + iMessageHandler->AddSIMRejectedMoCsCallToLog( aCallId ); + } + iEngineMonitor.HandleError( errorInfo ); + } else if ( message == MEngineMonitor::EPEMessageServiceHandlingError ) { TEFLOGSTRING( diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/dialer/src/cdialernumberentry.cpp --- a/phoneuis/dialer/src/cdialernumberentry.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/dialer/src/cdialernumberentry.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -159,9 +159,15 @@ { DIALER_PRINT("numberentry::SetFocus<"); - CCoeControl::SetFocus( aFocus, aDrawNow ); - iEditor->SetFocus( aFocus ); + if ( aFocus != IsFocused() ) + { + CCoeControl::SetFocus( aFocus, aDrawNow ); + } + if ( aFocus != iEditor->IsFocused() ) + { + iEditor->SetFocus( aFocus ); + } DIALER_PRINT("numberentry::SetFocus>"); } diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/inc/easydialinglistbox.h --- a/phoneuis/easydialing/inc/easydialinglistbox.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/inc/easydialinglistbox.h Wed Jun 09 09:41:11 2010 +0300 @@ -185,7 +185,7 @@ /** Background control context. Owned. */ CAknsFrameBackgroundControlContext* iBGContext; - + /** Pointer to a contact data manager; Not Own. */ CEasyDialingContactDataManager* iContactDataManager; diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/inc/easydialinglistboxdata.h --- a/phoneuis/easydialing/inc/easydialinglistboxdata.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/inc/easydialinglistboxdata.h Wed Jun 09 09:41:11 2010 +0300 @@ -62,20 +62,15 @@ /** - * Constructor. - */ - CEasyDialingListBoxData(); - - /** * Destructor */ ~CEasyDialingListBoxData(); /** - * Second phase constructor of the class. + * Two phased constructor of the class. * @return Pointer to the instance. */ - static CEasyDialingListBoxData* NewL(); + static CEasyDialingListBoxData* NewL( CCoeEnv& aCoeEnv ); /** * Draws selected item. @@ -100,7 +95,7 @@ * @param aContactDataManager Contact data manager. */ void SetContactDataManager( CEasyDialingContactDataManager* aContactDataManager ); - + /** * Sets a pointer to listbox class. Called from listbox constructor. * @param aControl Pointer to easy dialing listbox cotrol. @@ -114,6 +109,14 @@ protected: + /** + * C++ Constructor + */ + CEasyDialingListBoxData( CCoeEnv& aCoeEnv ); + + /** + * Second phase constructor + */ void ConstructLD(); private: @@ -150,7 +153,7 @@ const TRect& aItemRect, TBool aHighlight, const TExtendedColors& aColors ) const; - + /** * Draws the Contact Thumbnail Icon if any else draws the dummy contact thumbnail. * @param aGc Graphics context. @@ -174,7 +177,7 @@ * must be unmirrored, because the mirroring is done as the last thing * before drawing. * @param aGc Graphics context. - * @param aNameRectUnMirrored Name rect, where fav star is contained + * @param aNameRectUnMirrored Name rect, after which the icon is drawn * @param aEffectiveRect The whole listbox item rect. Used for mirroring. */ void DrawFavouriteIcon( @@ -184,6 +187,9 @@ private: + /** Control environment */ + CCoeEnv& iCoeEnv; + /** Font to be used showing contact name. Not owned. */ CFont* iContactNameFont; @@ -198,10 +204,10 @@ /** Action Menu RightPointing Arrow. Owned. */ CGulIcon* iArrowPointingLeft; - + /** Action icon color bitmap. Owned. */ CFbsBitmap* iColorBitmap; - + /** Default image for contacts with no own thumbnail. Owned. */ CGulIcon* iDummyThumbnail; diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/inc/easydialingplugin.h --- a/phoneuis/easydialing/inc/easydialingplugin.h Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/inc/easydialingplugin.h Wed Jun 09 09:41:11 2010 +0300 @@ -30,9 +30,6 @@ #include "medcontactorobserver.h" #include "easydialingcontactdatamanager.h" // for TNameOrder -// Phonebook engine API -#include - // ListBox Observer API #include @@ -78,7 +75,6 @@ * Easy dialing plugin. */ class CEasyDialingPlugin : public CDialingExtensionInterface, - public MVPbkContactStoreListObserver, public MPsResultsObserver, public MCCAObserver, public MEasyDialingCenrepListenerObserver, @@ -220,27 +216,6 @@ public: /** - * From MVPbkContactStoreListObserver. - */ - void StoreReady(MVPbkContactStore& aContactStore); - - /** - * From MVPbkContactStoreListObserver. - */ - void StoreUnavailable(MVPbkContactStore& aContactStore, TInt aReason); - - /** - * From MVPbkContactStoreListObserver. - */ - void HandleStoreEventL( MVPbkContactStore& aContactStore, - TVPbkContactStoreEvent aStoreEvent); - - /** - * From MVPbkContactStoreListObserver. - */ - void OpenComplete(); - - /** * From MEasyDialingCenrepListenerObserver. */ void EasyDialingSettingsChanged( TInt aValue ); @@ -446,6 +421,11 @@ */ void SetInfoLabelColourL(); + /** + * Sets info label visibility. + */ + void SetInfoLabelVisibleL( TBool aVisible ); + private: /** Textual version of current search string. */ diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/src/easydialinglistbox.cpp --- a/phoneuis/easydialing/src/easydialinglistbox.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/src/easydialinglistbox.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -98,7 +98,7 @@ // CEasyDialingListBox::~CEasyDialingListBox() { - delete iBGContext; + delete iBGContext; delete iLongTapDetector; } @@ -121,7 +121,7 @@ iBGContext = CAknsFrameBackgroundControlContext::NewL( KAknsIIDQsnFrPopupSub, Rect(), Rect(), EFalse ); - + // ContactDataManager is accessed from SizeChanged. If list item size // changes -> thumbnail size changes iContactDataManager = aContactDataManager; @@ -178,7 +178,7 @@ // void CEasyDialingListBox::CreateItemDrawerL() { - CEasyDialingListBoxData* celldata = CEasyDialingListBoxData::NewL(); + CEasyDialingListBoxData* celldata = CEasyDialingListBoxData::NewL( *iEikonEnv ); CleanupStack::PushL( celldata ); iItemDrawer = new(ELeave) CEasyDialingListBoxItemDrawer(Model(), iEikonEnv->NormalFont(), celldata); CleanupStack::Pop( celldata ); diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/src/easydialinglistboxdata.cpp --- a/phoneuis/easydialing/src/easydialinglistboxdata.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/src/easydialinglistboxdata.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -60,14 +60,14 @@ const TInt KContactNameFontHeightPercent = 35; // KCompanyNameFontHeightPercent is company name font height relative to list item height. -const TInt KCompanyNameFontHeightPercent = 30; +const TInt KCompanyNameFontHeightPercent = 28; -// KTextBoundingBoxHeightPercent gives the text bounding box height in percentages +// KTextBoundingBoxHeightPercent gives the text bounding box height in percents // relative to font height. This must be over 100, or part of the text cuts off. const TInt KTextBoundingBoxHeightPercent = 120; // KTextPlacementPercent controls how text is placed vertically within its bounding box. -// The value is between 0 and 100. 0 means in top part, 50 mean in the middle, 100 means in the +// The value is between 0 and 100. 0 means in top part, 50 means in the middle, 100 means in the // bottom. const TInt KTextPlacementPercent = 70; @@ -228,8 +228,8 @@ // // ----------------------------------------------------------------------------- // -CEasyDialingListBoxData::CEasyDialingListBoxData() : -CFormattedCellListBoxData() +CEasyDialingListBoxData::CEasyDialingListBoxData( CCoeEnv& aCoeEnv ) : +CFormattedCellListBoxData(), iCoeEnv( aCoeEnv ) { } @@ -242,7 +242,7 @@ { // Release fonts. ReleaseFont function can cope with null pointer // so we don't need to null check them. - CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() ); + CWsScreenDevice& screenDev = *( iCoeEnv.ScreenDevice() ); screenDev.ReleaseFont( iContactNameFont ); screenDev.ReleaseFont( iCompanyNameFont ); @@ -260,9 +260,9 @@ // // ----------------------------------------------------------------------------- // -CEasyDialingListBoxData* CEasyDialingListBoxData::NewL() +CEasyDialingListBoxData* CEasyDialingListBoxData::NewL( CCoeEnv& aCoeEnv ) { - CEasyDialingListBoxData* self = new (ELeave) CEasyDialingListBoxData(); + CEasyDialingListBoxData* self = new (ELeave) CEasyDialingListBoxData( aCoeEnv ); CleanupStack::PushL( self ); self->ConstructLD(); @@ -562,8 +562,8 @@ // void CEasyDialingListBoxData::DrawFavouriteIcon( CWindowGc& aGc, - TRect aNameRectUnMirrored, - TRect aEffectiveRect) const + TRect aNameRectUnMirrored, + TRect aEffectiveRect ) const { TRect favouriteIconBoundingBox; @@ -577,7 +577,7 @@ aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); TRect sourceRect( TPoint(0,0), favouriteIconBoundingBox.Size() ); - if( AknsUtils::SkinInstance()->GetCachedItemData(KAknsIIDQgnFsContactsFavorite) ) + if ( AknsUtils::SkinInstance()->GetCachedItemData(KAknsIIDQgnFsContactsFavorite) ) { AknsDrawUtils::DrawCachedImage( AknsUtils::SkinInstance(), aGc, sourceRect, KAknsIIDQgnFsContactsFavorite ); @@ -587,8 +587,8 @@ // Set size for the bitmap and mask AknIconUtils::SetSize( iFavouriteIcon->Bitmap(), favouriteIconBoundingBox.Size() ); AknIconUtils::SetSize( iFavouriteIcon->Mask(), favouriteIconBoundingBox.Size() ); - aGc.BitBltMasked( favouriteIconBoundingBox.iTl , iFavouriteIcon->Bitmap(), - sourceRect, iFavouriteIcon->Mask(), ETrue); + aGc.BitBltMasked( favouriteIconBoundingBox.iTl, iFavouriteIcon->Bitmap(), + sourceRect, iFavouriteIcon->Mask(), ETrue ); } } // ----------------------------------------------------------------------------- @@ -625,7 +625,7 @@ // void CEasyDialingListBoxData::ObtainFonts( TInt aItemHeight ) { - CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() ); + CWsScreenDevice& screenDev = *( iCoeEnv.ScreenDevice() ); // Release previous fonts. ReleaseFont function can cope with null pointers // so we don't need to null check them. @@ -1078,7 +1078,7 @@ aGc.UseFont( aFont ); aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); - while ( TextUtils::ColumnText( textPiece , textPieceIndex, visualBuf, KHighlightSeparatorChar) == KErrNone ) + while ( TextUtils::ColumnText( textPiece, textPieceIndex, visualBuf, KHighlightSeparatorChar) == KErrNone ) { if (! DrawPieceOfText( aBoundingBox, xOffset, aGc, textPiece, match, aFont, aColors, aHighLight )) { diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp --- a/phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -123,8 +123,6 @@ transApi->StopDrawing(); } -// TBool removeicon = (!aItemIsSelected && !ItemMarkReverse()) || (aItemIsSelected && ItemMarkReverse()); - CEasyDialingListBoxData::TExtendedColors colors; colors.iText = iTextColor; colors.iBack = iBackColor; diff -r b68fcd923911 -r b8d67d6176f5 phoneuis/easydialing/src/easydialingplugin.cpp --- a/phoneuis/easydialing/src/easydialingplugin.cpp Tue May 25 12:41:50 2010 +0300 +++ b/phoneuis/easydialing/src/easydialingplugin.cpp Wed Jun 09 09:41:11 2010 +0300 @@ -61,10 +61,6 @@ // Service provider settings api #include -// AIW header files -#include -#include - #include // CCA contactor service. @@ -136,7 +132,7 @@ TBool IsStrictlyBidirectional( const TDesC& aText ); -static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc ); +static HBufC* AllocWithoutHighlightSeparatorsLC( const TDesC& aDesc ); static TBool IsItuTCharacter( TChar aChar ); @@ -195,9 +191,6 @@ iContactStoreUriArray->AppendL( TVPbkContactStoreUriPtr( VPbkContactStoreUris::DefaultCntDbUri() ) ); iContactManager = CVPbkContactManager::NewL( *iContactStoreUriArray ); - // Set contact store observer to listen to contact store events. - iContactManager->ContactStoresL().OpenAllL( *this ); - iContactDataManager = new (ELeave) CEasyDialingContactDataManager(iContactManager); iContactDataManager->ConstructL(); iContactDataManager->SetObserver(this); @@ -246,11 +239,6 @@ { iObservers.Reset(); - if ( iContactManager ) - { - TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) ); - } - delete iCenrepListener; delete iContactDataManager; delete iPredictiveSearchQuery; @@ -258,7 +246,7 @@ delete iContactStoreUriArray; iContactDataStores.ResetAndDestroy(); - if (iPredictiveContactSearchHandler) + if ( iPredictiveContactSearchHandler ) { iPredictiveContactSearchHandler->RemoveObserver(this); } @@ -278,7 +266,7 @@ delete iContactListBox; - if (iContactLauncher) + if ( iContactLauncher ) { iContactLauncher->Close(); } @@ -719,7 +707,7 @@ void CEasyDialingPlugin::FocusChanged( TDrawNow aDrawNow ) { iContactListBox->SetFocus( IsFocused() ); - if( !IsFocused() ) + if ( !IsFocused() ) { // To be on the safe side, cancel async callback and reset input block. CancelActionLaunchAndInputBlock(); @@ -763,18 +751,12 @@ // However if user empties number entry, then it's feasible to show // effect. HideContactListBoxWithEffect(); - iInfoLabelLine1->SetTextL( *iInfoLabelTextLine1 ); - iInfoLabelLine2->SetTextL( *iInfoLabelTextLine2 ); - iInfoLabelLine1->DrawDeferred(); - iInfoLabelLine2->DrawDeferred(); + SetInfoLabelVisibleL( ETrue ); Reset(); } else // proper search string { - iInfoLabelLine1->SetTextL( KNullDesC ); - iInfoLabelLine2->SetTextL( KNullDesC ); - iInfoLabelLine1->DrawDeferred(); - iInfoLabelLine2->DrawDeferred(); + SetInfoLabelVisibleL( EFalse ); iSearchString.Copy( aSearchString.Left( iSearchString.MaxLength() ) ); LaunchSearchL(); } @@ -793,69 +775,6 @@ // ----------------------------------------------------------------------------- -// CEasyDialingPlugin::StoreReady -// From MVPbkContactStoreListObserver. -// -// ----------------------------------------------------------------------------- -// -void CEasyDialingPlugin::StoreReady(MVPbkContactStore& /* aContactStore */) - { - - } - - -// ----------------------------------------------------------------------------- -// CEasyDialingPlugin::StoreUnavailable -// From MVPbkContactStoreListObserver. -// -// ----------------------------------------------------------------------------- -// -void CEasyDialingPlugin::StoreUnavailable(MVPbkContactStore& /* aContactStore */, TInt /* aReason */) - { - - } - - -// ----------------------------------------------------------------------------- -// CEasyDialingPlugin::HandleStoreEventL -// From MVPbkContactStoreListObserver. -// -// ----------------------------------------------------------------------------- -// -void CEasyDialingPlugin::HandleStoreEventL( MVPbkContactStore& /* aContactStore */, - TVPbkContactStoreEvent aStoreEvent) - { - // Store's observers are informed one by one using active object so one shouldn't - // perform search syncronously as one must try to ensure that PCS has had a - // chance to update its store. However there seems to be no way to be - // 100% sure that PCS is up-to-date when search is launched: telephony app - // has such a high priority and there are no APIs to query PCS' status. - switch ( aStoreEvent.iEventType ) - { - case TVPbkContactStoreEvent::EContactAdded: - case TVPbkContactStoreEvent::EContactDeleted: - case TVPbkContactStoreEvent::EContactChanged: - { - DoHandleContactsChangedL(); - } - break; - - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CEasyDialingPlugin::OpenComplete -// From MVPbkContactStoreListObserver. -// -// ----------------------------------------------------------------------------- -// -void CEasyDialingPlugin::OpenComplete() - { - } - -// ----------------------------------------------------------------------------- // EasyDialingSettingsChanged // From MEasyDialingCenrepListenerObserver // ----------------------------------------------------------------------------- @@ -866,10 +785,15 @@ { Reset(); InformObservers( MDialingExtensionObserver::EEasyDialingDisabled ); + TRAP_IGNORE( SetInfoLabelVisibleL( EFalse ) ); } else if ( aValue == 1 ) { InformObservers( MDialingExtensionObserver::EEasyDialingEnabled ); + if ( iSearchString.Length() == 0 ) + { + TRAP_IGNORE( SetInfoLabelVisibleL( ETrue ) ); + } } MakeVisible( aValue ); } @@ -906,6 +830,8 @@ if ( iPredictiveContactSearchHandler ) { TRAP_IGNORE( SetSortOrderL( iContactDataManager->NameOrder() ) ); + // Refresh current results if needed + TRAP_IGNORE( DoHandleContactsChangedL() ); } } @@ -926,7 +852,6 @@ // void CEasyDialingPlugin::InformContactorEvent( MEDContactorObserver::TEvent aEvent ) { - // This callback function simply propagates the events to its own listener. switch ( aEvent ) { @@ -958,7 +883,6 @@ // void CEasyDialingPlugin::Draw( const TRect& /* aRect */ ) const { - return; } @@ -1054,6 +978,18 @@ void CEasyDialingPlugin::CachingStatus( TCachingStatus& aStatus, TInt& aError ) { OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_CACHINGSTATUS, "PCS CachingStatus: %d, error: %d", ( TUint )( aStatus ), aError ); + + switch ( aStatus ) + { + case ECacheUpdateContactRemoved: + case ECacheUpdateContactModified: + case ECacheUpdateContactAdded: + TRAP_IGNORE( DoHandleContactsChangedL() ); + break; + default: + break; + } + LOGSTRING2("EasyDialingPlugin: PCS CachingStatus: %d, error: %d", aStatus, aError ); } @@ -1255,17 +1191,6 @@ CAknAppUi* appUi = static_cast( iCoeEnv->AppUi() ); appUi->HandleCommandL( EPhoneCmdBlockingDialogClosed ); - - // If contacts have been edited during contact launcher being open, a new search - // needs to be done. - if ( iNewSearchNeeded ) - { - // The cached information in contact data manager may be outdated. Call to reload makes sure that when the - // search is made, all data is loaded again. - iContactDataManager->Reload(); - - LaunchSearchL(); - } // Give up focus, if iRememberFocus flag is not set. if ( !iRememberFocus ) @@ -1986,6 +1911,14 @@ // void CEasyDialingPlugin::HandleGainingForeground() { + if ( iNewSearchNeeded && IsEnabled() ) + { + // The cached information in contact data manager may be outdated. Call to reload makes sure that when the + // search is made, all data is loaded again. + iContactDataManager->Reload(); + + LaunchSearchL(); + } } // ----------------------------------------------------------------------------- @@ -2023,19 +1956,29 @@ // void CEasyDialingPlugin::DoHandleContactsChangedL() { - if ( iSearchString.Length() > 0 ) + if ( iSearchString.Length() > 0 && IsEnabled() ) { - if ( iContactLauncherActive ) + CAknAppUi* appUi = static_cast( iCoeEnv->AppUi() ); + if ( appUi->IsForeground() ) { - // Set the flag to make a search when communication launcher exits. - iNewSearchNeeded = ETrue; + // Do new search immediately, if contacts change while we are on the + // foreground. This can happen for example if view is switched to + // dialer while deletion of multiple contacts is still ongoing or if + // PCS takes so long to update the cache that view gets changed + // before the update is ready. + iContactDataManager->Reload(); // to update thumbnails + AsyncActionLaunchL( ELaunchSearch ); } else { - // We get here if user e.g. leaves dialer open and goes to Contacts - // application and does some editing. - iContactDataManager->Reload(); // to update thumbnails - AsyncActionLaunchL( ELaunchSearch ); + // Set the flag to make a search when we come back to foreground. + // This way, we don't make unnecessary searches when several + // contacts are imported or deleted, for example. + iNewSearchNeeded = ETrue; + + // Hide previous results so that they won't show up before the + // the new search is ready. + iContactListBox->MakeVisible( EFalse ); } } } @@ -2129,6 +2072,26 @@ } } +// ----------------------------------------------------------------------------- +// CEasyDialingPlugin::SetInfoLabelVisibleL +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::SetInfoLabelVisibleL( TBool aVisible ) + { + if ( aVisible ) + { + iInfoLabelLine1->SetTextL( *iInfoLabelTextLine1 ); + iInfoLabelLine2->SetTextL( *iInfoLabelTextLine2 ); + } + else + { + iInfoLabelLine1->SetTextL( KNullDesC ); + iInfoLabelLine2->SetTextL( KNullDesC ); + } + iInfoLabelLine1->DrawDeferred(); + iInfoLabelLine2->DrawDeferred(); + } + /* * ============================================================================== @@ -2319,7 +2282,7 @@ // removed. // ----------------------------------------------------------------------------- // -static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc ) +static HBufC* AllocWithoutHighlightSeparatorsLC( const TDesC& aDesc ) { HBufC* resultDesc = aDesc.AllocLC(); TPtr ptr = resultDesc->Des();